Merge "Remove RenderComparison" into androidx-master-dev
diff --git a/annotation/annotation-experimental/api/1.0.0.txt b/annotation/annotation-experimental/api/1.0.0.txt
new file mode 100644
index 0000000..fce9faf2
--- /dev/null
+++ b/annotation/annotation-experimental/api/1.0.0.txt
@@ -0,0 +1,18 @@
+// Signature format: 3.0
+package androidx.annotation.experimental {
+
+ @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.ANNOTATION_TYPE}) public @interface Experimental {
+ method public abstract androidx.annotation.experimental.Experimental.Level level() default androidx.annotation.experimental.Experimental.Level.ERROR;
+ }
+
+ public enum Experimental.Level {
+ enum_constant public static final androidx.annotation.experimental.Experimental.Level ERROR;
+ enum_constant public static final androidx.annotation.experimental.Experimental.Level WARNING;
+ }
+
+ @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.CONSTRUCTOR, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.PACKAGE}) public @interface UseExperimental {
+ method public abstract Class<?> markerClass();
+ }
+
+}
+
diff --git a/annotation/annotation-experimental/api/1.1.0-alpha01.txt b/annotation/annotation-experimental/api/1.1.0-alpha01.txt
new file mode 100644
index 0000000..fce9faf2
--- /dev/null
+++ b/annotation/annotation-experimental/api/1.1.0-alpha01.txt
@@ -0,0 +1,18 @@
+// Signature format: 3.0
+package androidx.annotation.experimental {
+
+ @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.ANNOTATION_TYPE}) public @interface Experimental {
+ method public abstract androidx.annotation.experimental.Experimental.Level level() default androidx.annotation.experimental.Experimental.Level.ERROR;
+ }
+
+ public enum Experimental.Level {
+ enum_constant public static final androidx.annotation.experimental.Experimental.Level ERROR;
+ enum_constant public static final androidx.annotation.experimental.Experimental.Level WARNING;
+ }
+
+ @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.CONSTRUCTOR, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.PACKAGE}) public @interface UseExperimental {
+ method public abstract Class<?> markerClass();
+ }
+
+}
+
diff --git a/annotation/annotation-experimental/api/public_plus_experimental_1.0.0.txt b/annotation/annotation-experimental/api/public_plus_experimental_1.0.0.txt
new file mode 100644
index 0000000..fce9faf2
--- /dev/null
+++ b/annotation/annotation-experimental/api/public_plus_experimental_1.0.0.txt
@@ -0,0 +1,18 @@
+// Signature format: 3.0
+package androidx.annotation.experimental {
+
+ @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.ANNOTATION_TYPE}) public @interface Experimental {
+ method public abstract androidx.annotation.experimental.Experimental.Level level() default androidx.annotation.experimental.Experimental.Level.ERROR;
+ }
+
+ public enum Experimental.Level {
+ enum_constant public static final androidx.annotation.experimental.Experimental.Level ERROR;
+ enum_constant public static final androidx.annotation.experimental.Experimental.Level WARNING;
+ }
+
+ @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.CONSTRUCTOR, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.PACKAGE}) public @interface UseExperimental {
+ method public abstract Class<?> markerClass();
+ }
+
+}
+
diff --git a/annotation/annotation-experimental/api/public_plus_experimental_1.1.0-alpha01.txt b/annotation/annotation-experimental/api/public_plus_experimental_1.1.0-alpha01.txt
new file mode 100644
index 0000000..fce9faf2
--- /dev/null
+++ b/annotation/annotation-experimental/api/public_plus_experimental_1.1.0-alpha01.txt
@@ -0,0 +1,18 @@
+// Signature format: 3.0
+package androidx.annotation.experimental {
+
+ @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.ANNOTATION_TYPE}) public @interface Experimental {
+ method public abstract androidx.annotation.experimental.Experimental.Level level() default androidx.annotation.experimental.Experimental.Level.ERROR;
+ }
+
+ public enum Experimental.Level {
+ enum_constant public static final androidx.annotation.experimental.Experimental.Level ERROR;
+ enum_constant public static final androidx.annotation.experimental.Experimental.Level WARNING;
+ }
+
+ @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.CONSTRUCTOR, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.PACKAGE}) public @interface UseExperimental {
+ method public abstract Class<?> markerClass();
+ }
+
+}
+
diff --git a/annotation/annotation-experimental/api/res-1.0.0.txt b/annotation/annotation-experimental/api/res-1.0.0.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/annotation/annotation-experimental/api/res-1.0.0.txt
diff --git a/annotation/annotation-experimental/api/res-1.1.0-alpha01.txt b/annotation/annotation-experimental/api/res-1.1.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/annotation/annotation-experimental/api/res-1.1.0-alpha01.txt
diff --git a/annotation/annotation-experimental/api/restricted_1.0.0.txt b/annotation/annotation-experimental/api/restricted_1.0.0.txt
new file mode 100644
index 0000000..fce9faf2
--- /dev/null
+++ b/annotation/annotation-experimental/api/restricted_1.0.0.txt
@@ -0,0 +1,18 @@
+// Signature format: 3.0
+package androidx.annotation.experimental {
+
+ @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.ANNOTATION_TYPE}) public @interface Experimental {
+ method public abstract androidx.annotation.experimental.Experimental.Level level() default androidx.annotation.experimental.Experimental.Level.ERROR;
+ }
+
+ public enum Experimental.Level {
+ enum_constant public static final androidx.annotation.experimental.Experimental.Level ERROR;
+ enum_constant public static final androidx.annotation.experimental.Experimental.Level WARNING;
+ }
+
+ @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.CONSTRUCTOR, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.PACKAGE}) public @interface UseExperimental {
+ method public abstract Class<?> markerClass();
+ }
+
+}
+
diff --git a/annotation/annotation-experimental/api/restricted_1.1.0-alpha01.txt b/annotation/annotation-experimental/api/restricted_1.1.0-alpha01.txt
new file mode 100644
index 0000000..fce9faf2
--- /dev/null
+++ b/annotation/annotation-experimental/api/restricted_1.1.0-alpha01.txt
@@ -0,0 +1,18 @@
+// Signature format: 3.0
+package androidx.annotation.experimental {
+
+ @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.ANNOTATION_TYPE}) public @interface Experimental {
+ method public abstract androidx.annotation.experimental.Experimental.Level level() default androidx.annotation.experimental.Experimental.Level.ERROR;
+ }
+
+ public enum Experimental.Level {
+ enum_constant public static final androidx.annotation.experimental.Experimental.Level ERROR;
+ enum_constant public static final androidx.annotation.experimental.Experimental.Level WARNING;
+ }
+
+ @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.CONSTRUCTOR, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.PACKAGE}) public @interface UseExperimental {
+ method public abstract Class<?> markerClass();
+ }
+
+}
+
diff --git a/benchmark/common/build.gradle b/benchmark/common/build.gradle
index 7b3bb3d..29fde4c 100644
--- a/benchmark/common/build.gradle
+++ b/benchmark/common/build.gradle
@@ -30,7 +30,7 @@
dependencies {
implementation(KOTLIN_STDLIB)
implementation("androidx.annotation:annotation:1.0.0")
- implementation(project(":annotation:annotation-experimental"))
+ implementation("androidx.annotation:annotation-experimental:1.0.0-rc01")
implementation(ANDROIDX_TEST_MONITOR)
androidTestImplementation(ANDROIDX_TEST_RULES)
diff --git a/biometric/res/values/devices.xml b/biometric/res/values/devices.xml
index 64c9b1b..5ddac9e 100644
--- a/biometric/res/values/devices.xml
+++ b/biometric/res/values/devices.xml
@@ -20,7 +20,8 @@
List of known device models which may (incorrectly) return a weak biometric authenticator when
attempting crypto-based authentication. All devices in this list should explicitly fall back
to using FingerprintDialogFragment and FingerprintHelperFragment when crypto-based
- authentication is invoked by calling BiometricPrompt#authenticate(PromptInfo, CryptoObject).
+ authentication is invoked by calling BiometricPrompt#authenticate(PromptInfo, CryptoObject) on
+ affected Android versions.
-->
<string-array name="crypto_fingerprint_fallback_prefixes">
<item>SM-G95</item> <!-- Samsung Galaxy S8/S8+ -->
@@ -33,6 +34,17 @@
</string-array>
<!--
+ List of known device vendors which may (incorrectly) return a weak biometric authenticator when
+ attempting crypto-based authentication. Devices from vendors in this list should explicitly fall
+ back to using FingerprintDialogFragment and FingerprintHelperFragment when crypto-based
+ authentication is invoked by calling BiometricPrompt#authenticate(PromptInfo, CryptoObject) on
+ affected Android versions.
+ -->
+ <string-array name="crypto_fingerprint_fallback_vendors">
+ <item>samsung</item>
+ </string-array>
+
+ <!--
List of known device models for which FingerprintDialogFragment should always be dismissed
instantly. This is intended to improve responsiveness on devices for which this dialog is
needed as a workaround but which otherwise display a custom UI, such as an overlay.
diff --git a/biometric/src/main/java/androidx/biometric/BiometricPrompt.java b/biometric/src/main/java/androidx/biometric/BiometricPrompt.java
index f680ba85..0ef8f70 100644
--- a/biometric/src/main/java/androidx/biometric/BiometricPrompt.java
+++ b/biometric/src/main/java/androidx/biometric/BiometricPrompt.java
@@ -710,7 +710,7 @@
// Force some devices to fall back to fingerprint in order to support strong (crypto) auth.
final boolean shouldForceFingerprint = DEBUG_FORCE_FINGERPRINT
|| (activity != null && crypto != null && Utils.shouldUseFingerprintForCrypto(
- activity, Build.MODEL));
+ activity, Build.MANUFACTURER, Build.MODEL));
if (!shouldForceFingerprint && canUseBiometricFragment()) {
BiometricFragment biometricFragment =
diff --git a/biometric/src/main/java/androidx/biometric/Utils.java b/biometric/src/main/java/androidx/biometric/Utils.java
index 9d844f7..f285954 100644
--- a/biometric/src/main/java/androidx/biometric/Utils.java
+++ b/biometric/src/main/java/androidx/biometric/Utils.java
@@ -160,17 +160,19 @@
* BiometricPrompt.CryptoObject)} is called.
*
* @param context The application or activity context.
+ * @param vendor Name of the device vendor/manufacturer.
* @param model Model name of the current device.
* @return true if the current device should fall back to fingerprint for crypto-based
* authentication, or false otherwise.
*/
- static boolean shouldUseFingerprintForCrypto(@NonNull Context context, String model) {
- if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P
- || Build.VERSION.SDK_INT > Build.VERSION_CODES.Q) {
- // This workaround is only needed for Android P and Q.
+ static boolean shouldUseFingerprintForCrypto(@NonNull Context context, String vendor,
+ String model) {
+ if (Build.VERSION.SDK_INT != Build.VERSION_CODES.P) {
+ // This workaround is only needed for API 28.
return false;
}
- return isModelInPrefixList(context, model, R.array.crypto_fingerprint_fallback_prefixes);
+ return isVendorInList(context, vendor, R.array.crypto_fingerprint_fallback_vendors)
+ || isModelInPrefixList(context, model, R.array.crypto_fingerprint_fallback_prefixes);
}
/**
@@ -185,15 +187,37 @@
*/
static boolean shouldAlwaysHideFingerprintDialogInstantly(@NonNull Context context,
String model) {
- if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P
- || Build.VERSION.SDK_INT > Build.VERSION_CODES.Q) {
- // This workaround is only needed for Android P and Q.
+ if (Build.VERSION.SDK_INT != Build.VERSION_CODES.P) {
+ // This workaround is only needed for API 28.
return false;
}
return isModelInPrefixList(context, model, R.array.hide_fingerprint_instantly_prefixes);
}
/**
+ * Determines if the name of the current device vendor matches one in the given string array
+ * resource.
+ *
+ * @param context The application or activity context.
+ * @param vendor Case-insensitive name of the device vendor.
+ * @param resId Resource ID for the string array of vendor names to check against.
+ * @return true if the vendor name matches one in the given string array, or false otherwise.
+ */
+ private static boolean isVendorInList(@NonNull Context context, String vendor, int resId) {
+ if (vendor == null) {
+ return false;
+ }
+
+ final String[] vendorNames = context.getResources().getStringArray(resId);
+ for (final String vendorName : vendorNames) {
+ if (vendor.equalsIgnoreCase(vendorName)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
* Determines if the current device model matches a prefix in the given string array resource.
*
* @param context The application or activity context.
diff --git a/browser/api/1.2.0-alpha10.txt b/browser/api/1.2.0-alpha10.txt
new file mode 100644
index 0000000..e62901e
--- /dev/null
+++ b/browser/api/1.2.0-alpha10.txt
@@ -0,0 +1,408 @@
+// Signature format: 3.0
+package androidx.browser.browseractions {
+
+ @Deprecated public class BrowserActionItem {
+ ctor @Deprecated public BrowserActionItem(String, android.app.PendingIntent, @DrawableRes int);
+ ctor @Deprecated public BrowserActionItem(String, android.app.PendingIntent);
+ method @Deprecated public android.app.PendingIntent getAction();
+ method @Deprecated public int getIconId();
+ method @Deprecated public String getTitle();
+ }
+
+ @Deprecated public class BrowserActionsIntent {
+ method @Deprecated public static String? getCreatorPackageName(android.content.Intent);
+ method @Deprecated public android.content.Intent getIntent();
+ method @Deprecated public static String? getUntrustedCreatorPackageName(android.content.Intent);
+ method @Deprecated public static void launchIntent(android.content.Context, android.content.Intent);
+ method @Deprecated public static void openBrowserAction(android.content.Context, android.net.Uri);
+ method @Deprecated public static void openBrowserAction(android.content.Context, android.net.Uri, int, java.util.ArrayList<androidx.browser.browseractions.BrowserActionItem!>, android.app.PendingIntent);
+ method @Deprecated public static java.util.List<androidx.browser.browseractions.BrowserActionItem!> parseBrowserActionItems(java.util.ArrayList<android.os.Bundle!>);
+ field @Deprecated public static final String ACTION_BROWSER_ACTIONS_OPEN = "androidx.browser.browseractions.browser_action_open";
+ field @Deprecated public static final String EXTRA_APP_ID = "androidx.browser.browseractions.APP_ID";
+ field @Deprecated public static final String EXTRA_MENU_ITEMS = "androidx.browser.browseractions.extra.MENU_ITEMS";
+ field @Deprecated public static final String EXTRA_SELECTED_ACTION_PENDING_INTENT = "androidx.browser.browseractions.extra.SELECTED_ACTION_PENDING_INTENT";
+ field @Deprecated public static final String EXTRA_TYPE = "androidx.browser.browseractions.extra.TYPE";
+ field @Deprecated public static final int ITEM_COPY = 3; // 0x3
+ field @Deprecated public static final int ITEM_DOWNLOAD = 2; // 0x2
+ field @Deprecated public static final int ITEM_INVALID_ITEM = -1; // 0xffffffff
+ field @Deprecated public static final int ITEM_OPEN_IN_INCOGNITO = 1; // 0x1
+ field @Deprecated public static final int ITEM_OPEN_IN_NEW_TAB = 0; // 0x0
+ field @Deprecated public static final int ITEM_SHARE = 4; // 0x4
+ field @Deprecated public static final String KEY_ACTION = "androidx.browser.browseractions.ACTION";
+ field @Deprecated public static final String KEY_ICON_ID = "androidx.browser.browseractions.ICON_ID";
+ field @Deprecated public static final String KEY_TITLE = "androidx.browser.browseractions.TITLE";
+ field @Deprecated public static final int MAX_CUSTOM_ITEMS = 5; // 0x5
+ field @Deprecated public static final int URL_TYPE_AUDIO = 3; // 0x3
+ field @Deprecated public static final int URL_TYPE_FILE = 4; // 0x4
+ field @Deprecated public static final int URL_TYPE_IMAGE = 1; // 0x1
+ field @Deprecated public static final int URL_TYPE_NONE = 0; // 0x0
+ field @Deprecated public static final int URL_TYPE_PLUGIN = 5; // 0x5
+ field @Deprecated public static final int URL_TYPE_VIDEO = 2; // 0x2
+ }
+
+ @Deprecated public static final class BrowserActionsIntent.Builder {
+ ctor @Deprecated public BrowserActionsIntent.Builder(android.content.Context, android.net.Uri);
+ method @Deprecated public androidx.browser.browseractions.BrowserActionsIntent build();
+ method @Deprecated public androidx.browser.browseractions.BrowserActionsIntent.Builder setCustomItems(java.util.ArrayList<androidx.browser.browseractions.BrowserActionItem!>);
+ method @Deprecated public androidx.browser.browseractions.BrowserActionsIntent.Builder setCustomItems(androidx.browser.browseractions.BrowserActionItem!...);
+ method @Deprecated public androidx.browser.browseractions.BrowserActionsIntent.Builder setOnItemSelectedAction(android.app.PendingIntent);
+ method @Deprecated public androidx.browser.browseractions.BrowserActionsIntent.Builder setUrlType(int);
+ }
+
+}
+
+package androidx.browser.customtabs {
+
+ public final class CustomTabColorSchemeParams {
+ field @ColorInt public final Integer? navigationBarColor;
+ field @ColorInt public final Integer? secondaryToolbarColor;
+ field @ColorInt public final Integer? toolbarColor;
+ }
+
+ public static final class CustomTabColorSchemeParams.Builder {
+ ctor public CustomTabColorSchemeParams.Builder();
+ method public androidx.browser.customtabs.CustomTabColorSchemeParams build();
+ method public androidx.browser.customtabs.CustomTabColorSchemeParams.Builder setNavigationBarColor(@ColorInt int);
+ method public androidx.browser.customtabs.CustomTabColorSchemeParams.Builder setSecondaryToolbarColor(@ColorInt int);
+ method public androidx.browser.customtabs.CustomTabColorSchemeParams.Builder setToolbarColor(@ColorInt int);
+ }
+
+ public class CustomTabsCallback {
+ ctor public CustomTabsCallback();
+ method public void extraCallback(String, android.os.Bundle?);
+ method public android.os.Bundle? extraCallbackWithResult(String, android.os.Bundle?);
+ method public void onMessageChannelReady(android.os.Bundle?);
+ method public void onNavigationEvent(int, android.os.Bundle?);
+ method public void onPostMessage(String, android.os.Bundle?);
+ method public void onRelationshipValidationResult(@androidx.browser.customtabs.CustomTabsService.Relation int, android.net.Uri, boolean, android.os.Bundle?);
+ field public static final int NAVIGATION_ABORTED = 4; // 0x4
+ field public static final int NAVIGATION_FAILED = 3; // 0x3
+ field public static final int NAVIGATION_FINISHED = 2; // 0x2
+ field public static final int NAVIGATION_STARTED = 1; // 0x1
+ field public static final int TAB_HIDDEN = 6; // 0x6
+ field public static final int TAB_SHOWN = 5; // 0x5
+ }
+
+ public class CustomTabsClient {
+ method public static boolean bindCustomTabsService(android.content.Context, String?, androidx.browser.customtabs.CustomTabsServiceConnection);
+ method public static boolean connectAndInitialize(android.content.Context, String);
+ method public android.os.Bundle? extraCommand(String, android.os.Bundle?);
+ method public static String? getPackageName(android.content.Context, java.util.List<java.lang.String!>?);
+ method public static String? getPackageName(android.content.Context, java.util.List<java.lang.String!>?, boolean);
+ method public androidx.browser.customtabs.CustomTabsSession? newSession(androidx.browser.customtabs.CustomTabsCallback?);
+ method public androidx.browser.customtabs.CustomTabsSession? newSession(androidx.browser.customtabs.CustomTabsCallback?, int);
+ method public boolean warmup(long);
+ }
+
+ public final class CustomTabsIntent {
+ method public static androidx.browser.customtabs.CustomTabColorSchemeParams getColorSchemeParams(android.content.Intent, int);
+ method public static int getMaxToolbarItems();
+ method public void launchUrl(android.content.Context, android.net.Uri);
+ method public static android.content.Intent setAlwaysUseBrowserUI(android.content.Intent?);
+ method public static boolean shouldAlwaysUseBrowserUI(android.content.Intent);
+ field public static final int COLOR_SCHEME_DARK = 2; // 0x2
+ field public static final int COLOR_SCHEME_LIGHT = 1; // 0x1
+ field public static final int COLOR_SCHEME_SYSTEM = 0; // 0x0
+ field public static final String EXTRA_ACTION_BUTTON_BUNDLE = "android.support.customtabs.extra.ACTION_BUTTON_BUNDLE";
+ field public static final String EXTRA_CLOSE_BUTTON_ICON = "android.support.customtabs.extra.CLOSE_BUTTON_ICON";
+ field public static final String EXTRA_COLOR_SCHEME = "androidx.browser.customtabs.extra.COLOR_SCHEME";
+ field public static final String EXTRA_COLOR_SCHEME_PARAMS = "androidx.browser.customtabs.extra.COLOR_SCHEME_PARAMS";
+ field public static final String EXTRA_DEFAULT_SHARE_MENU_ITEM = "android.support.customtabs.extra.SHARE_MENU_ITEM";
+ field public static final String EXTRA_ENABLE_INSTANT_APPS = "android.support.customtabs.extra.EXTRA_ENABLE_INSTANT_APPS";
+ field public static final String EXTRA_ENABLE_URLBAR_HIDING = "android.support.customtabs.extra.ENABLE_URLBAR_HIDING";
+ field public static final String EXTRA_EXIT_ANIMATION_BUNDLE = "android.support.customtabs.extra.EXIT_ANIMATION_BUNDLE";
+ field public static final String EXTRA_MENU_ITEMS = "android.support.customtabs.extra.MENU_ITEMS";
+ field public static final String EXTRA_NAVIGATION_BAR_COLOR = "androidx.browser.customtabs.extra.NAVIGATION_BAR_COLOR";
+ field public static final String EXTRA_REMOTEVIEWS = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS";
+ field public static final String EXTRA_REMOTEVIEWS_CLICKED_ID = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS_CLICKED_ID";
+ field public static final String EXTRA_REMOTEVIEWS_PENDINGINTENT = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS_PENDINGINTENT";
+ field public static final String EXTRA_REMOTEVIEWS_VIEW_IDS = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS_VIEW_IDS";
+ field public static final String EXTRA_SECONDARY_TOOLBAR_COLOR = "android.support.customtabs.extra.SECONDARY_TOOLBAR_COLOR";
+ field public static final String EXTRA_SESSION = "android.support.customtabs.extra.SESSION";
+ field public static final String EXTRA_TINT_ACTION_BUTTON = "android.support.customtabs.extra.TINT_ACTION_BUTTON";
+ field public static final String EXTRA_TITLE_VISIBILITY_STATE = "android.support.customtabs.extra.TITLE_VISIBILITY";
+ field public static final String EXTRA_TOOLBAR_COLOR = "android.support.customtabs.extra.TOOLBAR_COLOR";
+ field public static final String EXTRA_TOOLBAR_ITEMS = "android.support.customtabs.extra.TOOLBAR_ITEMS";
+ field public static final String KEY_DESCRIPTION = "android.support.customtabs.customaction.DESCRIPTION";
+ field public static final String KEY_ICON = "android.support.customtabs.customaction.ICON";
+ field public static final String KEY_ID = "android.support.customtabs.customaction.ID";
+ field public static final String KEY_MENU_ITEM_TITLE = "android.support.customtabs.customaction.MENU_ITEM_TITLE";
+ field public static final String KEY_PENDING_INTENT = "android.support.customtabs.customaction.PENDING_INTENT";
+ field public static final int NO_TITLE = 0; // 0x0
+ field public static final int SHOW_PAGE_TITLE = 1; // 0x1
+ field public static final int TOOLBAR_ACTION_BUTTON_ID = 0; // 0x0
+ field public final android.content.Intent intent;
+ field public final android.os.Bundle? startAnimationBundle;
+ }
+
+ public static final class CustomTabsIntent.Builder {
+ ctor public CustomTabsIntent.Builder();
+ ctor public CustomTabsIntent.Builder(androidx.browser.customtabs.CustomTabsSession?);
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder addDefaultShareMenuItem();
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder addMenuItem(String, android.app.PendingIntent);
+ method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder addToolbarItem(int, android.graphics.Bitmap, String, android.app.PendingIntent) throws java.lang.IllegalStateException;
+ method public androidx.browser.customtabs.CustomTabsIntent build();
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder enableUrlBarHiding();
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder setActionButton(android.graphics.Bitmap, String, android.app.PendingIntent, boolean);
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder setActionButton(android.graphics.Bitmap, String, android.app.PendingIntent);
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder setCloseButtonIcon(android.graphics.Bitmap);
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder setColorScheme(int);
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder setColorSchemeParams(int, androidx.browser.customtabs.CustomTabColorSchemeParams);
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder setExitAnimations(android.content.Context, @AnimRes int, @AnimRes int);
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder setInstantAppsEnabled(boolean);
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder setNavigationBarColor(@ColorInt int);
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder setSecondaryToolbarColor(@ColorInt int);
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder setSecondaryToolbarViews(android.widget.RemoteViews, int[]?, android.app.PendingIntent?);
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder setSession(androidx.browser.customtabs.CustomTabsSession);
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder setShowTitle(boolean);
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder setStartAnimations(android.content.Context, @AnimRes int, @AnimRes int);
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder setToolbarColor(@ColorInt int);
+ }
+
+ public abstract class CustomTabsService extends android.app.Service {
+ ctor public CustomTabsService();
+ method protected boolean cleanUpSession(androidx.browser.customtabs.CustomTabsSessionToken);
+ method protected abstract android.os.Bundle? extraCommand(String, android.os.Bundle?);
+ method protected abstract boolean mayLaunchUrl(androidx.browser.customtabs.CustomTabsSessionToken, android.net.Uri, android.os.Bundle?, java.util.List<android.os.Bundle!>?);
+ method protected abstract boolean newSession(androidx.browser.customtabs.CustomTabsSessionToken);
+ method public android.os.IBinder onBind(android.content.Intent?);
+ method @androidx.browser.customtabs.CustomTabsService.Result protected abstract int postMessage(androidx.browser.customtabs.CustomTabsSessionToken, String, android.os.Bundle?);
+ method protected abstract boolean receiveFile(androidx.browser.customtabs.CustomTabsSessionToken, android.net.Uri, int, android.os.Bundle?);
+ method protected abstract boolean requestPostMessageChannel(androidx.browser.customtabs.CustomTabsSessionToken, android.net.Uri);
+ method protected abstract boolean updateVisuals(androidx.browser.customtabs.CustomTabsSessionToken, android.os.Bundle?);
+ method protected abstract boolean validateRelationship(androidx.browser.customtabs.CustomTabsSessionToken, @androidx.browser.customtabs.CustomTabsService.Relation int, android.net.Uri, android.os.Bundle?);
+ method protected abstract boolean warmup(long);
+ field public static final String ACTION_CUSTOM_TABS_CONNECTION = "android.support.customtabs.action.CustomTabsService";
+ field public static final String CATEGORY_COLOR_SCHEME_CUSTOMIZATION = "androidx.browser.customtabs.category.ColorSchemeCustomization";
+ field public static final String CATEGORY_NAVBAR_COLOR_CUSTOMIZATION = "androidx.browser.customtabs.category.NavBarColorCustomization";
+ field public static final String CATEGORY_TRUSTED_WEB_ACTIVITY_IMMERSIVE_MODE = "androidx.browser.trusted.category.ImmersiveMode";
+ field public static final String CATEGORY_WEB_SHARE_TARGET_V2 = "androidx.browser.trusted.category.WebShareTargetV2";
+ field public static final int FILE_PURPOSE_TRUSTED_WEB_ACTIVITY_SPLASH_IMAGE = 1; // 0x1
+ field public static final String KEY_URL = "android.support.customtabs.otherurls.URL";
+ field public static final int RELATION_HANDLE_ALL_URLS = 2; // 0x2
+ field public static final int RELATION_USE_AS_ORIGIN = 1; // 0x1
+ field public static final int RESULT_FAILURE_DISALLOWED = -1; // 0xffffffff
+ field public static final int RESULT_FAILURE_MESSAGING_ERROR = -3; // 0xfffffffd
+ field public static final int RESULT_FAILURE_REMOTE_ERROR = -2; // 0xfffffffe
+ field public static final int RESULT_SUCCESS = 0; // 0x0
+ field public static final String TRUSTED_WEB_ACTIVITY_CATEGORY = "androidx.browser.trusted.category.TrustedWebActivities";
+ }
+
+ @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @IntDef({androidx.browser.customtabs.CustomTabsService.RELATION_USE_AS_ORIGIN, androidx.browser.customtabs.CustomTabsService.RELATION_HANDLE_ALL_URLS}) public static @interface CustomTabsService.Relation {
+ }
+
+ @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @IntDef({androidx.browser.customtabs.CustomTabsService.RESULT_SUCCESS, androidx.browser.customtabs.CustomTabsService.RESULT_FAILURE_DISALLOWED, androidx.browser.customtabs.CustomTabsService.RESULT_FAILURE_REMOTE_ERROR, androidx.browser.customtabs.CustomTabsService.RESULT_FAILURE_MESSAGING_ERROR}) public static @interface CustomTabsService.Result {
+ }
+
+ public abstract class CustomTabsServiceConnection implements android.content.ServiceConnection {
+ ctor public CustomTabsServiceConnection();
+ method public abstract void onCustomTabsServiceConnected(android.content.ComponentName, androidx.browser.customtabs.CustomTabsClient);
+ method public final void onServiceConnected(android.content.ComponentName, android.os.IBinder);
+ }
+
+ public final class CustomTabsSession {
+ method @VisibleForTesting public static androidx.browser.customtabs.CustomTabsSession createMockSessionForTesting(android.content.ComponentName);
+ method public boolean mayLaunchUrl(android.net.Uri, android.os.Bundle?, java.util.List<android.os.Bundle!>?);
+ method @androidx.browser.customtabs.CustomTabsService.Result public int postMessage(String, android.os.Bundle?);
+ method public boolean receiveFile(android.net.Uri, int, android.os.Bundle?);
+ method public boolean requestPostMessageChannel(android.net.Uri);
+ method public boolean setActionButton(android.graphics.Bitmap, String);
+ method public boolean setSecondaryToolbarViews(android.widget.RemoteViews?, int[]?, android.app.PendingIntent?);
+ method @Deprecated public boolean setToolbarItem(int, android.graphics.Bitmap, String);
+ method public boolean validateRelationship(@androidx.browser.customtabs.CustomTabsService.Relation int, android.net.Uri, android.os.Bundle?);
+ }
+
+ public class CustomTabsSessionToken {
+ method public static androidx.browser.customtabs.CustomTabsSessionToken createMockSessionTokenForTesting();
+ method public androidx.browser.customtabs.CustomTabsCallback? getCallback();
+ method public static androidx.browser.customtabs.CustomTabsSessionToken? getSessionTokenFromIntent(android.content.Intent);
+ method public boolean isAssociatedWith(androidx.browser.customtabs.CustomTabsSession);
+ }
+
+ public class PostMessageService extends android.app.Service {
+ ctor public PostMessageService();
+ method public android.os.IBinder onBind(android.content.Intent?);
+ }
+
+ public abstract class PostMessageServiceConnection implements android.content.ServiceConnection {
+ ctor public PostMessageServiceConnection(androidx.browser.customtabs.CustomTabsSessionToken);
+ method public boolean bindSessionToPostMessageService(android.content.Context, String);
+ method public final boolean notifyMessageChannelReady(android.os.Bundle?);
+ method public void onPostMessageServiceConnected();
+ method public void onPostMessageServiceDisconnected();
+ method public final void onServiceConnected(android.content.ComponentName, android.os.IBinder);
+ method public final void onServiceDisconnected(android.content.ComponentName);
+ method public final boolean postMessage(String, android.os.Bundle?);
+ method public void unbindFromContext(android.content.Context);
+ }
+
+ public class TrustedWebUtils {
+ method public static boolean areSplashScreensSupported(android.content.Context, String, String);
+ method @Deprecated public static void launchAsTrustedWebActivity(android.content.Context, androidx.browser.customtabs.CustomTabsIntent, android.net.Uri);
+ method @WorkerThread public static boolean transferSplashImage(android.content.Context, java.io.File, String, String, androidx.browser.customtabs.CustomTabsSession);
+ field public static final String EXTRA_LAUNCH_AS_TRUSTED_WEB_ACTIVITY = "android.support.customtabs.extra.LAUNCH_AS_TRUSTED_WEB_ACTIVITY";
+ }
+
+}
+
+package androidx.browser.trusted {
+
+ public final class Token {
+ method public static androidx.browser.trusted.Token? create(String, android.content.pm.PackageManager);
+ method public static androidx.browser.trusted.Token deserialize(byte[]);
+ method public boolean matches(String, android.content.pm.PackageManager);
+ method public byte[] serialize();
+ }
+
+ public interface TokenStore {
+ method @BinderThread public androidx.browser.trusted.Token? load();
+ method @WorkerThread public void store(androidx.browser.trusted.Token?);
+ }
+
+ public interface TrustedWebActivityDisplayMode {
+ method public static androidx.browser.trusted.TrustedWebActivityDisplayMode fromBundle(android.os.Bundle);
+ method public android.os.Bundle toBundle();
+ field public static final String KEY_ID = "androidx.browser.trusted.displaymode.KEY_ID";
+ }
+
+ public static class TrustedWebActivityDisplayMode.DefaultMode implements androidx.browser.trusted.TrustedWebActivityDisplayMode {
+ ctor public TrustedWebActivityDisplayMode.DefaultMode();
+ method public android.os.Bundle toBundle();
+ }
+
+ public static class TrustedWebActivityDisplayMode.ImmersiveMode implements androidx.browser.trusted.TrustedWebActivityDisplayMode {
+ ctor public TrustedWebActivityDisplayMode.ImmersiveMode(boolean, int);
+ method public boolean isSticky();
+ method public int layoutInDisplayCutoutMode();
+ method public android.os.Bundle toBundle();
+ field public static final String KEY_CUTOUT_MODE = "androidx.browser.trusted.displaymode.KEY_CUTOUT_MODE";
+ field public static final String KEY_STICKY = "androidx.browser.trusted.displaymode.KEY_STICKY";
+ }
+
+ public final class TrustedWebActivityIntent {
+ method public android.content.Intent getIntent();
+ method public void launchTrustedWebActivity(android.content.Context);
+ }
+
+ public class TrustedWebActivityIntentBuilder {
+ ctor public TrustedWebActivityIntentBuilder(android.net.Uri);
+ method public androidx.browser.trusted.TrustedWebActivityIntent build(androidx.browser.customtabs.CustomTabsSession);
+ method public androidx.browser.customtabs.CustomTabsIntent buildCustomTabsIntent();
+ method public androidx.browser.trusted.TrustedWebActivityDisplayMode? getDisplayMode();
+ method public android.net.Uri getUri();
+ method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setAdditionalTrustedOrigins(java.util.List<java.lang.String!>);
+ method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setColorScheme(int);
+ method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setColorSchemeParams(int, androidx.browser.customtabs.CustomTabColorSchemeParams);
+ method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setDisplayMode(androidx.browser.trusted.TrustedWebActivityDisplayMode);
+ method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setNavigationBarColor(@ColorInt int);
+ method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setShareParams(androidx.browser.trusted.sharing.ShareTarget, androidx.browser.trusted.sharing.ShareData);
+ method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setSplashScreenParams(android.os.Bundle);
+ method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setToolbarColor(@ColorInt int);
+ field public static final String EXTRA_ADDITIONAL_TRUSTED_ORIGINS = "android.support.customtabs.extra.ADDITIONAL_TRUSTED_ORIGINS";
+ field public static final String EXTRA_DISPLAY_MODE = "androidx.browser.trusted.extra.DISPLAY_MODE";
+ field public static final String EXTRA_SHARE_DATA = "androidx.browser.trusted.extra.SHARE_DATA";
+ field public static final String EXTRA_SHARE_TARGET = "androidx.browser.trusted.extra.SHARE_TARGET";
+ field public static final String EXTRA_SPLASH_SCREEN_PARAMS = "androidx.browser.trusted.EXTRA_SPLASH_SCREEN_PARAMS";
+ }
+
+ public abstract class TrustedWebActivityService extends android.app.Service {
+ ctor public TrustedWebActivityService();
+ method @BinderThread public abstract androidx.browser.trusted.TokenStore getTokenStore();
+ method @BinderThread public boolean onAreNotificationsEnabled(String);
+ method @MainThread public final android.os.IBinder? onBind(android.content.Intent?);
+ method @BinderThread public void onCancelNotification(String, int);
+ method @BinderThread public android.os.Bundle onGetSmallIconBitmap();
+ method @BinderThread public int onGetSmallIconId();
+ method @BinderThread public boolean onNotifyNotificationWithChannel(String, int, android.app.Notification, String);
+ method @MainThread public final boolean onUnbind(android.content.Intent?);
+ field public static final String ACTION_TRUSTED_WEB_ACTIVITY_SERVICE = "android.support.customtabs.trusted.TRUSTED_WEB_ACTIVITY_SERVICE";
+ field public static final String KEY_SMALL_ICON_BITMAP = "android.support.customtabs.trusted.SMALL_ICON_BITMAP";
+ field public static final String META_DATA_NAME_SMALL_ICON = "android.support.customtabs.trusted.SMALL_ICON";
+ field public static final int SMALL_ICON_NOT_SET = -1; // 0xffffffff
+ }
+
+ public final class TrustedWebActivityServiceConnection {
+ method public boolean areNotificationsEnabled(String) throws android.os.RemoteException;
+ method public void cancel(String, int) throws android.os.RemoteException;
+ method public android.content.ComponentName getComponentName();
+ method public android.graphics.Bitmap? getSmallIconBitmap() throws android.os.RemoteException;
+ method public int getSmallIconId() throws android.os.RemoteException;
+ method public boolean notify(String, int, android.app.Notification, String) throws android.os.RemoteException;
+ }
+
+ public final class TrustedWebActivityServiceConnectionPool {
+ method @MainThread public com.google.common.util.concurrent.ListenableFuture<androidx.browser.trusted.TrustedWebActivityServiceConnection!> connect(android.net.Uri, java.util.Set<androidx.browser.trusted.Token!>, java.util.concurrent.Executor);
+ method public static androidx.browser.trusted.TrustedWebActivityServiceConnectionPool create(android.content.Context);
+ method @MainThread public boolean serviceExistsForScope(android.net.Uri, java.util.Set<androidx.browser.trusted.Token!>);
+ }
+
+}
+
+package androidx.browser.trusted.sharing {
+
+ public final class ShareData {
+ ctor public ShareData(String?, String?, java.util.List<android.net.Uri!>?);
+ method public static androidx.browser.trusted.sharing.ShareData fromBundle(android.os.Bundle);
+ method public android.os.Bundle toBundle();
+ field public static final String KEY_TEXT = "androidx.browser.trusted.sharing.KEY_TEXT";
+ field public static final String KEY_TITLE = "androidx.browser.trusted.sharing.KEY_TITLE";
+ field public static final String KEY_URIS = "androidx.browser.trusted.sharing.KEY_URIS";
+ field public final String? text;
+ field public final String? title;
+ field public final java.util.List<android.net.Uri!>? uris;
+ }
+
+ public final class ShareTarget {
+ ctor public ShareTarget(String, String?, String?, androidx.browser.trusted.sharing.ShareTarget.Params);
+ method public static androidx.browser.trusted.sharing.ShareTarget? fromBundle(android.os.Bundle);
+ method public android.os.Bundle toBundle();
+ field public static final String ENCODING_TYPE_MULTIPART = "multipart/form-data";
+ field public static final String ENCODING_TYPE_URL_ENCODED = "application/x-www-form-urlencoded";
+ field public static final String KEY_ACTION = "androidx.browser.trusted.sharing.KEY_ACTION";
+ field public static final String KEY_ENCTYPE = "androidx.browser.trusted.sharing.KEY_ENCTYPE";
+ field public static final String KEY_METHOD = "androidx.browser.trusted.sharing.KEY_METHOD";
+ field public static final String KEY_PARAMS = "androidx.browser.trusted.sharing.KEY_PARAMS";
+ field public static final String METHOD_GET = "GET";
+ field public static final String METHOD_POST = "POST";
+ field public final String action;
+ field public final String? encodingType;
+ field public final String? method;
+ field public final androidx.browser.trusted.sharing.ShareTarget.Params params;
+ }
+
+ public static final class ShareTarget.FileFormField {
+ ctor public ShareTarget.FileFormField(String, java.util.List<java.lang.String!>);
+ field public static final String KEY_ACCEPTED_TYPES = "androidx.browser.trusted.sharing.KEY_ACCEPTED_TYPES";
+ field public static final String KEY_NAME = "androidx.browser.trusted.sharing.KEY_FILE_NAME";
+ field public final java.util.List<java.lang.String!> acceptedTypes;
+ field public final String name;
+ }
+
+ public static class ShareTarget.Params {
+ ctor public ShareTarget.Params(String?, String?, java.util.List<androidx.browser.trusted.sharing.ShareTarget.FileFormField!>?);
+ field public static final String KEY_FILES = "androidx.browser.trusted.sharing.KEY_FILES";
+ field public static final String KEY_TEXT = "androidx.browser.trusted.sharing.KEY_TEXT";
+ field public static final String KEY_TITLE = "androidx.browser.trusted.sharing.KEY_TITLE";
+ field public final java.util.List<androidx.browser.trusted.sharing.ShareTarget.FileFormField!>? files;
+ field public final String? text;
+ field public final String? title;
+ }
+
+}
+
+package androidx.browser.trusted.splashscreens {
+
+ public final class SplashScreenParamKey {
+ field public static final String KEY_BACKGROUND_COLOR = "androidx.browser.trusted.trusted.KEY_SPLASH_SCREEN_BACKGROUND_COLOR";
+ field public static final String KEY_FADE_OUT_DURATION_MS = "androidx.browser.trusted.KEY_SPLASH_SCREEN_FADE_OUT_DURATION";
+ field public static final String KEY_IMAGE_TRANSFORMATION_MATRIX = "androidx.browser.trusted.KEY_SPLASH_SCREEN_TRANSFORMATION_MATRIX";
+ field public static final String KEY_SCALE_TYPE = "androidx.browser.trusted.KEY_SPLASH_SCREEN_SCALE_TYPE";
+ field public static final String KEY_VERSION = "androidx.browser.trusted.KEY_SPLASH_SCREEN_VERSION";
+ }
+
+ public final class SplashScreenVersion {
+ field public static final String V1 = "androidx.browser.trusted.category.TrustedWebActivitySplashScreensV1";
+ }
+
+}
+
diff --git a/browser/api/public_plus_experimental_1.2.0-alpha10.txt b/browser/api/public_plus_experimental_1.2.0-alpha10.txt
new file mode 100644
index 0000000..e62901e
--- /dev/null
+++ b/browser/api/public_plus_experimental_1.2.0-alpha10.txt
@@ -0,0 +1,408 @@
+// Signature format: 3.0
+package androidx.browser.browseractions {
+
+ @Deprecated public class BrowserActionItem {
+ ctor @Deprecated public BrowserActionItem(String, android.app.PendingIntent, @DrawableRes int);
+ ctor @Deprecated public BrowserActionItem(String, android.app.PendingIntent);
+ method @Deprecated public android.app.PendingIntent getAction();
+ method @Deprecated public int getIconId();
+ method @Deprecated public String getTitle();
+ }
+
+ @Deprecated public class BrowserActionsIntent {
+ method @Deprecated public static String? getCreatorPackageName(android.content.Intent);
+ method @Deprecated public android.content.Intent getIntent();
+ method @Deprecated public static String? getUntrustedCreatorPackageName(android.content.Intent);
+ method @Deprecated public static void launchIntent(android.content.Context, android.content.Intent);
+ method @Deprecated public static void openBrowserAction(android.content.Context, android.net.Uri);
+ method @Deprecated public static void openBrowserAction(android.content.Context, android.net.Uri, int, java.util.ArrayList<androidx.browser.browseractions.BrowserActionItem!>, android.app.PendingIntent);
+ method @Deprecated public static java.util.List<androidx.browser.browseractions.BrowserActionItem!> parseBrowserActionItems(java.util.ArrayList<android.os.Bundle!>);
+ field @Deprecated public static final String ACTION_BROWSER_ACTIONS_OPEN = "androidx.browser.browseractions.browser_action_open";
+ field @Deprecated public static final String EXTRA_APP_ID = "androidx.browser.browseractions.APP_ID";
+ field @Deprecated public static final String EXTRA_MENU_ITEMS = "androidx.browser.browseractions.extra.MENU_ITEMS";
+ field @Deprecated public static final String EXTRA_SELECTED_ACTION_PENDING_INTENT = "androidx.browser.browseractions.extra.SELECTED_ACTION_PENDING_INTENT";
+ field @Deprecated public static final String EXTRA_TYPE = "androidx.browser.browseractions.extra.TYPE";
+ field @Deprecated public static final int ITEM_COPY = 3; // 0x3
+ field @Deprecated public static final int ITEM_DOWNLOAD = 2; // 0x2
+ field @Deprecated public static final int ITEM_INVALID_ITEM = -1; // 0xffffffff
+ field @Deprecated public static final int ITEM_OPEN_IN_INCOGNITO = 1; // 0x1
+ field @Deprecated public static final int ITEM_OPEN_IN_NEW_TAB = 0; // 0x0
+ field @Deprecated public static final int ITEM_SHARE = 4; // 0x4
+ field @Deprecated public static final String KEY_ACTION = "androidx.browser.browseractions.ACTION";
+ field @Deprecated public static final String KEY_ICON_ID = "androidx.browser.browseractions.ICON_ID";
+ field @Deprecated public static final String KEY_TITLE = "androidx.browser.browseractions.TITLE";
+ field @Deprecated public static final int MAX_CUSTOM_ITEMS = 5; // 0x5
+ field @Deprecated public static final int URL_TYPE_AUDIO = 3; // 0x3
+ field @Deprecated public static final int URL_TYPE_FILE = 4; // 0x4
+ field @Deprecated public static final int URL_TYPE_IMAGE = 1; // 0x1
+ field @Deprecated public static final int URL_TYPE_NONE = 0; // 0x0
+ field @Deprecated public static final int URL_TYPE_PLUGIN = 5; // 0x5
+ field @Deprecated public static final int URL_TYPE_VIDEO = 2; // 0x2
+ }
+
+ @Deprecated public static final class BrowserActionsIntent.Builder {
+ ctor @Deprecated public BrowserActionsIntent.Builder(android.content.Context, android.net.Uri);
+ method @Deprecated public androidx.browser.browseractions.BrowserActionsIntent build();
+ method @Deprecated public androidx.browser.browseractions.BrowserActionsIntent.Builder setCustomItems(java.util.ArrayList<androidx.browser.browseractions.BrowserActionItem!>);
+ method @Deprecated public androidx.browser.browseractions.BrowserActionsIntent.Builder setCustomItems(androidx.browser.browseractions.BrowserActionItem!...);
+ method @Deprecated public androidx.browser.browseractions.BrowserActionsIntent.Builder setOnItemSelectedAction(android.app.PendingIntent);
+ method @Deprecated public androidx.browser.browseractions.BrowserActionsIntent.Builder setUrlType(int);
+ }
+
+}
+
+package androidx.browser.customtabs {
+
+ public final class CustomTabColorSchemeParams {
+ field @ColorInt public final Integer? navigationBarColor;
+ field @ColorInt public final Integer? secondaryToolbarColor;
+ field @ColorInt public final Integer? toolbarColor;
+ }
+
+ public static final class CustomTabColorSchemeParams.Builder {
+ ctor public CustomTabColorSchemeParams.Builder();
+ method public androidx.browser.customtabs.CustomTabColorSchemeParams build();
+ method public androidx.browser.customtabs.CustomTabColorSchemeParams.Builder setNavigationBarColor(@ColorInt int);
+ method public androidx.browser.customtabs.CustomTabColorSchemeParams.Builder setSecondaryToolbarColor(@ColorInt int);
+ method public androidx.browser.customtabs.CustomTabColorSchemeParams.Builder setToolbarColor(@ColorInt int);
+ }
+
+ public class CustomTabsCallback {
+ ctor public CustomTabsCallback();
+ method public void extraCallback(String, android.os.Bundle?);
+ method public android.os.Bundle? extraCallbackWithResult(String, android.os.Bundle?);
+ method public void onMessageChannelReady(android.os.Bundle?);
+ method public void onNavigationEvent(int, android.os.Bundle?);
+ method public void onPostMessage(String, android.os.Bundle?);
+ method public void onRelationshipValidationResult(@androidx.browser.customtabs.CustomTabsService.Relation int, android.net.Uri, boolean, android.os.Bundle?);
+ field public static final int NAVIGATION_ABORTED = 4; // 0x4
+ field public static final int NAVIGATION_FAILED = 3; // 0x3
+ field public static final int NAVIGATION_FINISHED = 2; // 0x2
+ field public static final int NAVIGATION_STARTED = 1; // 0x1
+ field public static final int TAB_HIDDEN = 6; // 0x6
+ field public static final int TAB_SHOWN = 5; // 0x5
+ }
+
+ public class CustomTabsClient {
+ method public static boolean bindCustomTabsService(android.content.Context, String?, androidx.browser.customtabs.CustomTabsServiceConnection);
+ method public static boolean connectAndInitialize(android.content.Context, String);
+ method public android.os.Bundle? extraCommand(String, android.os.Bundle?);
+ method public static String? getPackageName(android.content.Context, java.util.List<java.lang.String!>?);
+ method public static String? getPackageName(android.content.Context, java.util.List<java.lang.String!>?, boolean);
+ method public androidx.browser.customtabs.CustomTabsSession? newSession(androidx.browser.customtabs.CustomTabsCallback?);
+ method public androidx.browser.customtabs.CustomTabsSession? newSession(androidx.browser.customtabs.CustomTabsCallback?, int);
+ method public boolean warmup(long);
+ }
+
+ public final class CustomTabsIntent {
+ method public static androidx.browser.customtabs.CustomTabColorSchemeParams getColorSchemeParams(android.content.Intent, int);
+ method public static int getMaxToolbarItems();
+ method public void launchUrl(android.content.Context, android.net.Uri);
+ method public static android.content.Intent setAlwaysUseBrowserUI(android.content.Intent?);
+ method public static boolean shouldAlwaysUseBrowserUI(android.content.Intent);
+ field public static final int COLOR_SCHEME_DARK = 2; // 0x2
+ field public static final int COLOR_SCHEME_LIGHT = 1; // 0x1
+ field public static final int COLOR_SCHEME_SYSTEM = 0; // 0x0
+ field public static final String EXTRA_ACTION_BUTTON_BUNDLE = "android.support.customtabs.extra.ACTION_BUTTON_BUNDLE";
+ field public static final String EXTRA_CLOSE_BUTTON_ICON = "android.support.customtabs.extra.CLOSE_BUTTON_ICON";
+ field public static final String EXTRA_COLOR_SCHEME = "androidx.browser.customtabs.extra.COLOR_SCHEME";
+ field public static final String EXTRA_COLOR_SCHEME_PARAMS = "androidx.browser.customtabs.extra.COLOR_SCHEME_PARAMS";
+ field public static final String EXTRA_DEFAULT_SHARE_MENU_ITEM = "android.support.customtabs.extra.SHARE_MENU_ITEM";
+ field public static final String EXTRA_ENABLE_INSTANT_APPS = "android.support.customtabs.extra.EXTRA_ENABLE_INSTANT_APPS";
+ field public static final String EXTRA_ENABLE_URLBAR_HIDING = "android.support.customtabs.extra.ENABLE_URLBAR_HIDING";
+ field public static final String EXTRA_EXIT_ANIMATION_BUNDLE = "android.support.customtabs.extra.EXIT_ANIMATION_BUNDLE";
+ field public static final String EXTRA_MENU_ITEMS = "android.support.customtabs.extra.MENU_ITEMS";
+ field public static final String EXTRA_NAVIGATION_BAR_COLOR = "androidx.browser.customtabs.extra.NAVIGATION_BAR_COLOR";
+ field public static final String EXTRA_REMOTEVIEWS = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS";
+ field public static final String EXTRA_REMOTEVIEWS_CLICKED_ID = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS_CLICKED_ID";
+ field public static final String EXTRA_REMOTEVIEWS_PENDINGINTENT = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS_PENDINGINTENT";
+ field public static final String EXTRA_REMOTEVIEWS_VIEW_IDS = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS_VIEW_IDS";
+ field public static final String EXTRA_SECONDARY_TOOLBAR_COLOR = "android.support.customtabs.extra.SECONDARY_TOOLBAR_COLOR";
+ field public static final String EXTRA_SESSION = "android.support.customtabs.extra.SESSION";
+ field public static final String EXTRA_TINT_ACTION_BUTTON = "android.support.customtabs.extra.TINT_ACTION_BUTTON";
+ field public static final String EXTRA_TITLE_VISIBILITY_STATE = "android.support.customtabs.extra.TITLE_VISIBILITY";
+ field public static final String EXTRA_TOOLBAR_COLOR = "android.support.customtabs.extra.TOOLBAR_COLOR";
+ field public static final String EXTRA_TOOLBAR_ITEMS = "android.support.customtabs.extra.TOOLBAR_ITEMS";
+ field public static final String KEY_DESCRIPTION = "android.support.customtabs.customaction.DESCRIPTION";
+ field public static final String KEY_ICON = "android.support.customtabs.customaction.ICON";
+ field public static final String KEY_ID = "android.support.customtabs.customaction.ID";
+ field public static final String KEY_MENU_ITEM_TITLE = "android.support.customtabs.customaction.MENU_ITEM_TITLE";
+ field public static final String KEY_PENDING_INTENT = "android.support.customtabs.customaction.PENDING_INTENT";
+ field public static final int NO_TITLE = 0; // 0x0
+ field public static final int SHOW_PAGE_TITLE = 1; // 0x1
+ field public static final int TOOLBAR_ACTION_BUTTON_ID = 0; // 0x0
+ field public final android.content.Intent intent;
+ field public final android.os.Bundle? startAnimationBundle;
+ }
+
+ public static final class CustomTabsIntent.Builder {
+ ctor public CustomTabsIntent.Builder();
+ ctor public CustomTabsIntent.Builder(androidx.browser.customtabs.CustomTabsSession?);
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder addDefaultShareMenuItem();
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder addMenuItem(String, android.app.PendingIntent);
+ method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder addToolbarItem(int, android.graphics.Bitmap, String, android.app.PendingIntent) throws java.lang.IllegalStateException;
+ method public androidx.browser.customtabs.CustomTabsIntent build();
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder enableUrlBarHiding();
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder setActionButton(android.graphics.Bitmap, String, android.app.PendingIntent, boolean);
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder setActionButton(android.graphics.Bitmap, String, android.app.PendingIntent);
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder setCloseButtonIcon(android.graphics.Bitmap);
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder setColorScheme(int);
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder setColorSchemeParams(int, androidx.browser.customtabs.CustomTabColorSchemeParams);
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder setExitAnimations(android.content.Context, @AnimRes int, @AnimRes int);
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder setInstantAppsEnabled(boolean);
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder setNavigationBarColor(@ColorInt int);
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder setSecondaryToolbarColor(@ColorInt int);
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder setSecondaryToolbarViews(android.widget.RemoteViews, int[]?, android.app.PendingIntent?);
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder setSession(androidx.browser.customtabs.CustomTabsSession);
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder setShowTitle(boolean);
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder setStartAnimations(android.content.Context, @AnimRes int, @AnimRes int);
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder setToolbarColor(@ColorInt int);
+ }
+
+ public abstract class CustomTabsService extends android.app.Service {
+ ctor public CustomTabsService();
+ method protected boolean cleanUpSession(androidx.browser.customtabs.CustomTabsSessionToken);
+ method protected abstract android.os.Bundle? extraCommand(String, android.os.Bundle?);
+ method protected abstract boolean mayLaunchUrl(androidx.browser.customtabs.CustomTabsSessionToken, android.net.Uri, android.os.Bundle?, java.util.List<android.os.Bundle!>?);
+ method protected abstract boolean newSession(androidx.browser.customtabs.CustomTabsSessionToken);
+ method public android.os.IBinder onBind(android.content.Intent?);
+ method @androidx.browser.customtabs.CustomTabsService.Result protected abstract int postMessage(androidx.browser.customtabs.CustomTabsSessionToken, String, android.os.Bundle?);
+ method protected abstract boolean receiveFile(androidx.browser.customtabs.CustomTabsSessionToken, android.net.Uri, int, android.os.Bundle?);
+ method protected abstract boolean requestPostMessageChannel(androidx.browser.customtabs.CustomTabsSessionToken, android.net.Uri);
+ method protected abstract boolean updateVisuals(androidx.browser.customtabs.CustomTabsSessionToken, android.os.Bundle?);
+ method protected abstract boolean validateRelationship(androidx.browser.customtabs.CustomTabsSessionToken, @androidx.browser.customtabs.CustomTabsService.Relation int, android.net.Uri, android.os.Bundle?);
+ method protected abstract boolean warmup(long);
+ field public static final String ACTION_CUSTOM_TABS_CONNECTION = "android.support.customtabs.action.CustomTabsService";
+ field public static final String CATEGORY_COLOR_SCHEME_CUSTOMIZATION = "androidx.browser.customtabs.category.ColorSchemeCustomization";
+ field public static final String CATEGORY_NAVBAR_COLOR_CUSTOMIZATION = "androidx.browser.customtabs.category.NavBarColorCustomization";
+ field public static final String CATEGORY_TRUSTED_WEB_ACTIVITY_IMMERSIVE_MODE = "androidx.browser.trusted.category.ImmersiveMode";
+ field public static final String CATEGORY_WEB_SHARE_TARGET_V2 = "androidx.browser.trusted.category.WebShareTargetV2";
+ field public static final int FILE_PURPOSE_TRUSTED_WEB_ACTIVITY_SPLASH_IMAGE = 1; // 0x1
+ field public static final String KEY_URL = "android.support.customtabs.otherurls.URL";
+ field public static final int RELATION_HANDLE_ALL_URLS = 2; // 0x2
+ field public static final int RELATION_USE_AS_ORIGIN = 1; // 0x1
+ field public static final int RESULT_FAILURE_DISALLOWED = -1; // 0xffffffff
+ field public static final int RESULT_FAILURE_MESSAGING_ERROR = -3; // 0xfffffffd
+ field public static final int RESULT_FAILURE_REMOTE_ERROR = -2; // 0xfffffffe
+ field public static final int RESULT_SUCCESS = 0; // 0x0
+ field public static final String TRUSTED_WEB_ACTIVITY_CATEGORY = "androidx.browser.trusted.category.TrustedWebActivities";
+ }
+
+ @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @IntDef({androidx.browser.customtabs.CustomTabsService.RELATION_USE_AS_ORIGIN, androidx.browser.customtabs.CustomTabsService.RELATION_HANDLE_ALL_URLS}) public static @interface CustomTabsService.Relation {
+ }
+
+ @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @IntDef({androidx.browser.customtabs.CustomTabsService.RESULT_SUCCESS, androidx.browser.customtabs.CustomTabsService.RESULT_FAILURE_DISALLOWED, androidx.browser.customtabs.CustomTabsService.RESULT_FAILURE_REMOTE_ERROR, androidx.browser.customtabs.CustomTabsService.RESULT_FAILURE_MESSAGING_ERROR}) public static @interface CustomTabsService.Result {
+ }
+
+ public abstract class CustomTabsServiceConnection implements android.content.ServiceConnection {
+ ctor public CustomTabsServiceConnection();
+ method public abstract void onCustomTabsServiceConnected(android.content.ComponentName, androidx.browser.customtabs.CustomTabsClient);
+ method public final void onServiceConnected(android.content.ComponentName, android.os.IBinder);
+ }
+
+ public final class CustomTabsSession {
+ method @VisibleForTesting public static androidx.browser.customtabs.CustomTabsSession createMockSessionForTesting(android.content.ComponentName);
+ method public boolean mayLaunchUrl(android.net.Uri, android.os.Bundle?, java.util.List<android.os.Bundle!>?);
+ method @androidx.browser.customtabs.CustomTabsService.Result public int postMessage(String, android.os.Bundle?);
+ method public boolean receiveFile(android.net.Uri, int, android.os.Bundle?);
+ method public boolean requestPostMessageChannel(android.net.Uri);
+ method public boolean setActionButton(android.graphics.Bitmap, String);
+ method public boolean setSecondaryToolbarViews(android.widget.RemoteViews?, int[]?, android.app.PendingIntent?);
+ method @Deprecated public boolean setToolbarItem(int, android.graphics.Bitmap, String);
+ method public boolean validateRelationship(@androidx.browser.customtabs.CustomTabsService.Relation int, android.net.Uri, android.os.Bundle?);
+ }
+
+ public class CustomTabsSessionToken {
+ method public static androidx.browser.customtabs.CustomTabsSessionToken createMockSessionTokenForTesting();
+ method public androidx.browser.customtabs.CustomTabsCallback? getCallback();
+ method public static androidx.browser.customtabs.CustomTabsSessionToken? getSessionTokenFromIntent(android.content.Intent);
+ method public boolean isAssociatedWith(androidx.browser.customtabs.CustomTabsSession);
+ }
+
+ public class PostMessageService extends android.app.Service {
+ ctor public PostMessageService();
+ method public android.os.IBinder onBind(android.content.Intent?);
+ }
+
+ public abstract class PostMessageServiceConnection implements android.content.ServiceConnection {
+ ctor public PostMessageServiceConnection(androidx.browser.customtabs.CustomTabsSessionToken);
+ method public boolean bindSessionToPostMessageService(android.content.Context, String);
+ method public final boolean notifyMessageChannelReady(android.os.Bundle?);
+ method public void onPostMessageServiceConnected();
+ method public void onPostMessageServiceDisconnected();
+ method public final void onServiceConnected(android.content.ComponentName, android.os.IBinder);
+ method public final void onServiceDisconnected(android.content.ComponentName);
+ method public final boolean postMessage(String, android.os.Bundle?);
+ method public void unbindFromContext(android.content.Context);
+ }
+
+ public class TrustedWebUtils {
+ method public static boolean areSplashScreensSupported(android.content.Context, String, String);
+ method @Deprecated public static void launchAsTrustedWebActivity(android.content.Context, androidx.browser.customtabs.CustomTabsIntent, android.net.Uri);
+ method @WorkerThread public static boolean transferSplashImage(android.content.Context, java.io.File, String, String, androidx.browser.customtabs.CustomTabsSession);
+ field public static final String EXTRA_LAUNCH_AS_TRUSTED_WEB_ACTIVITY = "android.support.customtabs.extra.LAUNCH_AS_TRUSTED_WEB_ACTIVITY";
+ }
+
+}
+
+package androidx.browser.trusted {
+
+ public final class Token {
+ method public static androidx.browser.trusted.Token? create(String, android.content.pm.PackageManager);
+ method public static androidx.browser.trusted.Token deserialize(byte[]);
+ method public boolean matches(String, android.content.pm.PackageManager);
+ method public byte[] serialize();
+ }
+
+ public interface TokenStore {
+ method @BinderThread public androidx.browser.trusted.Token? load();
+ method @WorkerThread public void store(androidx.browser.trusted.Token?);
+ }
+
+ public interface TrustedWebActivityDisplayMode {
+ method public static androidx.browser.trusted.TrustedWebActivityDisplayMode fromBundle(android.os.Bundle);
+ method public android.os.Bundle toBundle();
+ field public static final String KEY_ID = "androidx.browser.trusted.displaymode.KEY_ID";
+ }
+
+ public static class TrustedWebActivityDisplayMode.DefaultMode implements androidx.browser.trusted.TrustedWebActivityDisplayMode {
+ ctor public TrustedWebActivityDisplayMode.DefaultMode();
+ method public android.os.Bundle toBundle();
+ }
+
+ public static class TrustedWebActivityDisplayMode.ImmersiveMode implements androidx.browser.trusted.TrustedWebActivityDisplayMode {
+ ctor public TrustedWebActivityDisplayMode.ImmersiveMode(boolean, int);
+ method public boolean isSticky();
+ method public int layoutInDisplayCutoutMode();
+ method public android.os.Bundle toBundle();
+ field public static final String KEY_CUTOUT_MODE = "androidx.browser.trusted.displaymode.KEY_CUTOUT_MODE";
+ field public static final String KEY_STICKY = "androidx.browser.trusted.displaymode.KEY_STICKY";
+ }
+
+ public final class TrustedWebActivityIntent {
+ method public android.content.Intent getIntent();
+ method public void launchTrustedWebActivity(android.content.Context);
+ }
+
+ public class TrustedWebActivityIntentBuilder {
+ ctor public TrustedWebActivityIntentBuilder(android.net.Uri);
+ method public androidx.browser.trusted.TrustedWebActivityIntent build(androidx.browser.customtabs.CustomTabsSession);
+ method public androidx.browser.customtabs.CustomTabsIntent buildCustomTabsIntent();
+ method public androidx.browser.trusted.TrustedWebActivityDisplayMode? getDisplayMode();
+ method public android.net.Uri getUri();
+ method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setAdditionalTrustedOrigins(java.util.List<java.lang.String!>);
+ method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setColorScheme(int);
+ method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setColorSchemeParams(int, androidx.browser.customtabs.CustomTabColorSchemeParams);
+ method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setDisplayMode(androidx.browser.trusted.TrustedWebActivityDisplayMode);
+ method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setNavigationBarColor(@ColorInt int);
+ method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setShareParams(androidx.browser.trusted.sharing.ShareTarget, androidx.browser.trusted.sharing.ShareData);
+ method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setSplashScreenParams(android.os.Bundle);
+ method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setToolbarColor(@ColorInt int);
+ field public static final String EXTRA_ADDITIONAL_TRUSTED_ORIGINS = "android.support.customtabs.extra.ADDITIONAL_TRUSTED_ORIGINS";
+ field public static final String EXTRA_DISPLAY_MODE = "androidx.browser.trusted.extra.DISPLAY_MODE";
+ field public static final String EXTRA_SHARE_DATA = "androidx.browser.trusted.extra.SHARE_DATA";
+ field public static final String EXTRA_SHARE_TARGET = "androidx.browser.trusted.extra.SHARE_TARGET";
+ field public static final String EXTRA_SPLASH_SCREEN_PARAMS = "androidx.browser.trusted.EXTRA_SPLASH_SCREEN_PARAMS";
+ }
+
+ public abstract class TrustedWebActivityService extends android.app.Service {
+ ctor public TrustedWebActivityService();
+ method @BinderThread public abstract androidx.browser.trusted.TokenStore getTokenStore();
+ method @BinderThread public boolean onAreNotificationsEnabled(String);
+ method @MainThread public final android.os.IBinder? onBind(android.content.Intent?);
+ method @BinderThread public void onCancelNotification(String, int);
+ method @BinderThread public android.os.Bundle onGetSmallIconBitmap();
+ method @BinderThread public int onGetSmallIconId();
+ method @BinderThread public boolean onNotifyNotificationWithChannel(String, int, android.app.Notification, String);
+ method @MainThread public final boolean onUnbind(android.content.Intent?);
+ field public static final String ACTION_TRUSTED_WEB_ACTIVITY_SERVICE = "android.support.customtabs.trusted.TRUSTED_WEB_ACTIVITY_SERVICE";
+ field public static final String KEY_SMALL_ICON_BITMAP = "android.support.customtabs.trusted.SMALL_ICON_BITMAP";
+ field public static final String META_DATA_NAME_SMALL_ICON = "android.support.customtabs.trusted.SMALL_ICON";
+ field public static final int SMALL_ICON_NOT_SET = -1; // 0xffffffff
+ }
+
+ public final class TrustedWebActivityServiceConnection {
+ method public boolean areNotificationsEnabled(String) throws android.os.RemoteException;
+ method public void cancel(String, int) throws android.os.RemoteException;
+ method public android.content.ComponentName getComponentName();
+ method public android.graphics.Bitmap? getSmallIconBitmap() throws android.os.RemoteException;
+ method public int getSmallIconId() throws android.os.RemoteException;
+ method public boolean notify(String, int, android.app.Notification, String) throws android.os.RemoteException;
+ }
+
+ public final class TrustedWebActivityServiceConnectionPool {
+ method @MainThread public com.google.common.util.concurrent.ListenableFuture<androidx.browser.trusted.TrustedWebActivityServiceConnection!> connect(android.net.Uri, java.util.Set<androidx.browser.trusted.Token!>, java.util.concurrent.Executor);
+ method public static androidx.browser.trusted.TrustedWebActivityServiceConnectionPool create(android.content.Context);
+ method @MainThread public boolean serviceExistsForScope(android.net.Uri, java.util.Set<androidx.browser.trusted.Token!>);
+ }
+
+}
+
+package androidx.browser.trusted.sharing {
+
+ public final class ShareData {
+ ctor public ShareData(String?, String?, java.util.List<android.net.Uri!>?);
+ method public static androidx.browser.trusted.sharing.ShareData fromBundle(android.os.Bundle);
+ method public android.os.Bundle toBundle();
+ field public static final String KEY_TEXT = "androidx.browser.trusted.sharing.KEY_TEXT";
+ field public static final String KEY_TITLE = "androidx.browser.trusted.sharing.KEY_TITLE";
+ field public static final String KEY_URIS = "androidx.browser.trusted.sharing.KEY_URIS";
+ field public final String? text;
+ field public final String? title;
+ field public final java.util.List<android.net.Uri!>? uris;
+ }
+
+ public final class ShareTarget {
+ ctor public ShareTarget(String, String?, String?, androidx.browser.trusted.sharing.ShareTarget.Params);
+ method public static androidx.browser.trusted.sharing.ShareTarget? fromBundle(android.os.Bundle);
+ method public android.os.Bundle toBundle();
+ field public static final String ENCODING_TYPE_MULTIPART = "multipart/form-data";
+ field public static final String ENCODING_TYPE_URL_ENCODED = "application/x-www-form-urlencoded";
+ field public static final String KEY_ACTION = "androidx.browser.trusted.sharing.KEY_ACTION";
+ field public static final String KEY_ENCTYPE = "androidx.browser.trusted.sharing.KEY_ENCTYPE";
+ field public static final String KEY_METHOD = "androidx.browser.trusted.sharing.KEY_METHOD";
+ field public static final String KEY_PARAMS = "androidx.browser.trusted.sharing.KEY_PARAMS";
+ field public static final String METHOD_GET = "GET";
+ field public static final String METHOD_POST = "POST";
+ field public final String action;
+ field public final String? encodingType;
+ field public final String? method;
+ field public final androidx.browser.trusted.sharing.ShareTarget.Params params;
+ }
+
+ public static final class ShareTarget.FileFormField {
+ ctor public ShareTarget.FileFormField(String, java.util.List<java.lang.String!>);
+ field public static final String KEY_ACCEPTED_TYPES = "androidx.browser.trusted.sharing.KEY_ACCEPTED_TYPES";
+ field public static final String KEY_NAME = "androidx.browser.trusted.sharing.KEY_FILE_NAME";
+ field public final java.util.List<java.lang.String!> acceptedTypes;
+ field public final String name;
+ }
+
+ public static class ShareTarget.Params {
+ ctor public ShareTarget.Params(String?, String?, java.util.List<androidx.browser.trusted.sharing.ShareTarget.FileFormField!>?);
+ field public static final String KEY_FILES = "androidx.browser.trusted.sharing.KEY_FILES";
+ field public static final String KEY_TEXT = "androidx.browser.trusted.sharing.KEY_TEXT";
+ field public static final String KEY_TITLE = "androidx.browser.trusted.sharing.KEY_TITLE";
+ field public final java.util.List<androidx.browser.trusted.sharing.ShareTarget.FileFormField!>? files;
+ field public final String? text;
+ field public final String? title;
+ }
+
+}
+
+package androidx.browser.trusted.splashscreens {
+
+ public final class SplashScreenParamKey {
+ field public static final String KEY_BACKGROUND_COLOR = "androidx.browser.trusted.trusted.KEY_SPLASH_SCREEN_BACKGROUND_COLOR";
+ field public static final String KEY_FADE_OUT_DURATION_MS = "androidx.browser.trusted.KEY_SPLASH_SCREEN_FADE_OUT_DURATION";
+ field public static final String KEY_IMAGE_TRANSFORMATION_MATRIX = "androidx.browser.trusted.KEY_SPLASH_SCREEN_TRANSFORMATION_MATRIX";
+ field public static final String KEY_SCALE_TYPE = "androidx.browser.trusted.KEY_SPLASH_SCREEN_SCALE_TYPE";
+ field public static final String KEY_VERSION = "androidx.browser.trusted.KEY_SPLASH_SCREEN_VERSION";
+ }
+
+ public final class SplashScreenVersion {
+ field public static final String V1 = "androidx.browser.trusted.category.TrustedWebActivitySplashScreensV1";
+ }
+
+}
+
diff --git a/browser/api/res-1.2.0-alpha10.txt b/browser/api/res-1.2.0-alpha10.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/browser/api/res-1.2.0-alpha10.txt
diff --git a/browser/api/restricted_1.2.0-alpha10.txt b/browser/api/restricted_1.2.0-alpha10.txt
new file mode 100644
index 0000000..092e116
--- /dev/null
+++ b/browser/api/restricted_1.2.0-alpha10.txt
@@ -0,0 +1,427 @@
+// Signature format: 3.0
+package androidx.browser.browseractions {
+
+ @Deprecated public class BrowserActionItem {
+ ctor @Deprecated public BrowserActionItem(String, android.app.PendingIntent, @DrawableRes int);
+ ctor @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public BrowserActionItem(String, android.app.PendingIntent, android.net.Uri);
+ ctor @Deprecated public BrowserActionItem(String, android.app.PendingIntent);
+ method @Deprecated public android.app.PendingIntent getAction();
+ method @Deprecated public int getIconId();
+ method @Deprecated public String getTitle();
+ }
+
+ @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class BrowserActionsFallbackMenuView extends android.widget.LinearLayout {
+ ctor @Deprecated public BrowserActionsFallbackMenuView(android.content.Context, android.util.AttributeSet);
+ }
+
+ @Deprecated public class BrowserActionsIntent {
+ method @Deprecated public static String? getCreatorPackageName(android.content.Intent);
+ method @Deprecated public android.content.Intent getIntent();
+ method @Deprecated public static String? getUntrustedCreatorPackageName(android.content.Intent);
+ method @Deprecated public static void launchIntent(android.content.Context, android.content.Intent);
+ method @Deprecated public static void openBrowserAction(android.content.Context, android.net.Uri);
+ method @Deprecated public static void openBrowserAction(android.content.Context, android.net.Uri, int, java.util.ArrayList<androidx.browser.browseractions.BrowserActionItem!>, android.app.PendingIntent);
+ method @Deprecated public static java.util.List<androidx.browser.browseractions.BrowserActionItem!> parseBrowserActionItems(java.util.ArrayList<android.os.Bundle!>);
+ field @Deprecated public static final String ACTION_BROWSER_ACTIONS_OPEN = "androidx.browser.browseractions.browser_action_open";
+ field @Deprecated public static final String EXTRA_APP_ID = "androidx.browser.browseractions.APP_ID";
+ field @Deprecated public static final String EXTRA_MENU_ITEMS = "androidx.browser.browseractions.extra.MENU_ITEMS";
+ field @Deprecated public static final String EXTRA_SELECTED_ACTION_PENDING_INTENT = "androidx.browser.browseractions.extra.SELECTED_ACTION_PENDING_INTENT";
+ field @Deprecated public static final String EXTRA_TYPE = "androidx.browser.browseractions.extra.TYPE";
+ field @Deprecated public static final int ITEM_COPY = 3; // 0x3
+ field @Deprecated public static final int ITEM_DOWNLOAD = 2; // 0x2
+ field @Deprecated public static final int ITEM_INVALID_ITEM = -1; // 0xffffffff
+ field @Deprecated public static final int ITEM_OPEN_IN_INCOGNITO = 1; // 0x1
+ field @Deprecated public static final int ITEM_OPEN_IN_NEW_TAB = 0; // 0x0
+ field @Deprecated public static final int ITEM_SHARE = 4; // 0x4
+ field @Deprecated public static final String KEY_ACTION = "androidx.browser.browseractions.ACTION";
+ field @Deprecated public static final String KEY_ICON_ID = "androidx.browser.browseractions.ICON_ID";
+ field @Deprecated public static final String KEY_TITLE = "androidx.browser.browseractions.TITLE";
+ field @Deprecated public static final int MAX_CUSTOM_ITEMS = 5; // 0x5
+ field @Deprecated public static final int URL_TYPE_AUDIO = 3; // 0x3
+ field @Deprecated public static final int URL_TYPE_FILE = 4; // 0x4
+ field @Deprecated public static final int URL_TYPE_IMAGE = 1; // 0x1
+ field @Deprecated public static final int URL_TYPE_NONE = 0; // 0x0
+ field @Deprecated public static final int URL_TYPE_PLUGIN = 5; // 0x5
+ field @Deprecated public static final int URL_TYPE_VIDEO = 2; // 0x2
+ }
+
+ @Deprecated @IntDef({androidx.browser.browseractions.BrowserActionsIntent.ITEM_INVALID_ITEM, androidx.browser.browseractions.BrowserActionsIntent.ITEM_OPEN_IN_NEW_TAB, androidx.browser.browseractions.BrowserActionsIntent.ITEM_OPEN_IN_INCOGNITO, androidx.browser.browseractions.BrowserActionsIntent.ITEM_DOWNLOAD, androidx.browser.browseractions.BrowserActionsIntent.ITEM_COPY, androidx.browser.browseractions.BrowserActionsIntent.ITEM_SHARE}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface BrowserActionsIntent.BrowserActionsItemId {
+ }
+
+ @Deprecated @IntDef({androidx.browser.browseractions.BrowserActionsIntent.URL_TYPE_NONE, androidx.browser.browseractions.BrowserActionsIntent.URL_TYPE_IMAGE, androidx.browser.browseractions.BrowserActionsIntent.URL_TYPE_VIDEO, androidx.browser.browseractions.BrowserActionsIntent.URL_TYPE_AUDIO, androidx.browser.browseractions.BrowserActionsIntent.URL_TYPE_FILE, androidx.browser.browseractions.BrowserActionsIntent.URL_TYPE_PLUGIN}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface BrowserActionsIntent.BrowserActionsUrlType {
+ }
+
+ @Deprecated public static final class BrowserActionsIntent.Builder {
+ ctor @Deprecated public BrowserActionsIntent.Builder(android.content.Context, android.net.Uri);
+ method @Deprecated public androidx.browser.browseractions.BrowserActionsIntent build();
+ method @Deprecated public androidx.browser.browseractions.BrowserActionsIntent.Builder setCustomItems(java.util.ArrayList<androidx.browser.browseractions.BrowserActionItem!>);
+ method @Deprecated public androidx.browser.browseractions.BrowserActionsIntent.Builder setCustomItems(androidx.browser.browseractions.BrowserActionItem!...);
+ method @Deprecated public androidx.browser.browseractions.BrowserActionsIntent.Builder setOnItemSelectedAction(android.app.PendingIntent);
+ method @Deprecated public androidx.browser.browseractions.BrowserActionsIntent.Builder setUrlType(@androidx.browser.browseractions.BrowserActionsIntent.BrowserActionsUrlType int);
+ }
+
+
+}
+
+package androidx.browser.customtabs {
+
+ public final class CustomTabColorSchemeParams {
+ field @ColorInt public final Integer? navigationBarColor;
+ field @ColorInt public final Integer? secondaryToolbarColor;
+ field @ColorInt public final Integer? toolbarColor;
+ }
+
+ public static final class CustomTabColorSchemeParams.Builder {
+ ctor public CustomTabColorSchemeParams.Builder();
+ method public androidx.browser.customtabs.CustomTabColorSchemeParams build();
+ method public androidx.browser.customtabs.CustomTabColorSchemeParams.Builder setNavigationBarColor(@ColorInt int);
+ method public androidx.browser.customtabs.CustomTabColorSchemeParams.Builder setSecondaryToolbarColor(@ColorInt int);
+ method public androidx.browser.customtabs.CustomTabColorSchemeParams.Builder setToolbarColor(@ColorInt int);
+ }
+
+ public class CustomTabsCallback {
+ ctor public CustomTabsCallback();
+ method public void extraCallback(String, android.os.Bundle?);
+ method public android.os.Bundle? extraCallbackWithResult(String, android.os.Bundle?);
+ method public void onMessageChannelReady(android.os.Bundle?);
+ method public void onNavigationEvent(int, android.os.Bundle?);
+ method public void onPostMessage(String, android.os.Bundle?);
+ method public void onRelationshipValidationResult(@androidx.browser.customtabs.CustomTabsService.Relation int, android.net.Uri, boolean, android.os.Bundle?);
+ field public static final int NAVIGATION_ABORTED = 4; // 0x4
+ field public static final int NAVIGATION_FAILED = 3; // 0x3
+ field public static final int NAVIGATION_FINISHED = 2; // 0x2
+ field public static final int NAVIGATION_STARTED = 1; // 0x1
+ field public static final int TAB_HIDDEN = 6; // 0x6
+ field public static final int TAB_SHOWN = 5; // 0x5
+ }
+
+ public class CustomTabsClient {
+ method public static boolean bindCustomTabsService(android.content.Context, String?, androidx.browser.customtabs.CustomTabsServiceConnection);
+ method public static boolean connectAndInitialize(android.content.Context, String);
+ method public android.os.Bundle? extraCommand(String, android.os.Bundle?);
+ method public static String? getPackageName(android.content.Context, java.util.List<java.lang.String!>?);
+ method public static String? getPackageName(android.content.Context, java.util.List<java.lang.String!>?, boolean);
+ method public androidx.browser.customtabs.CustomTabsSession? newSession(androidx.browser.customtabs.CustomTabsCallback?);
+ method public androidx.browser.customtabs.CustomTabsSession? newSession(androidx.browser.customtabs.CustomTabsCallback?, int);
+ method public boolean warmup(long);
+ }
+
+ public final class CustomTabsIntent {
+ method public static androidx.browser.customtabs.CustomTabColorSchemeParams getColorSchemeParams(android.content.Intent, @androidx.browser.customtabs.CustomTabsIntent.ColorScheme int);
+ method public static int getMaxToolbarItems();
+ method public void launchUrl(android.content.Context, android.net.Uri);
+ method public static android.content.Intent setAlwaysUseBrowserUI(android.content.Intent?);
+ method public static boolean shouldAlwaysUseBrowserUI(android.content.Intent);
+ field public static final int COLOR_SCHEME_DARK = 2; // 0x2
+ field public static final int COLOR_SCHEME_LIGHT = 1; // 0x1
+ field public static final int COLOR_SCHEME_SYSTEM = 0; // 0x0
+ field public static final String EXTRA_ACTION_BUTTON_BUNDLE = "android.support.customtabs.extra.ACTION_BUTTON_BUNDLE";
+ field public static final String EXTRA_CLOSE_BUTTON_ICON = "android.support.customtabs.extra.CLOSE_BUTTON_ICON";
+ field public static final String EXTRA_COLOR_SCHEME = "androidx.browser.customtabs.extra.COLOR_SCHEME";
+ field public static final String EXTRA_COLOR_SCHEME_PARAMS = "androidx.browser.customtabs.extra.COLOR_SCHEME_PARAMS";
+ field public static final String EXTRA_DEFAULT_SHARE_MENU_ITEM = "android.support.customtabs.extra.SHARE_MENU_ITEM";
+ field public static final String EXTRA_ENABLE_INSTANT_APPS = "android.support.customtabs.extra.EXTRA_ENABLE_INSTANT_APPS";
+ field public static final String EXTRA_ENABLE_URLBAR_HIDING = "android.support.customtabs.extra.ENABLE_URLBAR_HIDING";
+ field public static final String EXTRA_EXIT_ANIMATION_BUNDLE = "android.support.customtabs.extra.EXIT_ANIMATION_BUNDLE";
+ field public static final String EXTRA_MENU_ITEMS = "android.support.customtabs.extra.MENU_ITEMS";
+ field public static final String EXTRA_NAVIGATION_BAR_COLOR = "androidx.browser.customtabs.extra.NAVIGATION_BAR_COLOR";
+ field public static final String EXTRA_REMOTEVIEWS = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS";
+ field public static final String EXTRA_REMOTEVIEWS_CLICKED_ID = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS_CLICKED_ID";
+ field public static final String EXTRA_REMOTEVIEWS_PENDINGINTENT = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS_PENDINGINTENT";
+ field public static final String EXTRA_REMOTEVIEWS_VIEW_IDS = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS_VIEW_IDS";
+ field public static final String EXTRA_SECONDARY_TOOLBAR_COLOR = "android.support.customtabs.extra.SECONDARY_TOOLBAR_COLOR";
+ field public static final String EXTRA_SESSION = "android.support.customtabs.extra.SESSION";
+ field public static final String EXTRA_TINT_ACTION_BUTTON = "android.support.customtabs.extra.TINT_ACTION_BUTTON";
+ field public static final String EXTRA_TITLE_VISIBILITY_STATE = "android.support.customtabs.extra.TITLE_VISIBILITY";
+ field public static final String EXTRA_TOOLBAR_COLOR = "android.support.customtabs.extra.TOOLBAR_COLOR";
+ field public static final String EXTRA_TOOLBAR_ITEMS = "android.support.customtabs.extra.TOOLBAR_ITEMS";
+ field public static final String KEY_DESCRIPTION = "android.support.customtabs.customaction.DESCRIPTION";
+ field public static final String KEY_ICON = "android.support.customtabs.customaction.ICON";
+ field public static final String KEY_ID = "android.support.customtabs.customaction.ID";
+ field public static final String KEY_MENU_ITEM_TITLE = "android.support.customtabs.customaction.MENU_ITEM_TITLE";
+ field public static final String KEY_PENDING_INTENT = "android.support.customtabs.customaction.PENDING_INTENT";
+ field public static final int NO_TITLE = 0; // 0x0
+ field public static final int SHOW_PAGE_TITLE = 1; // 0x1
+ field public static final int TOOLBAR_ACTION_BUTTON_ID = 0; // 0x0
+ field public final android.content.Intent intent;
+ field public final android.os.Bundle? startAnimationBundle;
+ }
+
+ public static final class CustomTabsIntent.Builder {
+ ctor public CustomTabsIntent.Builder();
+ ctor public CustomTabsIntent.Builder(androidx.browser.customtabs.CustomTabsSession?);
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder addDefaultShareMenuItem();
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder addMenuItem(String, android.app.PendingIntent);
+ method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder addToolbarItem(int, android.graphics.Bitmap, String, android.app.PendingIntent) throws java.lang.IllegalStateException;
+ method public androidx.browser.customtabs.CustomTabsIntent build();
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder enableUrlBarHiding();
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder setActionButton(android.graphics.Bitmap, String, android.app.PendingIntent, boolean);
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder setActionButton(android.graphics.Bitmap, String, android.app.PendingIntent);
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder setCloseButtonIcon(android.graphics.Bitmap);
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder setColorScheme(@androidx.browser.customtabs.CustomTabsIntent.ColorScheme int);
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder setColorSchemeParams(@androidx.browser.customtabs.CustomTabsIntent.ColorScheme int, androidx.browser.customtabs.CustomTabColorSchemeParams);
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder setExitAnimations(android.content.Context, @AnimRes int, @AnimRes int);
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder setInstantAppsEnabled(boolean);
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder setNavigationBarColor(@ColorInt int);
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder setSecondaryToolbarColor(@ColorInt int);
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder setSecondaryToolbarViews(android.widget.RemoteViews, int[]?, android.app.PendingIntent?);
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder setSession(androidx.browser.customtabs.CustomTabsSession);
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder setShowTitle(boolean);
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder setStartAnimations(android.content.Context, @AnimRes int, @AnimRes int);
+ method public androidx.browser.customtabs.CustomTabsIntent.Builder setToolbarColor(@ColorInt int);
+ }
+
+
+ public abstract class CustomTabsService extends android.app.Service {
+ ctor public CustomTabsService();
+ method protected boolean cleanUpSession(androidx.browser.customtabs.CustomTabsSessionToken);
+ method protected abstract android.os.Bundle? extraCommand(String, android.os.Bundle?);
+ method protected abstract boolean mayLaunchUrl(androidx.browser.customtabs.CustomTabsSessionToken, android.net.Uri, android.os.Bundle?, java.util.List<android.os.Bundle!>?);
+ method protected abstract boolean newSession(androidx.browser.customtabs.CustomTabsSessionToken);
+ method public android.os.IBinder onBind(android.content.Intent?);
+ method @androidx.browser.customtabs.CustomTabsService.Result protected abstract int postMessage(androidx.browser.customtabs.CustomTabsSessionToken, String, android.os.Bundle?);
+ method protected abstract boolean receiveFile(androidx.browser.customtabs.CustomTabsSessionToken, android.net.Uri, @androidx.browser.customtabs.CustomTabsService.FilePurpose int, android.os.Bundle?);
+ method protected abstract boolean requestPostMessageChannel(androidx.browser.customtabs.CustomTabsSessionToken, android.net.Uri);
+ method protected abstract boolean updateVisuals(androidx.browser.customtabs.CustomTabsSessionToken, android.os.Bundle?);
+ method protected abstract boolean validateRelationship(androidx.browser.customtabs.CustomTabsSessionToken, @androidx.browser.customtabs.CustomTabsService.Relation int, android.net.Uri, android.os.Bundle?);
+ method protected abstract boolean warmup(long);
+ field public static final String ACTION_CUSTOM_TABS_CONNECTION = "android.support.customtabs.action.CustomTabsService";
+ field public static final String CATEGORY_COLOR_SCHEME_CUSTOMIZATION = "androidx.browser.customtabs.category.ColorSchemeCustomization";
+ field public static final String CATEGORY_NAVBAR_COLOR_CUSTOMIZATION = "androidx.browser.customtabs.category.NavBarColorCustomization";
+ field public static final String CATEGORY_TRUSTED_WEB_ACTIVITY_IMMERSIVE_MODE = "androidx.browser.trusted.category.ImmersiveMode";
+ field public static final String CATEGORY_WEB_SHARE_TARGET_V2 = "androidx.browser.trusted.category.WebShareTargetV2";
+ field public static final int FILE_PURPOSE_TRUSTED_WEB_ACTIVITY_SPLASH_IMAGE = 1; // 0x1
+ field public static final String KEY_URL = "android.support.customtabs.otherurls.URL";
+ field public static final int RELATION_HANDLE_ALL_URLS = 2; // 0x2
+ field public static final int RELATION_USE_AS_ORIGIN = 1; // 0x1
+ field public static final int RESULT_FAILURE_DISALLOWED = -1; // 0xffffffff
+ field public static final int RESULT_FAILURE_MESSAGING_ERROR = -3; // 0xfffffffd
+ field public static final int RESULT_FAILURE_REMOTE_ERROR = -2; // 0xfffffffe
+ field public static final int RESULT_SUCCESS = 0; // 0x0
+ field public static final String TRUSTED_WEB_ACTIVITY_CATEGORY = "androidx.browser.trusted.category.TrustedWebActivities";
+ }
+
+
+ @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @IntDef({androidx.browser.customtabs.CustomTabsService.RELATION_USE_AS_ORIGIN, androidx.browser.customtabs.CustomTabsService.RELATION_HANDLE_ALL_URLS}) public static @interface CustomTabsService.Relation {
+ }
+
+ @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @IntDef({androidx.browser.customtabs.CustomTabsService.RESULT_SUCCESS, androidx.browser.customtabs.CustomTabsService.RESULT_FAILURE_DISALLOWED, androidx.browser.customtabs.CustomTabsService.RESULT_FAILURE_REMOTE_ERROR, androidx.browser.customtabs.CustomTabsService.RESULT_FAILURE_MESSAGING_ERROR}) public static @interface CustomTabsService.Result {
+ }
+
+ public abstract class CustomTabsServiceConnection implements android.content.ServiceConnection {
+ ctor public CustomTabsServiceConnection();
+ method public abstract void onCustomTabsServiceConnected(android.content.ComponentName, androidx.browser.customtabs.CustomTabsClient);
+ method public final void onServiceConnected(android.content.ComponentName, android.os.IBinder);
+ }
+
+ public final class CustomTabsSession {
+ method @VisibleForTesting public static androidx.browser.customtabs.CustomTabsSession createMockSessionForTesting(android.content.ComponentName);
+ method public boolean mayLaunchUrl(android.net.Uri, android.os.Bundle?, java.util.List<android.os.Bundle!>?);
+ method @androidx.browser.customtabs.CustomTabsService.Result public int postMessage(String, android.os.Bundle?);
+ method public boolean receiveFile(android.net.Uri, @androidx.browser.customtabs.CustomTabsService.FilePurpose int, android.os.Bundle?);
+ method public boolean requestPostMessageChannel(android.net.Uri);
+ method public boolean setActionButton(android.graphics.Bitmap, String);
+ method public boolean setSecondaryToolbarViews(android.widget.RemoteViews?, int[]?, android.app.PendingIntent?);
+ method @Deprecated public boolean setToolbarItem(int, android.graphics.Bitmap, String);
+ method public boolean validateRelationship(@androidx.browser.customtabs.CustomTabsService.Relation int, android.net.Uri, android.os.Bundle?);
+ }
+
+
+ public class CustomTabsSessionToken {
+ method public static androidx.browser.customtabs.CustomTabsSessionToken createMockSessionTokenForTesting();
+ method public androidx.browser.customtabs.CustomTabsCallback? getCallback();
+ method public static androidx.browser.customtabs.CustomTabsSessionToken? getSessionTokenFromIntent(android.content.Intent);
+ method public boolean isAssociatedWith(androidx.browser.customtabs.CustomTabsSession);
+ }
+
+
+ public class PostMessageService extends android.app.Service {
+ ctor public PostMessageService();
+ method public android.os.IBinder onBind(android.content.Intent?);
+ }
+
+ public abstract class PostMessageServiceConnection implements androidx.browser.customtabs.PostMessageBackend android.content.ServiceConnection {
+ ctor public PostMessageServiceConnection(androidx.browser.customtabs.CustomTabsSessionToken);
+ method public boolean bindSessionToPostMessageService(android.content.Context, String);
+ method public final boolean notifyMessageChannelReady(android.os.Bundle?);
+ method public void onPostMessageServiceConnected();
+ method public void onPostMessageServiceDisconnected();
+ method public final void onServiceConnected(android.content.ComponentName, android.os.IBinder);
+ method public final void onServiceDisconnected(android.content.ComponentName);
+ method public final boolean postMessage(String, android.os.Bundle?);
+ method public void unbindFromContext(android.content.Context);
+ }
+
+ public class TrustedWebUtils {
+ method public static boolean areSplashScreensSupported(android.content.Context, String, String);
+ method @Deprecated public static void launchAsTrustedWebActivity(android.content.Context, androidx.browser.customtabs.CustomTabsIntent, android.net.Uri);
+ method @WorkerThread public static boolean transferSplashImage(android.content.Context, java.io.File, String, String, androidx.browser.customtabs.CustomTabsSession);
+ field public static final String EXTRA_LAUNCH_AS_TRUSTED_WEB_ACTIVITY = "android.support.customtabs.extra.LAUNCH_AS_TRUSTED_WEB_ACTIVITY";
+ }
+
+}
+
+package androidx.browser.trusted {
+
+
+ public final class Token {
+ method public static androidx.browser.trusted.Token? create(String, android.content.pm.PackageManager);
+ method public static androidx.browser.trusted.Token deserialize(byte[]);
+ method public boolean matches(String, android.content.pm.PackageManager);
+ method public byte[] serialize();
+ }
+
+ public interface TokenStore {
+ method @BinderThread public androidx.browser.trusted.Token? load();
+ method @WorkerThread public void store(androidx.browser.trusted.Token?);
+ }
+
+ public interface TrustedWebActivityDisplayMode {
+ method public static androidx.browser.trusted.TrustedWebActivityDisplayMode fromBundle(android.os.Bundle);
+ method public android.os.Bundle toBundle();
+ field public static final String KEY_ID = "androidx.browser.trusted.displaymode.KEY_ID";
+ }
+
+ public static class TrustedWebActivityDisplayMode.DefaultMode implements androidx.browser.trusted.TrustedWebActivityDisplayMode {
+ ctor public TrustedWebActivityDisplayMode.DefaultMode();
+ method public android.os.Bundle toBundle();
+ }
+
+ public static class TrustedWebActivityDisplayMode.ImmersiveMode implements androidx.browser.trusted.TrustedWebActivityDisplayMode {
+ ctor public TrustedWebActivityDisplayMode.ImmersiveMode(boolean, int);
+ method public boolean isSticky();
+ method public int layoutInDisplayCutoutMode();
+ method public android.os.Bundle toBundle();
+ field public static final String KEY_CUTOUT_MODE = "androidx.browser.trusted.displaymode.KEY_CUTOUT_MODE";
+ field public static final String KEY_STICKY = "androidx.browser.trusted.displaymode.KEY_STICKY";
+ }
+
+ public final class TrustedWebActivityIntent {
+ method public android.content.Intent getIntent();
+ method public void launchTrustedWebActivity(android.content.Context);
+ }
+
+ public class TrustedWebActivityIntentBuilder {
+ ctor public TrustedWebActivityIntentBuilder(android.net.Uri);
+ method public androidx.browser.trusted.TrustedWebActivityIntent build(androidx.browser.customtabs.CustomTabsSession);
+ method public androidx.browser.customtabs.CustomTabsIntent buildCustomTabsIntent();
+ method public androidx.browser.trusted.TrustedWebActivityDisplayMode? getDisplayMode();
+ method public android.net.Uri getUri();
+ method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setAdditionalTrustedOrigins(java.util.List<java.lang.String!>);
+ method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setColorScheme(int);
+ method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setColorSchemeParams(int, androidx.browser.customtabs.CustomTabColorSchemeParams);
+ method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setDisplayMode(androidx.browser.trusted.TrustedWebActivityDisplayMode);
+ method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setNavigationBarColor(@ColorInt int);
+ method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setShareParams(androidx.browser.trusted.sharing.ShareTarget, androidx.browser.trusted.sharing.ShareData);
+ method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setSplashScreenParams(android.os.Bundle);
+ method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setToolbarColor(@ColorInt int);
+ field public static final String EXTRA_ADDITIONAL_TRUSTED_ORIGINS = "android.support.customtabs.extra.ADDITIONAL_TRUSTED_ORIGINS";
+ field public static final String EXTRA_DISPLAY_MODE = "androidx.browser.trusted.extra.DISPLAY_MODE";
+ field public static final String EXTRA_SHARE_DATA = "androidx.browser.trusted.extra.SHARE_DATA";
+ field public static final String EXTRA_SHARE_TARGET = "androidx.browser.trusted.extra.SHARE_TARGET";
+ field public static final String EXTRA_SPLASH_SCREEN_PARAMS = "androidx.browser.trusted.EXTRA_SPLASH_SCREEN_PARAMS";
+ }
+
+ public abstract class TrustedWebActivityService extends android.app.Service {
+ ctor public TrustedWebActivityService();
+ method @BinderThread public abstract androidx.browser.trusted.TokenStore getTokenStore();
+ method @BinderThread public boolean onAreNotificationsEnabled(String);
+ method @MainThread public final android.os.IBinder? onBind(android.content.Intent?);
+ method @BinderThread public void onCancelNotification(String, int);
+ method @BinderThread public android.os.Bundle onGetSmallIconBitmap();
+ method @BinderThread public int onGetSmallIconId();
+ method @BinderThread public boolean onNotifyNotificationWithChannel(String, int, android.app.Notification, String);
+ method @MainThread public final boolean onUnbind(android.content.Intent?);
+ field public static final String ACTION_TRUSTED_WEB_ACTIVITY_SERVICE = "android.support.customtabs.trusted.TRUSTED_WEB_ACTIVITY_SERVICE";
+ field public static final String KEY_SMALL_ICON_BITMAP = "android.support.customtabs.trusted.SMALL_ICON_BITMAP";
+ field public static final String META_DATA_NAME_SMALL_ICON = "android.support.customtabs.trusted.SMALL_ICON";
+ field public static final int SMALL_ICON_NOT_SET = -1; // 0xffffffff
+ }
+
+ public final class TrustedWebActivityServiceConnection {
+ method public boolean areNotificationsEnabled(String) throws android.os.RemoteException;
+ method public void cancel(String, int) throws android.os.RemoteException;
+ method public android.content.ComponentName getComponentName();
+ method public android.graphics.Bitmap? getSmallIconBitmap() throws android.os.RemoteException;
+ method public int getSmallIconId() throws android.os.RemoteException;
+ method public boolean notify(String, int, android.app.Notification, String) throws android.os.RemoteException;
+ }
+
+ public final class TrustedWebActivityServiceConnectionPool {
+ method @MainThread public com.google.common.util.concurrent.ListenableFuture<androidx.browser.trusted.TrustedWebActivityServiceConnection!> connect(android.net.Uri, java.util.Set<androidx.browser.trusted.Token!>, java.util.concurrent.Executor);
+ method public static androidx.browser.trusted.TrustedWebActivityServiceConnectionPool create(android.content.Context);
+ method @MainThread public boolean serviceExistsForScope(android.net.Uri, java.util.Set<androidx.browser.trusted.Token!>);
+ }
+
+}
+
+package androidx.browser.trusted.sharing {
+
+ public final class ShareData {
+ ctor public ShareData(String?, String?, java.util.List<android.net.Uri!>?);
+ method public static androidx.browser.trusted.sharing.ShareData fromBundle(android.os.Bundle);
+ method public android.os.Bundle toBundle();
+ field public static final String KEY_TEXT = "androidx.browser.trusted.sharing.KEY_TEXT";
+ field public static final String KEY_TITLE = "androidx.browser.trusted.sharing.KEY_TITLE";
+ field public static final String KEY_URIS = "androidx.browser.trusted.sharing.KEY_URIS";
+ field public final String? text;
+ field public final String? title;
+ field public final java.util.List<android.net.Uri!>? uris;
+ }
+
+ public final class ShareTarget {
+ ctor public ShareTarget(String, @androidx.browser.trusted.sharing.ShareTarget.RequestMethod String?, @androidx.browser.trusted.sharing.ShareTarget.EncodingType String?, androidx.browser.trusted.sharing.ShareTarget.Params);
+ method public static androidx.browser.trusted.sharing.ShareTarget? fromBundle(android.os.Bundle);
+ method public android.os.Bundle toBundle();
+ field public static final String ENCODING_TYPE_MULTIPART = "multipart/form-data";
+ field public static final String ENCODING_TYPE_URL_ENCODED = "application/x-www-form-urlencoded";
+ field public static final String KEY_ACTION = "androidx.browser.trusted.sharing.KEY_ACTION";
+ field public static final String KEY_ENCTYPE = "androidx.browser.trusted.sharing.KEY_ENCTYPE";
+ field public static final String KEY_METHOD = "androidx.browser.trusted.sharing.KEY_METHOD";
+ field public static final String KEY_PARAMS = "androidx.browser.trusted.sharing.KEY_PARAMS";
+ field public static final String METHOD_GET = "GET";
+ field public static final String METHOD_POST = "POST";
+ field public final String action;
+ field @androidx.browser.trusted.sharing.ShareTarget.EncodingType public final String? encodingType;
+ field @androidx.browser.trusted.sharing.ShareTarget.RequestMethod public final String? method;
+ field public final androidx.browser.trusted.sharing.ShareTarget.Params params;
+ }
+
+
+ public static final class ShareTarget.FileFormField {
+ ctor public ShareTarget.FileFormField(String, java.util.List<java.lang.String!>);
+ field public static final String KEY_ACCEPTED_TYPES = "androidx.browser.trusted.sharing.KEY_ACCEPTED_TYPES";
+ field public static final String KEY_NAME = "androidx.browser.trusted.sharing.KEY_FILE_NAME";
+ field public final java.util.List<java.lang.String!> acceptedTypes;
+ field public final String name;
+ }
+
+ public static class ShareTarget.Params {
+ ctor public ShareTarget.Params(String?, String?, java.util.List<androidx.browser.trusted.sharing.ShareTarget.FileFormField!>?);
+ field public static final String KEY_FILES = "androidx.browser.trusted.sharing.KEY_FILES";
+ field public static final String KEY_TEXT = "androidx.browser.trusted.sharing.KEY_TEXT";
+ field public static final String KEY_TITLE = "androidx.browser.trusted.sharing.KEY_TITLE";
+ field public final java.util.List<androidx.browser.trusted.sharing.ShareTarget.FileFormField!>? files;
+ field public final String? text;
+ field public final String? title;
+ }
+
+
+}
+
+package androidx.browser.trusted.splashscreens {
+
+ public final class SplashScreenParamKey {
+ field public static final String KEY_BACKGROUND_COLOR = "androidx.browser.trusted.trusted.KEY_SPLASH_SCREEN_BACKGROUND_COLOR";
+ field public static final String KEY_FADE_OUT_DURATION_MS = "androidx.browser.trusted.KEY_SPLASH_SCREEN_FADE_OUT_DURATION";
+ field public static final String KEY_IMAGE_TRANSFORMATION_MATRIX = "androidx.browser.trusted.KEY_SPLASH_SCREEN_TRANSFORMATION_MATRIX";
+ field public static final String KEY_SCALE_TYPE = "androidx.browser.trusted.KEY_SPLASH_SCREEN_SCALE_TYPE";
+ field public static final String KEY_VERSION = "androidx.browser.trusted.KEY_SPLASH_SCREEN_VERSION";
+ }
+
+ public final class SplashScreenVersion {
+ field public static final String V1 = "androidx.browser.trusted.category.TrustedWebActivitySplashScreensV1";
+ }
+
+}
+
diff --git a/buildSrc/repos.gradle b/buildSrc/repos.gradle
index ae1b4c9..d5245e8 100644
--- a/buildSrc/repos.gradle
+++ b/buildSrc/repos.gradle
@@ -37,6 +37,10 @@
repoNames.each { repo ->
handler.maven {
url repo
+ metadataSources {
+ mavenPom()
+ artifact()
+ }
}
}
if (System.getenv("ALLOW_PUBLIC_REPOS") != null || (isUnbundledBuild(ext.supportRootFolder))) {
diff --git a/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt b/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt
index 066b281..cc5d30f 100644
--- a/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt
@@ -25,7 +25,7 @@
val ANIMATION = Version("1.0.0-alpha01")
val ANIMATION_TESTING = Version("1.1.0-alpha01")
val ANNOTATION = Version("1.2.0-alpha01")
- val ANNOTATION_EXPERIMENTAL = Version("1.0.0-rc01")
+ val ANNOTATION_EXPERIMENTAL = Version("1.1.0-alpha01")
val APPCOMPAT = Version("1.2.0-alpha01")
val APPSEARCH = Version("1.0.0-alpha01")
val ARCH_CORE = Version("2.2.0-alpha01")
@@ -35,7 +35,7 @@
val AUTOFILL = Version("1.1.0-alpha01")
val BENCHMARK = Version("1.1.0-alpha01")
val BIOMETRIC = Version("1.1.0-alpha01")
- val BROWSER = Version("1.2.0-alpha09")
+ val BROWSER = Version("1.2.0-alpha10")
val CAMERA = Version("1.0.0-alpha07")
val CAMERA_EXTENSIONS = Version("1.0.0-alpha04")
val CAMERA_VIEW = Version("1.0.0-alpha04")
@@ -47,8 +47,8 @@
val COMPOSE = Version("0.1.0-dev03")
val CONTENTACCESS = Version("1.0.0-alpha01")
val COORDINATORLAYOUT = Version("1.2.0-alpha01")
- val CORE = Version("1.2.0-beta02")
- val CORE_ROLE = Version("1.0.0-alpha02")
+ val CORE = Version("1.3.0-alpha01")
+ val CORE_ROLE = Version("1.0.0-beta01")
val CURSORADAPTER = Version("1.1.0-alpha01")
val CUSTOMVIEW = Version("1.1.0-alpha02")
val DOCUMENTFILE = Version("1.1.0-alpha01")
@@ -56,7 +56,7 @@
val DYNAMICANIMATION = Version("1.1.0-alpha03")
val DYNAMICANIMATION_KTX = Version("1.0.0-alpha03")
val EMOJI = Version("1.1.0-alpha01")
- val ENTERPRISE = Version("1.0.0-rc01")
+ val ENTERPRISE = Version("1.1.0-alpha01")
val EXIFINTERFACE = Version("1.2.0-alpha01")
val FRAGMENT = Version("1.3.0-alpha01")
val FUTURES = Version("1.1.0-alpha01")
@@ -72,7 +72,7 @@
val LIFECYCLE = Version("2.3.0-alpha01")
val LIFECYCLE_EXTENSIONS = LIFECYCLE
val LOADER = Version("1.2.0-alpha01")
- val MEDIA = Version("1.2.0-alpha01")
+ val MEDIA = Version("1.2.0-alpha02")
val MEDIA2_COMMON = Version("1.1.0-alpha01")
val MEDIA2_PLAYER = Version("1.1.0-alpha01")
val MEDIA2_SESSION = Version("1.1.0-alpha01")
@@ -115,5 +115,5 @@
val VIEWPAGER2 = Version("1.1.0-alpha01")
val WEAR = Version("1.1.0-alpha01")
val WEBKIT = Version("1.2.0-alpha01")
- val WORK = Version("2.3.0-alpha03")
+ val WORK = Version("2.3.0-alpha04")
}
diff --git a/buildSrc/src/main/kotlin/androidx/build/MavenUploadHelper.kt b/buildSrc/src/main/kotlin/androidx/build/MavenUploadHelper.kt
index b3da217..427c11a 100644
--- a/buildSrc/src/main/kotlin/androidx/build/MavenUploadHelper.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/MavenUploadHelper.kt
@@ -17,198 +17,233 @@
package androidx.build
import com.android.build.gradle.LibraryPlugin
-import java.io.File
+import groovy.util.Node
import org.gradle.api.GradleException
import org.gradle.api.Project
+import org.gradle.api.XmlProvider
+import org.gradle.api.artifacts.Configuration
import org.gradle.api.artifacts.Dependency
import org.gradle.api.artifacts.ProjectDependency
-import org.gradle.api.artifacts.maven.MavenDeployer
-import org.gradle.api.artifacts.maven.MavenPom
-import org.gradle.api.tasks.Upload
-import org.gradle.kotlin.dsl.withGroovyBuilder
+import org.gradle.api.component.SoftwareComponent
+import org.gradle.api.publish.PublishingExtension
+import org.gradle.api.publish.maven.MavenPom
+import org.gradle.api.publish.maven.MavenPublication
+import org.gradle.kotlin.dsl.configure
+import org.gradle.kotlin.dsl.create
+import java.io.File
fun Project.configureMavenArtifactUpload(extension: AndroidXExtension) {
- afterEvaluate {
- if (extension.publish.shouldPublish()) {
- val mavenGroup = extension.mavenGroup?.group
- if (mavenGroup == null) {
- throw Exception("You must specify mavenGroup for $name project")
- }
- if (extension.mavenVersion == null) {
- throw Exception("You must specify mavenVersion for $name project")
- }
- val strippedGroupId = mavenGroup.substringAfterLast(".")
- if (mavenGroup.startsWith("androidx") && !name.startsWith(strippedGroupId)) {
- throw Exception("Your artifactId must start with $strippedGroupId")
- }
- group = mavenGroup
- }
- }
-
- apply(mapOf("plugin" to "maven"))
-
- // Set uploadArchives options.
- val uploadTask = tasks.getByName("uploadArchives") as Upload
-
- uploadTask.repositories {
- it.withGroovyBuilder {
- "mavenDeployer" {
- "repository"(mapOf("url" to uri(getRepositoryDirectory())))
- }
- }
- }
+ apply(mapOf("plugin" to "maven-publish"))
afterEvaluate {
- if (extension.publish.shouldPublish()) {
- uploadTask.repositories.withType(MavenDeployer::class.java) { mavenDeployer ->
- mavenDeployer.getPom().project {
- it.withGroovyBuilder {
- "name"(extension.name)
- "description"(extension.description)
- "url"(extension.url)
- "inceptionYear"(extension.inceptionYear)
-
- "licenses" {
- "license" {
- "name"("The Apache Software License, Version 2.0")
- "url"("http://www.apache.org/licenses/LICENSE-2.0.txt")
- "distribution"("repo")
- }
- for (license in extension.getLicenses()) {
- "license" {
- "name"(license.name)
- "url"(license.url)
- "distribution"("repo")
- }
- }
- }
-
- "scm" {
- "url"("http://source.android.com")
- "connection"(ANDROID_GIT_URL)
- }
-
- "developers" {
- "developer" {
- "name"("The Android Open Source Project")
- }
- }
- }
- }
-
- val groupText = extension.mavenGroup!!.group
-
- uploadTask.outputs.dir(
- File(
- getRepositoryDirectory(),
- "${groupText.replace('.', '/')}/${project.name}/${project.version}"
- )
- )
-
- uploadTask.doFirst {
- // Delete any existing archives, so that developers don't get
- // confused/surprised by the presence of old versions.
- // Additionally, deleting old versions makes it more convenient to iterate
- // over all existing archives without visiting archives having old versions too
- removePreviouslyUploadedArchives(groupText)
-
- val androidxDeps = HashSet<Dependency>()
- collectDependenciesForConfiguration(androidxDeps, this, "api")
- collectDependenciesForConfiguration(androidxDeps, this, "implementation")
- collectDependenciesForConfiguration(androidxDeps, this, "compile")
-
- mavenDeployer.getPom().whenConfigured { pom ->
- removeTestDeps(pom)
- assignAarTypes(pom, androidxDeps)
- val group = extension.mavenGroup
- if (group != null) {
- if (group.requireSameVersion) {
- assignSingleVersionDependenciesInGroup(pom, group.group)
- }
- }
- }
- }
- }
-
- // Register it as part of release so that we create a Zip file for it
- Release.register(this, extension)
- } else {
- uploadTask.enabled = false
+ components.all { component ->
+ configureComponent(extension, component)
}
}
}
-// removes dependencies having scope of "test"
-private fun Project.removeTestDeps(pom: MavenPom) {
- pom.dependencies.removeAll { dep ->
- if (dep == null) {
- return@removeAll false
+private fun Project.configureComponent(
+ extension: AndroidXExtension,
+ component: SoftwareComponent
+) {
+ if (extension.publish.shouldPublish() && component.isAndroidOrJavaReleaseComponent()) {
+ val androidxGroup = validateCoordinatesAndGetGroup(extension)
+ group = androidxGroup
+ configure<PublishingExtension> {
+ repositories {
+ it.maven { repo ->
+ repo.setUrl(getRepositoryDirectory())
+ }
+ }
+ publications {
+ if (appliesJavaGradlePluginPlugin()) {
+ // The 'java-gradle-plugin' will also add to the 'pluginMaven' publication
+ it.create<MavenPublication>("pluginMaven").pom { pom ->
+ addInformativeMetadata(pom, extension)
+ tweakDependenciesMetadata(extension, pom)
+ }
+ tasks.getByName("publishPluginMavenPublicationToMavenRepository").doFirst {
+ removePreviouslyUploadedArchives(androidxGroup)
+ }
+ } else {
+ it.create<MavenPublication>("maven") {
+ from(component)
+ pom { pom ->
+ addInformativeMetadata(pom, extension)
+ tweakDependenciesMetadata(extension, pom)
+ }
+ }
+ tasks.getByName("publishMavenPublicationToMavenRepository").doFirst {
+ removePreviouslyUploadedArchives(androidxGroup)
+ }
+ }
+ }
}
- val getScopeMethod = dep::class.java.getDeclaredMethod("getScope")
- getScopeMethod.invoke(dep) as String == "test"
+ // Register it as part of release so that we create a Zip file for it
+ Release.register(this, extension)
}
}
+private fun SoftwareComponent.isAndroidOrJavaReleaseComponent() =
+ name == "release" || name == "java"
+
+private fun Project.validateCoordinatesAndGetGroup(extension: AndroidXExtension): String {
+ val mavenGroup = extension.mavenGroup?.group
+ ?: throw Exception("You must specify mavenGroup for $name project")
+ val strippedGroupId = mavenGroup.substringAfterLast(".")
+ if (mavenGroup.startsWith("androidx") && !name.startsWith(strippedGroupId)) {
+ throw Exception("Your artifactId must start with $strippedGroupId")
+ }
+ return mavenGroup
+}
+
+/**
+ * Delete any existing archives, so that developers don't get
+ * confused/surprised by the presence of old versions.
+ * Additionally, deleting old versions makes it more convenient to iterate
+ * over all existing archives without visiting archives having old versions too
+ */
private fun Project.removePreviouslyUploadedArchives(group: String) {
val projectArchiveDir = File(
- getRepositoryDirectory(),
- "${group.replace('.', '/')}/${project.name}"
- )
+ getRepositoryDirectory(),
+ "${group.replace('.', '/')}/${project.name}"
+ )
projectArchiveDir.deleteRecursively()
}
+private fun Project.addInformativeMetadata(pom: MavenPom, extension: AndroidXExtension) {
+ pom.name.set(provider { extension.name })
+ pom.description.set(provider { extension.description })
+ pom.url.set(provider { extension.url })
+ pom.inceptionYear.set(provider { extension.inceptionYear })
+ pom.licenses { licenses ->
+ licenses.license { license ->
+ license.name.set("The Apache Software License, Version 2.0")
+ license.url.set("http://www.apache.org/licenses/LICENSE-2.0.txt")
+ license.distribution.set("repo")
+ }
+ for (extraLicense in extension.getLicenses()) {
+ licenses.license { license ->
+ license.name.set(provider { extraLicense.name })
+ license.url.set(provider { extraLicense.url })
+ license.distribution.set("repo")
+ }
+ }
+ }
+ pom.scm { scm ->
+ scm.url.set("http://source.android.com")
+ scm.connection.set(ANDROID_GIT_URL)
+ }
+ pom.developers { devs ->
+ devs.developer { dev ->
+ dev.name.set("The Android Open Source Project")
+ }
+ }
+}
+
+private fun Project.tweakDependenciesMetadata(extension: AndroidXExtension, pom: MavenPom) {
+ pom.withXml { xml ->
+ // The following code depends on getProjectsMap which is only available late in
+ // configuration at which point Java Library plugin's variants are not allowed to be
+ // modified. TODO remove the use of getProjectsMap and move to earlier configuration.
+ // For more context see:
+ // https://android-review.googlesource.com/c/platform/frameworks/support/+/1144664/8/buildSrc/src/main/kotlin/androidx/build/MavenUploadHelper.kt#177
+ // assignSingleVersionDependenciesInGroupForGradleMetadata(
+ // configurations.findByName("apiElements"), extension)
+ // assignSingleVersionDependenciesInGroupForGradleMetadata(
+ // configurations.findByName("runtimeElements"), extension)
+ assignSingleVersionDependenciesInGroupForGradleMetadata(
+ configurations.findByName("releaseApiPublication"), extension)
+ assignSingleVersionDependenciesInGroupForGradleMetadata(
+ configurations.findByName("releaseRuntimePublication"), extension)
+ assignSingleVersionDependenciesInGroupForPom(xml, extension)
+ assignAarTypes(xml)
+ }
+}
+
// TODO(aurimas): remove this when Gradle bug is fixed.
// https://github.com/gradle/gradle/issues/3170
-private fun Project.assignAarTypes(pom: MavenPom, androidxDeps: HashSet<Dependency>) {
- pom.dependencies.forEach { dep ->
- if (dep == null) {
+private fun Project.assignAarTypes(xml: XmlProvider) {
+ val androidxDependencies = HashSet<Dependency>()
+ collectDependenciesForConfiguration(androidxDependencies, "api")
+ collectDependenciesForConfiguration(androidxDependencies, "implementation")
+ collectDependenciesForConfiguration(androidxDependencies, "compile")
+
+ val dependencies = xml.asNode().children().find { it is Node && it.name().toString()
+ .endsWith("dependencies") } as Node?
+
+ dependencies?.children()?.forEach { dep ->
+ if (dep !is Node) {
return@forEach
}
-
- val getGroupIdMethod =
- dep::class.java.getDeclaredMethod("getGroupId")
- val groupId: String = getGroupIdMethod.invoke(dep) as String
- val getArtifactIdMethod =
- dep::class.java.getDeclaredMethod("getArtifactId")
- val artifactId: String = getArtifactIdMethod.invoke(dep) as String
-
- if (isAndroidProject(groupId, artifactId, androidxDeps)) {
- val setTypeMethod = dep::class.java.getDeclaredMethod("setType",
- java.lang.String::class.java)
- setTypeMethod.invoke(dep, "aar")
+ val groupId = dep.children().first { it is Node && it.name().toString()
+ .endsWith("groupId") } as Node
+ val artifactId = dep.children().first { it is Node && it.name().toString()
+ .endsWith("artifactId") } as Node
+ if (isAndroidProject(groupId.children()[0] as String,
+ artifactId.children()[0] as String, androidxDependencies)) {
+ dep.appendNode("type", "aar")
}
}
}
/**
- * Specifies that every dependency in <group> refers to a single version and can't be
- * automatically promoted to a new version.
- * This will replace, for example, a version string of "1.0" with a version string of "[1.0]"
+ * Create dependency constraints between projects of a group that require the same versions.
+ * The constraints are published in Gradle Module Metadata and cause all modules to align.
*/
-private fun Project.assignSingleVersionDependenciesInGroup(pom: MavenPom, group: String) {
- pom.dependencies.forEach { dep ->
- if (dep == null) {
+fun Project.assignSingleVersionDependenciesInGroupForGradleMetadata(
+ configuration: Configuration?,
+ extension: AndroidXExtension
+) {
+ if (configuration != null && extension.mavenGroup?.requireSameVersion == true) {
+ getProjectsMap().forEach { (id, _) ->
+ val group = id.split(":")[0]
+ val name = id.split(":")[1]
+ if (group == extension.mavenGroup?.group && name != project.name) {
+ configuration.dependencyConstraints.add(
+ dependencies.constraints.create("$id:${project.version}")
+ )
+ }
+ }
+ }
+}
+
+/**
+ * Modifies the given .pom to specify that every dependency in <group> refers to a single version
+ * and can't be automatically promoted to a new version.
+ * This will replace, for example, a version string of "1.0" with a version string of "[1.0]"
+ *
+ * Note: this is not enforced in Gradle nor in plain Maven (without the Enforcer plugin)
+ * (https://github.com/gradle/gradle/issues/8297)
+ */
+private fun assignSingleVersionDependenciesInGroupForPom(
+ xml: XmlProvider,
+ extension: AndroidXExtension
+) {
+ val group = extension.mavenGroup
+ if (group == null || !group.requireSameVersion) {
+ return
+ }
+
+ val dependencies = xml.asNode().children().find { it is Node && it.name().toString()
+ .endsWith("dependencies") } as Node?
+ dependencies?.children()?.forEach { dep ->
+ if (dep !is Node) {
return@forEach
}
- val getGroupIdMethod =
- dep::class.java.getDeclaredMethod("getGroupId")
- val groupId: String = getGroupIdMethod.invoke(dep) as String
- if (groupId == group) {
- val getVersionMethod =
- dep::class.java.getDeclaredMethod("getVersion")
- val declaredVersion = getVersionMethod.invoke(dep) as String
-
+ val groupId = dep.children().first { it is Node && it.name().toString()
+ .endsWith("groupId") } as Node
+ if (groupId.children()[0].toString() == group.group) {
+ val versionNode = dep.children().first { it is Node && it.name().toString()
+ .endsWith("version") } as Node
+ val declaredVersion = versionNode.children()[0].toString()
if (isVersionRange(declaredVersion)) {
throw GradleException("Unsupported version '$declaredVersion': " +
- "already is a version range")
+ "already is a version range")
}
-
val pinnedVersion = "[$declaredVersion]"
-
- val setVersionMethod = dep::class.java.getDeclaredMethod("setVersion",
- java.lang.String::class.java)
- setVersionMethod.invoke(dep, pinnedVersion)
+ versionNode.setValue(pinnedVersion)
}
}
}
@@ -221,12 +256,11 @@
text.contains(",")
}
-private fun collectDependenciesForConfiguration(
+private fun Project.collectDependenciesForConfiguration(
androidxDependencies: MutableSet<Dependency>,
- project: Project,
name: String
) {
- val config = project.configurations.findByName(name)
+ val config = configurations.findByName(name)
config?.dependencies?.forEach { dep ->
if (dep.group?.startsWith("androidx.") == true) {
androidxDependencies.add(dep)
@@ -253,5 +287,7 @@
return false
}
+private fun Project.appliesJavaGradlePluginPlugin() = pluginManager.hasPlugin("java-gradle-plugin")
+
private const val ANDROID_GIT_URL =
"scm:git:https://android.googlesource.com/platform/frameworks/support"
diff --git a/buildSrc/src/main/kotlin/androidx/build/PublishDocsRules.kt b/buildSrc/src/main/kotlin/androidx/build/PublishDocsRules.kt
index c67ea72..5a76201 100644
--- a/buildSrc/src/main/kotlin/androidx/build/PublishDocsRules.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/PublishDocsRules.kt
@@ -28,7 +28,7 @@
* Rule set used to generate public documentation.
*/
val RELEASE_RULE = docsRules("public", false) {
- prebuilts(LibraryGroups.ACTIVITY, "1.1.0-rc01")
+ prebuilts(LibraryGroups.ACTIVITY, "1.1.0-rc02")
prebuilts(LibraryGroups.ADS, "1.0.0-alpha02")
prebuilts(LibraryGroups.ANNOTATION, "annotation", "1.1.0")
prebuilts(LibraryGroups.ANNOTATION, "annotation-experimental", "1.0.0-rc01")
@@ -83,8 +83,8 @@
ignore(LibraryGroups.LIFECYCLE.group, "lifecycle-compiler")
ignore(LibraryGroups.LIFECYCLE.group, "lifecycle-runtime-ktx-lint")
ignore(LibraryGroups.LIFECYCLE.group, "lifecycle-livedata-core-truth")
- prebuilts(LibraryGroups.LIFECYCLE, "lifecycle-viewmodel-savedstate", "1.0.0-rc01")
- prebuilts(LibraryGroups.LIFECYCLE, "2.2.0-rc01")
+ prebuilts(LibraryGroups.LIFECYCLE, "lifecycle-viewmodel-savedstate", "1.0.0-rc02")
+ prebuilts(LibraryGroups.LIFECYCLE, "2.2.0-rc02")
ignore(LibraryGroups.LOADER.group, "loader-ktx")
prebuilts(LibraryGroups.LOADER, "1.1.0")
prebuilts(LibraryGroups.LOCALBROADCASTMANAGER, "1.1.0-alpha01")
diff --git a/buildSrc/src/main/kotlin/androidx/build/Release.kt b/buildSrc/src/main/kotlin/androidx/build/Release.kt
index 6d7ac53..10d3ef51a 100644
--- a/buildSrc/src/main/kotlin/androidx/build/Release.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/Release.kt
@@ -24,7 +24,6 @@
import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.Nested
import org.gradle.api.tasks.TaskProvider
-import org.gradle.api.tasks.Upload
import org.gradle.api.tasks.bundling.Zip
import java.io.File
import java.util.TreeSet
@@ -86,7 +85,7 @@
*/
var includeMetadata: Boolean,
/**
- * The out folder for uploadArchives.
+ * The out folder for publishing libraries.
*/
val supportRepoOut: File,
/**
@@ -230,11 +229,11 @@
projectName = project.name,
version = version.toString()
)
- val uploadTask = project.tasks.named("uploadArchives", Upload::class.java)
+ val publishTask = project.tasks.named("publish")
zipTasks.forEach {
it.configure {
it.candidates.add(artifact)
- it.dependsOn(uploadTask)
+ it.dependsOn(publishTask)
}
}
}
diff --git a/buildSrc/src/main/kotlin/androidx/build/SourceJarTaskHelper.kt b/buildSrc/src/main/kotlin/androidx/build/SourceJarTaskHelper.kt
index 92535a2..f4052b7 100644
--- a/buildSrc/src/main/kotlin/androidx/build/SourceJarTaskHelper.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/SourceJarTaskHelper.kt
@@ -18,9 +18,17 @@
import com.android.build.gradle.LibraryExtension
import org.gradle.api.Project
+import org.gradle.api.artifacts.Configuration
+import org.gradle.api.attributes.Bundling
+import org.gradle.api.attributes.Category
+import org.gradle.api.attributes.DocsType
+import org.gradle.api.attributes.Usage
+import org.gradle.api.component.AdhocComponentWithVariants
import org.gradle.api.plugins.JavaPluginConvention
+import org.gradle.api.tasks.TaskProvider
import org.gradle.api.tasks.bundling.Jar
import org.gradle.kotlin.dsl.getPlugin
+import org.gradle.kotlin.dsl.named
/**
* Sets up a source jar task for an Android library project.
@@ -31,7 +39,7 @@
it.archiveClassifier.set("sources")
it.from(extension.sourceSets.getByName("main").java.srcDirs)
}
- artifacts.add("archives", sourceJar)
+ registerSourcesVariant(sourceJar)
}
}
@@ -41,9 +49,47 @@
fun Project.configureSourceJarForJava() {
val sourceJar = tasks.register("sourceJar", Jar::class.java) {
it.archiveClassifier.set("sources")
-
val convention = convention.getPlugin<JavaPluginConvention>()
it.from(convention.sourceSets.getByName("main").allSource.srcDirs)
}
- artifacts.add("archives", sourceJar)
+ registerSourcesVariant(sourceJar)
}
+
+private fun Project.registerSourcesVariant(sourceJar: TaskProvider<Jar>) {
+ configurations.create("sourcesElements") { gradleVariant ->
+ gradleVariant.isVisible = false
+ gradleVariant.isCanBeResolved = false
+ gradleVariant.attributes.attribute(
+ Usage.USAGE_ATTRIBUTE,
+ objects.named(Usage.JAVA_RUNTIME)
+ )
+ gradleVariant.getAttributes().attribute(
+ Category.CATEGORY_ATTRIBUTE,
+ objects.named(Category.DOCUMENTATION)
+ )
+ gradleVariant.getAttributes().attribute(
+ Bundling.BUNDLING_ATTRIBUTE,
+ objects.named(Bundling.EXTERNAL)
+ )
+ gradleVariant.getAttributes().attribute(
+ DocsType.DOCS_TYPE_ATTRIBUTE,
+ objects.named(DocsType.SOURCES)
+ )
+ gradleVariant.outgoing.artifact(sourceJar)
+
+ registerAsComponentForPublishing(gradleVariant)
+ }
+}
+
+private fun Project.registerAsComponentForPublishing(gradleVariant: Configuration) {
+ // Android Library project 'release' component
+ val release = components.findByName("release")
+ if (release is AdhocComponentWithVariants) {
+ release.addVariantsFromConfiguration(gradleVariant) { }
+ }
+ // Java Library project 'java' component
+ val javaComponent = components.findByName("java")
+ if (javaComponent is AdhocComponentWithVariants) {
+ javaComponent.addVariantsFromConfiguration(gradleVariant) { }
+ }
+}
\ No newline at end of file
diff --git a/buildSrc/src/main/kotlin/androidx/build/dependencies/Dependencies.kt b/buildSrc/src/main/kotlin/androidx/build/dependencies/Dependencies.kt
index ed324cc..9809907 100644
--- a/buildSrc/src/main/kotlin/androidx/build/dependencies/Dependencies.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/dependencies/Dependencies.kt
@@ -31,7 +31,7 @@
const val APACHE_COMMONS_CODEC = "commons-codec:commons-codec:1.10"
const val CHECKER_FRAMEWORK = "org.checkerframework:checker-qual:2.5.3"
const val CONSTRAINT_LAYOUT = "androidx.constraintlayout:constraintlayout:1.1.0@aar"
-const val DEXMAKER_MOCKITO = "com.linkedin.dexmaker:dexmaker-mockito:2.19.0"
+const val DEXMAKER_MOCKITO = "com.linkedin.dexmaker:dexmaker-mockito:2.25.0"
const val ESPRESSO_CONTRIB = "androidx.test.espresso:espresso-contrib:3.1.0"
const val ESPRESSO_CORE = "androidx.test.espresso:espresso-core:3.1.0"
const val ESPRESSO_IDLING_RESOURCE = "androidx.test.espresso:espresso-idling-resource:3.1.0"
@@ -70,7 +70,7 @@
const val LEAKCANARY_INSTRUMENTATION =
"com.squareup.leakcanary:leakcanary-android-instrumentation:1.6.2"
const val MATERIAL = "com.google.android.material:material:1.0.0"
-const val MOCKITO_CORE = "org.mockito:mockito-core:2.19.0"
+const val MOCKITO_CORE = "org.mockito:mockito-core:2.25.0"
const val MOCKITO_KOTLIN = "com.nhaarman.mockitokotlin2:mockito-kotlin:2.1.0"
const val MULTIDEX = "androidx.multidex:multidex:2.0.0"
const val NULLAWAY = "com.uber.nullaway:nullaway:0.3.7"
diff --git a/buildSrc/src/main/kotlin/androidx/build/dokka/Dokka.kt b/buildSrc/src/main/kotlin/androidx/build/dokka/Dokka.kt
index c28f2a5..7ebefa6 100644
--- a/buildSrc/src/main/kotlin/androidx/build/dokka/Dokka.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/dokka/Dokka.kt
@@ -115,34 +115,26 @@
val docTaskName = generatorTaskNameForType(docsType, language)
- val guavaDocLink = DokkaConfiguration.ExternalDocumentationLink.Builder().apply {
- this.url = URL("https://guava.dev/releases/$GUAVA_VERSION/api/docs/")
- // Guava documentation doesn't have the necessary package-list file to provide the packages
- // to Dokka so we have to host a file internally as a workaround
- this.packageListUrl = project.projectDir.toPath()
- .resolve("package-lists/guava/package-list").toUri().toURL()
- }.build()
-
- val kotlinLangLink = DokkaConfiguration.ExternalDocumentationLink.Builder().apply {
- this.url = URL("https://kotlinlang.org/api/latest/jvm/stdlib/")
-
- this.packageListUrl = project.projectDir.toPath()
- .resolve("package-lists/kotlin/package-list").toUri().toURL()
- }.build()
-
- val coroutinesCoreLink = DokkaConfiguration.ExternalDocumentationLink.Builder().apply {
- this.url = URL("https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/")
-
- this.packageListUrl = project.projectDir.toPath()
- .resolve("package-lists/coroutinesCore/package-list").toUri().toURL()
- }.build()
-
- val androidLink = DokkaConfiguration.ExternalDocumentationLink.Builder().apply {
- this.url = URL("https://developer.android.com/reference/")
-
- this.packageListUrl = project.projectDir.toPath()
- .resolve("package-lists/android/package-list").toUri().toURL()
- }.build()
+ val guavaDocLink = createExternalDocumentationLinkMapping(
+ "package-lists/guava/package-list",
+ "https://guava.dev/releases/$GUAVA_VERSION/api/docs/",
+ project
+ )
+ val kotlinLangLink = createExternalDocumentationLinkMapping(
+ "package-lists/kotlin/package-list",
+ "https://kotlinlang.org/api/latest/jvm/stdlib/",
+ project
+ )
+ val coroutinesCoreLink = createExternalDocumentationLinkMapping(
+ "package-lists/coroutinesCore/package-list",
+ "https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/",
+ project
+ )
+ val androidLink = createExternalDocumentationLinkMapping(
+ "package-lists/android/package-list",
+ "https://developer.android.com/reference/",
+ project
+ )
return project.tasks.register(docTaskName, DokkaAndroidTask::class.java) { task ->
task.moduleName = project.name
@@ -172,6 +164,27 @@
}
}
+ /**
+ * Documentation for external projects may live in other websites.
+ * If we want to link to types defined by those projects, we need to tell Dokka which types
+ * are defined in which projects, and where those projects are.
+ * We do this by providing a file named package-list for each such project.
+ * Each package-list file is called an ExternalDocumentationLink by Dokka.
+ * We don't make use of Dokka's ability to automatically download these from the internet because
+ * we want the build process to be as deterministic as possible.
+ */
+ private fun createExternalDocumentationLinkMapping(
+ localMappingFileName: String,
+ externalUrl: String,
+ project: Project
+ ): DokkaConfiguration.ExternalDocumentationLink {
+ return DokkaConfiguration.ExternalDocumentationLink.Builder().apply {
+ this.url = URL(externalUrl)
+ this.packageListUrl = project.projectDir.toPath()
+ .resolve(localMappingFileName).toUri().toURL()
+ }.build()
+ }
+
fun Project.configureAndroidProjectForDokka(
library: LibraryExtension,
extension: AndroidXExtension
diff --git a/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/PreviewTest.java b/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/PreviewTest.java
index c40e986..b9feda4 100644
--- a/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/PreviewTest.java
+++ b/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/PreviewTest.java
@@ -50,7 +50,6 @@
import androidx.test.annotation.UiThreadTest;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
-import androidx.test.filters.FlakyTest;
import androidx.test.filters.LargeTest;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.rule.GrantPermissionRule;
@@ -158,11 +157,12 @@
assertThat(preview.getPreviewSurfaceCallback()).isNull();
}
- @FlakyTest
@Test
@UiThreadTest
public void useCaseIsConstructedWithDefaultConfiguration() {
Preview useCase = new Preview(mDefaultConfig);
+ useCase.setPreviewSurfaceCallback(CameraXExecutors.highPriorityExecutor(),
+ mPreviewSurfaceCallbackWithFrameAvailableListener);
useCase.updateSuggestedResolution(Collections.singletonMap(mCameraId, DEFAULT_RESOLUTION));
List<Surface> surfaces =
@@ -172,12 +172,13 @@
assertThat(surfaces.get(0).isValid()).isTrue();
}
- @FlakyTest
@Test
@UiThreadTest
public void useCaseIsConstructedWithCustomConfiguration() {
PreviewConfig config = new PreviewConfig.Builder().setLensFacing(LensFacing.BACK).build();
Preview useCase = new Preview(config);
+ useCase.setPreviewSurfaceCallback(CameraXExecutors.highPriorityExecutor(),
+ mPreviewSurfaceCallbackWithFrameAvailableListener);
useCase.updateSuggestedResolution(Collections.singletonMap(mCameraId, DEFAULT_RESOLUTION));
List<Surface> surfaces =
@@ -199,12 +200,13 @@
assertThat(useCase.isTorchOn()).isTrue();
}
- @FlakyTest
@Test
@UiThreadTest
public void updateSessionConfigWithSuggestedResolution() {
PreviewConfig config = new PreviewConfig.Builder().setLensFacing(LensFacing.BACK).build();
Preview useCase = new Preview(config);
+ useCase.setPreviewSurfaceCallback(CameraXExecutors.highPriorityExecutor(),
+ mPreviewSurfaceCallbackWithFrameAvailableListener);
final Size[] sizes = {DEFAULT_RESOLUTION, SECONDARY_RESOLUTION};
diff --git a/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/impl/util/FakeRepeatingUseCase.java b/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/impl/util/FakeRepeatingUseCase.java
index ed70132..f0cd73e 100644
--- a/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/impl/util/FakeRepeatingUseCase.java
+++ b/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/impl/util/FakeRepeatingUseCase.java
@@ -78,7 +78,6 @@
@Override
protected UseCaseConfig.Builder<?, ?, ?> getDefaultBuilder(LensFacing lensFacing) {
return new FakeUseCaseConfig.Builder()
- .setLensFacing(lensFacing)
.setSessionOptionUnpacker(
new SessionConfig.OptionUnpacker() {
@Override
diff --git a/camera/camera-camera2/src/main/java/androidx/camera/camera2/impl/Camera2DeviceSurfaceManager.java b/camera/camera-camera2/src/main/java/androidx/camera/camera2/impl/Camera2DeviceSurfaceManager.java
index b3ad1f3..0ed449d 100644
--- a/camera/camera-camera2/src/main/java/androidx/camera/camera2/impl/Camera2DeviceSurfaceManager.java
+++ b/camera/camera-camera2/src/main/java/androidx/camera/camera2/impl/Camera2DeviceSurfaceManager.java
@@ -31,10 +31,10 @@
import androidx.camera.core.CameraDeviceConfig;
import androidx.camera.core.CameraDeviceSurfaceManager;
import androidx.camera.core.CameraX;
+import androidx.camera.core.ImageOutputConfig;
import androidx.camera.core.LensFacing;
import androidx.camera.core.SurfaceConfig;
import androidx.camera.core.UseCase;
-import androidx.camera.core.UseCaseConfig;
import androidx.core.util.Preconditions;
import java.util.ArrayList;
@@ -199,7 +199,9 @@
if (originalUseCases != null) {
for (UseCase useCase : originalUseCases) {
- String useCaseCameraId = getCameraIdFromConfig(useCase.getUseCaseConfig());
+ CameraDeviceConfig deviceConfig =
+ Preconditions.checkNotNull(useCase.getBoundDeviceConfig());
+ String useCaseCameraId = getCameraIdFromConfig(deviceConfig);
Size resolution = useCase.getAttachedSurfaceResolution(useCaseCameraId);
surfaceConfigs.add(
@@ -286,7 +288,7 @@
* @throws IllegalStateException if not initialized
*/
@Override
- public boolean requiresCorrectedAspectRatio(@NonNull UseCaseConfig<?> useCaseConfig) {
+ public boolean requiresCorrectedAspectRatio(@NonNull CameraDeviceConfig useCaseConfig) {
checkInitialized();
String cameraId = getCameraIdFromConfig(useCaseConfig);
@@ -304,16 +306,18 @@
* Returns the corrected aspect ratio for the given use case configuration or {@code null} if
* no correction is needed.
*
- * @param useCaseConfig to check aspect ratio
+ * @param deviceConfig to identify device which may require correction
+ * @param rotation desired rotation of output aspect ratio relative to natural orientation
* @return the corrected aspect ratio for the use case
* @throws IllegalStateException if not initialized
*/
@Nullable
@Override
- public Rational getCorrectedAspectRatio(@NonNull UseCaseConfig<?> useCaseConfig) {
+ public Rational getCorrectedAspectRatio(@NonNull CameraDeviceConfig deviceConfig,
+ @ImageOutputConfig.RotationValue int rotation) {
checkInitialized();
- String cameraId = getCameraIdFromConfig(useCaseConfig);
+ String cameraId = getCameraIdFromConfig(deviceConfig);
SupportedSurfaceCombination supportedSurfaceCombination =
mCameraSupportedSurfaceCombinationMap.get(cameraId);
@@ -321,11 +325,10 @@
throw new IllegalArgumentException(
"Fail to find supported surface info - CameraId:" + cameraId);
}
- return supportedSurfaceCombination.getCorrectedAspectRatio(useCaseConfig);
+ return supportedSurfaceCombination.getCorrectedAspectRatio(rotation);
}
- private String getCameraIdFromConfig(UseCaseConfig<?> useCaseConfig) {
- CameraDeviceConfig config = (CameraDeviceConfig) useCaseConfig;
+ private String getCameraIdFromConfig(@NonNull CameraDeviceConfig config) {
String cameraId;
try {
LensFacing lensFacing = config.getLensFacing(null);
@@ -336,7 +339,7 @@
cameraId = CameraX.getCameraWithLensFacing(lensFacing);
} catch (Exception e) {
throw new IllegalArgumentException(
- "Unable to get camera ID for use case " + useCaseConfig.getTargetName(), e);
+ "Unable to get camera ID from camera device config.", e);
}
return cameraId;
}
diff --git a/camera/camera-camera2/src/main/java/androidx/camera/camera2/impl/SupportedSurfaceCombination.java b/camera/camera-camera2/src/main/java/androidx/camera/camera2/impl/SupportedSurfaceCombination.java
index c5401a5..14ef0cb 100644
--- a/camera/camera-camera2/src/main/java/androidx/camera/camera2/impl/SupportedSurfaceCombination.java
+++ b/camera/camera-camera2/src/main/java/androidx/camera/camera2/impl/SupportedSurfaceCombination.java
@@ -256,7 +256,7 @@
}
// Gets the corrected aspect ratio due to device constraints or null if no correction is needed.
- Rational getCorrectedAspectRatio(UseCaseConfig<?> useCaseConfig) {
+ Rational getCorrectedAspectRatio(@ImageOutputConfig.RotationValue int targetRotation) {
Rational outputRatio = null;
/**
* If the device is LEGACY + Android 5.0, then return the same aspect ratio as maximum JPEG
@@ -269,8 +269,6 @@
&& Build.VERSION.SDK_INT == 21) {
Size maxJpegSize = fetchMaxSize(ImageFormat.JPEG);
outputRatio = new Rational(maxJpegSize.getWidth(), maxJpegSize.getHeight());
- ImageOutputConfig config = (ImageOutputConfig) useCaseConfig;
- int targetRotation = config.getTargetRotation(Surface.ROTATION_0);
outputRatio = rotateAspectRatioByRotation(outputRatio, targetRotation);
}
return outputRatio;
diff --git a/camera/camera-camera2/src/test/java/androidx/camera/camera2/impl/Camera2DeviceSurfaceManagerTest.java b/camera/camera-camera2/src/test/java/androidx/camera/camera2/impl/Camera2DeviceSurfaceManagerTest.java
index cfcc360..5393be9 100644
--- a/camera/camera-camera2/src/test/java/androidx/camera/camera2/impl/Camera2DeviceSurfaceManagerTest.java
+++ b/camera/camera-camera2/src/test/java/androidx/camera/camera2/impl/Camera2DeviceSurfaceManagerTest.java
@@ -33,10 +33,12 @@
import android.os.Build;
import android.util.Rational;
import android.util.Size;
+import android.view.Surface;
import android.view.WindowManager;
import androidx.camera.core.AppConfig;
import androidx.camera.core.AspectRatio;
+import androidx.camera.core.CameraDeviceConfig;
import androidx.camera.core.CameraDeviceSurfaceManager;
import androidx.camera.core.CameraX;
import androidx.camera.core.ExtendableUseCaseConfigFactory;
@@ -509,7 +511,9 @@
previewConfigBuilder.setLensFacing(LensFacing.FRONT);
PreviewConfig previewConfig = previewConfigBuilder.build();
- Rational resultAspectRatio = mSurfaceManager.getCorrectedAspectRatio(previewConfig);
+ CameraDeviceConfig deviceConfig = (CameraDeviceConfig) previewConfig;
+ Rational resultAspectRatio = mSurfaceManager.getCorrectedAspectRatio(deviceConfig,
+ previewConfig.getTargetRotation(Surface.ROTATION_0));
Size maxJpegSize = supportedSurfaceCombination.getMaxOutputSizeByFormat(ImageFormat.JPEG);
Rational maxJpegAspectRatio = new Rational(maxJpegSize.getHeight(), maxJpegSize.getWidth());
diff --git a/camera/camera-camera2/src/test/java/androidx/camera/camera2/impl/SupportedSurfaceCombinationTest.java b/camera/camera-camera2/src/test/java/androidx/camera/camera2/impl/SupportedSurfaceCombinationTest.java
index c9bce81..c5f62aa 100644
--- a/camera/camera-camera2/src/test/java/androidx/camera/camera2/impl/SupportedSurfaceCombinationTest.java
+++ b/camera/camera-camera2/src/test/java/androidx/camera/camera2/impl/SupportedSurfaceCombinationTest.java
@@ -26,6 +26,7 @@
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
+import android.app.Instrumentation;
import android.content.Context;
import android.graphics.ImageFormat;
import android.hardware.camera2.CameraCharacteristics;
@@ -35,6 +36,7 @@
import android.util.Pair;
import android.util.Rational;
import android.util.Size;
+import android.view.Surface;
import android.view.WindowManager;
import androidx.camera.camera2.Camera2AppConfig;
@@ -60,8 +62,10 @@
import androidx.camera.testing.StreamConfigurationMapUtil;
import androidx.camera.testing.fakes.FakeCamera;
import androidx.camera.testing.fakes.FakeCameraFactory;
+import androidx.camera.testing.fakes.FakeLifecycleOwner;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.filters.SmallTest;
+import androidx.test.platform.app.InstrumentationRegistry;
import org.junit.After;
import org.junit.Before;
@@ -106,6 +110,7 @@
private final Size mMod16Size = new Size(960, 544);
private final CamcorderProfileHelper mMockCamcorderProfileHelper =
Mockito.mock(CamcorderProfileHelper.class);
+ private final Instrumentation mInstrumentation = InstrumentationRegistry.getInstrumentation();
/**
* Except for ImageFormat.JPEG, ImageFormat.YUV, and ImageFormat.RAW_SENSOR, other image formats
@@ -159,6 +164,9 @@
@After
public void tearDown() throws ExecutionException, InterruptedException {
+ if (CameraX.isInitialized()) {
+ mInstrumentation.runOnMainSync(() -> CameraX.unbindAll());
+ }
CameraX.shutdown().get();
}
@@ -474,10 +482,16 @@
previewConfigBuilder.setLensFacing(LensFacing.FRONT);
Preview preview = new Preview(previewConfigBuilder.build());
+ // Ensure we are bound to a camera to ensure aspect ratio correction is applied.
+ FakeLifecycleOwner fakeLifecycle = new FakeLifecycleOwner();
+ CameraX.bindToLifecycle(fakeLifecycle, preview);
+
PreviewConfig config = (PreviewConfig) preview.getUseCaseConfig();
Rational previewAspectRatio = config.getTargetAspectRatioCustom();
- Rational correctedAspectRatio = supportedSurfaceCombination.getCorrectedAspectRatio(config);
+ Rational correctedAspectRatio =
+ supportedSurfaceCombination.getCorrectedAspectRatio(
+ config.getTargetRotation(Surface.ROTATION_0));
Size maxJpegSize = supportedSurfaceCombination.getMaxOutputSizeByFormat(ImageFormat.JPEG);
Rational maxJpegAspectRatio = new Rational(maxJpegSize.getHeight(), maxJpegSize.getWidth());
diff --git a/camera/camera-core/build.gradle b/camera/camera-core/build.gradle
index 918131b..5af6694 100644
--- a/camera/camera-core/build.gradle
+++ b/camera/camera-core/build.gradle
@@ -28,7 +28,7 @@
dependencies {
api("androidx.lifecycle:lifecycle-livedata:2.1.0")
api("androidx.lifecycle:lifecycle-common:2.1.0")
- api("androidx.annotation:annotation-experimental:1.0.0-beta01")
+ api("androidx.annotation:annotation-experimental:1.0.0-rc01")
implementation("androidx.exifinterface:exifinterface:1.0.0")
implementation("androidx.annotation:annotation:1.0.0")
implementation("androidx.core:core:1.1.0")
diff --git a/camera/camera-core/src/androidTest/java/androidx/camera/core/CameraXTest.java b/camera/camera-core/src/androidTest/java/androidx/camera/core/CameraXTest.java
index 9113fc0..d6c2d50 100644
--- a/camera/camera-core/src/androidTest/java/androidx/camera/core/CameraXTest.java
+++ b/camera/camera-core/src/androidTest/java/androidx/camera/core/CameraXTest.java
@@ -216,10 +216,14 @@
public void bindMultipleUseCases() {
initCameraX();
FakeUseCaseConfig config0 =
- new FakeUseCaseConfig.Builder().setTargetName("config0").build();
+ new FakeUseCaseConfig.Builder()
+ .setTargetName("config0")
+ .setLensFacing(CAMERA_LENS_FACING).build();
FakeUseCase fakeUseCase = new FakeUseCase(config0);
FakeOtherUseCaseConfig config1 =
- new FakeOtherUseCaseConfig.Builder().setTargetName("config1").build();
+ new FakeOtherUseCaseConfig.Builder()
+ .setTargetName("config1")
+ .setLensFacing(CAMERA_LENS_FACING).build();
FakeOtherUseCase fakeOtherUseCase = new FakeOtherUseCase(config1);
CameraX.bindToLifecycle(mLifecycle, fakeUseCase, fakeOtherUseCase);
@@ -383,10 +387,14 @@
public void canGetActiveUseCases_afterBindToLifecycle() {
initCameraX();
FakeUseCaseConfig config0 =
- new FakeUseCaseConfig.Builder().setTargetName("config0").build();
+ new FakeUseCaseConfig.Builder()
+ .setTargetName("config0")
+ .setLensFacing(CAMERA_LENS_FACING).build();
FakeUseCase fakeUseCase = new FakeUseCase(config0);
FakeOtherUseCaseConfig config1 =
- new FakeOtherUseCaseConfig.Builder().setTargetName("config1").build();
+ new FakeOtherUseCaseConfig.Builder()
+ .setTargetName("config1")
+ .setLensFacing(CAMERA_LENS_FACING).build();
FakeOtherUseCase fakeOtherUseCase = new FakeOtherUseCase(config1);
CameraX.bindToLifecycle(mLifecycle, fakeUseCase, fakeOtherUseCase);
@@ -434,7 +442,7 @@
SessionConfig.Builder builder = new SessionConfig.Builder();
- UseCaseConfig<?> config = getUseCaseConfig();
+ CameraDeviceConfig config = getBoundDeviceConfig();
String cameraId = getCameraIdUnchecked(config);
attachToCamera(cameraId, builder.build());
return suggestedResolutionMap;
diff --git a/camera/camera-core/src/androidTest/java/androidx/camera/core/FakeOtherUseCase.java b/camera/camera-core/src/androidTest/java/androidx/camera/core/FakeOtherUseCase.java
index 0a39ce4..7aed7d0 100644
--- a/camera/camera-core/src/androidTest/java/androidx/camera/core/FakeOtherUseCase.java
+++ b/camera/camera-core/src/androidTest/java/androidx/camera/core/FakeOtherUseCase.java
@@ -49,12 +49,6 @@
}
@Override
- protected UseCaseConfig.Builder<?, ?, ?> getDefaultBuilder(LensFacing lensFacing) {
- return new FakeOtherUseCaseConfig.Builder().setLensFacing(
- lensFacing == null ? LensFacing.BACK : lensFacing);
- }
-
- @Override
@NonNull
protected Map<String, Size> onSuggestedResolutionUpdated(
@NonNull Map<String, Size> suggestedResolutionMap) {
diff --git a/camera/camera-core/src/androidTest/java/androidx/camera/core/UseCaseTest.java b/camera/camera-core/src/androidTest/java/androidx/camera/core/UseCaseTest.java
index add1112..d373c97 100644
--- a/camera/camera-core/src/androidTest/java/androidx/camera/core/UseCaseTest.java
+++ b/camera/camera-core/src/androidTest/java/androidx/camera/core/UseCaseTest.java
@@ -175,11 +175,6 @@
}
@Override
- protected void updateUseCaseConfig(UseCaseConfig<?> useCaseConfig) {
- super.updateUseCaseConfig(useCaseConfig);
- }
-
- @Override
@NonNull
protected Map<String, Size> onSuggestedResolutionUpdated(
@NonNull Map<String, Size> suggestedResolutionMap) {
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/CallbackDeferrableSurface.java b/camera/camera-core/src/main/java/androidx/camera/core/CallbackDeferrableSurface.java
index 8113f4c..210ce14 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/CallbackDeferrableSurface.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/CallbackDeferrableSurface.java
@@ -48,8 +48,7 @@
mSurfaceFuture = CallbackToFutureAdapter.getFuture(
completer -> {
callbackExecutor.execute(() -> {
- // TODO(b/117519540): pass the image format to user.
- Futures.propagate(previewSurfaceCallback.createSurfaceFuture(resolution, 0),
+ Futures.propagate(previewSurfaceCallback.createSurfaceFuture(resolution),
completer);
});
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/CameraDeviceConfig.java b/camera/camera-core/src/main/java/androidx/camera/core/CameraDeviceConfig.java
index 9eb5fba..8d4e029 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/CameraDeviceConfig.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/CameraDeviceConfig.java
@@ -80,7 +80,9 @@
* @param valueIfMissing The value to return if this configuration option has not been set.
* @return The stored value or <code>valueIfMissing</code> if the value does not exist in this
* configuration.
+ * @hide
*/
+ @RestrictTo(Scope.LIBRARY_GROUP)
@Nullable
CameraIdFilter getCameraIdFilter(@Nullable CameraIdFilter valueIfMissing);
@@ -89,7 +91,9 @@
*
* @return The stored value, if it exists in this configuration.
* @throws IllegalArgumentException if the option does not exist in this configuration.
+ * @hide
*/
+ @RestrictTo(Scope.LIBRARY_GROUP)
@NonNull
CameraIdFilter getCameraIdFilter();
@@ -118,7 +122,9 @@
*
* @param cameraIdFilter The {@link CameraIdFilter}.
* @return the current Builder.
+ * @hide
*/
+ @RestrictTo(Scope.LIBRARY_GROUP)
B setCameraIdFilter(@NonNull CameraIdFilter cameraIdFilter);
}
}
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/CameraDeviceSurfaceManager.java b/camera/camera-core/src/main/java/androidx/camera/core/CameraDeviceSurfaceManager.java
index b208f7a..4aa949a 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/CameraDeviceSurfaceManager.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/CameraDeviceSurfaceManager.java
@@ -96,21 +96,23 @@
Size getPreviewSize();
/**
- * Checks whether the use case requires a corrected aspect ratio due to device constraints.
+ * Checks whether a corrected aspect ratio is required due to device constraints.
*
- * @param useCaseConfig to check aspect ratio
+ * @param cameraDeviceConfig to check if the device requires a corrected aspect ratio.
* @return the check result that whether aspect ratio need to be corrected
*/
- boolean requiresCorrectedAspectRatio(@NonNull UseCaseConfig<?> useCaseConfig);
+ boolean requiresCorrectedAspectRatio(@NonNull CameraDeviceConfig cameraDeviceConfig);
/**
* Returns the corrected aspect ratio for the given use case configuration or {@code null} if
* no correction is needed.
*
- * @param useCaseConfig to check aspect ratio
+ * @param deviceConfig to identify device which may require correction
+ * @param rotation desired rotation of output aspect ratio relative to natural orientation
* @return the corrected aspect ratio for the use case
*/
@Nullable
- Rational getCorrectedAspectRatio(@NonNull UseCaseConfig<?> useCaseConfig);
+ Rational getCorrectedAspectRatio(@NonNull CameraDeviceConfig deviceConfig,
+ @ImageOutputConfig.RotationValue int rotation);
}
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/CameraInfo.java b/camera/camera-core/src/main/java/androidx/camera/core/CameraInfo.java
index ddfb0a0..20d2990 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/CameraInfo.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/CameraInfo.java
@@ -31,21 +31,24 @@
public interface CameraInfo {
/**
- * Returns the sensor rotation, in degrees, relative to the device's "natural" rotation.
+ * Returns the sensor rotation in degrees, relative to the device's "natural" (default)
+ * orientation.
*
- * @return The sensor orientation in degrees.
- * @see Surface#ROTATION_0 the natural orientation of the device.
+ * @return The sensor rotation in degrees, relative to device's "natural" (default) orientation.
+ * @see
+ * <a href="https://developer.android.com/guide/topics/sensors/sensors_overview#sensors-coords">
+ * Sensor Coordinate System</a>
*/
int getSensorRotationDegrees();
/**
* Returns the sensor rotation, in degrees, relative to the given rotation value.
*
- * <p>Valid values for the relative rotation are {@link Surface#ROTATION_0}, {@link
+ * <p>Valid values for the relative rotation are {@link Surface#ROTATION_0} (natural), {@link
* Surface#ROTATION_90}, {@link Surface#ROTATION_180}, {@link Surface#ROTATION_270}.
*
* @param relativeRotation The rotation relative to which the output will be calculated.
- * @return The sensor orientation in degrees.
+ * @return The sensor rotation in degrees.
*/
int getSensorRotationDegrees(@ImageOutputConfig.RotationValue int relativeRotation);
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/CameraSelector.java b/camera/camera-core/src/main/java/androidx/camera/core/CameraSelector.java
new file mode 100644
index 0000000..4dd5977
--- /dev/null
+++ b/camera/camera-core/src/main/java/androidx/camera/core/CameraSelector.java
@@ -0,0 +1,158 @@
+/*
+ * 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.camera.core;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
+import androidx.annotation.RestrictTo.Scope;
+
+import java.util.LinkedHashSet;
+import java.util.Set;
+
+/**
+ * A set of requirements and priorities used to select a camera.
+ */
+public final class CameraSelector {
+ private LinkedHashSet<CameraIdFilter> mCameraFilterSet;
+
+ CameraSelector(LinkedHashSet<CameraIdFilter> cameraFilterSet) {
+ mCameraFilterSet = cameraFilterSet;
+ }
+
+ /**
+ * Selects the first camera that filtered by the {@link CameraIdFilter} assigned to the
+ * selector.
+ *
+ * <p>The camera ids filtered must be contained in the input set. Otherwise it will throw an
+ * exception.
+ *
+ * @param cameraIds The camera id set being filtered.
+ * @return The first camera filtered.
+ * @throws IllegalArgumentException If there's no available camera after being filtered or
+ * the filtered camera ids aren't contained in the input set.
+ * @hide
+ */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @NonNull
+ public String select(@NonNull Set<String> cameraIds) {
+ Set<String> resultCameraSet = new LinkedHashSet<>();
+ for (CameraIdFilter filter : mCameraFilterSet) {
+ resultCameraSet = filter.filter(cameraIds);
+ // If the result is empty or has extra camera id that isn't contained in the
+ // input, throws an exception.
+ if (resultCameraSet.isEmpty()) {
+ throw new IllegalArgumentException("No available camera can be found.");
+ } else if (!cameraIds.containsAll(resultCameraSet)) {
+ throw new IllegalArgumentException("The output isn't contained in the input.");
+ }
+ cameraIds = resultCameraSet;
+ }
+ return resultCameraSet.iterator().next();
+ }
+
+ /**
+ * Gets the set of {@link CameraIdFilter} assigned to this camera
+ * selector.
+ *
+ * @hide
+ */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @NonNull
+ public LinkedHashSet<CameraIdFilter> getCameraFilterSet() {
+ return mCameraFilterSet;
+ }
+
+ /**
+ * Returns a single lens facing from this camera selector, or null if lens facing has not
+ * been set.
+ *
+ * @return The lens facing.
+ * @throws IllegalStateException if a single lens facing cannot be resolved, such as if
+ * multiple conflicting lens facing requirements exist in this
+ * camera selector.
+ * @hide
+ */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Nullable
+ public LensFacing getLensFacing() {
+ LensFacing currentLensFacing = null;
+ for (CameraIdFilter filter : mCameraFilterSet) {
+ if (filter instanceof LensFacingCameraIdFilter) {
+ LensFacing newLensFacing = ((LensFacingCameraIdFilter) filter).getLensFacing();
+ if (currentLensFacing == null) {
+ currentLensFacing = newLensFacing;
+ } else if (newLensFacing != currentLensFacing) {
+ // TODO(b/122975195): Now we assume the lens facing of a camera is either
+ // FRONT or BACK, so if there's conflicting lens facings set, throws an
+ // exception. It needs to be revisited if we have a third lens facing enum
+ // in the future.
+ throw new IllegalStateException(
+ "Multiple conflicting lens facing requirements exist.");
+ }
+ }
+ }
+
+ return currentLensFacing;
+ }
+
+ /** Builder for a {@link CameraSelector}. */
+ public static final class Builder {
+ private LinkedHashSet<CameraIdFilter> mCameraFilterSet = new LinkedHashSet<>();
+
+ public Builder() {
+ }
+
+ private Builder(@NonNull LinkedHashSet<CameraIdFilter> cameraFilterSet) {
+ mCameraFilterSet = cameraFilterSet;
+ }
+
+ /**
+ * Requires a camera with the specified lens facing.
+ *
+ * <p>If lens facing is already set, this will add extra requirement for lens facing
+ * instead of replacing the previous setting.
+ */
+ @NonNull
+ public Builder requireLensFacing(@NonNull LensFacing lensFacing) {
+ CameraIdFilter cameraFilter = LensFacingCameraIdFilter.createLensFacingCameraIdFilter(
+ lensFacing);
+ mCameraFilterSet.add(cameraFilter);
+ return this;
+ }
+
+ /**
+ * Generates a Builder from another CameraSelector object.
+ *
+ * @param cameraSelector An existing CameraSelector.
+ * @return The new Builder.
+ * @hide
+ */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @NonNull
+ public static Builder fromSelector(@NonNull CameraSelector cameraSelector) {
+ CameraSelector.Builder builder = new CameraSelector.Builder(
+ cameraSelector.getCameraFilterSet());
+ return builder;
+ }
+
+ /** Builds the {@link CameraSelector}. */
+ @NonNull
+ public CameraSelector build() {
+ return new CameraSelector(mCameraFilterSet);
+ }
+ }
+}
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/CameraX.java b/camera/camera-core/src/main/java/androidx/camera/core/CameraX.java
index 7940f76..45d5145 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/CameraX.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/CameraX.java
@@ -205,6 +205,7 @@
* @throws IllegalStateException If the use case has already been bound to another lifecycle
* or method is not called on main thread.
*/
+ @SuppressWarnings("LambdaLast")
public static void bindToLifecycle(@NonNull LifecycleOwner lifecycleOwner,
@NonNull UseCase... useCases) {
Threads.checkMainThread();
@@ -228,8 +229,11 @@
}
}
+
for (UseCase useCase : useCases) {
- useCase.onBind();
+ // TODO(b/142839697): Create CameraDeviceConfig from CameraSelector
+ CameraDeviceConfig deviceConfig = (CameraDeviceConfig) useCase.getUseCaseConfig();
+ useCase.onBind(deviceConfig);
}
calculateSuggestedResolutions(lifecycleOwner, useCases);
@@ -340,19 +344,25 @@
}
/**
- * Checks if the device supports specified lens facing.
+ * Checks if the device supports at least one camera that meets the requirements from a
+ * {@link CameraSelector}.
*
- * @param lensFacing the lens facing
- * @return true if the device has at least one camera with the specified lens facing,
- * otherwise false.
+ * @param cameraSelector the {@link CameraSelector} that filters available cameras.
+ * @return true if the device has at least one available camera, otherwise false.
* @throws CameraInfoUnavailableException if unable to access cameras, perhaps due to
- * insufficient permissions
+ * insufficient permissions.
*/
- public static boolean hasCameraWithLensFacing(@NonNull LensFacing lensFacing)
+ public static boolean hasCamera(@NonNull CameraSelector cameraSelector)
throws CameraInfoUnavailableException {
checkInitialized();
- return getCameraFactory().cameraIdForLensFacing(lensFacing) != null;
+ try {
+ cameraSelector.select(getCameraFactory().getAvailableCameraIds());
+ } catch (IllegalArgumentException e) {
+ return false;
+ }
+
+ return true;
}
/**
@@ -390,7 +400,7 @@
*/
@RestrictTo(Scope.LIBRARY_GROUP)
@Nullable
- public static String getCameraWithCameraDeviceConfig(CameraDeviceConfig config)
+ public static String getCameraWithCameraDeviceConfig(@NonNull CameraDeviceConfig config)
throws CameraInfoUnavailableException {
checkInitialized();
@@ -762,9 +772,6 @@
CameraX cameraX = checkInitialized();
CameraInternal cameraInternal = cameraX.getCameraRepository().getCamera(cameraId);
- if (cameraInternal == null) {
- throw new IllegalArgumentException("Invalid camera: " + cameraId);
- }
useCase.addStateChangeCallback(cameraInternal);
useCase.attachCameraControl(cameraId, cameraInternal.getCameraControlInternal());
@@ -780,9 +787,6 @@
CameraX cameraX = checkInitialized();
CameraInternal cameraInternal = cameraX.getCameraRepository().getCamera(cameraId);
- if (cameraInternal == null) {
- throw new IllegalArgumentException("Invalid camera: " + cameraId);
- }
for (UseCase useCase : useCases) {
useCase.removeStateChangeCallback(cameraInternal);
@@ -819,8 +823,12 @@
for (UseCase useCase : useCases) {
String cameraId = null;
try {
- cameraId = getCameraWithCameraDeviceConfig(
- (CameraDeviceConfig) useCase.getUseCaseConfig());
+ // TODO(b/142839697): This should come from CameraSelector
+ CameraDeviceConfig deviceConfig = useCase.getBoundDeviceConfig();
+ if (deviceConfig == null) {
+ throw new IllegalStateException("Use case is not bound: " + useCase);
+ }
+ cameraId = getCameraWithCameraDeviceConfig(deviceConfig);
} catch (CameraInfoUnavailableException e) {
throw new IllegalArgumentException(
"Unable to get camera id for the camera device config.", e);
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/ImageAnalysis.java b/camera/camera-core/src/main/java/androidx/camera/core/ImageAnalysis.java
index 7802be7..4728dea 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/ImageAnalysis.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/ImageAnalysis.java
@@ -394,18 +394,20 @@
* <p>This method is called once for each image from the camera, and called at the
* frame rate of the camera. Each analyze call is executed sequentially.
*
- * <p>The caller is responsible for ensuring this analysis method can be executed quickly
- * enough to prevent stalls in the image acquisition pipeline. Otherwise, newly available
- * images will not be acquired and analyzed.
+ * <p>The implementation should ensure this analysis method can be executed quickly
+ * enough to prevent stalls in the image acquisition pipeline. Otherwise, newly
+ * available images will not be acquired and analyzed.
*
- * <p>The image passed to this method becomes invalid after this method returns. The caller
- * should not store external references to this image, as these references will become
- * invalid.
+ * <p>The image passed to this method becomes invalid and is closed after this method
+ * returns. The implementation should not close, nor store external references to this
+ * image, as these references will become invalid.
*
* <p>Processing should complete within a single frame time of latency, or the image data
* should be copied out for longer processing. Applications can be skip analyzing a frame
* by having the analyzer return immediately.
*
+ * <p>The image provided has format {@link android.graphics.ImageFormat#YUV_420_888}.
+ *
* @param image The image to analyze
* @param rotationDegrees The rotation which if applied to the image would make it match
* the current target rotation of {@link ImageAnalysis}, expressed in
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/ImageProxy.java b/camera/camera-core/src/main/java/androidx/camera/core/ImageProxy.java
index aec1c0a..1a27db0 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/ImageProxy.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/ImageProxy.java
@@ -30,9 +30,10 @@
* Closes the underlying {@link android.media.Image}.
*
* <p>If obtained from an {@link ImageAnalysis.Analyzer} the image will be closed on return
- * from the {@link ImageAnalysis.Analyzer} function.
+ * from the {@link ImageAnalysis.Analyzer}, so close() should not be called by the
+ * analyzer implementation.
*
- * <p>@see {@link android.media.Image#close()}.
+ * @see android.media.Image#close()
*/
@Override
void close();
@@ -40,7 +41,7 @@
/**
* Returns the crop rectangle.
*
- * <p>@see {@link android.media.Image#getCropRect()}.
+ * @see android.media.Image#getCropRect()
*/
@NonNull
Rect getCropRect();
@@ -48,49 +49,49 @@
/**
* Sets the crop rectangle.
*
- * <p>@see {@link android.media.Image#setCropRect(Rect)}.
+ * @see android.media.Image#setCropRect(Rect)
*/
void setCropRect(@Nullable Rect rect);
/**
* Returns the image format.
*
- * <p>@see {@link android.media.Image#getFormat()}.
+ * @see android.media.Image#getFormat()
*/
int getFormat();
/**
* Returns the image height.
*
- * <p>@see {@link android.media.Image#getHeight()}.
+ * @see android.media.Image#getHeight()
*/
int getHeight();
/**
* Returns the image width.
*
- * <p>@see {@link android.media.Image#getWidth()}.
+ * @see android.media.Image#getWidth()
*/
int getWidth();
/**
* Returns the timestamp.
*
- * <p>@see {@link android.media.Image#getTimestamp()}.
+ * @see android.media.Image#getTimestamp()
*/
long getTimestamp();
/**
* Sets the timestamp.
*
- * <p>@see {@link android.media.Image#setTimestamp(long)}.
+ * @see android.media.Image#setTimestamp(long)
*/
void setTimestamp(long timestamp);
/**
* Returns the array of planes.
*
- * <p>@see {@link android.media.Image#getPlanes()}.
+ * @see android.media.Image#getPlanes()
*/
@NonNull
PlaneProxy[] getPlanes();
@@ -100,21 +101,21 @@
/**
* Returns the row stride.
*
- * <p>@see {@link android.media.Image.Plane#getRowStride()}.
+ * @see android.media.Image.Plane#getRowStride()
*/
int getRowStride();
/**
* Returns the pixel stride.
*
- * <p>@see {@link android.media.Image.Plane#getPixelStride()}.
+ * @see android.media.Image.Plane#getPixelStride()
*/
int getPixelStride();
/**
* Returns the pixels buffer.
*
- * <p>@see {@link android.media.Image.Plane#getBuffer()}.
+ * @see android.media.Image.Plane#getBuffer()
*/
@NonNull
ByteBuffer getBuffer();
@@ -142,7 +143,9 @@
* the ImageProxy, which happens, for example, on return from the {@link ImageAnalysis.Analyzer}
* function. Destroying the {@link ImageAnalysis} will close the underlying
* {@link android.media.ImageReader}. So an {@link Image} obtained with this method will behave
- * as such @see {@link android.media.Image#close()}.
+ * as such.
+ *
+ * @see android.media.Image#close()
*
* @return the android image.
*/
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/ImageProxyBundle.java b/camera/camera-core/src/main/java/androidx/camera/core/ImageProxyBundle.java
index a044ca4..1184842 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/ImageProxyBundle.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/ImageProxyBundle.java
@@ -17,12 +17,17 @@
package androidx.camera.core;
import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
import com.google.common.util.concurrent.ListenableFuture;
import java.util.List;
-/** A set of {@link ImageProxy} which are mapped an identifier. */
+/**
+ * A set of {@link ImageProxy} which are mapped an identifier.
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public interface ImageProxyBundle {
/**
* Get a {@link ListenableFuture} for a {@link ImageProxy}.
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/Preview.java b/camera/camera-core/src/main/java/androidx/camera/core/Preview.java
index 108eb2f..0c4bffe 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/Preview.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/Preview.java
@@ -17,6 +17,7 @@
package androidx.camera.core;
import android.graphics.ImageFormat;
+import android.graphics.PixelFormat;
import android.graphics.SurfaceTexture;
import android.media.ImageReader;
import android.media.MediaCodec;
@@ -36,6 +37,7 @@
import androidx.annotation.UiThread;
import androidx.camera.core.impl.utils.Threads;
import androidx.camera.core.impl.utils.executor.CameraXExecutors;
+import androidx.concurrent.futures.CallbackToFutureAdapter;
import androidx.core.util.Preconditions;
import com.google.common.util.concurrent.ListenableFuture;
@@ -161,6 +163,13 @@
/**
* Gets {@link PreviewSurfaceCallback}
*
+ * <p> Setting the callback will signal to the camera that the use case is ready to receive
+ * data.
+ *
+ * <p> To displaying preview with a {@link TextureView}, consider
+ * using {@link PreviewUtil#createPreviewSurfaceCallback(PreviewUtil.SurfaceTextureCallback)} to
+ * create the callback.
+ *
* @return the last set callback or {@code null} if no listener is set
*/
@UiThread
@@ -176,6 +185,10 @@
* <p> Setting the callback will signal to the camera that the use case is ready to receive
* data.
*
+ * <p> To displaying preview with a {@link TextureView}, consider
+ * using {@link PreviewUtil#createPreviewSurfaceCallback(PreviewUtil.SurfaceTextureCallback)} to
+ * create the callback.
+ *
* @param previewSurfaceCallback PreviewSurfaceCallback that provides a Preview.
* @param callbackExecutor on which the previewSurfaceCallback will be triggered.
*/
@@ -276,16 +289,30 @@
*/
@Override
@RestrictTo(Scope.LIBRARY_GROUP)
- protected void updateUseCaseConfig(UseCaseConfig<?> useCaseConfig) {
- PreviewConfig config = (PreviewConfig) useCaseConfig;
+ @NonNull
+ protected UseCaseConfig<?> applyDefaults(
+ @NonNull UseCaseConfig<?> userConfig,
+ @Nullable UseCaseConfig.Builder<?, ?, ?> defaultConfigBuilder) {
+ PreviewConfig previewConfig = (PreviewConfig) super.applyDefaults(userConfig,
+ defaultConfigBuilder);
+
+ CameraDeviceConfig deviceConfig = getBoundDeviceConfig();
// Checks the device constraints and get the corrected aspect ratio.
- if (CameraX.getSurfaceManager().requiresCorrectedAspectRatio(config)) {
- Rational resultRatio = CameraX.getSurfaceManager().getCorrectedAspectRatio(config);
- PreviewConfig.Builder configBuilder = PreviewConfig.Builder.fromConfig(config);
- configBuilder.setTargetAspectRatioCustom(resultRatio);
- config = configBuilder.build();
+ if (deviceConfig != null && CameraX.getSurfaceManager().requiresCorrectedAspectRatio(
+ deviceConfig)) {
+ ImageOutputConfig imageConfig = previewConfig;
+ Rational resultRatio =
+ CameraX.getSurfaceManager().getCorrectedAspectRatio(deviceConfig,
+ imageConfig.getTargetRotation(Surface.ROTATION_0));
+ if (resultRatio != null) {
+ PreviewConfig.Builder configBuilder = PreviewConfig.Builder.fromConfig(
+ previewConfig);
+ configBuilder.setTargetAspectRatioCustom(resultRatio);
+ previewConfig = configBuilder.build();
+ }
}
- super.updateUseCaseConfig(config);
+
+ return previewConfig;
}
/**
@@ -336,35 +363,69 @@
/**
* Creates preview output Surface with the given resolution and format.
*
- * <p> This is called when Preview needs a valid Surface. e.g. when the Preview is bound
- * to lifecycle. If the {@link Surface} is backed by a {@link SurfaceTexture}, both the
- * {@link Surface} and the {@link ListenableFuture} need to be recreated each time this
- * is invoked.
+ * <p> This is called when Preview needs a valid {@link Surface}. e.g. when the Preview is
+ * bound to lifecycle. If the {@link Surface} is backed by a {@link SurfaceTexture}, both
+ * the {@link Surface} and the {@link ListenableFuture} need to be recreated each time this
+ * is invoked. The implementer is also responsible to hold a reference to the
+ * {@link SurfaceTexture} since the weak reference from {@link Surface} does not prevent
+ * it to be garbage collected. If the {@link Surface} backed by a {@link SurfaceView},
+ * the {@link PixelFormat} should always be the default {@link PixelFormat#OPAQUE}.
*
* <p> To display the preview with the correct orientation, if the {@link Surface} is
* backed by a {@link SurfaceTexture}, {@link SurfaceTexture#getTransformMatrix(float[])}
* can be used to transform the preview to natural orientation ({@link TextureView}
* handles this automatically); if the {@link Surface} is backed by a {@link SurfaceView}
* , it will always be in display orientation; for {@link Surface} backed by
- * {@link ImageReader}, {@link MediaCodec} or other objects, it's user's responsibility
- * to calculate the rotation.
+ * {@link ImageReader}, {@link MediaCodec} or other objects, it's implementer's
+ * responsibility to calculate the rotation.
+ *
+ * <p> It's most common to use it with a {@link SurfaceView} or a {@link TextureView}.
+ * For {@link TextureView}, see {@link PreviewUtil} for creating {@link Surface} backed
+ * by a {@link SurfaceTexture}. For {@link SurfaceView}, the creation is in the
+ * hands of the {@link SurfaceView}. Use {@link CallbackToFutureAdapter} to wait for the
+ * creation of the {@link Surface} in {@link android.view.SurfaceHolder.Callback
+ * #surfaceChanged(android.view.SurfaceHolder, int, int, int)}. Example:
+ *
+ * <pre><code>
+ * class SurfaceViewHandler implements SurfaceHolder.Callback, PreviewSurfaceCallback {
+ *
+ * Size mResolution;
+ * CallbackToFutureAdapter.Completer<Surface> mCompleter;
+ *
+ * @Override
+ * public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
+ * if (mResolution != null && mCompleter != null && mResolution.getHeight()
+ * == height && mResolution.getWidth() == width) {
+ * mCompleter.set(holder.getSurface());
+ * }
+ * }
+ *
+ * @Override
+ * public ListenableFuture<Surface> createSurfaceFuture(@NonNull Size resolution) {
+ * mResolution = resolution;
+ * return CallbackToFutureAdapter.getFuture(completer -> {
+ * mCompleter = completer
+ * });
+ * }
+ * }
+ * </code></pre>
*
* @param resolution the resolution required by CameraX.
- * @param imageFormat the {@link ImageFormat} required by CameraX.
- * @return A ListenableFuture that contains the user created Surface.
+ * @return A ListenableFuture that contains the implementer created Surface.
*/
@NonNull
- ListenableFuture<Surface> createSurfaceFuture(@NonNull Size resolution, int imageFormat);
+ ListenableFuture<Surface> createSurfaceFuture(@NonNull Size resolution);
/**
- * Called when the {@link Surface} is safe to release.
+ * Called when the {@link Surface} is safe to be released.
*
- * <p> This method is called when the {@link Surface} previously
- * returned from {@link #createSurfaceFuture(Size, int)} is no longer in use. If the
- * {@link Surface} is backed by a {@link SurfaceTexture}, it should be released to avoid
- * leak.
+ * <p> This method is called when the {@link Surface} previously returned from
+ * {@link #createSurfaceFuture(Size)} is no longer being used by the camera system, and
+ * it's safe to be released during or after this is called. The implementer is
+ * responsible to release the {@link Surface} when it's also no longer being used by the
+ * app.
*
- * @param surfaceFuture the {@link Surface} to release.
+ * @param surfaceFuture the {@link Surface} to be released.
*/
void onSafeToRelease(@NonNull ListenableFuture<Surface> surfaceFuture);
}
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/PreviewConfig.java b/camera/camera-core/src/main/java/androidx/camera/core/PreviewConfig.java
index 5b4da46..de0a5f2 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/PreviewConfig.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/PreviewConfig.java
@@ -732,7 +732,7 @@
* <p>This method will remove any value set by setTargetAspectRatio().
*
* <p>For Preview, the value will be used to calculate the suggested resolution size in
- * {@link Preview.PreviewSurfaceCallback#createSurfaceFuture(Size, int)}.
+ * {@link Preview.PreviewSurfaceCallback#createSurfaceFuture(Size)}.
*
* @param aspectRatio A {@link Rational} representing the ratio of the target's width and
* height.
@@ -759,7 +759,7 @@
* Application code should check the resulting output's resolution.
*
* <p>For Preview, the value will be used to calculate the suggested resolution size in
- * {@link Preview.PreviewSurfaceCallback#createSurfaceFuture(Size, int)}.
+ * {@link Preview.PreviewSurfaceCallback#createSurfaceFuture(Size)}.
*
* @param aspectRatio A {@link AspectRatio} representing the ratio of the
* target's width and height.
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/PreviewUtil.java b/camera/camera-core/src/main/java/androidx/camera/core/PreviewUtil.java
index 878961a..4aad3ac 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/PreviewUtil.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/PreviewUtil.java
@@ -20,6 +20,7 @@
import android.util.Log;
import android.util.Size;
import android.view.Surface;
+import android.view.TextureView;
import androidx.annotation.NonNull;
import androidx.camera.core.impl.utils.futures.Futures;
@@ -41,12 +42,40 @@
}
/**
- * Creates a {@link Preview.PreviewSurfaceCallback} that allocates and deallocates
- * {@link SurfaceTexture}.
+ * Creates a {@link Preview.PreviewSurfaceCallback} that is backed by a {@link SurfaceTexture}.
*
- * @param surfaceTextureCallback listener that will be triggered when the SurfaceTexture is
- * ready.
- * @return {@link Preview.PreviewSurfaceCallback} to be used with {@link Preview}.
+ * <p>This is a convenience method for creating a {@link Preview.PreviewSurfaceCallback}
+ * whose {@link Surface} is backed by a {@link SurfaceTexture}. The returned
+ * {@link Preview.PreviewSurfaceCallback} is responsible for creating the {@link SurfaceTexture}
+ * and propagating {@link Preview.PreviewSurfaceCallback#onSafeToRelease(ListenableFuture)}
+ * back to the implementer. The {@link SurfaceTexture} is usually used with a
+ * {@link TextureView}.
+ * Example:
+ *
+ * <pre><code>
+ * preview.setPreviewSurfaceCallback(createPreviewSurfaceCallback(
+ * new PreviewUtil.SurfaceTextureCallback() {
+ * @Override
+ * public void onSurfaceTextureReady(@NonNull SurfaceTexture surfaceTexture) {
+ * // Maybe remove and re-add the TextureView to its parent.
+ * textureView.setSurfaceTexture(surfaceTexture);
+ * }
+ *
+ * @Override
+ * public void onSafeToRelease(@NonNull SurfaceTexture surfaceTexture) {
+ * surfaceTexture.release();
+ * }
+ * }));
+ * </code></pre>
+ *
+ * <p> Note that the TextureView needs to be removed and re-added from the parent view for the
+ * SurfaceTexture to be attached, because TextureView's existing SurfaceTexture is only
+ * correctly detached once the parent TextureView is removed from the view hierarchy.
+ *
+ * @param surfaceTextureCallback callback called when the SurfaceTexture is ready to be
+ * set/released.
+ * @return a {@link Preview.PreviewSurfaceCallback} to be used with
+ * {@link Preview#setPreviewSurfaceCallback(Preview.PreviewSurfaceCallback)}.
*/
@NonNull
public static Preview.PreviewSurfaceCallback createPreviewSurfaceCallback(
@@ -57,8 +86,7 @@
@NonNull
@Override
- public ListenableFuture<Surface> createSurfaceFuture(@NonNull Size resolution,
- int imageFormat) {
+ public ListenableFuture<Surface> createSurfaceFuture(@NonNull Size resolution) {
SurfaceTexture surfaceTexture = new SurfaceTexture(0);
surfaceTexture.setDefaultBufferSize(resolution.getWidth(),
resolution.getHeight());
@@ -87,24 +115,40 @@
}
/**
- * Callback that is triggered when {@link SurfaceTexture} is ready.
+ * Callback that is called when the {@link SurfaceTexture} is ready to be set/released.
+ *
+ * <p> Implement this interface to receive the updates on {@link SurfaceTexture} used in
+ * {@link Preview}. See {@link #createPreviewSurfaceCallback(SurfaceTextureCallback)} for
+ * code example.
*/
public interface SurfaceTextureCallback {
/**
- * Triggered when {@link SurfaceTexture} is ready.
+ * Called when {@link SurfaceTexture} is ready to be set.
+ *
+ * <p> This is called when the preview {@link SurfaceTexture} is created and ready. The
+ * most common usage is to set it to a {@link TextureView}. Example:
+ * <pre><code>textureView.setSurfaceTexture(surfaceTexture)</code></pre>.
+ *
+ * <p> To display the {@link SurfaceTexture} without a {@link TextureView},
+ * {@link SurfaceTexture#getTransformMatrix(float[])} can be used to transform the
+ * preview to natural orientation. For {@link TextureView}, it handles the transformation
+ * automatically so that no additional work is needed.
*
* @param surfaceTexture {@link SurfaceTexture} created for {@link Preview}.
*/
void onSurfaceTextureReady(@NonNull SurfaceTexture surfaceTexture);
/**
- * Called when the {@link SurfaceTexture} is safe to release.
+ * Called when the {@link SurfaceTexture} is safe to be released.
*
- * <p> This method is called when the {@link SurfaceTexture} previously
- * returned from {@link #onSurfaceTextureReady(SurfaceTexture)} is safe to be released.
+ * <p> This method is called when the {@link SurfaceTexture} previously provided in
+ * {@link #onSurfaceTextureReady(SurfaceTexture)} is no longer being used by the
+ * camera system, and it's safe to be released during or after this is called. The
+ * implementer is responsible to release the {@link SurfaceTexture} when it's also no
+ * longer being used by the app.
*
- * @param surfaceTexture the {@link SurfaceTexture} to release.
+ * @param surfaceTexture the {@link SurfaceTexture} to be released.
*/
void onSafeToRelease(@NonNull SurfaceTexture surfaceTexture);
}
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/UseCase.java b/camera/camera-core/src/main/java/androidx/camera/core/UseCase.java
index 8d82b19..43746ed 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/UseCase.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/UseCase.java
@@ -16,10 +16,10 @@
package androidx.camera.core;
-import android.util.Log;
import android.util.Size;
import androidx.annotation.CallSuper;
+import androidx.annotation.GuardedBy;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
@@ -73,6 +73,11 @@
private UseCaseConfig<?> mUseCaseConfig;
+ // TODO(b/142840814): Remove when we are attached to a camera.
+ private final Object mBoundConfigLock = new Object();
+ @GuardedBy("mBoundConfigLock")
+ private CameraDeviceConfig mBoundDeviceConfig;
+
/**
* Except for ImageFormat.JPEG or ImageFormat.YUV, other image formats like SurfaceTexture or
* MediaCodec classes will be mapped to internal format HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED
@@ -131,35 +136,44 @@
* @hide
*/
@RestrictTo(Scope.LIBRARY_GROUP)
- protected void updateUseCaseConfig(UseCaseConfig<?> useCaseConfig) {
- LensFacing lensFacing = ((CameraDeviceConfig) useCaseConfig).getLensFacing(null);
+ protected final void updateUseCaseConfig(@NonNull UseCaseConfig<?> useCaseConfig) {
+ updateUseCaseConfig(useCaseConfig, getBoundDeviceConfig());
+ }
- UseCaseConfig.Builder<?, ?, ?> defaultBuilder = getDefaultBuilder(lensFacing);
- if (defaultBuilder == null) {
- Log.w(
- TAG,
- "No default configuration available. Relying solely on user-supplied options.");
- mUseCaseConfig = useCaseConfig;
- } else {
- mUseCaseConfig = applyDefaults(useCaseConfig, defaultBuilder);
+ private void updateUseCaseConfig(@NonNull UseCaseConfig<?> useCaseConfig,
+ @Nullable CameraDeviceConfig boundDeviceConfig) {
+ // Attempt to retrieve builder containing defaults for this use case's config
+ LensFacing lensFacing = null;
+ if (boundDeviceConfig != null) {
+ lensFacing = boundDeviceConfig.getLensFacing(null);
}
+ UseCaseConfig.Builder<?, ?, ?> defaultBuilder = getDefaultBuilder(lensFacing);
+
+ // Combine with default configuration.
+ mUseCaseConfig = applyDefaults(useCaseConfig, defaultBuilder);
}
/**
* Combines user-supplied configuration with use case default configuration.
*
- * <p>This is called during initialization of the class. Subclassess can override this method to
+ * <p>Subclasses can override this method to
* modify the behavior of combining user-supplied values and default values.
*
* @param userConfig The user-supplied configuration.
- * @param defaultConfigBuilder A builder containing use-case default values.
+ * @param defaultConfigBuilder A builder containing use-case default values, or {@code null}
+ * if no default values exist.
* @return The configuration that will be used by this use case.
* @hide
*/
@RestrictTo(Scope.LIBRARY_GROUP)
+ @NonNull
protected UseCaseConfig<?> applyDefaults(
- UseCaseConfig<?> userConfig,
- UseCaseConfig.Builder<?, ?, ?> defaultConfigBuilder) {
+ @NonNull UseCaseConfig<?> userConfig,
+ @Nullable UseCaseConfig.Builder<?, ?, ?> defaultConfigBuilder) {
+ if (defaultConfigBuilder == null) {
+ // No default builder was retrieved, return config directly
+ return userConfig;
+ }
// If any options need special handling, this is the place to do it. For now we'll just copy
// over all options.
@@ -335,23 +349,20 @@
}
/**
- * Gets the camera id defined by the use case config.
+ * Gets the camera id defined by the provided camera device config.
*
- * @param config the use case config
- * @return the camera id defined by the config
+ * @param deviceConfig the device config
+ * @return the camera id returned by resolving the device config
* @hide
*/
@RestrictTo(Scope.LIBRARY_GROUP)
- protected static String getCameraIdUnchecked(UseCaseConfig config) {
- if (config instanceof CameraDeviceConfig) {
- try {
- return CameraX.getCameraWithCameraDeviceConfig((CameraDeviceConfig) config);
- } catch (CameraInfoUnavailableException e) {
- throw new IllegalArgumentException(
- "Unable to get camera id for the camera device config.", e);
- }
- } else {
- throw new IllegalArgumentException("Unable to get camera id for the config.");
+ @NonNull
+ protected static String getCameraIdUnchecked(@NonNull CameraDeviceConfig deviceConfig) {
+ try {
+ return CameraX.getCameraWithCameraDeviceConfig(deviceConfig);
+ } catch (CameraInfoUnavailableException e) {
+ throw new IllegalArgumentException(
+ "Unable to get camera id for the camera selector.", e);
}
}
@@ -368,6 +379,10 @@
eventCallback.onUnbind();
}
+ synchronized (mBoundConfigLock) {
+ mBoundDeviceConfig = null;
+ }
+
mStateChangeCallbacks.clear();
}
@@ -390,6 +405,19 @@
}
/**
+ * Returns the currently bound {@link CameraDeviceConfig} or {@code null} if none is bound.
+ * TODO(b/142840814): Only rely on attached Camera rather than config.
+ * @hide
+ */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Nullable
+ public CameraDeviceConfig getBoundDeviceConfig() {
+ synchronized (mBoundConfigLock) {
+ return mBoundDeviceConfig;
+ }
+ }
+
+ /**
* Retrieves the currently attached surface resolution.
*
* @param cameraId the camera id for the desired surface.
@@ -420,7 +448,8 @@
/**
* Called when binding new use cases via {@link CameraX#bindToLifecycle(LifecycleOwner,
- * UseCase...)}. Override to create necessary objects like {@link android.media.ImageReader}
+ * UseCase...)}. Override to create necessary objects like
+ * {@link android.media.ImageReader}
* depending on the resolution.
*
* @param suggestedResolutionMap A map of the names of the {@link
@@ -456,10 +485,14 @@
* @hide
*/
@RestrictTo(Scope.LIBRARY_GROUP)
- protected void onBind() {
+ protected void onBind(@NonNull CameraDeviceConfig deviceConfig) {
+ synchronized (mBoundConfigLock) {
+ mBoundDeviceConfig = deviceConfig;
+ }
+ updateUseCaseConfig(mUseCaseConfig, deviceConfig);
EventCallback eventCallback = mUseCaseConfig.getUseCaseEventCallback(null);
if (eventCallback != null) {
- eventCallback.onBind(getCameraIdUnchecked(mUseCaseConfig));
+ eventCallback.onBind(getCameraIdUnchecked(deviceConfig));
}
}
diff --git a/camera/camera-core/src/test/java/androidx/camera/core/CameraSelectorTest.java b/camera/camera-core/src/test/java/androidx/camera/core/CameraSelectorTest.java
new file mode 100644
index 0000000..3e79f4a
--- /dev/null
+++ b/camera/camera-core/src/test/java/androidx/camera/core/CameraSelectorTest.java
@@ -0,0 +1,124 @@
+/*
+ * 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.camera.core;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.mock;
+
+import android.content.Context;
+import android.os.Build;
+
+import androidx.camera.testing.fakes.FakeCamera;
+import androidx.camera.testing.fakes.FakeCameraDeviceSurfaceManager;
+import androidx.camera.testing.fakes.FakeCameraFactory;
+import androidx.camera.testing.fakes.FakeCameraInfoInternal;
+import androidx.camera.testing.fakes.FakeUseCaseConfig;
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.filters.SmallTest;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
+import org.robolectric.annotation.internal.DoNotInstrument;
+
+import java.util.HashSet;
+import java.util.Set;
+import java.util.concurrent.ExecutionException;
+
+@SmallTest
+@RunWith(RobolectricTestRunner.class)
+@DoNotInstrument
+@Config(minSdk = Build.VERSION_CODES.LOLLIPOP)
+public class CameraSelectorTest {
+ private CameraInternal mRearCamera;
+ private CameraInternal mFrontCamera;
+ private static final String REAR_ID = "0";
+ private static final String FRONT_ID = "1";
+ private Set<String> mCameraIds = new HashSet<>();
+
+ @Before
+ public void setUp() throws ExecutionException, InterruptedException {
+ Context context = ApplicationProvider.getApplicationContext();
+ CameraDeviceSurfaceManager surfaceManager = new FakeCameraDeviceSurfaceManager();
+ ExtendableUseCaseConfigFactory defaultConfigFactory = new ExtendableUseCaseConfigFactory();
+ defaultConfigFactory.installDefaultProvider(FakeUseCaseConfig.class,
+ new ConfigProvider<FakeUseCaseConfig>() {
+ @Override
+ public FakeUseCaseConfig getConfig(LensFacing lensFacing) {
+ return new FakeUseCaseConfig.Builder().build();
+ }
+ });
+ FakeCameraFactory cameraFactory = new FakeCameraFactory();
+ mRearCamera = new FakeCamera(mock(CameraControlInternal.class),
+ new FakeCameraInfoInternal(0,
+ LensFacing.BACK));
+ cameraFactory.insertCamera(LensFacing.BACK, REAR_ID, () -> mRearCamera);
+ cameraFactory.setDefaultCameraIdForLensFacing(LensFacing.BACK, REAR_ID);
+ mFrontCamera = new FakeCamera(mock(CameraControlInternal.class),
+ new FakeCameraInfoInternal(0,
+ LensFacing.FRONT));
+ cameraFactory.insertCamera(LensFacing.FRONT, FRONT_ID, () -> mFrontCamera);
+ cameraFactory.setDefaultCameraIdForLensFacing(LensFacing.FRONT, FRONT_ID);
+ AppConfig.Builder appConfigBuilder =
+ new AppConfig.Builder()
+ .setCameraFactory(cameraFactory)
+ .setDeviceSurfaceManager(surfaceManager)
+ .setUseCaseConfigFactory(defaultConfigFactory);
+ CameraX.initialize(context, appConfigBuilder.build()).get();
+ mCameraIds.add(REAR_ID);
+ mCameraIds.add(FRONT_ID);
+ }
+
+ @After
+ public void tearDown() throws ExecutionException, InterruptedException {
+ CameraX.shutdown().get();
+ }
+
+ @Test
+ public void canSelectWithLensFacing() {
+ CameraSelector.Builder cameraSelectorBuilder = new CameraSelector.Builder();
+ cameraSelectorBuilder.requireLensFacing(LensFacing.BACK);
+ String result = cameraSelectorBuilder.build().select(mCameraIds);
+ assertThat(result).isEqualTo(REAR_ID);
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void exception_ifNoAvailableCamera() {
+ CameraSelector.Builder cameraSelectorBuilder = new CameraSelector.Builder();
+ cameraSelectorBuilder.requireLensFacing(LensFacing.BACK).requireLensFacing(
+ LensFacing.FRONT);
+ cameraSelectorBuilder.build().select(mCameraIds);
+ }
+
+ @Test
+ public void canGetLensFacing() {
+ CameraSelector.Builder cameraSelectorBuilder = new CameraSelector.Builder();
+ cameraSelectorBuilder.requireLensFacing(LensFacing.BACK);
+ assertThat(cameraSelectorBuilder.build().getLensFacing()).isEqualTo(LensFacing.BACK);
+ }
+
+ @Test(expected = IllegalStateException.class)
+ public void exception_ifGetLensFacingConflicted() {
+ CameraSelector.Builder cameraSelectorBuilder = new CameraSelector.Builder();
+ cameraSelectorBuilder.requireLensFacing(LensFacing.BACK).requireLensFacing(
+ LensFacing.FRONT);
+ cameraSelectorBuilder.build().getLensFacing();
+ }
+}
diff --git a/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeCameraDeviceSurfaceManager.java b/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeCameraDeviceSurfaceManager.java
index 91c40f1..2a5929a 100644
--- a/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeCameraDeviceSurfaceManager.java
+++ b/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeCameraDeviceSurfaceManager.java
@@ -21,11 +21,11 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.camera.core.CameraDeviceConfig;
import androidx.camera.core.CameraDeviceSurfaceManager;
import androidx.camera.core.ImageOutputConfig;
import androidx.camera.core.SurfaceConfig;
import androidx.camera.core.UseCase;
-import androidx.camera.core.UseCaseConfig;
import java.util.HashMap;
import java.util.List;
@@ -111,15 +111,14 @@
}
@Override
- public boolean requiresCorrectedAspectRatio(@NonNull UseCaseConfig<?> useCaseConfig) {
- return true;
+ public boolean requiresCorrectedAspectRatio(@NonNull CameraDeviceConfig deviceConfig) {
+ return false;
}
@Nullable
@Override
- public Rational getCorrectedAspectRatio(@NonNull UseCaseConfig<?> useCaseConfig) {
- ImageOutputConfig config = (ImageOutputConfig) useCaseConfig;
- Rational aspectRatio = config.getTargetAspectRatioCustom(null);
- return aspectRatio;
+ public Rational getCorrectedAspectRatio(@NonNull CameraDeviceConfig deviceConfig,
+ @ImageOutputConfig.RotationValue int rotation) {
+ return null;
}
}
diff --git a/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeUseCase.java b/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeUseCase.java
index d5df8e3..62cb9cf 100644
--- a/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeUseCase.java
+++ b/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeUseCase.java
@@ -49,7 +49,6 @@
@Override
protected UseCaseConfig.Builder<?, ?, ?> getDefaultBuilder(LensFacing lensFacing) {
return new FakeUseCaseConfig.Builder()
- .setLensFacing(lensFacing)
.setSessionOptionUnpacker(new SessionConfig.OptionUnpacker() {
@Override
public void unpack(@NonNull UseCaseConfig<?> useCaseConfig,
diff --git a/camera/camera-view/src/androidTest/java/androidx/camera/view/PreviewViewTest.java b/camera/camera-view/src/androidTest/java/androidx/camera/view/PreviewViewTest.java
index cd4d343..5ff788d 100644
--- a/camera/camera-view/src/androidTest/java/androidx/camera/view/PreviewViewTest.java
+++ b/camera/camera-view/src/androidTest/java/androidx/camera/view/PreviewViewTest.java
@@ -16,6 +16,9 @@
package androidx.camera.view;
+import static androidx.camera.view.PreviewView.ImplementationMode.SURFACE_VIEW;
+import static androidx.camera.view.PreviewView.ImplementationMode.TEXTURE_VIEW;
+
import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assume.assumeTrue;
@@ -23,7 +26,9 @@
import android.Manifest;
import android.app.Activity;
import android.content.Context;
+import android.view.LayoutInflater;
import android.view.SurfaceView;
+import android.view.TextureView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
@@ -31,6 +36,7 @@
import androidx.camera.testing.CameraUtil;
import androidx.camera.testing.CoreAppTestUtil;
import androidx.camera.testing.fakes.FakeActivity;
+import androidx.camera.view.test.R;
import androidx.test.annotation.UiThreadTest;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
@@ -70,9 +76,74 @@
@Test
@UiThreadTest
public void defaultImplementation_isSurfaceView() throws Throwable {
- PreviewView previewView = new PreviewView(mContext);
+ final PreviewView previewView = new PreviewView(mContext);
setContentView(previewView);
+
assertThat(getImplementationView()).isInstanceOf(SurfaceView.class);
+ assertThat(previewView.getImplementationMode()).isEqualTo(SURFACE_VIEW);
+ }
+
+ @Test
+ @UiThreadTest
+ public void implementationIsSurfaceView_whenAttributeSetImplementationModeIsSurfaceView()
+ throws Throwable {
+ final PreviewView previewView = (PreviewView) LayoutInflater.from(mContext).inflate(
+ R.layout.preview_view_surface_view_mode, null, false);
+ setContentView(previewView);
+
+ assertThat(getImplementationView()).isInstanceOf(SurfaceView.class);
+ assertThat(previewView.getImplementationMode()).isEqualTo(SURFACE_VIEW);
+ }
+
+ @Test
+ @UiThreadTest
+ public void implementationIsSurfaceView_whenImplementationModeIsSetToSurfaceView()
+ throws Throwable {
+ final PreviewView previewView = new PreviewView(mContext);
+ previewView.setImplementationMode(SURFACE_VIEW);
+ setContentView(previewView);
+
+ assertThat(getImplementationView()).isInstanceOf(SurfaceView.class);
+ assertThat(previewView.getImplementationMode()).isEqualTo(SURFACE_VIEW);
+ }
+
+ @Test
+ @UiThreadTest
+ public void implementationIsTextureView_whenAttributeSetImplementationModeIsTextureView()
+ throws Throwable {
+
+ final PreviewView previewView = (PreviewView) LayoutInflater.from(mContext).inflate(
+ R.layout.preview_view_texture_view_mode, null, false);
+ setContentView(previewView);
+
+ assertThat(getImplementationView()).isInstanceOf(TextureView.class);
+ assertThat(previewView.getImplementationMode()).isEqualTo(TEXTURE_VIEW);
+ }
+
+ @Test
+ @UiThreadTest
+ public void implementationIsTextureView_whenImplementationModeIsSetToTextureView()
+ throws Throwable {
+ final PreviewView previewView = new PreviewView(mContext);
+ previewView.setImplementationMode(TEXTURE_VIEW);
+ setContentView(previewView);
+
+ assertThat(getImplementationView()).isInstanceOf(TextureView.class);
+ assertThat(previewView.getImplementationMode()).isEqualTo(TEXTURE_VIEW);
+ }
+
+ @Test
+ @UiThreadTest
+ public void implementationIsTextureView_whenLastImplementationModeIsSetToTextureView()
+ throws Throwable {
+ final PreviewView previewView = new PreviewView(mContext);
+ setContentView(previewView);
+
+ previewView.setImplementationMode(SURFACE_VIEW);
+ previewView.setImplementationMode(TEXTURE_VIEW);
+
+ assertThat(getImplementationView()).isInstanceOf(TextureView.class);
+ assertThat(previewView.getImplementationMode()).isEqualTo(TEXTURE_VIEW);
}
private void setContentView(View view) throws Throwable {
diff --git a/camera/camera-view/src/androidTest/res/layout/preview_view_surface_view_mode.xml b/camera/camera-view/src/androidTest/res/layout/preview_view_surface_view_mode.xml
new file mode 100644
index 0000000..f4f3243
--- /dev/null
+++ b/camera/camera-view/src/androidTest/res/layout/preview_view_surface_view_mode.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright 2019 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<androidx.camera.view.PreviewView xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ app:implementationMode="surfaceView">
+
+</androidx.camera.view.PreviewView>
diff --git a/camera/camera-view/src/androidTest/res/layout/preview_view_texture_view_mode.xml b/camera/camera-view/src/androidTest/res/layout/preview_view_texture_view_mode.xml
new file mode 100644
index 0000000..640b2c5
--- /dev/null
+++ b/camera/camera-view/src/androidTest/res/layout/preview_view_texture_view_mode.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright 2019 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<androidx.camera.view.PreviewView xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ app:implementationMode="textureView">
+
+</androidx.camera.view.PreviewView>
diff --git a/camera/camera-view/src/main/java/androidx/camera/view/CameraXModule.java b/camera/camera-view/src/main/java/androidx/camera/view/CameraXModule.java
index 66fb327..3a71693 100644
--- a/camera/camera-view/src/main/java/androidx/camera/view/CameraXModule.java
+++ b/camera/camera-view/src/main/java/androidx/camera/view/CameraXModule.java
@@ -215,8 +215,7 @@
@NonNull
@Override
- public ListenableFuture<Surface> createSurfaceFuture(@NonNull Size resolution,
- int imageFormat) {
+ public ListenableFuture<Surface> createSurfaceFuture(@NonNull Size resolution) {
boolean needReverse = cameraOrientation != 0 && cameraOrientation != 180;
int textureWidth =
needReverse
diff --git a/camera/camera-view/src/main/java/androidx/camera/view/PreviewView.java b/camera/camera-view/src/main/java/androidx/camera/view/PreviewView.java
index 15c3965..4e2beba 100644
--- a/camera/camera-view/src/main/java/androidx/camera/view/PreviewView.java
+++ b/camera/camera-view/src/main/java/androidx/camera/view/PreviewView.java
@@ -17,6 +17,8 @@
package androidx.camera.view;
import android.content.Context;
+import android.content.res.TypedArray;
+import android.os.Build;
import android.util.AttributeSet;
import android.widget.FrameLayout;
@@ -30,13 +32,15 @@
* Custom View that displays camera feed for CameraX's Preview use case.
*
* <p> This class manages the Surface lifecycle, as well as the preview aspect ratio and
- * orientation. Internally, it uses one of the TextureView or SurfaceView to display the
- * camera feed.
+ * orientation. Internally, it uses either a {@link android.view.TextureView} or
+ * {@link android.view.SurfaceView} to display the camera feed.
*/
public class PreviewView extends FrameLayout {
private Implementation mImplementation;
+ private ImplementationMode mImplementationMode;
+
public PreviewView(@NonNull Context context) {
this(context, null);
}
@@ -49,15 +53,69 @@
this(context, attrs, defStyleAttr, 0);
}
- public PreviewView(@NonNull Context context, @Nullable AttributeSet attrs,
- int defStyleAttr, int defStyleRes) {
+ public PreviewView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr,
+ int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
- // TODO(b/17519540): support TextureView too.
- mImplementation = new SurfaceViewImplementation();
+
+ final TypedArray attributes = context.getTheme().obtainStyledAttributes(attrs,
+ R.styleable.PreviewView, defStyleAttr, defStyleRes);
+ if (Build.VERSION.SDK_INT >= 29) {
+ saveAttributeDataForStyleable(context, R.styleable.PreviewView, attrs, attributes,
+ defStyleAttr, defStyleRes);
+ }
+
+ try {
+ final int implementationModeId = attributes.getInteger(
+ R.styleable.PreviewView_implementationMode,
+ ImplementationMode.SURFACE_VIEW.getId());
+ mImplementationMode = ImplementationMode.fromId(implementationModeId);
+ } finally {
+ attributes.recycle();
+ }
+ setUp();
+ }
+
+ private void setUp() {
+ removeAllViews();
+ switch (mImplementationMode) {
+ case SURFACE_VIEW:
+ mImplementation = new SurfaceViewImplementation();
+ break;
+ case TEXTURE_VIEW:
+ mImplementation = new TextureViewImplementation();
+ break;
+ default:
+ throw new IllegalStateException(
+ "Unsupported implementation mode " + mImplementationMode);
+ }
mImplementation.init(this);
}
/**
+ * Specifies the {@link ImplementationMode} to use for the preview.
+ *
+ * @param implementationMode <code>SURFACE_VIEW</code> if a {@link android.view.SurfaceView}
+ * should be used to display the camera feed, or
+ * <code>TEXTURE_VIEW</code> to use a {@link android.view.TextureView}
+ */
+ public void setImplementationMode(@NonNull final ImplementationMode implementationMode) {
+ mImplementationMode = implementationMode;
+ setUp();
+ }
+
+ /**
+ * Returns the implementation mode of the {@link PreviewView}.
+ *
+ * @return <code>SURFACE_VIEW</code> if the {@link PreviewView} is internally using a
+ * {@link android.view.SurfaceView} to display the camera feed, or <code>TEXTURE_VIEW</code>
+ * if a {@link android.view.TextureView} is being used.
+ */
+ @NonNull
+ public ImplementationMode getImplementationMode() {
+ return mImplementationMode;
+ }
+
+ /**
* Gets the {@link Preview.PreviewSurfaceCallback} to be used with
* {@link Preview#setPreviewSurfaceCallback(Executor, Preview.PreviewSurfaceCallback)}.
*/
@@ -84,4 +142,39 @@
@NonNull
Preview.PreviewSurfaceCallback getPreviewSurfaceCallback();
}
+
+ /**
+ * The implementation mode of a {@link PreviewView}
+ *
+ * <p>Specifies how the Preview surface will be implemented internally: Using a
+ * {@link android.view.SurfaceView} (which is the default) or a {@link android.view.TextureView}
+ * </p>
+ */
+ public enum ImplementationMode {
+ /** Use a {@link android.view.SurfaceView} for the preview */
+ SURFACE_VIEW(0),
+
+ /** Use a {@link android.view.TextureView} for the preview */
+ TEXTURE_VIEW(1);
+
+ private int mId;
+
+ ImplementationMode(final int id) {
+ mId = id;
+ }
+
+ public int getId() {
+ return mId;
+ }
+
+ static ImplementationMode fromId(final int id) {
+ for (final ImplementationMode mode : values()) {
+ if (mode.mId == id) {
+ return mode;
+ }
+ }
+ throw new IllegalArgumentException("Unsupported implementation mode " + id);
+ }
+ }
}
+
diff --git a/camera/camera-view/src/main/java/androidx/camera/view/SurfaceViewImplementation.java b/camera/camera-view/src/main/java/androidx/camera/view/SurfaceViewImplementation.java
index 7ea9edc..9e76f6d7 100644
--- a/camera/camera-view/src/main/java/androidx/camera/view/SurfaceViewImplementation.java
+++ b/camera/camera-view/src/main/java/androidx/camera/view/SurfaceViewImplementation.java
@@ -52,8 +52,7 @@
new Preview.PreviewSurfaceCallback() {
@NonNull
@Override
- public ListenableFuture<Surface> createSurfaceFuture(@NonNull Size resolution,
- int imageFormat) {
+ public ListenableFuture<Surface> createSurfaceFuture(@NonNull Size resolution) {
return CallbackToFutureAdapter.getFuture(
completer -> {
// Post to UI thread for thread safety.
diff --git a/camera/camera-view/src/main/java/androidx/camera/view/TextureViewImplementation.java b/camera/camera-view/src/main/java/androidx/camera/view/TextureViewImplementation.java
new file mode 100644
index 0000000..d80ebd9
--- /dev/null
+++ b/camera/camera-view/src/main/java/androidx/camera/view/TextureViewImplementation.java
@@ -0,0 +1,72 @@
+/*
+ * 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.camera.view;
+
+import android.graphics.SurfaceTexture;
+import android.util.Log;
+import android.view.TextureView;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
+
+import androidx.annotation.NonNull;
+import androidx.camera.core.Preview;
+import androidx.camera.core.PreviewUtil;
+
+/**
+ * The {@link TextureView} implementation for {@link PreviewView}
+ */
+public class TextureViewImplementation implements PreviewView.Implementation {
+
+ private static final String TAG = "TextureViewImpl";
+
+ // Synthetic Accessor
+ @SuppressWarnings("WeakerAccess")
+ TextureView mTextureView;
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void init(@NonNull FrameLayout parent) {
+ mTextureView = new TextureView(parent.getContext());
+ mTextureView.setLayoutParams(
+ new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT,
+ FrameLayout.LayoutParams.MATCH_PARENT));
+ parent.addView(mTextureView);
+ }
+
+ @NonNull
+ @Override
+ public Preview.PreviewSurfaceCallback getPreviewSurfaceCallback() {
+ return PreviewUtil.createPreviewSurfaceCallback(new PreviewUtil.SurfaceTextureCallback() {
+ @Override
+ public void onSurfaceTextureReady(@NonNull SurfaceTexture surfaceTexture) {
+ Log.d(TAG, "onSurfaceTextureReady");
+ final ViewGroup parent = (ViewGroup) mTextureView.getParent();
+ parent.removeView(mTextureView);
+ parent.addView(mTextureView);
+ mTextureView.setSurfaceTexture(surfaceTexture);
+ }
+
+ @Override
+ public void onSafeToRelease(@NonNull SurfaceTexture surfaceTexture) {
+ Log.d(TAG, "onSafeToRelease");
+ surfaceTexture.release();
+ }
+ });
+ }
+}
diff --git a/camera/camera-view/src/main/res/values/attrs.xml b/camera/camera-view/src/main/res/values/attrs.xml
index a95ec5d..814ab6b 100644
--- a/camera/camera-view/src/main/res/values/attrs.xml
+++ b/camera/camera-view/src/main/res/values/attrs.xml
@@ -37,4 +37,12 @@
<attr name="pinchToZoomEnabled" format="boolean" />
</declare-styleable>
+
+ <declare-styleable name="PreviewView">
+ <attr name="implementationMode" format="enum">
+ <enum name="surfaceView" value="0" />
+ <enum name="textureView" value="1" />
+ </attr>
+ </declare-styleable>
</resources>
+
diff --git a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/FcsCodegenTests.kt b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/FcsCodegenTests.kt
index 64ec08e..0e09178 100644
--- a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/FcsCodegenTests.kt
+++ b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/FcsCodegenTests.kt
@@ -22,6 +22,7 @@
import android.widget.Button
import android.widget.LinearLayout
import android.widget.TextView
+import org.junit.Ignore
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.RuntimeEnvironment
@@ -1155,6 +1156,49 @@
}
}
+ @Ignore("Test case for b/143464846 - re-enable when bug is fixed.")
+ @Test
+ fun testAmbientConsumedFromDefaultParameter(): Unit = ensureSetup {
+ val initialText = "no text"
+ val helloWorld = "Hello World!"
+ compose("""
+ val TextAmbient = Ambient.of { "$initialText" }
+
+ @Composable
+ fun Main() {
+ var text = +state { "$initialText" }
+ TextAmbient.Provider(text.value) {
+ LinearLayout {
+ ConsumesAmbientFromDefaultParameter()
+ Button(
+ text = "Change ambient value",
+ text.value = "$helloWorld" },
+ id=101
+ )
+ }
+ }
+ }
+
+ @Composable
+ fun ConsumesAmbientFromDefaultParameter(text: String = +ambient(TextAmbient)) {
+ TextView(text = text, id = 42)
+ }
+ """,
+ noParameters,
+ "Main()"
+ ).then { activity ->
+ val textView = activity.findViewById(42) as TextView
+ assertEquals(initialText, textView.text)
+ }.then { activity ->
+ val button = activity.findViewById(101) as Button
+ button.performClick()
+ }
+ .then { activity ->
+ val textView = activity.findViewById(42) as TextView
+ assertEquals(helloWorld, textView.text)
+ }
+ }
+
@Test
fun testCGNViewGroup(): Unit = ensureSetup {
val tvId = 258
@@ -2179,6 +2223,11 @@
class NotStable { val value = 10 }
+ enum class EnumState {
+ One,
+ Two
+ }
+
@Composable
fun MemoInt(a: Int) {
output.add("MemoInt a=${'$'}a")
@@ -2210,12 +2259,19 @@
}
@Composable
+ fun MemoEnum(a: EnumState) {
+ output.add("MemoEnum")
+ Button(text="memo ${'$'}{a}")
+ }
+
+ @Composable
fun TestSkipping(
a: Int,
b: Float,
c: Double,
d: NotStable,
- e: ValueHolder
+ e: ValueHolder,
+ f: EnumState
) {
val am = a + m.count
output.add("TestSkipping a=${'$'}a am=${'$'}am")
@@ -2224,11 +2280,12 @@
MemoDouble(a=c)
MemoNotStable(a=d)
MemoModel(a=e)
+ MemoEnum(a=f)
}
@Composable
fun Main(v: ValueHolder, n: NotStable) {
- TestSkipping(a=1, b=1f, c=2.0, d=NotStable(), e=v)
+ TestSkipping(a=1, b=1f, c=2.0, d=NotStable(), e=v, f=EnumState.One)
}
""", {
mapOf(
@@ -2242,7 +2299,7 @@
// Expect that all the methods are called in order
assertEquals(
"TestSkipping a=1 am=1, MemoInt a=1, MemoFloat, " +
- "MemoDouble, MemoNotStable, MemoModelHolder",
+ "MemoDouble, MemoNotStable, MemoModelHolder, MemoEnum",
output.joinToString()
)
output.clear()
diff --git a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/analysis/ComposeDefaultErrorMessages.kt b/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/analysis/ComposeDefaultErrorMessages.kt
index 84c75ef..7d12013 100644
--- a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/analysis/ComposeDefaultErrorMessages.kt
+++ b/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/analysis/ComposeDefaultErrorMessages.kt
@@ -23,14 +23,6 @@
"Couldn't find a valid composer."
)
MAP.put(
- ComposeErrors.DUPLICATE_ATTRIBUTE,
- "Duplicate attribute; Attributes must appear at most once per tag."
- )
- MAP.put(
- ComposeErrors.OPEN_COMPONENT,
- "Component is open. Components cannot be an open or abstract class."
- )
- MAP.put(
ComposeErrors.OPEN_MODEL,
"Model objects cannot be open or abstract"
)
@@ -54,12 +46,6 @@
"Only Unit-returning functions are allowed to be used as Components"
)
MAP.put(
- ComposeErrors.SVC_INVOCATION,
- "Stateless Functional Components (SFCs) should not be invoked, use <{0} /> " +
- "syntax instead",
- OUR_STRING_RENDERER
- )
- MAP.put(
ComposeErrors.COMPOSABLE_INVOCATION_IN_NON_COMPOSABLE,
"Functions which invoke @Composable functions must be marked with the @Composable " +
"annotation"
diff --git a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/analysis/ComposeErrors.java b/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/analysis/ComposeErrors.java
index 577b9e5..1c6b1a5 100644
--- a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/analysis/ComposeErrors.java
+++ b/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/analysis/ComposeErrors.java
@@ -34,13 +34,8 @@
* Error messages
*/
public interface ComposeErrors {
- DiagnosticFactory0<PsiElement> DUPLICATE_ATTRIBUTE = DiagnosticFactory0.create(ERROR);
- DiagnosticFactory0<PsiElement> OPEN_COMPONENT = DiagnosticFactory0.create(ERROR);
DiagnosticFactory0<PsiElement> OPEN_MODEL = DiagnosticFactory0.create(ERROR);
DiagnosticFactory0<PsiElement> UNSUPPORTED_MODEL_INHERITANCE = DiagnosticFactory0.create(ERROR);
-
- DiagnosticFactory1<KtElement, String>
- SVC_INVOCATION = DiagnosticFactory1.create(ERROR);
DiagnosticFactory0<KtElement>
SUSPEND_FUNCTION_USED_AS_SFC = DiagnosticFactory0.create(ERROR);
DiagnosticFactory0<PsiElement>
@@ -53,8 +48,6 @@
INVALID_COMPOSER_IMPLEMENTATION = DiagnosticFactory2.create(ERROR);
DiagnosticFactory2<KtExpression, Collection<KotlinType>, Collection<KotlinType>>
ILLEGAL_ASSIGN_TO_UNIONTYPE = DiagnosticFactory2.create(ERROR);
- DiagnosticFactory0<KtElement>
- CHILDREN_MUST_BE_LAST = DiagnosticFactory0.create(ERROR);
DiagnosticFactory0<PsiElement>
ILLEGAL_TRY_CATCH_AROUND_COMPOSABLE = DiagnosticFactory0.create(ERROR);
diff --git a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/compiler/lower/ComposableCallTransformer.kt b/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/compiler/lower/ComposableCallTransformer.kt
index dfb430e..b555944 100644
--- a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/compiler/lower/ComposableCallTransformer.kt
+++ b/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/compiler/lower/ComposableCallTransformer.kt
@@ -13,7 +13,6 @@
import androidx.compose.plugins.kotlin.isSpecialType
import org.jetbrains.kotlin.backend.common.FileLoweringPass
import org.jetbrains.kotlin.backend.common.lower.createIrBuilder
-import org.jetbrains.kotlin.backend.common.peek
import org.jetbrains.kotlin.backend.common.pop
import org.jetbrains.kotlin.backend.common.push
import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
@@ -25,6 +24,8 @@
import org.jetbrains.kotlin.builtins.isFunctionType
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
import org.jetbrains.kotlin.descriptors.ClassConstructorDescriptor
+import org.jetbrains.kotlin.descriptors.ClassDescriptor
+import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.descriptors.Modality
@@ -52,8 +53,6 @@
import org.jetbrains.kotlin.ir.builders.irReturnUnit
import org.jetbrains.kotlin.ir.builders.irTemporary
import org.jetbrains.kotlin.ir.builders.irTrue
-import org.jetbrains.kotlin.ir.builders.parent
-import org.jetbrains.kotlin.ir.declarations.IrDeclaration
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.IrFile
import org.jetbrains.kotlin.ir.declarations.IrFunction
@@ -67,7 +66,6 @@
import org.jetbrains.kotlin.ir.expressions.IrConst
import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.expressions.IrFunctionExpression
-import org.jetbrains.kotlin.ir.expressions.IrFunctionReference
import org.jetbrains.kotlin.ir.expressions.IrGetValue
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
import org.jetbrains.kotlin.ir.expressions.IrTypeOperator
@@ -137,6 +135,7 @@
(
KotlinBuiltIns.isPrimitiveType(this) ||
isFunctionType ||
+ isEnum ||
isMarkedStable() ||
(
isNullable() &&
@@ -148,6 +147,9 @@
} else calculated
}
+ private val KotlinType.isEnum get() =
+ (constructor.declarationDescriptor as? ClassDescriptor)?.kind == ClassKind.ENUM_CLASS
+
override fun lower(irFile: IrFile) {
irFile.transformChildrenVoid(this)
}
diff --git a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/frames/analysis/FrameModelChecker.kt b/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/frames/analysis/FrameModelChecker.kt
index c937aa5..1543170 100644
--- a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/frames/analysis/FrameModelChecker.kt
+++ b/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/frames/analysis/FrameModelChecker.kt
@@ -17,8 +17,9 @@
import org.jetbrains.kotlin.platform.jvm.isJvm
import org.jetbrains.kotlin.resolve.checkers.DeclarationChecker
import org.jetbrains.kotlin.resolve.checkers.DeclarationCheckerContext
+import org.jetbrains.kotlin.resolve.descriptorUtil.getAllSuperclassesWithoutAny
-class FrameModelChecker : DeclarationChecker, StorageComponentContainerContributor {
+open class FrameModelChecker : DeclarationChecker, StorageComponentContainerContributor {
override fun registerModuleComponents(
container: StorageComponentContainer,
@@ -45,6 +46,13 @@
ComposeDefaultErrorMessages
)
}
+ if (descriptor.getAllSuperclassesWithoutAny().isNotEmpty()) {
+ val element = (declaration as? KtClass)?.nameIdentifier ?: declaration
+ context.trace.reportFromPlugin(
+ ComposeErrors.UNSUPPORTED_MODEL_INHERITANCE.on(element),
+ ComposeDefaultErrorMessages
+ )
+ }
}
}
}
diff --git a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/frames/analysis/FramePackageAnalysisHandlerExtension.kt b/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/frames/analysis/FramePackageAnalysisHandlerExtension.kt
index 96fd789..9b70b31 100644
--- a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/frames/analysis/FramePackageAnalysisHandlerExtension.kt
+++ b/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/frames/analysis/FramePackageAnalysisHandlerExtension.kt
@@ -43,20 +43,6 @@
ClassDescriptor ?: continue
if (!framedDescriptor.hasModelAnnotation()) continue
- val ktType = framedDescriptor.defaultType
-
- // Can only place an @Model on an object that doesn't inherit from another object
- val baseTypes = ktType.constructor.supertypes.filter {
- !it.isInterface() && !it.isAnyOrNullableAny()
- }
- if (baseTypes.isNotEmpty())
- bindingTrace.reportFromPlugin(
- ComposeErrors.UNSUPPORTED_MODEL_INHERITANCE.on(
- ktClass.nameIdentifier ?: ktClass
- ),
- ComposeDefaultErrorMessages
- )
-
val classFqName = ktClass.fqName!!
val recordFqName = classFqName.parent().child(Name.identifier(
"${classFqName.shortName()}\$Record")
diff --git a/compose/compose-ide-plugin/src/main/java/androidx/compose/plugins/idea/IdeFrameModelChecker.kt b/compose/compose-ide-plugin/src/main/java/androidx/compose/plugins/idea/IdeFrameModelChecker.kt
new file mode 100644
index 0000000..8e0bf69
--- /dev/null
+++ b/compose/compose-ide-plugin/src/main/java/androidx/compose/plugins/idea/IdeFrameModelChecker.kt
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.compose.plugins.idea
+
+import androidx.compose.plugins.kotlin.frames.analysis.FrameModelChecker
+import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
+import org.jetbrains.kotlin.psi.KtDeclaration
+import org.jetbrains.kotlin.resolve.checkers.DeclarationCheckerContext
+
+class IdeFrameModelChecker : FrameModelChecker() {
+ override fun check(
+ declaration: KtDeclaration,
+ descriptor: DeclarationDescriptor,
+ context: DeclarationCheckerContext
+ ) {
+ if (isComposeEnabled(declaration)) {
+ super.check(declaration, descriptor, context)
+ }
+ }
+}
\ No newline at end of file
diff --git a/compose/compose-ide-plugin/src/main/java/androidx/compose/plugins/idea/IdeTryCatchComposableChecker.kt b/compose/compose-ide-plugin/src/main/java/androidx/compose/plugins/idea/IdeTryCatchComposableChecker.kt
new file mode 100644
index 0000000..605b954
--- /dev/null
+++ b/compose/compose-ide-plugin/src/main/java/androidx/compose/plugins/idea/IdeTryCatchComposableChecker.kt
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.compose.plugins.idea
+
+import androidx.compose.plugins.kotlin.TryCatchComposableChecker
+import com.intellij.psi.PsiElement
+import org.jetbrains.kotlin.resolve.calls.checkers.CallCheckerContext
+import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
+
+class IdeTryCatchComposableChecker : TryCatchComposableChecker() {
+ override fun check(
+ resolvedCall: ResolvedCall<*>,
+ reportOn: PsiElement,
+ context: CallCheckerContext
+ ) {
+ if (isComposeEnabled(reportOn)) {
+ super.check(resolvedCall, reportOn, context)
+ }
+ }
+}
\ No newline at end of file
diff --git a/compose/compose-ide-plugin/src/main/resources/META-INF/plugin.xml b/compose/compose-ide-plugin/src/main/resources/META-INF/plugin.xml
index ebc52c3..6bcf6b2 100644
--- a/compose/compose-ide-plugin/src/main/resources/META-INF/plugin.xml
+++ b/compose/compose-ide-plugin/src/main/resources/META-INF/plugin.xml
@@ -27,6 +27,8 @@
<depends>org.jetbrains.kotlin</depends>
<extensions defaultExtensionNs="org.jetbrains.kotlin">
+ <storageComponentContainerContributor implementation="androidx.compose.plugins.idea.IdeFrameModelChecker" />
+ <storageComponentContainerContributor implementation="androidx.compose.plugins.idea.IdeTryCatchComposableChecker" />
<storageComponentContainerContributor implementation="androidx.compose.plugins.idea.IdeComposableAnnotationChecker" />
<storageComponentContainerContributor implementation="androidx.compose.plugins.idea.IdeUnionAnnotationCheckerProvider" />
<diagnosticSuppressor implementation="androidx.compose.plugins.idea.IdeComposeDiagnosticSuppressor"/>
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/frames/Frames.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/frames/Frames.kt
index b4ce4f0..13e49bc 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/frames/Frames.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/frames/Frames.kt
@@ -27,10 +27,12 @@
* This allows framed object to be created in the in static initializers when a
* frame could not have been created yet.
*
- * The value 1 was chosen because it must be greater than 0, as 0 is reserved to
- * indicated an invalid frame therefore 1 is the lowest valid frame.
+ * The value 2 was chosen because it must be greater than 0, as 0 is reserved to
+ * indicated an invalid frame (in order to avoid an uninitialized record begin
+ * treated a valid record) and 1 is odd and treated as a speculation frame. That
+ * leaves 2 as the lowest valid frame.
*/
-private const val CREATION_FRAME = 1
+private const val CREATION_FRAME = 2
/**
* Base implementation of a frame record
@@ -65,20 +67,8 @@
fun create(): Record
}
-/**
- * Interface implemented by all model objects. Used by this module to maintain the state records
- * of a model object.
- */
interface Framed {
- /**
- * The first state record in a linked list of state records.
- */
val firstFrameRecord: Record
-
- /**
- * Add a new state record to the beginning of a list. After this call [firstFrameRecord] should
- * be [value].
- */
fun prependFrameRecord(value: Record)
}
@@ -166,11 +156,7 @@
// The following variables should only be written when sync is taken
private val openFrames = BitSet()
private val abortedFrames = BitSet()
-
-// The first frame created must be at least on more than the CREATION_FRAME so objects
-// created ouside a frame (that use the CREATION_FRAME as there id) and modified in the first
-// frame will be seen as modified.
-private var maxFrameId = CREATION_FRAME + 1
+private var maxFrameId = CREATION_FRAME
/**
* Return the frames that are currently open or aborted which should be considered invalid for any
@@ -189,12 +175,14 @@
private fun open(
readOnly: Boolean,
+ speculative: Boolean,
readObserver: FrameReadObserver?,
writeObserver: FrameWriteObserver?
): Frame {
validateNotInFrame()
synchronized(sync) {
- val id = maxFrameId++
+ maxFrameId += 2
+ val id = if (speculative) maxFrameId or 1 else maxFrameId
val invalid = currentInvalid()
val frame = Frame(
id = id,
@@ -216,13 +204,21 @@
* @return the newly created frame's data
*/
fun open(readOnly: Boolean = false) =
- open(readOnly, null, null)
+ open(readOnly, false, null, null)
/**
* Open a frame with observers
*/
fun open(readObserver: FrameReadObserver? = null, writeObserver: FrameWriteObserver? = null) =
- open(false, readObserver, writeObserver)
+ open(false, false, readObserver, writeObserver)
+
+/**
+ * Open a speculative frame. A speculative frame can only be aborted and can be used to
+ * speculate on how a set of framed objects might react to changes. This allows, for example,
+ * expensive calculations to be pre-calculated on a separate thread and later replayed on
+ * the primary thread without affecting the primary thread.
+ */
+fun speculate() = open(false, true, null, null)
/*
* Commits the pending frame if there one is open. Intended to be used in a `finally` clause
@@ -270,11 +266,14 @@
// should only be done after first determining that there are no colliding writes in the commit.
// A write is considered colliding if any write occurred on the object in a frame committed
- // since the frame was last opened. There is a trivial cases that can be dismissed immediately,
- // no writes occurred.
+ // since the frame was last opened. There are two trivial cases that can be dismissed
+ // immediately, first, if the frame is read-only, no writes occurred. Second, if no other frame
+ // was opened while the current frame was open.
val modified = frame.modified
val listeners = synchronized(sync) {
if (!openFrames[frame.id]) throw IllegalStateException("Frame not open")
+ if (frame.id and 1 != 0)
+ throw IllegalStateException("Speculative frames cannot be committed")
if (modified == null || modified.size == 0) {
closeFrame(frame)
emptyList()
@@ -353,7 +352,8 @@
fun abortHandler(frame: Frame) {
synchronized(sync) {
validateOpen(frame)
- abortedFrames.set(frame.id)
+ if (frame.id and 1 == 0)
+ abortedFrames.set(frame.id)
closeFrame(frame)
}
}
@@ -386,6 +386,9 @@
threadFrame.set(null)
}
+private fun speculationFrame(candidateFrame: Int, currentFrame: Int) =
+ candidateFrame != currentFrame && (candidateFrame and 1 == 1)
+
private fun valid(currentFrame: Int, candidateFrame: Int, invalid: BitSet): Boolean {
// A candidate frame is valid if the it is less than or equal to the current frame
// and it wasn't specifically marked as invalid when the frame started.
@@ -395,9 +398,10 @@
//
// All frames born after the current frame are considered invalid since they occur after the
// current frame was open.
- //
- // Id 0 is reserved as an invalid frame.
- return candidateFrame != 0 && candidateFrame <= currentFrame && !invalid.get(candidateFrame)
+ return candidateFrame != 0 && candidateFrame <= currentFrame &&
+ !speculationFrame(candidateFrame, currentFrame) && !invalid.get(
+ candidateFrame
+ )
}
// Determine if the given data is valid for the frame.
@@ -450,7 +454,10 @@
var validRecord: Record? = null
while (current != null) {
val currentId = current.frameId
- if (abortedFrames[currentId])
+ if (speculationFrame(
+ currentId,
+ id
+ ) || abortedFrames[currentId])
return current
if (valid(current, id - 1, invalid)) {
if (validRecord == null) {
diff --git a/compose/compose-runtime/src/commonTest/kotlin/androidx/compose/frames/FramesTests.kt b/compose/compose-runtime/src/commonTest/kotlin/androidx/compose/frames/FramesTests.kt
index e7bc30f..2553662 100644
--- a/compose/compose-runtime/src/commonTest/kotlin/androidx/compose/frames/FramesTests.kt
+++ b/compose/compose-runtime/src/commonTest/kotlin/androidx/compose/frames/FramesTests.kt
@@ -133,6 +133,60 @@
}
@Test
+ fun testSpeculation() {
+ val address = frame {
+ Address(
+ OLD_STREET,
+ OLD_CITY
+ )
+ }
+ speculation {
+ address.street = NEW_STREET
+ assertEquals(NEW_STREET, address.street)
+ }
+ frame {
+ assertEquals(OLD_STREET, address.street)
+ }
+ }
+
+ @Test
+ fun testSpeculationIsolation() {
+ val address = frame {
+ Address(
+ OLD_STREET,
+ OLD_CITY
+ )
+ }
+ speculate()
+ address.street = NEW_STREET
+ val speculation = suspend()
+ frame {
+ assertEquals(OLD_STREET, address.street)
+ }
+ restore(speculation)
+ assertEquals(NEW_STREET, address.street)
+ abortHandler()
+ frame {
+ assertEquals(OLD_STREET, address.street)
+ }
+ }
+
+ @Test
+ fun testReuseSpeculation() {
+ val address = frame {
+ Address(
+ OLD_STREET,
+ OLD_CITY
+ )
+ }
+ assertEquals(1, address.firstFrameRecord.length)
+ speculation { address.street = NEW_STREET }
+ assertEquals(2, address.firstFrameRecord.length)
+ frame { address.street = "other street" }
+ assertEquals(2, address.firstFrameRecord.length)
+ }
+
+ @Test
fun testCommitAbortInteraction() {
val address = frame {
Address(
@@ -1182,6 +1236,15 @@
}
}
+inline fun speculation(crossinline block: () -> Unit) {
+ speculate()
+ try {
+ block()
+ } finally {
+ abortHandler()
+ }
+}
+
inline fun <reified T : Throwable> expectThrow(
crossinline block: () -> Unit
) {
diff --git a/coordinatorlayout/src/androidTest/java/androidx/coordinatorlayout/widget/CoordinatorLayoutTouchEventTest.java b/coordinatorlayout/src/androidTest/java/androidx/coordinatorlayout/widget/CoordinatorLayoutTouchEventTest.java
new file mode 100644
index 0000000..b239e5b
--- /dev/null
+++ b/coordinatorlayout/src/androidTest/java/androidx/coordinatorlayout/widget/CoordinatorLayoutTouchEventTest.java
@@ -0,0 +1,565 @@
+/*
+ * 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.coordinatorlayout.widget;
+
+import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.argThat;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.inOrder;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.reset;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.Mockito.when;
+
+import android.os.SystemClock;
+import android.view.MotionEvent;
+import android.view.TouchDelegate;
+import android.view.View;
+
+import androidx.annotation.NonNull;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.SmallTest;
+import androidx.test.rule.ActivityTestRule;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentMatcher;
+import org.mockito.InOrder;
+
+@SuppressWarnings({"unchecked", "rawtypes"})
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class CoordinatorLayoutTouchEventTest {
+ private static final Touch[] NO_TOUCHES = new Touch[] {};
+
+ @Rule
+ public final ActivityTestRule<CoordinatorLayoutActivity> mActivityTestRule;
+
+ private CoordinatorLayout mCoordinatorLayout;
+ private View mView1;
+ private View mView2;
+ private View mView3;
+ private CoordinatorLayout.Behavior mBehavior1;
+ private CoordinatorLayout.Behavior mBehavior2;
+ private CoordinatorLayout.Behavior mBehavior3;
+
+ public CoordinatorLayoutTouchEventTest() {
+ mActivityTestRule = new ActivityTestRule<>(CoordinatorLayoutActivity.class);
+ }
+
+ @Before
+ public void setup() throws Throwable {
+ mCoordinatorLayout = mActivityTestRule.getActivity().mCoordinatorLayout;
+ mView1 = new View(mCoordinatorLayout.getContext());
+ mView2 = new View(mCoordinatorLayout.getContext());
+ mView3 = new View(mCoordinatorLayout.getContext());
+ mBehavior1 = mock(CoordinatorLayout.Behavior.class);
+ mBehavior2 = mock(CoordinatorLayout.Behavior.class);
+ mBehavior3 = mock(CoordinatorLayout.Behavior.class);
+ mActivityTestRule.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ addViewWithBehavior(mCoordinatorLayout, mView1, mBehavior1);
+ addViewWithBehavior(mCoordinatorLayout, mView2, mBehavior2);
+ addViewWithBehavior(mCoordinatorLayout, mView3, mBehavior3);
+ }
+ });
+ getInstrumentation().waitForIdleSync();
+ reset(mBehavior1, mBehavior2, mBehavior3);
+ }
+
+ @Test
+ public void onInterceptTouchEvent_noneHandles() throws Throwable {
+ mView1.setOnTouchListener(new ReturnTrueOnTouchListener());
+ final MotionEvent downEvent = obtainEvent(MotionEvent.ACTION_DOWN);
+ final MotionEvent moveEvent = obtainEvent(MotionEvent.ACTION_MOVE);
+ final MotionEvent upEvent = obtainEvent(MotionEvent.ACTION_UP);
+
+ mActivityTestRule.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mCoordinatorLayout.dispatchTouchEvent(downEvent);
+ mCoordinatorLayout.dispatchTouchEvent(moveEvent);
+ mCoordinatorLayout.dispatchTouchEvent(upEvent);
+ }
+ });
+ getInstrumentation().waitForIdleSync();
+
+ Touch[] touches = new Touch[]{
+ onInterceptTouch(downEvent),
+ onInterceptTouch(moveEvent),
+ onInterceptTouch(upEvent)};
+ verifyTouches(mView1, touches);
+ verifyTouches(mView2, touches);
+ verifyTouches(mView3, touches);
+ }
+
+ @Test
+ public void onInterceptTouchEvent_interceptOnDown() throws Throwable {
+ mView1.setOnTouchListener(new ReturnTrueOnTouchListener());
+ final MotionEvent downEvent = obtainEvent(MotionEvent.ACTION_DOWN);
+ final MotionEvent moveEvent = obtainEvent(MotionEvent.ACTION_MOVE);
+ final MotionEvent upEvent = obtainEvent(MotionEvent.ACTION_UP);
+
+ when(mBehavior2.onInterceptTouchEvent(mCoordinatorLayout, mView2, downEvent))
+ .thenReturn(true);
+ mActivityTestRule.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mCoordinatorLayout.dispatchTouchEvent(downEvent);
+ mCoordinatorLayout.dispatchTouchEvent(moveEvent);
+ mCoordinatorLayout.dispatchTouchEvent(upEvent);
+ }
+ });
+ getInstrumentation().waitForIdleSync();
+
+ verifyTouches(mView1, NO_TOUCHES);
+ verifyTouches(mView2,
+ onInterceptTouch(downEvent),
+ onTouch(moveEvent),
+ onTouch(upEvent));
+ verifyTouches(mView3,
+ onInterceptTouch(downEvent),
+ onInterceptTouch(MotionEvent.ACTION_CANCEL));
+ }
+
+ @Test
+ public void onInterceptTouchEvent_interceptOnMove() throws Throwable {
+ mView1.setOnTouchListener(new ReturnTrueOnTouchListener());
+ final MotionEvent downEvent = obtainEvent(MotionEvent.ACTION_DOWN);
+ final MotionEvent moveEvent = obtainEvent(MotionEvent.ACTION_MOVE);
+ final MotionEvent upEvent = obtainEvent(MotionEvent.ACTION_UP);
+
+ when(mBehavior2.onInterceptTouchEvent(mCoordinatorLayout, mView2, moveEvent))
+ .thenReturn(true);
+ mActivityTestRule.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mCoordinatorLayout.dispatchTouchEvent(downEvent);
+ mCoordinatorLayout.dispatchTouchEvent(moveEvent);
+ mCoordinatorLayout.dispatchTouchEvent(upEvent);
+ }
+ });
+ getInstrumentation().waitForIdleSync();
+
+ verifyTouches(mView1,
+ onInterceptTouch(downEvent),
+ onInterceptTouch(MotionEvent.ACTION_CANCEL));
+ verifyTouches(mView2,
+ onInterceptTouch(downEvent),
+ onInterceptTouch(moveEvent),
+ onTouch(upEvent));
+ verifyTouches(mView3,
+ onInterceptTouch(downEvent),
+ onInterceptTouch(moveEvent),
+ onInterceptTouch(MotionEvent.ACTION_CANCEL));
+ }
+
+ @Test
+ public void onInterceptTouchEvent_interceptOnUp() throws Throwable {
+ mView1.setOnTouchListener(new ReturnTrueOnTouchListener());
+ final MotionEvent downEvent = obtainEvent(MotionEvent.ACTION_DOWN);
+ final MotionEvent moveEvent = obtainEvent(MotionEvent.ACTION_MOVE);
+ final MotionEvent upEvent = obtainEvent(MotionEvent.ACTION_UP);
+
+ when(mBehavior2.onInterceptTouchEvent(mCoordinatorLayout, mView2, upEvent))
+ .thenReturn(true);
+ mActivityTestRule.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mCoordinatorLayout.dispatchTouchEvent(downEvent);
+ mCoordinatorLayout.dispatchTouchEvent(moveEvent);
+ mCoordinatorLayout.dispatchTouchEvent(upEvent);
+ }
+ });
+ getInstrumentation().waitForIdleSync();
+
+ verifyTouches(mView1,
+ onInterceptTouch(downEvent),
+ onInterceptTouch(moveEvent),
+ onInterceptTouch(MotionEvent.ACTION_CANCEL));
+ verifyTouches(mView2,
+ onInterceptTouch(downEvent),
+ onInterceptTouch(moveEvent),
+ onInterceptTouch(upEvent));
+ verifyTouches(mView3,
+ onInterceptTouch(downEvent),
+ onInterceptTouch(moveEvent),
+ onInterceptTouch(upEvent));
+ }
+
+ @Test
+ public void onInterceptTouchEvent_multipleDowns_intercepted() throws Throwable {
+ mView1.setOnTouchListener(new ReturnTrueOnTouchListener());
+ final MotionEvent downEvent = obtainEvent(MotionEvent.ACTION_DOWN);
+ final MotionEvent moveEvent = obtainEvent(MotionEvent.ACTION_MOVE);
+ final MotionEvent downEvent2 = obtainEvent(MotionEvent.ACTION_DOWN);
+
+ when(mBehavior2.onInterceptTouchEvent(mCoordinatorLayout, mView2, moveEvent))
+ .thenReturn(true);
+ mActivityTestRule.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mCoordinatorLayout.dispatchTouchEvent(downEvent);
+ mCoordinatorLayout.dispatchTouchEvent(moveEvent);
+ mCoordinatorLayout.dispatchTouchEvent(downEvent2);
+ }
+ });
+ getInstrumentation().waitForIdleSync();
+
+ verifyTouches(mView1,
+ onInterceptTouch(downEvent),
+ onInterceptTouch(MotionEvent.ACTION_CANCEL),
+ onInterceptTouch(downEvent2));
+ verifyTouches(mView2,
+ onInterceptTouch(downEvent),
+ onInterceptTouch(moveEvent),
+ onTouch(MotionEvent.ACTION_CANCEL),
+ onInterceptTouch(downEvent2));
+ verifyTouches(mView3,
+ onInterceptTouch(downEvent),
+ onInterceptTouch(moveEvent),
+ onInterceptTouch(MotionEvent.ACTION_CANCEL),
+ onInterceptTouch(downEvent2));
+ }
+
+ @Test
+ public void onInterceptTouchEvent_multipleDowns() throws Throwable {
+ mView1.setOnTouchListener(new ReturnTrueOnTouchListener());
+ final MotionEvent downEvent = obtainEvent(MotionEvent.ACTION_DOWN);
+ final MotionEvent moveEvent = obtainEvent(MotionEvent.ACTION_MOVE);
+ final MotionEvent downEvent2 = obtainEvent(MotionEvent.ACTION_DOWN);
+
+ mActivityTestRule.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mCoordinatorLayout.dispatchTouchEvent(downEvent);
+ mCoordinatorLayout.dispatchTouchEvent(moveEvent);
+ mCoordinatorLayout.dispatchTouchEvent(downEvent2);
+ }
+ });
+ getInstrumentation().waitForIdleSync();
+
+ Touch[] touches = new Touch[] {
+ onInterceptTouch(downEvent),
+ onInterceptTouch(moveEvent),
+ onInterceptTouch(downEvent2)};
+ verifyTouches(mView1, touches);
+ verifyTouches(mView2, touches);
+ verifyTouches(mView3, touches);
+ }
+
+ @Test
+ public void requestDisallowInterceptTouchEvent() throws Throwable {
+ mView1.setOnTouchListener(new ReturnTrueOnTouchListener());
+ final MotionEvent downEvent = obtainEvent(MotionEvent.ACTION_DOWN);
+
+ mActivityTestRule.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mCoordinatorLayout.dispatchTouchEvent(downEvent);
+ mCoordinatorLayout.requestDisallowInterceptTouchEvent(true);
+ }
+ });
+ getInstrumentation().waitForIdleSync();
+
+ Touch[] touches = new Touch[] {
+ onInterceptTouch(downEvent),
+ onInterceptTouch(MotionEvent.ACTION_CANCEL)};
+ verifyTouches(mView1, touches);
+ verifyTouches(mView2, touches);
+ verifyTouches(mView3, touches);
+ }
+
+ @Test
+ public void requestDisallowInterceptTouchEvent_behaviorHandling() throws Throwable {
+ mView1.setOnTouchListener(new ReturnTrueOnTouchListener());
+ final MotionEvent downEvent = obtainEvent(MotionEvent.ACTION_DOWN);
+
+ when(mBehavior2.onInterceptTouchEvent(mCoordinatorLayout, mView2, downEvent))
+ .thenReturn(true);
+ mActivityTestRule.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mCoordinatorLayout.dispatchTouchEvent(downEvent);
+ mCoordinatorLayout.requestDisallowInterceptTouchEvent(true);
+ }
+ });
+ getInstrumentation().waitForIdleSync();
+
+ Touch[] touches = new Touch[] {
+ };
+ verifyTouches(mView1, NO_TOUCHES);
+ verifyTouches(mView2,
+ onInterceptTouch(downEvent),
+ onTouch(downEvent),
+ onTouch(MotionEvent.ACTION_CANCEL));
+ verifyTouches(mView3,
+ onInterceptTouch(downEvent),
+ onInterceptTouch(MotionEvent.ACTION_CANCEL));
+ }
+
+ @Test
+ public void blocksInteractionBelow_down() throws Throwable {
+ mView1.setOnTouchListener(new ReturnTrueOnTouchListener());
+ final MotionEvent downEvent = obtainEvent(MotionEvent.ACTION_DOWN);
+ final MotionEvent moveEvent = obtainEvent(MotionEvent.ACTION_MOVE);
+ final MotionEvent upEvent = obtainEvent(MotionEvent.ACTION_UP);
+
+ when(mBehavior2.blocksInteractionBelow(mCoordinatorLayout, mView2))
+ .thenReturn(true);
+ mActivityTestRule.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mCoordinatorLayout.dispatchTouchEvent(downEvent);
+ mCoordinatorLayout.dispatchTouchEvent(moveEvent);
+ mCoordinatorLayout.dispatchTouchEvent(upEvent);
+ }
+ });
+ getInstrumentation().waitForIdleSync();
+
+ verifyTouches(mView1, NO_TOUCHES);
+ verifyTouches(mView2,
+ onInterceptTouch(downEvent),
+ onInterceptTouch(moveEvent),
+ onInterceptTouch(upEvent));
+ verifyTouches(mView3,
+ onInterceptTouch(downEvent),
+ onInterceptTouch(moveEvent),
+ onInterceptTouch(upEvent));
+ }
+
+ @Test
+ public void blocksInteractionBelow_move() throws Throwable {
+ mView1.setOnTouchListener(new ReturnTrueOnTouchListener());
+ final MotionEvent downEvent = obtainEvent(MotionEvent.ACTION_DOWN);
+ final MotionEvent moveEvent = obtainEvent(MotionEvent.ACTION_MOVE);
+ final MotionEvent upEvent = obtainEvent(MotionEvent.ACTION_UP);
+
+ mActivityTestRule.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mCoordinatorLayout.dispatchTouchEvent(downEvent);
+ when(mBehavior2.blocksInteractionBelow(mCoordinatorLayout, mView2))
+ .thenReturn(true);
+ mCoordinatorLayout.dispatchTouchEvent(moveEvent);
+ mCoordinatorLayout.dispatchTouchEvent(upEvent);
+ }
+ });
+ getInstrumentation().waitForIdleSync();
+
+ verifyTouches(mView1,
+ onInterceptTouch(downEvent),
+ onInterceptTouch(MotionEvent.ACTION_CANCEL));
+ verifyTouches(mView2,
+ onInterceptTouch(downEvent),
+ onInterceptTouch(moveEvent),
+ onInterceptTouch(upEvent));
+ verifyTouches(mView3,
+ onInterceptTouch(downEvent),
+ onInterceptTouch(moveEvent),
+ onInterceptTouch(upEvent));
+ }
+
+ @Test
+ public void onTouchEvent() throws Throwable {
+ TouchDelegate touchDelegate = mock(TouchDelegate.class);
+ mCoordinatorLayout.setTouchDelegate(touchDelegate);
+ final MotionEvent downEvent = obtainEvent(MotionEvent.ACTION_DOWN);
+ final MotionEvent moveEvent = obtainEvent(MotionEvent.ACTION_MOVE);
+ final MotionEvent upEvent = obtainEvent(MotionEvent.ACTION_UP);
+
+ mActivityTestRule.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mCoordinatorLayout.dispatchTouchEvent(downEvent);
+ mCoordinatorLayout.dispatchTouchEvent(moveEvent);
+ mCoordinatorLayout.dispatchTouchEvent(upEvent);
+ }
+ });
+ getInstrumentation().waitForIdleSync();
+
+ verify(touchDelegate).onTouchEvent(downEvent);
+ verify(touchDelegate).onTouchEvent(moveEvent);
+ verify(touchDelegate).onTouchEvent(upEvent);
+ verifyNoMoreInteractions(touchDelegate);
+ Touch[] touches = new Touch[] {
+ onInterceptTouch(downEvent),
+ onInterceptTouch(moveEvent),
+ onInterceptTouch(upEvent)};
+ verifyTouches(mView1, touches);
+ verifyTouches(mView2, touches);
+ verifyTouches(mView3, touches);
+ }
+
+ @Test
+ public void onTouchEvent_intercept() throws Throwable {
+ TouchDelegate touchDelegate = mock(TouchDelegate.class);
+ mCoordinatorLayout.setTouchDelegate(touchDelegate);
+ final MotionEvent downEvent = obtainEvent(MotionEvent.ACTION_DOWN);
+ final MotionEvent moveEvent = obtainEvent(MotionEvent.ACTION_MOVE);
+ final MotionEvent upEvent = obtainEvent(MotionEvent.ACTION_UP);
+
+ when(mBehavior2.onInterceptTouchEvent(mCoordinatorLayout, mView2, moveEvent))
+ .thenReturn(true);
+ mActivityTestRule.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mCoordinatorLayout.dispatchTouchEvent(downEvent);
+ mCoordinatorLayout.dispatchTouchEvent(moveEvent);
+ mCoordinatorLayout.dispatchTouchEvent(upEvent);
+ }
+ });
+ getInstrumentation().waitForIdleSync();
+
+ verify(touchDelegate).onTouchEvent(downEvent);
+ verify(touchDelegate).onTouchEvent(action(MotionEvent.ACTION_CANCEL));
+ verifyNoMoreInteractions(touchDelegate);
+ verifyTouches(mView1,
+ onInterceptTouch(downEvent),
+ onInterceptTouch(MotionEvent.ACTION_CANCEL));
+ verifyTouches(mView2,
+ onInterceptTouch(downEvent),
+ onInterceptTouch(moveEvent),
+ onTouch(upEvent));
+ verifyTouches(mView3,
+ onInterceptTouch(downEvent),
+ onInterceptTouch(moveEvent),
+ onInterceptTouch(MotionEvent.ACTION_CANCEL));
+ }
+
+ private static void verifyTouches(View view, Touch... touches) {
+ CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams) view.getLayoutParams();
+ CoordinatorLayout.Behavior behavior = lp.getBehavior();
+ CoordinatorLayout coordinatorLayout = (CoordinatorLayout) view.getParent();
+ InOrder inOrder = inOrder(behavior);
+ for (Touch touch : touches) {
+ switch (touch.mType) {
+ case INTERCEPT:
+ inOrder.verify(behavior)
+ .onInterceptTouchEvent(
+ eq(coordinatorLayout), eq(view), touch.getMatcher());
+ break;
+ case TOUCH:
+ inOrder.verify(behavior)
+ .onTouchEvent(eq(coordinatorLayout), eq(view), touch.getMatcher());
+ break;
+ }
+ }
+ verifyNoMoreTouches(inOrder, behavior);
+ }
+
+ private static void verifyNoMoreTouches(InOrder order, CoordinatorLayout.Behavior behavior) {
+ order.verify(behavior, times(0))
+ .onInterceptTouchEvent(
+ any(CoordinatorLayout.class), any(View.class), any(MotionEvent.class));
+ order.verify(behavior, times(0))
+ .onTouchEvent(
+ any(CoordinatorLayout.class), any(View.class), any(MotionEvent.class));
+ }
+
+ private static MotionEvent obtainEvent(int action) {
+ final long now = SystemClock.uptimeMillis();
+ return MotionEvent.obtain(now, now, action, 0, 0, 0);
+ }
+
+ private static void addViewWithBehavior(CoordinatorLayout coordinatorLayout, View view,
+ CoordinatorLayout.Behavior behavior) {
+ final CoordinatorLayout.LayoutParams lp = coordinatorLayout.generateDefaultLayoutParams();
+ lp.setBehavior(behavior);
+ coordinatorLayout.addView(view, lp);
+ }
+
+ private static MotionEvent action(int action) {
+ return argThat(new MotionEventMatcher(action));
+ }
+
+ private static Touch onInterceptTouch(MotionEvent motionEvent) {
+ return new Touch(Touch.Type.INTERCEPT, motionEvent);
+ }
+
+ private static Touch onInterceptTouch(int action) {
+ return new Touch(Touch.Type.INTERCEPT, action);
+ }
+
+ private static Touch onTouch(MotionEvent motionEvent) {
+ return new Touch(Touch.Type.TOUCH, motionEvent);
+ }
+
+ private static Touch onTouch(int action) {
+ return new Touch(Touch.Type.TOUCH, action);
+ }
+
+ private static final class Touch {
+ enum Type {
+ INTERCEPT,
+ TOUCH,
+ }
+ private final Type mType;
+ private final MotionEvent mMotionEvent;
+ private final int mAction;
+
+ Touch(Type type, MotionEvent motionEvent) {
+ mType = type;
+ mMotionEvent = motionEvent;
+ mAction = 0;
+ }
+
+ Touch(Type type, int action) {
+ mType = type;
+ mMotionEvent = null;
+ mAction = action;
+ }
+
+ MotionEvent getMatcher() {
+ return mMotionEvent != null ? eq(mMotionEvent) : action(mAction);
+ }
+ }
+
+ private static final class MotionEventMatcher implements ArgumentMatcher<MotionEvent> {
+
+ private final int mAction;
+
+ MotionEventMatcher(int action) {
+ this.mAction = action;
+ }
+
+ @Override
+ public boolean matches(MotionEvent event) {
+ return event.getAction() == mAction;
+ }
+
+ @NonNull
+ @Override
+ public String toString() {
+ return "MotionEvent#getAction() == " + MotionEvent.actionToString(mAction);
+ }
+ }
+
+ private static final class ReturnTrueOnTouchListener implements View.OnTouchListener {
+ @Override
+ public boolean onTouch(View v, MotionEvent event) {
+ return true;
+ }
+ }
+}
diff --git a/coordinatorlayout/src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java b/coordinatorlayout/src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java
index 4344175..7ef139f 100644
--- a/coordinatorlayout/src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java
+++ b/coordinatorlayout/src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java
@@ -119,9 +119,6 @@
WIDGET_PACKAGE_NAME = pkg != null ? pkg.getName() : null;
}
- private static final int TYPE_ON_INTERCEPT = 0;
- private static final int TYPE_ON_TOUCH = 1;
-
static {
if (Build.VERSION.SDK_INT >= 21) {
TOP_SORTED_CHILDREN_COMPARATOR = new ViewElevationComparator();
@@ -262,7 +259,7 @@
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
- resetTouchBehaviors(false);
+ resetTouchBehaviors();
if (mNeedsPreDrawListener) {
if (mOnPreDrawListener == null) {
mOnPreDrawListener = new OnPreDrawListener();
@@ -281,7 +278,7 @@
@Override
public void onDetachedFromWindow() {
super.onDetachedFromWindow();
- resetTouchBehaviors(false);
+ resetTouchBehaviors();
if (mNeedsPreDrawListener && mOnPreDrawListener != null) {
final ViewTreeObserver vto = getViewTreeObserver();
vto.removeOnPreDrawListener(mOnPreDrawListener);
@@ -401,6 +398,28 @@
return mLastInsets;
}
+ @SuppressWarnings("unchecked")
+ private void cancelInterceptBehaviors() {
+ MotionEvent cancelEvent = null;
+ final int childCount = getChildCount();
+ for (int i = 0; i < childCount; i++) {
+ final View child = getChildAt(i);
+ final LayoutParams lp = (LayoutParams) child.getLayoutParams();
+ final Behavior b = lp.getBehavior();
+ if (b != null) {
+ if (cancelEvent == null) {
+ final long now = SystemClock.uptimeMillis();
+ cancelEvent = MotionEvent.obtain(now, now,
+ MotionEvent.ACTION_CANCEL, 0.0f, 0.0f, 0);
+ }
+ b.onInterceptTouchEvent(this, child, cancelEvent);
+ }
+ }
+ if (cancelEvent != null) {
+ cancelEvent.recycle();
+ }
+ }
+
/**
* Reset all Behavior-related tracking records either to clean up or in preparation
* for a new event stream. This should be called when attached or detached from a window,
@@ -408,31 +427,26 @@
* and similar cases where an event stream in progress will be aborted.
*/
@SuppressWarnings("unchecked")
- private void resetTouchBehaviors(boolean notifyOnInterceptTouchEvent) {
- final int childCount = getChildCount();
- for (int i = 0; i < childCount; i++) {
- final View child = getChildAt(i);
- final LayoutParams lp = (LayoutParams) child.getLayoutParams();
+ private void resetTouchBehaviors() {
+ if (mBehaviorTouchView != null) {
+ final LayoutParams lp = (LayoutParams) mBehaviorTouchView.getLayoutParams();
final Behavior b = lp.getBehavior();
if (b != null) {
final long now = SystemClock.uptimeMillis();
final MotionEvent cancelEvent = MotionEvent.obtain(now, now,
MotionEvent.ACTION_CANCEL, 0.0f, 0.0f, 0);
- if (notifyOnInterceptTouchEvent) {
- b.onInterceptTouchEvent(this, child, cancelEvent);
- } else {
- b.onTouchEvent(this, child, cancelEvent);
- }
+ b.onTouchEvent(this, mBehaviorTouchView, cancelEvent);
cancelEvent.recycle();
}
+ mBehaviorTouchView = null;
}
+ final int childCount = getChildCount();
for (int i = 0; i < childCount; i++) {
final View child = getChildAt(i);
final LayoutParams lp = (LayoutParams) child.getLayoutParams();
lp.resetTouchBehaviorTracking();
}
- mBehaviorTouchView = null;
mDisallowInterceptReset = false;
}
@@ -457,14 +471,14 @@
}
@SuppressWarnings("unchecked")
- private boolean performIntercept(MotionEvent ev, final int type) {
+ private boolean performIntercept(MotionEvent ev) {
boolean intercepted = false;
boolean newBlock = false;
- MotionEvent cancelEvent = null;
-
final int action = ev.getActionMasked();
+ MotionEvent cancelEvent = null;
+
final List<View> topmostChildList = mTempList1;
getTopSortedChildren(topmostChildList);
@@ -479,34 +493,29 @@
// Cancel all behaviors beneath the one that intercepted.
// If the event is "down" then we don't have anything to cancel yet.
if (b != null) {
- if (cancelEvent == null) {
- final long now = SystemClock.uptimeMillis();
- cancelEvent = MotionEvent.obtain(now, now,
- MotionEvent.ACTION_CANCEL, 0.0f, 0.0f, 0);
- }
- switch (type) {
- case TYPE_ON_INTERCEPT:
- b.onInterceptTouchEvent(this, child, cancelEvent);
- break;
- case TYPE_ON_TOUCH:
- b.onTouchEvent(this, child, cancelEvent);
- break;
- }
+ if (cancelEvent == null) cancelEvent = obtainCancelEvent(ev);
+ b.onInterceptTouchEvent(this, child, cancelEvent);
}
continue;
}
- if (!intercepted && b != null) {
- switch (type) {
- case TYPE_ON_INTERCEPT:
- intercepted = b.onInterceptTouchEvent(this, child, ev);
- break;
- case TYPE_ON_TOUCH:
- intercepted = b.onTouchEvent(this, child, ev);
- break;
- }
+ if (!newBlock && !intercepted && b != null) {
+ intercepted = b.onInterceptTouchEvent(this, child, ev);
if (intercepted) {
mBehaviorTouchView = child;
+ // If a behavior intercepted an event then send cancel events to all the prior
+ // behaviors.
+ if (action != MotionEvent.ACTION_CANCEL && action != MotionEvent.ACTION_UP) {
+ for (int j = 0; j < i; j++) {
+ final View priorChild = topmostChildList.get(j);
+ final Behavior priorBehavior =
+ ((LayoutParams) priorChild.getLayoutParams()).getBehavior();
+ if (priorBehavior != null) {
+ if (cancelEvent == null) cancelEvent = obtainCancelEvent(ev);
+ priorBehavior.onInterceptTouchEvent(this, priorChild, cancelEvent);
+ }
+ }
+ }
}
}
@@ -524,22 +533,35 @@
topmostChildList.clear();
+ if (cancelEvent != null) {
+ cancelEvent.recycle();
+ }
+
return intercepted;
}
+ private MotionEvent obtainCancelEvent(MotionEvent other) {
+ MotionEvent event = MotionEvent.obtain(other);
+ event.setAction(MotionEvent.ACTION_CANCEL);
+ return event;
+ }
+
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
final int action = ev.getActionMasked();
// Make sure we reset in case we had missed a previous important event.
if (action == MotionEvent.ACTION_DOWN) {
- resetTouchBehaviors(true);
+ resetTouchBehaviors();
}
- final boolean intercepted = performIntercept(ev, TYPE_ON_INTERCEPT);
+ final boolean intercepted = performIntercept(ev);
if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) {
- resetTouchBehaviors(true);
+ // We have already sent this event to the behavior that was handling the touch so clear
+ // it out before reseting the touch state to avoid sending it another cancel event.
+ mBehaviorTouchView = null;
+ resetTouchBehaviors();
}
return intercepted;
@@ -550,38 +572,33 @@
public boolean onTouchEvent(MotionEvent ev) {
boolean handled = false;
boolean cancelSuper = false;
- MotionEvent cancelEvent = null;
final int action = ev.getActionMasked();
- if (mBehaviorTouchView != null || (cancelSuper = performIntercept(ev, TYPE_ON_TOUCH))) {
- // Safe since performIntercept guarantees that
- // mBehaviorTouchView != null if it returns true
+ if (mBehaviorTouchView != null) {
final LayoutParams lp = (LayoutParams) mBehaviorTouchView.getLayoutParams();
final Behavior b = lp.getBehavior();
if (b != null) {
handled = b.onTouchEvent(this, mBehaviorTouchView, ev);
}
+ } else {
+ cancelSuper = performIntercept(ev);
}
// Keep the super implementation correct
- if (mBehaviorTouchView == null) {
+ if (mBehaviorTouchView == null || action == MotionEvent.ACTION_CANCEL) {
handled |= super.onTouchEvent(ev);
} else if (cancelSuper) {
- if (cancelEvent == null) {
- final long now = SystemClock.uptimeMillis();
- cancelEvent = MotionEvent.obtain(now, now,
- MotionEvent.ACTION_CANCEL, 0.0f, 0.0f, 0);
- }
+ MotionEvent cancelEvent = obtainCancelEvent(ev);
super.onTouchEvent(cancelEvent);
- }
-
- if (cancelEvent != null) {
cancelEvent.recycle();
}
if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) {
- resetTouchBehaviors(false);
+ // We have already sent this event to the behavior that was handling the touch so clear
+ // it out before reseting the touch state to avoid sending it another cancel event.
+ mBehaviorTouchView = null;
+ resetTouchBehaviors();
}
return handled;
@@ -591,7 +608,12 @@
public void requestDisallowInterceptTouchEvent(boolean disallowIntercept) {
super.requestDisallowInterceptTouchEvent(disallowIntercept);
if (disallowIntercept && !mDisallowInterceptReset) {
- resetTouchBehaviors(false);
+ // If there is no behavior currently handling touches then send a cancel event to all
+ // behavior's intercept methods.
+ if (mBehaviorTouchView == null) {
+ cancelInterceptBehaviors();
+ }
+ resetTouchBehaviors();
mDisallowInterceptReset = true;
}
}
diff --git a/core/core-ktx/api/1.3.0-alpha01.txt b/core/core-ktx/api/1.3.0-alpha01.txt
new file mode 100644
index 0000000..39aa8e5
--- /dev/null
+++ b/core/core-ktx/api/1.3.0-alpha01.txt
@@ -0,0 +1,652 @@
+// Signature format: 3.0
+package androidx.core.animation {
+
+ public final class AnimatorKt {
+ ctor public AnimatorKt();
+ method public static inline android.animation.Animator.AnimatorListener addListener(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> >
+ method @RequiresApi(19) public static inline android.animation.Animator.AnimatorPauseListener addPauseListener(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> >
+ method public static inline android.animation.Animator.AnimatorListener doOnCancel(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
+ method public static inline android.animation.Animator.AnimatorListener doOnEnd(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
+ method @RequiresApi(19) public static inline android.animation.Animator.AnimatorPauseListener doOnPause(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
+ method public static inline android.animation.Animator.AnimatorListener doOnRepeat(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
+ method @RequiresApi(19) public static inline android.animation.Animator.AnimatorPauseListener doOnResume(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
+ method public static inline android.animation.Animator.AnimatorListener doOnStart(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
+ }
+
+}
+
+package androidx.core.content {
+
+ public final class ContentValuesKt {
+ ctor public ContentValuesKt();
+ method public static android.content.ContentValues contentValuesOf(kotlin.Pair<java.lang.String,?>... pairs);
+ }
+
+ public final class ContextKt {
+ ctor public ContextKt();
+ method public static inline <reified T> T! getSystemService(android.content.Context);
+ method public static inline void withStyledAttributes(android.content.Context, android.util.AttributeSet? set = null, int[] attrs, @AttrRes int defStyleAttr = 0, @StyleRes int defStyleRes = 0, kotlin.jvm.functions.Function1<? super android.content.res.TypedArray,kotlin.Unit> block);
+ method public static inline void withStyledAttributes(android.content.Context, @StyleRes int resourceId, int[] attrs, kotlin.jvm.functions.Function1<? super android.content.res.TypedArray,kotlin.Unit> block);
+ }
+
+ public final class SharedPreferencesKt {
+ ctor public SharedPreferencesKt();
+ method public static inline void edit(android.content.SharedPreferences, boolean commit = false, kotlin.jvm.functions.Function1<? super android.content.SharedPreferences.Editor,kotlin.Unit> action);
+ }
+
+}
+
+package androidx.core.content.res {
+
+ public final class TypedArrayKt {
+ ctor public TypedArrayKt();
+ method public static boolean getBooleanOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method @ColorInt public static int getColorOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static android.content.res.ColorStateList getColorStateListOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static float getDimensionOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method @Dimension public static int getDimensionPixelOffsetOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method @Dimension public static int getDimensionPixelSizeOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static android.graphics.drawable.Drawable getDrawableOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static float getFloatOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method @RequiresApi(26) public static android.graphics.Typeface getFontOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static int getIntOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static int getIntegerOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method @AnyRes public static int getResourceIdOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static String getStringOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static CharSequence![] getTextArrayOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static CharSequence getTextOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static inline <R> R! use(android.content.res.TypedArray, kotlin.jvm.functions.Function1<? super android.content.res.TypedArray,? extends R> block);
+ }
+
+}
+
+package androidx.core.database {
+
+ public final class CursorKt {
+ ctor public CursorKt();
+ method public static inline byte[]? getBlobOrNull(android.database.Cursor, int index);
+ method public static inline Double? getDoubleOrNull(android.database.Cursor, int index);
+ method public static inline Float? getFloatOrNull(android.database.Cursor, int index);
+ method public static inline Integer? getIntOrNull(android.database.Cursor, int index);
+ method public static inline Long? getLongOrNull(android.database.Cursor, int index);
+ method public static inline Short? getShortOrNull(android.database.Cursor, int index);
+ method public static inline String? getStringOrNull(android.database.Cursor, int index);
+ }
+
+}
+
+package androidx.core.database.sqlite {
+
+ public final class SQLiteDatabaseKt {
+ ctor public SQLiteDatabaseKt();
+ method public static inline <T> T! transaction(android.database.sqlite.SQLiteDatabase, boolean exclusive = true, kotlin.jvm.functions.Function1<? super android.database.sqlite.SQLiteDatabase,? extends T> body);
+ }
+
+}
+
+package androidx.core.graphics {
+
+ public final class BitmapKt {
+ ctor public BitmapKt();
+ method public static inline android.graphics.Bitmap applyCanvas(android.graphics.Bitmap, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline operator boolean contains(android.graphics.Bitmap, android.graphics.Point p);
+ method public static inline operator boolean contains(android.graphics.Bitmap, android.graphics.PointF p);
+ method public static inline android.graphics.Bitmap createBitmap(int width, int height, android.graphics.Bitmap.Config config = android.graphics.Bitmap.Config.ARGB_8888);
+ method @RequiresApi(26) public static inline android.graphics.Bitmap createBitmap(int width, int height, android.graphics.Bitmap.Config config = android.graphics.Bitmap.Config.ARGB_8888, boolean hasAlpha = true, android.graphics.ColorSpace colorSpace = ColorSpace.get(ColorSpace.Named.SRGB));
+ method public static inline operator int get(android.graphics.Bitmap, int x, int y);
+ method public static inline android.graphics.Bitmap scale(android.graphics.Bitmap, int width, int height, boolean filter = true);
+ method public static inline operator void set(android.graphics.Bitmap, int x, int y, @ColorInt int color);
+ }
+
+ public final class CanvasKt {
+ ctor public CanvasKt();
+ method public static inline void withClip(android.graphics.Canvas, android.graphics.Rect clipRect, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withClip(android.graphics.Canvas, android.graphics.RectF clipRect, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withClip(android.graphics.Canvas, int left, int top, int right, int bottom, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withClip(android.graphics.Canvas, float left, float top, float right, float bottom, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withClip(android.graphics.Canvas, android.graphics.Path clipPath, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withMatrix(android.graphics.Canvas, android.graphics.Matrix matrix = android.graphics.Matrix(), kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withRotation(android.graphics.Canvas, float degrees = 0.0f, float pivotX = 0.0f, float pivotY = 0.0f, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withSave(android.graphics.Canvas, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withScale(android.graphics.Canvas, float x = 1.0f, float y = 1.0f, float pivotX = 0.0f, float pivotY = 0.0f, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withSkew(android.graphics.Canvas, float x = 0.0f, float y = 0.0f, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withTranslation(android.graphics.Canvas, float x = 0.0f, float y = 0.0f, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ }
+
+ public final class ColorKt {
+ ctor public ColorKt();
+ method @RequiresApi(26) public static inline operator float component1(android.graphics.Color);
+ method public static inline operator int component1(@ColorInt int);
+ method @RequiresApi(26) public static inline operator float component1(@ColorLong long);
+ method @RequiresApi(26) public static inline operator float component2(android.graphics.Color);
+ method public static inline operator int component2(@ColorInt int);
+ method @RequiresApi(26) public static inline operator float component2(@ColorLong long);
+ method @RequiresApi(26) public static inline operator float component3(android.graphics.Color);
+ method public static inline operator int component3(@ColorInt int);
+ method @RequiresApi(26) public static inline operator float component3(@ColorLong long);
+ method @RequiresApi(26) public static inline operator float component4(android.graphics.Color);
+ method public static inline operator int component4(@ColorInt int);
+ method @RequiresApi(26) public static inline operator float component4(@ColorLong long);
+ method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorInt int, android.graphics.ColorSpace.Named colorSpace);
+ method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorInt int, android.graphics.ColorSpace colorSpace);
+ method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorLong long, android.graphics.ColorSpace.Named colorSpace);
+ method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorLong long, android.graphics.ColorSpace colorSpace);
+ method @RequiresApi(26) public static inline infix android.graphics.Color convertTo(android.graphics.Color, android.graphics.ColorSpace.Named colorSpace);
+ method @RequiresApi(26) public static inline infix android.graphics.Color convertTo(android.graphics.Color, android.graphics.ColorSpace colorSpace);
+ method public static inline int getAlpha(@ColorInt int);
+ method @RequiresApi(26) public static inline float getAlpha(@ColorLong long);
+ method public static inline int getBlue(@ColorInt int);
+ method @RequiresApi(26) public static inline float getBlue(@ColorLong long);
+ method @RequiresApi(26) public static inline android.graphics.ColorSpace getColorSpace(@ColorLong long);
+ method public static inline int getGreen(@ColorInt int);
+ method @RequiresApi(26) public static inline float getGreen(@ColorLong long);
+ method @RequiresApi(26) public static inline float getLuminance(@ColorInt int);
+ method @RequiresApi(26) public static inline float getLuminance(@ColorLong long);
+ method public static inline int getRed(@ColorInt int);
+ method @RequiresApi(26) public static inline float getRed(@ColorLong long);
+ method @RequiresApi(26) public static inline boolean isSrgb(@ColorLong long);
+ method @RequiresApi(26) public static inline boolean isWideGamut(@ColorLong long);
+ method @RequiresApi(26) public static operator android.graphics.Color plus(android.graphics.Color, android.graphics.Color c);
+ method @RequiresApi(26) public static inline android.graphics.Color toColor(@ColorInt int);
+ method @RequiresApi(26) public static inline android.graphics.Color toColor(@ColorLong long);
+ method @ColorInt @RequiresApi(26) public static inline int toColorInt(@ColorLong long);
+ method @ColorInt public static inline int toColorInt(String);
+ method @ColorLong @RequiresApi(26) public static inline long toColorLong(@ColorInt int);
+ }
+
+ public final class ImageDecoderKt {
+ ctor public ImageDecoderKt();
+ method @RequiresApi(28) public static inline android.graphics.Bitmap decodeBitmap(android.graphics.ImageDecoder.Source, kotlin.jvm.functions.Function3<? super android.graphics.ImageDecoder,? super android.graphics.ImageDecoder.ImageInfo,? super android.graphics.ImageDecoder.Source,kotlin.Unit> action);
+ method @RequiresApi(28) public static inline android.graphics.drawable.Drawable decodeDrawable(android.graphics.ImageDecoder.Source, kotlin.jvm.functions.Function3<? super android.graphics.ImageDecoder,? super android.graphics.ImageDecoder.ImageInfo,? super android.graphics.ImageDecoder.Source,kotlin.Unit> action);
+ }
+
+ public final class MatrixKt {
+ ctor public MatrixKt();
+ method public static android.graphics.Matrix rotationMatrix(float degrees, float px = 0.0f, float py = 0.0f);
+ method public static android.graphics.Matrix scaleMatrix(float sx = 1.0f, float sy = 1.0f);
+ method public static inline operator android.graphics.Matrix times(android.graphics.Matrix, android.graphics.Matrix m);
+ method public static android.graphics.Matrix translationMatrix(float tx = 0.0f, float ty = 0.0f);
+ method public static inline float[] values(android.graphics.Matrix);
+ }
+
+ public final class PaintKt {
+ ctor public PaintKt();
+ method public static inline boolean setBlendMode(android.graphics.Paint, androidx.core.graphics.BlendModeCompat? blendModeCompat);
+ }
+
+ public final class PathKt {
+ ctor public PathKt();
+ method @RequiresApi(19) public static inline infix android.graphics.Path and(android.graphics.Path, android.graphics.Path p);
+ method @RequiresApi(26) public static Iterable<androidx.core.graphics.PathSegment> flatten(android.graphics.Path, float error = 0.5f);
+ method @RequiresApi(19) public static inline operator android.graphics.Path minus(android.graphics.Path, android.graphics.Path p);
+ method @RequiresApi(19) public static inline infix android.graphics.Path or(android.graphics.Path, android.graphics.Path p);
+ method @RequiresApi(19) public static inline operator android.graphics.Path plus(android.graphics.Path, android.graphics.Path p);
+ method @RequiresApi(19) public static inline infix android.graphics.Path xor(android.graphics.Path, android.graphics.Path p);
+ }
+
+ public final class PictureKt {
+ ctor public PictureKt();
+ method public static inline android.graphics.Picture record(android.graphics.Picture, int width, int height, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ }
+
+ public final class PointKt {
+ ctor public PointKt();
+ method public static inline operator int component1(android.graphics.Point);
+ method public static inline operator float component1(android.graphics.PointF);
+ method public static inline operator int component2(android.graphics.Point);
+ method public static inline operator float component2(android.graphics.PointF);
+ method public static inline operator android.graphics.Point minus(android.graphics.Point, android.graphics.Point p);
+ method public static inline operator android.graphics.PointF minus(android.graphics.PointF, android.graphics.PointF p);
+ method public static inline operator android.graphics.Point minus(android.graphics.Point, int xy);
+ method public static inline operator android.graphics.PointF minus(android.graphics.PointF, float xy);
+ method public static inline operator android.graphics.Point plus(android.graphics.Point, android.graphics.Point p);
+ method public static inline operator android.graphics.PointF plus(android.graphics.PointF, android.graphics.PointF p);
+ method public static inline operator android.graphics.Point plus(android.graphics.Point, int xy);
+ method public static inline operator android.graphics.PointF plus(android.graphics.PointF, float xy);
+ method public static inline android.graphics.Point toPoint(android.graphics.PointF);
+ method public static inline android.graphics.PointF toPointF(android.graphics.Point);
+ method public static inline operator android.graphics.Point unaryMinus(android.graphics.Point);
+ method public static inline operator android.graphics.PointF unaryMinus(android.graphics.PointF);
+ }
+
+ public final class PorterDuffKt {
+ ctor public PorterDuffKt();
+ method public static inline android.graphics.PorterDuffColorFilter toColorFilter(android.graphics.PorterDuff.Mode, int color);
+ method public static inline android.graphics.PorterDuffXfermode toXfermode(android.graphics.PorterDuff.Mode);
+ }
+
+ public final class RectKt {
+ ctor public RectKt();
+ method public static inline infix android.graphics.Rect and(android.graphics.Rect, android.graphics.Rect r);
+ method public static inline infix android.graphics.RectF and(android.graphics.RectF, android.graphics.RectF r);
+ method public static inline operator int component1(android.graphics.Rect);
+ method public static inline operator float component1(android.graphics.RectF);
+ method public static inline operator int component2(android.graphics.Rect);
+ method public static inline operator float component2(android.graphics.RectF);
+ method public static inline operator int component3(android.graphics.Rect);
+ method public static inline operator float component3(android.graphics.RectF);
+ method public static inline operator int component4(android.graphics.Rect);
+ method public static inline operator float component4(android.graphics.RectF);
+ method public static inline operator boolean contains(android.graphics.Rect, android.graphics.Point p);
+ method public static inline operator boolean contains(android.graphics.RectF, android.graphics.PointF p);
+ method public static inline operator android.graphics.Region minus(android.graphics.Rect, android.graphics.Rect r);
+ method public static inline operator android.graphics.Region minus(android.graphics.RectF, android.graphics.RectF r);
+ method public static inline operator android.graphics.Rect minus(android.graphics.Rect, int xy);
+ method public static inline operator android.graphics.RectF minus(android.graphics.RectF, float xy);
+ method public static inline operator android.graphics.Rect minus(android.graphics.Rect, android.graphics.Point xy);
+ method public static inline operator android.graphics.RectF minus(android.graphics.RectF, android.graphics.PointF xy);
+ method public static inline infix android.graphics.Rect or(android.graphics.Rect, android.graphics.Rect r);
+ method public static inline infix android.graphics.RectF or(android.graphics.RectF, android.graphics.RectF r);
+ method public static inline operator android.graphics.Rect plus(android.graphics.Rect, android.graphics.Rect r);
+ method public static inline operator android.graphics.RectF plus(android.graphics.RectF, android.graphics.RectF r);
+ method public static inline operator android.graphics.Rect plus(android.graphics.Rect, int xy);
+ method public static inline operator android.graphics.RectF plus(android.graphics.RectF, float xy);
+ method public static inline operator android.graphics.Rect plus(android.graphics.Rect, android.graphics.Point xy);
+ method public static inline operator android.graphics.RectF plus(android.graphics.RectF, android.graphics.PointF xy);
+ method public static inline operator android.graphics.Rect times(android.graphics.Rect, int factor);
+ method public static inline operator android.graphics.RectF times(android.graphics.RectF, int factor);
+ method public static inline operator android.graphics.RectF times(android.graphics.RectF, float factor);
+ method public static inline android.graphics.Rect toRect(android.graphics.RectF);
+ method public static inline android.graphics.RectF toRectF(android.graphics.Rect);
+ method public static inline android.graphics.Region toRegion(android.graphics.Rect);
+ method public static inline android.graphics.Region toRegion(android.graphics.RectF);
+ method public static inline android.graphics.RectF transform(android.graphics.RectF, android.graphics.Matrix m);
+ method public static inline infix android.graphics.Region xor(android.graphics.Rect, android.graphics.Rect r);
+ method public static inline infix android.graphics.Region xor(android.graphics.RectF, android.graphics.RectF r);
+ }
+
+ public final class RegionKt {
+ ctor public RegionKt();
+ method public static inline infix android.graphics.Region and(android.graphics.Region, android.graphics.Rect r);
+ method public static inline infix android.graphics.Region and(android.graphics.Region, android.graphics.Region r);
+ method public static inline operator boolean contains(android.graphics.Region, android.graphics.Point p);
+ method public static inline void forEach(android.graphics.Region, kotlin.jvm.functions.Function1<? super android.graphics.Rect,kotlin.Unit> action);
+ method public static operator java.util.Iterator<android.graphics.Rect> iterator(android.graphics.Region);
+ method public static inline operator android.graphics.Region minus(android.graphics.Region, android.graphics.Rect r);
+ method public static inline operator android.graphics.Region minus(android.graphics.Region, android.graphics.Region r);
+ method public static inline operator android.graphics.Region not(android.graphics.Region);
+ method public static inline infix android.graphics.Region or(android.graphics.Region, android.graphics.Rect r);
+ method public static inline infix android.graphics.Region or(android.graphics.Region, android.graphics.Region r);
+ method public static inline operator android.graphics.Region plus(android.graphics.Region, android.graphics.Rect r);
+ method public static inline operator android.graphics.Region plus(android.graphics.Region, android.graphics.Region r);
+ method public static inline operator android.graphics.Region unaryMinus(android.graphics.Region);
+ method public static inline infix android.graphics.Region xor(android.graphics.Region, android.graphics.Rect r);
+ method public static inline infix android.graphics.Region xor(android.graphics.Region, android.graphics.Region r);
+ }
+
+ public final class ShaderKt {
+ ctor public ShaderKt();
+ method public static inline void transform(android.graphics.Shader, kotlin.jvm.functions.Function1<? super android.graphics.Matrix,kotlin.Unit> block);
+ }
+
+}
+
+package androidx.core.graphics.drawable {
+
+ public final class BitmapDrawableKt {
+ ctor public BitmapDrawableKt();
+ method public static inline android.graphics.drawable.BitmapDrawable toDrawable(android.graphics.Bitmap, android.content.res.Resources resources);
+ }
+
+ public final class ColorDrawableKt {
+ ctor public ColorDrawableKt();
+ method public static inline android.graphics.drawable.ColorDrawable toDrawable(@ColorInt int);
+ method @RequiresApi(26) public static inline android.graphics.drawable.ColorDrawable toDrawable(android.graphics.Color);
+ }
+
+ public final class DrawableKt {
+ ctor public DrawableKt();
+ method public static android.graphics.Bitmap toBitmap(android.graphics.drawable.Drawable, @Px int width = intrinsicWidth, @Px int height = intrinsicHeight, android.graphics.Bitmap.Config? config = null);
+ method public static void updateBounds(android.graphics.drawable.Drawable, @Px int left = android.graphics.Rect.left, @Px int top = android.graphics.Rect.top, @Px int right = android.graphics.Rect.right, @Px int bottom = android.graphics.Rect.bottom);
+ }
+
+ public final class IconKt {
+ ctor public IconKt();
+ method @RequiresApi(26) public static inline android.graphics.drawable.Icon toAdaptiveIcon(android.graphics.Bitmap);
+ method @RequiresApi(26) public static inline android.graphics.drawable.Icon toIcon(android.graphics.Bitmap);
+ method @RequiresApi(26) public static inline android.graphics.drawable.Icon toIcon(android.net.Uri);
+ method @RequiresApi(26) public static inline android.graphics.drawable.Icon toIcon(byte[]);
+ }
+
+}
+
+package androidx.core.location {
+
+ public final class LocationKt {
+ ctor public LocationKt();
+ method public static inline operator double component1(android.location.Location);
+ method public static inline operator double component2(android.location.Location);
+ }
+
+}
+
+package androidx.core.net {
+
+ public final class UriKt {
+ ctor public UriKt();
+ method public static java.io.File toFile(android.net.Uri);
+ method public static inline android.net.Uri toUri(String);
+ method public static inline android.net.Uri toUri(java.io.File);
+ }
+
+}
+
+package androidx.core.os {
+
+ public final class BundleKt {
+ ctor public BundleKt();
+ method public static android.os.Bundle bundleOf(kotlin.Pair<java.lang.String,?>... pairs);
+ }
+
+ public final class HandlerKt {
+ ctor public HandlerKt();
+ method public static inline Runnable postAtTime(android.os.Handler, long uptimeMillis, Object? token = null, kotlin.jvm.functions.Function0<kotlin.Unit> action);
+ method public static inline Runnable postDelayed(android.os.Handler, long delayInMillis, Object? token = null, kotlin.jvm.functions.Function0<kotlin.Unit> action);
+ }
+
+ public final class PersistableBundleKt {
+ ctor public PersistableBundleKt();
+ method @RequiresApi(21) public static android.os.PersistableBundle persistableBundleOf(kotlin.Pair<java.lang.String,?>... pairs);
+ }
+
+ public final class TraceKt {
+ ctor public TraceKt();
+ method public static inline <T> T! trace(String sectionName, kotlin.jvm.functions.Function0<? extends T> block);
+ }
+
+}
+
+package androidx.core.text {
+
+ public final class CharSequenceKt {
+ ctor public CharSequenceKt();
+ method public static inline boolean isDigitsOnly(CharSequence);
+ method public static inline int trimmedLength(CharSequence);
+ }
+
+ public final class HtmlKt {
+ ctor public HtmlKt();
+ method public static inline android.text.Spanned parseAsHtml(String, int flags = 0, android.text.Html.ImageGetter? imageGetter = null, android.text.Html.TagHandler? tagHandler = null);
+ method public static inline String toHtml(android.text.Spanned, int option = 0);
+ }
+
+ public final class LocaleKt {
+ ctor public LocaleKt();
+ method @RequiresApi(17) public static inline int getLayoutDirection(java.util.Locale);
+ }
+
+ public final class SpannableStringBuilderKt {
+ ctor public SpannableStringBuilderKt();
+ method public static inline android.text.SpannableStringBuilder backgroundColor(android.text.SpannableStringBuilder, @ColorInt int color, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder bold(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannedString buildSpannedString(kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder color(android.text.SpannableStringBuilder, @ColorInt int color, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder inSpans(android.text.SpannableStringBuilder, Object![] spans, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder inSpans(android.text.SpannableStringBuilder, Object span, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder italic(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder scale(android.text.SpannableStringBuilder, float proportion, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder strikeThrough(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder subscript(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder superscript(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder underline(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ }
+
+ public final class SpannableStringKt {
+ ctor public SpannableStringKt();
+ method public static inline void clearSpans(android.text.Spannable);
+ method public static inline operator void set(android.text.Spannable, int start, int end, Object span);
+ method public static inline operator void set(android.text.Spannable, kotlin.ranges.IntRange range, Object span);
+ method public static inline android.text.Spannable toSpannable(CharSequence);
+ }
+
+ public final class SpannedStringKt {
+ ctor public SpannedStringKt();
+ method public static inline <reified T> T![] getSpans(android.text.Spanned, int start = 0, int end = length);
+ method public static inline android.text.Spanned toSpanned(CharSequence);
+ }
+
+ public final class StringKt {
+ ctor public StringKt();
+ method public static inline String htmlEncode(String);
+ }
+
+}
+
+package androidx.core.transition {
+
+ public final class TransitionKt {
+ ctor public TransitionKt();
+ method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener addListener(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> >
+ method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnCancel(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
+ method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnEnd(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
+ method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnPause(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
+ method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnResume(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
+ method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnStart(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
+ }
+
+}
+
+package androidx.core.util {
+
+ public final class AtomicFileKt {
+ ctor public AtomicFileKt();
+ method @RequiresApi(17) public static inline byte[] readBytes(android.util.AtomicFile);
+ method @RequiresApi(17) public static String readText(android.util.AtomicFile, java.nio.charset.Charset charset = Charsets.UTF_8);
+ method @RequiresApi(17) public static inline void tryWrite(android.util.AtomicFile, kotlin.jvm.functions.Function1<? super java.io.FileOutputStream,kotlin.Unit> block);
+ method @RequiresApi(17) public static void writeBytes(android.util.AtomicFile, byte[] array);
+ method @RequiresApi(17) public static void writeText(android.util.AtomicFile, String text, java.nio.charset.Charset charset = Charsets.UTF_8);
+ }
+
+ public final class HalfKt {
+ ctor public HalfKt();
+ method @RequiresApi(26) public static inline android.util.Half toHalf(@HalfFloat short);
+ method @RequiresApi(26) public static inline android.util.Half toHalf(float);
+ method @RequiresApi(26) public static inline android.util.Half toHalf(double);
+ method @RequiresApi(26) public static inline android.util.Half toHalf(String);
+ }
+
+ public final class LongSparseArrayKt {
+ ctor public LongSparseArrayKt();
+ method @RequiresApi(16) public static inline operator <T> boolean contains(android.util.LongSparseArray<T>, long key);
+ method @RequiresApi(16) public static inline <T> boolean containsKey(android.util.LongSparseArray<T>, long key);
+ method @RequiresApi(16) public static inline <T> boolean containsValue(android.util.LongSparseArray<T>, T? value);
+ method @RequiresApi(16) public static inline <T> void forEach(android.util.LongSparseArray<T>, kotlin.jvm.functions.Function2<? super java.lang.Long,? super T,kotlin.Unit> action);
+ method @RequiresApi(16) public static inline <T> T! getOrDefault(android.util.LongSparseArray<T>, long key, T? defaultValue);
+ method @RequiresApi(16) public static inline <T> T! getOrElse(android.util.LongSparseArray<T>, long key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
+ method @RequiresApi(16) public static inline <T> int getSize(android.util.LongSparseArray<T>);
+ method @RequiresApi(16) public static inline <T> boolean isEmpty(android.util.LongSparseArray<T>);
+ method @RequiresApi(16) public static inline <T> boolean isNotEmpty(android.util.LongSparseArray<T>);
+ method @RequiresApi(16) public static <T> kotlin.collections.LongIterator keyIterator(android.util.LongSparseArray<T>);
+ method @RequiresApi(16) public static operator <T> android.util.LongSparseArray<T> plus(android.util.LongSparseArray<T>, android.util.LongSparseArray<T> other);
+ method @RequiresApi(16) public static <T> void putAll(android.util.LongSparseArray<T>, android.util.LongSparseArray<T> other);
+ method @RequiresApi(16) public static <T> boolean remove(android.util.LongSparseArray<T>, long key, T? value);
+ method @RequiresApi(16) public static inline operator <T> void set(android.util.LongSparseArray<T>, long key, T? value);
+ method @RequiresApi(16) public static <T> java.util.Iterator<T> valueIterator(android.util.LongSparseArray<T>);
+ }
+
+ public final class LruCacheKt {
+ ctor public LruCacheKt();
+ method public static inline <K, V> android.util.LruCache<K,V> lruCache(int maxSize, kotlin.jvm.functions.Function2<? super K,? super V,java.lang.Integer> sizeOf = { _, _ -> 1 }, kotlin.jvm.functions.Function1<? super K,? extends V> create = { (V)null }, kotlin.jvm.functions.Function4<? super java.lang.Boolean,? super K,? super V,? super V,kotlin.Unit> _, _, _, _ -> });
+ }
+
+ public final class PairKt {
+ ctor public PairKt();
+ method public static inline operator <F, S> F! component1(android.util.Pair<F,S>);
+ method public static inline operator <F, S> S! component2(android.util.Pair<F,S>);
+ method public static inline <F, S> android.util.Pair<F,S> toAndroidPair(kotlin.Pair<? extends F,? extends S>);
+ method public static inline <F, S> kotlin.Pair<F,S> toKotlinPair(android.util.Pair<F,S>);
+ }
+
+ public final class RangeKt {
+ ctor public RangeKt();
+ method @RequiresApi(21) public static inline infix <T extends java.lang.Comparable<? super T>> android.util.Range<T> and(android.util.Range<T>, android.util.Range<T> other);
+ method @RequiresApi(21) public static inline operator <T extends java.lang.Comparable<? super T>> android.util.Range<T> plus(android.util.Range<T>, T value);
+ method @RequiresApi(21) public static inline operator <T extends java.lang.Comparable<? super T>> android.util.Range<T> plus(android.util.Range<T>, android.util.Range<T> other);
+ method @RequiresApi(21) public static inline infix <T extends java.lang.Comparable<? super T>> android.util.Range<T> rangeTo(T, T that);
+ method @RequiresApi(21) public static <T extends java.lang.Comparable<? super T>> kotlin.ranges.ClosedRange<T> toClosedRange(android.util.Range<T>);
+ method @RequiresApi(21) public static <T extends java.lang.Comparable<? super T>> android.util.Range<T> toRange(kotlin.ranges.ClosedRange<T>);
+ }
+
+ public final class SizeKt {
+ ctor public SizeKt();
+ method @RequiresApi(21) public static inline operator int component1(android.util.Size);
+ method @RequiresApi(21) public static inline operator float component1(android.util.SizeF);
+ method @RequiresApi(21) public static inline operator int component2(android.util.Size);
+ method @RequiresApi(21) public static inline operator float component2(android.util.SizeF);
+ }
+
+ public final class SparseArrayKt {
+ ctor public SparseArrayKt();
+ method public static inline operator <T> boolean contains(android.util.SparseArray<T>, int key);
+ method public static inline <T> boolean containsKey(android.util.SparseArray<T>, int key);
+ method public static inline <T> boolean containsValue(android.util.SparseArray<T>, T? value);
+ method public static inline <T> void forEach(android.util.SparseArray<T>, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> action);
+ method public static inline <T> T! getOrDefault(android.util.SparseArray<T>, int key, T? defaultValue);
+ method public static inline <T> T! getOrElse(android.util.SparseArray<T>, int key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
+ method public static inline <T> int getSize(android.util.SparseArray<T>);
+ method public static inline <T> boolean isEmpty(android.util.SparseArray<T>);
+ method public static inline <T> boolean isNotEmpty(android.util.SparseArray<T>);
+ method public static <T> kotlin.collections.IntIterator keyIterator(android.util.SparseArray<T>);
+ method public static operator <T> android.util.SparseArray<T> plus(android.util.SparseArray<T>, android.util.SparseArray<T> other);
+ method public static <T> void putAll(android.util.SparseArray<T>, android.util.SparseArray<T> other);
+ method public static <T> boolean remove(android.util.SparseArray<T>, int key, T? value);
+ method public static inline operator <T> void set(android.util.SparseArray<T>, int key, T? value);
+ method public static <T> java.util.Iterator<T> valueIterator(android.util.SparseArray<T>);
+ }
+
+ public final class SparseBooleanArrayKt {
+ ctor public SparseBooleanArrayKt();
+ method public static inline operator boolean contains(android.util.SparseBooleanArray, int key);
+ method public static inline boolean containsKey(android.util.SparseBooleanArray, int key);
+ method public static inline boolean containsValue(android.util.SparseBooleanArray, boolean value);
+ method public static inline void forEach(android.util.SparseBooleanArray, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Boolean,kotlin.Unit> action);
+ method public static inline boolean getOrDefault(android.util.SparseBooleanArray, int key, boolean defaultValue);
+ method public static inline boolean getOrElse(android.util.SparseBooleanArray, int key, kotlin.jvm.functions.Function0<java.lang.Boolean> defaultValue);
+ method public static inline int getSize(android.util.SparseBooleanArray);
+ method public static inline boolean isEmpty(android.util.SparseBooleanArray);
+ method public static inline boolean isNotEmpty(android.util.SparseBooleanArray);
+ method public static kotlin.collections.IntIterator keyIterator(android.util.SparseBooleanArray);
+ method public static operator android.util.SparseBooleanArray plus(android.util.SparseBooleanArray, android.util.SparseBooleanArray other);
+ method public static void putAll(android.util.SparseBooleanArray, android.util.SparseBooleanArray other);
+ method public static boolean remove(android.util.SparseBooleanArray, int key, boolean value);
+ method public static inline operator void set(android.util.SparseBooleanArray, int key, boolean value);
+ method public static kotlin.collections.BooleanIterator valueIterator(android.util.SparseBooleanArray);
+ }
+
+ public final class SparseIntArrayKt {
+ ctor public SparseIntArrayKt();
+ method public static inline operator boolean contains(android.util.SparseIntArray, int key);
+ method public static inline boolean containsKey(android.util.SparseIntArray, int key);
+ method public static inline boolean containsValue(android.util.SparseIntArray, int value);
+ method public static inline void forEach(android.util.SparseIntArray, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> action);
+ method public static inline int getOrDefault(android.util.SparseIntArray, int key, int defaultValue);
+ method public static inline int getOrElse(android.util.SparseIntArray, int key, kotlin.jvm.functions.Function0<java.lang.Integer> defaultValue);
+ method public static inline int getSize(android.util.SparseIntArray);
+ method public static inline boolean isEmpty(android.util.SparseIntArray);
+ method public static inline boolean isNotEmpty(android.util.SparseIntArray);
+ method public static kotlin.collections.IntIterator keyIterator(android.util.SparseIntArray);
+ method public static operator android.util.SparseIntArray plus(android.util.SparseIntArray, android.util.SparseIntArray other);
+ method public static void putAll(android.util.SparseIntArray, android.util.SparseIntArray other);
+ method public static boolean remove(android.util.SparseIntArray, int key, int value);
+ method public static inline operator void set(android.util.SparseIntArray, int key, int value);
+ method public static kotlin.collections.IntIterator valueIterator(android.util.SparseIntArray);
+ }
+
+ public final class SparseLongArrayKt {
+ ctor public SparseLongArrayKt();
+ method @RequiresApi(18) public static inline operator boolean contains(android.util.SparseLongArray, int key);
+ method @RequiresApi(18) public static inline boolean containsKey(android.util.SparseLongArray, int key);
+ method @RequiresApi(18) public static inline boolean containsValue(android.util.SparseLongArray, long value);
+ method @RequiresApi(18) public static inline void forEach(android.util.SparseLongArray, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Long,kotlin.Unit> action);
+ method @RequiresApi(18) public static inline long getOrDefault(android.util.SparseLongArray, int key, long defaultValue);
+ method @RequiresApi(18) public static inline long getOrElse(android.util.SparseLongArray, int key, kotlin.jvm.functions.Function0<java.lang.Long> defaultValue);
+ method @RequiresApi(18) public static inline int getSize(android.util.SparseLongArray);
+ method @RequiresApi(18) public static inline boolean isEmpty(android.util.SparseLongArray);
+ method @RequiresApi(18) public static inline boolean isNotEmpty(android.util.SparseLongArray);
+ method @RequiresApi(18) public static kotlin.collections.IntIterator keyIterator(android.util.SparseLongArray);
+ method @RequiresApi(18) public static operator android.util.SparseLongArray plus(android.util.SparseLongArray, android.util.SparseLongArray other);
+ method @RequiresApi(18) public static void putAll(android.util.SparseLongArray, android.util.SparseLongArray other);
+ method @RequiresApi(18) public static boolean remove(android.util.SparseLongArray, int key, long value);
+ method @RequiresApi(18) public static inline operator void set(android.util.SparseLongArray, int key, long value);
+ method @RequiresApi(18) public static kotlin.collections.LongIterator valueIterator(android.util.SparseLongArray);
+ }
+
+}
+
+package androidx.core.view {
+
+ public final class MenuKt {
+ ctor public MenuKt();
+ method public static operator boolean contains(android.view.Menu, android.view.MenuItem item);
+ method public static inline void forEach(android.view.Menu, kotlin.jvm.functions.Function1<? super android.view.MenuItem,kotlin.Unit> action);
+ method public static inline void forEachIndexed(android.view.Menu, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super android.view.MenuItem,kotlin.Unit> action);
+ method public static inline operator android.view.MenuItem get(android.view.Menu, int index);
+ method public static kotlin.sequences.Sequence<android.view.MenuItem> getChildren(android.view.Menu);
+ method public static inline int getSize(android.view.Menu);
+ method public static inline boolean isEmpty(android.view.Menu);
+ method public static inline boolean isNotEmpty(android.view.Menu);
+ method public static operator java.util.Iterator<android.view.MenuItem> iterator(android.view.Menu);
+ method public static inline operator void minusAssign(android.view.Menu, android.view.MenuItem item);
+ }
+
+ public final class ViewGroupKt {
+ ctor public ViewGroupKt();
+ method public static inline operator boolean contains(android.view.ViewGroup, android.view.View view);
+ method public static inline void forEach(android.view.ViewGroup, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
+ method public static inline void forEachIndexed(android.view.ViewGroup, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super android.view.View,kotlin.Unit> action);
+ method public static operator android.view.View get(android.view.ViewGroup, int index);
+ method public static kotlin.sequences.Sequence<android.view.View> getChildren(android.view.ViewGroup);
+ method public static inline int getSize(android.view.ViewGroup);
+ method public static inline boolean isEmpty(android.view.ViewGroup);
+ method public static inline boolean isNotEmpty(android.view.ViewGroup);
+ method public static operator java.util.Iterator<android.view.View> iterator(android.view.ViewGroup);
+ method public static inline operator void minusAssign(android.view.ViewGroup, android.view.View view);
+ method public static inline operator void plusAssign(android.view.ViewGroup, android.view.View view);
+ method public static inline void setMargins(android.view.ViewGroup.MarginLayoutParams, @Px int size);
+ method public static inline void updateMargins(android.view.ViewGroup.MarginLayoutParams, @Px int left = android.view.ViewGroup.MarginLayoutParams.leftMargin, @Px int top = android.view.ViewGroup.MarginLayoutParams.topMargin, @Px int right = android.view.ViewGroup.MarginLayoutParams.rightMargin, @Px int bottom = android.view.ViewGroup.MarginLayoutParams.bottomMargin);
+ method @RequiresApi(17) public static inline void updateMarginsRelative(android.view.ViewGroup.MarginLayoutParams, @Px int start = marginStart, @Px int top = android.view.ViewGroup.MarginLayoutParams.topMargin, @Px int end = marginEnd, @Px int bottom = android.view.ViewGroup.MarginLayoutParams.bottomMargin);
+ }
+
+ public final class ViewKt {
+ ctor public ViewKt();
+ method public static inline void doOnAttach(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
+ method public static inline void doOnDetach(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
+ method public static inline void doOnLayout(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
+ method public static inline void doOnNextLayout(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
+ method public static inline androidx.core.view.OneShotPreDrawListener doOnPreDraw(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
+ method public static android.graphics.Bitmap drawToBitmap(android.view.View, android.graphics.Bitmap.Config config = android.graphics.Bitmap.Config.ARGB_8888);
+ method public static inline int getMarginBottom(android.view.View);
+ method public static inline int getMarginEnd(android.view.View);
+ method public static inline int getMarginLeft(android.view.View);
+ method public static inline int getMarginRight(android.view.View);
+ method public static inline int getMarginStart(android.view.View);
+ method public static inline int getMarginTop(android.view.View);
+ method public static inline boolean isGone(android.view.View);
+ method public static inline boolean isInvisible(android.view.View);
+ method public static inline boolean isVisible(android.view.View);
+ method public static inline Runnable postDelayed(android.view.View, long delayInMillis, kotlin.jvm.functions.Function0<kotlin.Unit> action);
+ method @RequiresApi(16) public static inline Runnable postOnAnimationDelayed(android.view.View, long delayInMillis, kotlin.jvm.functions.Function0<kotlin.Unit> action);
+ method public static inline void setGone(android.view.View, boolean value);
+ method public static inline void setInvisible(android.view.View, boolean value);
+ method public static inline void setPadding(android.view.View, @Px int size);
+ method public static inline void setVisible(android.view.View, boolean value);
+ method public static inline void updateLayoutParams(android.view.View, kotlin.jvm.functions.Function1<? super android.view.ViewGroup.LayoutParams,kotlin.Unit> block);
+ method public static inline <reified T extends android.view.ViewGroup.LayoutParams> void updateLayoutParamsTyped(android.view.View, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+ method public static inline void updatePadding(android.view.View, @Px int left = paddingLeft, @Px int top = paddingTop, @Px int right = paddingRight, @Px int bottom = paddingBottom);
+ method @RequiresApi(17) public static inline void updatePaddingRelative(android.view.View, @Px int start = paddingStart, @Px int top = paddingTop, @Px int end = paddingEnd, @Px int bottom = paddingBottom);
+ }
+
+}
+
+package androidx.core.widget {
+
+ public final class TextViewKt {
+ ctor public TextViewKt();
+ method public static inline android.text.TextWatcher addTextChangedListener(android.widget.TextView, kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> beforeTextChanged = { _, _, _, _ -> }, kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> _, _, _, _ -> }, kotlin.jvm.functions.Function1<? super android.text.Editable,kotlin.Unit> afterTextChanged = {});
+ method public static inline android.text.TextWatcher doAfterTextChanged(android.widget.TextView, kotlin.jvm.functions.Function1<? super android.text.Editable,kotlin.Unit> action);
+ method public static inline android.text.TextWatcher doBeforeTextChanged(android.widget.TextView, kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> action);
+ method public static inline android.text.TextWatcher doOnTextChanged(android.widget.TextView, kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> action);
+ }
+
+}
+
diff --git a/core/core-ktx/api/public_plus_experimental_1.3.0-alpha01.txt b/core/core-ktx/api/public_plus_experimental_1.3.0-alpha01.txt
new file mode 100644
index 0000000..39aa8e5
--- /dev/null
+++ b/core/core-ktx/api/public_plus_experimental_1.3.0-alpha01.txt
@@ -0,0 +1,652 @@
+// Signature format: 3.0
+package androidx.core.animation {
+
+ public final class AnimatorKt {
+ ctor public AnimatorKt();
+ method public static inline android.animation.Animator.AnimatorListener addListener(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> >
+ method @RequiresApi(19) public static inline android.animation.Animator.AnimatorPauseListener addPauseListener(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> >
+ method public static inline android.animation.Animator.AnimatorListener doOnCancel(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
+ method public static inline android.animation.Animator.AnimatorListener doOnEnd(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
+ method @RequiresApi(19) public static inline android.animation.Animator.AnimatorPauseListener doOnPause(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
+ method public static inline android.animation.Animator.AnimatorListener doOnRepeat(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
+ method @RequiresApi(19) public static inline android.animation.Animator.AnimatorPauseListener doOnResume(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
+ method public static inline android.animation.Animator.AnimatorListener doOnStart(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
+ }
+
+}
+
+package androidx.core.content {
+
+ public final class ContentValuesKt {
+ ctor public ContentValuesKt();
+ method public static android.content.ContentValues contentValuesOf(kotlin.Pair<java.lang.String,?>... pairs);
+ }
+
+ public final class ContextKt {
+ ctor public ContextKt();
+ method public static inline <reified T> T! getSystemService(android.content.Context);
+ method public static inline void withStyledAttributes(android.content.Context, android.util.AttributeSet? set = null, int[] attrs, @AttrRes int defStyleAttr = 0, @StyleRes int defStyleRes = 0, kotlin.jvm.functions.Function1<? super android.content.res.TypedArray,kotlin.Unit> block);
+ method public static inline void withStyledAttributes(android.content.Context, @StyleRes int resourceId, int[] attrs, kotlin.jvm.functions.Function1<? super android.content.res.TypedArray,kotlin.Unit> block);
+ }
+
+ public final class SharedPreferencesKt {
+ ctor public SharedPreferencesKt();
+ method public static inline void edit(android.content.SharedPreferences, boolean commit = false, kotlin.jvm.functions.Function1<? super android.content.SharedPreferences.Editor,kotlin.Unit> action);
+ }
+
+}
+
+package androidx.core.content.res {
+
+ public final class TypedArrayKt {
+ ctor public TypedArrayKt();
+ method public static boolean getBooleanOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method @ColorInt public static int getColorOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static android.content.res.ColorStateList getColorStateListOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static float getDimensionOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method @Dimension public static int getDimensionPixelOffsetOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method @Dimension public static int getDimensionPixelSizeOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static android.graphics.drawable.Drawable getDrawableOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static float getFloatOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method @RequiresApi(26) public static android.graphics.Typeface getFontOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static int getIntOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static int getIntegerOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method @AnyRes public static int getResourceIdOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static String getStringOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static CharSequence![] getTextArrayOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static CharSequence getTextOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static inline <R> R! use(android.content.res.TypedArray, kotlin.jvm.functions.Function1<? super android.content.res.TypedArray,? extends R> block);
+ }
+
+}
+
+package androidx.core.database {
+
+ public final class CursorKt {
+ ctor public CursorKt();
+ method public static inline byte[]? getBlobOrNull(android.database.Cursor, int index);
+ method public static inline Double? getDoubleOrNull(android.database.Cursor, int index);
+ method public static inline Float? getFloatOrNull(android.database.Cursor, int index);
+ method public static inline Integer? getIntOrNull(android.database.Cursor, int index);
+ method public static inline Long? getLongOrNull(android.database.Cursor, int index);
+ method public static inline Short? getShortOrNull(android.database.Cursor, int index);
+ method public static inline String? getStringOrNull(android.database.Cursor, int index);
+ }
+
+}
+
+package androidx.core.database.sqlite {
+
+ public final class SQLiteDatabaseKt {
+ ctor public SQLiteDatabaseKt();
+ method public static inline <T> T! transaction(android.database.sqlite.SQLiteDatabase, boolean exclusive = true, kotlin.jvm.functions.Function1<? super android.database.sqlite.SQLiteDatabase,? extends T> body);
+ }
+
+}
+
+package androidx.core.graphics {
+
+ public final class BitmapKt {
+ ctor public BitmapKt();
+ method public static inline android.graphics.Bitmap applyCanvas(android.graphics.Bitmap, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline operator boolean contains(android.graphics.Bitmap, android.graphics.Point p);
+ method public static inline operator boolean contains(android.graphics.Bitmap, android.graphics.PointF p);
+ method public static inline android.graphics.Bitmap createBitmap(int width, int height, android.graphics.Bitmap.Config config = android.graphics.Bitmap.Config.ARGB_8888);
+ method @RequiresApi(26) public static inline android.graphics.Bitmap createBitmap(int width, int height, android.graphics.Bitmap.Config config = android.graphics.Bitmap.Config.ARGB_8888, boolean hasAlpha = true, android.graphics.ColorSpace colorSpace = ColorSpace.get(ColorSpace.Named.SRGB));
+ method public static inline operator int get(android.graphics.Bitmap, int x, int y);
+ method public static inline android.graphics.Bitmap scale(android.graphics.Bitmap, int width, int height, boolean filter = true);
+ method public static inline operator void set(android.graphics.Bitmap, int x, int y, @ColorInt int color);
+ }
+
+ public final class CanvasKt {
+ ctor public CanvasKt();
+ method public static inline void withClip(android.graphics.Canvas, android.graphics.Rect clipRect, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withClip(android.graphics.Canvas, android.graphics.RectF clipRect, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withClip(android.graphics.Canvas, int left, int top, int right, int bottom, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withClip(android.graphics.Canvas, float left, float top, float right, float bottom, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withClip(android.graphics.Canvas, android.graphics.Path clipPath, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withMatrix(android.graphics.Canvas, android.graphics.Matrix matrix = android.graphics.Matrix(), kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withRotation(android.graphics.Canvas, float degrees = 0.0f, float pivotX = 0.0f, float pivotY = 0.0f, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withSave(android.graphics.Canvas, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withScale(android.graphics.Canvas, float x = 1.0f, float y = 1.0f, float pivotX = 0.0f, float pivotY = 0.0f, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withSkew(android.graphics.Canvas, float x = 0.0f, float y = 0.0f, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withTranslation(android.graphics.Canvas, float x = 0.0f, float y = 0.0f, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ }
+
+ public final class ColorKt {
+ ctor public ColorKt();
+ method @RequiresApi(26) public static inline operator float component1(android.graphics.Color);
+ method public static inline operator int component1(@ColorInt int);
+ method @RequiresApi(26) public static inline operator float component1(@ColorLong long);
+ method @RequiresApi(26) public static inline operator float component2(android.graphics.Color);
+ method public static inline operator int component2(@ColorInt int);
+ method @RequiresApi(26) public static inline operator float component2(@ColorLong long);
+ method @RequiresApi(26) public static inline operator float component3(android.graphics.Color);
+ method public static inline operator int component3(@ColorInt int);
+ method @RequiresApi(26) public static inline operator float component3(@ColorLong long);
+ method @RequiresApi(26) public static inline operator float component4(android.graphics.Color);
+ method public static inline operator int component4(@ColorInt int);
+ method @RequiresApi(26) public static inline operator float component4(@ColorLong long);
+ method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorInt int, android.graphics.ColorSpace.Named colorSpace);
+ method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorInt int, android.graphics.ColorSpace colorSpace);
+ method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorLong long, android.graphics.ColorSpace.Named colorSpace);
+ method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorLong long, android.graphics.ColorSpace colorSpace);
+ method @RequiresApi(26) public static inline infix android.graphics.Color convertTo(android.graphics.Color, android.graphics.ColorSpace.Named colorSpace);
+ method @RequiresApi(26) public static inline infix android.graphics.Color convertTo(android.graphics.Color, android.graphics.ColorSpace colorSpace);
+ method public static inline int getAlpha(@ColorInt int);
+ method @RequiresApi(26) public static inline float getAlpha(@ColorLong long);
+ method public static inline int getBlue(@ColorInt int);
+ method @RequiresApi(26) public static inline float getBlue(@ColorLong long);
+ method @RequiresApi(26) public static inline android.graphics.ColorSpace getColorSpace(@ColorLong long);
+ method public static inline int getGreen(@ColorInt int);
+ method @RequiresApi(26) public static inline float getGreen(@ColorLong long);
+ method @RequiresApi(26) public static inline float getLuminance(@ColorInt int);
+ method @RequiresApi(26) public static inline float getLuminance(@ColorLong long);
+ method public static inline int getRed(@ColorInt int);
+ method @RequiresApi(26) public static inline float getRed(@ColorLong long);
+ method @RequiresApi(26) public static inline boolean isSrgb(@ColorLong long);
+ method @RequiresApi(26) public static inline boolean isWideGamut(@ColorLong long);
+ method @RequiresApi(26) public static operator android.graphics.Color plus(android.graphics.Color, android.graphics.Color c);
+ method @RequiresApi(26) public static inline android.graphics.Color toColor(@ColorInt int);
+ method @RequiresApi(26) public static inline android.graphics.Color toColor(@ColorLong long);
+ method @ColorInt @RequiresApi(26) public static inline int toColorInt(@ColorLong long);
+ method @ColorInt public static inline int toColorInt(String);
+ method @ColorLong @RequiresApi(26) public static inline long toColorLong(@ColorInt int);
+ }
+
+ public final class ImageDecoderKt {
+ ctor public ImageDecoderKt();
+ method @RequiresApi(28) public static inline android.graphics.Bitmap decodeBitmap(android.graphics.ImageDecoder.Source, kotlin.jvm.functions.Function3<? super android.graphics.ImageDecoder,? super android.graphics.ImageDecoder.ImageInfo,? super android.graphics.ImageDecoder.Source,kotlin.Unit> action);
+ method @RequiresApi(28) public static inline android.graphics.drawable.Drawable decodeDrawable(android.graphics.ImageDecoder.Source, kotlin.jvm.functions.Function3<? super android.graphics.ImageDecoder,? super android.graphics.ImageDecoder.ImageInfo,? super android.graphics.ImageDecoder.Source,kotlin.Unit> action);
+ }
+
+ public final class MatrixKt {
+ ctor public MatrixKt();
+ method public static android.graphics.Matrix rotationMatrix(float degrees, float px = 0.0f, float py = 0.0f);
+ method public static android.graphics.Matrix scaleMatrix(float sx = 1.0f, float sy = 1.0f);
+ method public static inline operator android.graphics.Matrix times(android.graphics.Matrix, android.graphics.Matrix m);
+ method public static android.graphics.Matrix translationMatrix(float tx = 0.0f, float ty = 0.0f);
+ method public static inline float[] values(android.graphics.Matrix);
+ }
+
+ public final class PaintKt {
+ ctor public PaintKt();
+ method public static inline boolean setBlendMode(android.graphics.Paint, androidx.core.graphics.BlendModeCompat? blendModeCompat);
+ }
+
+ public final class PathKt {
+ ctor public PathKt();
+ method @RequiresApi(19) public static inline infix android.graphics.Path and(android.graphics.Path, android.graphics.Path p);
+ method @RequiresApi(26) public static Iterable<androidx.core.graphics.PathSegment> flatten(android.graphics.Path, float error = 0.5f);
+ method @RequiresApi(19) public static inline operator android.graphics.Path minus(android.graphics.Path, android.graphics.Path p);
+ method @RequiresApi(19) public static inline infix android.graphics.Path or(android.graphics.Path, android.graphics.Path p);
+ method @RequiresApi(19) public static inline operator android.graphics.Path plus(android.graphics.Path, android.graphics.Path p);
+ method @RequiresApi(19) public static inline infix android.graphics.Path xor(android.graphics.Path, android.graphics.Path p);
+ }
+
+ public final class PictureKt {
+ ctor public PictureKt();
+ method public static inline android.graphics.Picture record(android.graphics.Picture, int width, int height, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ }
+
+ public final class PointKt {
+ ctor public PointKt();
+ method public static inline operator int component1(android.graphics.Point);
+ method public static inline operator float component1(android.graphics.PointF);
+ method public static inline operator int component2(android.graphics.Point);
+ method public static inline operator float component2(android.graphics.PointF);
+ method public static inline operator android.graphics.Point minus(android.graphics.Point, android.graphics.Point p);
+ method public static inline operator android.graphics.PointF minus(android.graphics.PointF, android.graphics.PointF p);
+ method public static inline operator android.graphics.Point minus(android.graphics.Point, int xy);
+ method public static inline operator android.graphics.PointF minus(android.graphics.PointF, float xy);
+ method public static inline operator android.graphics.Point plus(android.graphics.Point, android.graphics.Point p);
+ method public static inline operator android.graphics.PointF plus(android.graphics.PointF, android.graphics.PointF p);
+ method public static inline operator android.graphics.Point plus(android.graphics.Point, int xy);
+ method public static inline operator android.graphics.PointF plus(android.graphics.PointF, float xy);
+ method public static inline android.graphics.Point toPoint(android.graphics.PointF);
+ method public static inline android.graphics.PointF toPointF(android.graphics.Point);
+ method public static inline operator android.graphics.Point unaryMinus(android.graphics.Point);
+ method public static inline operator android.graphics.PointF unaryMinus(android.graphics.PointF);
+ }
+
+ public final class PorterDuffKt {
+ ctor public PorterDuffKt();
+ method public static inline android.graphics.PorterDuffColorFilter toColorFilter(android.graphics.PorterDuff.Mode, int color);
+ method public static inline android.graphics.PorterDuffXfermode toXfermode(android.graphics.PorterDuff.Mode);
+ }
+
+ public final class RectKt {
+ ctor public RectKt();
+ method public static inline infix android.graphics.Rect and(android.graphics.Rect, android.graphics.Rect r);
+ method public static inline infix android.graphics.RectF and(android.graphics.RectF, android.graphics.RectF r);
+ method public static inline operator int component1(android.graphics.Rect);
+ method public static inline operator float component1(android.graphics.RectF);
+ method public static inline operator int component2(android.graphics.Rect);
+ method public static inline operator float component2(android.graphics.RectF);
+ method public static inline operator int component3(android.graphics.Rect);
+ method public static inline operator float component3(android.graphics.RectF);
+ method public static inline operator int component4(android.graphics.Rect);
+ method public static inline operator float component4(android.graphics.RectF);
+ method public static inline operator boolean contains(android.graphics.Rect, android.graphics.Point p);
+ method public static inline operator boolean contains(android.graphics.RectF, android.graphics.PointF p);
+ method public static inline operator android.graphics.Region minus(android.graphics.Rect, android.graphics.Rect r);
+ method public static inline operator android.graphics.Region minus(android.graphics.RectF, android.graphics.RectF r);
+ method public static inline operator android.graphics.Rect minus(android.graphics.Rect, int xy);
+ method public static inline operator android.graphics.RectF minus(android.graphics.RectF, float xy);
+ method public static inline operator android.graphics.Rect minus(android.graphics.Rect, android.graphics.Point xy);
+ method public static inline operator android.graphics.RectF minus(android.graphics.RectF, android.graphics.PointF xy);
+ method public static inline infix android.graphics.Rect or(android.graphics.Rect, android.graphics.Rect r);
+ method public static inline infix android.graphics.RectF or(android.graphics.RectF, android.graphics.RectF r);
+ method public static inline operator android.graphics.Rect plus(android.graphics.Rect, android.graphics.Rect r);
+ method public static inline operator android.graphics.RectF plus(android.graphics.RectF, android.graphics.RectF r);
+ method public static inline operator android.graphics.Rect plus(android.graphics.Rect, int xy);
+ method public static inline operator android.graphics.RectF plus(android.graphics.RectF, float xy);
+ method public static inline operator android.graphics.Rect plus(android.graphics.Rect, android.graphics.Point xy);
+ method public static inline operator android.graphics.RectF plus(android.graphics.RectF, android.graphics.PointF xy);
+ method public static inline operator android.graphics.Rect times(android.graphics.Rect, int factor);
+ method public static inline operator android.graphics.RectF times(android.graphics.RectF, int factor);
+ method public static inline operator android.graphics.RectF times(android.graphics.RectF, float factor);
+ method public static inline android.graphics.Rect toRect(android.graphics.RectF);
+ method public static inline android.graphics.RectF toRectF(android.graphics.Rect);
+ method public static inline android.graphics.Region toRegion(android.graphics.Rect);
+ method public static inline android.graphics.Region toRegion(android.graphics.RectF);
+ method public static inline android.graphics.RectF transform(android.graphics.RectF, android.graphics.Matrix m);
+ method public static inline infix android.graphics.Region xor(android.graphics.Rect, android.graphics.Rect r);
+ method public static inline infix android.graphics.Region xor(android.graphics.RectF, android.graphics.RectF r);
+ }
+
+ public final class RegionKt {
+ ctor public RegionKt();
+ method public static inline infix android.graphics.Region and(android.graphics.Region, android.graphics.Rect r);
+ method public static inline infix android.graphics.Region and(android.graphics.Region, android.graphics.Region r);
+ method public static inline operator boolean contains(android.graphics.Region, android.graphics.Point p);
+ method public static inline void forEach(android.graphics.Region, kotlin.jvm.functions.Function1<? super android.graphics.Rect,kotlin.Unit> action);
+ method public static operator java.util.Iterator<android.graphics.Rect> iterator(android.graphics.Region);
+ method public static inline operator android.graphics.Region minus(android.graphics.Region, android.graphics.Rect r);
+ method public static inline operator android.graphics.Region minus(android.graphics.Region, android.graphics.Region r);
+ method public static inline operator android.graphics.Region not(android.graphics.Region);
+ method public static inline infix android.graphics.Region or(android.graphics.Region, android.graphics.Rect r);
+ method public static inline infix android.graphics.Region or(android.graphics.Region, android.graphics.Region r);
+ method public static inline operator android.graphics.Region plus(android.graphics.Region, android.graphics.Rect r);
+ method public static inline operator android.graphics.Region plus(android.graphics.Region, android.graphics.Region r);
+ method public static inline operator android.graphics.Region unaryMinus(android.graphics.Region);
+ method public static inline infix android.graphics.Region xor(android.graphics.Region, android.graphics.Rect r);
+ method public static inline infix android.graphics.Region xor(android.graphics.Region, android.graphics.Region r);
+ }
+
+ public final class ShaderKt {
+ ctor public ShaderKt();
+ method public static inline void transform(android.graphics.Shader, kotlin.jvm.functions.Function1<? super android.graphics.Matrix,kotlin.Unit> block);
+ }
+
+}
+
+package androidx.core.graphics.drawable {
+
+ public final class BitmapDrawableKt {
+ ctor public BitmapDrawableKt();
+ method public static inline android.graphics.drawable.BitmapDrawable toDrawable(android.graphics.Bitmap, android.content.res.Resources resources);
+ }
+
+ public final class ColorDrawableKt {
+ ctor public ColorDrawableKt();
+ method public static inline android.graphics.drawable.ColorDrawable toDrawable(@ColorInt int);
+ method @RequiresApi(26) public static inline android.graphics.drawable.ColorDrawable toDrawable(android.graphics.Color);
+ }
+
+ public final class DrawableKt {
+ ctor public DrawableKt();
+ method public static android.graphics.Bitmap toBitmap(android.graphics.drawable.Drawable, @Px int width = intrinsicWidth, @Px int height = intrinsicHeight, android.graphics.Bitmap.Config? config = null);
+ method public static void updateBounds(android.graphics.drawable.Drawable, @Px int left = android.graphics.Rect.left, @Px int top = android.graphics.Rect.top, @Px int right = android.graphics.Rect.right, @Px int bottom = android.graphics.Rect.bottom);
+ }
+
+ public final class IconKt {
+ ctor public IconKt();
+ method @RequiresApi(26) public static inline android.graphics.drawable.Icon toAdaptiveIcon(android.graphics.Bitmap);
+ method @RequiresApi(26) public static inline android.graphics.drawable.Icon toIcon(android.graphics.Bitmap);
+ method @RequiresApi(26) public static inline android.graphics.drawable.Icon toIcon(android.net.Uri);
+ method @RequiresApi(26) public static inline android.graphics.drawable.Icon toIcon(byte[]);
+ }
+
+}
+
+package androidx.core.location {
+
+ public final class LocationKt {
+ ctor public LocationKt();
+ method public static inline operator double component1(android.location.Location);
+ method public static inline operator double component2(android.location.Location);
+ }
+
+}
+
+package androidx.core.net {
+
+ public final class UriKt {
+ ctor public UriKt();
+ method public static java.io.File toFile(android.net.Uri);
+ method public static inline android.net.Uri toUri(String);
+ method public static inline android.net.Uri toUri(java.io.File);
+ }
+
+}
+
+package androidx.core.os {
+
+ public final class BundleKt {
+ ctor public BundleKt();
+ method public static android.os.Bundle bundleOf(kotlin.Pair<java.lang.String,?>... pairs);
+ }
+
+ public final class HandlerKt {
+ ctor public HandlerKt();
+ method public static inline Runnable postAtTime(android.os.Handler, long uptimeMillis, Object? token = null, kotlin.jvm.functions.Function0<kotlin.Unit> action);
+ method public static inline Runnable postDelayed(android.os.Handler, long delayInMillis, Object? token = null, kotlin.jvm.functions.Function0<kotlin.Unit> action);
+ }
+
+ public final class PersistableBundleKt {
+ ctor public PersistableBundleKt();
+ method @RequiresApi(21) public static android.os.PersistableBundle persistableBundleOf(kotlin.Pair<java.lang.String,?>... pairs);
+ }
+
+ public final class TraceKt {
+ ctor public TraceKt();
+ method public static inline <T> T! trace(String sectionName, kotlin.jvm.functions.Function0<? extends T> block);
+ }
+
+}
+
+package androidx.core.text {
+
+ public final class CharSequenceKt {
+ ctor public CharSequenceKt();
+ method public static inline boolean isDigitsOnly(CharSequence);
+ method public static inline int trimmedLength(CharSequence);
+ }
+
+ public final class HtmlKt {
+ ctor public HtmlKt();
+ method public static inline android.text.Spanned parseAsHtml(String, int flags = 0, android.text.Html.ImageGetter? imageGetter = null, android.text.Html.TagHandler? tagHandler = null);
+ method public static inline String toHtml(android.text.Spanned, int option = 0);
+ }
+
+ public final class LocaleKt {
+ ctor public LocaleKt();
+ method @RequiresApi(17) public static inline int getLayoutDirection(java.util.Locale);
+ }
+
+ public final class SpannableStringBuilderKt {
+ ctor public SpannableStringBuilderKt();
+ method public static inline android.text.SpannableStringBuilder backgroundColor(android.text.SpannableStringBuilder, @ColorInt int color, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder bold(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannedString buildSpannedString(kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder color(android.text.SpannableStringBuilder, @ColorInt int color, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder inSpans(android.text.SpannableStringBuilder, Object![] spans, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder inSpans(android.text.SpannableStringBuilder, Object span, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder italic(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder scale(android.text.SpannableStringBuilder, float proportion, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder strikeThrough(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder subscript(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder superscript(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder underline(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ }
+
+ public final class SpannableStringKt {
+ ctor public SpannableStringKt();
+ method public static inline void clearSpans(android.text.Spannable);
+ method public static inline operator void set(android.text.Spannable, int start, int end, Object span);
+ method public static inline operator void set(android.text.Spannable, kotlin.ranges.IntRange range, Object span);
+ method public static inline android.text.Spannable toSpannable(CharSequence);
+ }
+
+ public final class SpannedStringKt {
+ ctor public SpannedStringKt();
+ method public static inline <reified T> T![] getSpans(android.text.Spanned, int start = 0, int end = length);
+ method public static inline android.text.Spanned toSpanned(CharSequence);
+ }
+
+ public final class StringKt {
+ ctor public StringKt();
+ method public static inline String htmlEncode(String);
+ }
+
+}
+
+package androidx.core.transition {
+
+ public final class TransitionKt {
+ ctor public TransitionKt();
+ method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener addListener(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> >
+ method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnCancel(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
+ method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnEnd(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
+ method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnPause(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
+ method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnResume(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
+ method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnStart(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
+ }
+
+}
+
+package androidx.core.util {
+
+ public final class AtomicFileKt {
+ ctor public AtomicFileKt();
+ method @RequiresApi(17) public static inline byte[] readBytes(android.util.AtomicFile);
+ method @RequiresApi(17) public static String readText(android.util.AtomicFile, java.nio.charset.Charset charset = Charsets.UTF_8);
+ method @RequiresApi(17) public static inline void tryWrite(android.util.AtomicFile, kotlin.jvm.functions.Function1<? super java.io.FileOutputStream,kotlin.Unit> block);
+ method @RequiresApi(17) public static void writeBytes(android.util.AtomicFile, byte[] array);
+ method @RequiresApi(17) public static void writeText(android.util.AtomicFile, String text, java.nio.charset.Charset charset = Charsets.UTF_8);
+ }
+
+ public final class HalfKt {
+ ctor public HalfKt();
+ method @RequiresApi(26) public static inline android.util.Half toHalf(@HalfFloat short);
+ method @RequiresApi(26) public static inline android.util.Half toHalf(float);
+ method @RequiresApi(26) public static inline android.util.Half toHalf(double);
+ method @RequiresApi(26) public static inline android.util.Half toHalf(String);
+ }
+
+ public final class LongSparseArrayKt {
+ ctor public LongSparseArrayKt();
+ method @RequiresApi(16) public static inline operator <T> boolean contains(android.util.LongSparseArray<T>, long key);
+ method @RequiresApi(16) public static inline <T> boolean containsKey(android.util.LongSparseArray<T>, long key);
+ method @RequiresApi(16) public static inline <T> boolean containsValue(android.util.LongSparseArray<T>, T? value);
+ method @RequiresApi(16) public static inline <T> void forEach(android.util.LongSparseArray<T>, kotlin.jvm.functions.Function2<? super java.lang.Long,? super T,kotlin.Unit> action);
+ method @RequiresApi(16) public static inline <T> T! getOrDefault(android.util.LongSparseArray<T>, long key, T? defaultValue);
+ method @RequiresApi(16) public static inline <T> T! getOrElse(android.util.LongSparseArray<T>, long key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
+ method @RequiresApi(16) public static inline <T> int getSize(android.util.LongSparseArray<T>);
+ method @RequiresApi(16) public static inline <T> boolean isEmpty(android.util.LongSparseArray<T>);
+ method @RequiresApi(16) public static inline <T> boolean isNotEmpty(android.util.LongSparseArray<T>);
+ method @RequiresApi(16) public static <T> kotlin.collections.LongIterator keyIterator(android.util.LongSparseArray<T>);
+ method @RequiresApi(16) public static operator <T> android.util.LongSparseArray<T> plus(android.util.LongSparseArray<T>, android.util.LongSparseArray<T> other);
+ method @RequiresApi(16) public static <T> void putAll(android.util.LongSparseArray<T>, android.util.LongSparseArray<T> other);
+ method @RequiresApi(16) public static <T> boolean remove(android.util.LongSparseArray<T>, long key, T? value);
+ method @RequiresApi(16) public static inline operator <T> void set(android.util.LongSparseArray<T>, long key, T? value);
+ method @RequiresApi(16) public static <T> java.util.Iterator<T> valueIterator(android.util.LongSparseArray<T>);
+ }
+
+ public final class LruCacheKt {
+ ctor public LruCacheKt();
+ method public static inline <K, V> android.util.LruCache<K,V> lruCache(int maxSize, kotlin.jvm.functions.Function2<? super K,? super V,java.lang.Integer> sizeOf = { _, _ -> 1 }, kotlin.jvm.functions.Function1<? super K,? extends V> create = { (V)null }, kotlin.jvm.functions.Function4<? super java.lang.Boolean,? super K,? super V,? super V,kotlin.Unit> _, _, _, _ -> });
+ }
+
+ public final class PairKt {
+ ctor public PairKt();
+ method public static inline operator <F, S> F! component1(android.util.Pair<F,S>);
+ method public static inline operator <F, S> S! component2(android.util.Pair<F,S>);
+ method public static inline <F, S> android.util.Pair<F,S> toAndroidPair(kotlin.Pair<? extends F,? extends S>);
+ method public static inline <F, S> kotlin.Pair<F,S> toKotlinPair(android.util.Pair<F,S>);
+ }
+
+ public final class RangeKt {
+ ctor public RangeKt();
+ method @RequiresApi(21) public static inline infix <T extends java.lang.Comparable<? super T>> android.util.Range<T> and(android.util.Range<T>, android.util.Range<T> other);
+ method @RequiresApi(21) public static inline operator <T extends java.lang.Comparable<? super T>> android.util.Range<T> plus(android.util.Range<T>, T value);
+ method @RequiresApi(21) public static inline operator <T extends java.lang.Comparable<? super T>> android.util.Range<T> plus(android.util.Range<T>, android.util.Range<T> other);
+ method @RequiresApi(21) public static inline infix <T extends java.lang.Comparable<? super T>> android.util.Range<T> rangeTo(T, T that);
+ method @RequiresApi(21) public static <T extends java.lang.Comparable<? super T>> kotlin.ranges.ClosedRange<T> toClosedRange(android.util.Range<T>);
+ method @RequiresApi(21) public static <T extends java.lang.Comparable<? super T>> android.util.Range<T> toRange(kotlin.ranges.ClosedRange<T>);
+ }
+
+ public final class SizeKt {
+ ctor public SizeKt();
+ method @RequiresApi(21) public static inline operator int component1(android.util.Size);
+ method @RequiresApi(21) public static inline operator float component1(android.util.SizeF);
+ method @RequiresApi(21) public static inline operator int component2(android.util.Size);
+ method @RequiresApi(21) public static inline operator float component2(android.util.SizeF);
+ }
+
+ public final class SparseArrayKt {
+ ctor public SparseArrayKt();
+ method public static inline operator <T> boolean contains(android.util.SparseArray<T>, int key);
+ method public static inline <T> boolean containsKey(android.util.SparseArray<T>, int key);
+ method public static inline <T> boolean containsValue(android.util.SparseArray<T>, T? value);
+ method public static inline <T> void forEach(android.util.SparseArray<T>, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> action);
+ method public static inline <T> T! getOrDefault(android.util.SparseArray<T>, int key, T? defaultValue);
+ method public static inline <T> T! getOrElse(android.util.SparseArray<T>, int key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
+ method public static inline <T> int getSize(android.util.SparseArray<T>);
+ method public static inline <T> boolean isEmpty(android.util.SparseArray<T>);
+ method public static inline <T> boolean isNotEmpty(android.util.SparseArray<T>);
+ method public static <T> kotlin.collections.IntIterator keyIterator(android.util.SparseArray<T>);
+ method public static operator <T> android.util.SparseArray<T> plus(android.util.SparseArray<T>, android.util.SparseArray<T> other);
+ method public static <T> void putAll(android.util.SparseArray<T>, android.util.SparseArray<T> other);
+ method public static <T> boolean remove(android.util.SparseArray<T>, int key, T? value);
+ method public static inline operator <T> void set(android.util.SparseArray<T>, int key, T? value);
+ method public static <T> java.util.Iterator<T> valueIterator(android.util.SparseArray<T>);
+ }
+
+ public final class SparseBooleanArrayKt {
+ ctor public SparseBooleanArrayKt();
+ method public static inline operator boolean contains(android.util.SparseBooleanArray, int key);
+ method public static inline boolean containsKey(android.util.SparseBooleanArray, int key);
+ method public static inline boolean containsValue(android.util.SparseBooleanArray, boolean value);
+ method public static inline void forEach(android.util.SparseBooleanArray, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Boolean,kotlin.Unit> action);
+ method public static inline boolean getOrDefault(android.util.SparseBooleanArray, int key, boolean defaultValue);
+ method public static inline boolean getOrElse(android.util.SparseBooleanArray, int key, kotlin.jvm.functions.Function0<java.lang.Boolean> defaultValue);
+ method public static inline int getSize(android.util.SparseBooleanArray);
+ method public static inline boolean isEmpty(android.util.SparseBooleanArray);
+ method public static inline boolean isNotEmpty(android.util.SparseBooleanArray);
+ method public static kotlin.collections.IntIterator keyIterator(android.util.SparseBooleanArray);
+ method public static operator android.util.SparseBooleanArray plus(android.util.SparseBooleanArray, android.util.SparseBooleanArray other);
+ method public static void putAll(android.util.SparseBooleanArray, android.util.SparseBooleanArray other);
+ method public static boolean remove(android.util.SparseBooleanArray, int key, boolean value);
+ method public static inline operator void set(android.util.SparseBooleanArray, int key, boolean value);
+ method public static kotlin.collections.BooleanIterator valueIterator(android.util.SparseBooleanArray);
+ }
+
+ public final class SparseIntArrayKt {
+ ctor public SparseIntArrayKt();
+ method public static inline operator boolean contains(android.util.SparseIntArray, int key);
+ method public static inline boolean containsKey(android.util.SparseIntArray, int key);
+ method public static inline boolean containsValue(android.util.SparseIntArray, int value);
+ method public static inline void forEach(android.util.SparseIntArray, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> action);
+ method public static inline int getOrDefault(android.util.SparseIntArray, int key, int defaultValue);
+ method public static inline int getOrElse(android.util.SparseIntArray, int key, kotlin.jvm.functions.Function0<java.lang.Integer> defaultValue);
+ method public static inline int getSize(android.util.SparseIntArray);
+ method public static inline boolean isEmpty(android.util.SparseIntArray);
+ method public static inline boolean isNotEmpty(android.util.SparseIntArray);
+ method public static kotlin.collections.IntIterator keyIterator(android.util.SparseIntArray);
+ method public static operator android.util.SparseIntArray plus(android.util.SparseIntArray, android.util.SparseIntArray other);
+ method public static void putAll(android.util.SparseIntArray, android.util.SparseIntArray other);
+ method public static boolean remove(android.util.SparseIntArray, int key, int value);
+ method public static inline operator void set(android.util.SparseIntArray, int key, int value);
+ method public static kotlin.collections.IntIterator valueIterator(android.util.SparseIntArray);
+ }
+
+ public final class SparseLongArrayKt {
+ ctor public SparseLongArrayKt();
+ method @RequiresApi(18) public static inline operator boolean contains(android.util.SparseLongArray, int key);
+ method @RequiresApi(18) public static inline boolean containsKey(android.util.SparseLongArray, int key);
+ method @RequiresApi(18) public static inline boolean containsValue(android.util.SparseLongArray, long value);
+ method @RequiresApi(18) public static inline void forEach(android.util.SparseLongArray, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Long,kotlin.Unit> action);
+ method @RequiresApi(18) public static inline long getOrDefault(android.util.SparseLongArray, int key, long defaultValue);
+ method @RequiresApi(18) public static inline long getOrElse(android.util.SparseLongArray, int key, kotlin.jvm.functions.Function0<java.lang.Long> defaultValue);
+ method @RequiresApi(18) public static inline int getSize(android.util.SparseLongArray);
+ method @RequiresApi(18) public static inline boolean isEmpty(android.util.SparseLongArray);
+ method @RequiresApi(18) public static inline boolean isNotEmpty(android.util.SparseLongArray);
+ method @RequiresApi(18) public static kotlin.collections.IntIterator keyIterator(android.util.SparseLongArray);
+ method @RequiresApi(18) public static operator android.util.SparseLongArray plus(android.util.SparseLongArray, android.util.SparseLongArray other);
+ method @RequiresApi(18) public static void putAll(android.util.SparseLongArray, android.util.SparseLongArray other);
+ method @RequiresApi(18) public static boolean remove(android.util.SparseLongArray, int key, long value);
+ method @RequiresApi(18) public static inline operator void set(android.util.SparseLongArray, int key, long value);
+ method @RequiresApi(18) public static kotlin.collections.LongIterator valueIterator(android.util.SparseLongArray);
+ }
+
+}
+
+package androidx.core.view {
+
+ public final class MenuKt {
+ ctor public MenuKt();
+ method public static operator boolean contains(android.view.Menu, android.view.MenuItem item);
+ method public static inline void forEach(android.view.Menu, kotlin.jvm.functions.Function1<? super android.view.MenuItem,kotlin.Unit> action);
+ method public static inline void forEachIndexed(android.view.Menu, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super android.view.MenuItem,kotlin.Unit> action);
+ method public static inline operator android.view.MenuItem get(android.view.Menu, int index);
+ method public static kotlin.sequences.Sequence<android.view.MenuItem> getChildren(android.view.Menu);
+ method public static inline int getSize(android.view.Menu);
+ method public static inline boolean isEmpty(android.view.Menu);
+ method public static inline boolean isNotEmpty(android.view.Menu);
+ method public static operator java.util.Iterator<android.view.MenuItem> iterator(android.view.Menu);
+ method public static inline operator void minusAssign(android.view.Menu, android.view.MenuItem item);
+ }
+
+ public final class ViewGroupKt {
+ ctor public ViewGroupKt();
+ method public static inline operator boolean contains(android.view.ViewGroup, android.view.View view);
+ method public static inline void forEach(android.view.ViewGroup, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
+ method public static inline void forEachIndexed(android.view.ViewGroup, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super android.view.View,kotlin.Unit> action);
+ method public static operator android.view.View get(android.view.ViewGroup, int index);
+ method public static kotlin.sequences.Sequence<android.view.View> getChildren(android.view.ViewGroup);
+ method public static inline int getSize(android.view.ViewGroup);
+ method public static inline boolean isEmpty(android.view.ViewGroup);
+ method public static inline boolean isNotEmpty(android.view.ViewGroup);
+ method public static operator java.util.Iterator<android.view.View> iterator(android.view.ViewGroup);
+ method public static inline operator void minusAssign(android.view.ViewGroup, android.view.View view);
+ method public static inline operator void plusAssign(android.view.ViewGroup, android.view.View view);
+ method public static inline void setMargins(android.view.ViewGroup.MarginLayoutParams, @Px int size);
+ method public static inline void updateMargins(android.view.ViewGroup.MarginLayoutParams, @Px int left = android.view.ViewGroup.MarginLayoutParams.leftMargin, @Px int top = android.view.ViewGroup.MarginLayoutParams.topMargin, @Px int right = android.view.ViewGroup.MarginLayoutParams.rightMargin, @Px int bottom = android.view.ViewGroup.MarginLayoutParams.bottomMargin);
+ method @RequiresApi(17) public static inline void updateMarginsRelative(android.view.ViewGroup.MarginLayoutParams, @Px int start = marginStart, @Px int top = android.view.ViewGroup.MarginLayoutParams.topMargin, @Px int end = marginEnd, @Px int bottom = android.view.ViewGroup.MarginLayoutParams.bottomMargin);
+ }
+
+ public final class ViewKt {
+ ctor public ViewKt();
+ method public static inline void doOnAttach(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
+ method public static inline void doOnDetach(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
+ method public static inline void doOnLayout(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
+ method public static inline void doOnNextLayout(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
+ method public static inline androidx.core.view.OneShotPreDrawListener doOnPreDraw(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
+ method public static android.graphics.Bitmap drawToBitmap(android.view.View, android.graphics.Bitmap.Config config = android.graphics.Bitmap.Config.ARGB_8888);
+ method public static inline int getMarginBottom(android.view.View);
+ method public static inline int getMarginEnd(android.view.View);
+ method public static inline int getMarginLeft(android.view.View);
+ method public static inline int getMarginRight(android.view.View);
+ method public static inline int getMarginStart(android.view.View);
+ method public static inline int getMarginTop(android.view.View);
+ method public static inline boolean isGone(android.view.View);
+ method public static inline boolean isInvisible(android.view.View);
+ method public static inline boolean isVisible(android.view.View);
+ method public static inline Runnable postDelayed(android.view.View, long delayInMillis, kotlin.jvm.functions.Function0<kotlin.Unit> action);
+ method @RequiresApi(16) public static inline Runnable postOnAnimationDelayed(android.view.View, long delayInMillis, kotlin.jvm.functions.Function0<kotlin.Unit> action);
+ method public static inline void setGone(android.view.View, boolean value);
+ method public static inline void setInvisible(android.view.View, boolean value);
+ method public static inline void setPadding(android.view.View, @Px int size);
+ method public static inline void setVisible(android.view.View, boolean value);
+ method public static inline void updateLayoutParams(android.view.View, kotlin.jvm.functions.Function1<? super android.view.ViewGroup.LayoutParams,kotlin.Unit> block);
+ method public static inline <reified T extends android.view.ViewGroup.LayoutParams> void updateLayoutParamsTyped(android.view.View, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+ method public static inline void updatePadding(android.view.View, @Px int left = paddingLeft, @Px int top = paddingTop, @Px int right = paddingRight, @Px int bottom = paddingBottom);
+ method @RequiresApi(17) public static inline void updatePaddingRelative(android.view.View, @Px int start = paddingStart, @Px int top = paddingTop, @Px int end = paddingEnd, @Px int bottom = paddingBottom);
+ }
+
+}
+
+package androidx.core.widget {
+
+ public final class TextViewKt {
+ ctor public TextViewKt();
+ method public static inline android.text.TextWatcher addTextChangedListener(android.widget.TextView, kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> beforeTextChanged = { _, _, _, _ -> }, kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> _, _, _, _ -> }, kotlin.jvm.functions.Function1<? super android.text.Editable,kotlin.Unit> afterTextChanged = {});
+ method public static inline android.text.TextWatcher doAfterTextChanged(android.widget.TextView, kotlin.jvm.functions.Function1<? super android.text.Editable,kotlin.Unit> action);
+ method public static inline android.text.TextWatcher doBeforeTextChanged(android.widget.TextView, kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> action);
+ method public static inline android.text.TextWatcher doOnTextChanged(android.widget.TextView, kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> action);
+ }
+
+}
+
diff --git a/core/core-ktx/api/res-1.3.0-alpha01.txt b/core/core-ktx/api/res-1.3.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/core/core-ktx/api/res-1.3.0-alpha01.txt
diff --git a/core/core-ktx/api/restricted_1.3.0-alpha01.txt b/core/core-ktx/api/restricted_1.3.0-alpha01.txt
new file mode 100644
index 0000000..39aa8e5
--- /dev/null
+++ b/core/core-ktx/api/restricted_1.3.0-alpha01.txt
@@ -0,0 +1,652 @@
+// Signature format: 3.0
+package androidx.core.animation {
+
+ public final class AnimatorKt {
+ ctor public AnimatorKt();
+ method public static inline android.animation.Animator.AnimatorListener addListener(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> >
+ method @RequiresApi(19) public static inline android.animation.Animator.AnimatorPauseListener addPauseListener(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> >
+ method public static inline android.animation.Animator.AnimatorListener doOnCancel(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
+ method public static inline android.animation.Animator.AnimatorListener doOnEnd(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
+ method @RequiresApi(19) public static inline android.animation.Animator.AnimatorPauseListener doOnPause(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
+ method public static inline android.animation.Animator.AnimatorListener doOnRepeat(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
+ method @RequiresApi(19) public static inline android.animation.Animator.AnimatorPauseListener doOnResume(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
+ method public static inline android.animation.Animator.AnimatorListener doOnStart(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
+ }
+
+}
+
+package androidx.core.content {
+
+ public final class ContentValuesKt {
+ ctor public ContentValuesKt();
+ method public static android.content.ContentValues contentValuesOf(kotlin.Pair<java.lang.String,?>... pairs);
+ }
+
+ public final class ContextKt {
+ ctor public ContextKt();
+ method public static inline <reified T> T! getSystemService(android.content.Context);
+ method public static inline void withStyledAttributes(android.content.Context, android.util.AttributeSet? set = null, int[] attrs, @AttrRes int defStyleAttr = 0, @StyleRes int defStyleRes = 0, kotlin.jvm.functions.Function1<? super android.content.res.TypedArray,kotlin.Unit> block);
+ method public static inline void withStyledAttributes(android.content.Context, @StyleRes int resourceId, int[] attrs, kotlin.jvm.functions.Function1<? super android.content.res.TypedArray,kotlin.Unit> block);
+ }
+
+ public final class SharedPreferencesKt {
+ ctor public SharedPreferencesKt();
+ method public static inline void edit(android.content.SharedPreferences, boolean commit = false, kotlin.jvm.functions.Function1<? super android.content.SharedPreferences.Editor,kotlin.Unit> action);
+ }
+
+}
+
+package androidx.core.content.res {
+
+ public final class TypedArrayKt {
+ ctor public TypedArrayKt();
+ method public static boolean getBooleanOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method @ColorInt public static int getColorOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static android.content.res.ColorStateList getColorStateListOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static float getDimensionOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method @Dimension public static int getDimensionPixelOffsetOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method @Dimension public static int getDimensionPixelSizeOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static android.graphics.drawable.Drawable getDrawableOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static float getFloatOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method @RequiresApi(26) public static android.graphics.Typeface getFontOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static int getIntOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static int getIntegerOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method @AnyRes public static int getResourceIdOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static String getStringOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static CharSequence![] getTextArrayOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static CharSequence getTextOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+ method public static inline <R> R! use(android.content.res.TypedArray, kotlin.jvm.functions.Function1<? super android.content.res.TypedArray,? extends R> block);
+ }
+
+}
+
+package androidx.core.database {
+
+ public final class CursorKt {
+ ctor public CursorKt();
+ method public static inline byte[]? getBlobOrNull(android.database.Cursor, int index);
+ method public static inline Double? getDoubleOrNull(android.database.Cursor, int index);
+ method public static inline Float? getFloatOrNull(android.database.Cursor, int index);
+ method public static inline Integer? getIntOrNull(android.database.Cursor, int index);
+ method public static inline Long? getLongOrNull(android.database.Cursor, int index);
+ method public static inline Short? getShortOrNull(android.database.Cursor, int index);
+ method public static inline String? getStringOrNull(android.database.Cursor, int index);
+ }
+
+}
+
+package androidx.core.database.sqlite {
+
+ public final class SQLiteDatabaseKt {
+ ctor public SQLiteDatabaseKt();
+ method public static inline <T> T! transaction(android.database.sqlite.SQLiteDatabase, boolean exclusive = true, kotlin.jvm.functions.Function1<? super android.database.sqlite.SQLiteDatabase,? extends T> body);
+ }
+
+}
+
+package androidx.core.graphics {
+
+ public final class BitmapKt {
+ ctor public BitmapKt();
+ method public static inline android.graphics.Bitmap applyCanvas(android.graphics.Bitmap, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline operator boolean contains(android.graphics.Bitmap, android.graphics.Point p);
+ method public static inline operator boolean contains(android.graphics.Bitmap, android.graphics.PointF p);
+ method public static inline android.graphics.Bitmap createBitmap(int width, int height, android.graphics.Bitmap.Config config = android.graphics.Bitmap.Config.ARGB_8888);
+ method @RequiresApi(26) public static inline android.graphics.Bitmap createBitmap(int width, int height, android.graphics.Bitmap.Config config = android.graphics.Bitmap.Config.ARGB_8888, boolean hasAlpha = true, android.graphics.ColorSpace colorSpace = ColorSpace.get(ColorSpace.Named.SRGB));
+ method public static inline operator int get(android.graphics.Bitmap, int x, int y);
+ method public static inline android.graphics.Bitmap scale(android.graphics.Bitmap, int width, int height, boolean filter = true);
+ method public static inline operator void set(android.graphics.Bitmap, int x, int y, @ColorInt int color);
+ }
+
+ public final class CanvasKt {
+ ctor public CanvasKt();
+ method public static inline void withClip(android.graphics.Canvas, android.graphics.Rect clipRect, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withClip(android.graphics.Canvas, android.graphics.RectF clipRect, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withClip(android.graphics.Canvas, int left, int top, int right, int bottom, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withClip(android.graphics.Canvas, float left, float top, float right, float bottom, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withClip(android.graphics.Canvas, android.graphics.Path clipPath, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withMatrix(android.graphics.Canvas, android.graphics.Matrix matrix = android.graphics.Matrix(), kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withRotation(android.graphics.Canvas, float degrees = 0.0f, float pivotX = 0.0f, float pivotY = 0.0f, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withSave(android.graphics.Canvas, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withScale(android.graphics.Canvas, float x = 1.0f, float y = 1.0f, float pivotX = 0.0f, float pivotY = 0.0f, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withSkew(android.graphics.Canvas, float x = 0.0f, float y = 0.0f, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ method public static inline void withTranslation(android.graphics.Canvas, float x = 0.0f, float y = 0.0f, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ }
+
+ public final class ColorKt {
+ ctor public ColorKt();
+ method @RequiresApi(26) public static inline operator float component1(android.graphics.Color);
+ method public static inline operator int component1(@ColorInt int);
+ method @RequiresApi(26) public static inline operator float component1(@ColorLong long);
+ method @RequiresApi(26) public static inline operator float component2(android.graphics.Color);
+ method public static inline operator int component2(@ColorInt int);
+ method @RequiresApi(26) public static inline operator float component2(@ColorLong long);
+ method @RequiresApi(26) public static inline operator float component3(android.graphics.Color);
+ method public static inline operator int component3(@ColorInt int);
+ method @RequiresApi(26) public static inline operator float component3(@ColorLong long);
+ method @RequiresApi(26) public static inline operator float component4(android.graphics.Color);
+ method public static inline operator int component4(@ColorInt int);
+ method @RequiresApi(26) public static inline operator float component4(@ColorLong long);
+ method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorInt int, android.graphics.ColorSpace.Named colorSpace);
+ method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorInt int, android.graphics.ColorSpace colorSpace);
+ method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorLong long, android.graphics.ColorSpace.Named colorSpace);
+ method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorLong long, android.graphics.ColorSpace colorSpace);
+ method @RequiresApi(26) public static inline infix android.graphics.Color convertTo(android.graphics.Color, android.graphics.ColorSpace.Named colorSpace);
+ method @RequiresApi(26) public static inline infix android.graphics.Color convertTo(android.graphics.Color, android.graphics.ColorSpace colorSpace);
+ method public static inline int getAlpha(@ColorInt int);
+ method @RequiresApi(26) public static inline float getAlpha(@ColorLong long);
+ method public static inline int getBlue(@ColorInt int);
+ method @RequiresApi(26) public static inline float getBlue(@ColorLong long);
+ method @RequiresApi(26) public static inline android.graphics.ColorSpace getColorSpace(@ColorLong long);
+ method public static inline int getGreen(@ColorInt int);
+ method @RequiresApi(26) public static inline float getGreen(@ColorLong long);
+ method @RequiresApi(26) public static inline float getLuminance(@ColorInt int);
+ method @RequiresApi(26) public static inline float getLuminance(@ColorLong long);
+ method public static inline int getRed(@ColorInt int);
+ method @RequiresApi(26) public static inline float getRed(@ColorLong long);
+ method @RequiresApi(26) public static inline boolean isSrgb(@ColorLong long);
+ method @RequiresApi(26) public static inline boolean isWideGamut(@ColorLong long);
+ method @RequiresApi(26) public static operator android.graphics.Color plus(android.graphics.Color, android.graphics.Color c);
+ method @RequiresApi(26) public static inline android.graphics.Color toColor(@ColorInt int);
+ method @RequiresApi(26) public static inline android.graphics.Color toColor(@ColorLong long);
+ method @ColorInt @RequiresApi(26) public static inline int toColorInt(@ColorLong long);
+ method @ColorInt public static inline int toColorInt(String);
+ method @ColorLong @RequiresApi(26) public static inline long toColorLong(@ColorInt int);
+ }
+
+ public final class ImageDecoderKt {
+ ctor public ImageDecoderKt();
+ method @RequiresApi(28) public static inline android.graphics.Bitmap decodeBitmap(android.graphics.ImageDecoder.Source, kotlin.jvm.functions.Function3<? super android.graphics.ImageDecoder,? super android.graphics.ImageDecoder.ImageInfo,? super android.graphics.ImageDecoder.Source,kotlin.Unit> action);
+ method @RequiresApi(28) public static inline android.graphics.drawable.Drawable decodeDrawable(android.graphics.ImageDecoder.Source, kotlin.jvm.functions.Function3<? super android.graphics.ImageDecoder,? super android.graphics.ImageDecoder.ImageInfo,? super android.graphics.ImageDecoder.Source,kotlin.Unit> action);
+ }
+
+ public final class MatrixKt {
+ ctor public MatrixKt();
+ method public static android.graphics.Matrix rotationMatrix(float degrees, float px = 0.0f, float py = 0.0f);
+ method public static android.graphics.Matrix scaleMatrix(float sx = 1.0f, float sy = 1.0f);
+ method public static inline operator android.graphics.Matrix times(android.graphics.Matrix, android.graphics.Matrix m);
+ method public static android.graphics.Matrix translationMatrix(float tx = 0.0f, float ty = 0.0f);
+ method public static inline float[] values(android.graphics.Matrix);
+ }
+
+ public final class PaintKt {
+ ctor public PaintKt();
+ method public static inline boolean setBlendMode(android.graphics.Paint, androidx.core.graphics.BlendModeCompat? blendModeCompat);
+ }
+
+ public final class PathKt {
+ ctor public PathKt();
+ method @RequiresApi(19) public static inline infix android.graphics.Path and(android.graphics.Path, android.graphics.Path p);
+ method @RequiresApi(26) public static Iterable<androidx.core.graphics.PathSegment> flatten(android.graphics.Path, float error = 0.5f);
+ method @RequiresApi(19) public static inline operator android.graphics.Path minus(android.graphics.Path, android.graphics.Path p);
+ method @RequiresApi(19) public static inline infix android.graphics.Path or(android.graphics.Path, android.graphics.Path p);
+ method @RequiresApi(19) public static inline operator android.graphics.Path plus(android.graphics.Path, android.graphics.Path p);
+ method @RequiresApi(19) public static inline infix android.graphics.Path xor(android.graphics.Path, android.graphics.Path p);
+ }
+
+ public final class PictureKt {
+ ctor public PictureKt();
+ method public static inline android.graphics.Picture record(android.graphics.Picture, int width, int height, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+ }
+
+ public final class PointKt {
+ ctor public PointKt();
+ method public static inline operator int component1(android.graphics.Point);
+ method public static inline operator float component1(android.graphics.PointF);
+ method public static inline operator int component2(android.graphics.Point);
+ method public static inline operator float component2(android.graphics.PointF);
+ method public static inline operator android.graphics.Point minus(android.graphics.Point, android.graphics.Point p);
+ method public static inline operator android.graphics.PointF minus(android.graphics.PointF, android.graphics.PointF p);
+ method public static inline operator android.graphics.Point minus(android.graphics.Point, int xy);
+ method public static inline operator android.graphics.PointF minus(android.graphics.PointF, float xy);
+ method public static inline operator android.graphics.Point plus(android.graphics.Point, android.graphics.Point p);
+ method public static inline operator android.graphics.PointF plus(android.graphics.PointF, android.graphics.PointF p);
+ method public static inline operator android.graphics.Point plus(android.graphics.Point, int xy);
+ method public static inline operator android.graphics.PointF plus(android.graphics.PointF, float xy);
+ method public static inline android.graphics.Point toPoint(android.graphics.PointF);
+ method public static inline android.graphics.PointF toPointF(android.graphics.Point);
+ method public static inline operator android.graphics.Point unaryMinus(android.graphics.Point);
+ method public static inline operator android.graphics.PointF unaryMinus(android.graphics.PointF);
+ }
+
+ public final class PorterDuffKt {
+ ctor public PorterDuffKt();
+ method public static inline android.graphics.PorterDuffColorFilter toColorFilter(android.graphics.PorterDuff.Mode, int color);
+ method public static inline android.graphics.PorterDuffXfermode toXfermode(android.graphics.PorterDuff.Mode);
+ }
+
+ public final class RectKt {
+ ctor public RectKt();
+ method public static inline infix android.graphics.Rect and(android.graphics.Rect, android.graphics.Rect r);
+ method public static inline infix android.graphics.RectF and(android.graphics.RectF, android.graphics.RectF r);
+ method public static inline operator int component1(android.graphics.Rect);
+ method public static inline operator float component1(android.graphics.RectF);
+ method public static inline operator int component2(android.graphics.Rect);
+ method public static inline operator float component2(android.graphics.RectF);
+ method public static inline operator int component3(android.graphics.Rect);
+ method public static inline operator float component3(android.graphics.RectF);
+ method public static inline operator int component4(android.graphics.Rect);
+ method public static inline operator float component4(android.graphics.RectF);
+ method public static inline operator boolean contains(android.graphics.Rect, android.graphics.Point p);
+ method public static inline operator boolean contains(android.graphics.RectF, android.graphics.PointF p);
+ method public static inline operator android.graphics.Region minus(android.graphics.Rect, android.graphics.Rect r);
+ method public static inline operator android.graphics.Region minus(android.graphics.RectF, android.graphics.RectF r);
+ method public static inline operator android.graphics.Rect minus(android.graphics.Rect, int xy);
+ method public static inline operator android.graphics.RectF minus(android.graphics.RectF, float xy);
+ method public static inline operator android.graphics.Rect minus(android.graphics.Rect, android.graphics.Point xy);
+ method public static inline operator android.graphics.RectF minus(android.graphics.RectF, android.graphics.PointF xy);
+ method public static inline infix android.graphics.Rect or(android.graphics.Rect, android.graphics.Rect r);
+ method public static inline infix android.graphics.RectF or(android.graphics.RectF, android.graphics.RectF r);
+ method public static inline operator android.graphics.Rect plus(android.graphics.Rect, android.graphics.Rect r);
+ method public static inline operator android.graphics.RectF plus(android.graphics.RectF, android.graphics.RectF r);
+ method public static inline operator android.graphics.Rect plus(android.graphics.Rect, int xy);
+ method public static inline operator android.graphics.RectF plus(android.graphics.RectF, float xy);
+ method public static inline operator android.graphics.Rect plus(android.graphics.Rect, android.graphics.Point xy);
+ method public static inline operator android.graphics.RectF plus(android.graphics.RectF, android.graphics.PointF xy);
+ method public static inline operator android.graphics.Rect times(android.graphics.Rect, int factor);
+ method public static inline operator android.graphics.RectF times(android.graphics.RectF, int factor);
+ method public static inline operator android.graphics.RectF times(android.graphics.RectF, float factor);
+ method public static inline android.graphics.Rect toRect(android.graphics.RectF);
+ method public static inline android.graphics.RectF toRectF(android.graphics.Rect);
+ method public static inline android.graphics.Region toRegion(android.graphics.Rect);
+ method public static inline android.graphics.Region toRegion(android.graphics.RectF);
+ method public static inline android.graphics.RectF transform(android.graphics.RectF, android.graphics.Matrix m);
+ method public static inline infix android.graphics.Region xor(android.graphics.Rect, android.graphics.Rect r);
+ method public static inline infix android.graphics.Region xor(android.graphics.RectF, android.graphics.RectF r);
+ }
+
+ public final class RegionKt {
+ ctor public RegionKt();
+ method public static inline infix android.graphics.Region and(android.graphics.Region, android.graphics.Rect r);
+ method public static inline infix android.graphics.Region and(android.graphics.Region, android.graphics.Region r);
+ method public static inline operator boolean contains(android.graphics.Region, android.graphics.Point p);
+ method public static inline void forEach(android.graphics.Region, kotlin.jvm.functions.Function1<? super android.graphics.Rect,kotlin.Unit> action);
+ method public static operator java.util.Iterator<android.graphics.Rect> iterator(android.graphics.Region);
+ method public static inline operator android.graphics.Region minus(android.graphics.Region, android.graphics.Rect r);
+ method public static inline operator android.graphics.Region minus(android.graphics.Region, android.graphics.Region r);
+ method public static inline operator android.graphics.Region not(android.graphics.Region);
+ method public static inline infix android.graphics.Region or(android.graphics.Region, android.graphics.Rect r);
+ method public static inline infix android.graphics.Region or(android.graphics.Region, android.graphics.Region r);
+ method public static inline operator android.graphics.Region plus(android.graphics.Region, android.graphics.Rect r);
+ method public static inline operator android.graphics.Region plus(android.graphics.Region, android.graphics.Region r);
+ method public static inline operator android.graphics.Region unaryMinus(android.graphics.Region);
+ method public static inline infix android.graphics.Region xor(android.graphics.Region, android.graphics.Rect r);
+ method public static inline infix android.graphics.Region xor(android.graphics.Region, android.graphics.Region r);
+ }
+
+ public final class ShaderKt {
+ ctor public ShaderKt();
+ method public static inline void transform(android.graphics.Shader, kotlin.jvm.functions.Function1<? super android.graphics.Matrix,kotlin.Unit> block);
+ }
+
+}
+
+package androidx.core.graphics.drawable {
+
+ public final class BitmapDrawableKt {
+ ctor public BitmapDrawableKt();
+ method public static inline android.graphics.drawable.BitmapDrawable toDrawable(android.graphics.Bitmap, android.content.res.Resources resources);
+ }
+
+ public final class ColorDrawableKt {
+ ctor public ColorDrawableKt();
+ method public static inline android.graphics.drawable.ColorDrawable toDrawable(@ColorInt int);
+ method @RequiresApi(26) public static inline android.graphics.drawable.ColorDrawable toDrawable(android.graphics.Color);
+ }
+
+ public final class DrawableKt {
+ ctor public DrawableKt();
+ method public static android.graphics.Bitmap toBitmap(android.graphics.drawable.Drawable, @Px int width = intrinsicWidth, @Px int height = intrinsicHeight, android.graphics.Bitmap.Config? config = null);
+ method public static void updateBounds(android.graphics.drawable.Drawable, @Px int left = android.graphics.Rect.left, @Px int top = android.graphics.Rect.top, @Px int right = android.graphics.Rect.right, @Px int bottom = android.graphics.Rect.bottom);
+ }
+
+ public final class IconKt {
+ ctor public IconKt();
+ method @RequiresApi(26) public static inline android.graphics.drawable.Icon toAdaptiveIcon(android.graphics.Bitmap);
+ method @RequiresApi(26) public static inline android.graphics.drawable.Icon toIcon(android.graphics.Bitmap);
+ method @RequiresApi(26) public static inline android.graphics.drawable.Icon toIcon(android.net.Uri);
+ method @RequiresApi(26) public static inline android.graphics.drawable.Icon toIcon(byte[]);
+ }
+
+}
+
+package androidx.core.location {
+
+ public final class LocationKt {
+ ctor public LocationKt();
+ method public static inline operator double component1(android.location.Location);
+ method public static inline operator double component2(android.location.Location);
+ }
+
+}
+
+package androidx.core.net {
+
+ public final class UriKt {
+ ctor public UriKt();
+ method public static java.io.File toFile(android.net.Uri);
+ method public static inline android.net.Uri toUri(String);
+ method public static inline android.net.Uri toUri(java.io.File);
+ }
+
+}
+
+package androidx.core.os {
+
+ public final class BundleKt {
+ ctor public BundleKt();
+ method public static android.os.Bundle bundleOf(kotlin.Pair<java.lang.String,?>... pairs);
+ }
+
+ public final class HandlerKt {
+ ctor public HandlerKt();
+ method public static inline Runnable postAtTime(android.os.Handler, long uptimeMillis, Object? token = null, kotlin.jvm.functions.Function0<kotlin.Unit> action);
+ method public static inline Runnable postDelayed(android.os.Handler, long delayInMillis, Object? token = null, kotlin.jvm.functions.Function0<kotlin.Unit> action);
+ }
+
+ public final class PersistableBundleKt {
+ ctor public PersistableBundleKt();
+ method @RequiresApi(21) public static android.os.PersistableBundle persistableBundleOf(kotlin.Pair<java.lang.String,?>... pairs);
+ }
+
+ public final class TraceKt {
+ ctor public TraceKt();
+ method public static inline <T> T! trace(String sectionName, kotlin.jvm.functions.Function0<? extends T> block);
+ }
+
+}
+
+package androidx.core.text {
+
+ public final class CharSequenceKt {
+ ctor public CharSequenceKt();
+ method public static inline boolean isDigitsOnly(CharSequence);
+ method public static inline int trimmedLength(CharSequence);
+ }
+
+ public final class HtmlKt {
+ ctor public HtmlKt();
+ method public static inline android.text.Spanned parseAsHtml(String, int flags = 0, android.text.Html.ImageGetter? imageGetter = null, android.text.Html.TagHandler? tagHandler = null);
+ method public static inline String toHtml(android.text.Spanned, int option = 0);
+ }
+
+ public final class LocaleKt {
+ ctor public LocaleKt();
+ method @RequiresApi(17) public static inline int getLayoutDirection(java.util.Locale);
+ }
+
+ public final class SpannableStringBuilderKt {
+ ctor public SpannableStringBuilderKt();
+ method public static inline android.text.SpannableStringBuilder backgroundColor(android.text.SpannableStringBuilder, @ColorInt int color, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder bold(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannedString buildSpannedString(kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder color(android.text.SpannableStringBuilder, @ColorInt int color, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder inSpans(android.text.SpannableStringBuilder, Object![] spans, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder inSpans(android.text.SpannableStringBuilder, Object span, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder italic(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder scale(android.text.SpannableStringBuilder, float proportion, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder strikeThrough(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder subscript(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder superscript(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ method public static inline android.text.SpannableStringBuilder underline(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+ }
+
+ public final class SpannableStringKt {
+ ctor public SpannableStringKt();
+ method public static inline void clearSpans(android.text.Spannable);
+ method public static inline operator void set(android.text.Spannable, int start, int end, Object span);
+ method public static inline operator void set(android.text.Spannable, kotlin.ranges.IntRange range, Object span);
+ method public static inline android.text.Spannable toSpannable(CharSequence);
+ }
+
+ public final class SpannedStringKt {
+ ctor public SpannedStringKt();
+ method public static inline <reified T> T![] getSpans(android.text.Spanned, int start = 0, int end = length);
+ method public static inline android.text.Spanned toSpanned(CharSequence);
+ }
+
+ public final class StringKt {
+ ctor public StringKt();
+ method public static inline String htmlEncode(String);
+ }
+
+}
+
+package androidx.core.transition {
+
+ public final class TransitionKt {
+ ctor public TransitionKt();
+ method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener addListener(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> >
+ method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnCancel(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
+ method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnEnd(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
+ method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnPause(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
+ method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnResume(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
+ method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnStart(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
+ }
+
+}
+
+package androidx.core.util {
+
+ public final class AtomicFileKt {
+ ctor public AtomicFileKt();
+ method @RequiresApi(17) public static inline byte[] readBytes(android.util.AtomicFile);
+ method @RequiresApi(17) public static String readText(android.util.AtomicFile, java.nio.charset.Charset charset = Charsets.UTF_8);
+ method @RequiresApi(17) public static inline void tryWrite(android.util.AtomicFile, kotlin.jvm.functions.Function1<? super java.io.FileOutputStream,kotlin.Unit> block);
+ method @RequiresApi(17) public static void writeBytes(android.util.AtomicFile, byte[] array);
+ method @RequiresApi(17) public static void writeText(android.util.AtomicFile, String text, java.nio.charset.Charset charset = Charsets.UTF_8);
+ }
+
+ public final class HalfKt {
+ ctor public HalfKt();
+ method @RequiresApi(26) public static inline android.util.Half toHalf(@HalfFloat short);
+ method @RequiresApi(26) public static inline android.util.Half toHalf(float);
+ method @RequiresApi(26) public static inline android.util.Half toHalf(double);
+ method @RequiresApi(26) public static inline android.util.Half toHalf(String);
+ }
+
+ public final class LongSparseArrayKt {
+ ctor public LongSparseArrayKt();
+ method @RequiresApi(16) public static inline operator <T> boolean contains(android.util.LongSparseArray<T>, long key);
+ method @RequiresApi(16) public static inline <T> boolean containsKey(android.util.LongSparseArray<T>, long key);
+ method @RequiresApi(16) public static inline <T> boolean containsValue(android.util.LongSparseArray<T>, T? value);
+ method @RequiresApi(16) public static inline <T> void forEach(android.util.LongSparseArray<T>, kotlin.jvm.functions.Function2<? super java.lang.Long,? super T,kotlin.Unit> action);
+ method @RequiresApi(16) public static inline <T> T! getOrDefault(android.util.LongSparseArray<T>, long key, T? defaultValue);
+ method @RequiresApi(16) public static inline <T> T! getOrElse(android.util.LongSparseArray<T>, long key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
+ method @RequiresApi(16) public static inline <T> int getSize(android.util.LongSparseArray<T>);
+ method @RequiresApi(16) public static inline <T> boolean isEmpty(android.util.LongSparseArray<T>);
+ method @RequiresApi(16) public static inline <T> boolean isNotEmpty(android.util.LongSparseArray<T>);
+ method @RequiresApi(16) public static <T> kotlin.collections.LongIterator keyIterator(android.util.LongSparseArray<T>);
+ method @RequiresApi(16) public static operator <T> android.util.LongSparseArray<T> plus(android.util.LongSparseArray<T>, android.util.LongSparseArray<T> other);
+ method @RequiresApi(16) public static <T> void putAll(android.util.LongSparseArray<T>, android.util.LongSparseArray<T> other);
+ method @RequiresApi(16) public static <T> boolean remove(android.util.LongSparseArray<T>, long key, T? value);
+ method @RequiresApi(16) public static inline operator <T> void set(android.util.LongSparseArray<T>, long key, T? value);
+ method @RequiresApi(16) public static <T> java.util.Iterator<T> valueIterator(android.util.LongSparseArray<T>);
+ }
+
+ public final class LruCacheKt {
+ ctor public LruCacheKt();
+ method public static inline <K, V> android.util.LruCache<K,V> lruCache(int maxSize, kotlin.jvm.functions.Function2<? super K,? super V,java.lang.Integer> sizeOf = { _, _ -> 1 }, kotlin.jvm.functions.Function1<? super K,? extends V> create = { (V)null }, kotlin.jvm.functions.Function4<? super java.lang.Boolean,? super K,? super V,? super V,kotlin.Unit> _, _, _, _ -> });
+ }
+
+ public final class PairKt {
+ ctor public PairKt();
+ method public static inline operator <F, S> F! component1(android.util.Pair<F,S>);
+ method public static inline operator <F, S> S! component2(android.util.Pair<F,S>);
+ method public static inline <F, S> android.util.Pair<F,S> toAndroidPair(kotlin.Pair<? extends F,? extends S>);
+ method public static inline <F, S> kotlin.Pair<F,S> toKotlinPair(android.util.Pair<F,S>);
+ }
+
+ public final class RangeKt {
+ ctor public RangeKt();
+ method @RequiresApi(21) public static inline infix <T extends java.lang.Comparable<? super T>> android.util.Range<T> and(android.util.Range<T>, android.util.Range<T> other);
+ method @RequiresApi(21) public static inline operator <T extends java.lang.Comparable<? super T>> android.util.Range<T> plus(android.util.Range<T>, T value);
+ method @RequiresApi(21) public static inline operator <T extends java.lang.Comparable<? super T>> android.util.Range<T> plus(android.util.Range<T>, android.util.Range<T> other);
+ method @RequiresApi(21) public static inline infix <T extends java.lang.Comparable<? super T>> android.util.Range<T> rangeTo(T, T that);
+ method @RequiresApi(21) public static <T extends java.lang.Comparable<? super T>> kotlin.ranges.ClosedRange<T> toClosedRange(android.util.Range<T>);
+ method @RequiresApi(21) public static <T extends java.lang.Comparable<? super T>> android.util.Range<T> toRange(kotlin.ranges.ClosedRange<T>);
+ }
+
+ public final class SizeKt {
+ ctor public SizeKt();
+ method @RequiresApi(21) public static inline operator int component1(android.util.Size);
+ method @RequiresApi(21) public static inline operator float component1(android.util.SizeF);
+ method @RequiresApi(21) public static inline operator int component2(android.util.Size);
+ method @RequiresApi(21) public static inline operator float component2(android.util.SizeF);
+ }
+
+ public final class SparseArrayKt {
+ ctor public SparseArrayKt();
+ method public static inline operator <T> boolean contains(android.util.SparseArray<T>, int key);
+ method public static inline <T> boolean containsKey(android.util.SparseArray<T>, int key);
+ method public static inline <T> boolean containsValue(android.util.SparseArray<T>, T? value);
+ method public static inline <T> void forEach(android.util.SparseArray<T>, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> action);
+ method public static inline <T> T! getOrDefault(android.util.SparseArray<T>, int key, T? defaultValue);
+ method public static inline <T> T! getOrElse(android.util.SparseArray<T>, int key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
+ method public static inline <T> int getSize(android.util.SparseArray<T>);
+ method public static inline <T> boolean isEmpty(android.util.SparseArray<T>);
+ method public static inline <T> boolean isNotEmpty(android.util.SparseArray<T>);
+ method public static <T> kotlin.collections.IntIterator keyIterator(android.util.SparseArray<T>);
+ method public static operator <T> android.util.SparseArray<T> plus(android.util.SparseArray<T>, android.util.SparseArray<T> other);
+ method public static <T> void putAll(android.util.SparseArray<T>, android.util.SparseArray<T> other);
+ method public static <T> boolean remove(android.util.SparseArray<T>, int key, T? value);
+ method public static inline operator <T> void set(android.util.SparseArray<T>, int key, T? value);
+ method public static <T> java.util.Iterator<T> valueIterator(android.util.SparseArray<T>);
+ }
+
+ public final class SparseBooleanArrayKt {
+ ctor public SparseBooleanArrayKt();
+ method public static inline operator boolean contains(android.util.SparseBooleanArray, int key);
+ method public static inline boolean containsKey(android.util.SparseBooleanArray, int key);
+ method public static inline boolean containsValue(android.util.SparseBooleanArray, boolean value);
+ method public static inline void forEach(android.util.SparseBooleanArray, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Boolean,kotlin.Unit> action);
+ method public static inline boolean getOrDefault(android.util.SparseBooleanArray, int key, boolean defaultValue);
+ method public static inline boolean getOrElse(android.util.SparseBooleanArray, int key, kotlin.jvm.functions.Function0<java.lang.Boolean> defaultValue);
+ method public static inline int getSize(android.util.SparseBooleanArray);
+ method public static inline boolean isEmpty(android.util.SparseBooleanArray);
+ method public static inline boolean isNotEmpty(android.util.SparseBooleanArray);
+ method public static kotlin.collections.IntIterator keyIterator(android.util.SparseBooleanArray);
+ method public static operator android.util.SparseBooleanArray plus(android.util.SparseBooleanArray, android.util.SparseBooleanArray other);
+ method public static void putAll(android.util.SparseBooleanArray, android.util.SparseBooleanArray other);
+ method public static boolean remove(android.util.SparseBooleanArray, int key, boolean value);
+ method public static inline operator void set(android.util.SparseBooleanArray, int key, boolean value);
+ method public static kotlin.collections.BooleanIterator valueIterator(android.util.SparseBooleanArray);
+ }
+
+ public final class SparseIntArrayKt {
+ ctor public SparseIntArrayKt();
+ method public static inline operator boolean contains(android.util.SparseIntArray, int key);
+ method public static inline boolean containsKey(android.util.SparseIntArray, int key);
+ method public static inline boolean containsValue(android.util.SparseIntArray, int value);
+ method public static inline void forEach(android.util.SparseIntArray, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> action);
+ method public static inline int getOrDefault(android.util.SparseIntArray, int key, int defaultValue);
+ method public static inline int getOrElse(android.util.SparseIntArray, int key, kotlin.jvm.functions.Function0<java.lang.Integer> defaultValue);
+ method public static inline int getSize(android.util.SparseIntArray);
+ method public static inline boolean isEmpty(android.util.SparseIntArray);
+ method public static inline boolean isNotEmpty(android.util.SparseIntArray);
+ method public static kotlin.collections.IntIterator keyIterator(android.util.SparseIntArray);
+ method public static operator android.util.SparseIntArray plus(android.util.SparseIntArray, android.util.SparseIntArray other);
+ method public static void putAll(android.util.SparseIntArray, android.util.SparseIntArray other);
+ method public static boolean remove(android.util.SparseIntArray, int key, int value);
+ method public static inline operator void set(android.util.SparseIntArray, int key, int value);
+ method public static kotlin.collections.IntIterator valueIterator(android.util.SparseIntArray);
+ }
+
+ public final class SparseLongArrayKt {
+ ctor public SparseLongArrayKt();
+ method @RequiresApi(18) public static inline operator boolean contains(android.util.SparseLongArray, int key);
+ method @RequiresApi(18) public static inline boolean containsKey(android.util.SparseLongArray, int key);
+ method @RequiresApi(18) public static inline boolean containsValue(android.util.SparseLongArray, long value);
+ method @RequiresApi(18) public static inline void forEach(android.util.SparseLongArray, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Long,kotlin.Unit> action);
+ method @RequiresApi(18) public static inline long getOrDefault(android.util.SparseLongArray, int key, long defaultValue);
+ method @RequiresApi(18) public static inline long getOrElse(android.util.SparseLongArray, int key, kotlin.jvm.functions.Function0<java.lang.Long> defaultValue);
+ method @RequiresApi(18) public static inline int getSize(android.util.SparseLongArray);
+ method @RequiresApi(18) public static inline boolean isEmpty(android.util.SparseLongArray);
+ method @RequiresApi(18) public static inline boolean isNotEmpty(android.util.SparseLongArray);
+ method @RequiresApi(18) public static kotlin.collections.IntIterator keyIterator(android.util.SparseLongArray);
+ method @RequiresApi(18) public static operator android.util.SparseLongArray plus(android.util.SparseLongArray, android.util.SparseLongArray other);
+ method @RequiresApi(18) public static void putAll(android.util.SparseLongArray, android.util.SparseLongArray other);
+ method @RequiresApi(18) public static boolean remove(android.util.SparseLongArray, int key, long value);
+ method @RequiresApi(18) public static inline operator void set(android.util.SparseLongArray, int key, long value);
+ method @RequiresApi(18) public static kotlin.collections.LongIterator valueIterator(android.util.SparseLongArray);
+ }
+
+}
+
+package androidx.core.view {
+
+ public final class MenuKt {
+ ctor public MenuKt();
+ method public static operator boolean contains(android.view.Menu, android.view.MenuItem item);
+ method public static inline void forEach(android.view.Menu, kotlin.jvm.functions.Function1<? super android.view.MenuItem,kotlin.Unit> action);
+ method public static inline void forEachIndexed(android.view.Menu, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super android.view.MenuItem,kotlin.Unit> action);
+ method public static inline operator android.view.MenuItem get(android.view.Menu, int index);
+ method public static kotlin.sequences.Sequence<android.view.MenuItem> getChildren(android.view.Menu);
+ method public static inline int getSize(android.view.Menu);
+ method public static inline boolean isEmpty(android.view.Menu);
+ method public static inline boolean isNotEmpty(android.view.Menu);
+ method public static operator java.util.Iterator<android.view.MenuItem> iterator(android.view.Menu);
+ method public static inline operator void minusAssign(android.view.Menu, android.view.MenuItem item);
+ }
+
+ public final class ViewGroupKt {
+ ctor public ViewGroupKt();
+ method public static inline operator boolean contains(android.view.ViewGroup, android.view.View view);
+ method public static inline void forEach(android.view.ViewGroup, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
+ method public static inline void forEachIndexed(android.view.ViewGroup, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super android.view.View,kotlin.Unit> action);
+ method public static operator android.view.View get(android.view.ViewGroup, int index);
+ method public static kotlin.sequences.Sequence<android.view.View> getChildren(android.view.ViewGroup);
+ method public static inline int getSize(android.view.ViewGroup);
+ method public static inline boolean isEmpty(android.view.ViewGroup);
+ method public static inline boolean isNotEmpty(android.view.ViewGroup);
+ method public static operator java.util.Iterator<android.view.View> iterator(android.view.ViewGroup);
+ method public static inline operator void minusAssign(android.view.ViewGroup, android.view.View view);
+ method public static inline operator void plusAssign(android.view.ViewGroup, android.view.View view);
+ method public static inline void setMargins(android.view.ViewGroup.MarginLayoutParams, @Px int size);
+ method public static inline void updateMargins(android.view.ViewGroup.MarginLayoutParams, @Px int left = android.view.ViewGroup.MarginLayoutParams.leftMargin, @Px int top = android.view.ViewGroup.MarginLayoutParams.topMargin, @Px int right = android.view.ViewGroup.MarginLayoutParams.rightMargin, @Px int bottom = android.view.ViewGroup.MarginLayoutParams.bottomMargin);
+ method @RequiresApi(17) public static inline void updateMarginsRelative(android.view.ViewGroup.MarginLayoutParams, @Px int start = marginStart, @Px int top = android.view.ViewGroup.MarginLayoutParams.topMargin, @Px int end = marginEnd, @Px int bottom = android.view.ViewGroup.MarginLayoutParams.bottomMargin);
+ }
+
+ public final class ViewKt {
+ ctor public ViewKt();
+ method public static inline void doOnAttach(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
+ method public static inline void doOnDetach(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
+ method public static inline void doOnLayout(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
+ method public static inline void doOnNextLayout(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
+ method public static inline androidx.core.view.OneShotPreDrawListener doOnPreDraw(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
+ method public static android.graphics.Bitmap drawToBitmap(android.view.View, android.graphics.Bitmap.Config config = android.graphics.Bitmap.Config.ARGB_8888);
+ method public static inline int getMarginBottom(android.view.View);
+ method public static inline int getMarginEnd(android.view.View);
+ method public static inline int getMarginLeft(android.view.View);
+ method public static inline int getMarginRight(android.view.View);
+ method public static inline int getMarginStart(android.view.View);
+ method public static inline int getMarginTop(android.view.View);
+ method public static inline boolean isGone(android.view.View);
+ method public static inline boolean isInvisible(android.view.View);
+ method public static inline boolean isVisible(android.view.View);
+ method public static inline Runnable postDelayed(android.view.View, long delayInMillis, kotlin.jvm.functions.Function0<kotlin.Unit> action);
+ method @RequiresApi(16) public static inline Runnable postOnAnimationDelayed(android.view.View, long delayInMillis, kotlin.jvm.functions.Function0<kotlin.Unit> action);
+ method public static inline void setGone(android.view.View, boolean value);
+ method public static inline void setInvisible(android.view.View, boolean value);
+ method public static inline void setPadding(android.view.View, @Px int size);
+ method public static inline void setVisible(android.view.View, boolean value);
+ method public static inline void updateLayoutParams(android.view.View, kotlin.jvm.functions.Function1<? super android.view.ViewGroup.LayoutParams,kotlin.Unit> block);
+ method public static inline <reified T extends android.view.ViewGroup.LayoutParams> void updateLayoutParamsTyped(android.view.View, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+ method public static inline void updatePadding(android.view.View, @Px int left = paddingLeft, @Px int top = paddingTop, @Px int right = paddingRight, @Px int bottom = paddingBottom);
+ method @RequiresApi(17) public static inline void updatePaddingRelative(android.view.View, @Px int start = paddingStart, @Px int top = paddingTop, @Px int end = paddingEnd, @Px int bottom = paddingBottom);
+ }
+
+}
+
+package androidx.core.widget {
+
+ public final class TextViewKt {
+ ctor public TextViewKt();
+ method public static inline android.text.TextWatcher addTextChangedListener(android.widget.TextView, kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> beforeTextChanged = { _, _, _, _ -> }, kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> _, _, _, _ -> }, kotlin.jvm.functions.Function1<? super android.text.Editable,kotlin.Unit> afterTextChanged = {});
+ method public static inline android.text.TextWatcher doAfterTextChanged(android.widget.TextView, kotlin.jvm.functions.Function1<? super android.text.Editable,kotlin.Unit> action);
+ method public static inline android.text.TextWatcher doBeforeTextChanged(android.widget.TextView, kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> action);
+ method public static inline android.text.TextWatcher doOnTextChanged(android.widget.TextView, kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> action);
+ }
+
+}
+
diff --git a/core/core-role/api/1.0.0-beta01.txt b/core/core-role/api/1.0.0-beta01.txt
new file mode 100644
index 0000000..9ebbd90
--- /dev/null
+++ b/core/core-role/api/1.0.0-beta01.txt
@@ -0,0 +1,16 @@
+// Signature format: 3.0
+package androidx.core.role {
+
+ public final class RoleManagerCompat {
+ field public static final String ROLE_ASSISTANT = "android.app.role.ASSISTANT";
+ field public static final String ROLE_BROWSER = "android.app.role.BROWSER";
+ field public static final String ROLE_CALL_REDIRECTION = "android.app.role.CALL_REDIRECTION";
+ field public static final String ROLE_CALL_SCREENING = "android.app.role.CALL_SCREENING";
+ field public static final String ROLE_DIALER = "android.app.role.DIALER";
+ field public static final String ROLE_EMERGENCY = "android.app.role.EMERGENCY";
+ field public static final String ROLE_HOME = "android.app.role.HOME";
+ field public static final String ROLE_SMS = "android.app.role.SMS";
+ }
+
+}
+
diff --git a/core/core-role/api/public_plus_experimental_1.0.0-beta01.txt b/core/core-role/api/public_plus_experimental_1.0.0-beta01.txt
new file mode 100644
index 0000000..9ebbd90
--- /dev/null
+++ b/core/core-role/api/public_plus_experimental_1.0.0-beta01.txt
@@ -0,0 +1,16 @@
+// Signature format: 3.0
+package androidx.core.role {
+
+ public final class RoleManagerCompat {
+ field public static final String ROLE_ASSISTANT = "android.app.role.ASSISTANT";
+ field public static final String ROLE_BROWSER = "android.app.role.BROWSER";
+ field public static final String ROLE_CALL_REDIRECTION = "android.app.role.CALL_REDIRECTION";
+ field public static final String ROLE_CALL_SCREENING = "android.app.role.CALL_SCREENING";
+ field public static final String ROLE_DIALER = "android.app.role.DIALER";
+ field public static final String ROLE_EMERGENCY = "android.app.role.EMERGENCY";
+ field public static final String ROLE_HOME = "android.app.role.HOME";
+ field public static final String ROLE_SMS = "android.app.role.SMS";
+ }
+
+}
+
diff --git a/core/core-role/api/res-1.0.0-beta01.txt b/core/core-role/api/res-1.0.0-beta01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/core/core-role/api/res-1.0.0-beta01.txt
diff --git a/core/core-role/api/restricted_1.0.0-beta01.txt b/core/core-role/api/restricted_1.0.0-beta01.txt
new file mode 100644
index 0000000..9ebbd90
--- /dev/null
+++ b/core/core-role/api/restricted_1.0.0-beta01.txt
@@ -0,0 +1,16 @@
+// Signature format: 3.0
+package androidx.core.role {
+
+ public final class RoleManagerCompat {
+ field public static final String ROLE_ASSISTANT = "android.app.role.ASSISTANT";
+ field public static final String ROLE_BROWSER = "android.app.role.BROWSER";
+ field public static final String ROLE_CALL_REDIRECTION = "android.app.role.CALL_REDIRECTION";
+ field public static final String ROLE_CALL_SCREENING = "android.app.role.CALL_SCREENING";
+ field public static final String ROLE_DIALER = "android.app.role.DIALER";
+ field public static final String ROLE_EMERGENCY = "android.app.role.EMERGENCY";
+ field public static final String ROLE_HOME = "android.app.role.HOME";
+ field public static final String ROLE_SMS = "android.app.role.SMS";
+ }
+
+}
+
diff --git a/core/core/api/1.2.0-beta02.txt b/core/core/api/1.2.0-beta02.txt
index 19f1ef5..b962a95 100644
--- a/core/core/api/1.2.0-beta02.txt
+++ b/core/core/api/1.2.0-beta02.txt
@@ -1306,7 +1306,7 @@
}
public final class EnvironmentCompat {
- method public static String! getStorageState(java.io.File);
+ method public static String getStorageState(java.io.File);
field public static final String MEDIA_UNKNOWN = "unknown";
}
diff --git a/core/core/api/1.3.0-alpha01.txt b/core/core/api/1.3.0-alpha01.txt
new file mode 100644
index 0000000..b962a95
--- /dev/null
+++ b/core/core/api/1.3.0-alpha01.txt
@@ -0,0 +1,3072 @@
+// Signature format: 3.0
+package androidx.core.accessibilityservice {
+
+ public final class AccessibilityServiceInfoCompat {
+ method public static String capabilityToString(int);
+ method public static String feedbackTypeToString(int);
+ method public static String? flagToString(int);
+ method public static int getCapabilities(android.accessibilityservice.AccessibilityServiceInfo);
+ method public static String? loadDescription(android.accessibilityservice.AccessibilityServiceInfo, android.content.pm.PackageManager);
+ field public static final int CAPABILITY_CAN_FILTER_KEY_EVENTS = 8; // 0x8
+ field public static final int CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 4; // 0x4
+ field public static final int CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION = 2; // 0x2
+ field public static final int CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT = 1; // 0x1
+ field public static final int FEEDBACK_ALL_MASK = -1; // 0xffffffff
+ field public static final int FEEDBACK_BRAILLE = 32; // 0x20
+ field public static final int FLAG_INCLUDE_NOT_IMPORTANT_VIEWS = 2; // 0x2
+ field public static final int FLAG_REPORT_VIEW_IDS = 16; // 0x10
+ field public static final int FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 8; // 0x8
+ field public static final int FLAG_REQUEST_FILTER_KEY_EVENTS = 32; // 0x20
+ field public static final int FLAG_REQUEST_TOUCH_EXPLORATION_MODE = 4; // 0x4
+ }
+
+}
+
+package androidx.core.app {
+
+ public class ActivityCompat extends androidx.core.content.ContextCompat {
+ ctor protected ActivityCompat();
+ method public static void finishAffinity(android.app.Activity);
+ method public static void finishAfterTransition(android.app.Activity);
+ method public static android.net.Uri? getReferrer(android.app.Activity);
+ method @Deprecated public static boolean invalidateOptionsMenu(android.app.Activity!);
+ method public static void postponeEnterTransition(android.app.Activity);
+ method public static void recreate(android.app.Activity);
+ method public static androidx.core.view.DragAndDropPermissionsCompat? requestDragAndDropPermissions(android.app.Activity!, android.view.DragEvent!);
+ method public static void requestPermissions(android.app.Activity, String![], @IntRange(from=0) int);
+ method public static <T extends android.view.View> T requireViewById(android.app.Activity, @IdRes int);
+ method public static void setEnterSharedElementCallback(android.app.Activity, androidx.core.app.SharedElementCallback?);
+ method public static void setExitSharedElementCallback(android.app.Activity, androidx.core.app.SharedElementCallback?);
+ method public static void setPermissionCompatDelegate(androidx.core.app.ActivityCompat.PermissionCompatDelegate?);
+ method public static boolean shouldShowRequestPermissionRationale(android.app.Activity, String);
+ method public static void startActivityForResult(android.app.Activity, android.content.Intent, int, android.os.Bundle?);
+ method public static void startIntentSenderForResult(android.app.Activity, android.content.IntentSender, int, android.content.Intent?, int, int, int, android.os.Bundle?) throws android.content.IntentSender.SendIntentException;
+ method public static void startPostponedEnterTransition(android.app.Activity);
+ }
+
+ public static interface ActivityCompat.OnRequestPermissionsResultCallback {
+ method public void onRequestPermissionsResult(int, String![], int[]);
+ }
+
+ public static interface ActivityCompat.PermissionCompatDelegate {
+ method public boolean onActivityResult(android.app.Activity, @IntRange(from=0) int, int, android.content.Intent?);
+ method public boolean requestPermissions(android.app.Activity, String![], @IntRange(from=0) int);
+ }
+
+ public final class ActivityManagerCompat {
+ method public static boolean isLowRamDevice(android.app.ActivityManager);
+ }
+
+ public class ActivityOptionsCompat {
+ ctor protected ActivityOptionsCompat();
+ method public android.graphics.Rect? getLaunchBounds();
+ method public static androidx.core.app.ActivityOptionsCompat makeBasic();
+ method public static androidx.core.app.ActivityOptionsCompat makeClipRevealAnimation(android.view.View, int, int, int, int);
+ method public static androidx.core.app.ActivityOptionsCompat makeCustomAnimation(android.content.Context, int, int);
+ method public static androidx.core.app.ActivityOptionsCompat makeScaleUpAnimation(android.view.View, int, int, int, int);
+ method public static androidx.core.app.ActivityOptionsCompat makeSceneTransitionAnimation(android.app.Activity, android.view.View, String);
+ method public static androidx.core.app.ActivityOptionsCompat makeSceneTransitionAnimation(android.app.Activity, androidx.core.util.Pair<android.view.View!,java.lang.String!>!...);
+ method public static androidx.core.app.ActivityOptionsCompat makeTaskLaunchBehind();
+ method public static androidx.core.app.ActivityOptionsCompat makeThumbnailScaleUpAnimation(android.view.View, android.graphics.Bitmap, int, int);
+ method public void requestUsageTimeReport(android.app.PendingIntent);
+ method public androidx.core.app.ActivityOptionsCompat setLaunchBounds(android.graphics.Rect?);
+ method public android.os.Bundle? toBundle();
+ method public void update(androidx.core.app.ActivityOptionsCompat);
+ field public static final String EXTRA_USAGE_TIME_REPORT = "android.activity.usage_time";
+ field public static final String EXTRA_USAGE_TIME_REPORT_PACKAGES = "android.usage_time_packages";
+ }
+
+ public final class AlarmManagerCompat {
+ method public static void setAlarmClock(android.app.AlarmManager, long, android.app.PendingIntent, android.app.PendingIntent);
+ method public static void setAndAllowWhileIdle(android.app.AlarmManager, int, long, android.app.PendingIntent);
+ method public static void setExact(android.app.AlarmManager, int, long, android.app.PendingIntent);
+ method public static void setExactAndAllowWhileIdle(android.app.AlarmManager, int, long, android.app.PendingIntent);
+ }
+
+ @RequiresApi(28) public class AppComponentFactory extends android.app.AppComponentFactory {
+ ctor public AppComponentFactory();
+ method public final android.app.Activity instantiateActivity(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public android.app.Activity instantiateActivityCompat(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public final android.app.Application instantiateApplication(ClassLoader, String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public android.app.Application instantiateApplicationCompat(ClassLoader, String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public final android.content.ContentProvider instantiateProvider(ClassLoader, String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public android.content.ContentProvider instantiateProviderCompat(ClassLoader, String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public final android.content.BroadcastReceiver instantiateReceiver(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public android.content.BroadcastReceiver instantiateReceiverCompat(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public final android.app.Service instantiateService(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public android.app.Service instantiateServiceCompat(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ }
+
+ public class AppLaunchChecker {
+ ctor @Deprecated public AppLaunchChecker();
+ method public static boolean hasStartedFromLauncher(android.content.Context);
+ method public static void onActivityCreate(android.app.Activity);
+ }
+
+ public final class AppOpsManagerCompat {
+ method public static int noteOp(android.content.Context, String, int, String);
+ method public static int noteOpNoThrow(android.content.Context, String, int, String);
+ method public static int noteProxyOp(android.content.Context, String, String);
+ method public static int noteProxyOpNoThrow(android.content.Context, String, String);
+ method public static String? permissionToOp(String);
+ field public static final int MODE_ALLOWED = 0; // 0x0
+ field public static final int MODE_DEFAULT = 3; // 0x3
+ field public static final int MODE_ERRORED = 2; // 0x2
+ field public static final int MODE_IGNORED = 1; // 0x1
+ }
+
+ public final class BundleCompat {
+ method public static android.os.IBinder? getBinder(android.os.Bundle, String?);
+ method public static void putBinder(android.os.Bundle, String?, android.os.IBinder?);
+ }
+
+ public class DialogCompat {
+ method public static android.view.View requireViewById(android.app.Dialog, int);
+ }
+
+ public class FrameMetricsAggregator {
+ ctor public FrameMetricsAggregator();
+ ctor public FrameMetricsAggregator(int);
+ method public void add(android.app.Activity);
+ method public android.util.SparseIntArray![]? getMetrics();
+ method public android.util.SparseIntArray![]? remove(android.app.Activity);
+ method public android.util.SparseIntArray![]? reset();
+ method public android.util.SparseIntArray![]? stop();
+ field public static final int ANIMATION_DURATION = 256; // 0x100
+ field public static final int ANIMATION_INDEX = 8; // 0x8
+ field public static final int COMMAND_DURATION = 32; // 0x20
+ field public static final int COMMAND_INDEX = 5; // 0x5
+ field public static final int DELAY_DURATION = 128; // 0x80
+ field public static final int DELAY_INDEX = 7; // 0x7
+ field public static final int DRAW_DURATION = 8; // 0x8
+ field public static final int DRAW_INDEX = 3; // 0x3
+ field public static final int EVERY_DURATION = 511; // 0x1ff
+ field public static final int INPUT_DURATION = 2; // 0x2
+ field public static final int INPUT_INDEX = 1; // 0x1
+ field public static final int LAYOUT_MEASURE_DURATION = 4; // 0x4
+ field public static final int LAYOUT_MEASURE_INDEX = 2; // 0x2
+ field public static final int SWAP_DURATION = 64; // 0x40
+ field public static final int SWAP_INDEX = 6; // 0x6
+ field public static final int SYNC_DURATION = 16; // 0x10
+ field public static final int SYNC_INDEX = 4; // 0x4
+ field public static final int TOTAL_DURATION = 1; // 0x1
+ field public static final int TOTAL_INDEX = 0; // 0x0
+ }
+
+ public abstract class JobIntentService extends android.app.Service {
+ ctor public JobIntentService();
+ method public static void enqueueWork(android.content.Context, Class<?>, int, android.content.Intent);
+ method public static void enqueueWork(android.content.Context, android.content.ComponentName, int, android.content.Intent);
+ method public boolean isStopped();
+ method public android.os.IBinder! onBind(android.content.Intent);
+ method protected abstract void onHandleWork(android.content.Intent);
+ method public boolean onStopCurrentWork();
+ method public void setInterruptIfStopped(boolean);
+ }
+
+ public final class NavUtils {
+ method public static android.content.Intent? getParentActivityIntent(android.app.Activity);
+ method public static android.content.Intent? getParentActivityIntent(android.content.Context, Class<?>) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public static android.content.Intent? getParentActivityIntent(android.content.Context, android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public static String? getParentActivityName(android.app.Activity);
+ method public static String? getParentActivityName(android.content.Context, android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public static void navigateUpFromSameTask(android.app.Activity);
+ method public static void navigateUpTo(android.app.Activity, android.content.Intent);
+ method public static boolean shouldUpRecreateTask(android.app.Activity, android.content.Intent);
+ field public static final String PARENT_ACTIVITY = "android.support.PARENT_ACTIVITY";
+ }
+
+ public class NotificationCompat {
+ ctor @Deprecated public NotificationCompat();
+ method public static androidx.core.app.NotificationCompat.Action! getAction(android.app.Notification!, int);
+ method public static int getActionCount(android.app.Notification!);
+ method public static boolean getAllowSystemGeneratedContextualActions(android.app.Notification!);
+ method public static int getBadgeIconType(android.app.Notification!);
+ method public static androidx.core.app.NotificationCompat.BubbleMetadata? getBubbleMetadata(android.app.Notification);
+ method public static String! getCategory(android.app.Notification!);
+ method public static String! getChannelId(android.app.Notification!);
+ method @RequiresApi(19) public static CharSequence! getContentTitle(android.app.Notification!);
+ method public static android.os.Bundle? getExtras(android.app.Notification!);
+ method public static String! getGroup(android.app.Notification!);
+ method public static int getGroupAlertBehavior(android.app.Notification!);
+ method @RequiresApi(21) public static java.util.List<androidx.core.app.NotificationCompat.Action!>! getInvisibleActions(android.app.Notification!);
+ method public static boolean getLocalOnly(android.app.Notification!);
+ method public static String! getShortcutId(android.app.Notification!);
+ method public static String! getSortKey(android.app.Notification!);
+ method public static long getTimeoutAfter(android.app.Notification!);
+ method public static boolean isGroupSummary(android.app.Notification!);
+ field public static final int BADGE_ICON_LARGE = 2; // 0x2
+ field public static final int BADGE_ICON_NONE = 0; // 0x0
+ field public static final int BADGE_ICON_SMALL = 1; // 0x1
+ field public static final String CATEGORY_ALARM = "alarm";
+ field public static final String CATEGORY_CALL = "call";
+ field public static final String CATEGORY_EMAIL = "email";
+ field public static final String CATEGORY_ERROR = "err";
+ field public static final String CATEGORY_EVENT = "event";
+ field public static final String CATEGORY_MESSAGE = "msg";
+ field public static final String CATEGORY_NAVIGATION = "navigation";
+ field public static final String CATEGORY_PROGRESS = "progress";
+ field public static final String CATEGORY_PROMO = "promo";
+ field public static final String CATEGORY_RECOMMENDATION = "recommendation";
+ field public static final String CATEGORY_REMINDER = "reminder";
+ field public static final String CATEGORY_SERVICE = "service";
+ field public static final String CATEGORY_SOCIAL = "social";
+ field public static final String CATEGORY_STATUS = "status";
+ field public static final String CATEGORY_SYSTEM = "sys";
+ field public static final String CATEGORY_TRANSPORT = "transport";
+ field @ColorInt public static final int COLOR_DEFAULT = 0; // 0x0
+ field public static final int DEFAULT_ALL = -1; // 0xffffffff
+ field public static final int DEFAULT_LIGHTS = 4; // 0x4
+ field public static final int DEFAULT_SOUND = 1; // 0x1
+ field public static final int DEFAULT_VIBRATE = 2; // 0x2
+ field public static final String EXTRA_AUDIO_CONTENTS_URI = "android.audioContents";
+ field public static final String EXTRA_BACKGROUND_IMAGE_URI = "android.backgroundImageUri";
+ field public static final String EXTRA_BIG_TEXT = "android.bigText";
+ field public static final String EXTRA_CHRONOMETER_COUNT_DOWN = "android.chronometerCountDown";
+ field public static final String EXTRA_COMPACT_ACTIONS = "android.compactActions";
+ field public static final String EXTRA_CONVERSATION_TITLE = "android.conversationTitle";
+ field public static final String EXTRA_HIDDEN_CONVERSATION_TITLE = "android.hiddenConversationTitle";
+ field public static final String EXTRA_INFO_TEXT = "android.infoText";
+ field public static final String EXTRA_IS_GROUP_CONVERSATION = "android.isGroupConversation";
+ field public static final String EXTRA_LARGE_ICON = "android.largeIcon";
+ field public static final String EXTRA_LARGE_ICON_BIG = "android.largeIcon.big";
+ field public static final String EXTRA_MEDIA_SESSION = "android.mediaSession";
+ field public static final String EXTRA_MESSAGES = "android.messages";
+ field public static final String EXTRA_MESSAGING_STYLE_USER = "android.messagingStyleUser";
+ field public static final String EXTRA_PEOPLE = "android.people";
+ field public static final String EXTRA_PICTURE = "android.picture";
+ field public static final String EXTRA_PROGRESS = "android.progress";
+ field public static final String EXTRA_PROGRESS_INDETERMINATE = "android.progressIndeterminate";
+ field public static final String EXTRA_PROGRESS_MAX = "android.progressMax";
+ field public static final String EXTRA_REMOTE_INPUT_HISTORY = "android.remoteInputHistory";
+ field public static final String EXTRA_SELF_DISPLAY_NAME = "android.selfDisplayName";
+ field public static final String EXTRA_SHOW_CHRONOMETER = "android.showChronometer";
+ field public static final String EXTRA_SHOW_WHEN = "android.showWhen";
+ field public static final String EXTRA_SMALL_ICON = "android.icon";
+ field public static final String EXTRA_SUB_TEXT = "android.subText";
+ field public static final String EXTRA_SUMMARY_TEXT = "android.summaryText";
+ field public static final String EXTRA_TEMPLATE = "android.template";
+ field public static final String EXTRA_TEXT = "android.text";
+ field public static final String EXTRA_TEXT_LINES = "android.textLines";
+ field public static final String EXTRA_TITLE = "android.title";
+ field public static final String EXTRA_TITLE_BIG = "android.title.big";
+ field public static final int FLAG_AUTO_CANCEL = 16; // 0x10
+ field public static final int FLAG_BUBBLE = 4096; // 0x1000
+ field public static final int FLAG_FOREGROUND_SERVICE = 64; // 0x40
+ field public static final int FLAG_GROUP_SUMMARY = 512; // 0x200
+ field @Deprecated public static final int FLAG_HIGH_PRIORITY = 128; // 0x80
+ field public static final int FLAG_INSISTENT = 4; // 0x4
+ field public static final int FLAG_LOCAL_ONLY = 256; // 0x100
+ field public static final int FLAG_NO_CLEAR = 32; // 0x20
+ field public static final int FLAG_ONGOING_EVENT = 2; // 0x2
+ field public static final int FLAG_ONLY_ALERT_ONCE = 8; // 0x8
+ field public static final int FLAG_SHOW_LIGHTS = 1; // 0x1
+ field public static final int GROUP_ALERT_ALL = 0; // 0x0
+ field public static final int GROUP_ALERT_CHILDREN = 2; // 0x2
+ field public static final int GROUP_ALERT_SUMMARY = 1; // 0x1
+ field public static final int PRIORITY_DEFAULT = 0; // 0x0
+ field public static final int PRIORITY_HIGH = 1; // 0x1
+ field public static final int PRIORITY_LOW = -1; // 0xffffffff
+ field public static final int PRIORITY_MAX = 2; // 0x2
+ field public static final int PRIORITY_MIN = -2; // 0xfffffffe
+ field public static final int STREAM_DEFAULT = -1; // 0xffffffff
+ field public static final int VISIBILITY_PRIVATE = 0; // 0x0
+ field public static final int VISIBILITY_PUBLIC = 1; // 0x1
+ field public static final int VISIBILITY_SECRET = -1; // 0xffffffff
+ }
+
+ public static class NotificationCompat.Action {
+ ctor public NotificationCompat.Action(int, CharSequence!, android.app.PendingIntent!);
+ ctor public NotificationCompat.Action(androidx.core.graphics.drawable.IconCompat?, CharSequence?, android.app.PendingIntent?);
+ method public android.app.PendingIntent! getActionIntent();
+ method public boolean getAllowGeneratedReplies();
+ method public androidx.core.app.RemoteInput![]! getDataOnlyRemoteInputs();
+ method public android.os.Bundle! getExtras();
+ method @Deprecated public int getIcon();
+ method public androidx.core.graphics.drawable.IconCompat? getIconCompat();
+ method public androidx.core.app.RemoteInput![]! getRemoteInputs();
+ method @androidx.core.app.NotificationCompat.Action.SemanticAction public int getSemanticAction();
+ method public boolean getShowsUserInterface();
+ method public CharSequence! getTitle();
+ method public boolean isContextual();
+ field public static final int SEMANTIC_ACTION_ARCHIVE = 5; // 0x5
+ field public static final int SEMANTIC_ACTION_CALL = 10; // 0xa
+ field public static final int SEMANTIC_ACTION_DELETE = 4; // 0x4
+ field public static final int SEMANTIC_ACTION_MARK_AS_READ = 2; // 0x2
+ field public static final int SEMANTIC_ACTION_MARK_AS_UNREAD = 3; // 0x3
+ field public static final int SEMANTIC_ACTION_MUTE = 6; // 0x6
+ field public static final int SEMANTIC_ACTION_NONE = 0; // 0x0
+ field public static final int SEMANTIC_ACTION_REPLY = 1; // 0x1
+ field public static final int SEMANTIC_ACTION_THUMBS_DOWN = 9; // 0x9
+ field public static final int SEMANTIC_ACTION_THUMBS_UP = 8; // 0x8
+ field public static final int SEMANTIC_ACTION_UNMUTE = 7; // 0x7
+ field public android.app.PendingIntent! actionIntent;
+ field @Deprecated public int icon;
+ field public CharSequence! title;
+ }
+
+ public static final class NotificationCompat.Action.Builder {
+ ctor public NotificationCompat.Action.Builder(androidx.core.graphics.drawable.IconCompat?, CharSequence?, android.app.PendingIntent?);
+ ctor public NotificationCompat.Action.Builder(int, CharSequence!, android.app.PendingIntent!);
+ ctor public NotificationCompat.Action.Builder(androidx.core.app.NotificationCompat.Action!);
+ method public androidx.core.app.NotificationCompat.Action.Builder! addExtras(android.os.Bundle!);
+ method public androidx.core.app.NotificationCompat.Action.Builder! addRemoteInput(androidx.core.app.RemoteInput!);
+ method public androidx.core.app.NotificationCompat.Action! build();
+ method public androidx.core.app.NotificationCompat.Action.Builder! extend(androidx.core.app.NotificationCompat.Action.Extender!);
+ method public android.os.Bundle! getExtras();
+ method public androidx.core.app.NotificationCompat.Action.Builder! setAllowGeneratedReplies(boolean);
+ method public androidx.core.app.NotificationCompat.Action.Builder setContextual(boolean);
+ method public androidx.core.app.NotificationCompat.Action.Builder! setSemanticAction(@androidx.core.app.NotificationCompat.Action.SemanticAction int);
+ method public androidx.core.app.NotificationCompat.Action.Builder! setShowsUserInterface(boolean);
+ }
+
+ public static interface NotificationCompat.Action.Extender {
+ method public androidx.core.app.NotificationCompat.Action.Builder! extend(androidx.core.app.NotificationCompat.Action.Builder!);
+ }
+
+ @IntDef({androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_NONE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_REPLY, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_MARK_AS_READ, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_MARK_AS_UNREAD, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_DELETE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_ARCHIVE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_MUTE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_UNMUTE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_THUMBS_UP, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_THUMBS_DOWN, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_CALL}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface NotificationCompat.Action.SemanticAction {
+ }
+
+ public static final class NotificationCompat.Action.WearableExtender implements androidx.core.app.NotificationCompat.Action.Extender {
+ ctor public NotificationCompat.Action.WearableExtender();
+ ctor public NotificationCompat.Action.WearableExtender(androidx.core.app.NotificationCompat.Action!);
+ method public androidx.core.app.NotificationCompat.Action.WearableExtender! clone();
+ method public androidx.core.app.NotificationCompat.Action.Builder! extend(androidx.core.app.NotificationCompat.Action.Builder!);
+ method @Deprecated public CharSequence! getCancelLabel();
+ method @Deprecated public CharSequence! getConfirmLabel();
+ method public boolean getHintDisplayActionInline();
+ method public boolean getHintLaunchesActivity();
+ method @Deprecated public CharSequence! getInProgressLabel();
+ method public boolean isAvailableOffline();
+ method public androidx.core.app.NotificationCompat.Action.WearableExtender! setAvailableOffline(boolean);
+ method @Deprecated public androidx.core.app.NotificationCompat.Action.WearableExtender! setCancelLabel(CharSequence!);
+ method @Deprecated public androidx.core.app.NotificationCompat.Action.WearableExtender! setConfirmLabel(CharSequence!);
+ method public androidx.core.app.NotificationCompat.Action.WearableExtender! setHintDisplayActionInline(boolean);
+ method public androidx.core.app.NotificationCompat.Action.WearableExtender! setHintLaunchesActivity(boolean);
+ method @Deprecated public androidx.core.app.NotificationCompat.Action.WearableExtender! setInProgressLabel(CharSequence!);
+ }
+
+ public static class NotificationCompat.BigPictureStyle extends androidx.core.app.NotificationCompat.Style {
+ ctor public NotificationCompat.BigPictureStyle();
+ ctor public NotificationCompat.BigPictureStyle(androidx.core.app.NotificationCompat.Builder!);
+ method public androidx.core.app.NotificationCompat.BigPictureStyle! bigLargeIcon(android.graphics.Bitmap!);
+ method public androidx.core.app.NotificationCompat.BigPictureStyle! bigPicture(android.graphics.Bitmap!);
+ method public androidx.core.app.NotificationCompat.BigPictureStyle! setBigContentTitle(CharSequence!);
+ method public androidx.core.app.NotificationCompat.BigPictureStyle! setSummaryText(CharSequence!);
+ }
+
+ public static class NotificationCompat.BigTextStyle extends androidx.core.app.NotificationCompat.Style {
+ ctor public NotificationCompat.BigTextStyle();
+ ctor public NotificationCompat.BigTextStyle(androidx.core.app.NotificationCompat.Builder!);
+ method public androidx.core.app.NotificationCompat.BigTextStyle! bigText(CharSequence!);
+ method public androidx.core.app.NotificationCompat.BigTextStyle! setBigContentTitle(CharSequence!);
+ method public androidx.core.app.NotificationCompat.BigTextStyle! setSummaryText(CharSequence!);
+ }
+
+ public static final class NotificationCompat.BubbleMetadata {
+ method @RequiresApi(29) public static androidx.core.app.NotificationCompat.BubbleMetadata? fromPlatform(android.app.Notification.BubbleMetadata?);
+ method public boolean getAutoExpandBubble();
+ method public android.app.PendingIntent? getDeleteIntent();
+ method @Dimension(unit=androidx.annotation.Dimension.DP) public int getDesiredHeight();
+ method @DimenRes public int getDesiredHeightResId();
+ method public androidx.core.graphics.drawable.IconCompat getIcon();
+ method public android.app.PendingIntent getIntent();
+ method public boolean isNotificationSuppressed();
+ method @RequiresApi(29) public static android.app.Notification.BubbleMetadata? toPlatform(androidx.core.app.NotificationCompat.BubbleMetadata?);
+ }
+
+ public static final class NotificationCompat.BubbleMetadata.Builder {
+ ctor public NotificationCompat.BubbleMetadata.Builder();
+ method public androidx.core.app.NotificationCompat.BubbleMetadata build();
+ method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setAutoExpandBubble(boolean);
+ method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setDeleteIntent(android.app.PendingIntent?);
+ method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setDesiredHeight(@Dimension(unit=androidx.annotation.Dimension.DP) int);
+ method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setDesiredHeightResId(@DimenRes int);
+ method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setIcon(androidx.core.graphics.drawable.IconCompat);
+ method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setIntent(android.app.PendingIntent);
+ method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setSuppressNotification(boolean);
+ }
+
+ public static class NotificationCompat.Builder {
+ ctor public NotificationCompat.Builder(android.content.Context, String);
+ ctor @Deprecated public NotificationCompat.Builder(android.content.Context!);
+ method public androidx.core.app.NotificationCompat.Builder! addAction(int, CharSequence!, android.app.PendingIntent!);
+ method public androidx.core.app.NotificationCompat.Builder! addAction(androidx.core.app.NotificationCompat.Action!);
+ method public androidx.core.app.NotificationCompat.Builder! addExtras(android.os.Bundle!);
+ method @RequiresApi(21) public androidx.core.app.NotificationCompat.Builder! addInvisibleAction(int, CharSequence!, android.app.PendingIntent!);
+ method @RequiresApi(21) public androidx.core.app.NotificationCompat.Builder! addInvisibleAction(androidx.core.app.NotificationCompat.Action!);
+ method public androidx.core.app.NotificationCompat.Builder! addPerson(String!);
+ method public android.app.Notification! build();
+ method public androidx.core.app.NotificationCompat.Builder! extend(androidx.core.app.NotificationCompat.Extender!);
+ method public android.os.Bundle! getExtras();
+ method @Deprecated public android.app.Notification! getNotification();
+ method protected static CharSequence! limitCharSequenceLength(CharSequence!);
+ method public androidx.core.app.NotificationCompat.Builder setAllowSystemGeneratedContextualActions(boolean);
+ method public androidx.core.app.NotificationCompat.Builder! setAutoCancel(boolean);
+ method public androidx.core.app.NotificationCompat.Builder! setBadgeIconType(int);
+ method public androidx.core.app.NotificationCompat.Builder setBubbleMetadata(androidx.core.app.NotificationCompat.BubbleMetadata?);
+ method public androidx.core.app.NotificationCompat.Builder! setCategory(String!);
+ method public androidx.core.app.NotificationCompat.Builder! setChannelId(String);
+ method @RequiresApi(24) public androidx.core.app.NotificationCompat.Builder setChronometerCountDown(boolean);
+ method public androidx.core.app.NotificationCompat.Builder! setColor(@ColorInt int);
+ method public androidx.core.app.NotificationCompat.Builder! setColorized(boolean);
+ method public androidx.core.app.NotificationCompat.Builder! setContent(android.widget.RemoteViews!);
+ method public androidx.core.app.NotificationCompat.Builder! setContentInfo(CharSequence!);
+ method public androidx.core.app.NotificationCompat.Builder! setContentIntent(android.app.PendingIntent!);
+ method public androidx.core.app.NotificationCompat.Builder! setContentText(CharSequence!);
+ method public androidx.core.app.NotificationCompat.Builder! setContentTitle(CharSequence!);
+ method public androidx.core.app.NotificationCompat.Builder! setCustomBigContentView(android.widget.RemoteViews!);
+ method public androidx.core.app.NotificationCompat.Builder! setCustomContentView(android.widget.RemoteViews!);
+ method public androidx.core.app.NotificationCompat.Builder! setCustomHeadsUpContentView(android.widget.RemoteViews!);
+ method public androidx.core.app.NotificationCompat.Builder! setDefaults(int);
+ method public androidx.core.app.NotificationCompat.Builder! setDeleteIntent(android.app.PendingIntent!);
+ method public androidx.core.app.NotificationCompat.Builder! setExtras(android.os.Bundle!);
+ method public androidx.core.app.NotificationCompat.Builder! setFullScreenIntent(android.app.PendingIntent!, boolean);
+ method public androidx.core.app.NotificationCompat.Builder! setGroup(String!);
+ method public androidx.core.app.NotificationCompat.Builder! setGroupAlertBehavior(int);
+ method public androidx.core.app.NotificationCompat.Builder! setGroupSummary(boolean);
+ method public androidx.core.app.NotificationCompat.Builder! setLargeIcon(android.graphics.Bitmap!);
+ method public androidx.core.app.NotificationCompat.Builder! setLights(@ColorInt int, int, int);
+ method public androidx.core.app.NotificationCompat.Builder! setLocalOnly(boolean);
+ method public androidx.core.app.NotificationCompat.Builder! setNumber(int);
+ method public androidx.core.app.NotificationCompat.Builder! setOngoing(boolean);
+ method public androidx.core.app.NotificationCompat.Builder! setOnlyAlertOnce(boolean);
+ method public androidx.core.app.NotificationCompat.Builder! setPriority(int);
+ method public androidx.core.app.NotificationCompat.Builder! setProgress(int, int, boolean);
+ method public androidx.core.app.NotificationCompat.Builder! setPublicVersion(android.app.Notification!);
+ method public androidx.core.app.NotificationCompat.Builder! setRemoteInputHistory(CharSequence![]!);
+ method public androidx.core.app.NotificationCompat.Builder! setShortcutId(String!);
+ method public androidx.core.app.NotificationCompat.Builder! setShowWhen(boolean);
+ method public androidx.core.app.NotificationCompat.Builder! setSmallIcon(int);
+ method public androidx.core.app.NotificationCompat.Builder! setSmallIcon(int, int);
+ method public androidx.core.app.NotificationCompat.Builder! setSortKey(String!);
+ method public androidx.core.app.NotificationCompat.Builder! setSound(android.net.Uri!);
+ method public androidx.core.app.NotificationCompat.Builder! setSound(android.net.Uri!, int);
+ method public androidx.core.app.NotificationCompat.Builder! setStyle(androidx.core.app.NotificationCompat.Style!);
+ method public androidx.core.app.NotificationCompat.Builder! setSubText(CharSequence!);
+ method public androidx.core.app.NotificationCompat.Builder! setTicker(CharSequence!);
+ method public androidx.core.app.NotificationCompat.Builder! setTicker(CharSequence!, android.widget.RemoteViews!);
+ method public androidx.core.app.NotificationCompat.Builder! setTimeoutAfter(long);
+ method public androidx.core.app.NotificationCompat.Builder! setUsesChronometer(boolean);
+ method public androidx.core.app.NotificationCompat.Builder! setVibrate(long[]!);
+ method public androidx.core.app.NotificationCompat.Builder! setVisibility(int);
+ method public androidx.core.app.NotificationCompat.Builder! setWhen(long);
+ field @Deprecated public java.util.ArrayList<java.lang.String!>! mPeople;
+ }
+
+ public static final class NotificationCompat.CarExtender implements androidx.core.app.NotificationCompat.Extender {
+ ctor public NotificationCompat.CarExtender();
+ ctor public NotificationCompat.CarExtender(android.app.Notification!);
+ method public androidx.core.app.NotificationCompat.Builder! extend(androidx.core.app.NotificationCompat.Builder!);
+ method @ColorInt public int getColor();
+ method public android.graphics.Bitmap! getLargeIcon();
+ method public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation! getUnreadConversation();
+ method public androidx.core.app.NotificationCompat.CarExtender! setColor(@ColorInt int);
+ method public androidx.core.app.NotificationCompat.CarExtender! setLargeIcon(android.graphics.Bitmap!);
+ method public androidx.core.app.NotificationCompat.CarExtender! setUnreadConversation(androidx.core.app.NotificationCompat.CarExtender.UnreadConversation!);
+ }
+
+ public static class NotificationCompat.CarExtender.UnreadConversation {
+ method public long getLatestTimestamp();
+ method public String![]! getMessages();
+ method public String! getParticipant();
+ method public String![]! getParticipants();
+ method public android.app.PendingIntent! getReadPendingIntent();
+ method public androidx.core.app.RemoteInput! getRemoteInput();
+ method public android.app.PendingIntent! getReplyPendingIntent();
+ }
+
+ public static class NotificationCompat.CarExtender.UnreadConversation.Builder {
+ ctor public NotificationCompat.CarExtender.UnreadConversation.Builder(String!);
+ method public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder! addMessage(String!);
+ method public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation! build();
+ method public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder! setLatestTimestamp(long);
+ method public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder! setReadPendingIntent(android.app.PendingIntent!);
+ method public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder! setReplyAction(android.app.PendingIntent!, androidx.core.app.RemoteInput!);
+ }
+
+ public static class NotificationCompat.DecoratedCustomViewStyle extends androidx.core.app.NotificationCompat.Style {
+ ctor public NotificationCompat.DecoratedCustomViewStyle();
+ }
+
+ public static interface NotificationCompat.Extender {
+ method public androidx.core.app.NotificationCompat.Builder! extend(androidx.core.app.NotificationCompat.Builder!);
+ }
+
+ public static class NotificationCompat.InboxStyle extends androidx.core.app.NotificationCompat.Style {
+ ctor public NotificationCompat.InboxStyle();
+ ctor public NotificationCompat.InboxStyle(androidx.core.app.NotificationCompat.Builder!);
+ method public androidx.core.app.NotificationCompat.InboxStyle! addLine(CharSequence!);
+ method public androidx.core.app.NotificationCompat.InboxStyle! setBigContentTitle(CharSequence!);
+ method public androidx.core.app.NotificationCompat.InboxStyle! setSummaryText(CharSequence!);
+ }
+
+ public static class NotificationCompat.MessagingStyle extends androidx.core.app.NotificationCompat.Style {
+ ctor @Deprecated public NotificationCompat.MessagingStyle(CharSequence);
+ ctor public NotificationCompat.MessagingStyle(androidx.core.app.Person);
+ method public void addCompatExtras(android.os.Bundle!);
+ method @Deprecated public androidx.core.app.NotificationCompat.MessagingStyle! addMessage(CharSequence!, long, CharSequence!);
+ method public androidx.core.app.NotificationCompat.MessagingStyle! addMessage(CharSequence!, long, androidx.core.app.Person!);
+ method public androidx.core.app.NotificationCompat.MessagingStyle! addMessage(androidx.core.app.NotificationCompat.MessagingStyle.Message!);
+ method public static androidx.core.app.NotificationCompat.MessagingStyle? extractMessagingStyleFromNotification(android.app.Notification!);
+ method public CharSequence? getConversationTitle();
+ method public java.util.List<androidx.core.app.NotificationCompat.MessagingStyle.Message!>! getMessages();
+ method public androidx.core.app.Person! getUser();
+ method @Deprecated public CharSequence! getUserDisplayName();
+ method public boolean isGroupConversation();
+ method public androidx.core.app.NotificationCompat.MessagingStyle! setConversationTitle(CharSequence?);
+ method public androidx.core.app.NotificationCompat.MessagingStyle! setGroupConversation(boolean);
+ field public static final int MAXIMUM_RETAINED_MESSAGES = 25; // 0x19
+ }
+
+ public static final class NotificationCompat.MessagingStyle.Message {
+ ctor public NotificationCompat.MessagingStyle.Message(CharSequence!, long, androidx.core.app.Person?);
+ ctor @Deprecated public NotificationCompat.MessagingStyle.Message(CharSequence!, long, CharSequence!);
+ method public String? getDataMimeType();
+ method public android.net.Uri? getDataUri();
+ method public android.os.Bundle getExtras();
+ method public androidx.core.app.Person? getPerson();
+ method @Deprecated public CharSequence? getSender();
+ method public CharSequence getText();
+ method public long getTimestamp();
+ method public androidx.core.app.NotificationCompat.MessagingStyle.Message! setData(String!, android.net.Uri!);
+ }
+
+ public abstract static class NotificationCompat.Style {
+ ctor public NotificationCompat.Style();
+ method public android.app.Notification! build();
+ method public void setBuilder(androidx.core.app.NotificationCompat.Builder!);
+ }
+
+ public static final class NotificationCompat.WearableExtender implements androidx.core.app.NotificationCompat.Extender {
+ ctor public NotificationCompat.WearableExtender();
+ ctor public NotificationCompat.WearableExtender(android.app.Notification!);
+ method public androidx.core.app.NotificationCompat.WearableExtender! addAction(androidx.core.app.NotificationCompat.Action!);
+ method public androidx.core.app.NotificationCompat.WearableExtender! addActions(java.util.List<androidx.core.app.NotificationCompat.Action!>!);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! addPage(android.app.Notification!);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! addPages(java.util.List<android.app.Notification!>!);
+ method public androidx.core.app.NotificationCompat.WearableExtender! clearActions();
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! clearPages();
+ method public androidx.core.app.NotificationCompat.WearableExtender! clone();
+ method public androidx.core.app.NotificationCompat.Builder! extend(androidx.core.app.NotificationCompat.Builder!);
+ method public java.util.List<androidx.core.app.NotificationCompat.Action!>! getActions();
+ method @Deprecated public android.graphics.Bitmap! getBackground();
+ method public String! getBridgeTag();
+ method public int getContentAction();
+ method @Deprecated public int getContentIcon();
+ method @Deprecated public int getContentIconGravity();
+ method public boolean getContentIntentAvailableOffline();
+ method @Deprecated public int getCustomContentHeight();
+ method @Deprecated public int getCustomSizePreset();
+ method public String! getDismissalId();
+ method @Deprecated public android.app.PendingIntent! getDisplayIntent();
+ method @Deprecated public int getGravity();
+ method @Deprecated public boolean getHintAmbientBigPicture();
+ method @Deprecated public boolean getHintAvoidBackgroundClipping();
+ method public boolean getHintContentIntentLaunchesActivity();
+ method @Deprecated public boolean getHintHideIcon();
+ method @Deprecated public int getHintScreenTimeout();
+ method @Deprecated public boolean getHintShowBackgroundOnly();
+ method @Deprecated public java.util.List<android.app.Notification!>! getPages();
+ method public boolean getStartScrollBottom();
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setBackground(android.graphics.Bitmap!);
+ method public androidx.core.app.NotificationCompat.WearableExtender! setBridgeTag(String!);
+ method public androidx.core.app.NotificationCompat.WearableExtender! setContentAction(int);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setContentIcon(int);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setContentIconGravity(int);
+ method public androidx.core.app.NotificationCompat.WearableExtender! setContentIntentAvailableOffline(boolean);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setCustomContentHeight(int);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setCustomSizePreset(int);
+ method public androidx.core.app.NotificationCompat.WearableExtender! setDismissalId(String!);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setDisplayIntent(android.app.PendingIntent!);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setGravity(int);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setHintAmbientBigPicture(boolean);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setHintAvoidBackgroundClipping(boolean);
+ method public androidx.core.app.NotificationCompat.WearableExtender! setHintContentIntentLaunchesActivity(boolean);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setHintHideIcon(boolean);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setHintScreenTimeout(int);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setHintShowBackgroundOnly(boolean);
+ method public androidx.core.app.NotificationCompat.WearableExtender! setStartScrollBottom(boolean);
+ field @Deprecated public static final int SCREEN_TIMEOUT_LONG = -1; // 0xffffffff
+ field @Deprecated public static final int SCREEN_TIMEOUT_SHORT = 0; // 0x0
+ field @Deprecated public static final int SIZE_DEFAULT = 0; // 0x0
+ field @Deprecated public static final int SIZE_FULL_SCREEN = 5; // 0x5
+ field @Deprecated public static final int SIZE_LARGE = 4; // 0x4
+ field @Deprecated public static final int SIZE_MEDIUM = 3; // 0x3
+ field @Deprecated public static final int SIZE_SMALL = 2; // 0x2
+ field @Deprecated public static final int SIZE_XSMALL = 1; // 0x1
+ field public static final int UNSET_ACTION_INDEX = -1; // 0xffffffff
+ }
+
+ public final class NotificationCompatExtras {
+ field public static final String EXTRA_ACTION_EXTRAS = "android.support.actionExtras";
+ field public static final String EXTRA_GROUP_KEY = "android.support.groupKey";
+ field public static final String EXTRA_GROUP_SUMMARY = "android.support.isGroupSummary";
+ field public static final String EXTRA_LOCAL_ONLY = "android.support.localOnly";
+ field public static final String EXTRA_REMOTE_INPUTS = "android.support.remoteInputs";
+ field public static final String EXTRA_SORT_KEY = "android.support.sortKey";
+ }
+
+ public abstract class NotificationCompatSideChannelService extends android.app.Service {
+ ctor public NotificationCompatSideChannelService();
+ method public abstract void cancel(String!, int, String!);
+ method public abstract void cancelAll(String!);
+ method public abstract void notify(String!, int, String!, android.app.Notification!);
+ method public android.os.IBinder! onBind(android.content.Intent!);
+ }
+
+ public final class NotificationManagerCompat {
+ method public boolean areNotificationsEnabled();
+ method public void cancel(int);
+ method public void cancel(String?, int);
+ method public void cancelAll();
+ method public void createNotificationChannel(android.app.NotificationChannel);
+ method public void createNotificationChannelGroup(android.app.NotificationChannelGroup);
+ method public void createNotificationChannelGroups(java.util.List<android.app.NotificationChannelGroup!>);
+ method public void createNotificationChannels(java.util.List<android.app.NotificationChannel!>);
+ method public void deleteNotificationChannel(String);
+ method public void deleteNotificationChannelGroup(String);
+ method public static androidx.core.app.NotificationManagerCompat from(android.content.Context);
+ method public static java.util.Set<java.lang.String!> getEnabledListenerPackages(android.content.Context);
+ method public int getImportance();
+ method public android.app.NotificationChannel? getNotificationChannel(String);
+ method public android.app.NotificationChannelGroup? getNotificationChannelGroup(String);
+ method public java.util.List<android.app.NotificationChannelGroup!> getNotificationChannelGroups();
+ method public java.util.List<android.app.NotificationChannel!> getNotificationChannels();
+ method public void notify(int, android.app.Notification);
+ method public void notify(String?, int, android.app.Notification);
+ field public static final String ACTION_BIND_SIDE_CHANNEL = "android.support.BIND_NOTIFICATION_SIDE_CHANNEL";
+ field public static final String EXTRA_USE_SIDE_CHANNEL = "android.support.useSideChannel";
+ field public static final int IMPORTANCE_DEFAULT = 3; // 0x3
+ field public static final int IMPORTANCE_HIGH = 4; // 0x4
+ field public static final int IMPORTANCE_LOW = 2; // 0x2
+ field public static final int IMPORTANCE_MAX = 5; // 0x5
+ field public static final int IMPORTANCE_MIN = 1; // 0x1
+ field public static final int IMPORTANCE_NONE = 0; // 0x0
+ field public static final int IMPORTANCE_UNSPECIFIED = -1000; // 0xfffffc18
+ }
+
+ public class Person {
+ method public static androidx.core.app.Person fromBundle(android.os.Bundle);
+ method public androidx.core.graphics.drawable.IconCompat? getIcon();
+ method public String? getKey();
+ method public CharSequence? getName();
+ method public String? getUri();
+ method public boolean isBot();
+ method public boolean isImportant();
+ method public androidx.core.app.Person.Builder toBuilder();
+ method public android.os.Bundle toBundle();
+ }
+
+ public static class Person.Builder {
+ ctor public Person.Builder();
+ method public androidx.core.app.Person build();
+ method public androidx.core.app.Person.Builder setBot(boolean);
+ method public androidx.core.app.Person.Builder setIcon(androidx.core.graphics.drawable.IconCompat?);
+ method public androidx.core.app.Person.Builder setImportant(boolean);
+ method public androidx.core.app.Person.Builder setKey(String?);
+ method public androidx.core.app.Person.Builder setName(CharSequence?);
+ method public androidx.core.app.Person.Builder setUri(String?);
+ }
+
+ public final class RemoteActionCompat implements androidx.versionedparcelable.VersionedParcelable {
+ ctor public RemoteActionCompat(androidx.core.graphics.drawable.IconCompat, CharSequence, CharSequence, android.app.PendingIntent);
+ ctor public RemoteActionCompat(androidx.core.app.RemoteActionCompat);
+ method @RequiresApi(26) public static androidx.core.app.RemoteActionCompat createFromRemoteAction(android.app.RemoteAction);
+ method public android.app.PendingIntent getActionIntent();
+ method public CharSequence getContentDescription();
+ method public androidx.core.graphics.drawable.IconCompat getIcon();
+ method public CharSequence getTitle();
+ method public boolean isEnabled();
+ method public void setEnabled(boolean);
+ method public void setShouldShowIcon(boolean);
+ method public boolean shouldShowIcon();
+ method @RequiresApi(26) public android.app.RemoteAction toRemoteAction();
+ }
+
+ public final class RemoteInput {
+ method public static void addDataResultToIntent(androidx.core.app.RemoteInput!, android.content.Intent!, java.util.Map<java.lang.String!,android.net.Uri!>!);
+ method public static void addResultsToIntent(androidx.core.app.RemoteInput![]!, android.content.Intent!, android.os.Bundle!);
+ method public boolean getAllowFreeFormInput();
+ method public java.util.Set<java.lang.String!>! getAllowedDataTypes();
+ method public CharSequence![]! getChoices();
+ method public static java.util.Map<java.lang.String!,android.net.Uri!>! getDataResultsFromIntent(android.content.Intent!, String!);
+ method public int getEditChoicesBeforeSending();
+ method public android.os.Bundle! getExtras();
+ method public CharSequence! getLabel();
+ method public String! getResultKey();
+ method public static android.os.Bundle! getResultsFromIntent(android.content.Intent!);
+ method public static int getResultsSource(android.content.Intent);
+ method public boolean isDataOnly();
+ method public static void setResultsSource(android.content.Intent, int);
+ field public static final int EDIT_CHOICES_BEFORE_SENDING_AUTO = 0; // 0x0
+ field public static final int EDIT_CHOICES_BEFORE_SENDING_DISABLED = 1; // 0x1
+ field public static final int EDIT_CHOICES_BEFORE_SENDING_ENABLED = 2; // 0x2
+ field public static final String EXTRA_RESULTS_DATA = "android.remoteinput.resultsData";
+ field public static final String RESULTS_CLIP_LABEL = "android.remoteinput.results";
+ field public static final int SOURCE_CHOICE = 1; // 0x1
+ field public static final int SOURCE_FREE_FORM_INPUT = 0; // 0x0
+ }
+
+ public static final class RemoteInput.Builder {
+ ctor public RemoteInput.Builder(String);
+ method public androidx.core.app.RemoteInput.Builder addExtras(android.os.Bundle);
+ method public androidx.core.app.RemoteInput build();
+ method public android.os.Bundle getExtras();
+ method public androidx.core.app.RemoteInput.Builder setAllowDataType(String, boolean);
+ method public androidx.core.app.RemoteInput.Builder setAllowFreeFormInput(boolean);
+ method public androidx.core.app.RemoteInput.Builder setChoices(CharSequence![]?);
+ method public androidx.core.app.RemoteInput.Builder setEditChoicesBeforeSending(int);
+ method public androidx.core.app.RemoteInput.Builder setLabel(CharSequence?);
+ }
+
+ public final class ServiceCompat {
+ method public static void stopForeground(android.app.Service, int);
+ field public static final int START_STICKY = 1; // 0x1
+ field public static final int STOP_FOREGROUND_DETACH = 2; // 0x2
+ field public static final int STOP_FOREGROUND_REMOVE = 1; // 0x1
+ }
+
+ public final class ShareCompat {
+ method public static void configureMenuItem(android.view.MenuItem, androidx.core.app.ShareCompat.IntentBuilder);
+ method public static void configureMenuItem(android.view.Menu, @IdRes int, androidx.core.app.ShareCompat.IntentBuilder);
+ method public static android.content.ComponentName? getCallingActivity(android.app.Activity);
+ method public static String? getCallingPackage(android.app.Activity);
+ field public static final String EXTRA_CALLING_ACTIVITY = "androidx.core.app.EXTRA_CALLING_ACTIVITY";
+ field public static final String EXTRA_CALLING_ACTIVITY_INTEROP = "android.support.v4.app.EXTRA_CALLING_ACTIVITY";
+ field public static final String EXTRA_CALLING_PACKAGE = "androidx.core.app.EXTRA_CALLING_PACKAGE";
+ field public static final String EXTRA_CALLING_PACKAGE_INTEROP = "android.support.v4.app.EXTRA_CALLING_PACKAGE";
+ }
+
+ public static class ShareCompat.IntentBuilder {
+ method public androidx.core.app.ShareCompat.IntentBuilder addEmailBcc(String);
+ method public androidx.core.app.ShareCompat.IntentBuilder addEmailBcc(String![]);
+ method public androidx.core.app.ShareCompat.IntentBuilder addEmailCc(String);
+ method public androidx.core.app.ShareCompat.IntentBuilder addEmailCc(String![]);
+ method public androidx.core.app.ShareCompat.IntentBuilder addEmailTo(String);
+ method public androidx.core.app.ShareCompat.IntentBuilder addEmailTo(String![]);
+ method public androidx.core.app.ShareCompat.IntentBuilder addStream(android.net.Uri);
+ method public android.content.Intent createChooserIntent();
+ method public static androidx.core.app.ShareCompat.IntentBuilder from(android.app.Activity);
+ method public android.content.Intent getIntent();
+ method public androidx.core.app.ShareCompat.IntentBuilder setChooserTitle(CharSequence?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setChooserTitle(@StringRes int);
+ method public androidx.core.app.ShareCompat.IntentBuilder setEmailBcc(String![]?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setEmailCc(String![]?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setEmailTo(String![]?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setHtmlText(String?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setStream(android.net.Uri?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setSubject(String?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setText(CharSequence?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setType(String?);
+ method public void startChooser();
+ }
+
+ public static class ShareCompat.IntentReader {
+ method public static androidx.core.app.ShareCompat.IntentReader from(android.app.Activity);
+ method public android.content.ComponentName? getCallingActivity();
+ method public android.graphics.drawable.Drawable? getCallingActivityIcon();
+ method public android.graphics.drawable.Drawable? getCallingApplicationIcon();
+ method public CharSequence? getCallingApplicationLabel();
+ method public String? getCallingPackage();
+ method public String![]? getEmailBcc();
+ method public String![]? getEmailCc();
+ method public String![]? getEmailTo();
+ method public String? getHtmlText();
+ method public android.net.Uri? getStream();
+ method public android.net.Uri? getStream(int);
+ method public int getStreamCount();
+ method public String? getSubject();
+ method public CharSequence? getText();
+ method public String? getType();
+ method public boolean isMultipleShare();
+ method public boolean isShareIntent();
+ method public boolean isSingleShare();
+ }
+
+ public abstract class SharedElementCallback {
+ ctor public SharedElementCallback();
+ method public android.os.Parcelable! onCaptureSharedElementSnapshot(android.view.View!, android.graphics.Matrix!, android.graphics.RectF!);
+ method public android.view.View! onCreateSnapshotView(android.content.Context!, android.os.Parcelable!);
+ method public void onMapSharedElements(java.util.List<java.lang.String!>!, java.util.Map<java.lang.String!,android.view.View!>!);
+ method public void onRejectSharedElements(java.util.List<android.view.View!>!);
+ method public void onSharedElementEnd(java.util.List<java.lang.String!>!, java.util.List<android.view.View!>!, java.util.List<android.view.View!>!);
+ method public void onSharedElementStart(java.util.List<java.lang.String!>!, java.util.List<android.view.View!>!, java.util.List<android.view.View!>!);
+ method public void onSharedElementsArrived(java.util.List<java.lang.String!>!, java.util.List<android.view.View!>!, androidx.core.app.SharedElementCallback.OnSharedElementsReadyListener!);
+ }
+
+ public static interface SharedElementCallback.OnSharedElementsReadyListener {
+ method public void onSharedElementsReady();
+ }
+
+ public final class TaskStackBuilder implements java.lang.Iterable<android.content.Intent> {
+ method public androidx.core.app.TaskStackBuilder addNextIntent(android.content.Intent);
+ method public androidx.core.app.TaskStackBuilder addNextIntentWithParentStack(android.content.Intent);
+ method public androidx.core.app.TaskStackBuilder addParentStack(android.app.Activity);
+ method public androidx.core.app.TaskStackBuilder addParentStack(Class<?>);
+ method public androidx.core.app.TaskStackBuilder! addParentStack(android.content.ComponentName!);
+ method public static androidx.core.app.TaskStackBuilder create(android.content.Context);
+ method public android.content.Intent? editIntentAt(int);
+ method @Deprecated public static androidx.core.app.TaskStackBuilder! from(android.content.Context!);
+ method @Deprecated public android.content.Intent! getIntent(int);
+ method public int getIntentCount();
+ method public android.content.Intent![] getIntents();
+ method public android.app.PendingIntent? getPendingIntent(int, int);
+ method public android.app.PendingIntent? getPendingIntent(int, int, android.os.Bundle?);
+ method @Deprecated public java.util.Iterator<android.content.Intent!>! iterator();
+ method public void startActivities();
+ method public void startActivities(android.os.Bundle?);
+ }
+
+ public static interface TaskStackBuilder.SupportParentable {
+ method public android.content.Intent? getSupportParentActivityIntent();
+ }
+
+}
+
+package androidx.core.content {
+
+ public final class ContentResolverCompat {
+ method public static android.database.Cursor! query(android.content.ContentResolver!, android.net.Uri!, String![]!, String!, String![]!, String!, androidx.core.os.CancellationSignal!);
+ }
+
+ public class ContextCompat {
+ ctor protected ContextCompat();
+ method public static int checkSelfPermission(android.content.Context, String);
+ method public static android.content.Context? createDeviceProtectedStorageContext(android.content.Context);
+ method public static java.io.File! getCodeCacheDir(android.content.Context);
+ method @ColorInt public static int getColor(android.content.Context, @ColorRes int);
+ method public static android.content.res.ColorStateList? getColorStateList(android.content.Context, @ColorRes int);
+ method public static java.io.File? getDataDir(android.content.Context);
+ method public static android.graphics.drawable.Drawable? getDrawable(android.content.Context, @DrawableRes int);
+ method public static java.io.File![] getExternalCacheDirs(android.content.Context);
+ method public static java.io.File![] getExternalFilesDirs(android.content.Context, String?);
+ method public static java.util.concurrent.Executor! getMainExecutor(android.content.Context!);
+ method public static java.io.File? getNoBackupFilesDir(android.content.Context);
+ method public static java.io.File![] getObbDirs(android.content.Context);
+ method public static <T> T? getSystemService(android.content.Context, Class<T!>);
+ method public static String? getSystemServiceName(android.content.Context, Class<?>);
+ method public static boolean isDeviceProtectedStorage(android.content.Context);
+ method public static boolean startActivities(android.content.Context, android.content.Intent![]);
+ method public static boolean startActivities(android.content.Context, android.content.Intent![], android.os.Bundle?);
+ method public static void startActivity(android.content.Context, android.content.Intent, android.os.Bundle?);
+ method public static void startForegroundService(android.content.Context, android.content.Intent);
+ }
+
+ public class FileProvider extends android.content.ContentProvider {
+ ctor public FileProvider();
+ method public int delete(android.net.Uri, String?, String![]?);
+ method public String! getType(android.net.Uri);
+ method public static android.net.Uri! getUriForFile(android.content.Context, String, java.io.File);
+ method public android.net.Uri! insert(android.net.Uri, android.content.ContentValues!);
+ method public boolean onCreate();
+ method public android.database.Cursor! query(android.net.Uri, String![]?, String?, String![]?, String?);
+ method public int update(android.net.Uri, android.content.ContentValues!, String?, String![]?);
+ }
+
+ public final class IntentCompat {
+ method public static android.content.Intent makeMainSelectorActivity(String, String);
+ field public static final String CATEGORY_LEANBACK_LAUNCHER = "android.intent.category.LEANBACK_LAUNCHER";
+ field public static final String EXTRA_HTML_TEXT = "android.intent.extra.HTML_TEXT";
+ field public static final String EXTRA_START_PLAYBACK = "android.intent.extra.START_PLAYBACK";
+ }
+
+ public final class MimeTypeFilter {
+ method public static boolean matches(String?, String);
+ method public static String? matches(String?, String![]);
+ method public static String? matches(String![]?, String);
+ method public static String![] matchesMany(String![]?, String);
+ }
+
+ public final class PermissionChecker {
+ method public static int checkCallingOrSelfPermission(android.content.Context, String);
+ method public static int checkCallingPermission(android.content.Context, String, String?);
+ method public static int checkPermission(android.content.Context, String, int, int, String?);
+ method public static int checkSelfPermission(android.content.Context, String);
+ field public static final int PERMISSION_DENIED = -1; // 0xffffffff
+ field public static final int PERMISSION_DENIED_APP_OP = -2; // 0xfffffffe
+ field public static final int PERMISSION_GRANTED = 0; // 0x0
+ }
+
+ @Deprecated public final class SharedPreferencesCompat {
+ }
+
+ @Deprecated public static final class SharedPreferencesCompat.EditorCompat {
+ method @Deprecated public void apply(android.content.SharedPreferences.Editor);
+ method @Deprecated public static androidx.core.content.SharedPreferencesCompat.EditorCompat! getInstance();
+ }
+
+}
+
+package androidx.core.content.pm {
+
+ @Deprecated public final class ActivityInfoCompat {
+ field @Deprecated public static final int CONFIG_UI_MODE = 512; // 0x200
+ }
+
+ public final class PackageInfoCompat {
+ method public static long getLongVersionCode(android.content.pm.PackageInfo);
+ }
+
+ public final class PermissionInfoCompat {
+ method public static int getProtection(android.content.pm.PermissionInfo);
+ method public static int getProtectionFlags(android.content.pm.PermissionInfo);
+ }
+
+ public class ShortcutInfoCompat {
+ method public android.content.ComponentName? getActivity();
+ method public java.util.Set<java.lang.String!>? getCategories();
+ method public CharSequence? getDisabledMessage();
+ method public String getId();
+ method public android.content.Intent getIntent();
+ method public android.content.Intent![] getIntents();
+ method public CharSequence? getLongLabel();
+ method public int getRank();
+ method public CharSequence getShortLabel();
+ method @RequiresApi(25) public android.content.pm.ShortcutInfo! toShortcutInfo();
+ }
+
+ public static class ShortcutInfoCompat.Builder {
+ ctor public ShortcutInfoCompat.Builder(android.content.Context, String);
+ method public androidx.core.content.pm.ShortcutInfoCompat build();
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setActivity(android.content.ComponentName);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setAlwaysBadged();
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setCategories(java.util.Set<java.lang.String!>);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setDisabledMessage(CharSequence);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setIcon(androidx.core.graphics.drawable.IconCompat!);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setIntent(android.content.Intent);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setIntents(android.content.Intent![]);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setLongLabel(CharSequence);
+ method @Deprecated public androidx.core.content.pm.ShortcutInfoCompat.Builder setLongLived();
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setLongLived(boolean);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setPerson(androidx.core.app.Person);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setPersons(androidx.core.app.Person![]);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setRank(int);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setShortLabel(CharSequence);
+ }
+
+ public class ShortcutManagerCompat {
+ method public static boolean addDynamicShortcuts(android.content.Context, java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>);
+ method public static android.content.Intent createShortcutResultIntent(android.content.Context, androidx.core.content.pm.ShortcutInfoCompat);
+ method public static java.util.List<androidx.core.content.pm.ShortcutInfoCompat!> getDynamicShortcuts(android.content.Context);
+ method public static int getMaxShortcutCountPerActivity(android.content.Context);
+ method public static boolean isRequestPinShortcutSupported(android.content.Context);
+ method public static void removeAllDynamicShortcuts(android.content.Context);
+ method public static void removeDynamicShortcuts(android.content.Context, java.util.List<java.lang.String!>);
+ method public static boolean requestPinShortcut(android.content.Context, androidx.core.content.pm.ShortcutInfoCompat, android.content.IntentSender?);
+ method public static boolean updateShortcuts(android.content.Context, java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>);
+ field public static final String EXTRA_SHORTCUT_ID = "android.intent.extra.shortcut.ID";
+ }
+
+}
+
+package androidx.core.content.res {
+
+ public final class ConfigurationHelper {
+ method public static int getDensityDpi(android.content.res.Resources);
+ }
+
+ public final class ResourcesCompat {
+ method @ColorInt public static int getColor(android.content.res.Resources, @ColorRes int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
+ method public static android.content.res.ColorStateList? getColorStateList(android.content.res.Resources, @ColorRes int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
+ method public static android.graphics.drawable.Drawable? getDrawable(android.content.res.Resources, @DrawableRes int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
+ method public static android.graphics.drawable.Drawable? getDrawableForDensity(android.content.res.Resources, @DrawableRes int, int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
+ method public static float getFloat(android.content.res.Resources, @DimenRes int);
+ method public static android.graphics.Typeface? getFont(android.content.Context, @FontRes int) throws android.content.res.Resources.NotFoundException;
+ method public static void getFont(android.content.Context, @FontRes int, androidx.core.content.res.ResourcesCompat.FontCallback, android.os.Handler?) throws android.content.res.Resources.NotFoundException;
+ }
+
+ public abstract static class ResourcesCompat.FontCallback {
+ ctor public ResourcesCompat.FontCallback();
+ method public abstract void onFontRetrievalFailed(int);
+ method public abstract void onFontRetrieved(android.graphics.Typeface);
+ }
+
+}
+
+package androidx.core.database {
+
+ public final class CursorWindowCompat {
+ method public static android.database.CursorWindow create(String?, long);
+ }
+
+ @Deprecated public final class DatabaseUtilsCompat {
+ method @Deprecated public static String![]! appendSelectionArgs(String![]!, String![]!);
+ method @Deprecated public static String! concatenateWhere(String!, String!);
+ }
+
+}
+
+package androidx.core.database.sqlite {
+
+ public final class SQLiteCursorCompat {
+ method public static void setFillWindowForwardOnly(android.database.sqlite.SQLiteCursor, boolean);
+ }
+
+}
+
+package androidx.core.graphics {
+
+ public final class BitmapCompat {
+ method public static int getAllocationByteCount(android.graphics.Bitmap);
+ method public static boolean hasMipMap(android.graphics.Bitmap);
+ method public static void setHasMipMap(android.graphics.Bitmap, boolean);
+ }
+
+ public class BlendModeColorFilterCompat {
+ method public static android.graphics.ColorFilter? createBlendModeColorFilterCompat(int, androidx.core.graphics.BlendModeCompat);
+ }
+
+ public enum BlendModeCompat {
+ enum_constant public static final androidx.core.graphics.BlendModeCompat CLEAR;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat COLOR;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat COLOR_BURN;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat COLOR_DODGE;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat DARKEN;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat DIFFERENCE;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat DST;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat DST_ATOP;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat DST_IN;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat DST_OUT;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat DST_OVER;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat EXCLUSION;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat HARD_LIGHT;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat HUE;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat LIGHTEN;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat LUMINOSITY;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat MODULATE;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat MULTIPLY;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat OVERLAY;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat PLUS;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat SATURATION;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat SCREEN;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat SOFT_LIGHT;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat SRC;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat SRC_ATOP;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat SRC_IN;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat SRC_OUT;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat SRC_OVER;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat XOR;
+ }
+
+ public final class ColorUtils {
+ method @ColorInt public static int HSLToColor(float[]);
+ method @ColorInt public static int LABToColor(@FloatRange(from=0.0f, to=100) double, @FloatRange(from=0xffffff80, to=127) double, @FloatRange(from=0xffffff80, to=127) double);
+ method public static void LABToXYZ(@FloatRange(from=0.0f, to=100) double, @FloatRange(from=0xffffff80, to=127) double, @FloatRange(from=0xffffff80, to=127) double, double[]);
+ method public static void RGBToHSL(@IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, float[]);
+ method public static void RGBToLAB(@IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, double[]);
+ method public static void RGBToXYZ(@IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, double[]);
+ method @ColorInt public static int XYZToColor(@FloatRange(from=0.0f, to=androidx.core.graphics.ColorUtils.XYZ_WHITE_REFERENCE_X) double, @FloatRange(from=0.0f, to=androidx.core.graphics.ColorUtils.XYZ_WHITE_REFERENCE_Y) double, @FloatRange(from=0.0f, to=androidx.core.graphics.ColorUtils.XYZ_WHITE_REFERENCE_Z) double);
+ method public static void XYZToLAB(@FloatRange(from=0.0f, to=androidx.core.graphics.ColorUtils.XYZ_WHITE_REFERENCE_X) double, @FloatRange(from=0.0f, to=androidx.core.graphics.ColorUtils.XYZ_WHITE_REFERENCE_Y) double, @FloatRange(from=0.0f, to=androidx.core.graphics.ColorUtils.XYZ_WHITE_REFERENCE_Z) double, double[]);
+ method @ColorInt public static int blendARGB(@ColorInt int, @ColorInt int, @FloatRange(from=0.0, to=1.0) float);
+ method public static void blendHSL(float[], float[], @FloatRange(from=0.0, to=1.0) float, float[]);
+ method public static void blendLAB(double[], double[], @FloatRange(from=0.0, to=1.0) double, double[]);
+ method public static double calculateContrast(@ColorInt int, @ColorInt int);
+ method @FloatRange(from=0.0, to=1.0) public static double calculateLuminance(@ColorInt int);
+ method public static int calculateMinimumAlpha(@ColorInt int, @ColorInt int, float);
+ method public static void colorToHSL(@ColorInt int, float[]);
+ method public static void colorToLAB(@ColorInt int, double[]);
+ method public static void colorToXYZ(@ColorInt int, double[]);
+ method public static int compositeColors(@ColorInt int, @ColorInt int);
+ method @RequiresApi(26) public static android.graphics.Color compositeColors(android.graphics.Color, android.graphics.Color);
+ method public static double distanceEuclidean(double[], double[]);
+ method @ColorInt public static int setAlphaComponent(@ColorInt int, @IntRange(from=0, to=255) int);
+ }
+
+ public final class Insets {
+ method public static androidx.core.graphics.Insets of(int, int, int, int);
+ method public static androidx.core.graphics.Insets of(android.graphics.Rect);
+ field public static final androidx.core.graphics.Insets NONE;
+ field public final int bottom;
+ field public final int left;
+ field public final int right;
+ field public final int top;
+ }
+
+ public final class PaintCompat {
+ method public static boolean hasGlyph(android.graphics.Paint, String);
+ method public static boolean setBlendMode(android.graphics.Paint, androidx.core.graphics.BlendModeCompat?);
+ }
+
+ public final class PathSegment {
+ ctor public PathSegment(android.graphics.PointF, float, android.graphics.PointF, float);
+ method public android.graphics.PointF getEnd();
+ method public float getEndFraction();
+ method public android.graphics.PointF getStart();
+ method public float getStartFraction();
+ }
+
+ public final class PathUtils {
+ method @RequiresApi(26) public static java.util.Collection<androidx.core.graphics.PathSegment!> flatten(android.graphics.Path);
+ method @RequiresApi(26) public static java.util.Collection<androidx.core.graphics.PathSegment!> flatten(android.graphics.Path, @FloatRange(from=0) float);
+ }
+
+ public class TypefaceCompat {
+ method public static android.graphics.Typeface create(android.content.Context, android.graphics.Typeface?, int);
+ }
+
+}
+
+package androidx.core.graphics.drawable {
+
+ public final class DrawableCompat {
+ method public static void applyTheme(android.graphics.drawable.Drawable, android.content.res.Resources.Theme);
+ method public static boolean canApplyTheme(android.graphics.drawable.Drawable);
+ method public static void clearColorFilter(android.graphics.drawable.Drawable);
+ method public static int getAlpha(android.graphics.drawable.Drawable);
+ method public static android.graphics.ColorFilter! getColorFilter(android.graphics.drawable.Drawable);
+ method public static int getLayoutDirection(android.graphics.drawable.Drawable);
+ method public static void inflate(android.graphics.drawable.Drawable, android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet, android.content.res.Resources.Theme?) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+ method public static boolean isAutoMirrored(android.graphics.drawable.Drawable);
+ method @Deprecated public static void jumpToCurrentState(android.graphics.drawable.Drawable);
+ method public static void setAutoMirrored(android.graphics.drawable.Drawable, boolean);
+ method public static void setHotspot(android.graphics.drawable.Drawable, float, float);
+ method public static void setHotspotBounds(android.graphics.drawable.Drawable, int, int, int, int);
+ method public static boolean setLayoutDirection(android.graphics.drawable.Drawable, int);
+ method public static void setTint(android.graphics.drawable.Drawable, @ColorInt int);
+ method public static void setTintList(android.graphics.drawable.Drawable, android.content.res.ColorStateList?);
+ method public static void setTintMode(android.graphics.drawable.Drawable, android.graphics.PorterDuff.Mode);
+ method public static <T extends android.graphics.drawable.Drawable> T! unwrap(android.graphics.drawable.Drawable);
+ method public static android.graphics.drawable.Drawable! wrap(android.graphics.drawable.Drawable);
+ }
+
+ public class IconCompat extends androidx.versionedparcelable.CustomVersionedParcelable {
+ method public static androidx.core.graphics.drawable.IconCompat? createFromBundle(android.os.Bundle);
+ method @RequiresApi(23) public static androidx.core.graphics.drawable.IconCompat? createFromIcon(android.content.Context, android.graphics.drawable.Icon);
+ method public static androidx.core.graphics.drawable.IconCompat! createWithAdaptiveBitmap(android.graphics.Bitmap!);
+ method public static androidx.core.graphics.drawable.IconCompat! createWithBitmap(android.graphics.Bitmap!);
+ method public static androidx.core.graphics.drawable.IconCompat! createWithContentUri(String!);
+ method public static androidx.core.graphics.drawable.IconCompat! createWithContentUri(android.net.Uri!);
+ method public static androidx.core.graphics.drawable.IconCompat! createWithData(byte[]!, int, int);
+ method public static androidx.core.graphics.drawable.IconCompat! createWithResource(android.content.Context!, @DrawableRes int);
+ method @IdRes public int getResId();
+ method public String getResPackage();
+ method public int getType();
+ method public android.net.Uri getUri();
+ method public android.graphics.drawable.Drawable! loadDrawable(android.content.Context!);
+ method public androidx.core.graphics.drawable.IconCompat! setTint(@ColorInt int);
+ method public androidx.core.graphics.drawable.IconCompat! setTintList(android.content.res.ColorStateList!);
+ method public androidx.core.graphics.drawable.IconCompat! setTintMode(android.graphics.PorterDuff.Mode!);
+ method public android.os.Bundle! toBundle();
+ method @RequiresApi(23) public android.graphics.drawable.Icon! toIcon();
+ field public static final int TYPE_UNKNOWN = -1; // 0xffffffff
+ }
+
+ public abstract class RoundedBitmapDrawable extends android.graphics.drawable.Drawable {
+ method public void draw(android.graphics.Canvas);
+ method public final android.graphics.Bitmap? getBitmap();
+ method public float getCornerRadius();
+ method public int getGravity();
+ method public int getOpacity();
+ method public final android.graphics.Paint getPaint();
+ method public boolean hasAntiAlias();
+ method public boolean hasMipMap();
+ method public boolean isCircular();
+ method public void setAlpha(int);
+ method public void setAntiAlias(boolean);
+ method public void setCircular(boolean);
+ method public void setColorFilter(android.graphics.ColorFilter!);
+ method public void setCornerRadius(float);
+ method public void setDither(boolean);
+ method public void setGravity(int);
+ method public void setMipMap(boolean);
+ method public void setTargetDensity(android.graphics.Canvas);
+ method public void setTargetDensity(android.util.DisplayMetrics);
+ method public void setTargetDensity(int);
+ }
+
+ public final class RoundedBitmapDrawableFactory {
+ method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, android.graphics.Bitmap?);
+ method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, String);
+ method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, java.io.InputStream);
+ }
+
+}
+
+package androidx.core.hardware.display {
+
+ public final class DisplayManagerCompat {
+ method public android.view.Display? getDisplay(int);
+ method public android.view.Display![] getDisplays();
+ method public android.view.Display![] getDisplays(String?);
+ method public static androidx.core.hardware.display.DisplayManagerCompat getInstance(android.content.Context);
+ field public static final String DISPLAY_CATEGORY_PRESENTATION = "android.hardware.display.category.PRESENTATION";
+ }
+
+}
+
+package androidx.core.hardware.fingerprint {
+
+ @Deprecated public final class FingerprintManagerCompat {
+ method @Deprecated @RequiresPermission(android.Manifest.permission.USE_FINGERPRINT) public void authenticate(androidx.core.hardware.fingerprint.FingerprintManagerCompat.CryptoObject?, int, androidx.core.os.CancellationSignal?, androidx.core.hardware.fingerprint.FingerprintManagerCompat.AuthenticationCallback, android.os.Handler?);
+ method @Deprecated public static androidx.core.hardware.fingerprint.FingerprintManagerCompat from(android.content.Context);
+ method @Deprecated @RequiresPermission(android.Manifest.permission.USE_FINGERPRINT) public boolean hasEnrolledFingerprints();
+ method @Deprecated @RequiresPermission(android.Manifest.permission.USE_FINGERPRINT) public boolean isHardwareDetected();
+ }
+
+ @Deprecated public abstract static class FingerprintManagerCompat.AuthenticationCallback {
+ ctor @Deprecated public FingerprintManagerCompat.AuthenticationCallback();
+ method @Deprecated public void onAuthenticationError(int, CharSequence!);
+ method @Deprecated public void onAuthenticationFailed();
+ method @Deprecated public void onAuthenticationHelp(int, CharSequence!);
+ method @Deprecated public void onAuthenticationSucceeded(androidx.core.hardware.fingerprint.FingerprintManagerCompat.AuthenticationResult!);
+ }
+
+ @Deprecated public static final class FingerprintManagerCompat.AuthenticationResult {
+ ctor @Deprecated public FingerprintManagerCompat.AuthenticationResult(androidx.core.hardware.fingerprint.FingerprintManagerCompat.CryptoObject!);
+ method @Deprecated public androidx.core.hardware.fingerprint.FingerprintManagerCompat.CryptoObject! getCryptoObject();
+ }
+
+ @Deprecated public static class FingerprintManagerCompat.CryptoObject {
+ ctor @Deprecated public FingerprintManagerCompat.CryptoObject(java.security.Signature);
+ ctor @Deprecated public FingerprintManagerCompat.CryptoObject(javax.crypto.Cipher);
+ ctor @Deprecated public FingerprintManagerCompat.CryptoObject(javax.crypto.Mac);
+ method @Deprecated public javax.crypto.Cipher? getCipher();
+ method @Deprecated public javax.crypto.Mac? getMac();
+ method @Deprecated public java.security.Signature? getSignature();
+ }
+
+}
+
+package androidx.core.location {
+
+ public final class LocationManagerCompat {
+ method public static boolean isLocationEnabled(android.location.LocationManager);
+ }
+
+}
+
+package androidx.core.math {
+
+ public class MathUtils {
+ method public static float clamp(float, float, float);
+ method public static double clamp(double, double, double);
+ method public static int clamp(int, int, int);
+ method public static long clamp(long, long, long);
+ }
+
+}
+
+package androidx.core.net {
+
+ public final class ConnectivityManagerCompat {
+ method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public static android.net.NetworkInfo? getNetworkInfoFromBroadcast(android.net.ConnectivityManager, android.content.Intent);
+ method public static int getRestrictBackgroundStatus(android.net.ConnectivityManager);
+ method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public static boolean isActiveNetworkMetered(android.net.ConnectivityManager);
+ field public static final int RESTRICT_BACKGROUND_STATUS_DISABLED = 1; // 0x1
+ field public static final int RESTRICT_BACKGROUND_STATUS_ENABLED = 3; // 0x3
+ field public static final int RESTRICT_BACKGROUND_STATUS_WHITELISTED = 2; // 0x2
+ }
+
+ public final class TrafficStatsCompat {
+ method @Deprecated public static void clearThreadStatsTag();
+ method @Deprecated public static int getThreadStatsTag();
+ method @Deprecated public static void incrementOperationCount(int);
+ method @Deprecated public static void incrementOperationCount(int, int);
+ method @Deprecated public static void setThreadStatsTag(int);
+ method public static void tagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
+ method @Deprecated public static void tagSocket(java.net.Socket!) throws java.net.SocketException;
+ method public static void untagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
+ method @Deprecated public static void untagSocket(java.net.Socket!) throws java.net.SocketException;
+ }
+
+ public final class UriCompat {
+ method public static String toSafeString(android.net.Uri);
+ }
+
+}
+
+package androidx.core.os {
+
+ public class BuildCompat {
+ method @Deprecated public static boolean isAtLeastN();
+ method @Deprecated public static boolean isAtLeastNMR1();
+ method @Deprecated public static boolean isAtLeastO();
+ method @Deprecated public static boolean isAtLeastOMR1();
+ method @Deprecated public static boolean isAtLeastP();
+ method @Deprecated public static boolean isAtLeastQ();
+ method public static boolean isAtLeastR();
+ }
+
+ public final class CancellationSignal {
+ ctor public CancellationSignal();
+ method public void cancel();
+ method public Object? getCancellationSignalObject();
+ method public boolean isCanceled();
+ method public void setOnCancelListener(androidx.core.os.CancellationSignal.OnCancelListener?);
+ method public void throwIfCanceled();
+ }
+
+ public static interface CancellationSignal.OnCancelListener {
+ method public void onCancel();
+ }
+
+ public final class ConfigurationCompat {
+ method public static androidx.core.os.LocaleListCompat getLocales(android.content.res.Configuration);
+ }
+
+ public final class EnvironmentCompat {
+ method public static String getStorageState(java.io.File);
+ field public static final String MEDIA_UNKNOWN = "unknown";
+ }
+
+ public final class HandlerCompat {
+ method public static android.os.Handler createAsync(android.os.Looper);
+ method public static android.os.Handler createAsync(android.os.Looper, android.os.Handler.Callback);
+ method public static boolean postDelayed(android.os.Handler, Runnable, Object?, long);
+ }
+
+ public final class LocaleListCompat {
+ method public static androidx.core.os.LocaleListCompat create(java.util.Locale!...);
+ method public static androidx.core.os.LocaleListCompat forLanguageTags(String?);
+ method public java.util.Locale! get(int);
+ method @Size(min=1) public static androidx.core.os.LocaleListCompat getAdjustedDefault();
+ method @Size(min=1) public static androidx.core.os.LocaleListCompat getDefault();
+ method public static androidx.core.os.LocaleListCompat getEmptyLocaleList();
+ method public java.util.Locale? getFirstMatch(String![]);
+ method @IntRange(from=0xffffffff) public int indexOf(java.util.Locale!);
+ method public boolean isEmpty();
+ method @IntRange(from=0) public int size();
+ method public String toLanguageTags();
+ method public Object? unwrap();
+ method @Deprecated @RequiresApi(24) public static androidx.core.os.LocaleListCompat! wrap(Object!);
+ method @RequiresApi(24) public static androidx.core.os.LocaleListCompat wrap(android.os.LocaleList);
+ }
+
+ public final class MessageCompat {
+ method public static boolean isAsynchronous(android.os.Message);
+ method public static void setAsynchronous(android.os.Message, boolean);
+ }
+
+ public class OperationCanceledException extends java.lang.RuntimeException {
+ ctor public OperationCanceledException();
+ ctor public OperationCanceledException(String?);
+ }
+
+ public final class ParcelCompat {
+ method public static boolean readBoolean(android.os.Parcel);
+ method public static void writeBoolean(android.os.Parcel, boolean);
+ }
+
+ @Deprecated public final class ParcelableCompat {
+ method @Deprecated public static <T> android.os.Parcelable.Creator<T!>! newCreator(androidx.core.os.ParcelableCompatCreatorCallbacks<T!>!);
+ }
+
+ @Deprecated public interface ParcelableCompatCreatorCallbacks<T> {
+ method @Deprecated public T! createFromParcel(android.os.Parcel!, ClassLoader!);
+ method @Deprecated public T![]! newArray(int);
+ }
+
+ public final class TraceCompat {
+ method public static void beginAsyncSection(String, int);
+ method public static void beginSection(String);
+ method public static void endAsyncSection(String, int);
+ method public static void endSection();
+ method public static boolean isEnabled();
+ method public static void setCounter(String, int);
+ }
+
+ public class UserManagerCompat {
+ method public static boolean isUserUnlocked(android.content.Context);
+ }
+
+}
+
+package androidx.core.provider {
+
+ public final class FontRequest {
+ ctor public FontRequest(String, String, String, java.util.List<java.util.List<byte[]!>!>);
+ ctor public FontRequest(String, String, String, @ArrayRes int);
+ method public java.util.List<java.util.List<byte[]!>!>? getCertificates();
+ method @ArrayRes public int getCertificatesArrayResId();
+ method public String getProviderAuthority();
+ method public String getProviderPackage();
+ method public String getQuery();
+ }
+
+ public class FontsContractCompat {
+ method public static android.graphics.Typeface? buildTypeface(android.content.Context, android.os.CancellationSignal?, androidx.core.provider.FontsContractCompat.FontInfo![]);
+ method public static androidx.core.provider.FontsContractCompat.FontFamilyResult fetchFonts(android.content.Context, android.os.CancellationSignal?, androidx.core.provider.FontRequest) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public static void requestFont(android.content.Context, androidx.core.provider.FontRequest, androidx.core.provider.FontsContractCompat.FontRequestCallback, android.os.Handler);
+ }
+
+ public static final class FontsContractCompat.Columns implements android.provider.BaseColumns {
+ ctor public FontsContractCompat.Columns();
+ field public static final String FILE_ID = "file_id";
+ field public static final String ITALIC = "font_italic";
+ field public static final String RESULT_CODE = "result_code";
+ field public static final int RESULT_CODE_FONT_NOT_FOUND = 1; // 0x1
+ field public static final int RESULT_CODE_FONT_UNAVAILABLE = 2; // 0x2
+ field public static final int RESULT_CODE_MALFORMED_QUERY = 3; // 0x3
+ field public static final int RESULT_CODE_OK = 0; // 0x0
+ field public static final String TTC_INDEX = "font_ttc_index";
+ field public static final String VARIATION_SETTINGS = "font_variation_settings";
+ field public static final String WEIGHT = "font_weight";
+ }
+
+ public static class FontsContractCompat.FontFamilyResult {
+ method public androidx.core.provider.FontsContractCompat.FontInfo![]! getFonts();
+ method public int getStatusCode();
+ field public static final int STATUS_OK = 0; // 0x0
+ field public static final int STATUS_UNEXPECTED_DATA_PROVIDED = 2; // 0x2
+ field public static final int STATUS_WRONG_CERTIFICATES = 1; // 0x1
+ }
+
+ public static class FontsContractCompat.FontInfo {
+ method public int getResultCode();
+ method @IntRange(from=0) public int getTtcIndex();
+ method public android.net.Uri getUri();
+ method @IntRange(from=1, to=1000) public int getWeight();
+ method public boolean isItalic();
+ }
+
+ public static class FontsContractCompat.FontRequestCallback {
+ ctor public FontsContractCompat.FontRequestCallback();
+ method public void onTypefaceRequestFailed(int);
+ method public void onTypefaceRetrieved(android.graphics.Typeface!);
+ field public static final int FAIL_REASON_FONT_LOAD_ERROR = -3; // 0xfffffffd
+ field public static final int FAIL_REASON_FONT_NOT_FOUND = 1; // 0x1
+ field public static final int FAIL_REASON_FONT_UNAVAILABLE = 2; // 0x2
+ field public static final int FAIL_REASON_MALFORMED_QUERY = 3; // 0x3
+ field public static final int FAIL_REASON_PROVIDER_NOT_FOUND = -1; // 0xffffffff
+ field public static final int FAIL_REASON_SECURITY_VIOLATION = -4; // 0xfffffffc
+ field public static final int FAIL_REASON_WRONG_CERTIFICATES = -2; // 0xfffffffe
+ }
+
+}
+
+package androidx.core.telephony.mbms {
+
+ public final class MbmsHelper {
+ method public static CharSequence? getBestNameForService(android.content.Context, android.telephony.mbms.ServiceInfo);
+ }
+
+}
+
+package androidx.core.text {
+
+ public final class BidiFormatter {
+ method public static androidx.core.text.BidiFormatter! getInstance();
+ method public static androidx.core.text.BidiFormatter! getInstance(boolean);
+ method public static androidx.core.text.BidiFormatter! getInstance(java.util.Locale!);
+ method public boolean getStereoReset();
+ method public boolean isRtl(String!);
+ method public boolean isRtl(CharSequence!);
+ method public boolean isRtlContext();
+ method public String! unicodeWrap(String!, androidx.core.text.TextDirectionHeuristicCompat!, boolean);
+ method public CharSequence! unicodeWrap(CharSequence!, androidx.core.text.TextDirectionHeuristicCompat!, boolean);
+ method public String! unicodeWrap(String!, androidx.core.text.TextDirectionHeuristicCompat!);
+ method public CharSequence! unicodeWrap(CharSequence!, androidx.core.text.TextDirectionHeuristicCompat!);
+ method public String! unicodeWrap(String!, boolean);
+ method public CharSequence! unicodeWrap(CharSequence!, boolean);
+ method public String! unicodeWrap(String!);
+ method public CharSequence! unicodeWrap(CharSequence!);
+ }
+
+ public static final class BidiFormatter.Builder {
+ ctor public BidiFormatter.Builder();
+ ctor public BidiFormatter.Builder(boolean);
+ ctor public BidiFormatter.Builder(java.util.Locale!);
+ method public androidx.core.text.BidiFormatter! build();
+ method public androidx.core.text.BidiFormatter.Builder! setTextDirectionHeuristic(androidx.core.text.TextDirectionHeuristicCompat!);
+ method public androidx.core.text.BidiFormatter.Builder! stereoReset(boolean);
+ }
+
+ public final class HtmlCompat {
+ method public static android.text.Spanned fromHtml(String, int);
+ method public static android.text.Spanned fromHtml(String, int, android.text.Html.ImageGetter?, android.text.Html.TagHandler?);
+ method public static String toHtml(android.text.Spanned, int);
+ field public static final int FROM_HTML_MODE_COMPACT = 63; // 0x3f
+ field public static final int FROM_HTML_MODE_LEGACY = 0; // 0x0
+ field public static final int FROM_HTML_OPTION_USE_CSS_COLORS = 256; // 0x100
+ field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_BLOCKQUOTE = 32; // 0x20
+ field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_DIV = 16; // 0x10
+ field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_HEADING = 2; // 0x2
+ field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_LIST = 8; // 0x8
+ field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_LIST_ITEM = 4; // 0x4
+ field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_PARAGRAPH = 1; // 0x1
+ field public static final int TO_HTML_PARAGRAPH_LINES_CONSECUTIVE = 0; // 0x0
+ field public static final int TO_HTML_PARAGRAPH_LINES_INDIVIDUAL = 1; // 0x1
+ }
+
+ public final class ICUCompat {
+ method public static String? maximizeAndGetScript(java.util.Locale!);
+ }
+
+ public class PrecomputedTextCompat implements android.text.Spannable {
+ method public char charAt(int);
+ method public static androidx.core.text.PrecomputedTextCompat! create(CharSequence, androidx.core.text.PrecomputedTextCompat.Params);
+ method @IntRange(from=0) public int getParagraphCount();
+ method @IntRange(from=0) public int getParagraphEnd(@IntRange(from=0) int);
+ method @IntRange(from=0) public int getParagraphStart(@IntRange(from=0) int);
+ method public androidx.core.text.PrecomputedTextCompat.Params getParams();
+ method public int getSpanEnd(Object!);
+ method public int getSpanFlags(Object!);
+ method public int getSpanStart(Object!);
+ method public <T> T![]! getSpans(int, int, Class<T!>!);
+ method @UiThread public static java.util.concurrent.Future<androidx.core.text.PrecomputedTextCompat!>! getTextFuture(CharSequence, androidx.core.text.PrecomputedTextCompat.Params, java.util.concurrent.Executor?);
+ method public int length();
+ method public int nextSpanTransition(int, int, Class!);
+ method public void removeSpan(Object!);
+ method public void setSpan(Object!, int, int, int);
+ method public CharSequence! subSequence(int, int);
+ }
+
+ public static final class PrecomputedTextCompat.Params {
+ ctor @RequiresApi(28) public PrecomputedTextCompat.Params(android.text.PrecomputedText.Params);
+ method @RequiresApi(23) public int getBreakStrategy();
+ method @RequiresApi(23) public int getHyphenationFrequency();
+ method @RequiresApi(18) public android.text.TextDirectionHeuristic? getTextDirection();
+ method public android.text.TextPaint getTextPaint();
+ }
+
+ public static class PrecomputedTextCompat.Params.Builder {
+ ctor public PrecomputedTextCompat.Params.Builder(android.text.TextPaint);
+ method public androidx.core.text.PrecomputedTextCompat.Params build();
+ method @RequiresApi(23) public androidx.core.text.PrecomputedTextCompat.Params.Builder! setBreakStrategy(int);
+ method @RequiresApi(23) public androidx.core.text.PrecomputedTextCompat.Params.Builder! setHyphenationFrequency(int);
+ method @RequiresApi(18) public androidx.core.text.PrecomputedTextCompat.Params.Builder! setTextDirection(android.text.TextDirectionHeuristic);
+ }
+
+ public interface TextDirectionHeuristicCompat {
+ method public boolean isRtl(char[]!, int, int);
+ method public boolean isRtl(CharSequence!, int, int);
+ }
+
+ public final class TextDirectionHeuristicsCompat {
+ field public static final androidx.core.text.TextDirectionHeuristicCompat! ANYRTL_LTR;
+ field public static final androidx.core.text.TextDirectionHeuristicCompat! FIRSTSTRONG_LTR;
+ field public static final androidx.core.text.TextDirectionHeuristicCompat! FIRSTSTRONG_RTL;
+ field public static final androidx.core.text.TextDirectionHeuristicCompat! LOCALE;
+ field public static final androidx.core.text.TextDirectionHeuristicCompat! LTR;
+ field public static final androidx.core.text.TextDirectionHeuristicCompat! RTL;
+ }
+
+ public final class TextUtilsCompat {
+ method public static int getLayoutDirectionFromLocale(java.util.Locale?);
+ method public static String htmlEncode(String);
+ }
+
+}
+
+package androidx.core.text.util {
+
+ public final class LinkifyCompat {
+ method public static boolean addLinks(android.text.Spannable, int);
+ method public static boolean addLinks(android.widget.TextView, int);
+ method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, String?);
+ method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, String?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
+ method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, String?, String![]?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
+ method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?);
+ method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
+ method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?, String![]?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
+ }
+
+}
+
+package androidx.core.util {
+
+ public class AtomicFile {
+ ctor public AtomicFile(java.io.File);
+ method public void delete();
+ method public void failWrite(java.io.FileOutputStream?);
+ method public void finishWrite(java.io.FileOutputStream?);
+ method public java.io.File getBaseFile();
+ method public java.io.FileInputStream openRead() throws java.io.FileNotFoundException;
+ method public byte[] readFully() throws java.io.IOException;
+ method public java.io.FileOutputStream startWrite() throws java.io.IOException;
+ }
+
+ public interface Consumer<T> {
+ method public void accept(T!);
+ }
+
+ public class ObjectsCompat {
+ method public static boolean equals(Object?, Object?);
+ method public static int hash(java.lang.Object!...);
+ method public static int hashCode(Object?);
+ }
+
+ public class Pair<F, S> {
+ ctor public Pair(F?, S?);
+ method public static <A, B> androidx.core.util.Pair<A!,B!> create(A?, B?);
+ field public final F? first;
+ field public final S? second;
+ }
+
+ public final class PatternsCompat {
+ field public static final java.util.regex.Pattern! DOMAIN_NAME;
+ field public static final java.util.regex.Pattern! EMAIL_ADDRESS;
+ field public static final java.util.regex.Pattern! IP_ADDRESS;
+ field public static final java.util.regex.Pattern! WEB_URL;
+ }
+
+ public final class Pools {
+ }
+
+ public static interface Pools.Pool<T> {
+ method public T? acquire();
+ method public boolean release(T);
+ }
+
+ public static class Pools.SimplePool<T> implements androidx.core.util.Pools.Pool<T> {
+ ctor public Pools.SimplePool(int);
+ method public T! acquire();
+ method public boolean release(T);
+ }
+
+ public static class Pools.SynchronizedPool<T> extends androidx.core.util.Pools.SimplePool<T> {
+ ctor public Pools.SynchronizedPool(int);
+ }
+
+ public interface Predicate<T> {
+ method public boolean test(T!);
+ }
+
+ public interface Supplier<T> {
+ method public T! get();
+ }
+
+}
+
+package androidx.core.view {
+
+ public class AccessibilityDelegateCompat {
+ ctor public AccessibilityDelegateCompat();
+ method public boolean dispatchPopulateAccessibilityEvent(android.view.View!, android.view.accessibility.AccessibilityEvent!);
+ method public androidx.core.view.accessibility.AccessibilityNodeProviderCompat! getAccessibilityNodeProvider(android.view.View!);
+ method public void onInitializeAccessibilityEvent(android.view.View!, android.view.accessibility.AccessibilityEvent!);
+ method public void onInitializeAccessibilityNodeInfo(android.view.View!, androidx.core.view.accessibility.AccessibilityNodeInfoCompat!);
+ method public void onPopulateAccessibilityEvent(android.view.View!, android.view.accessibility.AccessibilityEvent!);
+ method public boolean onRequestSendAccessibilityEvent(android.view.ViewGroup!, android.view.View!, android.view.accessibility.AccessibilityEvent!);
+ method public boolean performAccessibilityAction(android.view.View!, int, android.os.Bundle!);
+ method public void sendAccessibilityEvent(android.view.View!, int);
+ method public void sendAccessibilityEventUnchecked(android.view.View!, android.view.accessibility.AccessibilityEvent!);
+ }
+
+ public abstract class ActionProvider {
+ ctor public ActionProvider(android.content.Context!);
+ method public android.content.Context! getContext();
+ method public boolean hasSubMenu();
+ method public boolean isVisible();
+ method public abstract android.view.View! onCreateActionView();
+ method public android.view.View! onCreateActionView(android.view.MenuItem!);
+ method public boolean onPerformDefaultAction();
+ method public void onPrepareSubMenu(android.view.SubMenu!);
+ method public boolean overridesItemVisibility();
+ method public void refreshVisibility();
+ method public void setVisibilityListener(androidx.core.view.ActionProvider.VisibilityListener!);
+ }
+
+ public static interface ActionProvider.VisibilityListener {
+ method public void onActionProviderVisibilityChanged(boolean);
+ }
+
+ public final class DisplayCutoutCompat {
+ ctor public DisplayCutoutCompat(android.graphics.Rect!, java.util.List<android.graphics.Rect!>!);
+ method public java.util.List<android.graphics.Rect!>! getBoundingRects();
+ method public int getSafeInsetBottom();
+ method public int getSafeInsetLeft();
+ method public int getSafeInsetRight();
+ method public int getSafeInsetTop();
+ }
+
+ public final class DragAndDropPermissionsCompat {
+ method public void release();
+ }
+
+ public class DragStartHelper {
+ ctor public DragStartHelper(android.view.View!, androidx.core.view.DragStartHelper.OnDragStartListener!);
+ method public void attach();
+ method public void detach();
+ method public void getTouchPosition(android.graphics.Point!);
+ method public boolean onLongClick(android.view.View!);
+ method public boolean onTouch(android.view.View!, android.view.MotionEvent!);
+ }
+
+ public static interface DragStartHelper.OnDragStartListener {
+ method public boolean onDragStart(android.view.View!, androidx.core.view.DragStartHelper!);
+ }
+
+ public final class GestureDetectorCompat {
+ ctor public GestureDetectorCompat(android.content.Context!, android.view.GestureDetector.OnGestureListener!);
+ ctor public GestureDetectorCompat(android.content.Context!, android.view.GestureDetector.OnGestureListener!, android.os.Handler!);
+ method public boolean isLongpressEnabled();
+ method public boolean onTouchEvent(android.view.MotionEvent!);
+ method public void setIsLongpressEnabled(boolean);
+ method public void setOnDoubleTapListener(android.view.GestureDetector.OnDoubleTapListener!);
+ }
+
+ public final class GravityCompat {
+ method public static void apply(int, int, int, android.graphics.Rect!, android.graphics.Rect!, int);
+ method public static void apply(int, int, int, android.graphics.Rect!, int, int, android.graphics.Rect!, int);
+ method public static void applyDisplay(int, android.graphics.Rect!, android.graphics.Rect!, int);
+ method public static int getAbsoluteGravity(int, int);
+ field public static final int END = 8388613; // 0x800005
+ field public static final int RELATIVE_HORIZONTAL_GRAVITY_MASK = 8388615; // 0x800007
+ field public static final int RELATIVE_LAYOUT_DIRECTION = 8388608; // 0x800000
+ field public static final int START = 8388611; // 0x800003
+ }
+
+ public final class InputDeviceCompat {
+ field public static final int SOURCE_ANY = -256; // 0xffffff00
+ field public static final int SOURCE_CLASS_BUTTON = 1; // 0x1
+ field public static final int SOURCE_CLASS_JOYSTICK = 16; // 0x10
+ field public static final int SOURCE_CLASS_MASK = 255; // 0xff
+ field public static final int SOURCE_CLASS_NONE = 0; // 0x0
+ field public static final int SOURCE_CLASS_POINTER = 2; // 0x2
+ field public static final int SOURCE_CLASS_POSITION = 8; // 0x8
+ field public static final int SOURCE_CLASS_TRACKBALL = 4; // 0x4
+ field public static final int SOURCE_DPAD = 513; // 0x201
+ field public static final int SOURCE_GAMEPAD = 1025; // 0x401
+ field public static final int SOURCE_HDMI = 33554433; // 0x2000001
+ field public static final int SOURCE_JOYSTICK = 16777232; // 0x1000010
+ field public static final int SOURCE_KEYBOARD = 257; // 0x101
+ field public static final int SOURCE_MOUSE = 8194; // 0x2002
+ field public static final int SOURCE_ROTARY_ENCODER = 4194304; // 0x400000
+ field public static final int SOURCE_STYLUS = 16386; // 0x4002
+ field public static final int SOURCE_TOUCHPAD = 1048584; // 0x100008
+ field public static final int SOURCE_TOUCHSCREEN = 4098; // 0x1002
+ field public static final int SOURCE_TOUCH_NAVIGATION = 2097152; // 0x200000
+ field public static final int SOURCE_TRACKBALL = 65540; // 0x10004
+ field public static final int SOURCE_UNKNOWN = 0; // 0x0
+ }
+
+ public final class LayoutInflaterCompat {
+ method @Deprecated public static androidx.core.view.LayoutInflaterFactory! getFactory(android.view.LayoutInflater!);
+ method @Deprecated public static void setFactory(android.view.LayoutInflater, androidx.core.view.LayoutInflaterFactory);
+ method public static void setFactory2(android.view.LayoutInflater, android.view.LayoutInflater.Factory2);
+ }
+
+ @Deprecated public interface LayoutInflaterFactory {
+ method @Deprecated public android.view.View! onCreateView(android.view.View!, String!, android.content.Context!, android.util.AttributeSet!);
+ }
+
+ public final class MarginLayoutParamsCompat {
+ method public static int getLayoutDirection(android.view.ViewGroup.MarginLayoutParams!);
+ method public static int getMarginEnd(android.view.ViewGroup.MarginLayoutParams!);
+ method public static int getMarginStart(android.view.ViewGroup.MarginLayoutParams!);
+ method public static boolean isMarginRelative(android.view.ViewGroup.MarginLayoutParams!);
+ method public static void resolveLayoutDirection(android.view.ViewGroup.MarginLayoutParams!, int);
+ method public static void setLayoutDirection(android.view.ViewGroup.MarginLayoutParams!, int);
+ method public static void setMarginEnd(android.view.ViewGroup.MarginLayoutParams!, int);
+ method public static void setMarginStart(android.view.ViewGroup.MarginLayoutParams!, int);
+ }
+
+ public final class MenuCompat {
+ method public static void setGroupDividerEnabled(android.view.Menu!, boolean);
+ method @Deprecated public static void setShowAsAction(android.view.MenuItem!, int);
+ }
+
+ public final class MenuItemCompat {
+ method @Deprecated public static boolean collapseActionView(android.view.MenuItem!);
+ method @Deprecated public static boolean expandActionView(android.view.MenuItem!);
+ method public static androidx.core.view.ActionProvider! getActionProvider(android.view.MenuItem!);
+ method @Deprecated public static android.view.View! getActionView(android.view.MenuItem!);
+ method public static int getAlphabeticModifiers(android.view.MenuItem!);
+ method public static CharSequence! getContentDescription(android.view.MenuItem!);
+ method public static android.content.res.ColorStateList! getIconTintList(android.view.MenuItem!);
+ method public static android.graphics.PorterDuff.Mode! getIconTintMode(android.view.MenuItem!);
+ method public static int getNumericModifiers(android.view.MenuItem!);
+ method public static CharSequence! getTooltipText(android.view.MenuItem!);
+ method @Deprecated public static boolean isActionViewExpanded(android.view.MenuItem!);
+ method public static android.view.MenuItem! setActionProvider(android.view.MenuItem!, androidx.core.view.ActionProvider!);
+ method @Deprecated public static android.view.MenuItem! setActionView(android.view.MenuItem!, android.view.View!);
+ method @Deprecated public static android.view.MenuItem! setActionView(android.view.MenuItem!, int);
+ method public static void setAlphabeticShortcut(android.view.MenuItem!, char, int);
+ method public static void setContentDescription(android.view.MenuItem!, CharSequence!);
+ method public static void setIconTintList(android.view.MenuItem!, android.content.res.ColorStateList!);
+ method public static void setIconTintMode(android.view.MenuItem!, android.graphics.PorterDuff.Mode!);
+ method public static void setNumericShortcut(android.view.MenuItem!, char, int);
+ method @Deprecated public static android.view.MenuItem! setOnActionExpandListener(android.view.MenuItem!, androidx.core.view.MenuItemCompat.OnActionExpandListener!);
+ method public static void setShortcut(android.view.MenuItem!, char, char, int, int);
+ method @Deprecated public static void setShowAsAction(android.view.MenuItem!, int);
+ method public static void setTooltipText(android.view.MenuItem!, CharSequence!);
+ field @Deprecated public static final int SHOW_AS_ACTION_ALWAYS = 2; // 0x2
+ field @Deprecated public static final int SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW = 8; // 0x8
+ field @Deprecated public static final int SHOW_AS_ACTION_IF_ROOM = 1; // 0x1
+ field @Deprecated public static final int SHOW_AS_ACTION_NEVER = 0; // 0x0
+ field @Deprecated public static final int SHOW_AS_ACTION_WITH_TEXT = 4; // 0x4
+ }
+
+ @Deprecated public static interface MenuItemCompat.OnActionExpandListener {
+ method @Deprecated public boolean onMenuItemActionCollapse(android.view.MenuItem!);
+ method @Deprecated public boolean onMenuItemActionExpand(android.view.MenuItem!);
+ }
+
+ public final class MotionEventCompat {
+ method @Deprecated public static int findPointerIndex(android.view.MotionEvent!, int);
+ method @Deprecated public static int getActionIndex(android.view.MotionEvent!);
+ method @Deprecated public static int getActionMasked(android.view.MotionEvent!);
+ method @Deprecated public static float getAxisValue(android.view.MotionEvent!, int);
+ method @Deprecated public static float getAxisValue(android.view.MotionEvent!, int, int);
+ method @Deprecated public static int getButtonState(android.view.MotionEvent!);
+ method @Deprecated public static int getPointerCount(android.view.MotionEvent!);
+ method @Deprecated public static int getPointerId(android.view.MotionEvent!, int);
+ method @Deprecated public static int getSource(android.view.MotionEvent!);
+ method @Deprecated public static float getX(android.view.MotionEvent!, int);
+ method @Deprecated public static float getY(android.view.MotionEvent!, int);
+ method public static boolean isFromSource(android.view.MotionEvent!, int);
+ field @Deprecated public static final int ACTION_HOVER_ENTER = 9; // 0x9
+ field @Deprecated public static final int ACTION_HOVER_EXIT = 10; // 0xa
+ field @Deprecated public static final int ACTION_HOVER_MOVE = 7; // 0x7
+ field @Deprecated public static final int ACTION_MASK = 255; // 0xff
+ field @Deprecated public static final int ACTION_POINTER_DOWN = 5; // 0x5
+ field @Deprecated public static final int ACTION_POINTER_INDEX_MASK = 65280; // 0xff00
+ field @Deprecated public static final int ACTION_POINTER_INDEX_SHIFT = 8; // 0x8
+ field @Deprecated public static final int ACTION_POINTER_UP = 6; // 0x6
+ field @Deprecated public static final int ACTION_SCROLL = 8; // 0x8
+ field @Deprecated public static final int AXIS_BRAKE = 23; // 0x17
+ field @Deprecated public static final int AXIS_DISTANCE = 24; // 0x18
+ field @Deprecated public static final int AXIS_GAS = 22; // 0x16
+ field @Deprecated public static final int AXIS_GENERIC_1 = 32; // 0x20
+ field @Deprecated public static final int AXIS_GENERIC_10 = 41; // 0x29
+ field @Deprecated public static final int AXIS_GENERIC_11 = 42; // 0x2a
+ field @Deprecated public static final int AXIS_GENERIC_12 = 43; // 0x2b
+ field @Deprecated public static final int AXIS_GENERIC_13 = 44; // 0x2c
+ field @Deprecated public static final int AXIS_GENERIC_14 = 45; // 0x2d
+ field @Deprecated public static final int AXIS_GENERIC_15 = 46; // 0x2e
+ field @Deprecated public static final int AXIS_GENERIC_16 = 47; // 0x2f
+ field @Deprecated public static final int AXIS_GENERIC_2 = 33; // 0x21
+ field @Deprecated public static final int AXIS_GENERIC_3 = 34; // 0x22
+ field @Deprecated public static final int AXIS_GENERIC_4 = 35; // 0x23
+ field @Deprecated public static final int AXIS_GENERIC_5 = 36; // 0x24
+ field @Deprecated public static final int AXIS_GENERIC_6 = 37; // 0x25
+ field @Deprecated public static final int AXIS_GENERIC_7 = 38; // 0x26
+ field @Deprecated public static final int AXIS_GENERIC_8 = 39; // 0x27
+ field @Deprecated public static final int AXIS_GENERIC_9 = 40; // 0x28
+ field @Deprecated public static final int AXIS_HAT_X = 15; // 0xf
+ field @Deprecated public static final int AXIS_HAT_Y = 16; // 0x10
+ field @Deprecated public static final int AXIS_HSCROLL = 10; // 0xa
+ field @Deprecated public static final int AXIS_LTRIGGER = 17; // 0x11
+ field @Deprecated public static final int AXIS_ORIENTATION = 8; // 0x8
+ field @Deprecated public static final int AXIS_PRESSURE = 2; // 0x2
+ field public static final int AXIS_RELATIVE_X = 27; // 0x1b
+ field public static final int AXIS_RELATIVE_Y = 28; // 0x1c
+ field @Deprecated public static final int AXIS_RTRIGGER = 18; // 0x12
+ field @Deprecated public static final int AXIS_RUDDER = 20; // 0x14
+ field @Deprecated public static final int AXIS_RX = 12; // 0xc
+ field @Deprecated public static final int AXIS_RY = 13; // 0xd
+ field @Deprecated public static final int AXIS_RZ = 14; // 0xe
+ field public static final int AXIS_SCROLL = 26; // 0x1a
+ field @Deprecated public static final int AXIS_SIZE = 3; // 0x3
+ field @Deprecated public static final int AXIS_THROTTLE = 19; // 0x13
+ field @Deprecated public static final int AXIS_TILT = 25; // 0x19
+ field @Deprecated public static final int AXIS_TOOL_MAJOR = 6; // 0x6
+ field @Deprecated public static final int AXIS_TOOL_MINOR = 7; // 0x7
+ field @Deprecated public static final int AXIS_TOUCH_MAJOR = 4; // 0x4
+ field @Deprecated public static final int AXIS_TOUCH_MINOR = 5; // 0x5
+ field @Deprecated public static final int AXIS_VSCROLL = 9; // 0x9
+ field @Deprecated public static final int AXIS_WHEEL = 21; // 0x15
+ field @Deprecated public static final int AXIS_X = 0; // 0x0
+ field @Deprecated public static final int AXIS_Y = 1; // 0x1
+ field @Deprecated public static final int AXIS_Z = 11; // 0xb
+ field @Deprecated public static final int BUTTON_PRIMARY = 1; // 0x1
+ }
+
+ public interface NestedScrollingChild {
+ method public boolean dispatchNestedFling(float, float, boolean);
+ method public boolean dispatchNestedPreFling(float, float);
+ method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?);
+ method public boolean dispatchNestedScroll(int, int, int, int, int[]?);
+ method public boolean hasNestedScrollingParent();
+ method public boolean isNestedScrollingEnabled();
+ method public void setNestedScrollingEnabled(boolean);
+ method public boolean startNestedScroll(int);
+ method public void stopNestedScroll();
+ }
+
+ public interface NestedScrollingChild2 extends androidx.core.view.NestedScrollingChild {
+ method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?, int);
+ method public boolean dispatchNestedScroll(int, int, int, int, int[]?, int);
+ method public boolean hasNestedScrollingParent(int);
+ method public boolean startNestedScroll(int, int);
+ method public void stopNestedScroll(int);
+ }
+
+ public interface NestedScrollingChild3 extends androidx.core.view.NestedScrollingChild2 {
+ method public void dispatchNestedScroll(int, int, int, int, int[]?, int, int[]);
+ }
+
+ public class NestedScrollingChildHelper {
+ ctor public NestedScrollingChildHelper(android.view.View);
+ method public boolean dispatchNestedFling(float, float, boolean);
+ method public boolean dispatchNestedPreFling(float, float);
+ method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?);
+ method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?, int);
+ method public boolean dispatchNestedScroll(int, int, int, int, int[]?);
+ method public boolean dispatchNestedScroll(int, int, int, int, int[]?, int);
+ method public void dispatchNestedScroll(int, int, int, int, int[]?, int, int[]?);
+ method public boolean hasNestedScrollingParent();
+ method public boolean hasNestedScrollingParent(int);
+ method public boolean isNestedScrollingEnabled();
+ method public void onDetachedFromWindow();
+ method public void onStopNestedScroll(android.view.View);
+ method public void setNestedScrollingEnabled(boolean);
+ method public boolean startNestedScroll(int);
+ method public boolean startNestedScroll(int, int);
+ method public void stopNestedScroll();
+ method public void stopNestedScroll(int);
+ }
+
+ public interface NestedScrollingParent {
+ method public int getNestedScrollAxes();
+ method public boolean onNestedFling(android.view.View, float, float, boolean);
+ method public boolean onNestedPreFling(android.view.View, float, float);
+ method public void onNestedPreScroll(android.view.View, int, int, int[]);
+ method public void onNestedScroll(android.view.View, int, int, int, int);
+ method public void onNestedScrollAccepted(android.view.View, android.view.View, int);
+ method public boolean onStartNestedScroll(android.view.View, android.view.View, int);
+ method public void onStopNestedScroll(android.view.View);
+ }
+
+ public interface NestedScrollingParent2 extends androidx.core.view.NestedScrollingParent {
+ method public void onNestedPreScroll(android.view.View, int, int, int[], int);
+ method public void onNestedScroll(android.view.View, int, int, int, int, int);
+ method public void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
+ method public boolean onStartNestedScroll(android.view.View, android.view.View, int, int);
+ method public void onStopNestedScroll(android.view.View, int);
+ }
+
+ public interface NestedScrollingParent3 extends androidx.core.view.NestedScrollingParent2 {
+ method public void onNestedScroll(android.view.View, int, int, int, int, int, int[]);
+ }
+
+ public class NestedScrollingParentHelper {
+ ctor public NestedScrollingParentHelper(android.view.ViewGroup);
+ method public int getNestedScrollAxes();
+ method public void onNestedScrollAccepted(android.view.View, android.view.View, int);
+ method public void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
+ method public void onStopNestedScroll(android.view.View);
+ method public void onStopNestedScroll(android.view.View, int);
+ }
+
+ public interface OnApplyWindowInsetsListener {
+ method public androidx.core.view.WindowInsetsCompat! onApplyWindowInsets(android.view.View!, androidx.core.view.WindowInsetsCompat!);
+ }
+
+ public final class OneShotPreDrawListener implements android.view.View.OnAttachStateChangeListener android.view.ViewTreeObserver.OnPreDrawListener {
+ method public static androidx.core.view.OneShotPreDrawListener add(android.view.View, Runnable);
+ method public boolean onPreDraw();
+ method public void onViewAttachedToWindow(android.view.View!);
+ method public void onViewDetachedFromWindow(android.view.View!);
+ method public void removeListener();
+ }
+
+ public final class PointerIconCompat {
+ method public static androidx.core.view.PointerIconCompat! create(android.graphics.Bitmap!, float, float);
+ method public static androidx.core.view.PointerIconCompat! getSystemIcon(android.content.Context!, int);
+ method public static androidx.core.view.PointerIconCompat! load(android.content.res.Resources!, int);
+ field public static final int TYPE_ALIAS = 1010; // 0x3f2
+ field public static final int TYPE_ALL_SCROLL = 1013; // 0x3f5
+ field public static final int TYPE_ARROW = 1000; // 0x3e8
+ field public static final int TYPE_CELL = 1006; // 0x3ee
+ field public static final int TYPE_CONTEXT_MENU = 1001; // 0x3e9
+ field public static final int TYPE_COPY = 1011; // 0x3f3
+ field public static final int TYPE_CROSSHAIR = 1007; // 0x3ef
+ field public static final int TYPE_DEFAULT = 1000; // 0x3e8
+ field public static final int TYPE_GRAB = 1020; // 0x3fc
+ field public static final int TYPE_GRABBING = 1021; // 0x3fd
+ field public static final int TYPE_HAND = 1002; // 0x3ea
+ field public static final int TYPE_HELP = 1003; // 0x3eb
+ field public static final int TYPE_HORIZONTAL_DOUBLE_ARROW = 1014; // 0x3f6
+ field public static final int TYPE_NO_DROP = 1012; // 0x3f4
+ field public static final int TYPE_NULL = 0; // 0x0
+ field public static final int TYPE_TEXT = 1008; // 0x3f0
+ field public static final int TYPE_TOP_LEFT_DIAGONAL_DOUBLE_ARROW = 1017; // 0x3f9
+ field public static final int TYPE_TOP_RIGHT_DIAGONAL_DOUBLE_ARROW = 1016; // 0x3f8
+ field public static final int TYPE_VERTICAL_DOUBLE_ARROW = 1015; // 0x3f7
+ field public static final int TYPE_VERTICAL_TEXT = 1009; // 0x3f1
+ field public static final int TYPE_WAIT = 1004; // 0x3ec
+ field public static final int TYPE_ZOOM_IN = 1018; // 0x3fa
+ field public static final int TYPE_ZOOM_OUT = 1019; // 0x3fb
+ }
+
+ public final class ScaleGestureDetectorCompat {
+ method @Deprecated public static boolean isQuickScaleEnabled(Object!);
+ method public static boolean isQuickScaleEnabled(android.view.ScaleGestureDetector!);
+ method @Deprecated public static void setQuickScaleEnabled(Object!, boolean);
+ method public static void setQuickScaleEnabled(android.view.ScaleGestureDetector!, boolean);
+ }
+
+ public interface ScrollingView {
+ method public int computeHorizontalScrollExtent();
+ method public int computeHorizontalScrollOffset();
+ method public int computeHorizontalScrollRange();
+ method public int computeVerticalScrollExtent();
+ method public int computeVerticalScrollOffset();
+ method public int computeVerticalScrollRange();
+ }
+
+ public interface TintableBackgroundView {
+ method public android.content.res.ColorStateList? getSupportBackgroundTintList();
+ method public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+ method public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+ method public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+ }
+
+ @Deprecated public final class VelocityTrackerCompat {
+ method @Deprecated public static float getXVelocity(android.view.VelocityTracker!, int);
+ method @Deprecated public static float getYVelocity(android.view.VelocityTracker!, int);
+ }
+
+ public class ViewCompat {
+ ctor protected ViewCompat();
+ method public static int addAccessibilityAction(android.view.View, CharSequence, androidx.core.view.accessibility.AccessibilityViewCommand);
+ method public static void addKeyboardNavigationClusters(android.view.View, java.util.Collection<android.view.View!>, int);
+ method public static void addOnUnhandledKeyEventListener(android.view.View, androidx.core.view.ViewCompat.OnUnhandledKeyEventListenerCompat);
+ method public static androidx.core.view.ViewPropertyAnimatorCompat animate(android.view.View);
+ method @Deprecated public static boolean canScrollHorizontally(android.view.View!, int);
+ method @Deprecated public static boolean canScrollVertically(android.view.View!, int);
+ method public static void cancelDragAndDrop(android.view.View);
+ method @Deprecated public static int combineMeasuredStates(int, int);
+ method public static androidx.core.view.WindowInsetsCompat! dispatchApplyWindowInsets(android.view.View, androidx.core.view.WindowInsetsCompat!);
+ method public static void dispatchFinishTemporaryDetach(android.view.View);
+ method public static boolean dispatchNestedFling(android.view.View, float, float, boolean);
+ method public static boolean dispatchNestedPreFling(android.view.View, float, float);
+ method public static boolean dispatchNestedPreScroll(android.view.View, int, int, int[]?, int[]?);
+ method public static boolean dispatchNestedPreScroll(android.view.View, int, int, int[]?, int[]?, int);
+ method public static boolean dispatchNestedScroll(android.view.View, int, int, int, int, int[]?);
+ method public static void dispatchNestedScroll(android.view.View, int, int, int, int, int[]?, int, int[]);
+ method public static boolean dispatchNestedScroll(android.view.View, int, int, int, int, int[]?, int);
+ method public static void dispatchStartTemporaryDetach(android.view.View);
+ method public static void enableAccessibleClickableSpanSupport(android.view.View!);
+ method public static int generateViewId();
+ method public static androidx.core.view.AccessibilityDelegateCompat? getAccessibilityDelegate(android.view.View);
+ method public static int getAccessibilityLiveRegion(android.view.View);
+ method public static androidx.core.view.accessibility.AccessibilityNodeProviderCompat! getAccessibilityNodeProvider(android.view.View);
+ method @UiThread public static CharSequence! getAccessibilityPaneTitle(android.view.View!);
+ method @Deprecated public static float getAlpha(android.view.View!);
+ method public static android.content.res.ColorStateList! getBackgroundTintList(android.view.View);
+ method public static android.graphics.PorterDuff.Mode! getBackgroundTintMode(android.view.View);
+ method public static android.graphics.Rect? getClipBounds(android.view.View);
+ method public static android.view.Display? getDisplay(android.view.View);
+ method public static float getElevation(android.view.View);
+ method public static boolean getFitsSystemWindows(android.view.View);
+ method public static int getImportantForAccessibility(android.view.View);
+ method public static int getImportantForAutofill(android.view.View);
+ method public static int getLabelFor(android.view.View);
+ method @Deprecated public static int getLayerType(android.view.View!);
+ method public static int getLayoutDirection(android.view.View);
+ method @Deprecated public static android.graphics.Matrix? getMatrix(android.view.View!);
+ method @Deprecated public static int getMeasuredHeightAndState(android.view.View!);
+ method @Deprecated public static int getMeasuredState(android.view.View!);
+ method @Deprecated public static int getMeasuredWidthAndState(android.view.View!);
+ method public static int getMinimumHeight(android.view.View);
+ method public static int getMinimumWidth(android.view.View);
+ method public static int getNextClusterForwardId(android.view.View);
+ method @Deprecated public static int getOverScrollMode(android.view.View!);
+ method @Px public static int getPaddingEnd(android.view.View);
+ method @Px public static int getPaddingStart(android.view.View);
+ method public static android.view.ViewParent! getParentForAccessibility(android.view.View);
+ method @Deprecated public static float getPivotX(android.view.View!);
+ method @Deprecated public static float getPivotY(android.view.View!);
+ method @Deprecated public static float getRotation(android.view.View!);
+ method @Deprecated public static float getRotationX(android.view.View!);
+ method @Deprecated public static float getRotationY(android.view.View!);
+ method @Deprecated public static float getScaleX(android.view.View!);
+ method @Deprecated public static float getScaleY(android.view.View!);
+ method public static int getScrollIndicators(android.view.View);
+ method public static java.util.List<android.graphics.Rect!> getSystemGestureExclusionRects(android.view.View);
+ method public static String? getTransitionName(android.view.View);
+ method @Deprecated public static float getTranslationX(android.view.View!);
+ method @Deprecated public static float getTranslationY(android.view.View!);
+ method public static float getTranslationZ(android.view.View);
+ method public static int getWindowSystemUiVisibility(android.view.View);
+ method @Deprecated public static float getX(android.view.View!);
+ method @Deprecated public static float getY(android.view.View!);
+ method public static float getZ(android.view.View);
+ method public static boolean hasAccessibilityDelegate(android.view.View);
+ method public static boolean hasExplicitFocusable(android.view.View);
+ method public static boolean hasNestedScrollingParent(android.view.View);
+ method public static boolean hasNestedScrollingParent(android.view.View, int);
+ method public static boolean hasOnClickListeners(android.view.View);
+ method public static boolean hasOverlappingRendering(android.view.View);
+ method public static boolean hasTransientState(android.view.View);
+ method @UiThread public static boolean isAccessibilityHeading(android.view.View!);
+ method public static boolean isAttachedToWindow(android.view.View);
+ method public static boolean isFocusedByDefault(android.view.View);
+ method public static boolean isImportantForAccessibility(android.view.View);
+ method public static boolean isImportantForAutofill(android.view.View);
+ method public static boolean isInLayout(android.view.View);
+ method public static boolean isKeyboardNavigationCluster(android.view.View);
+ method public static boolean isLaidOut(android.view.View);
+ method public static boolean isLayoutDirectionResolved(android.view.View);
+ method public static boolean isNestedScrollingEnabled(android.view.View);
+ method @Deprecated public static boolean isOpaque(android.view.View!);
+ method public static boolean isPaddingRelative(android.view.View);
+ method @UiThread public static boolean isScreenReaderFocusable(android.view.View!);
+ method @Deprecated public static void jumpDrawablesToCurrentState(android.view.View!);
+ method public static android.view.View! keyboardNavigationClusterSearch(android.view.View, android.view.View!, int);
+ method public static void offsetLeftAndRight(android.view.View, int);
+ method public static void offsetTopAndBottom(android.view.View, int);
+ method public static androidx.core.view.WindowInsetsCompat! onApplyWindowInsets(android.view.View, androidx.core.view.WindowInsetsCompat!);
+ method @Deprecated public static void onInitializeAccessibilityEvent(android.view.View!, android.view.accessibility.AccessibilityEvent!);
+ method public static void onInitializeAccessibilityNodeInfo(android.view.View, androidx.core.view.accessibility.AccessibilityNodeInfoCompat!);
+ method @Deprecated public static void onPopulateAccessibilityEvent(android.view.View!, android.view.accessibility.AccessibilityEvent!);
+ method public static boolean performAccessibilityAction(android.view.View, int, android.os.Bundle!);
+ method public static void postInvalidateOnAnimation(android.view.View);
+ method public static void postInvalidateOnAnimation(android.view.View, int, int, int, int);
+ method public static void postOnAnimation(android.view.View, Runnable!);
+ method public static void postOnAnimationDelayed(android.view.View, Runnable!, long);
+ method public static void removeAccessibilityAction(android.view.View, int);
+ method public static void removeOnUnhandledKeyEventListener(android.view.View, androidx.core.view.ViewCompat.OnUnhandledKeyEventListenerCompat);
+ method public static void replaceAccessibilityAction(android.view.View, androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat, CharSequence?, androidx.core.view.accessibility.AccessibilityViewCommand?);
+ method public static void requestApplyInsets(android.view.View);
+ method public static <T extends android.view.View> T requireViewById(android.view.View, @IdRes int);
+ method @Deprecated public static int resolveSizeAndState(int, int, int);
+ method public static boolean restoreDefaultFocus(android.view.View);
+ method public static void setAccessibilityDelegate(android.view.View, androidx.core.view.AccessibilityDelegateCompat!);
+ method @UiThread public static void setAccessibilityHeading(android.view.View!, boolean);
+ method public static void setAccessibilityLiveRegion(android.view.View, int);
+ method @UiThread public static void setAccessibilityPaneTitle(android.view.View!, CharSequence!);
+ method @Deprecated public static void setActivated(android.view.View!, boolean);
+ method @Deprecated public static void setAlpha(android.view.View!, @FloatRange(from=0.0, to=1.0) float);
+ method public static void setAutofillHints(android.view.View, java.lang.String!...);
+ method public static void setBackground(android.view.View, android.graphics.drawable.Drawable?);
+ method public static void setBackgroundTintList(android.view.View, android.content.res.ColorStateList!);
+ method public static void setBackgroundTintMode(android.view.View, android.graphics.PorterDuff.Mode!);
+ method @Deprecated public static void setChildrenDrawingOrderEnabled(android.view.ViewGroup!, boolean);
+ method public static void setClipBounds(android.view.View, android.graphics.Rect!);
+ method public static void setElevation(android.view.View, float);
+ method @Deprecated public static void setFitsSystemWindows(android.view.View!, boolean);
+ method public static void setFocusedByDefault(android.view.View, boolean);
+ method public static void setHasTransientState(android.view.View, boolean);
+ method public static void setImportantForAccessibility(android.view.View, int);
+ method public static void setImportantForAutofill(android.view.View, int);
+ method public static void setKeyboardNavigationCluster(android.view.View, boolean);
+ method public static void setLabelFor(android.view.View, @IdRes int);
+ method public static void setLayerPaint(android.view.View, android.graphics.Paint!);
+ method @Deprecated public static void setLayerType(android.view.View!, int, android.graphics.Paint!);
+ method public static void setLayoutDirection(android.view.View, int);
+ method public static void setNestedScrollingEnabled(android.view.View, boolean);
+ method public static void setNextClusterForwardId(android.view.View, int);
+ method public static void setOnApplyWindowInsetsListener(android.view.View, androidx.core.view.OnApplyWindowInsetsListener!);
+ method @Deprecated public static void setOverScrollMode(android.view.View!, int);
+ method public static void setPaddingRelative(android.view.View, @Px int, @Px int, @Px int, @Px int);
+ method @Deprecated public static void setPivotX(android.view.View!, float);
+ method @Deprecated public static void setPivotY(android.view.View!, float);
+ method public static void setPointerIcon(android.view.View, androidx.core.view.PointerIconCompat!);
+ method @Deprecated public static void setRotation(android.view.View!, float);
+ method @Deprecated public static void setRotationX(android.view.View!, float);
+ method @Deprecated public static void setRotationY(android.view.View!, float);
+ method @Deprecated public static void setSaveFromParentEnabled(android.view.View!, boolean);
+ method @Deprecated public static void setScaleX(android.view.View!, float);
+ method @Deprecated public static void setScaleY(android.view.View!, float);
+ method @UiThread public static void setScreenReaderFocusable(android.view.View!, boolean);
+ method public static void setScrollIndicators(android.view.View, int);
+ method public static void setScrollIndicators(android.view.View, int, int);
+ method public static void setSystemGestureExclusionRects(android.view.View, java.util.List<android.graphics.Rect!>);
+ method public static void setTooltipText(android.view.View, CharSequence?);
+ method public static void setTransitionName(android.view.View, String!);
+ method @Deprecated public static void setTranslationX(android.view.View!, float);
+ method @Deprecated public static void setTranslationY(android.view.View!, float);
+ method public static void setTranslationZ(android.view.View, float);
+ method @Deprecated public static void setX(android.view.View!, float);
+ method @Deprecated public static void setY(android.view.View!, float);
+ method public static void setZ(android.view.View, float);
+ method public static boolean startDragAndDrop(android.view.View, android.content.ClipData!, android.view.View.DragShadowBuilder!, Object!, int);
+ method public static boolean startNestedScroll(android.view.View, int);
+ method public static boolean startNestedScroll(android.view.View, int, int);
+ method public static void stopNestedScroll(android.view.View);
+ method public static void stopNestedScroll(android.view.View, int);
+ method public static void updateDragShadow(android.view.View, android.view.View.DragShadowBuilder!);
+ field public static final int ACCESSIBILITY_LIVE_REGION_ASSERTIVE = 2; // 0x2
+ field public static final int ACCESSIBILITY_LIVE_REGION_NONE = 0; // 0x0
+ field public static final int ACCESSIBILITY_LIVE_REGION_POLITE = 1; // 0x1
+ field public static final int IMPORTANT_FOR_ACCESSIBILITY_AUTO = 0; // 0x0
+ field public static final int IMPORTANT_FOR_ACCESSIBILITY_NO = 2; // 0x2
+ field public static final int IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS = 4; // 0x4
+ field public static final int IMPORTANT_FOR_ACCESSIBILITY_YES = 1; // 0x1
+ field @Deprecated public static final int LAYER_TYPE_HARDWARE = 2; // 0x2
+ field @Deprecated public static final int LAYER_TYPE_NONE = 0; // 0x0
+ field @Deprecated public static final int LAYER_TYPE_SOFTWARE = 1; // 0x1
+ field public static final int LAYOUT_DIRECTION_INHERIT = 2; // 0x2
+ field public static final int LAYOUT_DIRECTION_LOCALE = 3; // 0x3
+ field public static final int LAYOUT_DIRECTION_LTR = 0; // 0x0
+ field public static final int LAYOUT_DIRECTION_RTL = 1; // 0x1
+ field @Deprecated public static final int MEASURED_HEIGHT_STATE_SHIFT = 16; // 0x10
+ field @Deprecated public static final int MEASURED_SIZE_MASK = 16777215; // 0xffffff
+ field @Deprecated public static final int MEASURED_STATE_MASK = -16777216; // 0xff000000
+ field @Deprecated public static final int MEASURED_STATE_TOO_SMALL = 16777216; // 0x1000000
+ field @Deprecated public static final int OVER_SCROLL_ALWAYS = 0; // 0x0
+ field @Deprecated public static final int OVER_SCROLL_IF_CONTENT_SCROLLS = 1; // 0x1
+ field @Deprecated public static final int OVER_SCROLL_NEVER = 2; // 0x2
+ field public static final int SCROLL_AXIS_HORIZONTAL = 1; // 0x1
+ field public static final int SCROLL_AXIS_NONE = 0; // 0x0
+ field public static final int SCROLL_AXIS_VERTICAL = 2; // 0x2
+ field public static final int SCROLL_INDICATOR_BOTTOM = 2; // 0x2
+ field public static final int SCROLL_INDICATOR_END = 32; // 0x20
+ field public static final int SCROLL_INDICATOR_LEFT = 4; // 0x4
+ field public static final int SCROLL_INDICATOR_RIGHT = 8; // 0x8
+ field public static final int SCROLL_INDICATOR_START = 16; // 0x10
+ field public static final int SCROLL_INDICATOR_TOP = 1; // 0x1
+ field public static final int TYPE_NON_TOUCH = 1; // 0x1
+ field public static final int TYPE_TOUCH = 0; // 0x0
+ }
+
+ public static interface ViewCompat.OnUnhandledKeyEventListenerCompat {
+ method public boolean onUnhandledKeyEvent(android.view.View!, android.view.KeyEvent!);
+ }
+
+ public final class ViewConfigurationCompat {
+ method public static float getScaledHorizontalScrollFactor(android.view.ViewConfiguration, android.content.Context);
+ method public static int getScaledHoverSlop(android.view.ViewConfiguration!);
+ method @Deprecated public static int getScaledPagingTouchSlop(android.view.ViewConfiguration!);
+ method public static float getScaledVerticalScrollFactor(android.view.ViewConfiguration, android.content.Context);
+ method @Deprecated public static boolean hasPermanentMenuKey(android.view.ViewConfiguration!);
+ method public static boolean shouldShowMenuShortcutsWhenKeyboardPresent(android.view.ViewConfiguration!, android.content.Context);
+ }
+
+ public final class ViewGroupCompat {
+ method public static int getLayoutMode(android.view.ViewGroup);
+ method public static int getNestedScrollAxes(android.view.ViewGroup);
+ method public static boolean isTransitionGroup(android.view.ViewGroup);
+ method @Deprecated public static boolean onRequestSendAccessibilityEvent(android.view.ViewGroup!, android.view.View!, android.view.accessibility.AccessibilityEvent!);
+ method public static void setLayoutMode(android.view.ViewGroup, int);
+ method @Deprecated public static void setMotionEventSplittingEnabled(android.view.ViewGroup!, boolean);
+ method public static void setTransitionGroup(android.view.ViewGroup, boolean);
+ field public static final int LAYOUT_MODE_CLIP_BOUNDS = 0; // 0x0
+ field public static final int LAYOUT_MODE_OPTICAL_BOUNDS = 1; // 0x1
+ }
+
+ public final class ViewParentCompat {
+ method public static void notifySubtreeAccessibilityStateChanged(android.view.ViewParent!, android.view.View!, android.view.View!, int);
+ method public static boolean onNestedFling(android.view.ViewParent!, android.view.View!, float, float, boolean);
+ method public static boolean onNestedPreFling(android.view.ViewParent!, android.view.View!, float, float);
+ method public static void onNestedPreScroll(android.view.ViewParent!, android.view.View!, int, int, int[]!);
+ method public static void onNestedPreScroll(android.view.ViewParent!, android.view.View!, int, int, int[]!, int);
+ method public static void onNestedScroll(android.view.ViewParent!, android.view.View!, int, int, int, int);
+ method public static void onNestedScroll(android.view.ViewParent!, android.view.View!, int, int, int, int, int);
+ method public static void onNestedScroll(android.view.ViewParent!, android.view.View!, int, int, int, int, int, int[]);
+ method public static void onNestedScrollAccepted(android.view.ViewParent!, android.view.View!, android.view.View!, int);
+ method public static void onNestedScrollAccepted(android.view.ViewParent!, android.view.View!, android.view.View!, int, int);
+ method public static boolean onStartNestedScroll(android.view.ViewParent!, android.view.View!, android.view.View!, int);
+ method public static boolean onStartNestedScroll(android.view.ViewParent!, android.view.View!, android.view.View!, int, int);
+ method public static void onStopNestedScroll(android.view.ViewParent!, android.view.View!);
+ method public static void onStopNestedScroll(android.view.ViewParent!, android.view.View!, int);
+ method @Deprecated public static boolean requestSendAccessibilityEvent(android.view.ViewParent!, android.view.View!, android.view.accessibility.AccessibilityEvent!);
+ }
+
+ public final class ViewPropertyAnimatorCompat {
+ method public androidx.core.view.ViewPropertyAnimatorCompat! alpha(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! alphaBy(float);
+ method public void cancel();
+ method public long getDuration();
+ method public android.view.animation.Interpolator! getInterpolator();
+ method public long getStartDelay();
+ method public androidx.core.view.ViewPropertyAnimatorCompat! rotation(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! rotationBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! rotationX(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! rotationXBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! rotationY(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! rotationYBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! scaleX(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! scaleXBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! scaleY(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! scaleYBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! setDuration(long);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! setInterpolator(android.view.animation.Interpolator!);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! setListener(androidx.core.view.ViewPropertyAnimatorListener!);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! setStartDelay(long);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! setUpdateListener(androidx.core.view.ViewPropertyAnimatorUpdateListener!);
+ method public void start();
+ method public androidx.core.view.ViewPropertyAnimatorCompat! translationX(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! translationXBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! translationY(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! translationYBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! translationZ(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! translationZBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! withEndAction(Runnable!);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! withLayer();
+ method public androidx.core.view.ViewPropertyAnimatorCompat! withStartAction(Runnable!);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! x(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! xBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! y(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! yBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! z(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! zBy(float);
+ }
+
+ public interface ViewPropertyAnimatorListener {
+ method public void onAnimationCancel(android.view.View!);
+ method public void onAnimationEnd(android.view.View!);
+ method public void onAnimationStart(android.view.View!);
+ }
+
+ public class ViewPropertyAnimatorListenerAdapter implements androidx.core.view.ViewPropertyAnimatorListener {
+ ctor public ViewPropertyAnimatorListenerAdapter();
+ method public void onAnimationCancel(android.view.View!);
+ method public void onAnimationEnd(android.view.View!);
+ method public void onAnimationStart(android.view.View!);
+ }
+
+ public interface ViewPropertyAnimatorUpdateListener {
+ method public void onAnimationUpdate(android.view.View!);
+ }
+
+ public final class WindowCompat {
+ method public static <T extends android.view.View> T requireViewById(android.view.Window, @IdRes int);
+ field public static final int FEATURE_ACTION_BAR = 8; // 0x8
+ field public static final int FEATURE_ACTION_BAR_OVERLAY = 9; // 0x9
+ field public static final int FEATURE_ACTION_MODE_OVERLAY = 10; // 0xa
+ }
+
+ public class WindowInsetsCompat {
+ ctor public WindowInsetsCompat(androidx.core.view.WindowInsetsCompat!);
+ method public androidx.core.view.WindowInsetsCompat! consumeDisplayCutout();
+ method public androidx.core.view.WindowInsetsCompat! consumeStableInsets();
+ method public androidx.core.view.WindowInsetsCompat! consumeSystemWindowInsets();
+ method public androidx.core.view.DisplayCutoutCompat? getDisplayCutout();
+ method public androidx.core.graphics.Insets getMandatorySystemGestureInsets();
+ method public int getStableInsetBottom();
+ method public int getStableInsetLeft();
+ method public int getStableInsetRight();
+ method public int getStableInsetTop();
+ method public androidx.core.graphics.Insets getStableInsets();
+ method public androidx.core.graphics.Insets getSystemGestureInsets();
+ method public int getSystemWindowInsetBottom();
+ method public int getSystemWindowInsetLeft();
+ method public int getSystemWindowInsetRight();
+ method public int getSystemWindowInsetTop();
+ method public androidx.core.graphics.Insets getSystemWindowInsets();
+ method public androidx.core.graphics.Insets getTappableElementInsets();
+ method public boolean hasInsets();
+ method public boolean hasStableInsets();
+ method public boolean hasSystemWindowInsets();
+ method public boolean isConsumed();
+ method public boolean isRound();
+ method public androidx.core.view.WindowInsetsCompat! replaceSystemWindowInsets(int, int, int, int);
+ method public androidx.core.view.WindowInsetsCompat! replaceSystemWindowInsets(android.graphics.Rect!);
+ method @RequiresApi(20) public android.view.WindowInsets? toWindowInsets();
+ method @RequiresApi(20) public static androidx.core.view.WindowInsetsCompat toWindowInsetsCompat(android.view.WindowInsets);
+ }
+
+}
+
+package androidx.core.view.accessibility {
+
+ public final class AccessibilityClickableSpanCompat extends android.text.style.ClickableSpan {
+ method public void onClick(android.view.View);
+ }
+
+ public final class AccessibilityEventCompat {
+ method @Deprecated public static void appendRecord(android.view.accessibility.AccessibilityEvent!, androidx.core.view.accessibility.AccessibilityRecordCompat!);
+ method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! asRecord(android.view.accessibility.AccessibilityEvent!);
+ method public static int getAction(android.view.accessibility.AccessibilityEvent!);
+ method public static int getContentChangeTypes(android.view.accessibility.AccessibilityEvent!);
+ method public static int getMovementGranularity(android.view.accessibility.AccessibilityEvent!);
+ method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! getRecord(android.view.accessibility.AccessibilityEvent!, int);
+ method @Deprecated public static int getRecordCount(android.view.accessibility.AccessibilityEvent!);
+ method public static void setAction(android.view.accessibility.AccessibilityEvent!, int);
+ method public static void setContentChangeTypes(android.view.accessibility.AccessibilityEvent!, int);
+ method public static void setMovementGranularity(android.view.accessibility.AccessibilityEvent!, int);
+ field public static final int CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION = 4; // 0x4
+ field public static final int CONTENT_CHANGE_TYPE_PANE_APPEARED = 16; // 0x10
+ field public static final int CONTENT_CHANGE_TYPE_PANE_DISAPPEARED = 32; // 0x20
+ field public static final int CONTENT_CHANGE_TYPE_PANE_TITLE = 8; // 0x8
+ field public static final int CONTENT_CHANGE_TYPE_SUBTREE = 1; // 0x1
+ field public static final int CONTENT_CHANGE_TYPE_TEXT = 2; // 0x2
+ field public static final int CONTENT_CHANGE_TYPE_UNDEFINED = 0; // 0x0
+ field public static final int TYPES_ALL_MASK = -1; // 0xffffffff
+ field public static final int TYPE_ANNOUNCEMENT = 16384; // 0x4000
+ field public static final int TYPE_ASSIST_READING_CONTEXT = 16777216; // 0x1000000
+ field public static final int TYPE_GESTURE_DETECTION_END = 524288; // 0x80000
+ field public static final int TYPE_GESTURE_DETECTION_START = 262144; // 0x40000
+ field @Deprecated public static final int TYPE_TOUCH_EXPLORATION_GESTURE_END = 1024; // 0x400
+ field @Deprecated public static final int TYPE_TOUCH_EXPLORATION_GESTURE_START = 512; // 0x200
+ field public static final int TYPE_TOUCH_INTERACTION_END = 2097152; // 0x200000
+ field public static final int TYPE_TOUCH_INTERACTION_START = 1048576; // 0x100000
+ field public static final int TYPE_VIEW_ACCESSIBILITY_FOCUSED = 32768; // 0x8000
+ field public static final int TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED = 65536; // 0x10000
+ field public static final int TYPE_VIEW_CONTEXT_CLICKED = 8388608; // 0x800000
+ field @Deprecated public static final int TYPE_VIEW_HOVER_ENTER = 128; // 0x80
+ field @Deprecated public static final int TYPE_VIEW_HOVER_EXIT = 256; // 0x100
+ field @Deprecated public static final int TYPE_VIEW_SCROLLED = 4096; // 0x1000
+ field @Deprecated public static final int TYPE_VIEW_TEXT_SELECTION_CHANGED = 8192; // 0x2000
+ field public static final int TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY = 131072; // 0x20000
+ field public static final int TYPE_WINDOWS_CHANGED = 4194304; // 0x400000
+ field @Deprecated public static final int TYPE_WINDOW_CONTENT_CHANGED = 2048; // 0x800
+ }
+
+ public final class AccessibilityManagerCompat {
+ method @Deprecated public static boolean addAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager!, androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener!);
+ method public static boolean addTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager!, androidx.core.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener!);
+ method @Deprecated public static java.util.List<android.accessibilityservice.AccessibilityServiceInfo!>! getEnabledAccessibilityServiceList(android.view.accessibility.AccessibilityManager!, int);
+ method @Deprecated public static java.util.List<android.accessibilityservice.AccessibilityServiceInfo!>! getInstalledAccessibilityServiceList(android.view.accessibility.AccessibilityManager!);
+ method @Deprecated public static boolean isTouchExplorationEnabled(android.view.accessibility.AccessibilityManager!);
+ method @Deprecated public static boolean removeAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager!, androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener!);
+ method public static boolean removeTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager!, androidx.core.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener!);
+ }
+
+ @Deprecated public static interface AccessibilityManagerCompat.AccessibilityStateChangeListener {
+ method @Deprecated public void onAccessibilityStateChanged(boolean);
+ }
+
+ @Deprecated public abstract static class AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat implements androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener {
+ ctor @Deprecated public AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat();
+ }
+
+ public static interface AccessibilityManagerCompat.TouchExplorationStateChangeListener {
+ method public void onTouchExplorationStateChanged(boolean);
+ }
+
+ public class AccessibilityNodeInfoCompat {
+ ctor @Deprecated public AccessibilityNodeInfoCompat(Object!);
+ method public void addAction(int);
+ method public void addAction(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat!);
+ method public void addChild(android.view.View!);
+ method public void addChild(android.view.View!, int);
+ method public boolean canOpenPopup();
+ method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat!>! findAccessibilityNodeInfosByText(String!);
+ method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat!>! findAccessibilityNodeInfosByViewId(String!);
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! findFocus(int);
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! focusSearch(int);
+ method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat!>! getActionList();
+ method public int getActions();
+ method @Deprecated public void getBoundsInParent(android.graphics.Rect!);
+ method public void getBoundsInScreen(android.graphics.Rect!);
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getChild(int);
+ method public int getChildCount();
+ method public CharSequence! getClassName();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat! getCollectionInfo();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat! getCollectionItemInfo();
+ method public CharSequence! getContentDescription();
+ method public int getDrawingOrder();
+ method public CharSequence! getError();
+ method public android.os.Bundle! getExtras();
+ method public CharSequence? getHintText();
+ method @Deprecated public Object! getInfo();
+ method public int getInputType();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getLabelFor();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getLabeledBy();
+ method public int getLiveRegion();
+ method public int getMaxTextLength();
+ method public int getMovementGranularities();
+ method public CharSequence! getPackageName();
+ method public CharSequence? getPaneTitle();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getParent();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat! getRangeInfo();
+ method public CharSequence? getRoleDescription();
+ method public CharSequence! getText();
+ method public int getTextSelectionEnd();
+ method public int getTextSelectionStart();
+ method public CharSequence? getTooltipText();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.TouchDelegateInfoCompat? getTouchDelegateInfo();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getTraversalAfter();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getTraversalBefore();
+ method public String! getViewIdResourceName();
+ method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat! getWindow();
+ method public int getWindowId();
+ method public boolean isAccessibilityFocused();
+ method public boolean isCheckable();
+ method public boolean isChecked();
+ method public boolean isClickable();
+ method public boolean isContentInvalid();
+ method public boolean isContextClickable();
+ method public boolean isDismissable();
+ method public boolean isEditable();
+ method public boolean isEnabled();
+ method public boolean isFocusable();
+ method public boolean isFocused();
+ method public boolean isHeading();
+ method public boolean isImportantForAccessibility();
+ method public boolean isLongClickable();
+ method public boolean isMultiLine();
+ method public boolean isPassword();
+ method public boolean isScreenReaderFocusable();
+ method public boolean isScrollable();
+ method public boolean isSelected();
+ method public boolean isShowingHintText();
+ method public boolean isTextEntryKey();
+ method public boolean isVisibleToUser();
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain(android.view.View!);
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain(android.view.View!, int);
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain();
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain(androidx.core.view.accessibility.AccessibilityNodeInfoCompat!);
+ method public boolean performAction(int);
+ method public boolean performAction(int, android.os.Bundle!);
+ method public void recycle();
+ method public boolean refresh();
+ method public boolean removeAction(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat!);
+ method public boolean removeChild(android.view.View!);
+ method public boolean removeChild(android.view.View!, int);
+ method public void setAccessibilityFocused(boolean);
+ method @Deprecated public void setBoundsInParent(android.graphics.Rect!);
+ method public void setBoundsInScreen(android.graphics.Rect!);
+ method public void setCanOpenPopup(boolean);
+ method public void setCheckable(boolean);
+ method public void setChecked(boolean);
+ method public void setClassName(CharSequence!);
+ method public void setClickable(boolean);
+ method public void setCollectionInfo(Object!);
+ method public void setCollectionItemInfo(Object!);
+ method public void setContentDescription(CharSequence!);
+ method public void setContentInvalid(boolean);
+ method public void setContextClickable(boolean);
+ method public void setDismissable(boolean);
+ method public void setDrawingOrder(int);
+ method public void setEditable(boolean);
+ method public void setEnabled(boolean);
+ method public void setError(CharSequence!);
+ method public void setFocusable(boolean);
+ method public void setFocused(boolean);
+ method public void setHeading(boolean);
+ method public void setHintText(CharSequence?);
+ method public void setImportantForAccessibility(boolean);
+ method public void setInputType(int);
+ method public void setLabelFor(android.view.View!);
+ method public void setLabelFor(android.view.View!, int);
+ method public void setLabeledBy(android.view.View!);
+ method public void setLabeledBy(android.view.View!, int);
+ method public void setLiveRegion(int);
+ method public void setLongClickable(boolean);
+ method public void setMaxTextLength(int);
+ method public void setMovementGranularities(int);
+ method public void setMultiLine(boolean);
+ method public void setPackageName(CharSequence!);
+ method public void setPaneTitle(CharSequence?);
+ method public void setParent(android.view.View!);
+ method public void setParent(android.view.View!, int);
+ method public void setPassword(boolean);
+ method public void setRangeInfo(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat!);
+ method public void setRoleDescription(CharSequence?);
+ method public void setScreenReaderFocusable(boolean);
+ method public void setScrollable(boolean);
+ method public void setSelected(boolean);
+ method public void setShowingHintText(boolean);
+ method public void setSource(android.view.View!);
+ method public void setSource(android.view.View!, int);
+ method public void setText(CharSequence!);
+ method public void setTextEntryKey(boolean);
+ method public void setTextSelection(int, int);
+ method public void setTooltipText(CharSequence?);
+ method public void setTouchDelegateInfo(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.TouchDelegateInfoCompat);
+ method public void setTraversalAfter(android.view.View!);
+ method public void setTraversalAfter(android.view.View!, int);
+ method public void setTraversalBefore(android.view.View!);
+ method public void setTraversalBefore(android.view.View!, int);
+ method public void setViewIdResourceName(String!);
+ method public void setVisibleToUser(boolean);
+ method public android.view.accessibility.AccessibilityNodeInfo! unwrap();
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! wrap(android.view.accessibility.AccessibilityNodeInfo);
+ field public static final int ACTION_ACCESSIBILITY_FOCUS = 64; // 0x40
+ field public static final String ACTION_ARGUMENT_COLUMN_INT = "android.view.accessibility.action.ARGUMENT_COLUMN_INT";
+ field public static final String ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN = "ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN";
+ field public static final String ACTION_ARGUMENT_HTML_ELEMENT_STRING = "ACTION_ARGUMENT_HTML_ELEMENT_STRING";
+ field public static final String ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT = "ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT";
+ field public static final String ACTION_ARGUMENT_MOVE_WINDOW_X = "ACTION_ARGUMENT_MOVE_WINDOW_X";
+ field public static final String ACTION_ARGUMENT_MOVE_WINDOW_Y = "ACTION_ARGUMENT_MOVE_WINDOW_Y";
+ field public static final String ACTION_ARGUMENT_PROGRESS_VALUE = "android.view.accessibility.action.ARGUMENT_PROGRESS_VALUE";
+ field public static final String ACTION_ARGUMENT_ROW_INT = "android.view.accessibility.action.ARGUMENT_ROW_INT";
+ field public static final String ACTION_ARGUMENT_SELECTION_END_INT = "ACTION_ARGUMENT_SELECTION_END_INT";
+ field public static final String ACTION_ARGUMENT_SELECTION_START_INT = "ACTION_ARGUMENT_SELECTION_START_INT";
+ field public static final String ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE = "ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE";
+ field public static final int ACTION_CLEAR_ACCESSIBILITY_FOCUS = 128; // 0x80
+ field public static final int ACTION_CLEAR_FOCUS = 2; // 0x2
+ field public static final int ACTION_CLEAR_SELECTION = 8; // 0x8
+ field public static final int ACTION_CLICK = 16; // 0x10
+ field public static final int ACTION_COLLAPSE = 524288; // 0x80000
+ field public static final int ACTION_COPY = 16384; // 0x4000
+ field public static final int ACTION_CUT = 65536; // 0x10000
+ field public static final int ACTION_DISMISS = 1048576; // 0x100000
+ field public static final int ACTION_EXPAND = 262144; // 0x40000
+ field public static final int ACTION_FOCUS = 1; // 0x1
+ field public static final int ACTION_LONG_CLICK = 32; // 0x20
+ field public static final int ACTION_NEXT_AT_MOVEMENT_GRANULARITY = 256; // 0x100
+ field public static final int ACTION_NEXT_HTML_ELEMENT = 1024; // 0x400
+ field public static final int ACTION_PASTE = 32768; // 0x8000
+ field public static final int ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY = 512; // 0x200
+ field public static final int ACTION_PREVIOUS_HTML_ELEMENT = 2048; // 0x800
+ field public static final int ACTION_SCROLL_BACKWARD = 8192; // 0x2000
+ field public static final int ACTION_SCROLL_FORWARD = 4096; // 0x1000
+ field public static final int ACTION_SELECT = 4; // 0x4
+ field public static final int ACTION_SET_SELECTION = 131072; // 0x20000
+ field public static final int ACTION_SET_TEXT = 2097152; // 0x200000
+ field public static final int FOCUS_ACCESSIBILITY = 2; // 0x2
+ field public static final int FOCUS_INPUT = 1; // 0x1
+ field public static final int MOVEMENT_GRANULARITY_CHARACTER = 1; // 0x1
+ field public static final int MOVEMENT_GRANULARITY_LINE = 4; // 0x4
+ field public static final int MOVEMENT_GRANULARITY_PAGE = 16; // 0x10
+ field public static final int MOVEMENT_GRANULARITY_PARAGRAPH = 8; // 0x8
+ field public static final int MOVEMENT_GRANULARITY_WORD = 2; // 0x2
+ }
+
+ public static class AccessibilityNodeInfoCompat.AccessibilityActionCompat {
+ ctor public AccessibilityNodeInfoCompat.AccessibilityActionCompat(int, CharSequence!);
+ method public int getId();
+ method public CharSequence! getLabel();
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_ACCESSIBILITY_FOCUS;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLEAR_ACCESSIBILITY_FOCUS;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLEAR_FOCUS;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLEAR_SELECTION;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLICK;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_COLLAPSE;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CONTEXT_CLICK;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_COPY;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CUT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_DISMISS;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_EXPAND;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_FOCUS;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_HIDE_TOOLTIP;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_LONG_CLICK;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_MOVE_WINDOW;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_NEXT_AT_MOVEMENT_GRANULARITY;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_NEXT_HTML_ELEMENT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PAGE_DOWN;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PAGE_LEFT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PAGE_RIGHT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PAGE_UP;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_PASTE;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_PREVIOUS_HTML_ELEMENT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_BACKWARD;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_DOWN;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_FORWARD;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_LEFT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_RIGHT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_TO_POSITION;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_UP;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SELECT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SET_PROGRESS;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SET_SELECTION;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SET_TEXT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SHOW_ON_SCREEN;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SHOW_TOOLTIP;
+ }
+
+ public static class AccessibilityNodeInfoCompat.CollectionInfoCompat {
+ method public int getColumnCount();
+ method public int getRowCount();
+ method public int getSelectionMode();
+ method public boolean isHierarchical();
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat! obtain(int, int, boolean, int);
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat! obtain(int, int, boolean);
+ field public static final int SELECTION_MODE_MULTIPLE = 2; // 0x2
+ field public static final int SELECTION_MODE_NONE = 0; // 0x0
+ field public static final int SELECTION_MODE_SINGLE = 1; // 0x1
+ }
+
+ public static class AccessibilityNodeInfoCompat.CollectionItemInfoCompat {
+ method public int getColumnIndex();
+ method public int getColumnSpan();
+ method public int getRowIndex();
+ method public int getRowSpan();
+ method @Deprecated public boolean isHeading();
+ method public boolean isSelected();
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat! obtain(int, int, int, int, boolean, boolean);
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat! obtain(int, int, int, int, boolean);
+ }
+
+ public static class AccessibilityNodeInfoCompat.RangeInfoCompat {
+ method public float getCurrent();
+ method public float getMax();
+ method public float getMin();
+ method public int getType();
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat! obtain(int, float, float, float);
+ field public static final int RANGE_TYPE_FLOAT = 1; // 0x1
+ field public static final int RANGE_TYPE_INT = 0; // 0x0
+ field public static final int RANGE_TYPE_PERCENT = 2; // 0x2
+ }
+
+ public static final class AccessibilityNodeInfoCompat.TouchDelegateInfoCompat {
+ ctor public AccessibilityNodeInfoCompat.TouchDelegateInfoCompat(java.util.Map<android.graphics.Region!,android.view.View!>);
+ method public android.graphics.Region? getRegionAt(@IntRange(from=0) int);
+ method @IntRange(from=0) public int getRegionCount();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? getTargetForRegion(android.graphics.Region);
+ }
+
+ public class AccessibilityNodeProviderCompat {
+ ctor public AccessibilityNodeProviderCompat();
+ ctor public AccessibilityNodeProviderCompat(Object!);
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? createAccessibilityNodeInfo(int);
+ method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat!>? findAccessibilityNodeInfosByText(String!, int);
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? findFocus(int);
+ method public Object! getProvider();
+ method public boolean performAction(int, int, android.os.Bundle!);
+ field public static final int HOST_VIEW_ID = -1; // 0xffffffff
+ }
+
+ public class AccessibilityRecordCompat {
+ ctor @Deprecated public AccessibilityRecordCompat(Object!);
+ method @Deprecated public boolean equals(Object?);
+ method @Deprecated public int getAddedCount();
+ method @Deprecated public CharSequence! getBeforeText();
+ method @Deprecated public CharSequence! getClassName();
+ method @Deprecated public CharSequence! getContentDescription();
+ method @Deprecated public int getCurrentItemIndex();
+ method @Deprecated public int getFromIndex();
+ method @Deprecated public Object! getImpl();
+ method @Deprecated public int getItemCount();
+ method @Deprecated public int getMaxScrollX();
+ method public static int getMaxScrollX(android.view.accessibility.AccessibilityRecord!);
+ method @Deprecated public int getMaxScrollY();
+ method public static int getMaxScrollY(android.view.accessibility.AccessibilityRecord!);
+ method @Deprecated public android.os.Parcelable! getParcelableData();
+ method @Deprecated public int getRemovedCount();
+ method @Deprecated public int getScrollX();
+ method @Deprecated public int getScrollY();
+ method @Deprecated public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getSource();
+ method @Deprecated public java.util.List<java.lang.CharSequence!>! getText();
+ method @Deprecated public int getToIndex();
+ method @Deprecated public int getWindowId();
+ method @Deprecated public int hashCode();
+ method @Deprecated public boolean isChecked();
+ method @Deprecated public boolean isEnabled();
+ method @Deprecated public boolean isFullScreen();
+ method @Deprecated public boolean isPassword();
+ method @Deprecated public boolean isScrollable();
+ method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! obtain(androidx.core.view.accessibility.AccessibilityRecordCompat!);
+ method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! obtain();
+ method @Deprecated public void recycle();
+ method @Deprecated public void setAddedCount(int);
+ method @Deprecated public void setBeforeText(CharSequence!);
+ method @Deprecated public void setChecked(boolean);
+ method @Deprecated public void setClassName(CharSequence!);
+ method @Deprecated public void setContentDescription(CharSequence!);
+ method @Deprecated public void setCurrentItemIndex(int);
+ method @Deprecated public void setEnabled(boolean);
+ method @Deprecated public void setFromIndex(int);
+ method @Deprecated public void setFullScreen(boolean);
+ method @Deprecated public void setItemCount(int);
+ method @Deprecated public void setMaxScrollX(int);
+ method public static void setMaxScrollX(android.view.accessibility.AccessibilityRecord!, int);
+ method @Deprecated public void setMaxScrollY(int);
+ method public static void setMaxScrollY(android.view.accessibility.AccessibilityRecord!, int);
+ method @Deprecated public void setParcelableData(android.os.Parcelable!);
+ method @Deprecated public void setPassword(boolean);
+ method @Deprecated public void setRemovedCount(int);
+ method @Deprecated public void setScrollX(int);
+ method @Deprecated public void setScrollY(int);
+ method @Deprecated public void setScrollable(boolean);
+ method @Deprecated public void setSource(android.view.View!);
+ method @Deprecated public void setSource(android.view.View!, int);
+ method public static void setSource(android.view.accessibility.AccessibilityRecord, android.view.View!, int);
+ method @Deprecated public void setToIndex(int);
+ }
+
+ public interface AccessibilityViewCommand {
+ method public boolean perform(android.view.View, androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments?);
+ }
+
+ public abstract static class AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.CommandArguments();
+ }
+
+ public static final class AccessibilityViewCommand.MoveAtGranularityArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.MoveAtGranularityArguments();
+ method public boolean getExtendSelection();
+ method public int getGranularity();
+ }
+
+ public static final class AccessibilityViewCommand.MoveHtmlArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.MoveHtmlArguments();
+ method public String! getHTMLElement();
+ }
+
+ public static final class AccessibilityViewCommand.MoveWindowArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.MoveWindowArguments();
+ method public int getX();
+ method public int getY();
+ }
+
+ public static final class AccessibilityViewCommand.ScrollToPositionArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.ScrollToPositionArguments();
+ method public int getColumn();
+ method public int getRow();
+ }
+
+ public static final class AccessibilityViewCommand.SetProgressArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.SetProgressArguments();
+ method public float getProgress();
+ }
+
+ public static final class AccessibilityViewCommand.SetSelectionArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.SetSelectionArguments();
+ method public int getEnd();
+ method public int getStart();
+ }
+
+ public static final class AccessibilityViewCommand.SetTextArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.SetTextArguments();
+ method public CharSequence! getText();
+ }
+
+ public class AccessibilityWindowInfoCompat {
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getAnchor();
+ method public void getBoundsInScreen(android.graphics.Rect!);
+ method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat! getChild(int);
+ method public int getChildCount();
+ method public int getId();
+ method public int getLayer();
+ method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat! getParent();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getRoot();
+ method public CharSequence! getTitle();
+ method public int getType();
+ method public boolean isAccessibilityFocused();
+ method public boolean isActive();
+ method public boolean isFocused();
+ method public static androidx.core.view.accessibility.AccessibilityWindowInfoCompat! obtain();
+ method public static androidx.core.view.accessibility.AccessibilityWindowInfoCompat! obtain(androidx.core.view.accessibility.AccessibilityWindowInfoCompat!);
+ method public void recycle();
+ field public static final int TYPE_ACCESSIBILITY_OVERLAY = 4; // 0x4
+ field public static final int TYPE_APPLICATION = 1; // 0x1
+ field public static final int TYPE_INPUT_METHOD = 2; // 0x2
+ field public static final int TYPE_SPLIT_SCREEN_DIVIDER = 5; // 0x5
+ field public static final int TYPE_SYSTEM = 3; // 0x3
+ }
+
+}
+
+package androidx.core.view.animation {
+
+ public final class PathInterpolatorCompat {
+ method public static android.view.animation.Interpolator! create(android.graphics.Path!);
+ method public static android.view.animation.Interpolator! create(float, float);
+ method public static android.view.animation.Interpolator! create(float, float, float, float);
+ }
+
+}
+
+package androidx.core.view.inputmethod {
+
+ public final class EditorInfoCompat {
+ ctor @Deprecated public EditorInfoCompat();
+ method public static String![] getContentMimeTypes(android.view.inputmethod.EditorInfo!);
+ method public static void setContentMimeTypes(android.view.inputmethod.EditorInfo, String![]?);
+ field public static final int IME_FLAG_FORCE_ASCII = -2147483648; // 0x80000000
+ field public static final int IME_FLAG_NO_PERSONALIZED_LEARNING = 16777216; // 0x1000000
+ }
+
+ public final class InputConnectionCompat {
+ ctor @Deprecated public InputConnectionCompat();
+ method public static boolean commitContent(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo, androidx.core.view.inputmethod.InputContentInfoCompat, int, android.os.Bundle?);
+ method public static android.view.inputmethod.InputConnection createWrapper(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo, androidx.core.view.inputmethod.InputConnectionCompat.OnCommitContentListener);
+ field public static final int INPUT_CONTENT_GRANT_READ_URI_PERMISSION = 1; // 0x1
+ }
+
+ public static interface InputConnectionCompat.OnCommitContentListener {
+ method public boolean onCommitContent(androidx.core.view.inputmethod.InputContentInfoCompat!, int, android.os.Bundle!);
+ }
+
+ public final class InputContentInfoCompat {
+ ctor public InputContentInfoCompat(android.net.Uri, android.content.ClipDescription, android.net.Uri?);
+ method public android.net.Uri getContentUri();
+ method public android.content.ClipDescription getDescription();
+ method public android.net.Uri? getLinkUri();
+ method public void releasePermission();
+ method public void requestPermission();
+ method public Object? unwrap();
+ method public static androidx.core.view.inputmethod.InputContentInfoCompat? wrap(Object?);
+ }
+
+}
+
+package androidx.core.widget {
+
+ public abstract class AutoScrollHelper implements android.view.View.OnTouchListener {
+ ctor public AutoScrollHelper(android.view.View);
+ method public abstract boolean canTargetScrollHorizontally(int);
+ method public abstract boolean canTargetScrollVertically(int);
+ method public boolean isEnabled();
+ method public boolean isExclusive();
+ method public boolean onTouch(android.view.View!, android.view.MotionEvent!);
+ method public abstract void scrollTargetBy(int, int);
+ method public androidx.core.widget.AutoScrollHelper setActivationDelay(int);
+ method public androidx.core.widget.AutoScrollHelper setEdgeType(int);
+ method public androidx.core.widget.AutoScrollHelper! setEnabled(boolean);
+ method public androidx.core.widget.AutoScrollHelper! setExclusive(boolean);
+ method public androidx.core.widget.AutoScrollHelper setMaximumEdges(float, float);
+ method public androidx.core.widget.AutoScrollHelper setMaximumVelocity(float, float);
+ method public androidx.core.widget.AutoScrollHelper setMinimumVelocity(float, float);
+ method public androidx.core.widget.AutoScrollHelper setRampDownDuration(int);
+ method public androidx.core.widget.AutoScrollHelper setRampUpDuration(int);
+ method public androidx.core.widget.AutoScrollHelper setRelativeEdges(float, float);
+ method public androidx.core.widget.AutoScrollHelper setRelativeVelocity(float, float);
+ field public static final int EDGE_TYPE_INSIDE = 0; // 0x0
+ field public static final int EDGE_TYPE_INSIDE_EXTEND = 1; // 0x1
+ field public static final int EDGE_TYPE_OUTSIDE = 2; // 0x2
+ field public static final float NO_MAX = 3.4028235E38f;
+ field public static final float NO_MIN = 0.0f;
+ field public static final float RELATIVE_UNSPECIFIED = 0.0f;
+ }
+
+ public final class CompoundButtonCompat {
+ method public static android.graphics.drawable.Drawable? getButtonDrawable(android.widget.CompoundButton);
+ method public static android.content.res.ColorStateList? getButtonTintList(android.widget.CompoundButton);
+ method public static android.graphics.PorterDuff.Mode? getButtonTintMode(android.widget.CompoundButton);
+ method public static void setButtonTintList(android.widget.CompoundButton, android.content.res.ColorStateList?);
+ method public static void setButtonTintMode(android.widget.CompoundButton, android.graphics.PorterDuff.Mode?);
+ }
+
+ public class ContentLoadingProgressBar extends android.widget.ProgressBar {
+ ctor public ContentLoadingProgressBar(android.content.Context);
+ ctor public ContentLoadingProgressBar(android.content.Context, android.util.AttributeSet?);
+ method public void hide();
+ method public void onAttachedToWindow();
+ method public void onDetachedFromWindow();
+ method public void show();
+ }
+
+ public final class EdgeEffectCompat {
+ ctor @Deprecated public EdgeEffectCompat(android.content.Context!);
+ method @Deprecated public boolean draw(android.graphics.Canvas!);
+ method @Deprecated public void finish();
+ method @Deprecated public boolean isFinished();
+ method @Deprecated public boolean onAbsorb(int);
+ method @Deprecated public boolean onPull(float);
+ method @Deprecated public boolean onPull(float, float);
+ method public static void onPull(android.widget.EdgeEffect, float, float);
+ method @Deprecated public boolean onRelease();
+ method @Deprecated public void setSize(int, int);
+ }
+
+ public class ImageViewCompat {
+ method public static android.content.res.ColorStateList? getImageTintList(android.widget.ImageView);
+ method public static android.graphics.PorterDuff.Mode? getImageTintMode(android.widget.ImageView);
+ method public static void setImageTintList(android.widget.ImageView, android.content.res.ColorStateList?);
+ method public static void setImageTintMode(android.widget.ImageView, android.graphics.PorterDuff.Mode?);
+ }
+
+ public final class ListPopupWindowCompat {
+ method @Deprecated public static android.view.View.OnTouchListener! createDragToOpenListener(Object!, android.view.View!);
+ method public static android.view.View.OnTouchListener? createDragToOpenListener(android.widget.ListPopupWindow, android.view.View);
+ }
+
+ public class ListViewAutoScrollHelper extends androidx.core.widget.AutoScrollHelper {
+ ctor public ListViewAutoScrollHelper(android.widget.ListView);
+ method public boolean canTargetScrollHorizontally(int);
+ method public boolean canTargetScrollVertically(int);
+ method public void scrollTargetBy(int, int);
+ }
+
+ public final class ListViewCompat {
+ method public static boolean canScrollList(android.widget.ListView, int);
+ method public static void scrollListBy(android.widget.ListView, int);
+ }
+
+ public class NestedScrollView extends android.widget.FrameLayout implements androidx.core.view.NestedScrollingChild3 androidx.core.view.NestedScrollingParent3 androidx.core.view.ScrollingView {
+ ctor public NestedScrollView(android.content.Context);
+ ctor public NestedScrollView(android.content.Context, android.util.AttributeSet?);
+ ctor public NestedScrollView(android.content.Context, android.util.AttributeSet?, int);
+ method public boolean arrowScroll(int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeHorizontalScrollExtent();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeHorizontalScrollOffset();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeHorizontalScrollRange();
+ method protected int computeScrollDeltaToGetChildRectOnScreen(android.graphics.Rect!);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeVerticalScrollExtent();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeVerticalScrollOffset();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeVerticalScrollRange();
+ method public boolean dispatchNestedPreScroll(int, int, int[]!, int[]!, int);
+ method public void dispatchNestedScroll(int, int, int, int, int[]?, int, int[]);
+ method public boolean dispatchNestedScroll(int, int, int, int, int[]!, int);
+ method public boolean executeKeyEvent(android.view.KeyEvent);
+ method public void fling(int);
+ method public boolean fullScroll(int);
+ method public int getMaxScrollAmount();
+ method public boolean hasNestedScrollingParent(int);
+ method public boolean isFillViewport();
+ method public boolean isSmoothScrollingEnabled();
+ method public void onAttachedToWindow();
+ method public void onNestedPreScroll(android.view.View, int, int, int[], int);
+ method public void onNestedScroll(android.view.View, int, int, int, int, int, int[]);
+ method public void onNestedScroll(android.view.View, int, int, int, int, int);
+ method public void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
+ method public boolean onStartNestedScroll(android.view.View, android.view.View, int, int);
+ method public void onStopNestedScroll(android.view.View, int);
+ method public boolean pageScroll(int);
+ method public void setFillViewport(boolean);
+ method public void setOnScrollChangeListener(androidx.core.widget.NestedScrollView.OnScrollChangeListener?);
+ method public void setSmoothScrollingEnabled(boolean);
+ method public final void smoothScrollBy(int, int);
+ method public final void smoothScrollTo(int, int);
+ method public boolean startNestedScroll(int, int);
+ method public void stopNestedScroll(int);
+ }
+
+ public static interface NestedScrollView.OnScrollChangeListener {
+ method public void onScrollChange(androidx.core.widget.NestedScrollView!, int, int, int, int);
+ }
+
+ public final class PopupMenuCompat {
+ method public static android.view.View.OnTouchListener? getDragToOpenListener(Object);
+ }
+
+ public final class PopupWindowCompat {
+ method public static boolean getOverlapAnchor(android.widget.PopupWindow);
+ method public static int getWindowLayoutType(android.widget.PopupWindow);
+ method public static void setOverlapAnchor(android.widget.PopupWindow, boolean);
+ method public static void setWindowLayoutType(android.widget.PopupWindow, int);
+ method public static void showAsDropDown(android.widget.PopupWindow, android.view.View, int, int, int);
+ }
+
+ @Deprecated public final class ScrollerCompat {
+ method @Deprecated public void abortAnimation();
+ method @Deprecated public boolean computeScrollOffset();
+ method @Deprecated public static androidx.core.widget.ScrollerCompat! create(android.content.Context!);
+ method @Deprecated public static androidx.core.widget.ScrollerCompat! create(android.content.Context!, android.view.animation.Interpolator!);
+ method @Deprecated public void fling(int, int, int, int, int, int, int, int);
+ method @Deprecated public void fling(int, int, int, int, int, int, int, int, int, int);
+ method @Deprecated public float getCurrVelocity();
+ method @Deprecated public int getCurrX();
+ method @Deprecated public int getCurrY();
+ method @Deprecated public int getFinalX();
+ method @Deprecated public int getFinalY();
+ method @Deprecated public boolean isFinished();
+ method @Deprecated public boolean isOverScrolled();
+ method @Deprecated public void notifyHorizontalEdgeReached(int, int, int);
+ method @Deprecated public void notifyVerticalEdgeReached(int, int, int);
+ method @Deprecated public boolean springBack(int, int, int, int, int, int);
+ method @Deprecated public void startScroll(int, int, int, int);
+ method @Deprecated public void startScroll(int, int, int, int, int);
+ }
+
+ public final class TextViewCompat {
+ method public static int getAutoSizeMaxTextSize(android.widget.TextView);
+ method public static int getAutoSizeMinTextSize(android.widget.TextView);
+ method public static int getAutoSizeStepGranularity(android.widget.TextView);
+ method public static int[] getAutoSizeTextAvailableSizes(android.widget.TextView);
+ method public static int getAutoSizeTextType(android.widget.TextView);
+ method public static android.content.res.ColorStateList? getCompoundDrawableTintList(android.widget.TextView);
+ method public static android.graphics.PorterDuff.Mode? getCompoundDrawableTintMode(android.widget.TextView);
+ method public static android.graphics.drawable.Drawable![] getCompoundDrawablesRelative(android.widget.TextView);
+ method public static int getFirstBaselineToTopHeight(android.widget.TextView);
+ method public static int getLastBaselineToBottomHeight(android.widget.TextView);
+ method public static int getMaxLines(android.widget.TextView);
+ method public static int getMinLines(android.widget.TextView);
+ method public static androidx.core.text.PrecomputedTextCompat.Params getTextMetricsParams(android.widget.TextView);
+ method public static void setAutoSizeTextTypeUniformWithConfiguration(android.widget.TextView, int, int, int, int) throws java.lang.IllegalArgumentException;
+ method public static void setAutoSizeTextTypeUniformWithPresetSizes(android.widget.TextView, int[], int) throws java.lang.IllegalArgumentException;
+ method public static void setAutoSizeTextTypeWithDefaults(android.widget.TextView, int);
+ method public static void setCompoundDrawableTintList(android.widget.TextView, android.content.res.ColorStateList?);
+ method public static void setCompoundDrawableTintMode(android.widget.TextView, android.graphics.PorterDuff.Mode?);
+ method public static void setCompoundDrawablesRelative(android.widget.TextView, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?);
+ method public static void setCompoundDrawablesRelativeWithIntrinsicBounds(android.widget.TextView, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?);
+ method public static void setCompoundDrawablesRelativeWithIntrinsicBounds(android.widget.TextView, @DrawableRes int, @DrawableRes int, @DrawableRes int, @DrawableRes int);
+ method public static void setCustomSelectionActionModeCallback(android.widget.TextView, android.view.ActionMode.Callback);
+ method public static void setFirstBaselineToTopHeight(android.widget.TextView, @Px @IntRange(from=0) int);
+ method public static void setLastBaselineToBottomHeight(android.widget.TextView, @Px @IntRange(from=0) int);
+ method public static void setLineHeight(android.widget.TextView, @Px @IntRange(from=0) int);
+ method public static void setPrecomputedText(android.widget.TextView, androidx.core.text.PrecomputedTextCompat);
+ method public static void setTextAppearance(android.widget.TextView, @StyleRes int);
+ method public static void setTextMetricsParams(android.widget.TextView, androidx.core.text.PrecomputedTextCompat.Params);
+ field public static final int AUTO_SIZE_TEXT_TYPE_NONE = 0; // 0x0
+ field public static final int AUTO_SIZE_TEXT_TYPE_UNIFORM = 1; // 0x1
+ }
+
+ public interface TintableCompoundButton {
+ method public android.content.res.ColorStateList? getSupportButtonTintList();
+ method public android.graphics.PorterDuff.Mode? getSupportButtonTintMode();
+ method public void setSupportButtonTintList(android.content.res.ColorStateList?);
+ method public void setSupportButtonTintMode(android.graphics.PorterDuff.Mode?);
+ }
+
+ public interface TintableCompoundDrawablesView {
+ method public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
+ method public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
+ method public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
+ method public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
+ }
+
+}
+
diff --git a/core/core/api/current.txt b/core/core/api/current.txt
index 19f1ef5..b962a95 100644
--- a/core/core/api/current.txt
+++ b/core/core/api/current.txt
@@ -1306,7 +1306,7 @@
}
public final class EnvironmentCompat {
- method public static String! getStorageState(java.io.File);
+ method public static String getStorageState(java.io.File);
field public static final String MEDIA_UNKNOWN = "unknown";
}
diff --git a/core/core/api/public_plus_experimental_1.2.0-beta02.txt b/core/core/api/public_plus_experimental_1.2.0-beta02.txt
index 19f1ef5..b962a95 100644
--- a/core/core/api/public_plus_experimental_1.2.0-beta02.txt
+++ b/core/core/api/public_plus_experimental_1.2.0-beta02.txt
@@ -1306,7 +1306,7 @@
}
public final class EnvironmentCompat {
- method public static String! getStorageState(java.io.File);
+ method public static String getStorageState(java.io.File);
field public static final String MEDIA_UNKNOWN = "unknown";
}
diff --git a/core/core/api/public_plus_experimental_1.3.0-alpha01.txt b/core/core/api/public_plus_experimental_1.3.0-alpha01.txt
new file mode 100644
index 0000000..b962a95
--- /dev/null
+++ b/core/core/api/public_plus_experimental_1.3.0-alpha01.txt
@@ -0,0 +1,3072 @@
+// Signature format: 3.0
+package androidx.core.accessibilityservice {
+
+ public final class AccessibilityServiceInfoCompat {
+ method public static String capabilityToString(int);
+ method public static String feedbackTypeToString(int);
+ method public static String? flagToString(int);
+ method public static int getCapabilities(android.accessibilityservice.AccessibilityServiceInfo);
+ method public static String? loadDescription(android.accessibilityservice.AccessibilityServiceInfo, android.content.pm.PackageManager);
+ field public static final int CAPABILITY_CAN_FILTER_KEY_EVENTS = 8; // 0x8
+ field public static final int CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 4; // 0x4
+ field public static final int CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION = 2; // 0x2
+ field public static final int CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT = 1; // 0x1
+ field public static final int FEEDBACK_ALL_MASK = -1; // 0xffffffff
+ field public static final int FEEDBACK_BRAILLE = 32; // 0x20
+ field public static final int FLAG_INCLUDE_NOT_IMPORTANT_VIEWS = 2; // 0x2
+ field public static final int FLAG_REPORT_VIEW_IDS = 16; // 0x10
+ field public static final int FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 8; // 0x8
+ field public static final int FLAG_REQUEST_FILTER_KEY_EVENTS = 32; // 0x20
+ field public static final int FLAG_REQUEST_TOUCH_EXPLORATION_MODE = 4; // 0x4
+ }
+
+}
+
+package androidx.core.app {
+
+ public class ActivityCompat extends androidx.core.content.ContextCompat {
+ ctor protected ActivityCompat();
+ method public static void finishAffinity(android.app.Activity);
+ method public static void finishAfterTransition(android.app.Activity);
+ method public static android.net.Uri? getReferrer(android.app.Activity);
+ method @Deprecated public static boolean invalidateOptionsMenu(android.app.Activity!);
+ method public static void postponeEnterTransition(android.app.Activity);
+ method public static void recreate(android.app.Activity);
+ method public static androidx.core.view.DragAndDropPermissionsCompat? requestDragAndDropPermissions(android.app.Activity!, android.view.DragEvent!);
+ method public static void requestPermissions(android.app.Activity, String![], @IntRange(from=0) int);
+ method public static <T extends android.view.View> T requireViewById(android.app.Activity, @IdRes int);
+ method public static void setEnterSharedElementCallback(android.app.Activity, androidx.core.app.SharedElementCallback?);
+ method public static void setExitSharedElementCallback(android.app.Activity, androidx.core.app.SharedElementCallback?);
+ method public static void setPermissionCompatDelegate(androidx.core.app.ActivityCompat.PermissionCompatDelegate?);
+ method public static boolean shouldShowRequestPermissionRationale(android.app.Activity, String);
+ method public static void startActivityForResult(android.app.Activity, android.content.Intent, int, android.os.Bundle?);
+ method public static void startIntentSenderForResult(android.app.Activity, android.content.IntentSender, int, android.content.Intent?, int, int, int, android.os.Bundle?) throws android.content.IntentSender.SendIntentException;
+ method public static void startPostponedEnterTransition(android.app.Activity);
+ }
+
+ public static interface ActivityCompat.OnRequestPermissionsResultCallback {
+ method public void onRequestPermissionsResult(int, String![], int[]);
+ }
+
+ public static interface ActivityCompat.PermissionCompatDelegate {
+ method public boolean onActivityResult(android.app.Activity, @IntRange(from=0) int, int, android.content.Intent?);
+ method public boolean requestPermissions(android.app.Activity, String![], @IntRange(from=0) int);
+ }
+
+ public final class ActivityManagerCompat {
+ method public static boolean isLowRamDevice(android.app.ActivityManager);
+ }
+
+ public class ActivityOptionsCompat {
+ ctor protected ActivityOptionsCompat();
+ method public android.graphics.Rect? getLaunchBounds();
+ method public static androidx.core.app.ActivityOptionsCompat makeBasic();
+ method public static androidx.core.app.ActivityOptionsCompat makeClipRevealAnimation(android.view.View, int, int, int, int);
+ method public static androidx.core.app.ActivityOptionsCompat makeCustomAnimation(android.content.Context, int, int);
+ method public static androidx.core.app.ActivityOptionsCompat makeScaleUpAnimation(android.view.View, int, int, int, int);
+ method public static androidx.core.app.ActivityOptionsCompat makeSceneTransitionAnimation(android.app.Activity, android.view.View, String);
+ method public static androidx.core.app.ActivityOptionsCompat makeSceneTransitionAnimation(android.app.Activity, androidx.core.util.Pair<android.view.View!,java.lang.String!>!...);
+ method public static androidx.core.app.ActivityOptionsCompat makeTaskLaunchBehind();
+ method public static androidx.core.app.ActivityOptionsCompat makeThumbnailScaleUpAnimation(android.view.View, android.graphics.Bitmap, int, int);
+ method public void requestUsageTimeReport(android.app.PendingIntent);
+ method public androidx.core.app.ActivityOptionsCompat setLaunchBounds(android.graphics.Rect?);
+ method public android.os.Bundle? toBundle();
+ method public void update(androidx.core.app.ActivityOptionsCompat);
+ field public static final String EXTRA_USAGE_TIME_REPORT = "android.activity.usage_time";
+ field public static final String EXTRA_USAGE_TIME_REPORT_PACKAGES = "android.usage_time_packages";
+ }
+
+ public final class AlarmManagerCompat {
+ method public static void setAlarmClock(android.app.AlarmManager, long, android.app.PendingIntent, android.app.PendingIntent);
+ method public static void setAndAllowWhileIdle(android.app.AlarmManager, int, long, android.app.PendingIntent);
+ method public static void setExact(android.app.AlarmManager, int, long, android.app.PendingIntent);
+ method public static void setExactAndAllowWhileIdle(android.app.AlarmManager, int, long, android.app.PendingIntent);
+ }
+
+ @RequiresApi(28) public class AppComponentFactory extends android.app.AppComponentFactory {
+ ctor public AppComponentFactory();
+ method public final android.app.Activity instantiateActivity(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public android.app.Activity instantiateActivityCompat(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public final android.app.Application instantiateApplication(ClassLoader, String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public android.app.Application instantiateApplicationCompat(ClassLoader, String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public final android.content.ContentProvider instantiateProvider(ClassLoader, String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public android.content.ContentProvider instantiateProviderCompat(ClassLoader, String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public final android.content.BroadcastReceiver instantiateReceiver(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public android.content.BroadcastReceiver instantiateReceiverCompat(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public final android.app.Service instantiateService(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public android.app.Service instantiateServiceCompat(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ }
+
+ public class AppLaunchChecker {
+ ctor @Deprecated public AppLaunchChecker();
+ method public static boolean hasStartedFromLauncher(android.content.Context);
+ method public static void onActivityCreate(android.app.Activity);
+ }
+
+ public final class AppOpsManagerCompat {
+ method public static int noteOp(android.content.Context, String, int, String);
+ method public static int noteOpNoThrow(android.content.Context, String, int, String);
+ method public static int noteProxyOp(android.content.Context, String, String);
+ method public static int noteProxyOpNoThrow(android.content.Context, String, String);
+ method public static String? permissionToOp(String);
+ field public static final int MODE_ALLOWED = 0; // 0x0
+ field public static final int MODE_DEFAULT = 3; // 0x3
+ field public static final int MODE_ERRORED = 2; // 0x2
+ field public static final int MODE_IGNORED = 1; // 0x1
+ }
+
+ public final class BundleCompat {
+ method public static android.os.IBinder? getBinder(android.os.Bundle, String?);
+ method public static void putBinder(android.os.Bundle, String?, android.os.IBinder?);
+ }
+
+ public class DialogCompat {
+ method public static android.view.View requireViewById(android.app.Dialog, int);
+ }
+
+ public class FrameMetricsAggregator {
+ ctor public FrameMetricsAggregator();
+ ctor public FrameMetricsAggregator(int);
+ method public void add(android.app.Activity);
+ method public android.util.SparseIntArray![]? getMetrics();
+ method public android.util.SparseIntArray![]? remove(android.app.Activity);
+ method public android.util.SparseIntArray![]? reset();
+ method public android.util.SparseIntArray![]? stop();
+ field public static final int ANIMATION_DURATION = 256; // 0x100
+ field public static final int ANIMATION_INDEX = 8; // 0x8
+ field public static final int COMMAND_DURATION = 32; // 0x20
+ field public static final int COMMAND_INDEX = 5; // 0x5
+ field public static final int DELAY_DURATION = 128; // 0x80
+ field public static final int DELAY_INDEX = 7; // 0x7
+ field public static final int DRAW_DURATION = 8; // 0x8
+ field public static final int DRAW_INDEX = 3; // 0x3
+ field public static final int EVERY_DURATION = 511; // 0x1ff
+ field public static final int INPUT_DURATION = 2; // 0x2
+ field public static final int INPUT_INDEX = 1; // 0x1
+ field public static final int LAYOUT_MEASURE_DURATION = 4; // 0x4
+ field public static final int LAYOUT_MEASURE_INDEX = 2; // 0x2
+ field public static final int SWAP_DURATION = 64; // 0x40
+ field public static final int SWAP_INDEX = 6; // 0x6
+ field public static final int SYNC_DURATION = 16; // 0x10
+ field public static final int SYNC_INDEX = 4; // 0x4
+ field public static final int TOTAL_DURATION = 1; // 0x1
+ field public static final int TOTAL_INDEX = 0; // 0x0
+ }
+
+ public abstract class JobIntentService extends android.app.Service {
+ ctor public JobIntentService();
+ method public static void enqueueWork(android.content.Context, Class<?>, int, android.content.Intent);
+ method public static void enqueueWork(android.content.Context, android.content.ComponentName, int, android.content.Intent);
+ method public boolean isStopped();
+ method public android.os.IBinder! onBind(android.content.Intent);
+ method protected abstract void onHandleWork(android.content.Intent);
+ method public boolean onStopCurrentWork();
+ method public void setInterruptIfStopped(boolean);
+ }
+
+ public final class NavUtils {
+ method public static android.content.Intent? getParentActivityIntent(android.app.Activity);
+ method public static android.content.Intent? getParentActivityIntent(android.content.Context, Class<?>) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public static android.content.Intent? getParentActivityIntent(android.content.Context, android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public static String? getParentActivityName(android.app.Activity);
+ method public static String? getParentActivityName(android.content.Context, android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public static void navigateUpFromSameTask(android.app.Activity);
+ method public static void navigateUpTo(android.app.Activity, android.content.Intent);
+ method public static boolean shouldUpRecreateTask(android.app.Activity, android.content.Intent);
+ field public static final String PARENT_ACTIVITY = "android.support.PARENT_ACTIVITY";
+ }
+
+ public class NotificationCompat {
+ ctor @Deprecated public NotificationCompat();
+ method public static androidx.core.app.NotificationCompat.Action! getAction(android.app.Notification!, int);
+ method public static int getActionCount(android.app.Notification!);
+ method public static boolean getAllowSystemGeneratedContextualActions(android.app.Notification!);
+ method public static int getBadgeIconType(android.app.Notification!);
+ method public static androidx.core.app.NotificationCompat.BubbleMetadata? getBubbleMetadata(android.app.Notification);
+ method public static String! getCategory(android.app.Notification!);
+ method public static String! getChannelId(android.app.Notification!);
+ method @RequiresApi(19) public static CharSequence! getContentTitle(android.app.Notification!);
+ method public static android.os.Bundle? getExtras(android.app.Notification!);
+ method public static String! getGroup(android.app.Notification!);
+ method public static int getGroupAlertBehavior(android.app.Notification!);
+ method @RequiresApi(21) public static java.util.List<androidx.core.app.NotificationCompat.Action!>! getInvisibleActions(android.app.Notification!);
+ method public static boolean getLocalOnly(android.app.Notification!);
+ method public static String! getShortcutId(android.app.Notification!);
+ method public static String! getSortKey(android.app.Notification!);
+ method public static long getTimeoutAfter(android.app.Notification!);
+ method public static boolean isGroupSummary(android.app.Notification!);
+ field public static final int BADGE_ICON_LARGE = 2; // 0x2
+ field public static final int BADGE_ICON_NONE = 0; // 0x0
+ field public static final int BADGE_ICON_SMALL = 1; // 0x1
+ field public static final String CATEGORY_ALARM = "alarm";
+ field public static final String CATEGORY_CALL = "call";
+ field public static final String CATEGORY_EMAIL = "email";
+ field public static final String CATEGORY_ERROR = "err";
+ field public static final String CATEGORY_EVENT = "event";
+ field public static final String CATEGORY_MESSAGE = "msg";
+ field public static final String CATEGORY_NAVIGATION = "navigation";
+ field public static final String CATEGORY_PROGRESS = "progress";
+ field public static final String CATEGORY_PROMO = "promo";
+ field public static final String CATEGORY_RECOMMENDATION = "recommendation";
+ field public static final String CATEGORY_REMINDER = "reminder";
+ field public static final String CATEGORY_SERVICE = "service";
+ field public static final String CATEGORY_SOCIAL = "social";
+ field public static final String CATEGORY_STATUS = "status";
+ field public static final String CATEGORY_SYSTEM = "sys";
+ field public static final String CATEGORY_TRANSPORT = "transport";
+ field @ColorInt public static final int COLOR_DEFAULT = 0; // 0x0
+ field public static final int DEFAULT_ALL = -1; // 0xffffffff
+ field public static final int DEFAULT_LIGHTS = 4; // 0x4
+ field public static final int DEFAULT_SOUND = 1; // 0x1
+ field public static final int DEFAULT_VIBRATE = 2; // 0x2
+ field public static final String EXTRA_AUDIO_CONTENTS_URI = "android.audioContents";
+ field public static final String EXTRA_BACKGROUND_IMAGE_URI = "android.backgroundImageUri";
+ field public static final String EXTRA_BIG_TEXT = "android.bigText";
+ field public static final String EXTRA_CHRONOMETER_COUNT_DOWN = "android.chronometerCountDown";
+ field public static final String EXTRA_COMPACT_ACTIONS = "android.compactActions";
+ field public static final String EXTRA_CONVERSATION_TITLE = "android.conversationTitle";
+ field public static final String EXTRA_HIDDEN_CONVERSATION_TITLE = "android.hiddenConversationTitle";
+ field public static final String EXTRA_INFO_TEXT = "android.infoText";
+ field public static final String EXTRA_IS_GROUP_CONVERSATION = "android.isGroupConversation";
+ field public static final String EXTRA_LARGE_ICON = "android.largeIcon";
+ field public static final String EXTRA_LARGE_ICON_BIG = "android.largeIcon.big";
+ field public static final String EXTRA_MEDIA_SESSION = "android.mediaSession";
+ field public static final String EXTRA_MESSAGES = "android.messages";
+ field public static final String EXTRA_MESSAGING_STYLE_USER = "android.messagingStyleUser";
+ field public static final String EXTRA_PEOPLE = "android.people";
+ field public static final String EXTRA_PICTURE = "android.picture";
+ field public static final String EXTRA_PROGRESS = "android.progress";
+ field public static final String EXTRA_PROGRESS_INDETERMINATE = "android.progressIndeterminate";
+ field public static final String EXTRA_PROGRESS_MAX = "android.progressMax";
+ field public static final String EXTRA_REMOTE_INPUT_HISTORY = "android.remoteInputHistory";
+ field public static final String EXTRA_SELF_DISPLAY_NAME = "android.selfDisplayName";
+ field public static final String EXTRA_SHOW_CHRONOMETER = "android.showChronometer";
+ field public static final String EXTRA_SHOW_WHEN = "android.showWhen";
+ field public static final String EXTRA_SMALL_ICON = "android.icon";
+ field public static final String EXTRA_SUB_TEXT = "android.subText";
+ field public static final String EXTRA_SUMMARY_TEXT = "android.summaryText";
+ field public static final String EXTRA_TEMPLATE = "android.template";
+ field public static final String EXTRA_TEXT = "android.text";
+ field public static final String EXTRA_TEXT_LINES = "android.textLines";
+ field public static final String EXTRA_TITLE = "android.title";
+ field public static final String EXTRA_TITLE_BIG = "android.title.big";
+ field public static final int FLAG_AUTO_CANCEL = 16; // 0x10
+ field public static final int FLAG_BUBBLE = 4096; // 0x1000
+ field public static final int FLAG_FOREGROUND_SERVICE = 64; // 0x40
+ field public static final int FLAG_GROUP_SUMMARY = 512; // 0x200
+ field @Deprecated public static final int FLAG_HIGH_PRIORITY = 128; // 0x80
+ field public static final int FLAG_INSISTENT = 4; // 0x4
+ field public static final int FLAG_LOCAL_ONLY = 256; // 0x100
+ field public static final int FLAG_NO_CLEAR = 32; // 0x20
+ field public static final int FLAG_ONGOING_EVENT = 2; // 0x2
+ field public static final int FLAG_ONLY_ALERT_ONCE = 8; // 0x8
+ field public static final int FLAG_SHOW_LIGHTS = 1; // 0x1
+ field public static final int GROUP_ALERT_ALL = 0; // 0x0
+ field public static final int GROUP_ALERT_CHILDREN = 2; // 0x2
+ field public static final int GROUP_ALERT_SUMMARY = 1; // 0x1
+ field public static final int PRIORITY_DEFAULT = 0; // 0x0
+ field public static final int PRIORITY_HIGH = 1; // 0x1
+ field public static final int PRIORITY_LOW = -1; // 0xffffffff
+ field public static final int PRIORITY_MAX = 2; // 0x2
+ field public static final int PRIORITY_MIN = -2; // 0xfffffffe
+ field public static final int STREAM_DEFAULT = -1; // 0xffffffff
+ field public static final int VISIBILITY_PRIVATE = 0; // 0x0
+ field public static final int VISIBILITY_PUBLIC = 1; // 0x1
+ field public static final int VISIBILITY_SECRET = -1; // 0xffffffff
+ }
+
+ public static class NotificationCompat.Action {
+ ctor public NotificationCompat.Action(int, CharSequence!, android.app.PendingIntent!);
+ ctor public NotificationCompat.Action(androidx.core.graphics.drawable.IconCompat?, CharSequence?, android.app.PendingIntent?);
+ method public android.app.PendingIntent! getActionIntent();
+ method public boolean getAllowGeneratedReplies();
+ method public androidx.core.app.RemoteInput![]! getDataOnlyRemoteInputs();
+ method public android.os.Bundle! getExtras();
+ method @Deprecated public int getIcon();
+ method public androidx.core.graphics.drawable.IconCompat? getIconCompat();
+ method public androidx.core.app.RemoteInput![]! getRemoteInputs();
+ method @androidx.core.app.NotificationCompat.Action.SemanticAction public int getSemanticAction();
+ method public boolean getShowsUserInterface();
+ method public CharSequence! getTitle();
+ method public boolean isContextual();
+ field public static final int SEMANTIC_ACTION_ARCHIVE = 5; // 0x5
+ field public static final int SEMANTIC_ACTION_CALL = 10; // 0xa
+ field public static final int SEMANTIC_ACTION_DELETE = 4; // 0x4
+ field public static final int SEMANTIC_ACTION_MARK_AS_READ = 2; // 0x2
+ field public static final int SEMANTIC_ACTION_MARK_AS_UNREAD = 3; // 0x3
+ field public static final int SEMANTIC_ACTION_MUTE = 6; // 0x6
+ field public static final int SEMANTIC_ACTION_NONE = 0; // 0x0
+ field public static final int SEMANTIC_ACTION_REPLY = 1; // 0x1
+ field public static final int SEMANTIC_ACTION_THUMBS_DOWN = 9; // 0x9
+ field public static final int SEMANTIC_ACTION_THUMBS_UP = 8; // 0x8
+ field public static final int SEMANTIC_ACTION_UNMUTE = 7; // 0x7
+ field public android.app.PendingIntent! actionIntent;
+ field @Deprecated public int icon;
+ field public CharSequence! title;
+ }
+
+ public static final class NotificationCompat.Action.Builder {
+ ctor public NotificationCompat.Action.Builder(androidx.core.graphics.drawable.IconCompat?, CharSequence?, android.app.PendingIntent?);
+ ctor public NotificationCompat.Action.Builder(int, CharSequence!, android.app.PendingIntent!);
+ ctor public NotificationCompat.Action.Builder(androidx.core.app.NotificationCompat.Action!);
+ method public androidx.core.app.NotificationCompat.Action.Builder! addExtras(android.os.Bundle!);
+ method public androidx.core.app.NotificationCompat.Action.Builder! addRemoteInput(androidx.core.app.RemoteInput!);
+ method public androidx.core.app.NotificationCompat.Action! build();
+ method public androidx.core.app.NotificationCompat.Action.Builder! extend(androidx.core.app.NotificationCompat.Action.Extender!);
+ method public android.os.Bundle! getExtras();
+ method public androidx.core.app.NotificationCompat.Action.Builder! setAllowGeneratedReplies(boolean);
+ method public androidx.core.app.NotificationCompat.Action.Builder setContextual(boolean);
+ method public androidx.core.app.NotificationCompat.Action.Builder! setSemanticAction(@androidx.core.app.NotificationCompat.Action.SemanticAction int);
+ method public androidx.core.app.NotificationCompat.Action.Builder! setShowsUserInterface(boolean);
+ }
+
+ public static interface NotificationCompat.Action.Extender {
+ method public androidx.core.app.NotificationCompat.Action.Builder! extend(androidx.core.app.NotificationCompat.Action.Builder!);
+ }
+
+ @IntDef({androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_NONE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_REPLY, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_MARK_AS_READ, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_MARK_AS_UNREAD, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_DELETE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_ARCHIVE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_MUTE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_UNMUTE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_THUMBS_UP, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_THUMBS_DOWN, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_CALL}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface NotificationCompat.Action.SemanticAction {
+ }
+
+ public static final class NotificationCompat.Action.WearableExtender implements androidx.core.app.NotificationCompat.Action.Extender {
+ ctor public NotificationCompat.Action.WearableExtender();
+ ctor public NotificationCompat.Action.WearableExtender(androidx.core.app.NotificationCompat.Action!);
+ method public androidx.core.app.NotificationCompat.Action.WearableExtender! clone();
+ method public androidx.core.app.NotificationCompat.Action.Builder! extend(androidx.core.app.NotificationCompat.Action.Builder!);
+ method @Deprecated public CharSequence! getCancelLabel();
+ method @Deprecated public CharSequence! getConfirmLabel();
+ method public boolean getHintDisplayActionInline();
+ method public boolean getHintLaunchesActivity();
+ method @Deprecated public CharSequence! getInProgressLabel();
+ method public boolean isAvailableOffline();
+ method public androidx.core.app.NotificationCompat.Action.WearableExtender! setAvailableOffline(boolean);
+ method @Deprecated public androidx.core.app.NotificationCompat.Action.WearableExtender! setCancelLabel(CharSequence!);
+ method @Deprecated public androidx.core.app.NotificationCompat.Action.WearableExtender! setConfirmLabel(CharSequence!);
+ method public androidx.core.app.NotificationCompat.Action.WearableExtender! setHintDisplayActionInline(boolean);
+ method public androidx.core.app.NotificationCompat.Action.WearableExtender! setHintLaunchesActivity(boolean);
+ method @Deprecated public androidx.core.app.NotificationCompat.Action.WearableExtender! setInProgressLabel(CharSequence!);
+ }
+
+ public static class NotificationCompat.BigPictureStyle extends androidx.core.app.NotificationCompat.Style {
+ ctor public NotificationCompat.BigPictureStyle();
+ ctor public NotificationCompat.BigPictureStyle(androidx.core.app.NotificationCompat.Builder!);
+ method public androidx.core.app.NotificationCompat.BigPictureStyle! bigLargeIcon(android.graphics.Bitmap!);
+ method public androidx.core.app.NotificationCompat.BigPictureStyle! bigPicture(android.graphics.Bitmap!);
+ method public androidx.core.app.NotificationCompat.BigPictureStyle! setBigContentTitle(CharSequence!);
+ method public androidx.core.app.NotificationCompat.BigPictureStyle! setSummaryText(CharSequence!);
+ }
+
+ public static class NotificationCompat.BigTextStyle extends androidx.core.app.NotificationCompat.Style {
+ ctor public NotificationCompat.BigTextStyle();
+ ctor public NotificationCompat.BigTextStyle(androidx.core.app.NotificationCompat.Builder!);
+ method public androidx.core.app.NotificationCompat.BigTextStyle! bigText(CharSequence!);
+ method public androidx.core.app.NotificationCompat.BigTextStyle! setBigContentTitle(CharSequence!);
+ method public androidx.core.app.NotificationCompat.BigTextStyle! setSummaryText(CharSequence!);
+ }
+
+ public static final class NotificationCompat.BubbleMetadata {
+ method @RequiresApi(29) public static androidx.core.app.NotificationCompat.BubbleMetadata? fromPlatform(android.app.Notification.BubbleMetadata?);
+ method public boolean getAutoExpandBubble();
+ method public android.app.PendingIntent? getDeleteIntent();
+ method @Dimension(unit=androidx.annotation.Dimension.DP) public int getDesiredHeight();
+ method @DimenRes public int getDesiredHeightResId();
+ method public androidx.core.graphics.drawable.IconCompat getIcon();
+ method public android.app.PendingIntent getIntent();
+ method public boolean isNotificationSuppressed();
+ method @RequiresApi(29) public static android.app.Notification.BubbleMetadata? toPlatform(androidx.core.app.NotificationCompat.BubbleMetadata?);
+ }
+
+ public static final class NotificationCompat.BubbleMetadata.Builder {
+ ctor public NotificationCompat.BubbleMetadata.Builder();
+ method public androidx.core.app.NotificationCompat.BubbleMetadata build();
+ method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setAutoExpandBubble(boolean);
+ method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setDeleteIntent(android.app.PendingIntent?);
+ method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setDesiredHeight(@Dimension(unit=androidx.annotation.Dimension.DP) int);
+ method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setDesiredHeightResId(@DimenRes int);
+ method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setIcon(androidx.core.graphics.drawable.IconCompat);
+ method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setIntent(android.app.PendingIntent);
+ method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setSuppressNotification(boolean);
+ }
+
+ public static class NotificationCompat.Builder {
+ ctor public NotificationCompat.Builder(android.content.Context, String);
+ ctor @Deprecated public NotificationCompat.Builder(android.content.Context!);
+ method public androidx.core.app.NotificationCompat.Builder! addAction(int, CharSequence!, android.app.PendingIntent!);
+ method public androidx.core.app.NotificationCompat.Builder! addAction(androidx.core.app.NotificationCompat.Action!);
+ method public androidx.core.app.NotificationCompat.Builder! addExtras(android.os.Bundle!);
+ method @RequiresApi(21) public androidx.core.app.NotificationCompat.Builder! addInvisibleAction(int, CharSequence!, android.app.PendingIntent!);
+ method @RequiresApi(21) public androidx.core.app.NotificationCompat.Builder! addInvisibleAction(androidx.core.app.NotificationCompat.Action!);
+ method public androidx.core.app.NotificationCompat.Builder! addPerson(String!);
+ method public android.app.Notification! build();
+ method public androidx.core.app.NotificationCompat.Builder! extend(androidx.core.app.NotificationCompat.Extender!);
+ method public android.os.Bundle! getExtras();
+ method @Deprecated public android.app.Notification! getNotification();
+ method protected static CharSequence! limitCharSequenceLength(CharSequence!);
+ method public androidx.core.app.NotificationCompat.Builder setAllowSystemGeneratedContextualActions(boolean);
+ method public androidx.core.app.NotificationCompat.Builder! setAutoCancel(boolean);
+ method public androidx.core.app.NotificationCompat.Builder! setBadgeIconType(int);
+ method public androidx.core.app.NotificationCompat.Builder setBubbleMetadata(androidx.core.app.NotificationCompat.BubbleMetadata?);
+ method public androidx.core.app.NotificationCompat.Builder! setCategory(String!);
+ method public androidx.core.app.NotificationCompat.Builder! setChannelId(String);
+ method @RequiresApi(24) public androidx.core.app.NotificationCompat.Builder setChronometerCountDown(boolean);
+ method public androidx.core.app.NotificationCompat.Builder! setColor(@ColorInt int);
+ method public androidx.core.app.NotificationCompat.Builder! setColorized(boolean);
+ method public androidx.core.app.NotificationCompat.Builder! setContent(android.widget.RemoteViews!);
+ method public androidx.core.app.NotificationCompat.Builder! setContentInfo(CharSequence!);
+ method public androidx.core.app.NotificationCompat.Builder! setContentIntent(android.app.PendingIntent!);
+ method public androidx.core.app.NotificationCompat.Builder! setContentText(CharSequence!);
+ method public androidx.core.app.NotificationCompat.Builder! setContentTitle(CharSequence!);
+ method public androidx.core.app.NotificationCompat.Builder! setCustomBigContentView(android.widget.RemoteViews!);
+ method public androidx.core.app.NotificationCompat.Builder! setCustomContentView(android.widget.RemoteViews!);
+ method public androidx.core.app.NotificationCompat.Builder! setCustomHeadsUpContentView(android.widget.RemoteViews!);
+ method public androidx.core.app.NotificationCompat.Builder! setDefaults(int);
+ method public androidx.core.app.NotificationCompat.Builder! setDeleteIntent(android.app.PendingIntent!);
+ method public androidx.core.app.NotificationCompat.Builder! setExtras(android.os.Bundle!);
+ method public androidx.core.app.NotificationCompat.Builder! setFullScreenIntent(android.app.PendingIntent!, boolean);
+ method public androidx.core.app.NotificationCompat.Builder! setGroup(String!);
+ method public androidx.core.app.NotificationCompat.Builder! setGroupAlertBehavior(int);
+ method public androidx.core.app.NotificationCompat.Builder! setGroupSummary(boolean);
+ method public androidx.core.app.NotificationCompat.Builder! setLargeIcon(android.graphics.Bitmap!);
+ method public androidx.core.app.NotificationCompat.Builder! setLights(@ColorInt int, int, int);
+ method public androidx.core.app.NotificationCompat.Builder! setLocalOnly(boolean);
+ method public androidx.core.app.NotificationCompat.Builder! setNumber(int);
+ method public androidx.core.app.NotificationCompat.Builder! setOngoing(boolean);
+ method public androidx.core.app.NotificationCompat.Builder! setOnlyAlertOnce(boolean);
+ method public androidx.core.app.NotificationCompat.Builder! setPriority(int);
+ method public androidx.core.app.NotificationCompat.Builder! setProgress(int, int, boolean);
+ method public androidx.core.app.NotificationCompat.Builder! setPublicVersion(android.app.Notification!);
+ method public androidx.core.app.NotificationCompat.Builder! setRemoteInputHistory(CharSequence![]!);
+ method public androidx.core.app.NotificationCompat.Builder! setShortcutId(String!);
+ method public androidx.core.app.NotificationCompat.Builder! setShowWhen(boolean);
+ method public androidx.core.app.NotificationCompat.Builder! setSmallIcon(int);
+ method public androidx.core.app.NotificationCompat.Builder! setSmallIcon(int, int);
+ method public androidx.core.app.NotificationCompat.Builder! setSortKey(String!);
+ method public androidx.core.app.NotificationCompat.Builder! setSound(android.net.Uri!);
+ method public androidx.core.app.NotificationCompat.Builder! setSound(android.net.Uri!, int);
+ method public androidx.core.app.NotificationCompat.Builder! setStyle(androidx.core.app.NotificationCompat.Style!);
+ method public androidx.core.app.NotificationCompat.Builder! setSubText(CharSequence!);
+ method public androidx.core.app.NotificationCompat.Builder! setTicker(CharSequence!);
+ method public androidx.core.app.NotificationCompat.Builder! setTicker(CharSequence!, android.widget.RemoteViews!);
+ method public androidx.core.app.NotificationCompat.Builder! setTimeoutAfter(long);
+ method public androidx.core.app.NotificationCompat.Builder! setUsesChronometer(boolean);
+ method public androidx.core.app.NotificationCompat.Builder! setVibrate(long[]!);
+ method public androidx.core.app.NotificationCompat.Builder! setVisibility(int);
+ method public androidx.core.app.NotificationCompat.Builder! setWhen(long);
+ field @Deprecated public java.util.ArrayList<java.lang.String!>! mPeople;
+ }
+
+ public static final class NotificationCompat.CarExtender implements androidx.core.app.NotificationCompat.Extender {
+ ctor public NotificationCompat.CarExtender();
+ ctor public NotificationCompat.CarExtender(android.app.Notification!);
+ method public androidx.core.app.NotificationCompat.Builder! extend(androidx.core.app.NotificationCompat.Builder!);
+ method @ColorInt public int getColor();
+ method public android.graphics.Bitmap! getLargeIcon();
+ method public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation! getUnreadConversation();
+ method public androidx.core.app.NotificationCompat.CarExtender! setColor(@ColorInt int);
+ method public androidx.core.app.NotificationCompat.CarExtender! setLargeIcon(android.graphics.Bitmap!);
+ method public androidx.core.app.NotificationCompat.CarExtender! setUnreadConversation(androidx.core.app.NotificationCompat.CarExtender.UnreadConversation!);
+ }
+
+ public static class NotificationCompat.CarExtender.UnreadConversation {
+ method public long getLatestTimestamp();
+ method public String![]! getMessages();
+ method public String! getParticipant();
+ method public String![]! getParticipants();
+ method public android.app.PendingIntent! getReadPendingIntent();
+ method public androidx.core.app.RemoteInput! getRemoteInput();
+ method public android.app.PendingIntent! getReplyPendingIntent();
+ }
+
+ public static class NotificationCompat.CarExtender.UnreadConversation.Builder {
+ ctor public NotificationCompat.CarExtender.UnreadConversation.Builder(String!);
+ method public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder! addMessage(String!);
+ method public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation! build();
+ method public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder! setLatestTimestamp(long);
+ method public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder! setReadPendingIntent(android.app.PendingIntent!);
+ method public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder! setReplyAction(android.app.PendingIntent!, androidx.core.app.RemoteInput!);
+ }
+
+ public static class NotificationCompat.DecoratedCustomViewStyle extends androidx.core.app.NotificationCompat.Style {
+ ctor public NotificationCompat.DecoratedCustomViewStyle();
+ }
+
+ public static interface NotificationCompat.Extender {
+ method public androidx.core.app.NotificationCompat.Builder! extend(androidx.core.app.NotificationCompat.Builder!);
+ }
+
+ public static class NotificationCompat.InboxStyle extends androidx.core.app.NotificationCompat.Style {
+ ctor public NotificationCompat.InboxStyle();
+ ctor public NotificationCompat.InboxStyle(androidx.core.app.NotificationCompat.Builder!);
+ method public androidx.core.app.NotificationCompat.InboxStyle! addLine(CharSequence!);
+ method public androidx.core.app.NotificationCompat.InboxStyle! setBigContentTitle(CharSequence!);
+ method public androidx.core.app.NotificationCompat.InboxStyle! setSummaryText(CharSequence!);
+ }
+
+ public static class NotificationCompat.MessagingStyle extends androidx.core.app.NotificationCompat.Style {
+ ctor @Deprecated public NotificationCompat.MessagingStyle(CharSequence);
+ ctor public NotificationCompat.MessagingStyle(androidx.core.app.Person);
+ method public void addCompatExtras(android.os.Bundle!);
+ method @Deprecated public androidx.core.app.NotificationCompat.MessagingStyle! addMessage(CharSequence!, long, CharSequence!);
+ method public androidx.core.app.NotificationCompat.MessagingStyle! addMessage(CharSequence!, long, androidx.core.app.Person!);
+ method public androidx.core.app.NotificationCompat.MessagingStyle! addMessage(androidx.core.app.NotificationCompat.MessagingStyle.Message!);
+ method public static androidx.core.app.NotificationCompat.MessagingStyle? extractMessagingStyleFromNotification(android.app.Notification!);
+ method public CharSequence? getConversationTitle();
+ method public java.util.List<androidx.core.app.NotificationCompat.MessagingStyle.Message!>! getMessages();
+ method public androidx.core.app.Person! getUser();
+ method @Deprecated public CharSequence! getUserDisplayName();
+ method public boolean isGroupConversation();
+ method public androidx.core.app.NotificationCompat.MessagingStyle! setConversationTitle(CharSequence?);
+ method public androidx.core.app.NotificationCompat.MessagingStyle! setGroupConversation(boolean);
+ field public static final int MAXIMUM_RETAINED_MESSAGES = 25; // 0x19
+ }
+
+ public static final class NotificationCompat.MessagingStyle.Message {
+ ctor public NotificationCompat.MessagingStyle.Message(CharSequence!, long, androidx.core.app.Person?);
+ ctor @Deprecated public NotificationCompat.MessagingStyle.Message(CharSequence!, long, CharSequence!);
+ method public String? getDataMimeType();
+ method public android.net.Uri? getDataUri();
+ method public android.os.Bundle getExtras();
+ method public androidx.core.app.Person? getPerson();
+ method @Deprecated public CharSequence? getSender();
+ method public CharSequence getText();
+ method public long getTimestamp();
+ method public androidx.core.app.NotificationCompat.MessagingStyle.Message! setData(String!, android.net.Uri!);
+ }
+
+ public abstract static class NotificationCompat.Style {
+ ctor public NotificationCompat.Style();
+ method public android.app.Notification! build();
+ method public void setBuilder(androidx.core.app.NotificationCompat.Builder!);
+ }
+
+ public static final class NotificationCompat.WearableExtender implements androidx.core.app.NotificationCompat.Extender {
+ ctor public NotificationCompat.WearableExtender();
+ ctor public NotificationCompat.WearableExtender(android.app.Notification!);
+ method public androidx.core.app.NotificationCompat.WearableExtender! addAction(androidx.core.app.NotificationCompat.Action!);
+ method public androidx.core.app.NotificationCompat.WearableExtender! addActions(java.util.List<androidx.core.app.NotificationCompat.Action!>!);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! addPage(android.app.Notification!);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! addPages(java.util.List<android.app.Notification!>!);
+ method public androidx.core.app.NotificationCompat.WearableExtender! clearActions();
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! clearPages();
+ method public androidx.core.app.NotificationCompat.WearableExtender! clone();
+ method public androidx.core.app.NotificationCompat.Builder! extend(androidx.core.app.NotificationCompat.Builder!);
+ method public java.util.List<androidx.core.app.NotificationCompat.Action!>! getActions();
+ method @Deprecated public android.graphics.Bitmap! getBackground();
+ method public String! getBridgeTag();
+ method public int getContentAction();
+ method @Deprecated public int getContentIcon();
+ method @Deprecated public int getContentIconGravity();
+ method public boolean getContentIntentAvailableOffline();
+ method @Deprecated public int getCustomContentHeight();
+ method @Deprecated public int getCustomSizePreset();
+ method public String! getDismissalId();
+ method @Deprecated public android.app.PendingIntent! getDisplayIntent();
+ method @Deprecated public int getGravity();
+ method @Deprecated public boolean getHintAmbientBigPicture();
+ method @Deprecated public boolean getHintAvoidBackgroundClipping();
+ method public boolean getHintContentIntentLaunchesActivity();
+ method @Deprecated public boolean getHintHideIcon();
+ method @Deprecated public int getHintScreenTimeout();
+ method @Deprecated public boolean getHintShowBackgroundOnly();
+ method @Deprecated public java.util.List<android.app.Notification!>! getPages();
+ method public boolean getStartScrollBottom();
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setBackground(android.graphics.Bitmap!);
+ method public androidx.core.app.NotificationCompat.WearableExtender! setBridgeTag(String!);
+ method public androidx.core.app.NotificationCompat.WearableExtender! setContentAction(int);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setContentIcon(int);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setContentIconGravity(int);
+ method public androidx.core.app.NotificationCompat.WearableExtender! setContentIntentAvailableOffline(boolean);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setCustomContentHeight(int);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setCustomSizePreset(int);
+ method public androidx.core.app.NotificationCompat.WearableExtender! setDismissalId(String!);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setDisplayIntent(android.app.PendingIntent!);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setGravity(int);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setHintAmbientBigPicture(boolean);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setHintAvoidBackgroundClipping(boolean);
+ method public androidx.core.app.NotificationCompat.WearableExtender! setHintContentIntentLaunchesActivity(boolean);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setHintHideIcon(boolean);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setHintScreenTimeout(int);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setHintShowBackgroundOnly(boolean);
+ method public androidx.core.app.NotificationCompat.WearableExtender! setStartScrollBottom(boolean);
+ field @Deprecated public static final int SCREEN_TIMEOUT_LONG = -1; // 0xffffffff
+ field @Deprecated public static final int SCREEN_TIMEOUT_SHORT = 0; // 0x0
+ field @Deprecated public static final int SIZE_DEFAULT = 0; // 0x0
+ field @Deprecated public static final int SIZE_FULL_SCREEN = 5; // 0x5
+ field @Deprecated public static final int SIZE_LARGE = 4; // 0x4
+ field @Deprecated public static final int SIZE_MEDIUM = 3; // 0x3
+ field @Deprecated public static final int SIZE_SMALL = 2; // 0x2
+ field @Deprecated public static final int SIZE_XSMALL = 1; // 0x1
+ field public static final int UNSET_ACTION_INDEX = -1; // 0xffffffff
+ }
+
+ public final class NotificationCompatExtras {
+ field public static final String EXTRA_ACTION_EXTRAS = "android.support.actionExtras";
+ field public static final String EXTRA_GROUP_KEY = "android.support.groupKey";
+ field public static final String EXTRA_GROUP_SUMMARY = "android.support.isGroupSummary";
+ field public static final String EXTRA_LOCAL_ONLY = "android.support.localOnly";
+ field public static final String EXTRA_REMOTE_INPUTS = "android.support.remoteInputs";
+ field public static final String EXTRA_SORT_KEY = "android.support.sortKey";
+ }
+
+ public abstract class NotificationCompatSideChannelService extends android.app.Service {
+ ctor public NotificationCompatSideChannelService();
+ method public abstract void cancel(String!, int, String!);
+ method public abstract void cancelAll(String!);
+ method public abstract void notify(String!, int, String!, android.app.Notification!);
+ method public android.os.IBinder! onBind(android.content.Intent!);
+ }
+
+ public final class NotificationManagerCompat {
+ method public boolean areNotificationsEnabled();
+ method public void cancel(int);
+ method public void cancel(String?, int);
+ method public void cancelAll();
+ method public void createNotificationChannel(android.app.NotificationChannel);
+ method public void createNotificationChannelGroup(android.app.NotificationChannelGroup);
+ method public void createNotificationChannelGroups(java.util.List<android.app.NotificationChannelGroup!>);
+ method public void createNotificationChannels(java.util.List<android.app.NotificationChannel!>);
+ method public void deleteNotificationChannel(String);
+ method public void deleteNotificationChannelGroup(String);
+ method public static androidx.core.app.NotificationManagerCompat from(android.content.Context);
+ method public static java.util.Set<java.lang.String!> getEnabledListenerPackages(android.content.Context);
+ method public int getImportance();
+ method public android.app.NotificationChannel? getNotificationChannel(String);
+ method public android.app.NotificationChannelGroup? getNotificationChannelGroup(String);
+ method public java.util.List<android.app.NotificationChannelGroup!> getNotificationChannelGroups();
+ method public java.util.List<android.app.NotificationChannel!> getNotificationChannels();
+ method public void notify(int, android.app.Notification);
+ method public void notify(String?, int, android.app.Notification);
+ field public static final String ACTION_BIND_SIDE_CHANNEL = "android.support.BIND_NOTIFICATION_SIDE_CHANNEL";
+ field public static final String EXTRA_USE_SIDE_CHANNEL = "android.support.useSideChannel";
+ field public static final int IMPORTANCE_DEFAULT = 3; // 0x3
+ field public static final int IMPORTANCE_HIGH = 4; // 0x4
+ field public static final int IMPORTANCE_LOW = 2; // 0x2
+ field public static final int IMPORTANCE_MAX = 5; // 0x5
+ field public static final int IMPORTANCE_MIN = 1; // 0x1
+ field public static final int IMPORTANCE_NONE = 0; // 0x0
+ field public static final int IMPORTANCE_UNSPECIFIED = -1000; // 0xfffffc18
+ }
+
+ public class Person {
+ method public static androidx.core.app.Person fromBundle(android.os.Bundle);
+ method public androidx.core.graphics.drawable.IconCompat? getIcon();
+ method public String? getKey();
+ method public CharSequence? getName();
+ method public String? getUri();
+ method public boolean isBot();
+ method public boolean isImportant();
+ method public androidx.core.app.Person.Builder toBuilder();
+ method public android.os.Bundle toBundle();
+ }
+
+ public static class Person.Builder {
+ ctor public Person.Builder();
+ method public androidx.core.app.Person build();
+ method public androidx.core.app.Person.Builder setBot(boolean);
+ method public androidx.core.app.Person.Builder setIcon(androidx.core.graphics.drawable.IconCompat?);
+ method public androidx.core.app.Person.Builder setImportant(boolean);
+ method public androidx.core.app.Person.Builder setKey(String?);
+ method public androidx.core.app.Person.Builder setName(CharSequence?);
+ method public androidx.core.app.Person.Builder setUri(String?);
+ }
+
+ public final class RemoteActionCompat implements androidx.versionedparcelable.VersionedParcelable {
+ ctor public RemoteActionCompat(androidx.core.graphics.drawable.IconCompat, CharSequence, CharSequence, android.app.PendingIntent);
+ ctor public RemoteActionCompat(androidx.core.app.RemoteActionCompat);
+ method @RequiresApi(26) public static androidx.core.app.RemoteActionCompat createFromRemoteAction(android.app.RemoteAction);
+ method public android.app.PendingIntent getActionIntent();
+ method public CharSequence getContentDescription();
+ method public androidx.core.graphics.drawable.IconCompat getIcon();
+ method public CharSequence getTitle();
+ method public boolean isEnabled();
+ method public void setEnabled(boolean);
+ method public void setShouldShowIcon(boolean);
+ method public boolean shouldShowIcon();
+ method @RequiresApi(26) public android.app.RemoteAction toRemoteAction();
+ }
+
+ public final class RemoteInput {
+ method public static void addDataResultToIntent(androidx.core.app.RemoteInput!, android.content.Intent!, java.util.Map<java.lang.String!,android.net.Uri!>!);
+ method public static void addResultsToIntent(androidx.core.app.RemoteInput![]!, android.content.Intent!, android.os.Bundle!);
+ method public boolean getAllowFreeFormInput();
+ method public java.util.Set<java.lang.String!>! getAllowedDataTypes();
+ method public CharSequence![]! getChoices();
+ method public static java.util.Map<java.lang.String!,android.net.Uri!>! getDataResultsFromIntent(android.content.Intent!, String!);
+ method public int getEditChoicesBeforeSending();
+ method public android.os.Bundle! getExtras();
+ method public CharSequence! getLabel();
+ method public String! getResultKey();
+ method public static android.os.Bundle! getResultsFromIntent(android.content.Intent!);
+ method public static int getResultsSource(android.content.Intent);
+ method public boolean isDataOnly();
+ method public static void setResultsSource(android.content.Intent, int);
+ field public static final int EDIT_CHOICES_BEFORE_SENDING_AUTO = 0; // 0x0
+ field public static final int EDIT_CHOICES_BEFORE_SENDING_DISABLED = 1; // 0x1
+ field public static final int EDIT_CHOICES_BEFORE_SENDING_ENABLED = 2; // 0x2
+ field public static final String EXTRA_RESULTS_DATA = "android.remoteinput.resultsData";
+ field public static final String RESULTS_CLIP_LABEL = "android.remoteinput.results";
+ field public static final int SOURCE_CHOICE = 1; // 0x1
+ field public static final int SOURCE_FREE_FORM_INPUT = 0; // 0x0
+ }
+
+ public static final class RemoteInput.Builder {
+ ctor public RemoteInput.Builder(String);
+ method public androidx.core.app.RemoteInput.Builder addExtras(android.os.Bundle);
+ method public androidx.core.app.RemoteInput build();
+ method public android.os.Bundle getExtras();
+ method public androidx.core.app.RemoteInput.Builder setAllowDataType(String, boolean);
+ method public androidx.core.app.RemoteInput.Builder setAllowFreeFormInput(boolean);
+ method public androidx.core.app.RemoteInput.Builder setChoices(CharSequence![]?);
+ method public androidx.core.app.RemoteInput.Builder setEditChoicesBeforeSending(int);
+ method public androidx.core.app.RemoteInput.Builder setLabel(CharSequence?);
+ }
+
+ public final class ServiceCompat {
+ method public static void stopForeground(android.app.Service, int);
+ field public static final int START_STICKY = 1; // 0x1
+ field public static final int STOP_FOREGROUND_DETACH = 2; // 0x2
+ field public static final int STOP_FOREGROUND_REMOVE = 1; // 0x1
+ }
+
+ public final class ShareCompat {
+ method public static void configureMenuItem(android.view.MenuItem, androidx.core.app.ShareCompat.IntentBuilder);
+ method public static void configureMenuItem(android.view.Menu, @IdRes int, androidx.core.app.ShareCompat.IntentBuilder);
+ method public static android.content.ComponentName? getCallingActivity(android.app.Activity);
+ method public static String? getCallingPackage(android.app.Activity);
+ field public static final String EXTRA_CALLING_ACTIVITY = "androidx.core.app.EXTRA_CALLING_ACTIVITY";
+ field public static final String EXTRA_CALLING_ACTIVITY_INTEROP = "android.support.v4.app.EXTRA_CALLING_ACTIVITY";
+ field public static final String EXTRA_CALLING_PACKAGE = "androidx.core.app.EXTRA_CALLING_PACKAGE";
+ field public static final String EXTRA_CALLING_PACKAGE_INTEROP = "android.support.v4.app.EXTRA_CALLING_PACKAGE";
+ }
+
+ public static class ShareCompat.IntentBuilder {
+ method public androidx.core.app.ShareCompat.IntentBuilder addEmailBcc(String);
+ method public androidx.core.app.ShareCompat.IntentBuilder addEmailBcc(String![]);
+ method public androidx.core.app.ShareCompat.IntentBuilder addEmailCc(String);
+ method public androidx.core.app.ShareCompat.IntentBuilder addEmailCc(String![]);
+ method public androidx.core.app.ShareCompat.IntentBuilder addEmailTo(String);
+ method public androidx.core.app.ShareCompat.IntentBuilder addEmailTo(String![]);
+ method public androidx.core.app.ShareCompat.IntentBuilder addStream(android.net.Uri);
+ method public android.content.Intent createChooserIntent();
+ method public static androidx.core.app.ShareCompat.IntentBuilder from(android.app.Activity);
+ method public android.content.Intent getIntent();
+ method public androidx.core.app.ShareCompat.IntentBuilder setChooserTitle(CharSequence?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setChooserTitle(@StringRes int);
+ method public androidx.core.app.ShareCompat.IntentBuilder setEmailBcc(String![]?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setEmailCc(String![]?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setEmailTo(String![]?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setHtmlText(String?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setStream(android.net.Uri?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setSubject(String?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setText(CharSequence?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setType(String?);
+ method public void startChooser();
+ }
+
+ public static class ShareCompat.IntentReader {
+ method public static androidx.core.app.ShareCompat.IntentReader from(android.app.Activity);
+ method public android.content.ComponentName? getCallingActivity();
+ method public android.graphics.drawable.Drawable? getCallingActivityIcon();
+ method public android.graphics.drawable.Drawable? getCallingApplicationIcon();
+ method public CharSequence? getCallingApplicationLabel();
+ method public String? getCallingPackage();
+ method public String![]? getEmailBcc();
+ method public String![]? getEmailCc();
+ method public String![]? getEmailTo();
+ method public String? getHtmlText();
+ method public android.net.Uri? getStream();
+ method public android.net.Uri? getStream(int);
+ method public int getStreamCount();
+ method public String? getSubject();
+ method public CharSequence? getText();
+ method public String? getType();
+ method public boolean isMultipleShare();
+ method public boolean isShareIntent();
+ method public boolean isSingleShare();
+ }
+
+ public abstract class SharedElementCallback {
+ ctor public SharedElementCallback();
+ method public android.os.Parcelable! onCaptureSharedElementSnapshot(android.view.View!, android.graphics.Matrix!, android.graphics.RectF!);
+ method public android.view.View! onCreateSnapshotView(android.content.Context!, android.os.Parcelable!);
+ method public void onMapSharedElements(java.util.List<java.lang.String!>!, java.util.Map<java.lang.String!,android.view.View!>!);
+ method public void onRejectSharedElements(java.util.List<android.view.View!>!);
+ method public void onSharedElementEnd(java.util.List<java.lang.String!>!, java.util.List<android.view.View!>!, java.util.List<android.view.View!>!);
+ method public void onSharedElementStart(java.util.List<java.lang.String!>!, java.util.List<android.view.View!>!, java.util.List<android.view.View!>!);
+ method public void onSharedElementsArrived(java.util.List<java.lang.String!>!, java.util.List<android.view.View!>!, androidx.core.app.SharedElementCallback.OnSharedElementsReadyListener!);
+ }
+
+ public static interface SharedElementCallback.OnSharedElementsReadyListener {
+ method public void onSharedElementsReady();
+ }
+
+ public final class TaskStackBuilder implements java.lang.Iterable<android.content.Intent> {
+ method public androidx.core.app.TaskStackBuilder addNextIntent(android.content.Intent);
+ method public androidx.core.app.TaskStackBuilder addNextIntentWithParentStack(android.content.Intent);
+ method public androidx.core.app.TaskStackBuilder addParentStack(android.app.Activity);
+ method public androidx.core.app.TaskStackBuilder addParentStack(Class<?>);
+ method public androidx.core.app.TaskStackBuilder! addParentStack(android.content.ComponentName!);
+ method public static androidx.core.app.TaskStackBuilder create(android.content.Context);
+ method public android.content.Intent? editIntentAt(int);
+ method @Deprecated public static androidx.core.app.TaskStackBuilder! from(android.content.Context!);
+ method @Deprecated public android.content.Intent! getIntent(int);
+ method public int getIntentCount();
+ method public android.content.Intent![] getIntents();
+ method public android.app.PendingIntent? getPendingIntent(int, int);
+ method public android.app.PendingIntent? getPendingIntent(int, int, android.os.Bundle?);
+ method @Deprecated public java.util.Iterator<android.content.Intent!>! iterator();
+ method public void startActivities();
+ method public void startActivities(android.os.Bundle?);
+ }
+
+ public static interface TaskStackBuilder.SupportParentable {
+ method public android.content.Intent? getSupportParentActivityIntent();
+ }
+
+}
+
+package androidx.core.content {
+
+ public final class ContentResolverCompat {
+ method public static android.database.Cursor! query(android.content.ContentResolver!, android.net.Uri!, String![]!, String!, String![]!, String!, androidx.core.os.CancellationSignal!);
+ }
+
+ public class ContextCompat {
+ ctor protected ContextCompat();
+ method public static int checkSelfPermission(android.content.Context, String);
+ method public static android.content.Context? createDeviceProtectedStorageContext(android.content.Context);
+ method public static java.io.File! getCodeCacheDir(android.content.Context);
+ method @ColorInt public static int getColor(android.content.Context, @ColorRes int);
+ method public static android.content.res.ColorStateList? getColorStateList(android.content.Context, @ColorRes int);
+ method public static java.io.File? getDataDir(android.content.Context);
+ method public static android.graphics.drawable.Drawable? getDrawable(android.content.Context, @DrawableRes int);
+ method public static java.io.File![] getExternalCacheDirs(android.content.Context);
+ method public static java.io.File![] getExternalFilesDirs(android.content.Context, String?);
+ method public static java.util.concurrent.Executor! getMainExecutor(android.content.Context!);
+ method public static java.io.File? getNoBackupFilesDir(android.content.Context);
+ method public static java.io.File![] getObbDirs(android.content.Context);
+ method public static <T> T? getSystemService(android.content.Context, Class<T!>);
+ method public static String? getSystemServiceName(android.content.Context, Class<?>);
+ method public static boolean isDeviceProtectedStorage(android.content.Context);
+ method public static boolean startActivities(android.content.Context, android.content.Intent![]);
+ method public static boolean startActivities(android.content.Context, android.content.Intent![], android.os.Bundle?);
+ method public static void startActivity(android.content.Context, android.content.Intent, android.os.Bundle?);
+ method public static void startForegroundService(android.content.Context, android.content.Intent);
+ }
+
+ public class FileProvider extends android.content.ContentProvider {
+ ctor public FileProvider();
+ method public int delete(android.net.Uri, String?, String![]?);
+ method public String! getType(android.net.Uri);
+ method public static android.net.Uri! getUriForFile(android.content.Context, String, java.io.File);
+ method public android.net.Uri! insert(android.net.Uri, android.content.ContentValues!);
+ method public boolean onCreate();
+ method public android.database.Cursor! query(android.net.Uri, String![]?, String?, String![]?, String?);
+ method public int update(android.net.Uri, android.content.ContentValues!, String?, String![]?);
+ }
+
+ public final class IntentCompat {
+ method public static android.content.Intent makeMainSelectorActivity(String, String);
+ field public static final String CATEGORY_LEANBACK_LAUNCHER = "android.intent.category.LEANBACK_LAUNCHER";
+ field public static final String EXTRA_HTML_TEXT = "android.intent.extra.HTML_TEXT";
+ field public static final String EXTRA_START_PLAYBACK = "android.intent.extra.START_PLAYBACK";
+ }
+
+ public final class MimeTypeFilter {
+ method public static boolean matches(String?, String);
+ method public static String? matches(String?, String![]);
+ method public static String? matches(String![]?, String);
+ method public static String![] matchesMany(String![]?, String);
+ }
+
+ public final class PermissionChecker {
+ method public static int checkCallingOrSelfPermission(android.content.Context, String);
+ method public static int checkCallingPermission(android.content.Context, String, String?);
+ method public static int checkPermission(android.content.Context, String, int, int, String?);
+ method public static int checkSelfPermission(android.content.Context, String);
+ field public static final int PERMISSION_DENIED = -1; // 0xffffffff
+ field public static final int PERMISSION_DENIED_APP_OP = -2; // 0xfffffffe
+ field public static final int PERMISSION_GRANTED = 0; // 0x0
+ }
+
+ @Deprecated public final class SharedPreferencesCompat {
+ }
+
+ @Deprecated public static final class SharedPreferencesCompat.EditorCompat {
+ method @Deprecated public void apply(android.content.SharedPreferences.Editor);
+ method @Deprecated public static androidx.core.content.SharedPreferencesCompat.EditorCompat! getInstance();
+ }
+
+}
+
+package androidx.core.content.pm {
+
+ @Deprecated public final class ActivityInfoCompat {
+ field @Deprecated public static final int CONFIG_UI_MODE = 512; // 0x200
+ }
+
+ public final class PackageInfoCompat {
+ method public static long getLongVersionCode(android.content.pm.PackageInfo);
+ }
+
+ public final class PermissionInfoCompat {
+ method public static int getProtection(android.content.pm.PermissionInfo);
+ method public static int getProtectionFlags(android.content.pm.PermissionInfo);
+ }
+
+ public class ShortcutInfoCompat {
+ method public android.content.ComponentName? getActivity();
+ method public java.util.Set<java.lang.String!>? getCategories();
+ method public CharSequence? getDisabledMessage();
+ method public String getId();
+ method public android.content.Intent getIntent();
+ method public android.content.Intent![] getIntents();
+ method public CharSequence? getLongLabel();
+ method public int getRank();
+ method public CharSequence getShortLabel();
+ method @RequiresApi(25) public android.content.pm.ShortcutInfo! toShortcutInfo();
+ }
+
+ public static class ShortcutInfoCompat.Builder {
+ ctor public ShortcutInfoCompat.Builder(android.content.Context, String);
+ method public androidx.core.content.pm.ShortcutInfoCompat build();
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setActivity(android.content.ComponentName);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setAlwaysBadged();
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setCategories(java.util.Set<java.lang.String!>);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setDisabledMessage(CharSequence);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setIcon(androidx.core.graphics.drawable.IconCompat!);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setIntent(android.content.Intent);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setIntents(android.content.Intent![]);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setLongLabel(CharSequence);
+ method @Deprecated public androidx.core.content.pm.ShortcutInfoCompat.Builder setLongLived();
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setLongLived(boolean);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setPerson(androidx.core.app.Person);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setPersons(androidx.core.app.Person![]);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setRank(int);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setShortLabel(CharSequence);
+ }
+
+ public class ShortcutManagerCompat {
+ method public static boolean addDynamicShortcuts(android.content.Context, java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>);
+ method public static android.content.Intent createShortcutResultIntent(android.content.Context, androidx.core.content.pm.ShortcutInfoCompat);
+ method public static java.util.List<androidx.core.content.pm.ShortcutInfoCompat!> getDynamicShortcuts(android.content.Context);
+ method public static int getMaxShortcutCountPerActivity(android.content.Context);
+ method public static boolean isRequestPinShortcutSupported(android.content.Context);
+ method public static void removeAllDynamicShortcuts(android.content.Context);
+ method public static void removeDynamicShortcuts(android.content.Context, java.util.List<java.lang.String!>);
+ method public static boolean requestPinShortcut(android.content.Context, androidx.core.content.pm.ShortcutInfoCompat, android.content.IntentSender?);
+ method public static boolean updateShortcuts(android.content.Context, java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>);
+ field public static final String EXTRA_SHORTCUT_ID = "android.intent.extra.shortcut.ID";
+ }
+
+}
+
+package androidx.core.content.res {
+
+ public final class ConfigurationHelper {
+ method public static int getDensityDpi(android.content.res.Resources);
+ }
+
+ public final class ResourcesCompat {
+ method @ColorInt public static int getColor(android.content.res.Resources, @ColorRes int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
+ method public static android.content.res.ColorStateList? getColorStateList(android.content.res.Resources, @ColorRes int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
+ method public static android.graphics.drawable.Drawable? getDrawable(android.content.res.Resources, @DrawableRes int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
+ method public static android.graphics.drawable.Drawable? getDrawableForDensity(android.content.res.Resources, @DrawableRes int, int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
+ method public static float getFloat(android.content.res.Resources, @DimenRes int);
+ method public static android.graphics.Typeface? getFont(android.content.Context, @FontRes int) throws android.content.res.Resources.NotFoundException;
+ method public static void getFont(android.content.Context, @FontRes int, androidx.core.content.res.ResourcesCompat.FontCallback, android.os.Handler?) throws android.content.res.Resources.NotFoundException;
+ }
+
+ public abstract static class ResourcesCompat.FontCallback {
+ ctor public ResourcesCompat.FontCallback();
+ method public abstract void onFontRetrievalFailed(int);
+ method public abstract void onFontRetrieved(android.graphics.Typeface);
+ }
+
+}
+
+package androidx.core.database {
+
+ public final class CursorWindowCompat {
+ method public static android.database.CursorWindow create(String?, long);
+ }
+
+ @Deprecated public final class DatabaseUtilsCompat {
+ method @Deprecated public static String![]! appendSelectionArgs(String![]!, String![]!);
+ method @Deprecated public static String! concatenateWhere(String!, String!);
+ }
+
+}
+
+package androidx.core.database.sqlite {
+
+ public final class SQLiteCursorCompat {
+ method public static void setFillWindowForwardOnly(android.database.sqlite.SQLiteCursor, boolean);
+ }
+
+}
+
+package androidx.core.graphics {
+
+ public final class BitmapCompat {
+ method public static int getAllocationByteCount(android.graphics.Bitmap);
+ method public static boolean hasMipMap(android.graphics.Bitmap);
+ method public static void setHasMipMap(android.graphics.Bitmap, boolean);
+ }
+
+ public class BlendModeColorFilterCompat {
+ method public static android.graphics.ColorFilter? createBlendModeColorFilterCompat(int, androidx.core.graphics.BlendModeCompat);
+ }
+
+ public enum BlendModeCompat {
+ enum_constant public static final androidx.core.graphics.BlendModeCompat CLEAR;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat COLOR;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat COLOR_BURN;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat COLOR_DODGE;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat DARKEN;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat DIFFERENCE;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat DST;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat DST_ATOP;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat DST_IN;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat DST_OUT;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat DST_OVER;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat EXCLUSION;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat HARD_LIGHT;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat HUE;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat LIGHTEN;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat LUMINOSITY;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat MODULATE;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat MULTIPLY;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat OVERLAY;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat PLUS;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat SATURATION;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat SCREEN;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat SOFT_LIGHT;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat SRC;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat SRC_ATOP;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat SRC_IN;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat SRC_OUT;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat SRC_OVER;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat XOR;
+ }
+
+ public final class ColorUtils {
+ method @ColorInt public static int HSLToColor(float[]);
+ method @ColorInt public static int LABToColor(@FloatRange(from=0.0f, to=100) double, @FloatRange(from=0xffffff80, to=127) double, @FloatRange(from=0xffffff80, to=127) double);
+ method public static void LABToXYZ(@FloatRange(from=0.0f, to=100) double, @FloatRange(from=0xffffff80, to=127) double, @FloatRange(from=0xffffff80, to=127) double, double[]);
+ method public static void RGBToHSL(@IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, float[]);
+ method public static void RGBToLAB(@IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, double[]);
+ method public static void RGBToXYZ(@IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, double[]);
+ method @ColorInt public static int XYZToColor(@FloatRange(from=0.0f, to=androidx.core.graphics.ColorUtils.XYZ_WHITE_REFERENCE_X) double, @FloatRange(from=0.0f, to=androidx.core.graphics.ColorUtils.XYZ_WHITE_REFERENCE_Y) double, @FloatRange(from=0.0f, to=androidx.core.graphics.ColorUtils.XYZ_WHITE_REFERENCE_Z) double);
+ method public static void XYZToLAB(@FloatRange(from=0.0f, to=androidx.core.graphics.ColorUtils.XYZ_WHITE_REFERENCE_X) double, @FloatRange(from=0.0f, to=androidx.core.graphics.ColorUtils.XYZ_WHITE_REFERENCE_Y) double, @FloatRange(from=0.0f, to=androidx.core.graphics.ColorUtils.XYZ_WHITE_REFERENCE_Z) double, double[]);
+ method @ColorInt public static int blendARGB(@ColorInt int, @ColorInt int, @FloatRange(from=0.0, to=1.0) float);
+ method public static void blendHSL(float[], float[], @FloatRange(from=0.0, to=1.0) float, float[]);
+ method public static void blendLAB(double[], double[], @FloatRange(from=0.0, to=1.0) double, double[]);
+ method public static double calculateContrast(@ColorInt int, @ColorInt int);
+ method @FloatRange(from=0.0, to=1.0) public static double calculateLuminance(@ColorInt int);
+ method public static int calculateMinimumAlpha(@ColorInt int, @ColorInt int, float);
+ method public static void colorToHSL(@ColorInt int, float[]);
+ method public static void colorToLAB(@ColorInt int, double[]);
+ method public static void colorToXYZ(@ColorInt int, double[]);
+ method public static int compositeColors(@ColorInt int, @ColorInt int);
+ method @RequiresApi(26) public static android.graphics.Color compositeColors(android.graphics.Color, android.graphics.Color);
+ method public static double distanceEuclidean(double[], double[]);
+ method @ColorInt public static int setAlphaComponent(@ColorInt int, @IntRange(from=0, to=255) int);
+ }
+
+ public final class Insets {
+ method public static androidx.core.graphics.Insets of(int, int, int, int);
+ method public static androidx.core.graphics.Insets of(android.graphics.Rect);
+ field public static final androidx.core.graphics.Insets NONE;
+ field public final int bottom;
+ field public final int left;
+ field public final int right;
+ field public final int top;
+ }
+
+ public final class PaintCompat {
+ method public static boolean hasGlyph(android.graphics.Paint, String);
+ method public static boolean setBlendMode(android.graphics.Paint, androidx.core.graphics.BlendModeCompat?);
+ }
+
+ public final class PathSegment {
+ ctor public PathSegment(android.graphics.PointF, float, android.graphics.PointF, float);
+ method public android.graphics.PointF getEnd();
+ method public float getEndFraction();
+ method public android.graphics.PointF getStart();
+ method public float getStartFraction();
+ }
+
+ public final class PathUtils {
+ method @RequiresApi(26) public static java.util.Collection<androidx.core.graphics.PathSegment!> flatten(android.graphics.Path);
+ method @RequiresApi(26) public static java.util.Collection<androidx.core.graphics.PathSegment!> flatten(android.graphics.Path, @FloatRange(from=0) float);
+ }
+
+ public class TypefaceCompat {
+ method public static android.graphics.Typeface create(android.content.Context, android.graphics.Typeface?, int);
+ }
+
+}
+
+package androidx.core.graphics.drawable {
+
+ public final class DrawableCompat {
+ method public static void applyTheme(android.graphics.drawable.Drawable, android.content.res.Resources.Theme);
+ method public static boolean canApplyTheme(android.graphics.drawable.Drawable);
+ method public static void clearColorFilter(android.graphics.drawable.Drawable);
+ method public static int getAlpha(android.graphics.drawable.Drawable);
+ method public static android.graphics.ColorFilter! getColorFilter(android.graphics.drawable.Drawable);
+ method public static int getLayoutDirection(android.graphics.drawable.Drawable);
+ method public static void inflate(android.graphics.drawable.Drawable, android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet, android.content.res.Resources.Theme?) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+ method public static boolean isAutoMirrored(android.graphics.drawable.Drawable);
+ method @Deprecated public static void jumpToCurrentState(android.graphics.drawable.Drawable);
+ method public static void setAutoMirrored(android.graphics.drawable.Drawable, boolean);
+ method public static void setHotspot(android.graphics.drawable.Drawable, float, float);
+ method public static void setHotspotBounds(android.graphics.drawable.Drawable, int, int, int, int);
+ method public static boolean setLayoutDirection(android.graphics.drawable.Drawable, int);
+ method public static void setTint(android.graphics.drawable.Drawable, @ColorInt int);
+ method public static void setTintList(android.graphics.drawable.Drawable, android.content.res.ColorStateList?);
+ method public static void setTintMode(android.graphics.drawable.Drawable, android.graphics.PorterDuff.Mode);
+ method public static <T extends android.graphics.drawable.Drawable> T! unwrap(android.graphics.drawable.Drawable);
+ method public static android.graphics.drawable.Drawable! wrap(android.graphics.drawable.Drawable);
+ }
+
+ public class IconCompat extends androidx.versionedparcelable.CustomVersionedParcelable {
+ method public static androidx.core.graphics.drawable.IconCompat? createFromBundle(android.os.Bundle);
+ method @RequiresApi(23) public static androidx.core.graphics.drawable.IconCompat? createFromIcon(android.content.Context, android.graphics.drawable.Icon);
+ method public static androidx.core.graphics.drawable.IconCompat! createWithAdaptiveBitmap(android.graphics.Bitmap!);
+ method public static androidx.core.graphics.drawable.IconCompat! createWithBitmap(android.graphics.Bitmap!);
+ method public static androidx.core.graphics.drawable.IconCompat! createWithContentUri(String!);
+ method public static androidx.core.graphics.drawable.IconCompat! createWithContentUri(android.net.Uri!);
+ method public static androidx.core.graphics.drawable.IconCompat! createWithData(byte[]!, int, int);
+ method public static androidx.core.graphics.drawable.IconCompat! createWithResource(android.content.Context!, @DrawableRes int);
+ method @IdRes public int getResId();
+ method public String getResPackage();
+ method public int getType();
+ method public android.net.Uri getUri();
+ method public android.graphics.drawable.Drawable! loadDrawable(android.content.Context!);
+ method public androidx.core.graphics.drawable.IconCompat! setTint(@ColorInt int);
+ method public androidx.core.graphics.drawable.IconCompat! setTintList(android.content.res.ColorStateList!);
+ method public androidx.core.graphics.drawable.IconCompat! setTintMode(android.graphics.PorterDuff.Mode!);
+ method public android.os.Bundle! toBundle();
+ method @RequiresApi(23) public android.graphics.drawable.Icon! toIcon();
+ field public static final int TYPE_UNKNOWN = -1; // 0xffffffff
+ }
+
+ public abstract class RoundedBitmapDrawable extends android.graphics.drawable.Drawable {
+ method public void draw(android.graphics.Canvas);
+ method public final android.graphics.Bitmap? getBitmap();
+ method public float getCornerRadius();
+ method public int getGravity();
+ method public int getOpacity();
+ method public final android.graphics.Paint getPaint();
+ method public boolean hasAntiAlias();
+ method public boolean hasMipMap();
+ method public boolean isCircular();
+ method public void setAlpha(int);
+ method public void setAntiAlias(boolean);
+ method public void setCircular(boolean);
+ method public void setColorFilter(android.graphics.ColorFilter!);
+ method public void setCornerRadius(float);
+ method public void setDither(boolean);
+ method public void setGravity(int);
+ method public void setMipMap(boolean);
+ method public void setTargetDensity(android.graphics.Canvas);
+ method public void setTargetDensity(android.util.DisplayMetrics);
+ method public void setTargetDensity(int);
+ }
+
+ public final class RoundedBitmapDrawableFactory {
+ method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, android.graphics.Bitmap?);
+ method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, String);
+ method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, java.io.InputStream);
+ }
+
+}
+
+package androidx.core.hardware.display {
+
+ public final class DisplayManagerCompat {
+ method public android.view.Display? getDisplay(int);
+ method public android.view.Display![] getDisplays();
+ method public android.view.Display![] getDisplays(String?);
+ method public static androidx.core.hardware.display.DisplayManagerCompat getInstance(android.content.Context);
+ field public static final String DISPLAY_CATEGORY_PRESENTATION = "android.hardware.display.category.PRESENTATION";
+ }
+
+}
+
+package androidx.core.hardware.fingerprint {
+
+ @Deprecated public final class FingerprintManagerCompat {
+ method @Deprecated @RequiresPermission(android.Manifest.permission.USE_FINGERPRINT) public void authenticate(androidx.core.hardware.fingerprint.FingerprintManagerCompat.CryptoObject?, int, androidx.core.os.CancellationSignal?, androidx.core.hardware.fingerprint.FingerprintManagerCompat.AuthenticationCallback, android.os.Handler?);
+ method @Deprecated public static androidx.core.hardware.fingerprint.FingerprintManagerCompat from(android.content.Context);
+ method @Deprecated @RequiresPermission(android.Manifest.permission.USE_FINGERPRINT) public boolean hasEnrolledFingerprints();
+ method @Deprecated @RequiresPermission(android.Manifest.permission.USE_FINGERPRINT) public boolean isHardwareDetected();
+ }
+
+ @Deprecated public abstract static class FingerprintManagerCompat.AuthenticationCallback {
+ ctor @Deprecated public FingerprintManagerCompat.AuthenticationCallback();
+ method @Deprecated public void onAuthenticationError(int, CharSequence!);
+ method @Deprecated public void onAuthenticationFailed();
+ method @Deprecated public void onAuthenticationHelp(int, CharSequence!);
+ method @Deprecated public void onAuthenticationSucceeded(androidx.core.hardware.fingerprint.FingerprintManagerCompat.AuthenticationResult!);
+ }
+
+ @Deprecated public static final class FingerprintManagerCompat.AuthenticationResult {
+ ctor @Deprecated public FingerprintManagerCompat.AuthenticationResult(androidx.core.hardware.fingerprint.FingerprintManagerCompat.CryptoObject!);
+ method @Deprecated public androidx.core.hardware.fingerprint.FingerprintManagerCompat.CryptoObject! getCryptoObject();
+ }
+
+ @Deprecated public static class FingerprintManagerCompat.CryptoObject {
+ ctor @Deprecated public FingerprintManagerCompat.CryptoObject(java.security.Signature);
+ ctor @Deprecated public FingerprintManagerCompat.CryptoObject(javax.crypto.Cipher);
+ ctor @Deprecated public FingerprintManagerCompat.CryptoObject(javax.crypto.Mac);
+ method @Deprecated public javax.crypto.Cipher? getCipher();
+ method @Deprecated public javax.crypto.Mac? getMac();
+ method @Deprecated public java.security.Signature? getSignature();
+ }
+
+}
+
+package androidx.core.location {
+
+ public final class LocationManagerCompat {
+ method public static boolean isLocationEnabled(android.location.LocationManager);
+ }
+
+}
+
+package androidx.core.math {
+
+ public class MathUtils {
+ method public static float clamp(float, float, float);
+ method public static double clamp(double, double, double);
+ method public static int clamp(int, int, int);
+ method public static long clamp(long, long, long);
+ }
+
+}
+
+package androidx.core.net {
+
+ public final class ConnectivityManagerCompat {
+ method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public static android.net.NetworkInfo? getNetworkInfoFromBroadcast(android.net.ConnectivityManager, android.content.Intent);
+ method public static int getRestrictBackgroundStatus(android.net.ConnectivityManager);
+ method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public static boolean isActiveNetworkMetered(android.net.ConnectivityManager);
+ field public static final int RESTRICT_BACKGROUND_STATUS_DISABLED = 1; // 0x1
+ field public static final int RESTRICT_BACKGROUND_STATUS_ENABLED = 3; // 0x3
+ field public static final int RESTRICT_BACKGROUND_STATUS_WHITELISTED = 2; // 0x2
+ }
+
+ public final class TrafficStatsCompat {
+ method @Deprecated public static void clearThreadStatsTag();
+ method @Deprecated public static int getThreadStatsTag();
+ method @Deprecated public static void incrementOperationCount(int);
+ method @Deprecated public static void incrementOperationCount(int, int);
+ method @Deprecated public static void setThreadStatsTag(int);
+ method public static void tagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
+ method @Deprecated public static void tagSocket(java.net.Socket!) throws java.net.SocketException;
+ method public static void untagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
+ method @Deprecated public static void untagSocket(java.net.Socket!) throws java.net.SocketException;
+ }
+
+ public final class UriCompat {
+ method public static String toSafeString(android.net.Uri);
+ }
+
+}
+
+package androidx.core.os {
+
+ public class BuildCompat {
+ method @Deprecated public static boolean isAtLeastN();
+ method @Deprecated public static boolean isAtLeastNMR1();
+ method @Deprecated public static boolean isAtLeastO();
+ method @Deprecated public static boolean isAtLeastOMR1();
+ method @Deprecated public static boolean isAtLeastP();
+ method @Deprecated public static boolean isAtLeastQ();
+ method public static boolean isAtLeastR();
+ }
+
+ public final class CancellationSignal {
+ ctor public CancellationSignal();
+ method public void cancel();
+ method public Object? getCancellationSignalObject();
+ method public boolean isCanceled();
+ method public void setOnCancelListener(androidx.core.os.CancellationSignal.OnCancelListener?);
+ method public void throwIfCanceled();
+ }
+
+ public static interface CancellationSignal.OnCancelListener {
+ method public void onCancel();
+ }
+
+ public final class ConfigurationCompat {
+ method public static androidx.core.os.LocaleListCompat getLocales(android.content.res.Configuration);
+ }
+
+ public final class EnvironmentCompat {
+ method public static String getStorageState(java.io.File);
+ field public static final String MEDIA_UNKNOWN = "unknown";
+ }
+
+ public final class HandlerCompat {
+ method public static android.os.Handler createAsync(android.os.Looper);
+ method public static android.os.Handler createAsync(android.os.Looper, android.os.Handler.Callback);
+ method public static boolean postDelayed(android.os.Handler, Runnable, Object?, long);
+ }
+
+ public final class LocaleListCompat {
+ method public static androidx.core.os.LocaleListCompat create(java.util.Locale!...);
+ method public static androidx.core.os.LocaleListCompat forLanguageTags(String?);
+ method public java.util.Locale! get(int);
+ method @Size(min=1) public static androidx.core.os.LocaleListCompat getAdjustedDefault();
+ method @Size(min=1) public static androidx.core.os.LocaleListCompat getDefault();
+ method public static androidx.core.os.LocaleListCompat getEmptyLocaleList();
+ method public java.util.Locale? getFirstMatch(String![]);
+ method @IntRange(from=0xffffffff) public int indexOf(java.util.Locale!);
+ method public boolean isEmpty();
+ method @IntRange(from=0) public int size();
+ method public String toLanguageTags();
+ method public Object? unwrap();
+ method @Deprecated @RequiresApi(24) public static androidx.core.os.LocaleListCompat! wrap(Object!);
+ method @RequiresApi(24) public static androidx.core.os.LocaleListCompat wrap(android.os.LocaleList);
+ }
+
+ public final class MessageCompat {
+ method public static boolean isAsynchronous(android.os.Message);
+ method public static void setAsynchronous(android.os.Message, boolean);
+ }
+
+ public class OperationCanceledException extends java.lang.RuntimeException {
+ ctor public OperationCanceledException();
+ ctor public OperationCanceledException(String?);
+ }
+
+ public final class ParcelCompat {
+ method public static boolean readBoolean(android.os.Parcel);
+ method public static void writeBoolean(android.os.Parcel, boolean);
+ }
+
+ @Deprecated public final class ParcelableCompat {
+ method @Deprecated public static <T> android.os.Parcelable.Creator<T!>! newCreator(androidx.core.os.ParcelableCompatCreatorCallbacks<T!>!);
+ }
+
+ @Deprecated public interface ParcelableCompatCreatorCallbacks<T> {
+ method @Deprecated public T! createFromParcel(android.os.Parcel!, ClassLoader!);
+ method @Deprecated public T![]! newArray(int);
+ }
+
+ public final class TraceCompat {
+ method public static void beginAsyncSection(String, int);
+ method public static void beginSection(String);
+ method public static void endAsyncSection(String, int);
+ method public static void endSection();
+ method public static boolean isEnabled();
+ method public static void setCounter(String, int);
+ }
+
+ public class UserManagerCompat {
+ method public static boolean isUserUnlocked(android.content.Context);
+ }
+
+}
+
+package androidx.core.provider {
+
+ public final class FontRequest {
+ ctor public FontRequest(String, String, String, java.util.List<java.util.List<byte[]!>!>);
+ ctor public FontRequest(String, String, String, @ArrayRes int);
+ method public java.util.List<java.util.List<byte[]!>!>? getCertificates();
+ method @ArrayRes public int getCertificatesArrayResId();
+ method public String getProviderAuthority();
+ method public String getProviderPackage();
+ method public String getQuery();
+ }
+
+ public class FontsContractCompat {
+ method public static android.graphics.Typeface? buildTypeface(android.content.Context, android.os.CancellationSignal?, androidx.core.provider.FontsContractCompat.FontInfo![]);
+ method public static androidx.core.provider.FontsContractCompat.FontFamilyResult fetchFonts(android.content.Context, android.os.CancellationSignal?, androidx.core.provider.FontRequest) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public static void requestFont(android.content.Context, androidx.core.provider.FontRequest, androidx.core.provider.FontsContractCompat.FontRequestCallback, android.os.Handler);
+ }
+
+ public static final class FontsContractCompat.Columns implements android.provider.BaseColumns {
+ ctor public FontsContractCompat.Columns();
+ field public static final String FILE_ID = "file_id";
+ field public static final String ITALIC = "font_italic";
+ field public static final String RESULT_CODE = "result_code";
+ field public static final int RESULT_CODE_FONT_NOT_FOUND = 1; // 0x1
+ field public static final int RESULT_CODE_FONT_UNAVAILABLE = 2; // 0x2
+ field public static final int RESULT_CODE_MALFORMED_QUERY = 3; // 0x3
+ field public static final int RESULT_CODE_OK = 0; // 0x0
+ field public static final String TTC_INDEX = "font_ttc_index";
+ field public static final String VARIATION_SETTINGS = "font_variation_settings";
+ field public static final String WEIGHT = "font_weight";
+ }
+
+ public static class FontsContractCompat.FontFamilyResult {
+ method public androidx.core.provider.FontsContractCompat.FontInfo![]! getFonts();
+ method public int getStatusCode();
+ field public static final int STATUS_OK = 0; // 0x0
+ field public static final int STATUS_UNEXPECTED_DATA_PROVIDED = 2; // 0x2
+ field public static final int STATUS_WRONG_CERTIFICATES = 1; // 0x1
+ }
+
+ public static class FontsContractCompat.FontInfo {
+ method public int getResultCode();
+ method @IntRange(from=0) public int getTtcIndex();
+ method public android.net.Uri getUri();
+ method @IntRange(from=1, to=1000) public int getWeight();
+ method public boolean isItalic();
+ }
+
+ public static class FontsContractCompat.FontRequestCallback {
+ ctor public FontsContractCompat.FontRequestCallback();
+ method public void onTypefaceRequestFailed(int);
+ method public void onTypefaceRetrieved(android.graphics.Typeface!);
+ field public static final int FAIL_REASON_FONT_LOAD_ERROR = -3; // 0xfffffffd
+ field public static final int FAIL_REASON_FONT_NOT_FOUND = 1; // 0x1
+ field public static final int FAIL_REASON_FONT_UNAVAILABLE = 2; // 0x2
+ field public static final int FAIL_REASON_MALFORMED_QUERY = 3; // 0x3
+ field public static final int FAIL_REASON_PROVIDER_NOT_FOUND = -1; // 0xffffffff
+ field public static final int FAIL_REASON_SECURITY_VIOLATION = -4; // 0xfffffffc
+ field public static final int FAIL_REASON_WRONG_CERTIFICATES = -2; // 0xfffffffe
+ }
+
+}
+
+package androidx.core.telephony.mbms {
+
+ public final class MbmsHelper {
+ method public static CharSequence? getBestNameForService(android.content.Context, android.telephony.mbms.ServiceInfo);
+ }
+
+}
+
+package androidx.core.text {
+
+ public final class BidiFormatter {
+ method public static androidx.core.text.BidiFormatter! getInstance();
+ method public static androidx.core.text.BidiFormatter! getInstance(boolean);
+ method public static androidx.core.text.BidiFormatter! getInstance(java.util.Locale!);
+ method public boolean getStereoReset();
+ method public boolean isRtl(String!);
+ method public boolean isRtl(CharSequence!);
+ method public boolean isRtlContext();
+ method public String! unicodeWrap(String!, androidx.core.text.TextDirectionHeuristicCompat!, boolean);
+ method public CharSequence! unicodeWrap(CharSequence!, androidx.core.text.TextDirectionHeuristicCompat!, boolean);
+ method public String! unicodeWrap(String!, androidx.core.text.TextDirectionHeuristicCompat!);
+ method public CharSequence! unicodeWrap(CharSequence!, androidx.core.text.TextDirectionHeuristicCompat!);
+ method public String! unicodeWrap(String!, boolean);
+ method public CharSequence! unicodeWrap(CharSequence!, boolean);
+ method public String! unicodeWrap(String!);
+ method public CharSequence! unicodeWrap(CharSequence!);
+ }
+
+ public static final class BidiFormatter.Builder {
+ ctor public BidiFormatter.Builder();
+ ctor public BidiFormatter.Builder(boolean);
+ ctor public BidiFormatter.Builder(java.util.Locale!);
+ method public androidx.core.text.BidiFormatter! build();
+ method public androidx.core.text.BidiFormatter.Builder! setTextDirectionHeuristic(androidx.core.text.TextDirectionHeuristicCompat!);
+ method public androidx.core.text.BidiFormatter.Builder! stereoReset(boolean);
+ }
+
+ public final class HtmlCompat {
+ method public static android.text.Spanned fromHtml(String, int);
+ method public static android.text.Spanned fromHtml(String, int, android.text.Html.ImageGetter?, android.text.Html.TagHandler?);
+ method public static String toHtml(android.text.Spanned, int);
+ field public static final int FROM_HTML_MODE_COMPACT = 63; // 0x3f
+ field public static final int FROM_HTML_MODE_LEGACY = 0; // 0x0
+ field public static final int FROM_HTML_OPTION_USE_CSS_COLORS = 256; // 0x100
+ field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_BLOCKQUOTE = 32; // 0x20
+ field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_DIV = 16; // 0x10
+ field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_HEADING = 2; // 0x2
+ field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_LIST = 8; // 0x8
+ field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_LIST_ITEM = 4; // 0x4
+ field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_PARAGRAPH = 1; // 0x1
+ field public static final int TO_HTML_PARAGRAPH_LINES_CONSECUTIVE = 0; // 0x0
+ field public static final int TO_HTML_PARAGRAPH_LINES_INDIVIDUAL = 1; // 0x1
+ }
+
+ public final class ICUCompat {
+ method public static String? maximizeAndGetScript(java.util.Locale!);
+ }
+
+ public class PrecomputedTextCompat implements android.text.Spannable {
+ method public char charAt(int);
+ method public static androidx.core.text.PrecomputedTextCompat! create(CharSequence, androidx.core.text.PrecomputedTextCompat.Params);
+ method @IntRange(from=0) public int getParagraphCount();
+ method @IntRange(from=0) public int getParagraphEnd(@IntRange(from=0) int);
+ method @IntRange(from=0) public int getParagraphStart(@IntRange(from=0) int);
+ method public androidx.core.text.PrecomputedTextCompat.Params getParams();
+ method public int getSpanEnd(Object!);
+ method public int getSpanFlags(Object!);
+ method public int getSpanStart(Object!);
+ method public <T> T![]! getSpans(int, int, Class<T!>!);
+ method @UiThread public static java.util.concurrent.Future<androidx.core.text.PrecomputedTextCompat!>! getTextFuture(CharSequence, androidx.core.text.PrecomputedTextCompat.Params, java.util.concurrent.Executor?);
+ method public int length();
+ method public int nextSpanTransition(int, int, Class!);
+ method public void removeSpan(Object!);
+ method public void setSpan(Object!, int, int, int);
+ method public CharSequence! subSequence(int, int);
+ }
+
+ public static final class PrecomputedTextCompat.Params {
+ ctor @RequiresApi(28) public PrecomputedTextCompat.Params(android.text.PrecomputedText.Params);
+ method @RequiresApi(23) public int getBreakStrategy();
+ method @RequiresApi(23) public int getHyphenationFrequency();
+ method @RequiresApi(18) public android.text.TextDirectionHeuristic? getTextDirection();
+ method public android.text.TextPaint getTextPaint();
+ }
+
+ public static class PrecomputedTextCompat.Params.Builder {
+ ctor public PrecomputedTextCompat.Params.Builder(android.text.TextPaint);
+ method public androidx.core.text.PrecomputedTextCompat.Params build();
+ method @RequiresApi(23) public androidx.core.text.PrecomputedTextCompat.Params.Builder! setBreakStrategy(int);
+ method @RequiresApi(23) public androidx.core.text.PrecomputedTextCompat.Params.Builder! setHyphenationFrequency(int);
+ method @RequiresApi(18) public androidx.core.text.PrecomputedTextCompat.Params.Builder! setTextDirection(android.text.TextDirectionHeuristic);
+ }
+
+ public interface TextDirectionHeuristicCompat {
+ method public boolean isRtl(char[]!, int, int);
+ method public boolean isRtl(CharSequence!, int, int);
+ }
+
+ public final class TextDirectionHeuristicsCompat {
+ field public static final androidx.core.text.TextDirectionHeuristicCompat! ANYRTL_LTR;
+ field public static final androidx.core.text.TextDirectionHeuristicCompat! FIRSTSTRONG_LTR;
+ field public static final androidx.core.text.TextDirectionHeuristicCompat! FIRSTSTRONG_RTL;
+ field public static final androidx.core.text.TextDirectionHeuristicCompat! LOCALE;
+ field public static final androidx.core.text.TextDirectionHeuristicCompat! LTR;
+ field public static final androidx.core.text.TextDirectionHeuristicCompat! RTL;
+ }
+
+ public final class TextUtilsCompat {
+ method public static int getLayoutDirectionFromLocale(java.util.Locale?);
+ method public static String htmlEncode(String);
+ }
+
+}
+
+package androidx.core.text.util {
+
+ public final class LinkifyCompat {
+ method public static boolean addLinks(android.text.Spannable, int);
+ method public static boolean addLinks(android.widget.TextView, int);
+ method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, String?);
+ method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, String?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
+ method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, String?, String![]?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
+ method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?);
+ method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
+ method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?, String![]?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
+ }
+
+}
+
+package androidx.core.util {
+
+ public class AtomicFile {
+ ctor public AtomicFile(java.io.File);
+ method public void delete();
+ method public void failWrite(java.io.FileOutputStream?);
+ method public void finishWrite(java.io.FileOutputStream?);
+ method public java.io.File getBaseFile();
+ method public java.io.FileInputStream openRead() throws java.io.FileNotFoundException;
+ method public byte[] readFully() throws java.io.IOException;
+ method public java.io.FileOutputStream startWrite() throws java.io.IOException;
+ }
+
+ public interface Consumer<T> {
+ method public void accept(T!);
+ }
+
+ public class ObjectsCompat {
+ method public static boolean equals(Object?, Object?);
+ method public static int hash(java.lang.Object!...);
+ method public static int hashCode(Object?);
+ }
+
+ public class Pair<F, S> {
+ ctor public Pair(F?, S?);
+ method public static <A, B> androidx.core.util.Pair<A!,B!> create(A?, B?);
+ field public final F? first;
+ field public final S? second;
+ }
+
+ public final class PatternsCompat {
+ field public static final java.util.regex.Pattern! DOMAIN_NAME;
+ field public static final java.util.regex.Pattern! EMAIL_ADDRESS;
+ field public static final java.util.regex.Pattern! IP_ADDRESS;
+ field public static final java.util.regex.Pattern! WEB_URL;
+ }
+
+ public final class Pools {
+ }
+
+ public static interface Pools.Pool<T> {
+ method public T? acquire();
+ method public boolean release(T);
+ }
+
+ public static class Pools.SimplePool<T> implements androidx.core.util.Pools.Pool<T> {
+ ctor public Pools.SimplePool(int);
+ method public T! acquire();
+ method public boolean release(T);
+ }
+
+ public static class Pools.SynchronizedPool<T> extends androidx.core.util.Pools.SimplePool<T> {
+ ctor public Pools.SynchronizedPool(int);
+ }
+
+ public interface Predicate<T> {
+ method public boolean test(T!);
+ }
+
+ public interface Supplier<T> {
+ method public T! get();
+ }
+
+}
+
+package androidx.core.view {
+
+ public class AccessibilityDelegateCompat {
+ ctor public AccessibilityDelegateCompat();
+ method public boolean dispatchPopulateAccessibilityEvent(android.view.View!, android.view.accessibility.AccessibilityEvent!);
+ method public androidx.core.view.accessibility.AccessibilityNodeProviderCompat! getAccessibilityNodeProvider(android.view.View!);
+ method public void onInitializeAccessibilityEvent(android.view.View!, android.view.accessibility.AccessibilityEvent!);
+ method public void onInitializeAccessibilityNodeInfo(android.view.View!, androidx.core.view.accessibility.AccessibilityNodeInfoCompat!);
+ method public void onPopulateAccessibilityEvent(android.view.View!, android.view.accessibility.AccessibilityEvent!);
+ method public boolean onRequestSendAccessibilityEvent(android.view.ViewGroup!, android.view.View!, android.view.accessibility.AccessibilityEvent!);
+ method public boolean performAccessibilityAction(android.view.View!, int, android.os.Bundle!);
+ method public void sendAccessibilityEvent(android.view.View!, int);
+ method public void sendAccessibilityEventUnchecked(android.view.View!, android.view.accessibility.AccessibilityEvent!);
+ }
+
+ public abstract class ActionProvider {
+ ctor public ActionProvider(android.content.Context!);
+ method public android.content.Context! getContext();
+ method public boolean hasSubMenu();
+ method public boolean isVisible();
+ method public abstract android.view.View! onCreateActionView();
+ method public android.view.View! onCreateActionView(android.view.MenuItem!);
+ method public boolean onPerformDefaultAction();
+ method public void onPrepareSubMenu(android.view.SubMenu!);
+ method public boolean overridesItemVisibility();
+ method public void refreshVisibility();
+ method public void setVisibilityListener(androidx.core.view.ActionProvider.VisibilityListener!);
+ }
+
+ public static interface ActionProvider.VisibilityListener {
+ method public void onActionProviderVisibilityChanged(boolean);
+ }
+
+ public final class DisplayCutoutCompat {
+ ctor public DisplayCutoutCompat(android.graphics.Rect!, java.util.List<android.graphics.Rect!>!);
+ method public java.util.List<android.graphics.Rect!>! getBoundingRects();
+ method public int getSafeInsetBottom();
+ method public int getSafeInsetLeft();
+ method public int getSafeInsetRight();
+ method public int getSafeInsetTop();
+ }
+
+ public final class DragAndDropPermissionsCompat {
+ method public void release();
+ }
+
+ public class DragStartHelper {
+ ctor public DragStartHelper(android.view.View!, androidx.core.view.DragStartHelper.OnDragStartListener!);
+ method public void attach();
+ method public void detach();
+ method public void getTouchPosition(android.graphics.Point!);
+ method public boolean onLongClick(android.view.View!);
+ method public boolean onTouch(android.view.View!, android.view.MotionEvent!);
+ }
+
+ public static interface DragStartHelper.OnDragStartListener {
+ method public boolean onDragStart(android.view.View!, androidx.core.view.DragStartHelper!);
+ }
+
+ public final class GestureDetectorCompat {
+ ctor public GestureDetectorCompat(android.content.Context!, android.view.GestureDetector.OnGestureListener!);
+ ctor public GestureDetectorCompat(android.content.Context!, android.view.GestureDetector.OnGestureListener!, android.os.Handler!);
+ method public boolean isLongpressEnabled();
+ method public boolean onTouchEvent(android.view.MotionEvent!);
+ method public void setIsLongpressEnabled(boolean);
+ method public void setOnDoubleTapListener(android.view.GestureDetector.OnDoubleTapListener!);
+ }
+
+ public final class GravityCompat {
+ method public static void apply(int, int, int, android.graphics.Rect!, android.graphics.Rect!, int);
+ method public static void apply(int, int, int, android.graphics.Rect!, int, int, android.graphics.Rect!, int);
+ method public static void applyDisplay(int, android.graphics.Rect!, android.graphics.Rect!, int);
+ method public static int getAbsoluteGravity(int, int);
+ field public static final int END = 8388613; // 0x800005
+ field public static final int RELATIVE_HORIZONTAL_GRAVITY_MASK = 8388615; // 0x800007
+ field public static final int RELATIVE_LAYOUT_DIRECTION = 8388608; // 0x800000
+ field public static final int START = 8388611; // 0x800003
+ }
+
+ public final class InputDeviceCompat {
+ field public static final int SOURCE_ANY = -256; // 0xffffff00
+ field public static final int SOURCE_CLASS_BUTTON = 1; // 0x1
+ field public static final int SOURCE_CLASS_JOYSTICK = 16; // 0x10
+ field public static final int SOURCE_CLASS_MASK = 255; // 0xff
+ field public static final int SOURCE_CLASS_NONE = 0; // 0x0
+ field public static final int SOURCE_CLASS_POINTER = 2; // 0x2
+ field public static final int SOURCE_CLASS_POSITION = 8; // 0x8
+ field public static final int SOURCE_CLASS_TRACKBALL = 4; // 0x4
+ field public static final int SOURCE_DPAD = 513; // 0x201
+ field public static final int SOURCE_GAMEPAD = 1025; // 0x401
+ field public static final int SOURCE_HDMI = 33554433; // 0x2000001
+ field public static final int SOURCE_JOYSTICK = 16777232; // 0x1000010
+ field public static final int SOURCE_KEYBOARD = 257; // 0x101
+ field public static final int SOURCE_MOUSE = 8194; // 0x2002
+ field public static final int SOURCE_ROTARY_ENCODER = 4194304; // 0x400000
+ field public static final int SOURCE_STYLUS = 16386; // 0x4002
+ field public static final int SOURCE_TOUCHPAD = 1048584; // 0x100008
+ field public static final int SOURCE_TOUCHSCREEN = 4098; // 0x1002
+ field public static final int SOURCE_TOUCH_NAVIGATION = 2097152; // 0x200000
+ field public static final int SOURCE_TRACKBALL = 65540; // 0x10004
+ field public static final int SOURCE_UNKNOWN = 0; // 0x0
+ }
+
+ public final class LayoutInflaterCompat {
+ method @Deprecated public static androidx.core.view.LayoutInflaterFactory! getFactory(android.view.LayoutInflater!);
+ method @Deprecated public static void setFactory(android.view.LayoutInflater, androidx.core.view.LayoutInflaterFactory);
+ method public static void setFactory2(android.view.LayoutInflater, android.view.LayoutInflater.Factory2);
+ }
+
+ @Deprecated public interface LayoutInflaterFactory {
+ method @Deprecated public android.view.View! onCreateView(android.view.View!, String!, android.content.Context!, android.util.AttributeSet!);
+ }
+
+ public final class MarginLayoutParamsCompat {
+ method public static int getLayoutDirection(android.view.ViewGroup.MarginLayoutParams!);
+ method public static int getMarginEnd(android.view.ViewGroup.MarginLayoutParams!);
+ method public static int getMarginStart(android.view.ViewGroup.MarginLayoutParams!);
+ method public static boolean isMarginRelative(android.view.ViewGroup.MarginLayoutParams!);
+ method public static void resolveLayoutDirection(android.view.ViewGroup.MarginLayoutParams!, int);
+ method public static void setLayoutDirection(android.view.ViewGroup.MarginLayoutParams!, int);
+ method public static void setMarginEnd(android.view.ViewGroup.MarginLayoutParams!, int);
+ method public static void setMarginStart(android.view.ViewGroup.MarginLayoutParams!, int);
+ }
+
+ public final class MenuCompat {
+ method public static void setGroupDividerEnabled(android.view.Menu!, boolean);
+ method @Deprecated public static void setShowAsAction(android.view.MenuItem!, int);
+ }
+
+ public final class MenuItemCompat {
+ method @Deprecated public static boolean collapseActionView(android.view.MenuItem!);
+ method @Deprecated public static boolean expandActionView(android.view.MenuItem!);
+ method public static androidx.core.view.ActionProvider! getActionProvider(android.view.MenuItem!);
+ method @Deprecated public static android.view.View! getActionView(android.view.MenuItem!);
+ method public static int getAlphabeticModifiers(android.view.MenuItem!);
+ method public static CharSequence! getContentDescription(android.view.MenuItem!);
+ method public static android.content.res.ColorStateList! getIconTintList(android.view.MenuItem!);
+ method public static android.graphics.PorterDuff.Mode! getIconTintMode(android.view.MenuItem!);
+ method public static int getNumericModifiers(android.view.MenuItem!);
+ method public static CharSequence! getTooltipText(android.view.MenuItem!);
+ method @Deprecated public static boolean isActionViewExpanded(android.view.MenuItem!);
+ method public static android.view.MenuItem! setActionProvider(android.view.MenuItem!, androidx.core.view.ActionProvider!);
+ method @Deprecated public static android.view.MenuItem! setActionView(android.view.MenuItem!, android.view.View!);
+ method @Deprecated public static android.view.MenuItem! setActionView(android.view.MenuItem!, int);
+ method public static void setAlphabeticShortcut(android.view.MenuItem!, char, int);
+ method public static void setContentDescription(android.view.MenuItem!, CharSequence!);
+ method public static void setIconTintList(android.view.MenuItem!, android.content.res.ColorStateList!);
+ method public static void setIconTintMode(android.view.MenuItem!, android.graphics.PorterDuff.Mode!);
+ method public static void setNumericShortcut(android.view.MenuItem!, char, int);
+ method @Deprecated public static android.view.MenuItem! setOnActionExpandListener(android.view.MenuItem!, androidx.core.view.MenuItemCompat.OnActionExpandListener!);
+ method public static void setShortcut(android.view.MenuItem!, char, char, int, int);
+ method @Deprecated public static void setShowAsAction(android.view.MenuItem!, int);
+ method public static void setTooltipText(android.view.MenuItem!, CharSequence!);
+ field @Deprecated public static final int SHOW_AS_ACTION_ALWAYS = 2; // 0x2
+ field @Deprecated public static final int SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW = 8; // 0x8
+ field @Deprecated public static final int SHOW_AS_ACTION_IF_ROOM = 1; // 0x1
+ field @Deprecated public static final int SHOW_AS_ACTION_NEVER = 0; // 0x0
+ field @Deprecated public static final int SHOW_AS_ACTION_WITH_TEXT = 4; // 0x4
+ }
+
+ @Deprecated public static interface MenuItemCompat.OnActionExpandListener {
+ method @Deprecated public boolean onMenuItemActionCollapse(android.view.MenuItem!);
+ method @Deprecated public boolean onMenuItemActionExpand(android.view.MenuItem!);
+ }
+
+ public final class MotionEventCompat {
+ method @Deprecated public static int findPointerIndex(android.view.MotionEvent!, int);
+ method @Deprecated public static int getActionIndex(android.view.MotionEvent!);
+ method @Deprecated public static int getActionMasked(android.view.MotionEvent!);
+ method @Deprecated public static float getAxisValue(android.view.MotionEvent!, int);
+ method @Deprecated public static float getAxisValue(android.view.MotionEvent!, int, int);
+ method @Deprecated public static int getButtonState(android.view.MotionEvent!);
+ method @Deprecated public static int getPointerCount(android.view.MotionEvent!);
+ method @Deprecated public static int getPointerId(android.view.MotionEvent!, int);
+ method @Deprecated public static int getSource(android.view.MotionEvent!);
+ method @Deprecated public static float getX(android.view.MotionEvent!, int);
+ method @Deprecated public static float getY(android.view.MotionEvent!, int);
+ method public static boolean isFromSource(android.view.MotionEvent!, int);
+ field @Deprecated public static final int ACTION_HOVER_ENTER = 9; // 0x9
+ field @Deprecated public static final int ACTION_HOVER_EXIT = 10; // 0xa
+ field @Deprecated public static final int ACTION_HOVER_MOVE = 7; // 0x7
+ field @Deprecated public static final int ACTION_MASK = 255; // 0xff
+ field @Deprecated public static final int ACTION_POINTER_DOWN = 5; // 0x5
+ field @Deprecated public static final int ACTION_POINTER_INDEX_MASK = 65280; // 0xff00
+ field @Deprecated public static final int ACTION_POINTER_INDEX_SHIFT = 8; // 0x8
+ field @Deprecated public static final int ACTION_POINTER_UP = 6; // 0x6
+ field @Deprecated public static final int ACTION_SCROLL = 8; // 0x8
+ field @Deprecated public static final int AXIS_BRAKE = 23; // 0x17
+ field @Deprecated public static final int AXIS_DISTANCE = 24; // 0x18
+ field @Deprecated public static final int AXIS_GAS = 22; // 0x16
+ field @Deprecated public static final int AXIS_GENERIC_1 = 32; // 0x20
+ field @Deprecated public static final int AXIS_GENERIC_10 = 41; // 0x29
+ field @Deprecated public static final int AXIS_GENERIC_11 = 42; // 0x2a
+ field @Deprecated public static final int AXIS_GENERIC_12 = 43; // 0x2b
+ field @Deprecated public static final int AXIS_GENERIC_13 = 44; // 0x2c
+ field @Deprecated public static final int AXIS_GENERIC_14 = 45; // 0x2d
+ field @Deprecated public static final int AXIS_GENERIC_15 = 46; // 0x2e
+ field @Deprecated public static final int AXIS_GENERIC_16 = 47; // 0x2f
+ field @Deprecated public static final int AXIS_GENERIC_2 = 33; // 0x21
+ field @Deprecated public static final int AXIS_GENERIC_3 = 34; // 0x22
+ field @Deprecated public static final int AXIS_GENERIC_4 = 35; // 0x23
+ field @Deprecated public static final int AXIS_GENERIC_5 = 36; // 0x24
+ field @Deprecated public static final int AXIS_GENERIC_6 = 37; // 0x25
+ field @Deprecated public static final int AXIS_GENERIC_7 = 38; // 0x26
+ field @Deprecated public static final int AXIS_GENERIC_8 = 39; // 0x27
+ field @Deprecated public static final int AXIS_GENERIC_9 = 40; // 0x28
+ field @Deprecated public static final int AXIS_HAT_X = 15; // 0xf
+ field @Deprecated public static final int AXIS_HAT_Y = 16; // 0x10
+ field @Deprecated public static final int AXIS_HSCROLL = 10; // 0xa
+ field @Deprecated public static final int AXIS_LTRIGGER = 17; // 0x11
+ field @Deprecated public static final int AXIS_ORIENTATION = 8; // 0x8
+ field @Deprecated public static final int AXIS_PRESSURE = 2; // 0x2
+ field public static final int AXIS_RELATIVE_X = 27; // 0x1b
+ field public static final int AXIS_RELATIVE_Y = 28; // 0x1c
+ field @Deprecated public static final int AXIS_RTRIGGER = 18; // 0x12
+ field @Deprecated public static final int AXIS_RUDDER = 20; // 0x14
+ field @Deprecated public static final int AXIS_RX = 12; // 0xc
+ field @Deprecated public static final int AXIS_RY = 13; // 0xd
+ field @Deprecated public static final int AXIS_RZ = 14; // 0xe
+ field public static final int AXIS_SCROLL = 26; // 0x1a
+ field @Deprecated public static final int AXIS_SIZE = 3; // 0x3
+ field @Deprecated public static final int AXIS_THROTTLE = 19; // 0x13
+ field @Deprecated public static final int AXIS_TILT = 25; // 0x19
+ field @Deprecated public static final int AXIS_TOOL_MAJOR = 6; // 0x6
+ field @Deprecated public static final int AXIS_TOOL_MINOR = 7; // 0x7
+ field @Deprecated public static final int AXIS_TOUCH_MAJOR = 4; // 0x4
+ field @Deprecated public static final int AXIS_TOUCH_MINOR = 5; // 0x5
+ field @Deprecated public static final int AXIS_VSCROLL = 9; // 0x9
+ field @Deprecated public static final int AXIS_WHEEL = 21; // 0x15
+ field @Deprecated public static final int AXIS_X = 0; // 0x0
+ field @Deprecated public static final int AXIS_Y = 1; // 0x1
+ field @Deprecated public static final int AXIS_Z = 11; // 0xb
+ field @Deprecated public static final int BUTTON_PRIMARY = 1; // 0x1
+ }
+
+ public interface NestedScrollingChild {
+ method public boolean dispatchNestedFling(float, float, boolean);
+ method public boolean dispatchNestedPreFling(float, float);
+ method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?);
+ method public boolean dispatchNestedScroll(int, int, int, int, int[]?);
+ method public boolean hasNestedScrollingParent();
+ method public boolean isNestedScrollingEnabled();
+ method public void setNestedScrollingEnabled(boolean);
+ method public boolean startNestedScroll(int);
+ method public void stopNestedScroll();
+ }
+
+ public interface NestedScrollingChild2 extends androidx.core.view.NestedScrollingChild {
+ method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?, int);
+ method public boolean dispatchNestedScroll(int, int, int, int, int[]?, int);
+ method public boolean hasNestedScrollingParent(int);
+ method public boolean startNestedScroll(int, int);
+ method public void stopNestedScroll(int);
+ }
+
+ public interface NestedScrollingChild3 extends androidx.core.view.NestedScrollingChild2 {
+ method public void dispatchNestedScroll(int, int, int, int, int[]?, int, int[]);
+ }
+
+ public class NestedScrollingChildHelper {
+ ctor public NestedScrollingChildHelper(android.view.View);
+ method public boolean dispatchNestedFling(float, float, boolean);
+ method public boolean dispatchNestedPreFling(float, float);
+ method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?);
+ method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?, int);
+ method public boolean dispatchNestedScroll(int, int, int, int, int[]?);
+ method public boolean dispatchNestedScroll(int, int, int, int, int[]?, int);
+ method public void dispatchNestedScroll(int, int, int, int, int[]?, int, int[]?);
+ method public boolean hasNestedScrollingParent();
+ method public boolean hasNestedScrollingParent(int);
+ method public boolean isNestedScrollingEnabled();
+ method public void onDetachedFromWindow();
+ method public void onStopNestedScroll(android.view.View);
+ method public void setNestedScrollingEnabled(boolean);
+ method public boolean startNestedScroll(int);
+ method public boolean startNestedScroll(int, int);
+ method public void stopNestedScroll();
+ method public void stopNestedScroll(int);
+ }
+
+ public interface NestedScrollingParent {
+ method public int getNestedScrollAxes();
+ method public boolean onNestedFling(android.view.View, float, float, boolean);
+ method public boolean onNestedPreFling(android.view.View, float, float);
+ method public void onNestedPreScroll(android.view.View, int, int, int[]);
+ method public void onNestedScroll(android.view.View, int, int, int, int);
+ method public void onNestedScrollAccepted(android.view.View, android.view.View, int);
+ method public boolean onStartNestedScroll(android.view.View, android.view.View, int);
+ method public void onStopNestedScroll(android.view.View);
+ }
+
+ public interface NestedScrollingParent2 extends androidx.core.view.NestedScrollingParent {
+ method public void onNestedPreScroll(android.view.View, int, int, int[], int);
+ method public void onNestedScroll(android.view.View, int, int, int, int, int);
+ method public void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
+ method public boolean onStartNestedScroll(android.view.View, android.view.View, int, int);
+ method public void onStopNestedScroll(android.view.View, int);
+ }
+
+ public interface NestedScrollingParent3 extends androidx.core.view.NestedScrollingParent2 {
+ method public void onNestedScroll(android.view.View, int, int, int, int, int, int[]);
+ }
+
+ public class NestedScrollingParentHelper {
+ ctor public NestedScrollingParentHelper(android.view.ViewGroup);
+ method public int getNestedScrollAxes();
+ method public void onNestedScrollAccepted(android.view.View, android.view.View, int);
+ method public void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
+ method public void onStopNestedScroll(android.view.View);
+ method public void onStopNestedScroll(android.view.View, int);
+ }
+
+ public interface OnApplyWindowInsetsListener {
+ method public androidx.core.view.WindowInsetsCompat! onApplyWindowInsets(android.view.View!, androidx.core.view.WindowInsetsCompat!);
+ }
+
+ public final class OneShotPreDrawListener implements android.view.View.OnAttachStateChangeListener android.view.ViewTreeObserver.OnPreDrawListener {
+ method public static androidx.core.view.OneShotPreDrawListener add(android.view.View, Runnable);
+ method public boolean onPreDraw();
+ method public void onViewAttachedToWindow(android.view.View!);
+ method public void onViewDetachedFromWindow(android.view.View!);
+ method public void removeListener();
+ }
+
+ public final class PointerIconCompat {
+ method public static androidx.core.view.PointerIconCompat! create(android.graphics.Bitmap!, float, float);
+ method public static androidx.core.view.PointerIconCompat! getSystemIcon(android.content.Context!, int);
+ method public static androidx.core.view.PointerIconCompat! load(android.content.res.Resources!, int);
+ field public static final int TYPE_ALIAS = 1010; // 0x3f2
+ field public static final int TYPE_ALL_SCROLL = 1013; // 0x3f5
+ field public static final int TYPE_ARROW = 1000; // 0x3e8
+ field public static final int TYPE_CELL = 1006; // 0x3ee
+ field public static final int TYPE_CONTEXT_MENU = 1001; // 0x3e9
+ field public static final int TYPE_COPY = 1011; // 0x3f3
+ field public static final int TYPE_CROSSHAIR = 1007; // 0x3ef
+ field public static final int TYPE_DEFAULT = 1000; // 0x3e8
+ field public static final int TYPE_GRAB = 1020; // 0x3fc
+ field public static final int TYPE_GRABBING = 1021; // 0x3fd
+ field public static final int TYPE_HAND = 1002; // 0x3ea
+ field public static final int TYPE_HELP = 1003; // 0x3eb
+ field public static final int TYPE_HORIZONTAL_DOUBLE_ARROW = 1014; // 0x3f6
+ field public static final int TYPE_NO_DROP = 1012; // 0x3f4
+ field public static final int TYPE_NULL = 0; // 0x0
+ field public static final int TYPE_TEXT = 1008; // 0x3f0
+ field public static final int TYPE_TOP_LEFT_DIAGONAL_DOUBLE_ARROW = 1017; // 0x3f9
+ field public static final int TYPE_TOP_RIGHT_DIAGONAL_DOUBLE_ARROW = 1016; // 0x3f8
+ field public static final int TYPE_VERTICAL_DOUBLE_ARROW = 1015; // 0x3f7
+ field public static final int TYPE_VERTICAL_TEXT = 1009; // 0x3f1
+ field public static final int TYPE_WAIT = 1004; // 0x3ec
+ field public static final int TYPE_ZOOM_IN = 1018; // 0x3fa
+ field public static final int TYPE_ZOOM_OUT = 1019; // 0x3fb
+ }
+
+ public final class ScaleGestureDetectorCompat {
+ method @Deprecated public static boolean isQuickScaleEnabled(Object!);
+ method public static boolean isQuickScaleEnabled(android.view.ScaleGestureDetector!);
+ method @Deprecated public static void setQuickScaleEnabled(Object!, boolean);
+ method public static void setQuickScaleEnabled(android.view.ScaleGestureDetector!, boolean);
+ }
+
+ public interface ScrollingView {
+ method public int computeHorizontalScrollExtent();
+ method public int computeHorizontalScrollOffset();
+ method public int computeHorizontalScrollRange();
+ method public int computeVerticalScrollExtent();
+ method public int computeVerticalScrollOffset();
+ method public int computeVerticalScrollRange();
+ }
+
+ public interface TintableBackgroundView {
+ method public android.content.res.ColorStateList? getSupportBackgroundTintList();
+ method public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+ method public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+ method public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+ }
+
+ @Deprecated public final class VelocityTrackerCompat {
+ method @Deprecated public static float getXVelocity(android.view.VelocityTracker!, int);
+ method @Deprecated public static float getYVelocity(android.view.VelocityTracker!, int);
+ }
+
+ public class ViewCompat {
+ ctor protected ViewCompat();
+ method public static int addAccessibilityAction(android.view.View, CharSequence, androidx.core.view.accessibility.AccessibilityViewCommand);
+ method public static void addKeyboardNavigationClusters(android.view.View, java.util.Collection<android.view.View!>, int);
+ method public static void addOnUnhandledKeyEventListener(android.view.View, androidx.core.view.ViewCompat.OnUnhandledKeyEventListenerCompat);
+ method public static androidx.core.view.ViewPropertyAnimatorCompat animate(android.view.View);
+ method @Deprecated public static boolean canScrollHorizontally(android.view.View!, int);
+ method @Deprecated public static boolean canScrollVertically(android.view.View!, int);
+ method public static void cancelDragAndDrop(android.view.View);
+ method @Deprecated public static int combineMeasuredStates(int, int);
+ method public static androidx.core.view.WindowInsetsCompat! dispatchApplyWindowInsets(android.view.View, androidx.core.view.WindowInsetsCompat!);
+ method public static void dispatchFinishTemporaryDetach(android.view.View);
+ method public static boolean dispatchNestedFling(android.view.View, float, float, boolean);
+ method public static boolean dispatchNestedPreFling(android.view.View, float, float);
+ method public static boolean dispatchNestedPreScroll(android.view.View, int, int, int[]?, int[]?);
+ method public static boolean dispatchNestedPreScroll(android.view.View, int, int, int[]?, int[]?, int);
+ method public static boolean dispatchNestedScroll(android.view.View, int, int, int, int, int[]?);
+ method public static void dispatchNestedScroll(android.view.View, int, int, int, int, int[]?, int, int[]);
+ method public static boolean dispatchNestedScroll(android.view.View, int, int, int, int, int[]?, int);
+ method public static void dispatchStartTemporaryDetach(android.view.View);
+ method public static void enableAccessibleClickableSpanSupport(android.view.View!);
+ method public static int generateViewId();
+ method public static androidx.core.view.AccessibilityDelegateCompat? getAccessibilityDelegate(android.view.View);
+ method public static int getAccessibilityLiveRegion(android.view.View);
+ method public static androidx.core.view.accessibility.AccessibilityNodeProviderCompat! getAccessibilityNodeProvider(android.view.View);
+ method @UiThread public static CharSequence! getAccessibilityPaneTitle(android.view.View!);
+ method @Deprecated public static float getAlpha(android.view.View!);
+ method public static android.content.res.ColorStateList! getBackgroundTintList(android.view.View);
+ method public static android.graphics.PorterDuff.Mode! getBackgroundTintMode(android.view.View);
+ method public static android.graphics.Rect? getClipBounds(android.view.View);
+ method public static android.view.Display? getDisplay(android.view.View);
+ method public static float getElevation(android.view.View);
+ method public static boolean getFitsSystemWindows(android.view.View);
+ method public static int getImportantForAccessibility(android.view.View);
+ method public static int getImportantForAutofill(android.view.View);
+ method public static int getLabelFor(android.view.View);
+ method @Deprecated public static int getLayerType(android.view.View!);
+ method public static int getLayoutDirection(android.view.View);
+ method @Deprecated public static android.graphics.Matrix? getMatrix(android.view.View!);
+ method @Deprecated public static int getMeasuredHeightAndState(android.view.View!);
+ method @Deprecated public static int getMeasuredState(android.view.View!);
+ method @Deprecated public static int getMeasuredWidthAndState(android.view.View!);
+ method public static int getMinimumHeight(android.view.View);
+ method public static int getMinimumWidth(android.view.View);
+ method public static int getNextClusterForwardId(android.view.View);
+ method @Deprecated public static int getOverScrollMode(android.view.View!);
+ method @Px public static int getPaddingEnd(android.view.View);
+ method @Px public static int getPaddingStart(android.view.View);
+ method public static android.view.ViewParent! getParentForAccessibility(android.view.View);
+ method @Deprecated public static float getPivotX(android.view.View!);
+ method @Deprecated public static float getPivotY(android.view.View!);
+ method @Deprecated public static float getRotation(android.view.View!);
+ method @Deprecated public static float getRotationX(android.view.View!);
+ method @Deprecated public static float getRotationY(android.view.View!);
+ method @Deprecated public static float getScaleX(android.view.View!);
+ method @Deprecated public static float getScaleY(android.view.View!);
+ method public static int getScrollIndicators(android.view.View);
+ method public static java.util.List<android.graphics.Rect!> getSystemGestureExclusionRects(android.view.View);
+ method public static String? getTransitionName(android.view.View);
+ method @Deprecated public static float getTranslationX(android.view.View!);
+ method @Deprecated public static float getTranslationY(android.view.View!);
+ method public static float getTranslationZ(android.view.View);
+ method public static int getWindowSystemUiVisibility(android.view.View);
+ method @Deprecated public static float getX(android.view.View!);
+ method @Deprecated public static float getY(android.view.View!);
+ method public static float getZ(android.view.View);
+ method public static boolean hasAccessibilityDelegate(android.view.View);
+ method public static boolean hasExplicitFocusable(android.view.View);
+ method public static boolean hasNestedScrollingParent(android.view.View);
+ method public static boolean hasNestedScrollingParent(android.view.View, int);
+ method public static boolean hasOnClickListeners(android.view.View);
+ method public static boolean hasOverlappingRendering(android.view.View);
+ method public static boolean hasTransientState(android.view.View);
+ method @UiThread public static boolean isAccessibilityHeading(android.view.View!);
+ method public static boolean isAttachedToWindow(android.view.View);
+ method public static boolean isFocusedByDefault(android.view.View);
+ method public static boolean isImportantForAccessibility(android.view.View);
+ method public static boolean isImportantForAutofill(android.view.View);
+ method public static boolean isInLayout(android.view.View);
+ method public static boolean isKeyboardNavigationCluster(android.view.View);
+ method public static boolean isLaidOut(android.view.View);
+ method public static boolean isLayoutDirectionResolved(android.view.View);
+ method public static boolean isNestedScrollingEnabled(android.view.View);
+ method @Deprecated public static boolean isOpaque(android.view.View!);
+ method public static boolean isPaddingRelative(android.view.View);
+ method @UiThread public static boolean isScreenReaderFocusable(android.view.View!);
+ method @Deprecated public static void jumpDrawablesToCurrentState(android.view.View!);
+ method public static android.view.View! keyboardNavigationClusterSearch(android.view.View, android.view.View!, int);
+ method public static void offsetLeftAndRight(android.view.View, int);
+ method public static void offsetTopAndBottom(android.view.View, int);
+ method public static androidx.core.view.WindowInsetsCompat! onApplyWindowInsets(android.view.View, androidx.core.view.WindowInsetsCompat!);
+ method @Deprecated public static void onInitializeAccessibilityEvent(android.view.View!, android.view.accessibility.AccessibilityEvent!);
+ method public static void onInitializeAccessibilityNodeInfo(android.view.View, androidx.core.view.accessibility.AccessibilityNodeInfoCompat!);
+ method @Deprecated public static void onPopulateAccessibilityEvent(android.view.View!, android.view.accessibility.AccessibilityEvent!);
+ method public static boolean performAccessibilityAction(android.view.View, int, android.os.Bundle!);
+ method public static void postInvalidateOnAnimation(android.view.View);
+ method public static void postInvalidateOnAnimation(android.view.View, int, int, int, int);
+ method public static void postOnAnimation(android.view.View, Runnable!);
+ method public static void postOnAnimationDelayed(android.view.View, Runnable!, long);
+ method public static void removeAccessibilityAction(android.view.View, int);
+ method public static void removeOnUnhandledKeyEventListener(android.view.View, androidx.core.view.ViewCompat.OnUnhandledKeyEventListenerCompat);
+ method public static void replaceAccessibilityAction(android.view.View, androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat, CharSequence?, androidx.core.view.accessibility.AccessibilityViewCommand?);
+ method public static void requestApplyInsets(android.view.View);
+ method public static <T extends android.view.View> T requireViewById(android.view.View, @IdRes int);
+ method @Deprecated public static int resolveSizeAndState(int, int, int);
+ method public static boolean restoreDefaultFocus(android.view.View);
+ method public static void setAccessibilityDelegate(android.view.View, androidx.core.view.AccessibilityDelegateCompat!);
+ method @UiThread public static void setAccessibilityHeading(android.view.View!, boolean);
+ method public static void setAccessibilityLiveRegion(android.view.View, int);
+ method @UiThread public static void setAccessibilityPaneTitle(android.view.View!, CharSequence!);
+ method @Deprecated public static void setActivated(android.view.View!, boolean);
+ method @Deprecated public static void setAlpha(android.view.View!, @FloatRange(from=0.0, to=1.0) float);
+ method public static void setAutofillHints(android.view.View, java.lang.String!...);
+ method public static void setBackground(android.view.View, android.graphics.drawable.Drawable?);
+ method public static void setBackgroundTintList(android.view.View, android.content.res.ColorStateList!);
+ method public static void setBackgroundTintMode(android.view.View, android.graphics.PorterDuff.Mode!);
+ method @Deprecated public static void setChildrenDrawingOrderEnabled(android.view.ViewGroup!, boolean);
+ method public static void setClipBounds(android.view.View, android.graphics.Rect!);
+ method public static void setElevation(android.view.View, float);
+ method @Deprecated public static void setFitsSystemWindows(android.view.View!, boolean);
+ method public static void setFocusedByDefault(android.view.View, boolean);
+ method public static void setHasTransientState(android.view.View, boolean);
+ method public static void setImportantForAccessibility(android.view.View, int);
+ method public static void setImportantForAutofill(android.view.View, int);
+ method public static void setKeyboardNavigationCluster(android.view.View, boolean);
+ method public static void setLabelFor(android.view.View, @IdRes int);
+ method public static void setLayerPaint(android.view.View, android.graphics.Paint!);
+ method @Deprecated public static void setLayerType(android.view.View!, int, android.graphics.Paint!);
+ method public static void setLayoutDirection(android.view.View, int);
+ method public static void setNestedScrollingEnabled(android.view.View, boolean);
+ method public static void setNextClusterForwardId(android.view.View, int);
+ method public static void setOnApplyWindowInsetsListener(android.view.View, androidx.core.view.OnApplyWindowInsetsListener!);
+ method @Deprecated public static void setOverScrollMode(android.view.View!, int);
+ method public static void setPaddingRelative(android.view.View, @Px int, @Px int, @Px int, @Px int);
+ method @Deprecated public static void setPivotX(android.view.View!, float);
+ method @Deprecated public static void setPivotY(android.view.View!, float);
+ method public static void setPointerIcon(android.view.View, androidx.core.view.PointerIconCompat!);
+ method @Deprecated public static void setRotation(android.view.View!, float);
+ method @Deprecated public static void setRotationX(android.view.View!, float);
+ method @Deprecated public static void setRotationY(android.view.View!, float);
+ method @Deprecated public static void setSaveFromParentEnabled(android.view.View!, boolean);
+ method @Deprecated public static void setScaleX(android.view.View!, float);
+ method @Deprecated public static void setScaleY(android.view.View!, float);
+ method @UiThread public static void setScreenReaderFocusable(android.view.View!, boolean);
+ method public static void setScrollIndicators(android.view.View, int);
+ method public static void setScrollIndicators(android.view.View, int, int);
+ method public static void setSystemGestureExclusionRects(android.view.View, java.util.List<android.graphics.Rect!>);
+ method public static void setTooltipText(android.view.View, CharSequence?);
+ method public static void setTransitionName(android.view.View, String!);
+ method @Deprecated public static void setTranslationX(android.view.View!, float);
+ method @Deprecated public static void setTranslationY(android.view.View!, float);
+ method public static void setTranslationZ(android.view.View, float);
+ method @Deprecated public static void setX(android.view.View!, float);
+ method @Deprecated public static void setY(android.view.View!, float);
+ method public static void setZ(android.view.View, float);
+ method public static boolean startDragAndDrop(android.view.View, android.content.ClipData!, android.view.View.DragShadowBuilder!, Object!, int);
+ method public static boolean startNestedScroll(android.view.View, int);
+ method public static boolean startNestedScroll(android.view.View, int, int);
+ method public static void stopNestedScroll(android.view.View);
+ method public static void stopNestedScroll(android.view.View, int);
+ method public static void updateDragShadow(android.view.View, android.view.View.DragShadowBuilder!);
+ field public static final int ACCESSIBILITY_LIVE_REGION_ASSERTIVE = 2; // 0x2
+ field public static final int ACCESSIBILITY_LIVE_REGION_NONE = 0; // 0x0
+ field public static final int ACCESSIBILITY_LIVE_REGION_POLITE = 1; // 0x1
+ field public static final int IMPORTANT_FOR_ACCESSIBILITY_AUTO = 0; // 0x0
+ field public static final int IMPORTANT_FOR_ACCESSIBILITY_NO = 2; // 0x2
+ field public static final int IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS = 4; // 0x4
+ field public static final int IMPORTANT_FOR_ACCESSIBILITY_YES = 1; // 0x1
+ field @Deprecated public static final int LAYER_TYPE_HARDWARE = 2; // 0x2
+ field @Deprecated public static final int LAYER_TYPE_NONE = 0; // 0x0
+ field @Deprecated public static final int LAYER_TYPE_SOFTWARE = 1; // 0x1
+ field public static final int LAYOUT_DIRECTION_INHERIT = 2; // 0x2
+ field public static final int LAYOUT_DIRECTION_LOCALE = 3; // 0x3
+ field public static final int LAYOUT_DIRECTION_LTR = 0; // 0x0
+ field public static final int LAYOUT_DIRECTION_RTL = 1; // 0x1
+ field @Deprecated public static final int MEASURED_HEIGHT_STATE_SHIFT = 16; // 0x10
+ field @Deprecated public static final int MEASURED_SIZE_MASK = 16777215; // 0xffffff
+ field @Deprecated public static final int MEASURED_STATE_MASK = -16777216; // 0xff000000
+ field @Deprecated public static final int MEASURED_STATE_TOO_SMALL = 16777216; // 0x1000000
+ field @Deprecated public static final int OVER_SCROLL_ALWAYS = 0; // 0x0
+ field @Deprecated public static final int OVER_SCROLL_IF_CONTENT_SCROLLS = 1; // 0x1
+ field @Deprecated public static final int OVER_SCROLL_NEVER = 2; // 0x2
+ field public static final int SCROLL_AXIS_HORIZONTAL = 1; // 0x1
+ field public static final int SCROLL_AXIS_NONE = 0; // 0x0
+ field public static final int SCROLL_AXIS_VERTICAL = 2; // 0x2
+ field public static final int SCROLL_INDICATOR_BOTTOM = 2; // 0x2
+ field public static final int SCROLL_INDICATOR_END = 32; // 0x20
+ field public static final int SCROLL_INDICATOR_LEFT = 4; // 0x4
+ field public static final int SCROLL_INDICATOR_RIGHT = 8; // 0x8
+ field public static final int SCROLL_INDICATOR_START = 16; // 0x10
+ field public static final int SCROLL_INDICATOR_TOP = 1; // 0x1
+ field public static final int TYPE_NON_TOUCH = 1; // 0x1
+ field public static final int TYPE_TOUCH = 0; // 0x0
+ }
+
+ public static interface ViewCompat.OnUnhandledKeyEventListenerCompat {
+ method public boolean onUnhandledKeyEvent(android.view.View!, android.view.KeyEvent!);
+ }
+
+ public final class ViewConfigurationCompat {
+ method public static float getScaledHorizontalScrollFactor(android.view.ViewConfiguration, android.content.Context);
+ method public static int getScaledHoverSlop(android.view.ViewConfiguration!);
+ method @Deprecated public static int getScaledPagingTouchSlop(android.view.ViewConfiguration!);
+ method public static float getScaledVerticalScrollFactor(android.view.ViewConfiguration, android.content.Context);
+ method @Deprecated public static boolean hasPermanentMenuKey(android.view.ViewConfiguration!);
+ method public static boolean shouldShowMenuShortcutsWhenKeyboardPresent(android.view.ViewConfiguration!, android.content.Context);
+ }
+
+ public final class ViewGroupCompat {
+ method public static int getLayoutMode(android.view.ViewGroup);
+ method public static int getNestedScrollAxes(android.view.ViewGroup);
+ method public static boolean isTransitionGroup(android.view.ViewGroup);
+ method @Deprecated public static boolean onRequestSendAccessibilityEvent(android.view.ViewGroup!, android.view.View!, android.view.accessibility.AccessibilityEvent!);
+ method public static void setLayoutMode(android.view.ViewGroup, int);
+ method @Deprecated public static void setMotionEventSplittingEnabled(android.view.ViewGroup!, boolean);
+ method public static void setTransitionGroup(android.view.ViewGroup, boolean);
+ field public static final int LAYOUT_MODE_CLIP_BOUNDS = 0; // 0x0
+ field public static final int LAYOUT_MODE_OPTICAL_BOUNDS = 1; // 0x1
+ }
+
+ public final class ViewParentCompat {
+ method public static void notifySubtreeAccessibilityStateChanged(android.view.ViewParent!, android.view.View!, android.view.View!, int);
+ method public static boolean onNestedFling(android.view.ViewParent!, android.view.View!, float, float, boolean);
+ method public static boolean onNestedPreFling(android.view.ViewParent!, android.view.View!, float, float);
+ method public static void onNestedPreScroll(android.view.ViewParent!, android.view.View!, int, int, int[]!);
+ method public static void onNestedPreScroll(android.view.ViewParent!, android.view.View!, int, int, int[]!, int);
+ method public static void onNestedScroll(android.view.ViewParent!, android.view.View!, int, int, int, int);
+ method public static void onNestedScroll(android.view.ViewParent!, android.view.View!, int, int, int, int, int);
+ method public static void onNestedScroll(android.view.ViewParent!, android.view.View!, int, int, int, int, int, int[]);
+ method public static void onNestedScrollAccepted(android.view.ViewParent!, android.view.View!, android.view.View!, int);
+ method public static void onNestedScrollAccepted(android.view.ViewParent!, android.view.View!, android.view.View!, int, int);
+ method public static boolean onStartNestedScroll(android.view.ViewParent!, android.view.View!, android.view.View!, int);
+ method public static boolean onStartNestedScroll(android.view.ViewParent!, android.view.View!, android.view.View!, int, int);
+ method public static void onStopNestedScroll(android.view.ViewParent!, android.view.View!);
+ method public static void onStopNestedScroll(android.view.ViewParent!, android.view.View!, int);
+ method @Deprecated public static boolean requestSendAccessibilityEvent(android.view.ViewParent!, android.view.View!, android.view.accessibility.AccessibilityEvent!);
+ }
+
+ public final class ViewPropertyAnimatorCompat {
+ method public androidx.core.view.ViewPropertyAnimatorCompat! alpha(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! alphaBy(float);
+ method public void cancel();
+ method public long getDuration();
+ method public android.view.animation.Interpolator! getInterpolator();
+ method public long getStartDelay();
+ method public androidx.core.view.ViewPropertyAnimatorCompat! rotation(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! rotationBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! rotationX(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! rotationXBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! rotationY(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! rotationYBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! scaleX(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! scaleXBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! scaleY(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! scaleYBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! setDuration(long);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! setInterpolator(android.view.animation.Interpolator!);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! setListener(androidx.core.view.ViewPropertyAnimatorListener!);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! setStartDelay(long);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! setUpdateListener(androidx.core.view.ViewPropertyAnimatorUpdateListener!);
+ method public void start();
+ method public androidx.core.view.ViewPropertyAnimatorCompat! translationX(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! translationXBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! translationY(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! translationYBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! translationZ(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! translationZBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! withEndAction(Runnable!);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! withLayer();
+ method public androidx.core.view.ViewPropertyAnimatorCompat! withStartAction(Runnable!);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! x(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! xBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! y(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! yBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! z(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! zBy(float);
+ }
+
+ public interface ViewPropertyAnimatorListener {
+ method public void onAnimationCancel(android.view.View!);
+ method public void onAnimationEnd(android.view.View!);
+ method public void onAnimationStart(android.view.View!);
+ }
+
+ public class ViewPropertyAnimatorListenerAdapter implements androidx.core.view.ViewPropertyAnimatorListener {
+ ctor public ViewPropertyAnimatorListenerAdapter();
+ method public void onAnimationCancel(android.view.View!);
+ method public void onAnimationEnd(android.view.View!);
+ method public void onAnimationStart(android.view.View!);
+ }
+
+ public interface ViewPropertyAnimatorUpdateListener {
+ method public void onAnimationUpdate(android.view.View!);
+ }
+
+ public final class WindowCompat {
+ method public static <T extends android.view.View> T requireViewById(android.view.Window, @IdRes int);
+ field public static final int FEATURE_ACTION_BAR = 8; // 0x8
+ field public static final int FEATURE_ACTION_BAR_OVERLAY = 9; // 0x9
+ field public static final int FEATURE_ACTION_MODE_OVERLAY = 10; // 0xa
+ }
+
+ public class WindowInsetsCompat {
+ ctor public WindowInsetsCompat(androidx.core.view.WindowInsetsCompat!);
+ method public androidx.core.view.WindowInsetsCompat! consumeDisplayCutout();
+ method public androidx.core.view.WindowInsetsCompat! consumeStableInsets();
+ method public androidx.core.view.WindowInsetsCompat! consumeSystemWindowInsets();
+ method public androidx.core.view.DisplayCutoutCompat? getDisplayCutout();
+ method public androidx.core.graphics.Insets getMandatorySystemGestureInsets();
+ method public int getStableInsetBottom();
+ method public int getStableInsetLeft();
+ method public int getStableInsetRight();
+ method public int getStableInsetTop();
+ method public androidx.core.graphics.Insets getStableInsets();
+ method public androidx.core.graphics.Insets getSystemGestureInsets();
+ method public int getSystemWindowInsetBottom();
+ method public int getSystemWindowInsetLeft();
+ method public int getSystemWindowInsetRight();
+ method public int getSystemWindowInsetTop();
+ method public androidx.core.graphics.Insets getSystemWindowInsets();
+ method public androidx.core.graphics.Insets getTappableElementInsets();
+ method public boolean hasInsets();
+ method public boolean hasStableInsets();
+ method public boolean hasSystemWindowInsets();
+ method public boolean isConsumed();
+ method public boolean isRound();
+ method public androidx.core.view.WindowInsetsCompat! replaceSystemWindowInsets(int, int, int, int);
+ method public androidx.core.view.WindowInsetsCompat! replaceSystemWindowInsets(android.graphics.Rect!);
+ method @RequiresApi(20) public android.view.WindowInsets? toWindowInsets();
+ method @RequiresApi(20) public static androidx.core.view.WindowInsetsCompat toWindowInsetsCompat(android.view.WindowInsets);
+ }
+
+}
+
+package androidx.core.view.accessibility {
+
+ public final class AccessibilityClickableSpanCompat extends android.text.style.ClickableSpan {
+ method public void onClick(android.view.View);
+ }
+
+ public final class AccessibilityEventCompat {
+ method @Deprecated public static void appendRecord(android.view.accessibility.AccessibilityEvent!, androidx.core.view.accessibility.AccessibilityRecordCompat!);
+ method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! asRecord(android.view.accessibility.AccessibilityEvent!);
+ method public static int getAction(android.view.accessibility.AccessibilityEvent!);
+ method public static int getContentChangeTypes(android.view.accessibility.AccessibilityEvent!);
+ method public static int getMovementGranularity(android.view.accessibility.AccessibilityEvent!);
+ method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! getRecord(android.view.accessibility.AccessibilityEvent!, int);
+ method @Deprecated public static int getRecordCount(android.view.accessibility.AccessibilityEvent!);
+ method public static void setAction(android.view.accessibility.AccessibilityEvent!, int);
+ method public static void setContentChangeTypes(android.view.accessibility.AccessibilityEvent!, int);
+ method public static void setMovementGranularity(android.view.accessibility.AccessibilityEvent!, int);
+ field public static final int CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION = 4; // 0x4
+ field public static final int CONTENT_CHANGE_TYPE_PANE_APPEARED = 16; // 0x10
+ field public static final int CONTENT_CHANGE_TYPE_PANE_DISAPPEARED = 32; // 0x20
+ field public static final int CONTENT_CHANGE_TYPE_PANE_TITLE = 8; // 0x8
+ field public static final int CONTENT_CHANGE_TYPE_SUBTREE = 1; // 0x1
+ field public static final int CONTENT_CHANGE_TYPE_TEXT = 2; // 0x2
+ field public static final int CONTENT_CHANGE_TYPE_UNDEFINED = 0; // 0x0
+ field public static final int TYPES_ALL_MASK = -1; // 0xffffffff
+ field public static final int TYPE_ANNOUNCEMENT = 16384; // 0x4000
+ field public static final int TYPE_ASSIST_READING_CONTEXT = 16777216; // 0x1000000
+ field public static final int TYPE_GESTURE_DETECTION_END = 524288; // 0x80000
+ field public static final int TYPE_GESTURE_DETECTION_START = 262144; // 0x40000
+ field @Deprecated public static final int TYPE_TOUCH_EXPLORATION_GESTURE_END = 1024; // 0x400
+ field @Deprecated public static final int TYPE_TOUCH_EXPLORATION_GESTURE_START = 512; // 0x200
+ field public static final int TYPE_TOUCH_INTERACTION_END = 2097152; // 0x200000
+ field public static final int TYPE_TOUCH_INTERACTION_START = 1048576; // 0x100000
+ field public static final int TYPE_VIEW_ACCESSIBILITY_FOCUSED = 32768; // 0x8000
+ field public static final int TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED = 65536; // 0x10000
+ field public static final int TYPE_VIEW_CONTEXT_CLICKED = 8388608; // 0x800000
+ field @Deprecated public static final int TYPE_VIEW_HOVER_ENTER = 128; // 0x80
+ field @Deprecated public static final int TYPE_VIEW_HOVER_EXIT = 256; // 0x100
+ field @Deprecated public static final int TYPE_VIEW_SCROLLED = 4096; // 0x1000
+ field @Deprecated public static final int TYPE_VIEW_TEXT_SELECTION_CHANGED = 8192; // 0x2000
+ field public static final int TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY = 131072; // 0x20000
+ field public static final int TYPE_WINDOWS_CHANGED = 4194304; // 0x400000
+ field @Deprecated public static final int TYPE_WINDOW_CONTENT_CHANGED = 2048; // 0x800
+ }
+
+ public final class AccessibilityManagerCompat {
+ method @Deprecated public static boolean addAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager!, androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener!);
+ method public static boolean addTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager!, androidx.core.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener!);
+ method @Deprecated public static java.util.List<android.accessibilityservice.AccessibilityServiceInfo!>! getEnabledAccessibilityServiceList(android.view.accessibility.AccessibilityManager!, int);
+ method @Deprecated public static java.util.List<android.accessibilityservice.AccessibilityServiceInfo!>! getInstalledAccessibilityServiceList(android.view.accessibility.AccessibilityManager!);
+ method @Deprecated public static boolean isTouchExplorationEnabled(android.view.accessibility.AccessibilityManager!);
+ method @Deprecated public static boolean removeAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager!, androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener!);
+ method public static boolean removeTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager!, androidx.core.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener!);
+ }
+
+ @Deprecated public static interface AccessibilityManagerCompat.AccessibilityStateChangeListener {
+ method @Deprecated public void onAccessibilityStateChanged(boolean);
+ }
+
+ @Deprecated public abstract static class AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat implements androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener {
+ ctor @Deprecated public AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat();
+ }
+
+ public static interface AccessibilityManagerCompat.TouchExplorationStateChangeListener {
+ method public void onTouchExplorationStateChanged(boolean);
+ }
+
+ public class AccessibilityNodeInfoCompat {
+ ctor @Deprecated public AccessibilityNodeInfoCompat(Object!);
+ method public void addAction(int);
+ method public void addAction(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat!);
+ method public void addChild(android.view.View!);
+ method public void addChild(android.view.View!, int);
+ method public boolean canOpenPopup();
+ method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat!>! findAccessibilityNodeInfosByText(String!);
+ method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat!>! findAccessibilityNodeInfosByViewId(String!);
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! findFocus(int);
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! focusSearch(int);
+ method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat!>! getActionList();
+ method public int getActions();
+ method @Deprecated public void getBoundsInParent(android.graphics.Rect!);
+ method public void getBoundsInScreen(android.graphics.Rect!);
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getChild(int);
+ method public int getChildCount();
+ method public CharSequence! getClassName();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat! getCollectionInfo();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat! getCollectionItemInfo();
+ method public CharSequence! getContentDescription();
+ method public int getDrawingOrder();
+ method public CharSequence! getError();
+ method public android.os.Bundle! getExtras();
+ method public CharSequence? getHintText();
+ method @Deprecated public Object! getInfo();
+ method public int getInputType();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getLabelFor();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getLabeledBy();
+ method public int getLiveRegion();
+ method public int getMaxTextLength();
+ method public int getMovementGranularities();
+ method public CharSequence! getPackageName();
+ method public CharSequence? getPaneTitle();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getParent();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat! getRangeInfo();
+ method public CharSequence? getRoleDescription();
+ method public CharSequence! getText();
+ method public int getTextSelectionEnd();
+ method public int getTextSelectionStart();
+ method public CharSequence? getTooltipText();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.TouchDelegateInfoCompat? getTouchDelegateInfo();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getTraversalAfter();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getTraversalBefore();
+ method public String! getViewIdResourceName();
+ method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat! getWindow();
+ method public int getWindowId();
+ method public boolean isAccessibilityFocused();
+ method public boolean isCheckable();
+ method public boolean isChecked();
+ method public boolean isClickable();
+ method public boolean isContentInvalid();
+ method public boolean isContextClickable();
+ method public boolean isDismissable();
+ method public boolean isEditable();
+ method public boolean isEnabled();
+ method public boolean isFocusable();
+ method public boolean isFocused();
+ method public boolean isHeading();
+ method public boolean isImportantForAccessibility();
+ method public boolean isLongClickable();
+ method public boolean isMultiLine();
+ method public boolean isPassword();
+ method public boolean isScreenReaderFocusable();
+ method public boolean isScrollable();
+ method public boolean isSelected();
+ method public boolean isShowingHintText();
+ method public boolean isTextEntryKey();
+ method public boolean isVisibleToUser();
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain(android.view.View!);
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain(android.view.View!, int);
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain();
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain(androidx.core.view.accessibility.AccessibilityNodeInfoCompat!);
+ method public boolean performAction(int);
+ method public boolean performAction(int, android.os.Bundle!);
+ method public void recycle();
+ method public boolean refresh();
+ method public boolean removeAction(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat!);
+ method public boolean removeChild(android.view.View!);
+ method public boolean removeChild(android.view.View!, int);
+ method public void setAccessibilityFocused(boolean);
+ method @Deprecated public void setBoundsInParent(android.graphics.Rect!);
+ method public void setBoundsInScreen(android.graphics.Rect!);
+ method public void setCanOpenPopup(boolean);
+ method public void setCheckable(boolean);
+ method public void setChecked(boolean);
+ method public void setClassName(CharSequence!);
+ method public void setClickable(boolean);
+ method public void setCollectionInfo(Object!);
+ method public void setCollectionItemInfo(Object!);
+ method public void setContentDescription(CharSequence!);
+ method public void setContentInvalid(boolean);
+ method public void setContextClickable(boolean);
+ method public void setDismissable(boolean);
+ method public void setDrawingOrder(int);
+ method public void setEditable(boolean);
+ method public void setEnabled(boolean);
+ method public void setError(CharSequence!);
+ method public void setFocusable(boolean);
+ method public void setFocused(boolean);
+ method public void setHeading(boolean);
+ method public void setHintText(CharSequence?);
+ method public void setImportantForAccessibility(boolean);
+ method public void setInputType(int);
+ method public void setLabelFor(android.view.View!);
+ method public void setLabelFor(android.view.View!, int);
+ method public void setLabeledBy(android.view.View!);
+ method public void setLabeledBy(android.view.View!, int);
+ method public void setLiveRegion(int);
+ method public void setLongClickable(boolean);
+ method public void setMaxTextLength(int);
+ method public void setMovementGranularities(int);
+ method public void setMultiLine(boolean);
+ method public void setPackageName(CharSequence!);
+ method public void setPaneTitle(CharSequence?);
+ method public void setParent(android.view.View!);
+ method public void setParent(android.view.View!, int);
+ method public void setPassword(boolean);
+ method public void setRangeInfo(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat!);
+ method public void setRoleDescription(CharSequence?);
+ method public void setScreenReaderFocusable(boolean);
+ method public void setScrollable(boolean);
+ method public void setSelected(boolean);
+ method public void setShowingHintText(boolean);
+ method public void setSource(android.view.View!);
+ method public void setSource(android.view.View!, int);
+ method public void setText(CharSequence!);
+ method public void setTextEntryKey(boolean);
+ method public void setTextSelection(int, int);
+ method public void setTooltipText(CharSequence?);
+ method public void setTouchDelegateInfo(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.TouchDelegateInfoCompat);
+ method public void setTraversalAfter(android.view.View!);
+ method public void setTraversalAfter(android.view.View!, int);
+ method public void setTraversalBefore(android.view.View!);
+ method public void setTraversalBefore(android.view.View!, int);
+ method public void setViewIdResourceName(String!);
+ method public void setVisibleToUser(boolean);
+ method public android.view.accessibility.AccessibilityNodeInfo! unwrap();
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! wrap(android.view.accessibility.AccessibilityNodeInfo);
+ field public static final int ACTION_ACCESSIBILITY_FOCUS = 64; // 0x40
+ field public static final String ACTION_ARGUMENT_COLUMN_INT = "android.view.accessibility.action.ARGUMENT_COLUMN_INT";
+ field public static final String ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN = "ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN";
+ field public static final String ACTION_ARGUMENT_HTML_ELEMENT_STRING = "ACTION_ARGUMENT_HTML_ELEMENT_STRING";
+ field public static final String ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT = "ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT";
+ field public static final String ACTION_ARGUMENT_MOVE_WINDOW_X = "ACTION_ARGUMENT_MOVE_WINDOW_X";
+ field public static final String ACTION_ARGUMENT_MOVE_WINDOW_Y = "ACTION_ARGUMENT_MOVE_WINDOW_Y";
+ field public static final String ACTION_ARGUMENT_PROGRESS_VALUE = "android.view.accessibility.action.ARGUMENT_PROGRESS_VALUE";
+ field public static final String ACTION_ARGUMENT_ROW_INT = "android.view.accessibility.action.ARGUMENT_ROW_INT";
+ field public static final String ACTION_ARGUMENT_SELECTION_END_INT = "ACTION_ARGUMENT_SELECTION_END_INT";
+ field public static final String ACTION_ARGUMENT_SELECTION_START_INT = "ACTION_ARGUMENT_SELECTION_START_INT";
+ field public static final String ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE = "ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE";
+ field public static final int ACTION_CLEAR_ACCESSIBILITY_FOCUS = 128; // 0x80
+ field public static final int ACTION_CLEAR_FOCUS = 2; // 0x2
+ field public static final int ACTION_CLEAR_SELECTION = 8; // 0x8
+ field public static final int ACTION_CLICK = 16; // 0x10
+ field public static final int ACTION_COLLAPSE = 524288; // 0x80000
+ field public static final int ACTION_COPY = 16384; // 0x4000
+ field public static final int ACTION_CUT = 65536; // 0x10000
+ field public static final int ACTION_DISMISS = 1048576; // 0x100000
+ field public static final int ACTION_EXPAND = 262144; // 0x40000
+ field public static final int ACTION_FOCUS = 1; // 0x1
+ field public static final int ACTION_LONG_CLICK = 32; // 0x20
+ field public static final int ACTION_NEXT_AT_MOVEMENT_GRANULARITY = 256; // 0x100
+ field public static final int ACTION_NEXT_HTML_ELEMENT = 1024; // 0x400
+ field public static final int ACTION_PASTE = 32768; // 0x8000
+ field public static final int ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY = 512; // 0x200
+ field public static final int ACTION_PREVIOUS_HTML_ELEMENT = 2048; // 0x800
+ field public static final int ACTION_SCROLL_BACKWARD = 8192; // 0x2000
+ field public static final int ACTION_SCROLL_FORWARD = 4096; // 0x1000
+ field public static final int ACTION_SELECT = 4; // 0x4
+ field public static final int ACTION_SET_SELECTION = 131072; // 0x20000
+ field public static final int ACTION_SET_TEXT = 2097152; // 0x200000
+ field public static final int FOCUS_ACCESSIBILITY = 2; // 0x2
+ field public static final int FOCUS_INPUT = 1; // 0x1
+ field public static final int MOVEMENT_GRANULARITY_CHARACTER = 1; // 0x1
+ field public static final int MOVEMENT_GRANULARITY_LINE = 4; // 0x4
+ field public static final int MOVEMENT_GRANULARITY_PAGE = 16; // 0x10
+ field public static final int MOVEMENT_GRANULARITY_PARAGRAPH = 8; // 0x8
+ field public static final int MOVEMENT_GRANULARITY_WORD = 2; // 0x2
+ }
+
+ public static class AccessibilityNodeInfoCompat.AccessibilityActionCompat {
+ ctor public AccessibilityNodeInfoCompat.AccessibilityActionCompat(int, CharSequence!);
+ method public int getId();
+ method public CharSequence! getLabel();
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_ACCESSIBILITY_FOCUS;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLEAR_ACCESSIBILITY_FOCUS;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLEAR_FOCUS;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLEAR_SELECTION;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLICK;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_COLLAPSE;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CONTEXT_CLICK;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_COPY;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CUT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_DISMISS;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_EXPAND;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_FOCUS;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_HIDE_TOOLTIP;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_LONG_CLICK;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_MOVE_WINDOW;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_NEXT_AT_MOVEMENT_GRANULARITY;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_NEXT_HTML_ELEMENT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PAGE_DOWN;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PAGE_LEFT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PAGE_RIGHT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PAGE_UP;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_PASTE;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_PREVIOUS_HTML_ELEMENT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_BACKWARD;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_DOWN;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_FORWARD;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_LEFT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_RIGHT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_TO_POSITION;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_UP;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SELECT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SET_PROGRESS;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SET_SELECTION;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SET_TEXT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SHOW_ON_SCREEN;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SHOW_TOOLTIP;
+ }
+
+ public static class AccessibilityNodeInfoCompat.CollectionInfoCompat {
+ method public int getColumnCount();
+ method public int getRowCount();
+ method public int getSelectionMode();
+ method public boolean isHierarchical();
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat! obtain(int, int, boolean, int);
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat! obtain(int, int, boolean);
+ field public static final int SELECTION_MODE_MULTIPLE = 2; // 0x2
+ field public static final int SELECTION_MODE_NONE = 0; // 0x0
+ field public static final int SELECTION_MODE_SINGLE = 1; // 0x1
+ }
+
+ public static class AccessibilityNodeInfoCompat.CollectionItemInfoCompat {
+ method public int getColumnIndex();
+ method public int getColumnSpan();
+ method public int getRowIndex();
+ method public int getRowSpan();
+ method @Deprecated public boolean isHeading();
+ method public boolean isSelected();
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat! obtain(int, int, int, int, boolean, boolean);
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat! obtain(int, int, int, int, boolean);
+ }
+
+ public static class AccessibilityNodeInfoCompat.RangeInfoCompat {
+ method public float getCurrent();
+ method public float getMax();
+ method public float getMin();
+ method public int getType();
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat! obtain(int, float, float, float);
+ field public static final int RANGE_TYPE_FLOAT = 1; // 0x1
+ field public static final int RANGE_TYPE_INT = 0; // 0x0
+ field public static final int RANGE_TYPE_PERCENT = 2; // 0x2
+ }
+
+ public static final class AccessibilityNodeInfoCompat.TouchDelegateInfoCompat {
+ ctor public AccessibilityNodeInfoCompat.TouchDelegateInfoCompat(java.util.Map<android.graphics.Region!,android.view.View!>);
+ method public android.graphics.Region? getRegionAt(@IntRange(from=0) int);
+ method @IntRange(from=0) public int getRegionCount();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? getTargetForRegion(android.graphics.Region);
+ }
+
+ public class AccessibilityNodeProviderCompat {
+ ctor public AccessibilityNodeProviderCompat();
+ ctor public AccessibilityNodeProviderCompat(Object!);
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? createAccessibilityNodeInfo(int);
+ method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat!>? findAccessibilityNodeInfosByText(String!, int);
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? findFocus(int);
+ method public Object! getProvider();
+ method public boolean performAction(int, int, android.os.Bundle!);
+ field public static final int HOST_VIEW_ID = -1; // 0xffffffff
+ }
+
+ public class AccessibilityRecordCompat {
+ ctor @Deprecated public AccessibilityRecordCompat(Object!);
+ method @Deprecated public boolean equals(Object?);
+ method @Deprecated public int getAddedCount();
+ method @Deprecated public CharSequence! getBeforeText();
+ method @Deprecated public CharSequence! getClassName();
+ method @Deprecated public CharSequence! getContentDescription();
+ method @Deprecated public int getCurrentItemIndex();
+ method @Deprecated public int getFromIndex();
+ method @Deprecated public Object! getImpl();
+ method @Deprecated public int getItemCount();
+ method @Deprecated public int getMaxScrollX();
+ method public static int getMaxScrollX(android.view.accessibility.AccessibilityRecord!);
+ method @Deprecated public int getMaxScrollY();
+ method public static int getMaxScrollY(android.view.accessibility.AccessibilityRecord!);
+ method @Deprecated public android.os.Parcelable! getParcelableData();
+ method @Deprecated public int getRemovedCount();
+ method @Deprecated public int getScrollX();
+ method @Deprecated public int getScrollY();
+ method @Deprecated public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getSource();
+ method @Deprecated public java.util.List<java.lang.CharSequence!>! getText();
+ method @Deprecated public int getToIndex();
+ method @Deprecated public int getWindowId();
+ method @Deprecated public int hashCode();
+ method @Deprecated public boolean isChecked();
+ method @Deprecated public boolean isEnabled();
+ method @Deprecated public boolean isFullScreen();
+ method @Deprecated public boolean isPassword();
+ method @Deprecated public boolean isScrollable();
+ method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! obtain(androidx.core.view.accessibility.AccessibilityRecordCompat!);
+ method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! obtain();
+ method @Deprecated public void recycle();
+ method @Deprecated public void setAddedCount(int);
+ method @Deprecated public void setBeforeText(CharSequence!);
+ method @Deprecated public void setChecked(boolean);
+ method @Deprecated public void setClassName(CharSequence!);
+ method @Deprecated public void setContentDescription(CharSequence!);
+ method @Deprecated public void setCurrentItemIndex(int);
+ method @Deprecated public void setEnabled(boolean);
+ method @Deprecated public void setFromIndex(int);
+ method @Deprecated public void setFullScreen(boolean);
+ method @Deprecated public void setItemCount(int);
+ method @Deprecated public void setMaxScrollX(int);
+ method public static void setMaxScrollX(android.view.accessibility.AccessibilityRecord!, int);
+ method @Deprecated public void setMaxScrollY(int);
+ method public static void setMaxScrollY(android.view.accessibility.AccessibilityRecord!, int);
+ method @Deprecated public void setParcelableData(android.os.Parcelable!);
+ method @Deprecated public void setPassword(boolean);
+ method @Deprecated public void setRemovedCount(int);
+ method @Deprecated public void setScrollX(int);
+ method @Deprecated public void setScrollY(int);
+ method @Deprecated public void setScrollable(boolean);
+ method @Deprecated public void setSource(android.view.View!);
+ method @Deprecated public void setSource(android.view.View!, int);
+ method public static void setSource(android.view.accessibility.AccessibilityRecord, android.view.View!, int);
+ method @Deprecated public void setToIndex(int);
+ }
+
+ public interface AccessibilityViewCommand {
+ method public boolean perform(android.view.View, androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments?);
+ }
+
+ public abstract static class AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.CommandArguments();
+ }
+
+ public static final class AccessibilityViewCommand.MoveAtGranularityArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.MoveAtGranularityArguments();
+ method public boolean getExtendSelection();
+ method public int getGranularity();
+ }
+
+ public static final class AccessibilityViewCommand.MoveHtmlArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.MoveHtmlArguments();
+ method public String! getHTMLElement();
+ }
+
+ public static final class AccessibilityViewCommand.MoveWindowArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.MoveWindowArguments();
+ method public int getX();
+ method public int getY();
+ }
+
+ public static final class AccessibilityViewCommand.ScrollToPositionArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.ScrollToPositionArguments();
+ method public int getColumn();
+ method public int getRow();
+ }
+
+ public static final class AccessibilityViewCommand.SetProgressArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.SetProgressArguments();
+ method public float getProgress();
+ }
+
+ public static final class AccessibilityViewCommand.SetSelectionArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.SetSelectionArguments();
+ method public int getEnd();
+ method public int getStart();
+ }
+
+ public static final class AccessibilityViewCommand.SetTextArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.SetTextArguments();
+ method public CharSequence! getText();
+ }
+
+ public class AccessibilityWindowInfoCompat {
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getAnchor();
+ method public void getBoundsInScreen(android.graphics.Rect!);
+ method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat! getChild(int);
+ method public int getChildCount();
+ method public int getId();
+ method public int getLayer();
+ method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat! getParent();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getRoot();
+ method public CharSequence! getTitle();
+ method public int getType();
+ method public boolean isAccessibilityFocused();
+ method public boolean isActive();
+ method public boolean isFocused();
+ method public static androidx.core.view.accessibility.AccessibilityWindowInfoCompat! obtain();
+ method public static androidx.core.view.accessibility.AccessibilityWindowInfoCompat! obtain(androidx.core.view.accessibility.AccessibilityWindowInfoCompat!);
+ method public void recycle();
+ field public static final int TYPE_ACCESSIBILITY_OVERLAY = 4; // 0x4
+ field public static final int TYPE_APPLICATION = 1; // 0x1
+ field public static final int TYPE_INPUT_METHOD = 2; // 0x2
+ field public static final int TYPE_SPLIT_SCREEN_DIVIDER = 5; // 0x5
+ field public static final int TYPE_SYSTEM = 3; // 0x3
+ }
+
+}
+
+package androidx.core.view.animation {
+
+ public final class PathInterpolatorCompat {
+ method public static android.view.animation.Interpolator! create(android.graphics.Path!);
+ method public static android.view.animation.Interpolator! create(float, float);
+ method public static android.view.animation.Interpolator! create(float, float, float, float);
+ }
+
+}
+
+package androidx.core.view.inputmethod {
+
+ public final class EditorInfoCompat {
+ ctor @Deprecated public EditorInfoCompat();
+ method public static String![] getContentMimeTypes(android.view.inputmethod.EditorInfo!);
+ method public static void setContentMimeTypes(android.view.inputmethod.EditorInfo, String![]?);
+ field public static final int IME_FLAG_FORCE_ASCII = -2147483648; // 0x80000000
+ field public static final int IME_FLAG_NO_PERSONALIZED_LEARNING = 16777216; // 0x1000000
+ }
+
+ public final class InputConnectionCompat {
+ ctor @Deprecated public InputConnectionCompat();
+ method public static boolean commitContent(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo, androidx.core.view.inputmethod.InputContentInfoCompat, int, android.os.Bundle?);
+ method public static android.view.inputmethod.InputConnection createWrapper(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo, androidx.core.view.inputmethod.InputConnectionCompat.OnCommitContentListener);
+ field public static final int INPUT_CONTENT_GRANT_READ_URI_PERMISSION = 1; // 0x1
+ }
+
+ public static interface InputConnectionCompat.OnCommitContentListener {
+ method public boolean onCommitContent(androidx.core.view.inputmethod.InputContentInfoCompat!, int, android.os.Bundle!);
+ }
+
+ public final class InputContentInfoCompat {
+ ctor public InputContentInfoCompat(android.net.Uri, android.content.ClipDescription, android.net.Uri?);
+ method public android.net.Uri getContentUri();
+ method public android.content.ClipDescription getDescription();
+ method public android.net.Uri? getLinkUri();
+ method public void releasePermission();
+ method public void requestPermission();
+ method public Object? unwrap();
+ method public static androidx.core.view.inputmethod.InputContentInfoCompat? wrap(Object?);
+ }
+
+}
+
+package androidx.core.widget {
+
+ public abstract class AutoScrollHelper implements android.view.View.OnTouchListener {
+ ctor public AutoScrollHelper(android.view.View);
+ method public abstract boolean canTargetScrollHorizontally(int);
+ method public abstract boolean canTargetScrollVertically(int);
+ method public boolean isEnabled();
+ method public boolean isExclusive();
+ method public boolean onTouch(android.view.View!, android.view.MotionEvent!);
+ method public abstract void scrollTargetBy(int, int);
+ method public androidx.core.widget.AutoScrollHelper setActivationDelay(int);
+ method public androidx.core.widget.AutoScrollHelper setEdgeType(int);
+ method public androidx.core.widget.AutoScrollHelper! setEnabled(boolean);
+ method public androidx.core.widget.AutoScrollHelper! setExclusive(boolean);
+ method public androidx.core.widget.AutoScrollHelper setMaximumEdges(float, float);
+ method public androidx.core.widget.AutoScrollHelper setMaximumVelocity(float, float);
+ method public androidx.core.widget.AutoScrollHelper setMinimumVelocity(float, float);
+ method public androidx.core.widget.AutoScrollHelper setRampDownDuration(int);
+ method public androidx.core.widget.AutoScrollHelper setRampUpDuration(int);
+ method public androidx.core.widget.AutoScrollHelper setRelativeEdges(float, float);
+ method public androidx.core.widget.AutoScrollHelper setRelativeVelocity(float, float);
+ field public static final int EDGE_TYPE_INSIDE = 0; // 0x0
+ field public static final int EDGE_TYPE_INSIDE_EXTEND = 1; // 0x1
+ field public static final int EDGE_TYPE_OUTSIDE = 2; // 0x2
+ field public static final float NO_MAX = 3.4028235E38f;
+ field public static final float NO_MIN = 0.0f;
+ field public static final float RELATIVE_UNSPECIFIED = 0.0f;
+ }
+
+ public final class CompoundButtonCompat {
+ method public static android.graphics.drawable.Drawable? getButtonDrawable(android.widget.CompoundButton);
+ method public static android.content.res.ColorStateList? getButtonTintList(android.widget.CompoundButton);
+ method public static android.graphics.PorterDuff.Mode? getButtonTintMode(android.widget.CompoundButton);
+ method public static void setButtonTintList(android.widget.CompoundButton, android.content.res.ColorStateList?);
+ method public static void setButtonTintMode(android.widget.CompoundButton, android.graphics.PorterDuff.Mode?);
+ }
+
+ public class ContentLoadingProgressBar extends android.widget.ProgressBar {
+ ctor public ContentLoadingProgressBar(android.content.Context);
+ ctor public ContentLoadingProgressBar(android.content.Context, android.util.AttributeSet?);
+ method public void hide();
+ method public void onAttachedToWindow();
+ method public void onDetachedFromWindow();
+ method public void show();
+ }
+
+ public final class EdgeEffectCompat {
+ ctor @Deprecated public EdgeEffectCompat(android.content.Context!);
+ method @Deprecated public boolean draw(android.graphics.Canvas!);
+ method @Deprecated public void finish();
+ method @Deprecated public boolean isFinished();
+ method @Deprecated public boolean onAbsorb(int);
+ method @Deprecated public boolean onPull(float);
+ method @Deprecated public boolean onPull(float, float);
+ method public static void onPull(android.widget.EdgeEffect, float, float);
+ method @Deprecated public boolean onRelease();
+ method @Deprecated public void setSize(int, int);
+ }
+
+ public class ImageViewCompat {
+ method public static android.content.res.ColorStateList? getImageTintList(android.widget.ImageView);
+ method public static android.graphics.PorterDuff.Mode? getImageTintMode(android.widget.ImageView);
+ method public static void setImageTintList(android.widget.ImageView, android.content.res.ColorStateList?);
+ method public static void setImageTintMode(android.widget.ImageView, android.graphics.PorterDuff.Mode?);
+ }
+
+ public final class ListPopupWindowCompat {
+ method @Deprecated public static android.view.View.OnTouchListener! createDragToOpenListener(Object!, android.view.View!);
+ method public static android.view.View.OnTouchListener? createDragToOpenListener(android.widget.ListPopupWindow, android.view.View);
+ }
+
+ public class ListViewAutoScrollHelper extends androidx.core.widget.AutoScrollHelper {
+ ctor public ListViewAutoScrollHelper(android.widget.ListView);
+ method public boolean canTargetScrollHorizontally(int);
+ method public boolean canTargetScrollVertically(int);
+ method public void scrollTargetBy(int, int);
+ }
+
+ public final class ListViewCompat {
+ method public static boolean canScrollList(android.widget.ListView, int);
+ method public static void scrollListBy(android.widget.ListView, int);
+ }
+
+ public class NestedScrollView extends android.widget.FrameLayout implements androidx.core.view.NestedScrollingChild3 androidx.core.view.NestedScrollingParent3 androidx.core.view.ScrollingView {
+ ctor public NestedScrollView(android.content.Context);
+ ctor public NestedScrollView(android.content.Context, android.util.AttributeSet?);
+ ctor public NestedScrollView(android.content.Context, android.util.AttributeSet?, int);
+ method public boolean arrowScroll(int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeHorizontalScrollExtent();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeHorizontalScrollOffset();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeHorizontalScrollRange();
+ method protected int computeScrollDeltaToGetChildRectOnScreen(android.graphics.Rect!);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeVerticalScrollExtent();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeVerticalScrollOffset();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeVerticalScrollRange();
+ method public boolean dispatchNestedPreScroll(int, int, int[]!, int[]!, int);
+ method public void dispatchNestedScroll(int, int, int, int, int[]?, int, int[]);
+ method public boolean dispatchNestedScroll(int, int, int, int, int[]!, int);
+ method public boolean executeKeyEvent(android.view.KeyEvent);
+ method public void fling(int);
+ method public boolean fullScroll(int);
+ method public int getMaxScrollAmount();
+ method public boolean hasNestedScrollingParent(int);
+ method public boolean isFillViewport();
+ method public boolean isSmoothScrollingEnabled();
+ method public void onAttachedToWindow();
+ method public void onNestedPreScroll(android.view.View, int, int, int[], int);
+ method public void onNestedScroll(android.view.View, int, int, int, int, int, int[]);
+ method public void onNestedScroll(android.view.View, int, int, int, int, int);
+ method public void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
+ method public boolean onStartNestedScroll(android.view.View, android.view.View, int, int);
+ method public void onStopNestedScroll(android.view.View, int);
+ method public boolean pageScroll(int);
+ method public void setFillViewport(boolean);
+ method public void setOnScrollChangeListener(androidx.core.widget.NestedScrollView.OnScrollChangeListener?);
+ method public void setSmoothScrollingEnabled(boolean);
+ method public final void smoothScrollBy(int, int);
+ method public final void smoothScrollTo(int, int);
+ method public boolean startNestedScroll(int, int);
+ method public void stopNestedScroll(int);
+ }
+
+ public static interface NestedScrollView.OnScrollChangeListener {
+ method public void onScrollChange(androidx.core.widget.NestedScrollView!, int, int, int, int);
+ }
+
+ public final class PopupMenuCompat {
+ method public static android.view.View.OnTouchListener? getDragToOpenListener(Object);
+ }
+
+ public final class PopupWindowCompat {
+ method public static boolean getOverlapAnchor(android.widget.PopupWindow);
+ method public static int getWindowLayoutType(android.widget.PopupWindow);
+ method public static void setOverlapAnchor(android.widget.PopupWindow, boolean);
+ method public static void setWindowLayoutType(android.widget.PopupWindow, int);
+ method public static void showAsDropDown(android.widget.PopupWindow, android.view.View, int, int, int);
+ }
+
+ @Deprecated public final class ScrollerCompat {
+ method @Deprecated public void abortAnimation();
+ method @Deprecated public boolean computeScrollOffset();
+ method @Deprecated public static androidx.core.widget.ScrollerCompat! create(android.content.Context!);
+ method @Deprecated public static androidx.core.widget.ScrollerCompat! create(android.content.Context!, android.view.animation.Interpolator!);
+ method @Deprecated public void fling(int, int, int, int, int, int, int, int);
+ method @Deprecated public void fling(int, int, int, int, int, int, int, int, int, int);
+ method @Deprecated public float getCurrVelocity();
+ method @Deprecated public int getCurrX();
+ method @Deprecated public int getCurrY();
+ method @Deprecated public int getFinalX();
+ method @Deprecated public int getFinalY();
+ method @Deprecated public boolean isFinished();
+ method @Deprecated public boolean isOverScrolled();
+ method @Deprecated public void notifyHorizontalEdgeReached(int, int, int);
+ method @Deprecated public void notifyVerticalEdgeReached(int, int, int);
+ method @Deprecated public boolean springBack(int, int, int, int, int, int);
+ method @Deprecated public void startScroll(int, int, int, int);
+ method @Deprecated public void startScroll(int, int, int, int, int);
+ }
+
+ public final class TextViewCompat {
+ method public static int getAutoSizeMaxTextSize(android.widget.TextView);
+ method public static int getAutoSizeMinTextSize(android.widget.TextView);
+ method public static int getAutoSizeStepGranularity(android.widget.TextView);
+ method public static int[] getAutoSizeTextAvailableSizes(android.widget.TextView);
+ method public static int getAutoSizeTextType(android.widget.TextView);
+ method public static android.content.res.ColorStateList? getCompoundDrawableTintList(android.widget.TextView);
+ method public static android.graphics.PorterDuff.Mode? getCompoundDrawableTintMode(android.widget.TextView);
+ method public static android.graphics.drawable.Drawable![] getCompoundDrawablesRelative(android.widget.TextView);
+ method public static int getFirstBaselineToTopHeight(android.widget.TextView);
+ method public static int getLastBaselineToBottomHeight(android.widget.TextView);
+ method public static int getMaxLines(android.widget.TextView);
+ method public static int getMinLines(android.widget.TextView);
+ method public static androidx.core.text.PrecomputedTextCompat.Params getTextMetricsParams(android.widget.TextView);
+ method public static void setAutoSizeTextTypeUniformWithConfiguration(android.widget.TextView, int, int, int, int) throws java.lang.IllegalArgumentException;
+ method public static void setAutoSizeTextTypeUniformWithPresetSizes(android.widget.TextView, int[], int) throws java.lang.IllegalArgumentException;
+ method public static void setAutoSizeTextTypeWithDefaults(android.widget.TextView, int);
+ method public static void setCompoundDrawableTintList(android.widget.TextView, android.content.res.ColorStateList?);
+ method public static void setCompoundDrawableTintMode(android.widget.TextView, android.graphics.PorterDuff.Mode?);
+ method public static void setCompoundDrawablesRelative(android.widget.TextView, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?);
+ method public static void setCompoundDrawablesRelativeWithIntrinsicBounds(android.widget.TextView, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?);
+ method public static void setCompoundDrawablesRelativeWithIntrinsicBounds(android.widget.TextView, @DrawableRes int, @DrawableRes int, @DrawableRes int, @DrawableRes int);
+ method public static void setCustomSelectionActionModeCallback(android.widget.TextView, android.view.ActionMode.Callback);
+ method public static void setFirstBaselineToTopHeight(android.widget.TextView, @Px @IntRange(from=0) int);
+ method public static void setLastBaselineToBottomHeight(android.widget.TextView, @Px @IntRange(from=0) int);
+ method public static void setLineHeight(android.widget.TextView, @Px @IntRange(from=0) int);
+ method public static void setPrecomputedText(android.widget.TextView, androidx.core.text.PrecomputedTextCompat);
+ method public static void setTextAppearance(android.widget.TextView, @StyleRes int);
+ method public static void setTextMetricsParams(android.widget.TextView, androidx.core.text.PrecomputedTextCompat.Params);
+ field public static final int AUTO_SIZE_TEXT_TYPE_NONE = 0; // 0x0
+ field public static final int AUTO_SIZE_TEXT_TYPE_UNIFORM = 1; // 0x1
+ }
+
+ public interface TintableCompoundButton {
+ method public android.content.res.ColorStateList? getSupportButtonTintList();
+ method public android.graphics.PorterDuff.Mode? getSupportButtonTintMode();
+ method public void setSupportButtonTintList(android.content.res.ColorStateList?);
+ method public void setSupportButtonTintMode(android.graphics.PorterDuff.Mode?);
+ }
+
+ public interface TintableCompoundDrawablesView {
+ method public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
+ method public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
+ method public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
+ method public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
+ }
+
+}
+
diff --git a/core/core/api/public_plus_experimental_current.txt b/core/core/api/public_plus_experimental_current.txt
index 19f1ef5..b962a95 100644
--- a/core/core/api/public_plus_experimental_current.txt
+++ b/core/core/api/public_plus_experimental_current.txt
@@ -1306,7 +1306,7 @@
}
public final class EnvironmentCompat {
- method public static String! getStorageState(java.io.File);
+ method public static String getStorageState(java.io.File);
field public static final String MEDIA_UNKNOWN = "unknown";
}
diff --git a/core/core/api/res-1.3.0-alpha01.txt b/core/core/api/res-1.3.0-alpha01.txt
new file mode 100644
index 0000000..a609e0a
--- /dev/null
+++ b/core/core/api/res-1.3.0-alpha01.txt
@@ -0,0 +1,17 @@
+attr alpha
+attr font
+attr fontProviderAuthority
+attr fontProviderCerts
+attr fontProviderFetchStrategy
+attr fontProviderFetchTimeout
+attr fontProviderPackage
+attr fontProviderQuery
+attr fontStyle
+attr fontVariationSettings
+attr fontWeight
+attr ttcIndex
+style TextAppearance_Compat_Notification
+style TextAppearance_Compat_Notification_Info
+style TextAppearance_Compat_Notification_Line2
+style TextAppearance_Compat_Notification_Time
+style TextAppearance_Compat_Notification_Title
diff --git a/core/core/api/restricted_1.2.0-beta02.txt b/core/core/api/restricted_1.2.0-beta02.txt
index 89456d6..1121902 100644
--- a/core/core/api/restricted_1.2.0-beta02.txt
+++ b/core/core/api/restricted_1.2.0-beta02.txt
@@ -1612,7 +1612,7 @@
}
public final class EnvironmentCompat {
- method public static String! getStorageState(java.io.File);
+ method public static String getStorageState(java.io.File);
field public static final String MEDIA_UNKNOWN = "unknown";
}
diff --git a/core/core/api/restricted_1.3.0-alpha01.txt b/core/core/api/restricted_1.3.0-alpha01.txt
new file mode 100644
index 0000000..1121902
--- /dev/null
+++ b/core/core/api/restricted_1.3.0-alpha01.txt
@@ -0,0 +1,3510 @@
+// Signature format: 3.0
+package android.support.v4.os {
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class ResultReceiver implements android.os.Parcelable {
+ ctor public ResultReceiver(android.os.Handler!);
+ method public int describeContents();
+ method protected void onReceiveResult(int, android.os.Bundle!);
+ method public void send(int, android.os.Bundle!);
+ method public void writeToParcel(android.os.Parcel!, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.os.ResultReceiver!>! CREATOR;
+ }
+
+}
+
+package androidx.core.accessibilityservice {
+
+ public final class AccessibilityServiceInfoCompat {
+ method public static String capabilityToString(int);
+ method public static String feedbackTypeToString(int);
+ method public static String? flagToString(int);
+ method public static int getCapabilities(android.accessibilityservice.AccessibilityServiceInfo);
+ method public static String? loadDescription(android.accessibilityservice.AccessibilityServiceInfo, android.content.pm.PackageManager);
+ field public static final int CAPABILITY_CAN_FILTER_KEY_EVENTS = 8; // 0x8
+ field public static final int CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 4; // 0x4
+ field public static final int CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION = 2; // 0x2
+ field public static final int CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT = 1; // 0x1
+ field public static final int FEEDBACK_ALL_MASK = -1; // 0xffffffff
+ field public static final int FEEDBACK_BRAILLE = 32; // 0x20
+ field public static final int FLAG_INCLUDE_NOT_IMPORTANT_VIEWS = 2; // 0x2
+ field public static final int FLAG_REPORT_VIEW_IDS = 16; // 0x10
+ field public static final int FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 8; // 0x8
+ field public static final int FLAG_REQUEST_FILTER_KEY_EVENTS = 32; // 0x20
+ field public static final int FLAG_REQUEST_TOUCH_EXPLORATION_MODE = 4; // 0x4
+ }
+
+}
+
+package androidx.core.app {
+
+ public class ActivityCompat extends androidx.core.content.ContextCompat {
+ ctor protected ActivityCompat();
+ method public static void finishAffinity(android.app.Activity);
+ method public static void finishAfterTransition(android.app.Activity);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.app.ActivityCompat.PermissionCompatDelegate! getPermissionCompatDelegate();
+ method public static android.net.Uri? getReferrer(android.app.Activity);
+ method @Deprecated public static boolean invalidateOptionsMenu(android.app.Activity!);
+ method public static void postponeEnterTransition(android.app.Activity);
+ method public static void recreate(android.app.Activity);
+ method public static androidx.core.view.DragAndDropPermissionsCompat? requestDragAndDropPermissions(android.app.Activity!, android.view.DragEvent!);
+ method public static void requestPermissions(android.app.Activity, String![], @IntRange(from=0) int);
+ method public static <T extends android.view.View> T requireViewById(android.app.Activity, @IdRes int);
+ method public static void setEnterSharedElementCallback(android.app.Activity, androidx.core.app.SharedElementCallback?);
+ method public static void setExitSharedElementCallback(android.app.Activity, androidx.core.app.SharedElementCallback?);
+ method public static void setPermissionCompatDelegate(androidx.core.app.ActivityCompat.PermissionCompatDelegate?);
+ method public static boolean shouldShowRequestPermissionRationale(android.app.Activity, String);
+ method public static void startActivityForResult(android.app.Activity, android.content.Intent, int, android.os.Bundle?);
+ method public static void startIntentSenderForResult(android.app.Activity, android.content.IntentSender, int, android.content.Intent?, int, int, int, android.os.Bundle?) throws android.content.IntentSender.SendIntentException;
+ method public static void startPostponedEnterTransition(android.app.Activity);
+ }
+
+ public static interface ActivityCompat.OnRequestPermissionsResultCallback {
+ method public void onRequestPermissionsResult(int, String![], int[]);
+ }
+
+ public static interface ActivityCompat.PermissionCompatDelegate {
+ method public boolean onActivityResult(android.app.Activity, @IntRange(from=0) int, int, android.content.Intent?);
+ method public boolean requestPermissions(android.app.Activity, String![], @IntRange(from=0) int);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static interface ActivityCompat.RequestPermissionsRequestCodeValidator {
+ method public void validateRequestPermissionsRequestCode(int);
+ }
+
+ public final class ActivityManagerCompat {
+ method public static boolean isLowRamDevice(android.app.ActivityManager);
+ }
+
+ public class ActivityOptionsCompat {
+ ctor protected ActivityOptionsCompat();
+ method public android.graphics.Rect? getLaunchBounds();
+ method public static androidx.core.app.ActivityOptionsCompat makeBasic();
+ method public static androidx.core.app.ActivityOptionsCompat makeClipRevealAnimation(android.view.View, int, int, int, int);
+ method public static androidx.core.app.ActivityOptionsCompat makeCustomAnimation(android.content.Context, int, int);
+ method public static androidx.core.app.ActivityOptionsCompat makeScaleUpAnimation(android.view.View, int, int, int, int);
+ method public static androidx.core.app.ActivityOptionsCompat makeSceneTransitionAnimation(android.app.Activity, android.view.View, String);
+ method public static androidx.core.app.ActivityOptionsCompat makeSceneTransitionAnimation(android.app.Activity, androidx.core.util.Pair<android.view.View!,java.lang.String!>!...);
+ method public static androidx.core.app.ActivityOptionsCompat makeTaskLaunchBehind();
+ method public static androidx.core.app.ActivityOptionsCompat makeThumbnailScaleUpAnimation(android.view.View, android.graphics.Bitmap, int, int);
+ method public void requestUsageTimeReport(android.app.PendingIntent);
+ method public androidx.core.app.ActivityOptionsCompat setLaunchBounds(android.graphics.Rect?);
+ method public android.os.Bundle? toBundle();
+ method public void update(androidx.core.app.ActivityOptionsCompat);
+ field public static final String EXTRA_USAGE_TIME_REPORT = "android.activity.usage_time";
+ field public static final String EXTRA_USAGE_TIME_REPORT_PACKAGES = "android.usage_time_packages";
+ }
+
+ public final class AlarmManagerCompat {
+ method public static void setAlarmClock(android.app.AlarmManager, long, android.app.PendingIntent, android.app.PendingIntent);
+ method public static void setAndAllowWhileIdle(android.app.AlarmManager, int, long, android.app.PendingIntent);
+ method public static void setExact(android.app.AlarmManager, int, long, android.app.PendingIntent);
+ method public static void setExactAndAllowWhileIdle(android.app.AlarmManager, int, long, android.app.PendingIntent);
+ }
+
+ @RequiresApi(28) public class AppComponentFactory extends android.app.AppComponentFactory {
+ ctor public AppComponentFactory();
+ method public final android.app.Activity instantiateActivity(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public android.app.Activity instantiateActivityCompat(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public final android.app.Application instantiateApplication(ClassLoader, String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public android.app.Application instantiateApplicationCompat(ClassLoader, String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public final android.content.ContentProvider instantiateProvider(ClassLoader, String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public android.content.ContentProvider instantiateProviderCompat(ClassLoader, String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public final android.content.BroadcastReceiver instantiateReceiver(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public android.content.BroadcastReceiver instantiateReceiverCompat(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public final android.app.Service instantiateService(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ method public android.app.Service instantiateServiceCompat(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+ }
+
+ public class AppLaunchChecker {
+ ctor @Deprecated public AppLaunchChecker();
+ method public static boolean hasStartedFromLauncher(android.content.Context);
+ method public static void onActivityCreate(android.app.Activity);
+ }
+
+ public final class AppOpsManagerCompat {
+ method public static int noteOp(android.content.Context, String, int, String);
+ method public static int noteOpNoThrow(android.content.Context, String, int, String);
+ method public static int noteProxyOp(android.content.Context, String, String);
+ method public static int noteProxyOpNoThrow(android.content.Context, String, String);
+ method public static String? permissionToOp(String);
+ field public static final int MODE_ALLOWED = 0; // 0x0
+ field public static final int MODE_DEFAULT = 3; // 0x3
+ field public static final int MODE_ERRORED = 2; // 0x2
+ field public static final int MODE_IGNORED = 1; // 0x1
+ }
+
+ public final class BundleCompat {
+ method public static android.os.IBinder? getBinder(android.os.Bundle, String?);
+ method public static void putBinder(android.os.Bundle, String?, android.os.IBinder?);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class ComponentActivity extends android.app.Activity implements androidx.core.view.KeyEventDispatcher.Component androidx.lifecycle.LifecycleOwner {
+ ctor public ComponentActivity();
+ method @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public <T extends androidx.core.app.ComponentActivity.ExtraData> T! getExtraData(Class<T!>!);
+ method public androidx.lifecycle.Lifecycle getLifecycle();
+ method @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void putExtraData(androidx.core.app.ComponentActivity.ExtraData!);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public boolean superDispatchKeyEvent(android.view.KeyEvent!);
+ }
+
+ @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static class ComponentActivity.ExtraData {
+ ctor @Deprecated public ComponentActivity.ExtraData();
+ }
+
+ @RequiresApi(api=28) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class CoreComponentFactory extends android.app.AppComponentFactory {
+ ctor public CoreComponentFactory();
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static interface CoreComponentFactory.CompatWrapped {
+ method public Object! getWrapper();
+ }
+
+ public class DialogCompat {
+ method public static android.view.View requireViewById(android.app.Dialog, int);
+ }
+
+ public class FrameMetricsAggregator {
+ ctor public FrameMetricsAggregator();
+ ctor public FrameMetricsAggregator(@androidx.core.app.FrameMetricsAggregator.MetricType int);
+ method public void add(android.app.Activity);
+ method public android.util.SparseIntArray![]? getMetrics();
+ method public android.util.SparseIntArray![]? remove(android.app.Activity);
+ method public android.util.SparseIntArray![]? reset();
+ method public android.util.SparseIntArray![]? stop();
+ field public static final int ANIMATION_DURATION = 256; // 0x100
+ field public static final int ANIMATION_INDEX = 8; // 0x8
+ field public static final int COMMAND_DURATION = 32; // 0x20
+ field public static final int COMMAND_INDEX = 5; // 0x5
+ field public static final int DELAY_DURATION = 128; // 0x80
+ field public static final int DELAY_INDEX = 7; // 0x7
+ field public static final int DRAW_DURATION = 8; // 0x8
+ field public static final int DRAW_INDEX = 3; // 0x3
+ field public static final int EVERY_DURATION = 511; // 0x1ff
+ field public static final int INPUT_DURATION = 2; // 0x2
+ field public static final int INPUT_INDEX = 1; // 0x1
+ field public static final int LAYOUT_MEASURE_DURATION = 4; // 0x4
+ field public static final int LAYOUT_MEASURE_INDEX = 2; // 0x2
+ field public static final int SWAP_DURATION = 64; // 0x40
+ field public static final int SWAP_INDEX = 6; // 0x6
+ field public static final int SYNC_DURATION = 16; // 0x10
+ field public static final int SYNC_INDEX = 4; // 0x4
+ field public static final int TOTAL_DURATION = 1; // 0x1
+ field public static final int TOTAL_INDEX = 0; // 0x0
+ }
+
+ @IntDef(flag=true, value={androidx.core.app.FrameMetricsAggregator.TOTAL_DURATION, androidx.core.app.FrameMetricsAggregator.INPUT_DURATION, androidx.core.app.FrameMetricsAggregator.LAYOUT_MEASURE_DURATION, androidx.core.app.FrameMetricsAggregator.DRAW_DURATION, androidx.core.app.FrameMetricsAggregator.SYNC_DURATION, androidx.core.app.FrameMetricsAggregator.COMMAND_DURATION, androidx.core.app.FrameMetricsAggregator.SWAP_DURATION, androidx.core.app.FrameMetricsAggregator.DELAY_DURATION, androidx.core.app.FrameMetricsAggregator.ANIMATION_DURATION, androidx.core.app.FrameMetricsAggregator.EVERY_DURATION}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface FrameMetricsAggregator.MetricType {
+ }
+
+ public abstract class JobIntentService extends android.app.Service {
+ ctor public JobIntentService();
+ method public static void enqueueWork(android.content.Context, Class<?>, int, android.content.Intent);
+ method public static void enqueueWork(android.content.Context, android.content.ComponentName, int, android.content.Intent);
+ method public boolean isStopped();
+ method public android.os.IBinder! onBind(android.content.Intent);
+ method protected abstract void onHandleWork(android.content.Intent);
+ method public boolean onStopCurrentWork();
+ method public void setInterruptIfStopped(boolean);
+ }
+
+ public final class NavUtils {
+ method public static android.content.Intent? getParentActivityIntent(android.app.Activity);
+ method public static android.content.Intent? getParentActivityIntent(android.content.Context, Class<?>) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public static android.content.Intent? getParentActivityIntent(android.content.Context, android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public static String? getParentActivityName(android.app.Activity);
+ method public static String? getParentActivityName(android.content.Context, android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public static void navigateUpFromSameTask(android.app.Activity);
+ method public static void navigateUpTo(android.app.Activity, android.content.Intent);
+ method public static boolean shouldUpRecreateTask(android.app.Activity, android.content.Intent);
+ field public static final String PARENT_ACTIVITY = "android.support.PARENT_ACTIVITY";
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface NotificationBuilderWithBuilderAccessor {
+ method public android.app.Notification.Builder! getBuilder();
+ }
+
+ public class NotificationCompat {
+ ctor @Deprecated public NotificationCompat();
+ method public static androidx.core.app.NotificationCompat.Action! getAction(android.app.Notification!, int);
+ method public static int getActionCount(android.app.Notification!);
+ method public static boolean getAllowSystemGeneratedContextualActions(android.app.Notification!);
+ method public static int getBadgeIconType(android.app.Notification!);
+ method public static androidx.core.app.NotificationCompat.BubbleMetadata? getBubbleMetadata(android.app.Notification);
+ method public static String! getCategory(android.app.Notification!);
+ method public static String! getChannelId(android.app.Notification!);
+ method @RequiresApi(19) public static CharSequence! getContentTitle(android.app.Notification!);
+ method public static android.os.Bundle? getExtras(android.app.Notification!);
+ method public static String! getGroup(android.app.Notification!);
+ method @androidx.core.app.NotificationCompat.GroupAlertBehavior public static int getGroupAlertBehavior(android.app.Notification!);
+ method @RequiresApi(21) public static java.util.List<androidx.core.app.NotificationCompat.Action!>! getInvisibleActions(android.app.Notification!);
+ method public static boolean getLocalOnly(android.app.Notification!);
+ method public static String! getShortcutId(android.app.Notification!);
+ method public static String! getSortKey(android.app.Notification!);
+ method public static long getTimeoutAfter(android.app.Notification!);
+ method public static boolean isGroupSummary(android.app.Notification!);
+ field public static final int BADGE_ICON_LARGE = 2; // 0x2
+ field public static final int BADGE_ICON_NONE = 0; // 0x0
+ field public static final int BADGE_ICON_SMALL = 1; // 0x1
+ field public static final String CATEGORY_ALARM = "alarm";
+ field public static final String CATEGORY_CALL = "call";
+ field public static final String CATEGORY_EMAIL = "email";
+ field public static final String CATEGORY_ERROR = "err";
+ field public static final String CATEGORY_EVENT = "event";
+ field public static final String CATEGORY_MESSAGE = "msg";
+ field public static final String CATEGORY_NAVIGATION = "navigation";
+ field public static final String CATEGORY_PROGRESS = "progress";
+ field public static final String CATEGORY_PROMO = "promo";
+ field public static final String CATEGORY_RECOMMENDATION = "recommendation";
+ field public static final String CATEGORY_REMINDER = "reminder";
+ field public static final String CATEGORY_SERVICE = "service";
+ field public static final String CATEGORY_SOCIAL = "social";
+ field public static final String CATEGORY_STATUS = "status";
+ field public static final String CATEGORY_SYSTEM = "sys";
+ field public static final String CATEGORY_TRANSPORT = "transport";
+ field @ColorInt public static final int COLOR_DEFAULT = 0; // 0x0
+ field public static final int DEFAULT_ALL = -1; // 0xffffffff
+ field public static final int DEFAULT_LIGHTS = 4; // 0x4
+ field public static final int DEFAULT_SOUND = 1; // 0x1
+ field public static final int DEFAULT_VIBRATE = 2; // 0x2
+ field public static final String EXTRA_AUDIO_CONTENTS_URI = "android.audioContents";
+ field public static final String EXTRA_BACKGROUND_IMAGE_URI = "android.backgroundImageUri";
+ field public static final String EXTRA_BIG_TEXT = "android.bigText";
+ field public static final String EXTRA_CHRONOMETER_COUNT_DOWN = "android.chronometerCountDown";
+ field public static final String EXTRA_COMPACT_ACTIONS = "android.compactActions";
+ field public static final String EXTRA_CONVERSATION_TITLE = "android.conversationTitle";
+ field public static final String EXTRA_HIDDEN_CONVERSATION_TITLE = "android.hiddenConversationTitle";
+ field public static final String EXTRA_INFO_TEXT = "android.infoText";
+ field public static final String EXTRA_IS_GROUP_CONVERSATION = "android.isGroupConversation";
+ field public static final String EXTRA_LARGE_ICON = "android.largeIcon";
+ field public static final String EXTRA_LARGE_ICON_BIG = "android.largeIcon.big";
+ field public static final String EXTRA_MEDIA_SESSION = "android.mediaSession";
+ field public static final String EXTRA_MESSAGES = "android.messages";
+ field public static final String EXTRA_MESSAGING_STYLE_USER = "android.messagingStyleUser";
+ field public static final String EXTRA_PEOPLE = "android.people";
+ field public static final String EXTRA_PICTURE = "android.picture";
+ field public static final String EXTRA_PROGRESS = "android.progress";
+ field public static final String EXTRA_PROGRESS_INDETERMINATE = "android.progressIndeterminate";
+ field public static final String EXTRA_PROGRESS_MAX = "android.progressMax";
+ field public static final String EXTRA_REMOTE_INPUT_HISTORY = "android.remoteInputHistory";
+ field public static final String EXTRA_SELF_DISPLAY_NAME = "android.selfDisplayName";
+ field public static final String EXTRA_SHOW_CHRONOMETER = "android.showChronometer";
+ field public static final String EXTRA_SHOW_WHEN = "android.showWhen";
+ field public static final String EXTRA_SMALL_ICON = "android.icon";
+ field public static final String EXTRA_SUB_TEXT = "android.subText";
+ field public static final String EXTRA_SUMMARY_TEXT = "android.summaryText";
+ field public static final String EXTRA_TEMPLATE = "android.template";
+ field public static final String EXTRA_TEXT = "android.text";
+ field public static final String EXTRA_TEXT_LINES = "android.textLines";
+ field public static final String EXTRA_TITLE = "android.title";
+ field public static final String EXTRA_TITLE_BIG = "android.title.big";
+ field public static final int FLAG_AUTO_CANCEL = 16; // 0x10
+ field public static final int FLAG_BUBBLE = 4096; // 0x1000
+ field public static final int FLAG_FOREGROUND_SERVICE = 64; // 0x40
+ field public static final int FLAG_GROUP_SUMMARY = 512; // 0x200
+ field @Deprecated public static final int FLAG_HIGH_PRIORITY = 128; // 0x80
+ field public static final int FLAG_INSISTENT = 4; // 0x4
+ field public static final int FLAG_LOCAL_ONLY = 256; // 0x100
+ field public static final int FLAG_NO_CLEAR = 32; // 0x20
+ field public static final int FLAG_ONGOING_EVENT = 2; // 0x2
+ field public static final int FLAG_ONLY_ALERT_ONCE = 8; // 0x8
+ field public static final int FLAG_SHOW_LIGHTS = 1; // 0x1
+ field public static final int GROUP_ALERT_ALL = 0; // 0x0
+ field public static final int GROUP_ALERT_CHILDREN = 2; // 0x2
+ field public static final int GROUP_ALERT_SUMMARY = 1; // 0x1
+ field public static final int PRIORITY_DEFAULT = 0; // 0x0
+ field public static final int PRIORITY_HIGH = 1; // 0x1
+ field public static final int PRIORITY_LOW = -1; // 0xffffffff
+ field public static final int PRIORITY_MAX = 2; // 0x2
+ field public static final int PRIORITY_MIN = -2; // 0xfffffffe
+ field public static final int STREAM_DEFAULT = -1; // 0xffffffff
+ field public static final int VISIBILITY_PRIVATE = 0; // 0x0
+ field public static final int VISIBILITY_PUBLIC = 1; // 0x1
+ field public static final int VISIBILITY_SECRET = -1; // 0xffffffff
+ }
+
+ public static class NotificationCompat.Action {
+ ctor public NotificationCompat.Action(int, CharSequence!, android.app.PendingIntent!);
+ ctor public NotificationCompat.Action(androidx.core.graphics.drawable.IconCompat?, CharSequence?, android.app.PendingIntent?);
+ method public android.app.PendingIntent! getActionIntent();
+ method public boolean getAllowGeneratedReplies();
+ method public androidx.core.app.RemoteInput![]! getDataOnlyRemoteInputs();
+ method public android.os.Bundle! getExtras();
+ method @Deprecated public int getIcon();
+ method public androidx.core.graphics.drawable.IconCompat? getIconCompat();
+ method public androidx.core.app.RemoteInput![]! getRemoteInputs();
+ method @androidx.core.app.NotificationCompat.Action.SemanticAction public int getSemanticAction();
+ method public boolean getShowsUserInterface();
+ method public CharSequence! getTitle();
+ method public boolean isContextual();
+ field public static final int SEMANTIC_ACTION_ARCHIVE = 5; // 0x5
+ field public static final int SEMANTIC_ACTION_CALL = 10; // 0xa
+ field public static final int SEMANTIC_ACTION_DELETE = 4; // 0x4
+ field public static final int SEMANTIC_ACTION_MARK_AS_READ = 2; // 0x2
+ field public static final int SEMANTIC_ACTION_MARK_AS_UNREAD = 3; // 0x3
+ field public static final int SEMANTIC_ACTION_MUTE = 6; // 0x6
+ field public static final int SEMANTIC_ACTION_NONE = 0; // 0x0
+ field public static final int SEMANTIC_ACTION_REPLY = 1; // 0x1
+ field public static final int SEMANTIC_ACTION_THUMBS_DOWN = 9; // 0x9
+ field public static final int SEMANTIC_ACTION_THUMBS_UP = 8; // 0x8
+ field public static final int SEMANTIC_ACTION_UNMUTE = 7; // 0x7
+ field public android.app.PendingIntent! actionIntent;
+ field @Deprecated public int icon;
+ field public CharSequence! title;
+ }
+
+ public static final class NotificationCompat.Action.Builder {
+ ctor public NotificationCompat.Action.Builder(androidx.core.graphics.drawable.IconCompat?, CharSequence?, android.app.PendingIntent?);
+ ctor public NotificationCompat.Action.Builder(int, CharSequence!, android.app.PendingIntent!);
+ ctor public NotificationCompat.Action.Builder(androidx.core.app.NotificationCompat.Action!);
+ method public androidx.core.app.NotificationCompat.Action.Builder! addExtras(android.os.Bundle!);
+ method public androidx.core.app.NotificationCompat.Action.Builder! addRemoteInput(androidx.core.app.RemoteInput!);
+ method public androidx.core.app.NotificationCompat.Action! build();
+ method public androidx.core.app.NotificationCompat.Action.Builder! extend(androidx.core.app.NotificationCompat.Action.Extender!);
+ method public android.os.Bundle! getExtras();
+ method public androidx.core.app.NotificationCompat.Action.Builder! setAllowGeneratedReplies(boolean);
+ method public androidx.core.app.NotificationCompat.Action.Builder setContextual(boolean);
+ method public androidx.core.app.NotificationCompat.Action.Builder! setSemanticAction(@androidx.core.app.NotificationCompat.Action.SemanticAction int);
+ method public androidx.core.app.NotificationCompat.Action.Builder! setShowsUserInterface(boolean);
+ }
+
+ public static interface NotificationCompat.Action.Extender {
+ method public androidx.core.app.NotificationCompat.Action.Builder! extend(androidx.core.app.NotificationCompat.Action.Builder!);
+ }
+
+ @IntDef({androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_NONE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_REPLY, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_MARK_AS_READ, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_MARK_AS_UNREAD, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_DELETE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_ARCHIVE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_MUTE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_UNMUTE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_THUMBS_UP, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_THUMBS_DOWN, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_CALL}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface NotificationCompat.Action.SemanticAction {
+ }
+
+ public static final class NotificationCompat.Action.WearableExtender implements androidx.core.app.NotificationCompat.Action.Extender {
+ ctor public NotificationCompat.Action.WearableExtender();
+ ctor public NotificationCompat.Action.WearableExtender(androidx.core.app.NotificationCompat.Action!);
+ method public androidx.core.app.NotificationCompat.Action.WearableExtender! clone();
+ method public androidx.core.app.NotificationCompat.Action.Builder! extend(androidx.core.app.NotificationCompat.Action.Builder!);
+ method @Deprecated public CharSequence! getCancelLabel();
+ method @Deprecated public CharSequence! getConfirmLabel();
+ method public boolean getHintDisplayActionInline();
+ method public boolean getHintLaunchesActivity();
+ method @Deprecated public CharSequence! getInProgressLabel();
+ method public boolean isAvailableOffline();
+ method public androidx.core.app.NotificationCompat.Action.WearableExtender! setAvailableOffline(boolean);
+ method @Deprecated public androidx.core.app.NotificationCompat.Action.WearableExtender! setCancelLabel(CharSequence!);
+ method @Deprecated public androidx.core.app.NotificationCompat.Action.WearableExtender! setConfirmLabel(CharSequence!);
+ method public androidx.core.app.NotificationCompat.Action.WearableExtender! setHintDisplayActionInline(boolean);
+ method public androidx.core.app.NotificationCompat.Action.WearableExtender! setHintLaunchesActivity(boolean);
+ method @Deprecated public androidx.core.app.NotificationCompat.Action.WearableExtender! setInProgressLabel(CharSequence!);
+ }
+
+ @IntDef({androidx.core.app.NotificationCompat.BADGE_ICON_NONE, androidx.core.app.NotificationCompat.BADGE_ICON_SMALL, androidx.core.app.NotificationCompat.BADGE_ICON_LARGE}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface NotificationCompat.BadgeIconType {
+ }
+
+ public static class NotificationCompat.BigPictureStyle extends androidx.core.app.NotificationCompat.Style {
+ ctor public NotificationCompat.BigPictureStyle();
+ ctor public NotificationCompat.BigPictureStyle(androidx.core.app.NotificationCompat.Builder!);
+ method public androidx.core.app.NotificationCompat.BigPictureStyle! bigLargeIcon(android.graphics.Bitmap!);
+ method public androidx.core.app.NotificationCompat.BigPictureStyle! bigPicture(android.graphics.Bitmap!);
+ method public androidx.core.app.NotificationCompat.BigPictureStyle! setBigContentTitle(CharSequence!);
+ method public androidx.core.app.NotificationCompat.BigPictureStyle! setSummaryText(CharSequence!);
+ }
+
+ public static class NotificationCompat.BigTextStyle extends androidx.core.app.NotificationCompat.Style {
+ ctor public NotificationCompat.BigTextStyle();
+ ctor public NotificationCompat.BigTextStyle(androidx.core.app.NotificationCompat.Builder!);
+ method public androidx.core.app.NotificationCompat.BigTextStyle! bigText(CharSequence!);
+ method public androidx.core.app.NotificationCompat.BigTextStyle! setBigContentTitle(CharSequence!);
+ method public androidx.core.app.NotificationCompat.BigTextStyle! setSummaryText(CharSequence!);
+ }
+
+ public static final class NotificationCompat.BubbleMetadata {
+ method @RequiresApi(29) public static androidx.core.app.NotificationCompat.BubbleMetadata? fromPlatform(android.app.Notification.BubbleMetadata?);
+ method public boolean getAutoExpandBubble();
+ method public android.app.PendingIntent? getDeleteIntent();
+ method @Dimension(unit=androidx.annotation.Dimension.DP) public int getDesiredHeight();
+ method @DimenRes public int getDesiredHeightResId();
+ method public androidx.core.graphics.drawable.IconCompat getIcon();
+ method public android.app.PendingIntent getIntent();
+ method public boolean isNotificationSuppressed();
+ method @RequiresApi(29) public static android.app.Notification.BubbleMetadata? toPlatform(androidx.core.app.NotificationCompat.BubbleMetadata?);
+ }
+
+ public static final class NotificationCompat.BubbleMetadata.Builder {
+ ctor public NotificationCompat.BubbleMetadata.Builder();
+ method public androidx.core.app.NotificationCompat.BubbleMetadata build();
+ method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setAutoExpandBubble(boolean);
+ method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setDeleteIntent(android.app.PendingIntent?);
+ method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setDesiredHeight(@Dimension(unit=androidx.annotation.Dimension.DP) int);
+ method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setDesiredHeightResId(@DimenRes int);
+ method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setIcon(androidx.core.graphics.drawable.IconCompat);
+ method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setIntent(android.app.PendingIntent);
+ method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setSuppressNotification(boolean);
+ }
+
+ public static class NotificationCompat.Builder {
+ ctor public NotificationCompat.Builder(android.content.Context, String);
+ ctor @Deprecated public NotificationCompat.Builder(android.content.Context!);
+ method public androidx.core.app.NotificationCompat.Builder! addAction(int, CharSequence!, android.app.PendingIntent!);
+ method public androidx.core.app.NotificationCompat.Builder! addAction(androidx.core.app.NotificationCompat.Action!);
+ method public androidx.core.app.NotificationCompat.Builder! addExtras(android.os.Bundle!);
+ method @RequiresApi(21) public androidx.core.app.NotificationCompat.Builder! addInvisibleAction(int, CharSequence!, android.app.PendingIntent!);
+ method @RequiresApi(21) public androidx.core.app.NotificationCompat.Builder! addInvisibleAction(androidx.core.app.NotificationCompat.Action!);
+ method public androidx.core.app.NotificationCompat.Builder! addPerson(String!);
+ method public android.app.Notification! build();
+ method public androidx.core.app.NotificationCompat.Builder! extend(androidx.core.app.NotificationCompat.Extender!);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.widget.RemoteViews! getBigContentView();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.core.app.NotificationCompat.BubbleMetadata? getBubbleMetadata();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int getColor();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.widget.RemoteViews! getContentView();
+ method public android.os.Bundle! getExtras();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.widget.RemoteViews! getHeadsUpContentView();
+ method @Deprecated public android.app.Notification! getNotification();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int getPriority();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public long getWhenIfShowing();
+ method protected static CharSequence! limitCharSequenceLength(CharSequence!);
+ method public androidx.core.app.NotificationCompat.Builder setAllowSystemGeneratedContextualActions(boolean);
+ method public androidx.core.app.NotificationCompat.Builder! setAutoCancel(boolean);
+ method public androidx.core.app.NotificationCompat.Builder! setBadgeIconType(@androidx.core.app.NotificationCompat.BadgeIconType int);
+ method public androidx.core.app.NotificationCompat.Builder setBubbleMetadata(androidx.core.app.NotificationCompat.BubbleMetadata?);
+ method public androidx.core.app.NotificationCompat.Builder! setCategory(String!);
+ method public androidx.core.app.NotificationCompat.Builder! setChannelId(String);
+ method @RequiresApi(24) public androidx.core.app.NotificationCompat.Builder setChronometerCountDown(boolean);
+ method public androidx.core.app.NotificationCompat.Builder! setColor(@ColorInt int);
+ method public androidx.core.app.NotificationCompat.Builder! setColorized(boolean);
+ method public androidx.core.app.NotificationCompat.Builder! setContent(android.widget.RemoteViews!);
+ method public androidx.core.app.NotificationCompat.Builder! setContentInfo(CharSequence!);
+ method public androidx.core.app.NotificationCompat.Builder! setContentIntent(android.app.PendingIntent!);
+ method public androidx.core.app.NotificationCompat.Builder! setContentText(CharSequence!);
+ method public androidx.core.app.NotificationCompat.Builder! setContentTitle(CharSequence!);
+ method public androidx.core.app.NotificationCompat.Builder! setCustomBigContentView(android.widget.RemoteViews!);
+ method public androidx.core.app.NotificationCompat.Builder! setCustomContentView(android.widget.RemoteViews!);
+ method public androidx.core.app.NotificationCompat.Builder! setCustomHeadsUpContentView(android.widget.RemoteViews!);
+ method public androidx.core.app.NotificationCompat.Builder! setDefaults(int);
+ method public androidx.core.app.NotificationCompat.Builder! setDeleteIntent(android.app.PendingIntent!);
+ method public androidx.core.app.NotificationCompat.Builder! setExtras(android.os.Bundle!);
+ method public androidx.core.app.NotificationCompat.Builder! setFullScreenIntent(android.app.PendingIntent!, boolean);
+ method public androidx.core.app.NotificationCompat.Builder! setGroup(String!);
+ method public androidx.core.app.NotificationCompat.Builder! setGroupAlertBehavior(@androidx.core.app.NotificationCompat.GroupAlertBehavior int);
+ method public androidx.core.app.NotificationCompat.Builder! setGroupSummary(boolean);
+ method public androidx.core.app.NotificationCompat.Builder! setLargeIcon(android.graphics.Bitmap!);
+ method public androidx.core.app.NotificationCompat.Builder! setLights(@ColorInt int, int, int);
+ method public androidx.core.app.NotificationCompat.Builder! setLocalOnly(boolean);
+ method public androidx.core.app.NotificationCompat.Builder! setNumber(int);
+ method public androidx.core.app.NotificationCompat.Builder! setOngoing(boolean);
+ method public androidx.core.app.NotificationCompat.Builder! setOnlyAlertOnce(boolean);
+ method public androidx.core.app.NotificationCompat.Builder! setPriority(int);
+ method public androidx.core.app.NotificationCompat.Builder! setProgress(int, int, boolean);
+ method public androidx.core.app.NotificationCompat.Builder! setPublicVersion(android.app.Notification!);
+ method public androidx.core.app.NotificationCompat.Builder! setRemoteInputHistory(CharSequence![]!);
+ method public androidx.core.app.NotificationCompat.Builder! setShortcutId(String!);
+ method public androidx.core.app.NotificationCompat.Builder! setShowWhen(boolean);
+ method public androidx.core.app.NotificationCompat.Builder! setSmallIcon(int);
+ method public androidx.core.app.NotificationCompat.Builder! setSmallIcon(int, int);
+ method public androidx.core.app.NotificationCompat.Builder! setSortKey(String!);
+ method public androidx.core.app.NotificationCompat.Builder! setSound(android.net.Uri!);
+ method public androidx.core.app.NotificationCompat.Builder! setSound(android.net.Uri!, @androidx.core.app.NotificationCompat.StreamType int);
+ method public androidx.core.app.NotificationCompat.Builder! setStyle(androidx.core.app.NotificationCompat.Style!);
+ method public androidx.core.app.NotificationCompat.Builder! setSubText(CharSequence!);
+ method public androidx.core.app.NotificationCompat.Builder! setTicker(CharSequence!);
+ method public androidx.core.app.NotificationCompat.Builder! setTicker(CharSequence!, android.widget.RemoteViews!);
+ method public androidx.core.app.NotificationCompat.Builder! setTimeoutAfter(long);
+ method public androidx.core.app.NotificationCompat.Builder! setUsesChronometer(boolean);
+ method public androidx.core.app.NotificationCompat.Builder! setVibrate(long[]!);
+ method public androidx.core.app.NotificationCompat.Builder! setVisibility(@androidx.core.app.NotificationCompat.NotificationVisibility int);
+ method public androidx.core.app.NotificationCompat.Builder! setWhen(long);
+ field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public java.util.ArrayList<androidx.core.app.NotificationCompat.Action!>! mActions;
+ field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.Context! mContext;
+ field @Deprecated public java.util.ArrayList<java.lang.String!>! mPeople;
+ }
+
+ public static final class NotificationCompat.CarExtender implements androidx.core.app.NotificationCompat.Extender {
+ ctor public NotificationCompat.CarExtender();
+ ctor public NotificationCompat.CarExtender(android.app.Notification!);
+ method public androidx.core.app.NotificationCompat.Builder! extend(androidx.core.app.NotificationCompat.Builder!);
+ method @ColorInt public int getColor();
+ method public android.graphics.Bitmap! getLargeIcon();
+ method public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation! getUnreadConversation();
+ method public androidx.core.app.NotificationCompat.CarExtender! setColor(@ColorInt int);
+ method public androidx.core.app.NotificationCompat.CarExtender! setLargeIcon(android.graphics.Bitmap!);
+ method public androidx.core.app.NotificationCompat.CarExtender! setUnreadConversation(androidx.core.app.NotificationCompat.CarExtender.UnreadConversation!);
+ }
+
+ public static class NotificationCompat.CarExtender.UnreadConversation {
+ method public long getLatestTimestamp();
+ method public String![]! getMessages();
+ method public String! getParticipant();
+ method public String![]! getParticipants();
+ method public android.app.PendingIntent! getReadPendingIntent();
+ method public androidx.core.app.RemoteInput! getRemoteInput();
+ method public android.app.PendingIntent! getReplyPendingIntent();
+ }
+
+ public static class NotificationCompat.CarExtender.UnreadConversation.Builder {
+ ctor public NotificationCompat.CarExtender.UnreadConversation.Builder(String!);
+ method public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder! addMessage(String!);
+ method public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation! build();
+ method public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder! setLatestTimestamp(long);
+ method public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder! setReadPendingIntent(android.app.PendingIntent!);
+ method public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder! setReplyAction(android.app.PendingIntent!, androidx.core.app.RemoteInput!);
+ }
+
+ public static class NotificationCompat.DecoratedCustomViewStyle extends androidx.core.app.NotificationCompat.Style {
+ ctor public NotificationCompat.DecoratedCustomViewStyle();
+ }
+
+ public static interface NotificationCompat.Extender {
+ method public androidx.core.app.NotificationCompat.Builder! extend(androidx.core.app.NotificationCompat.Builder!);
+ }
+
+ @IntDef({androidx.core.app.NotificationCompat.GROUP_ALERT_ALL, androidx.core.app.NotificationCompat.GROUP_ALERT_SUMMARY, androidx.core.app.NotificationCompat.GROUP_ALERT_CHILDREN}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface NotificationCompat.GroupAlertBehavior {
+ }
+
+ public static class NotificationCompat.InboxStyle extends androidx.core.app.NotificationCompat.Style {
+ ctor public NotificationCompat.InboxStyle();
+ ctor public NotificationCompat.InboxStyle(androidx.core.app.NotificationCompat.Builder!);
+ method public androidx.core.app.NotificationCompat.InboxStyle! addLine(CharSequence!);
+ method public androidx.core.app.NotificationCompat.InboxStyle! setBigContentTitle(CharSequence!);
+ method public androidx.core.app.NotificationCompat.InboxStyle! setSummaryText(CharSequence!);
+ }
+
+ public static class NotificationCompat.MessagingStyle extends androidx.core.app.NotificationCompat.Style {
+ ctor @Deprecated public NotificationCompat.MessagingStyle(CharSequence);
+ ctor public NotificationCompat.MessagingStyle(androidx.core.app.Person);
+ method @Deprecated public androidx.core.app.NotificationCompat.MessagingStyle! addMessage(CharSequence!, long, CharSequence!);
+ method public androidx.core.app.NotificationCompat.MessagingStyle! addMessage(CharSequence!, long, androidx.core.app.Person!);
+ method public androidx.core.app.NotificationCompat.MessagingStyle! addMessage(androidx.core.app.NotificationCompat.MessagingStyle.Message!);
+ method public static androidx.core.app.NotificationCompat.MessagingStyle? extractMessagingStyleFromNotification(android.app.Notification!);
+ method public CharSequence? getConversationTitle();
+ method public java.util.List<androidx.core.app.NotificationCompat.MessagingStyle.Message!>! getMessages();
+ method public androidx.core.app.Person! getUser();
+ method @Deprecated public CharSequence! getUserDisplayName();
+ method public boolean isGroupConversation();
+ method public androidx.core.app.NotificationCompat.MessagingStyle! setConversationTitle(CharSequence?);
+ method public androidx.core.app.NotificationCompat.MessagingStyle! setGroupConversation(boolean);
+ field public static final int MAXIMUM_RETAINED_MESSAGES = 25; // 0x19
+ }
+
+ public static final class NotificationCompat.MessagingStyle.Message {
+ ctor public NotificationCompat.MessagingStyle.Message(CharSequence!, long, androidx.core.app.Person?);
+ ctor @Deprecated public NotificationCompat.MessagingStyle.Message(CharSequence!, long, CharSequence!);
+ method public String? getDataMimeType();
+ method public android.net.Uri? getDataUri();
+ method public android.os.Bundle getExtras();
+ method public androidx.core.app.Person? getPerson();
+ method @Deprecated public CharSequence? getSender();
+ method public CharSequence getText();
+ method public long getTimestamp();
+ method public androidx.core.app.NotificationCompat.MessagingStyle.Message! setData(String!, android.net.Uri!);
+ }
+
+ @IntDef({androidx.core.app.NotificationCompat.VISIBILITY_PUBLIC, androidx.core.app.NotificationCompat.VISIBILITY_PRIVATE, androidx.core.app.NotificationCompat.VISIBILITY_SECRET}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface NotificationCompat.NotificationVisibility {
+ }
+
+ @IntDef({android.media.AudioManager.STREAM_VOICE_CALL, android.media.AudioManager.STREAM_SYSTEM, android.media.AudioManager.STREAM_RING, android.media.AudioManager.STREAM_MUSIC, android.media.AudioManager.STREAM_ALARM, android.media.AudioManager.STREAM_NOTIFICATION, android.media.AudioManager.STREAM_DTMF, android.media.AudioManager.STREAM_ACCESSIBILITY}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface NotificationCompat.StreamType {
+ }
+
+ public abstract static class NotificationCompat.Style {
+ ctor public NotificationCompat.Style();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void addCompatExtras(android.os.Bundle!);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void apply(androidx.core.app.NotificationBuilderWithBuilderAccessor!);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.widget.RemoteViews! applyStandardTemplate(boolean, int, boolean);
+ method public android.app.Notification! build();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void buildIntoRemoteViews(android.widget.RemoteViews!, android.widget.RemoteViews!);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.Bitmap! createColoredBitmap(int, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.widget.RemoteViews! makeBigContentView(androidx.core.app.NotificationBuilderWithBuilderAccessor!);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.widget.RemoteViews! makeContentView(androidx.core.app.NotificationBuilderWithBuilderAccessor!);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.widget.RemoteViews! makeHeadsUpContentView(androidx.core.app.NotificationBuilderWithBuilderAccessor!);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) protected void restoreFromCompatExtras(android.os.Bundle!);
+ method public void setBuilder(androidx.core.app.NotificationCompat.Builder!);
+ field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) protected androidx.core.app.NotificationCompat.Builder! mBuilder;
+ }
+
+ public static final class NotificationCompat.WearableExtender implements androidx.core.app.NotificationCompat.Extender {
+ ctor public NotificationCompat.WearableExtender();
+ ctor public NotificationCompat.WearableExtender(android.app.Notification!);
+ method public androidx.core.app.NotificationCompat.WearableExtender! addAction(androidx.core.app.NotificationCompat.Action!);
+ method public androidx.core.app.NotificationCompat.WearableExtender! addActions(java.util.List<androidx.core.app.NotificationCompat.Action!>!);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! addPage(android.app.Notification!);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! addPages(java.util.List<android.app.Notification!>!);
+ method public androidx.core.app.NotificationCompat.WearableExtender! clearActions();
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! clearPages();
+ method public androidx.core.app.NotificationCompat.WearableExtender! clone();
+ method public androidx.core.app.NotificationCompat.Builder! extend(androidx.core.app.NotificationCompat.Builder!);
+ method public java.util.List<androidx.core.app.NotificationCompat.Action!>! getActions();
+ method @Deprecated public android.graphics.Bitmap! getBackground();
+ method public String! getBridgeTag();
+ method public int getContentAction();
+ method @Deprecated public int getContentIcon();
+ method @Deprecated public int getContentIconGravity();
+ method public boolean getContentIntentAvailableOffline();
+ method @Deprecated public int getCustomContentHeight();
+ method @Deprecated public int getCustomSizePreset();
+ method public String! getDismissalId();
+ method @Deprecated public android.app.PendingIntent! getDisplayIntent();
+ method @Deprecated public int getGravity();
+ method @Deprecated public boolean getHintAmbientBigPicture();
+ method @Deprecated public boolean getHintAvoidBackgroundClipping();
+ method public boolean getHintContentIntentLaunchesActivity();
+ method @Deprecated public boolean getHintHideIcon();
+ method @Deprecated public int getHintScreenTimeout();
+ method @Deprecated public boolean getHintShowBackgroundOnly();
+ method @Deprecated public java.util.List<android.app.Notification!>! getPages();
+ method public boolean getStartScrollBottom();
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setBackground(android.graphics.Bitmap!);
+ method public androidx.core.app.NotificationCompat.WearableExtender! setBridgeTag(String!);
+ method public androidx.core.app.NotificationCompat.WearableExtender! setContentAction(int);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setContentIcon(int);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setContentIconGravity(int);
+ method public androidx.core.app.NotificationCompat.WearableExtender! setContentIntentAvailableOffline(boolean);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setCustomContentHeight(int);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setCustomSizePreset(int);
+ method public androidx.core.app.NotificationCompat.WearableExtender! setDismissalId(String!);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setDisplayIntent(android.app.PendingIntent!);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setGravity(int);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setHintAmbientBigPicture(boolean);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setHintAvoidBackgroundClipping(boolean);
+ method public androidx.core.app.NotificationCompat.WearableExtender! setHintContentIntentLaunchesActivity(boolean);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setHintHideIcon(boolean);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setHintScreenTimeout(int);
+ method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setHintShowBackgroundOnly(boolean);
+ method public androidx.core.app.NotificationCompat.WearableExtender! setStartScrollBottom(boolean);
+ field @Deprecated public static final int SCREEN_TIMEOUT_LONG = -1; // 0xffffffff
+ field @Deprecated public static final int SCREEN_TIMEOUT_SHORT = 0; // 0x0
+ field @Deprecated public static final int SIZE_DEFAULT = 0; // 0x0
+ field @Deprecated public static final int SIZE_FULL_SCREEN = 5; // 0x5
+ field @Deprecated public static final int SIZE_LARGE = 4; // 0x4
+ field @Deprecated public static final int SIZE_MEDIUM = 3; // 0x3
+ field @Deprecated public static final int SIZE_SMALL = 2; // 0x2
+ field @Deprecated public static final int SIZE_XSMALL = 1; // 0x1
+ field public static final int UNSET_ACTION_INDEX = -1; // 0xffffffff
+ }
+
+ public final class NotificationCompatExtras {
+ field public static final String EXTRA_ACTION_EXTRAS = "android.support.actionExtras";
+ field public static final String EXTRA_GROUP_KEY = "android.support.groupKey";
+ field public static final String EXTRA_GROUP_SUMMARY = "android.support.isGroupSummary";
+ field public static final String EXTRA_LOCAL_ONLY = "android.support.localOnly";
+ field public static final String EXTRA_REMOTE_INPUTS = "android.support.remoteInputs";
+ field public static final String EXTRA_SORT_KEY = "android.support.sortKey";
+ }
+
+ public abstract class NotificationCompatSideChannelService extends android.app.Service {
+ ctor public NotificationCompatSideChannelService();
+ method public abstract void cancel(String!, int, String!);
+ method public abstract void cancelAll(String!);
+ method public abstract void notify(String!, int, String!, android.app.Notification!);
+ method public android.os.IBinder! onBind(android.content.Intent!);
+ }
+
+ public final class NotificationManagerCompat {
+ method public boolean areNotificationsEnabled();
+ method public void cancel(int);
+ method public void cancel(String?, int);
+ method public void cancelAll();
+ method public void createNotificationChannel(android.app.NotificationChannel);
+ method public void createNotificationChannelGroup(android.app.NotificationChannelGroup);
+ method public void createNotificationChannelGroups(java.util.List<android.app.NotificationChannelGroup!>);
+ method public void createNotificationChannels(java.util.List<android.app.NotificationChannel!>);
+ method public void deleteNotificationChannel(String);
+ method public void deleteNotificationChannelGroup(String);
+ method public static androidx.core.app.NotificationManagerCompat from(android.content.Context);
+ method public static java.util.Set<java.lang.String!> getEnabledListenerPackages(android.content.Context);
+ method public int getImportance();
+ method public android.app.NotificationChannel? getNotificationChannel(String);
+ method public android.app.NotificationChannelGroup? getNotificationChannelGroup(String);
+ method public java.util.List<android.app.NotificationChannelGroup!> getNotificationChannelGroups();
+ method public java.util.List<android.app.NotificationChannel!> getNotificationChannels();
+ method public void notify(int, android.app.Notification);
+ method public void notify(String?, int, android.app.Notification);
+ field public static final String ACTION_BIND_SIDE_CHANNEL = "android.support.BIND_NOTIFICATION_SIDE_CHANNEL";
+ field public static final String EXTRA_USE_SIDE_CHANNEL = "android.support.useSideChannel";
+ field public static final int IMPORTANCE_DEFAULT = 3; // 0x3
+ field public static final int IMPORTANCE_HIGH = 4; // 0x4
+ field public static final int IMPORTANCE_LOW = 2; // 0x2
+ field public static final int IMPORTANCE_MAX = 5; // 0x5
+ field public static final int IMPORTANCE_MIN = 1; // 0x1
+ field public static final int IMPORTANCE_NONE = 0; // 0x0
+ field public static final int IMPORTANCE_UNSPECIFIED = -1000; // 0xfffffc18
+ }
+
+ public class Person {
+ method @RequiresApi(28) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.app.Person fromAndroidPerson(android.app.Person);
+ method public static androidx.core.app.Person fromBundle(android.os.Bundle);
+ method @RequiresApi(22) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.app.Person fromPersistableBundle(android.os.PersistableBundle);
+ method public androidx.core.graphics.drawable.IconCompat? getIcon();
+ method public String? getKey();
+ method public CharSequence? getName();
+ method public String? getUri();
+ method public boolean isBot();
+ method public boolean isImportant();
+ method @RequiresApi(28) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.app.Person toAndroidPerson();
+ method public androidx.core.app.Person.Builder toBuilder();
+ method public android.os.Bundle toBundle();
+ method @RequiresApi(22) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.os.PersistableBundle toPersistableBundle();
+ }
+
+ public static class Person.Builder {
+ ctor public Person.Builder();
+ method public androidx.core.app.Person build();
+ method public androidx.core.app.Person.Builder setBot(boolean);
+ method public androidx.core.app.Person.Builder setIcon(androidx.core.graphics.drawable.IconCompat?);
+ method public androidx.core.app.Person.Builder setImportant(boolean);
+ method public androidx.core.app.Person.Builder setKey(String?);
+ method public androidx.core.app.Person.Builder setName(CharSequence?);
+ method public androidx.core.app.Person.Builder setUri(String?);
+ }
+
+ public final class RemoteActionCompat implements androidx.versionedparcelable.VersionedParcelable {
+ ctor public RemoteActionCompat(androidx.core.graphics.drawable.IconCompat, CharSequence, CharSequence, android.app.PendingIntent);
+ ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public RemoteActionCompat();
+ ctor public RemoteActionCompat(androidx.core.app.RemoteActionCompat);
+ method @RequiresApi(26) public static androidx.core.app.RemoteActionCompat createFromRemoteAction(android.app.RemoteAction);
+ method public android.app.PendingIntent getActionIntent();
+ method public CharSequence getContentDescription();
+ method public androidx.core.graphics.drawable.IconCompat getIcon();
+ method public CharSequence getTitle();
+ method public boolean isEnabled();
+ method public void setEnabled(boolean);
+ method public void setShouldShowIcon(boolean);
+ method public boolean shouldShowIcon();
+ method @RequiresApi(26) public android.app.RemoteAction toRemoteAction();
+ field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.app.PendingIntent! mActionIntent;
+ field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public CharSequence! mContentDescription;
+ field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public boolean mEnabled;
+ field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.core.graphics.drawable.IconCompat! mIcon;
+ field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public boolean mShouldShowIcon;
+ field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public CharSequence! mTitle;
+ }
+
+ public final class RemoteInput {
+ method public static void addDataResultToIntent(androidx.core.app.RemoteInput!, android.content.Intent!, java.util.Map<java.lang.String!,android.net.Uri!>!);
+ method public static void addResultsToIntent(androidx.core.app.RemoteInput![]!, android.content.Intent!, android.os.Bundle!);
+ method public boolean getAllowFreeFormInput();
+ method public java.util.Set<java.lang.String!>! getAllowedDataTypes();
+ method public CharSequence![]! getChoices();
+ method public static java.util.Map<java.lang.String!,android.net.Uri!>! getDataResultsFromIntent(android.content.Intent!, String!);
+ method @androidx.core.app.RemoteInput.EditChoicesBeforeSending public int getEditChoicesBeforeSending();
+ method public android.os.Bundle! getExtras();
+ method public CharSequence! getLabel();
+ method public String! getResultKey();
+ method public static android.os.Bundle! getResultsFromIntent(android.content.Intent!);
+ method @androidx.core.app.RemoteInput.Source public static int getResultsSource(android.content.Intent);
+ method public boolean isDataOnly();
+ method public static void setResultsSource(android.content.Intent, @androidx.core.app.RemoteInput.Source int);
+ field public static final int EDIT_CHOICES_BEFORE_SENDING_AUTO = 0; // 0x0
+ field public static final int EDIT_CHOICES_BEFORE_SENDING_DISABLED = 1; // 0x1
+ field public static final int EDIT_CHOICES_BEFORE_SENDING_ENABLED = 2; // 0x2
+ field public static final String EXTRA_RESULTS_DATA = "android.remoteinput.resultsData";
+ field public static final String RESULTS_CLIP_LABEL = "android.remoteinput.results";
+ field public static final int SOURCE_CHOICE = 1; // 0x1
+ field public static final int SOURCE_FREE_FORM_INPUT = 0; // 0x0
+ }
+
+ public static final class RemoteInput.Builder {
+ ctor public RemoteInput.Builder(String);
+ method public androidx.core.app.RemoteInput.Builder addExtras(android.os.Bundle);
+ method public androidx.core.app.RemoteInput build();
+ method public android.os.Bundle getExtras();
+ method public androidx.core.app.RemoteInput.Builder setAllowDataType(String, boolean);
+ method public androidx.core.app.RemoteInput.Builder setAllowFreeFormInput(boolean);
+ method public androidx.core.app.RemoteInput.Builder setChoices(CharSequence![]?);
+ method public androidx.core.app.RemoteInput.Builder setEditChoicesBeforeSending(@androidx.core.app.RemoteInput.EditChoicesBeforeSending int);
+ method public androidx.core.app.RemoteInput.Builder setLabel(CharSequence?);
+ }
+
+ @IntDef({androidx.core.app.RemoteInput.EDIT_CHOICES_BEFORE_SENDING_AUTO, androidx.core.app.RemoteInput.EDIT_CHOICES_BEFORE_SENDING_DISABLED, androidx.core.app.RemoteInput.EDIT_CHOICES_BEFORE_SENDING_ENABLED}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface RemoteInput.EditChoicesBeforeSending {
+ }
+
+ @IntDef({androidx.core.app.RemoteInput.SOURCE_FREE_FORM_INPUT, androidx.core.app.RemoteInput.SOURCE_CHOICE}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface RemoteInput.Source {
+ }
+
+ public final class ServiceCompat {
+ method public static void stopForeground(android.app.Service, @androidx.core.app.ServiceCompat.StopForegroundFlags int);
+ field public static final int START_STICKY = 1; // 0x1
+ field public static final int STOP_FOREGROUND_DETACH = 2; // 0x2
+ field public static final int STOP_FOREGROUND_REMOVE = 1; // 0x1
+ }
+
+ @IntDef(flag=true, value={androidx.core.app.ServiceCompat.STOP_FOREGROUND_REMOVE, androidx.core.app.ServiceCompat.STOP_FOREGROUND_DETACH}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ServiceCompat.StopForegroundFlags {
+ }
+
+ public final class ShareCompat {
+ method public static void configureMenuItem(android.view.MenuItem, androidx.core.app.ShareCompat.IntentBuilder);
+ method public static void configureMenuItem(android.view.Menu, @IdRes int, androidx.core.app.ShareCompat.IntentBuilder);
+ method public static android.content.ComponentName? getCallingActivity(android.app.Activity);
+ method public static String? getCallingPackage(android.app.Activity);
+ field public static final String EXTRA_CALLING_ACTIVITY = "androidx.core.app.EXTRA_CALLING_ACTIVITY";
+ field public static final String EXTRA_CALLING_ACTIVITY_INTEROP = "android.support.v4.app.EXTRA_CALLING_ACTIVITY";
+ field public static final String EXTRA_CALLING_PACKAGE = "androidx.core.app.EXTRA_CALLING_PACKAGE";
+ field public static final String EXTRA_CALLING_PACKAGE_INTEROP = "android.support.v4.app.EXTRA_CALLING_PACKAGE";
+ }
+
+ public static class ShareCompat.IntentBuilder {
+ method public androidx.core.app.ShareCompat.IntentBuilder addEmailBcc(String);
+ method public androidx.core.app.ShareCompat.IntentBuilder addEmailBcc(String![]);
+ method public androidx.core.app.ShareCompat.IntentBuilder addEmailCc(String);
+ method public androidx.core.app.ShareCompat.IntentBuilder addEmailCc(String![]);
+ method public androidx.core.app.ShareCompat.IntentBuilder addEmailTo(String);
+ method public androidx.core.app.ShareCompat.IntentBuilder addEmailTo(String![]);
+ method public androidx.core.app.ShareCompat.IntentBuilder addStream(android.net.Uri);
+ method public android.content.Intent createChooserIntent();
+ method public static androidx.core.app.ShareCompat.IntentBuilder from(android.app.Activity);
+ method public android.content.Intent getIntent();
+ method public androidx.core.app.ShareCompat.IntentBuilder setChooserTitle(CharSequence?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setChooserTitle(@StringRes int);
+ method public androidx.core.app.ShareCompat.IntentBuilder setEmailBcc(String![]?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setEmailCc(String![]?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setEmailTo(String![]?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setHtmlText(String?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setStream(android.net.Uri?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setSubject(String?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setText(CharSequence?);
+ method public androidx.core.app.ShareCompat.IntentBuilder setType(String?);
+ method public void startChooser();
+ }
+
+ public static class ShareCompat.IntentReader {
+ method public static androidx.core.app.ShareCompat.IntentReader from(android.app.Activity);
+ method public android.content.ComponentName? getCallingActivity();
+ method public android.graphics.drawable.Drawable? getCallingActivityIcon();
+ method public android.graphics.drawable.Drawable? getCallingApplicationIcon();
+ method public CharSequence? getCallingApplicationLabel();
+ method public String? getCallingPackage();
+ method public String![]? getEmailBcc();
+ method public String![]? getEmailCc();
+ method public String![]? getEmailTo();
+ method public String? getHtmlText();
+ method public android.net.Uri? getStream();
+ method public android.net.Uri? getStream(int);
+ method public int getStreamCount();
+ method public String? getSubject();
+ method public CharSequence? getText();
+ method public String? getType();
+ method public boolean isMultipleShare();
+ method public boolean isShareIntent();
+ method public boolean isSingleShare();
+ }
+
+ public abstract class SharedElementCallback {
+ ctor public SharedElementCallback();
+ method public android.os.Parcelable! onCaptureSharedElementSnapshot(android.view.View!, android.graphics.Matrix!, android.graphics.RectF!);
+ method public android.view.View! onCreateSnapshotView(android.content.Context!, android.os.Parcelable!);
+ method public void onMapSharedElements(java.util.List<java.lang.String!>!, java.util.Map<java.lang.String!,android.view.View!>!);
+ method public void onRejectSharedElements(java.util.List<android.view.View!>!);
+ method public void onSharedElementEnd(java.util.List<java.lang.String!>!, java.util.List<android.view.View!>!, java.util.List<android.view.View!>!);
+ method public void onSharedElementStart(java.util.List<java.lang.String!>!, java.util.List<android.view.View!>!, java.util.List<android.view.View!>!);
+ method public void onSharedElementsArrived(java.util.List<java.lang.String!>!, java.util.List<android.view.View!>!, androidx.core.app.SharedElementCallback.OnSharedElementsReadyListener!);
+ }
+
+ public static interface SharedElementCallback.OnSharedElementsReadyListener {
+ method public void onSharedElementsReady();
+ }
+
+ public final class TaskStackBuilder implements java.lang.Iterable<android.content.Intent> {
+ method public androidx.core.app.TaskStackBuilder addNextIntent(android.content.Intent);
+ method public androidx.core.app.TaskStackBuilder addNextIntentWithParentStack(android.content.Intent);
+ method public androidx.core.app.TaskStackBuilder addParentStack(android.app.Activity);
+ method public androidx.core.app.TaskStackBuilder addParentStack(Class<?>);
+ method public androidx.core.app.TaskStackBuilder! addParentStack(android.content.ComponentName!);
+ method public static androidx.core.app.TaskStackBuilder create(android.content.Context);
+ method public android.content.Intent? editIntentAt(int);
+ method @Deprecated public static androidx.core.app.TaskStackBuilder! from(android.content.Context!);
+ method @Deprecated public android.content.Intent! getIntent(int);
+ method public int getIntentCount();
+ method public android.content.Intent![] getIntents();
+ method public android.app.PendingIntent? getPendingIntent(int, int);
+ method public android.app.PendingIntent? getPendingIntent(int, int, android.os.Bundle?);
+ method @Deprecated public java.util.Iterator<android.content.Intent!>! iterator();
+ method public void startActivities();
+ method public void startActivities(android.os.Bundle?);
+ }
+
+ public static interface TaskStackBuilder.SupportParentable {
+ method public android.content.Intent? getSupportParentActivityIntent();
+ }
+
+}
+
+package androidx.core.content {
+
+ public final class ContentResolverCompat {
+ method public static android.database.Cursor! query(android.content.ContentResolver!, android.net.Uri!, String![]!, String!, String![]!, String!, androidx.core.os.CancellationSignal!);
+ }
+
+ public class ContextCompat {
+ ctor protected ContextCompat();
+ method public static int checkSelfPermission(android.content.Context, String);
+ method public static android.content.Context? createDeviceProtectedStorageContext(android.content.Context);
+ method public static java.io.File! getCodeCacheDir(android.content.Context);
+ method @ColorInt public static int getColor(android.content.Context, @ColorRes int);
+ method public static android.content.res.ColorStateList? getColorStateList(android.content.Context, @ColorRes int);
+ method public static java.io.File? getDataDir(android.content.Context);
+ method public static android.graphics.drawable.Drawable? getDrawable(android.content.Context, @DrawableRes int);
+ method public static java.io.File![] getExternalCacheDirs(android.content.Context);
+ method public static java.io.File![] getExternalFilesDirs(android.content.Context, String?);
+ method public static java.util.concurrent.Executor! getMainExecutor(android.content.Context!);
+ method public static java.io.File? getNoBackupFilesDir(android.content.Context);
+ method public static java.io.File![] getObbDirs(android.content.Context);
+ method public static <T> T? getSystemService(android.content.Context, Class<T!>);
+ method public static String? getSystemServiceName(android.content.Context, Class<?>);
+ method public static boolean isDeviceProtectedStorage(android.content.Context);
+ method public static boolean startActivities(android.content.Context, android.content.Intent![]);
+ method public static boolean startActivities(android.content.Context, android.content.Intent![], android.os.Bundle?);
+ method public static void startActivity(android.content.Context, android.content.Intent, android.os.Bundle?);
+ method public static void startForegroundService(android.content.Context, android.content.Intent);
+ }
+
+ public class FileProvider extends android.content.ContentProvider {
+ ctor public FileProvider();
+ method public int delete(android.net.Uri, String?, String![]?);
+ method public String! getType(android.net.Uri);
+ method public static android.net.Uri! getUriForFile(android.content.Context, String, java.io.File);
+ method public android.net.Uri! insert(android.net.Uri, android.content.ContentValues!);
+ method public boolean onCreate();
+ method public android.database.Cursor! query(android.net.Uri, String![]?, String?, String![]?, String?);
+ method public int update(android.net.Uri, android.content.ContentValues!, String?, String![]?);
+ }
+
+ public final class IntentCompat {
+ method public static android.content.Intent makeMainSelectorActivity(String, String);
+ field public static final String CATEGORY_LEANBACK_LAUNCHER = "android.intent.category.LEANBACK_LAUNCHER";
+ field public static final String EXTRA_HTML_TEXT = "android.intent.extra.HTML_TEXT";
+ field public static final String EXTRA_START_PLAYBACK = "android.intent.extra.START_PLAYBACK";
+ }
+
+ public final class MimeTypeFilter {
+ method public static boolean matches(String?, String);
+ method public static String? matches(String?, String![]);
+ method public static String? matches(String![]?, String);
+ method public static String![] matchesMany(String![]?, String);
+ }
+
+ public final class PermissionChecker {
+ method @androidx.core.content.PermissionChecker.PermissionResult public static int checkCallingOrSelfPermission(android.content.Context, String);
+ method @androidx.core.content.PermissionChecker.PermissionResult public static int checkCallingPermission(android.content.Context, String, String?);
+ method @androidx.core.content.PermissionChecker.PermissionResult public static int checkPermission(android.content.Context, String, int, int, String?);
+ method @androidx.core.content.PermissionChecker.PermissionResult public static int checkSelfPermission(android.content.Context, String);
+ field public static final int PERMISSION_DENIED = -1; // 0xffffffff
+ field public static final int PERMISSION_DENIED_APP_OP = -2; // 0xfffffffe
+ field public static final int PERMISSION_GRANTED = 0; // 0x0
+ }
+
+ @IntDef({androidx.core.content.PermissionChecker.PERMISSION_GRANTED, androidx.core.content.PermissionChecker.PERMISSION_DENIED, androidx.core.content.PermissionChecker.PERMISSION_DENIED_APP_OP}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface PermissionChecker.PermissionResult {
+ }
+
+ @Deprecated public final class SharedPreferencesCompat {
+ }
+
+ @Deprecated public static final class SharedPreferencesCompat.EditorCompat {
+ method @Deprecated public void apply(android.content.SharedPreferences.Editor);
+ method @Deprecated public static androidx.core.content.SharedPreferencesCompat.EditorCompat! getInstance();
+ }
+
+}
+
+package androidx.core.content.pm {
+
+ @Deprecated public final class ActivityInfoCompat {
+ field @Deprecated public static final int CONFIG_UI_MODE = 512; // 0x200
+ }
+
+ public final class PackageInfoCompat {
+ method public static long getLongVersionCode(android.content.pm.PackageInfo);
+ }
+
+ public final class PermissionInfoCompat {
+ method @androidx.core.content.pm.PermissionInfoCompat.Protection public static int getProtection(android.content.pm.PermissionInfo);
+ method @androidx.core.content.pm.PermissionInfoCompat.ProtectionFlags public static int getProtectionFlags(android.content.pm.PermissionInfo);
+ }
+
+
+
+ public class ShortcutInfoCompat {
+ method public android.content.ComponentName? getActivity();
+ method public java.util.Set<java.lang.String!>? getCategories();
+ method public CharSequence? getDisabledMessage();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.core.graphics.drawable.IconCompat! getIcon();
+ method public String getId();
+ method public android.content.Intent getIntent();
+ method public android.content.Intent![] getIntents();
+ method public CharSequence? getLongLabel();
+ method public int getRank();
+ method public CharSequence getShortLabel();
+ method @RequiresApi(25) public android.content.pm.ShortcutInfo! toShortcutInfo();
+ }
+
+ public static class ShortcutInfoCompat.Builder {
+ ctor public ShortcutInfoCompat.Builder(android.content.Context, String);
+ ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public ShortcutInfoCompat.Builder(androidx.core.content.pm.ShortcutInfoCompat);
+ ctor @RequiresApi(25) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public ShortcutInfoCompat.Builder(android.content.Context, android.content.pm.ShortcutInfo);
+ method public androidx.core.content.pm.ShortcutInfoCompat build();
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setActivity(android.content.ComponentName);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setAlwaysBadged();
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setCategories(java.util.Set<java.lang.String!>);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setDisabledMessage(CharSequence);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setIcon(androidx.core.graphics.drawable.IconCompat!);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setIntent(android.content.Intent);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setIntents(android.content.Intent![]);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setLongLabel(CharSequence);
+ method @Deprecated public androidx.core.content.pm.ShortcutInfoCompat.Builder setLongLived();
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setLongLived(boolean);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setPerson(androidx.core.app.Person);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setPersons(androidx.core.app.Person![]);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setRank(int);
+ method public androidx.core.content.pm.ShortcutInfoCompat.Builder setShortLabel(CharSequence);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public abstract class ShortcutInfoCompatSaver<T> {
+ ctor public ShortcutInfoCompatSaver();
+ method @AnyThread public abstract T! addShortcuts(java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>!);
+ method @WorkerThread public java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>! getShortcuts() throws java.lang.Exception;
+ method @AnyThread public abstract T! removeAllShortcuts();
+ method @AnyThread public abstract T! removeShortcuts(java.util.List<java.lang.String!>!);
+ }
+
+
+ public class ShortcutManagerCompat {
+ method public static boolean addDynamicShortcuts(android.content.Context, java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>);
+ method public static android.content.Intent createShortcutResultIntent(android.content.Context, androidx.core.content.pm.ShortcutInfoCompat);
+ method public static java.util.List<androidx.core.content.pm.ShortcutInfoCompat!> getDynamicShortcuts(android.content.Context);
+ method public static int getMaxShortcutCountPerActivity(android.content.Context);
+ method public static boolean isRequestPinShortcutSupported(android.content.Context);
+ method public static void removeAllDynamicShortcuts(android.content.Context);
+ method public static void removeDynamicShortcuts(android.content.Context, java.util.List<java.lang.String!>);
+ method public static boolean requestPinShortcut(android.content.Context, androidx.core.content.pm.ShortcutInfoCompat, android.content.IntentSender?);
+ method public static boolean updateShortcuts(android.content.Context, java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>);
+ field public static final String EXTRA_SHORTCUT_ID = "android.intent.extra.shortcut.ID";
+ }
+
+}
+
+package androidx.core.content.res {
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class ColorStateListInflaterCompat {
+ method public static android.content.res.ColorStateList createFromXml(android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.content.res.Resources.Theme?) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+ method public static android.content.res.ColorStateList createFromXmlInner(android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet, android.content.res.Resources.Theme?) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+ method public static android.content.res.ColorStateList? inflate(android.content.res.Resources, @XmlRes int, android.content.res.Resources.Theme?);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class ComplexColorCompat {
+ method @ColorInt public int getColor();
+ method public android.graphics.Shader? getShader();
+ method public static androidx.core.content.res.ComplexColorCompat? inflate(android.content.res.Resources, @ColorRes int, android.content.res.Resources.Theme?);
+ method public boolean isGradient();
+ method public boolean isStateful();
+ method public boolean onStateChanged(int[]!);
+ method public void setColor(@ColorInt int);
+ method public boolean willDraw();
+ }
+
+ public final class ConfigurationHelper {
+ method public static int getDensityDpi(android.content.res.Resources);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class FontResourcesParserCompat {
+ method public static androidx.core.content.res.FontResourcesParserCompat.FamilyResourceEntry? parse(org.xmlpull.v1.XmlPullParser!, android.content.res.Resources!) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+ method public static java.util.List<java.util.List<byte[]!>!>! readCerts(android.content.res.Resources!, @ArrayRes int);
+ field public static final int FETCH_STRATEGY_ASYNC = 1; // 0x1
+ field public static final int FETCH_STRATEGY_BLOCKING = 0; // 0x0
+ field public static final int INFINITE_TIMEOUT_VALUE = -1; // 0xffffffff
+ }
+
+ public static interface FontResourcesParserCompat.FamilyResourceEntry {
+ }
+
+ @IntDef({androidx.core.content.res.FontResourcesParserCompat.FETCH_STRATEGY_BLOCKING, androidx.core.content.res.FontResourcesParserCompat.FETCH_STRATEGY_ASYNC}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface FontResourcesParserCompat.FetchStrategy {
+ }
+
+ public static final class FontResourcesParserCompat.FontFamilyFilesResourceEntry implements androidx.core.content.res.FontResourcesParserCompat.FamilyResourceEntry {
+ ctor public FontResourcesParserCompat.FontFamilyFilesResourceEntry(androidx.core.content.res.FontResourcesParserCompat.FontFileResourceEntry![]);
+ method public androidx.core.content.res.FontResourcesParserCompat.FontFileResourceEntry![] getEntries();
+ }
+
+ public static final class FontResourcesParserCompat.FontFileResourceEntry {
+ ctor public FontResourcesParserCompat.FontFileResourceEntry(String, int, boolean, String?, int, int);
+ method public String getFileName();
+ method public int getResourceId();
+ method public int getTtcIndex();
+ method public String? getVariationSettings();
+ method public int getWeight();
+ method public boolean isItalic();
+ }
+
+ public static final class FontResourcesParserCompat.ProviderResourceEntry implements androidx.core.content.res.FontResourcesParserCompat.FamilyResourceEntry {
+ ctor public FontResourcesParserCompat.ProviderResourceEntry(androidx.core.provider.FontRequest, @androidx.core.content.res.FontResourcesParserCompat.FetchStrategy int, int);
+ method @androidx.core.content.res.FontResourcesParserCompat.FetchStrategy public int getFetchStrategy();
+ method public androidx.core.provider.FontRequest getRequest();
+ method public int getTimeout();
+ }
+
+ public final class ResourcesCompat {
+ method @ColorInt public static int getColor(android.content.res.Resources, @ColorRes int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
+ method public static android.content.res.ColorStateList? getColorStateList(android.content.res.Resources, @ColorRes int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
+ method public static android.graphics.drawable.Drawable? getDrawable(android.content.res.Resources, @DrawableRes int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
+ method public static android.graphics.drawable.Drawable? getDrawableForDensity(android.content.res.Resources, @DrawableRes int, int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
+ method public static float getFloat(android.content.res.Resources, @DimenRes int);
+ method public static android.graphics.Typeface? getFont(android.content.Context, @FontRes int) throws android.content.res.Resources.NotFoundException;
+ method public static void getFont(android.content.Context, @FontRes int, androidx.core.content.res.ResourcesCompat.FontCallback, android.os.Handler?) throws android.content.res.Resources.NotFoundException;
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static android.graphics.Typeface! getFont(android.content.Context, @FontRes int, android.util.TypedValue!, int, androidx.core.content.res.ResourcesCompat.FontCallback?) throws android.content.res.Resources.NotFoundException;
+ }
+
+ public abstract static class ResourcesCompat.FontCallback {
+ ctor public ResourcesCompat.FontCallback();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final void callbackFailAsync(@androidx.core.provider.FontsContractCompat.FontRequestCallback.FontRequestFailReason int, android.os.Handler?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final void callbackSuccessAsync(android.graphics.Typeface!, android.os.Handler?);
+ method public abstract void onFontRetrievalFailed(@androidx.core.provider.FontsContractCompat.FontRequestCallback.FontRequestFailReason int);
+ method public abstract void onFontRetrieved(android.graphics.Typeface);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class TypedArrayUtils {
+ method public static int getAttr(android.content.Context, int, int);
+ method public static boolean getBoolean(android.content.res.TypedArray, @StyleableRes int, @StyleableRes int, boolean);
+ method public static android.graphics.drawable.Drawable? getDrawable(android.content.res.TypedArray, @StyleableRes int, @StyleableRes int);
+ method public static int getInt(android.content.res.TypedArray, @StyleableRes int, @StyleableRes int, int);
+ method public static boolean getNamedBoolean(android.content.res.TypedArray, org.xmlpull.v1.XmlPullParser, String, @StyleableRes int, boolean);
+ method @ColorInt public static int getNamedColor(android.content.res.TypedArray, org.xmlpull.v1.XmlPullParser, String, @StyleableRes int, @ColorInt int);
+ method public static android.content.res.ColorStateList? getNamedColorStateList(android.content.res.TypedArray, org.xmlpull.v1.XmlPullParser, android.content.res.Resources.Theme?, String, @StyleableRes int);
+ method public static androidx.core.content.res.ComplexColorCompat! getNamedComplexColor(android.content.res.TypedArray, org.xmlpull.v1.XmlPullParser, android.content.res.Resources.Theme?, String, @StyleableRes int, @ColorInt int);
+ method public static float getNamedFloat(android.content.res.TypedArray, org.xmlpull.v1.XmlPullParser, String, @StyleableRes int, float);
+ method public static int getNamedInt(android.content.res.TypedArray, org.xmlpull.v1.XmlPullParser, String, @StyleableRes int, int);
+ method @AnyRes public static int getNamedResourceId(android.content.res.TypedArray, org.xmlpull.v1.XmlPullParser, String, @StyleableRes int, @AnyRes int);
+ method public static String? getNamedString(android.content.res.TypedArray, org.xmlpull.v1.XmlPullParser, String, @StyleableRes int);
+ method @AnyRes public static int getResourceId(android.content.res.TypedArray, @StyleableRes int, @StyleableRes int, @AnyRes int);
+ method public static String? getString(android.content.res.TypedArray, @StyleableRes int, @StyleableRes int);
+ method public static CharSequence? getText(android.content.res.TypedArray, @StyleableRes int, @StyleableRes int);
+ method public static CharSequence![]? getTextArray(android.content.res.TypedArray, @StyleableRes int, @StyleableRes int);
+ method public static boolean hasAttribute(org.xmlpull.v1.XmlPullParser, String);
+ method public static android.content.res.TypedArray obtainAttributes(android.content.res.Resources, android.content.res.Resources.Theme?, android.util.AttributeSet, int[]);
+ method public static android.util.TypedValue? peekNamedValue(android.content.res.TypedArray, org.xmlpull.v1.XmlPullParser, String, int);
+ }
+
+}
+
+package androidx.core.database {
+
+ public final class CursorWindowCompat {
+ method public static android.database.CursorWindow create(String?, long);
+ }
+
+ @Deprecated public final class DatabaseUtilsCompat {
+ method @Deprecated public static String![]! appendSelectionArgs(String![]!, String![]!);
+ method @Deprecated public static String! concatenateWhere(String!, String!);
+ }
+
+}
+
+package androidx.core.database.sqlite {
+
+ public final class SQLiteCursorCompat {
+ method public static void setFillWindowForwardOnly(android.database.sqlite.SQLiteCursor, boolean);
+ }
+
+}
+
+package androidx.core.graphics {
+
+ public final class BitmapCompat {
+ method public static int getAllocationByteCount(android.graphics.Bitmap);
+ method public static boolean hasMipMap(android.graphics.Bitmap);
+ method public static void setHasMipMap(android.graphics.Bitmap, boolean);
+ }
+
+ public class BlendModeColorFilterCompat {
+ method public static android.graphics.ColorFilter? createBlendModeColorFilterCompat(int, androidx.core.graphics.BlendModeCompat);
+ }
+
+ public enum BlendModeCompat {
+ enum_constant public static final androidx.core.graphics.BlendModeCompat CLEAR;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat COLOR;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat COLOR_BURN;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat COLOR_DODGE;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat DARKEN;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat DIFFERENCE;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat DST;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat DST_ATOP;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat DST_IN;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat DST_OUT;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat DST_OVER;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat EXCLUSION;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat HARD_LIGHT;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat HUE;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat LIGHTEN;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat LUMINOSITY;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat MODULATE;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat MULTIPLY;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat OVERLAY;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat PLUS;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat SATURATION;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat SCREEN;
+ enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat SOFT_LIGHT;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat SRC;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat SRC_ATOP;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat SRC_IN;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat SRC_OUT;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat SRC_OVER;
+ enum_constant public static final androidx.core.graphics.BlendModeCompat XOR;
+ }
+
+ public final class ColorUtils {
+ method @ColorInt public static int HSLToColor(float[]);
+ method @ColorInt public static int LABToColor(@FloatRange(from=0.0f, to=100) double, @FloatRange(from=0xffffff80, to=127) double, @FloatRange(from=0xffffff80, to=127) double);
+ method public static void LABToXYZ(@FloatRange(from=0.0f, to=100) double, @FloatRange(from=0xffffff80, to=127) double, @FloatRange(from=0xffffff80, to=127) double, double[]);
+ method public static void RGBToHSL(@IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, float[]);
+ method public static void RGBToLAB(@IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, double[]);
+ method public static void RGBToXYZ(@IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, double[]);
+ method @ColorInt public static int XYZToColor(@FloatRange(from=0.0f, to=androidx.core.graphics.ColorUtils.XYZ_WHITE_REFERENCE_X) double, @FloatRange(from=0.0f, to=androidx.core.graphics.ColorUtils.XYZ_WHITE_REFERENCE_Y) double, @FloatRange(from=0.0f, to=androidx.core.graphics.ColorUtils.XYZ_WHITE_REFERENCE_Z) double);
+ method public static void XYZToLAB(@FloatRange(from=0.0f, to=androidx.core.graphics.ColorUtils.XYZ_WHITE_REFERENCE_X) double, @FloatRange(from=0.0f, to=androidx.core.graphics.ColorUtils.XYZ_WHITE_REFERENCE_Y) double, @FloatRange(from=0.0f, to=androidx.core.graphics.ColorUtils.XYZ_WHITE_REFERENCE_Z) double, double[]);
+ method @ColorInt public static int blendARGB(@ColorInt int, @ColorInt int, @FloatRange(from=0.0, to=1.0) float);
+ method public static void blendHSL(float[], float[], @FloatRange(from=0.0, to=1.0) float, float[]);
+ method public static void blendLAB(double[], double[], @FloatRange(from=0.0, to=1.0) double, double[]);
+ method public static double calculateContrast(@ColorInt int, @ColorInt int);
+ method @FloatRange(from=0.0, to=1.0) public static double calculateLuminance(@ColorInt int);
+ method public static int calculateMinimumAlpha(@ColorInt int, @ColorInt int, float);
+ method public static void colorToHSL(@ColorInt int, float[]);
+ method public static void colorToLAB(@ColorInt int, double[]);
+ method public static void colorToXYZ(@ColorInt int, double[]);
+ method public static int compositeColors(@ColorInt int, @ColorInt int);
+ method @RequiresApi(26) public static android.graphics.Color compositeColors(android.graphics.Color, android.graphics.Color);
+ method public static double distanceEuclidean(double[], double[]);
+ method @ColorInt public static int setAlphaComponent(@ColorInt int, @IntRange(from=0, to=255) int);
+ }
+
+ public final class Insets {
+ method public static androidx.core.graphics.Insets of(int, int, int, int);
+ method public static androidx.core.graphics.Insets of(android.graphics.Rect);
+ method @RequiresApi(api=29) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.graphics.Insets wrap(android.graphics.Insets);
+ field public static final androidx.core.graphics.Insets NONE;
+ field public final int bottom;
+ field public final int left;
+ field public final int right;
+ field public final int top;
+ }
+
+ public final class PaintCompat {
+ method public static boolean hasGlyph(android.graphics.Paint, String);
+ method public static boolean setBlendMode(android.graphics.Paint, androidx.core.graphics.BlendModeCompat?);
+ }
+
+ public final class PathSegment {
+ ctor public PathSegment(android.graphics.PointF, float, android.graphics.PointF, float);
+ method public android.graphics.PointF getEnd();
+ method public float getEndFraction();
+ method public android.graphics.PointF getStart();
+ method public float getStartFraction();
+ }
+
+ public final class PathUtils {
+ method @RequiresApi(26) public static java.util.Collection<androidx.core.graphics.PathSegment!> flatten(android.graphics.Path);
+ method @RequiresApi(26) public static java.util.Collection<androidx.core.graphics.PathSegment!> flatten(android.graphics.Path, @FloatRange(from=0) float);
+ }
+
+ public class TypefaceCompat {
+ method public static android.graphics.Typeface create(android.content.Context, android.graphics.Typeface?, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static android.graphics.Typeface? createFromFontInfo(android.content.Context, android.os.CancellationSignal?, androidx.core.provider.FontsContractCompat.FontInfo![], int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static android.graphics.Typeface? createFromResourcesFamilyXml(android.content.Context, androidx.core.content.res.FontResourcesParserCompat.FamilyResourceEntry, android.content.res.Resources, int, int, androidx.core.content.res.ResourcesCompat.FontCallback?, android.os.Handler?, boolean);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static android.graphics.Typeface? createFromResourcesFontFile(android.content.Context, android.content.res.Resources, int, String!, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static android.graphics.Typeface? findFromCache(android.content.res.Resources, int, int);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @RequiresApi(26) public class TypefaceCompatApi26Impl {
+ ctor public TypefaceCompatApi26Impl();
+ method protected android.graphics.Typeface? createFromFamiliesWithDefault(Object!);
+ method public android.graphics.Typeface? createFromFontFamilyFilesResourceEntry(android.content.Context!, androidx.core.content.res.FontResourcesParserCompat.FontFamilyFilesResourceEntry!, android.content.res.Resources!, int);
+ method public android.graphics.Typeface? createFromFontInfo(android.content.Context!, android.os.CancellationSignal?, androidx.core.provider.FontsContractCompat.FontInfo![], int);
+ method public android.graphics.Typeface? createFromResourcesFontFile(android.content.Context!, android.content.res.Resources!, int, String!, int);
+ method protected java.lang.reflect.Method! obtainAbortCreationMethod(Class<?>!) throws java.lang.NoSuchMethodException;
+ method protected java.lang.reflect.Method! obtainAddFontFromAssetManagerMethod(Class<?>!) throws java.lang.NoSuchMethodException;
+ method protected java.lang.reflect.Method! obtainAddFontFromBufferMethod(Class<?>!) throws java.lang.NoSuchMethodException;
+ method protected java.lang.reflect.Method! obtainCreateFromFamiliesWithDefaultMethod(Class<?>!) throws java.lang.NoSuchMethodException;
+ method protected Class<?>! obtainFontFamily() throws java.lang.ClassNotFoundException;
+ method protected java.lang.reflect.Constructor<?>! obtainFontFamilyCtor(Class<?>!) throws java.lang.NoSuchMethodException;
+ method protected java.lang.reflect.Method! obtainFreezeMethod(Class<?>!) throws java.lang.NoSuchMethodException;
+ field protected final java.lang.reflect.Method! mAbortCreation;
+ field protected final java.lang.reflect.Method! mAddFontFromAssetManager;
+ field protected final java.lang.reflect.Method! mAddFontFromBuffer;
+ field protected final java.lang.reflect.Method! mCreateFromFamiliesWithDefault;
+ field protected final Class<?>! mFontFamily;
+ field protected final java.lang.reflect.Constructor<?>! mFontFamilyCtor;
+ field protected final java.lang.reflect.Method! mFreeze;
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @RequiresApi(28) public class TypefaceCompatApi28Impl extends androidx.core.graphics.TypefaceCompatApi26Impl {
+ ctor public TypefaceCompatApi28Impl();
+ method public android.graphics.Typeface! createFromFontFamilyFilesResourceEntry(android.content.Context!, androidx.core.content.res.FontResourcesParserCompat.FontFamilyFilesResourceEntry!, android.content.res.Resources!, int);
+ method public android.graphics.Typeface! createFromFontInfo(android.content.Context!, android.os.CancellationSignal!, androidx.core.provider.FontsContractCompat.FontInfo![], int);
+ method public android.graphics.Typeface? createFromResourcesFontFile(android.content.Context!, android.content.res.Resources!, int, String!, int);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @RequiresApi(29) public class TypefaceCompatApi29Impl {
+ ctor public TypefaceCompatApi29Impl();
+ method public android.graphics.Typeface? createFromFontFamilyFilesResourceEntry(android.content.Context!, androidx.core.content.res.FontResourcesParserCompat.FontFamilyFilesResourceEntry!, android.content.res.Resources!, int);
+ method public android.graphics.Typeface? createFromFontInfo(android.content.Context!, android.os.CancellationSignal?, androidx.core.provider.FontsContractCompat.FontInfo![], int);
+ method protected android.graphics.Typeface! createFromInputStream(android.content.Context!, java.io.InputStream!);
+ method public android.graphics.Typeface? createFromResourcesFontFile(android.content.Context!, android.content.res.Resources!, int, String!, int);
+ method protected androidx.core.provider.FontsContractCompat.FontInfo! findBestInfo(androidx.core.provider.FontsContractCompat.FontInfo![]!, int);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class TypefaceCompatUtil {
+ method public static void closeQuietly(java.io.Closeable!);
+ method @RequiresApi(19) public static java.nio.ByteBuffer? copyToDirectBuffer(android.content.Context!, android.content.res.Resources!, int);
+ method public static boolean copyToFile(java.io.File!, java.io.InputStream!);
+ method public static boolean copyToFile(java.io.File!, android.content.res.Resources!, int);
+ method public static java.io.File? getTempFile(android.content.Context!);
+ method @RequiresApi(19) public static java.nio.ByteBuffer? mmap(android.content.Context!, android.os.CancellationSignal!, android.net.Uri!);
+ }
+
+}
+
+package androidx.core.graphics.drawable {
+
+ public final class DrawableCompat {
+ method public static void applyTheme(android.graphics.drawable.Drawable, android.content.res.Resources.Theme);
+ method public static boolean canApplyTheme(android.graphics.drawable.Drawable);
+ method public static void clearColorFilter(android.graphics.drawable.Drawable);
+ method public static int getAlpha(android.graphics.drawable.Drawable);
+ method public static android.graphics.ColorFilter! getColorFilter(android.graphics.drawable.Drawable);
+ method public static int getLayoutDirection(android.graphics.drawable.Drawable);
+ method public static void inflate(android.graphics.drawable.Drawable, android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet, android.content.res.Resources.Theme?) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+ method public static boolean isAutoMirrored(android.graphics.drawable.Drawable);
+ method @Deprecated public static void jumpToCurrentState(android.graphics.drawable.Drawable);
+ method public static void setAutoMirrored(android.graphics.drawable.Drawable, boolean);
+ method public static void setHotspot(android.graphics.drawable.Drawable, float, float);
+ method public static void setHotspotBounds(android.graphics.drawable.Drawable, int, int, int, int);
+ method public static boolean setLayoutDirection(android.graphics.drawable.Drawable, int);
+ method public static void setTint(android.graphics.drawable.Drawable, @ColorInt int);
+ method public static void setTintList(android.graphics.drawable.Drawable, android.content.res.ColorStateList?);
+ method public static void setTintMode(android.graphics.drawable.Drawable, android.graphics.PorterDuff.Mode);
+ method public static <T extends android.graphics.drawable.Drawable> T! unwrap(android.graphics.drawable.Drawable);
+ method public static android.graphics.drawable.Drawable! wrap(android.graphics.drawable.Drawable);
+ }
+
+ public class IconCompat extends androidx.versionedparcelable.CustomVersionedParcelable {
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void addToShortcutIntent(android.content.Intent, android.graphics.drawable.Drawable?, android.content.Context);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void checkResource(android.content.Context!);
+ method public static androidx.core.graphics.drawable.IconCompat? createFromBundle(android.os.Bundle);
+ method @RequiresApi(23) public static androidx.core.graphics.drawable.IconCompat? createFromIcon(android.content.Context, android.graphics.drawable.Icon);
+ method @RequiresApi(23) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.graphics.drawable.IconCompat? createFromIcon(android.graphics.drawable.Icon);
+ method @RequiresApi(23) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.graphics.drawable.IconCompat? createFromIconOrNullIfZeroResId(android.graphics.drawable.Icon);
+ method public static androidx.core.graphics.drawable.IconCompat! createWithAdaptiveBitmap(android.graphics.Bitmap!);
+ method public static androidx.core.graphics.drawable.IconCompat! createWithBitmap(android.graphics.Bitmap!);
+ method public static androidx.core.graphics.drawable.IconCompat! createWithContentUri(String!);
+ method public static androidx.core.graphics.drawable.IconCompat! createWithContentUri(android.net.Uri!);
+ method public static androidx.core.graphics.drawable.IconCompat! createWithData(byte[]!, int, int);
+ method public static androidx.core.graphics.drawable.IconCompat! createWithResource(android.content.Context!, @DrawableRes int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.graphics.drawable.IconCompat! createWithResource(android.content.res.Resources!, String!, @DrawableRes int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.Bitmap? getBitmap();
+ method @IdRes public int getResId();
+ method public String getResPackage();
+ method @androidx.core.graphics.drawable.IconCompat.IconType public int getType();
+ method public android.net.Uri getUri();
+ method public android.graphics.drawable.Drawable! loadDrawable(android.content.Context!);
+ method public androidx.core.graphics.drawable.IconCompat! setTint(@ColorInt int);
+ method public androidx.core.graphics.drawable.IconCompat! setTintList(android.content.res.ColorStateList!);
+ method public androidx.core.graphics.drawable.IconCompat! setTintMode(android.graphics.PorterDuff.Mode!);
+ method public android.os.Bundle! toBundle();
+ method @RequiresApi(23) public android.graphics.drawable.Icon! toIcon();
+ field public static final int TYPE_UNKNOWN = -1; // 0xffffffff
+ field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int mType;
+ }
+
+
+ public abstract class RoundedBitmapDrawable extends android.graphics.drawable.Drawable {
+ method public void draw(android.graphics.Canvas);
+ method public final android.graphics.Bitmap? getBitmap();
+ method public float getCornerRadius();
+ method public int getGravity();
+ method public int getOpacity();
+ method public final android.graphics.Paint getPaint();
+ method public boolean hasAntiAlias();
+ method public boolean hasMipMap();
+ method public boolean isCircular();
+ method public void setAlpha(int);
+ method public void setAntiAlias(boolean);
+ method public void setCircular(boolean);
+ method public void setColorFilter(android.graphics.ColorFilter!);
+ method public void setCornerRadius(float);
+ method public void setDither(boolean);
+ method public void setGravity(int);
+ method public void setMipMap(boolean);
+ method public void setTargetDensity(android.graphics.Canvas);
+ method public void setTargetDensity(android.util.DisplayMetrics);
+ method public void setTargetDensity(int);
+ }
+
+ public final class RoundedBitmapDrawableFactory {
+ method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, android.graphics.Bitmap?);
+ method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, String);
+ method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, java.io.InputStream);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface TintAwareDrawable {
+ method public void setTint(@ColorInt int);
+ method public void setTintList(android.content.res.ColorStateList!);
+ method public void setTintMode(android.graphics.PorterDuff.Mode!);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface WrappedDrawable {
+ method public android.graphics.drawable.Drawable! getWrappedDrawable();
+ method public void setWrappedDrawable(android.graphics.drawable.Drawable!);
+ }
+
+}
+
+package androidx.core.hardware.display {
+
+ public final class DisplayManagerCompat {
+ method public android.view.Display? getDisplay(int);
+ method public android.view.Display![] getDisplays();
+ method public android.view.Display![] getDisplays(String?);
+ method public static androidx.core.hardware.display.DisplayManagerCompat getInstance(android.content.Context);
+ field public static final String DISPLAY_CATEGORY_PRESENTATION = "android.hardware.display.category.PRESENTATION";
+ }
+
+}
+
+package androidx.core.hardware.fingerprint {
+
+ @Deprecated public final class FingerprintManagerCompat {
+ method @Deprecated @RequiresPermission(android.Manifest.permission.USE_FINGERPRINT) public void authenticate(androidx.core.hardware.fingerprint.FingerprintManagerCompat.CryptoObject?, int, androidx.core.os.CancellationSignal?, androidx.core.hardware.fingerprint.FingerprintManagerCompat.AuthenticationCallback, android.os.Handler?);
+ method @Deprecated public static androidx.core.hardware.fingerprint.FingerprintManagerCompat from(android.content.Context);
+ method @Deprecated @RequiresPermission(android.Manifest.permission.USE_FINGERPRINT) public boolean hasEnrolledFingerprints();
+ method @Deprecated @RequiresPermission(android.Manifest.permission.USE_FINGERPRINT) public boolean isHardwareDetected();
+ }
+
+ @Deprecated public abstract static class FingerprintManagerCompat.AuthenticationCallback {
+ ctor @Deprecated public FingerprintManagerCompat.AuthenticationCallback();
+ method @Deprecated public void onAuthenticationError(int, CharSequence!);
+ method @Deprecated public void onAuthenticationFailed();
+ method @Deprecated public void onAuthenticationHelp(int, CharSequence!);
+ method @Deprecated public void onAuthenticationSucceeded(androidx.core.hardware.fingerprint.FingerprintManagerCompat.AuthenticationResult!);
+ }
+
+ @Deprecated public static final class FingerprintManagerCompat.AuthenticationResult {
+ ctor @Deprecated public FingerprintManagerCompat.AuthenticationResult(androidx.core.hardware.fingerprint.FingerprintManagerCompat.CryptoObject!);
+ method @Deprecated public androidx.core.hardware.fingerprint.FingerprintManagerCompat.CryptoObject! getCryptoObject();
+ }
+
+ @Deprecated public static class FingerprintManagerCompat.CryptoObject {
+ ctor @Deprecated public FingerprintManagerCompat.CryptoObject(java.security.Signature);
+ ctor @Deprecated public FingerprintManagerCompat.CryptoObject(javax.crypto.Cipher);
+ ctor @Deprecated public FingerprintManagerCompat.CryptoObject(javax.crypto.Mac);
+ method @Deprecated public javax.crypto.Cipher? getCipher();
+ method @Deprecated public javax.crypto.Mac? getMac();
+ method @Deprecated public java.security.Signature? getSignature();
+ }
+
+}
+
+package androidx.core.internal.view {
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface SupportMenu extends android.view.Menu {
+ method public void setGroupDividerEnabled(boolean);
+ field public static final int CATEGORY_MASK = -65536; // 0xffff0000
+ field public static final int CATEGORY_SHIFT = 16; // 0x10
+ field public static final int FLAG_KEEP_OPEN_ON_SUBMENU_OPENED = 4; // 0x4
+ field public static final int SUPPORTED_MODIFIERS_MASK = 69647; // 0x1100f
+ field public static final int USER_MASK = 65535; // 0xffff
+ field public static final int USER_SHIFT = 0; // 0x0
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface SupportMenuItem extends android.view.MenuItem {
+ method public int getAlphabeticModifiers();
+ method public CharSequence! getContentDescription();
+ method public android.content.res.ColorStateList! getIconTintList();
+ method public android.graphics.PorterDuff.Mode! getIconTintMode();
+ method public int getNumericModifiers();
+ method public androidx.core.view.ActionProvider! getSupportActionProvider();
+ method public CharSequence! getTooltipText();
+ method public boolean requiresActionButton();
+ method public boolean requiresOverflow();
+ method public android.view.MenuItem! setAlphabeticShortcut(char, int);
+ method public androidx.core.internal.view.SupportMenuItem! setContentDescription(CharSequence!);
+ method public android.view.MenuItem! setIconTintList(android.content.res.ColorStateList!);
+ method public android.view.MenuItem! setIconTintMode(android.graphics.PorterDuff.Mode!);
+ method public android.view.MenuItem! setNumericShortcut(char, int);
+ method public android.view.MenuItem! setShortcut(char, char, int, int);
+ method public androidx.core.internal.view.SupportMenuItem! setSupportActionProvider(androidx.core.view.ActionProvider!);
+ method public androidx.core.internal.view.SupportMenuItem! setTooltipText(CharSequence!);
+ field public static final int SHOW_AS_ACTION_ALWAYS = 2; // 0x2
+ field public static final int SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW = 8; // 0x8
+ field public static final int SHOW_AS_ACTION_IF_ROOM = 1; // 0x1
+ field public static final int SHOW_AS_ACTION_NEVER = 0; // 0x0
+ field public static final int SHOW_AS_ACTION_WITH_TEXT = 4; // 0x4
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface SupportSubMenu extends androidx.core.internal.view.SupportMenu android.view.SubMenu {
+ }
+
+}
+
+package androidx.core.location {
+
+ public final class LocationManagerCompat {
+ method public static boolean isLocationEnabled(android.location.LocationManager);
+ }
+
+}
+
+package androidx.core.math {
+
+ public class MathUtils {
+ method public static float clamp(float, float, float);
+ method public static double clamp(double, double, double);
+ method public static int clamp(int, int, int);
+ method public static long clamp(long, long, long);
+ }
+
+}
+
+package androidx.core.net {
+
+ public final class ConnectivityManagerCompat {
+ method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public static android.net.NetworkInfo? getNetworkInfoFromBroadcast(android.net.ConnectivityManager, android.content.Intent);
+ method @androidx.core.net.ConnectivityManagerCompat.RestrictBackgroundStatus public static int getRestrictBackgroundStatus(android.net.ConnectivityManager);
+ method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public static boolean isActiveNetworkMetered(android.net.ConnectivityManager);
+ field public static final int RESTRICT_BACKGROUND_STATUS_DISABLED = 1; // 0x1
+ field public static final int RESTRICT_BACKGROUND_STATUS_ENABLED = 3; // 0x3
+ field public static final int RESTRICT_BACKGROUND_STATUS_WHITELISTED = 2; // 0x2
+ }
+
+ @IntDef({androidx.core.net.ConnectivityManagerCompat.RESTRICT_BACKGROUND_STATUS_DISABLED, androidx.core.net.ConnectivityManagerCompat.RESTRICT_BACKGROUND_STATUS_WHITELISTED, androidx.core.net.ConnectivityManagerCompat.RESTRICT_BACKGROUND_STATUS_ENABLED}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ConnectivityManagerCompat.RestrictBackgroundStatus {
+ }
+
+ public final class TrafficStatsCompat {
+ method @Deprecated public static void clearThreadStatsTag();
+ method @Deprecated public static int getThreadStatsTag();
+ method @Deprecated public static void incrementOperationCount(int);
+ method @Deprecated public static void incrementOperationCount(int, int);
+ method @Deprecated public static void setThreadStatsTag(int);
+ method public static void tagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
+ method @Deprecated public static void tagSocket(java.net.Socket!) throws java.net.SocketException;
+ method public static void untagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
+ method @Deprecated public static void untagSocket(java.net.Socket!) throws java.net.SocketException;
+ }
+
+ public final class UriCompat {
+ method public static String toSafeString(android.net.Uri);
+ }
+
+}
+
+package androidx.core.os {
+
+ public class BuildCompat {
+ method @Deprecated public static boolean isAtLeastN();
+ method @Deprecated public static boolean isAtLeastNMR1();
+ method @Deprecated public static boolean isAtLeastO();
+ method @Deprecated public static boolean isAtLeastOMR1();
+ method @Deprecated public static boolean isAtLeastP();
+ method @Deprecated public static boolean isAtLeastQ();
+ method public static boolean isAtLeastR();
+ }
+
+ public final class CancellationSignal {
+ ctor public CancellationSignal();
+ method public void cancel();
+ method public Object? getCancellationSignalObject();
+ method public boolean isCanceled();
+ method public void setOnCancelListener(androidx.core.os.CancellationSignal.OnCancelListener?);
+ method public void throwIfCanceled();
+ }
+
+ public static interface CancellationSignal.OnCancelListener {
+ method public void onCancel();
+ }
+
+ public final class ConfigurationCompat {
+ method public static androidx.core.os.LocaleListCompat getLocales(android.content.res.Configuration);
+ }
+
+ public final class EnvironmentCompat {
+ method public static String getStorageState(java.io.File);
+ field public static final String MEDIA_UNKNOWN = "unknown";
+ }
+
+ public final class HandlerCompat {
+ method public static android.os.Handler createAsync(android.os.Looper);
+ method public static android.os.Handler createAsync(android.os.Looper, android.os.Handler.Callback);
+ method public static boolean postDelayed(android.os.Handler, Runnable, Object?, long);
+ }
+
+ public final class LocaleListCompat {
+ method public static androidx.core.os.LocaleListCompat create(java.util.Locale!...);
+ method public static androidx.core.os.LocaleListCompat forLanguageTags(String?);
+ method public java.util.Locale! get(int);
+ method @Size(min=1) public static androidx.core.os.LocaleListCompat getAdjustedDefault();
+ method @Size(min=1) public static androidx.core.os.LocaleListCompat getDefault();
+ method public static androidx.core.os.LocaleListCompat getEmptyLocaleList();
+ method public java.util.Locale? getFirstMatch(String![]);
+ method @IntRange(from=0xffffffff) public int indexOf(java.util.Locale!);
+ method public boolean isEmpty();
+ method @IntRange(from=0) public int size();
+ method public String toLanguageTags();
+ method public Object? unwrap();
+ method @Deprecated @RequiresApi(24) public static androidx.core.os.LocaleListCompat! wrap(Object!);
+ method @RequiresApi(24) public static androidx.core.os.LocaleListCompat wrap(android.os.LocaleList);
+ }
+
+ public final class MessageCompat {
+ method public static boolean isAsynchronous(android.os.Message);
+ method public static void setAsynchronous(android.os.Message, boolean);
+ }
+
+ public class OperationCanceledException extends java.lang.RuntimeException {
+ ctor public OperationCanceledException();
+ ctor public OperationCanceledException(String?);
+ }
+
+ public final class ParcelCompat {
+ method public static boolean readBoolean(android.os.Parcel);
+ method public static void writeBoolean(android.os.Parcel, boolean);
+ }
+
+ @Deprecated public final class ParcelableCompat {
+ method @Deprecated public static <T> android.os.Parcelable.Creator<T!>! newCreator(androidx.core.os.ParcelableCompatCreatorCallbacks<T!>!);
+ }
+
+ @Deprecated public interface ParcelableCompatCreatorCallbacks<T> {
+ method @Deprecated public T! createFromParcel(android.os.Parcel!, ClassLoader!);
+ method @Deprecated public T![]! newArray(int);
+ }
+
+ public final class TraceCompat {
+ method public static void beginAsyncSection(String, int);
+ method public static void beginSection(String);
+ method public static void endAsyncSection(String, int);
+ method public static void endSection();
+ method public static boolean isEnabled();
+ method public static void setCounter(String, int);
+ }
+
+ public class UserManagerCompat {
+ method public static boolean isUserUnlocked(android.content.Context);
+ }
+
+}
+
+package androidx.core.provider {
+
+ public final class FontRequest {
+ ctor public FontRequest(String, String, String, java.util.List<java.util.List<byte[]!>!>);
+ ctor public FontRequest(String, String, String, @ArrayRes int);
+ method public java.util.List<java.util.List<byte[]!>!>? getCertificates();
+ method @ArrayRes public int getCertificatesArrayResId();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public String! getIdentifier();
+ method public String getProviderAuthority();
+ method public String getProviderPackage();
+ method public String getQuery();
+ }
+
+ public class FontsContractCompat {
+ method public static android.graphics.Typeface? buildTypeface(android.content.Context, android.os.CancellationSignal?, androidx.core.provider.FontsContractCompat.FontInfo![]);
+ method public static androidx.core.provider.FontsContractCompat.FontFamilyResult fetchFonts(android.content.Context, android.os.CancellationSignal?, androidx.core.provider.FontRequest) throws android.content.pm.PackageManager.NameNotFoundException;
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static android.graphics.Typeface! getFontSync(android.content.Context!, androidx.core.provider.FontRequest!, androidx.core.content.res.ResourcesCompat.FontCallback?, android.os.Handler?, boolean, int, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @VisibleForTesting public static android.content.pm.ProviderInfo? getProvider(android.content.pm.PackageManager, androidx.core.provider.FontRequest, android.content.res.Resources?) throws android.content.pm.PackageManager.NameNotFoundException;
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @RequiresApi(19) public static java.util.Map<android.net.Uri!,java.nio.ByteBuffer!>! prepareFontData(android.content.Context!, androidx.core.provider.FontsContractCompat.FontInfo![]!, android.os.CancellationSignal!);
+ method public static void requestFont(android.content.Context, androidx.core.provider.FontRequest, androidx.core.provider.FontsContractCompat.FontRequestCallback, android.os.Handler);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static void resetCache();
+ field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final String PARCEL_FONT_RESULTS = "font_results";
+ }
+
+ public static final class FontsContractCompat.Columns implements android.provider.BaseColumns {
+ ctor public FontsContractCompat.Columns();
+ field public static final String FILE_ID = "file_id";
+ field public static final String ITALIC = "font_italic";
+ field public static final String RESULT_CODE = "result_code";
+ field public static final int RESULT_CODE_FONT_NOT_FOUND = 1; // 0x1
+ field public static final int RESULT_CODE_FONT_UNAVAILABLE = 2; // 0x2
+ field public static final int RESULT_CODE_MALFORMED_QUERY = 3; // 0x3
+ field public static final int RESULT_CODE_OK = 0; // 0x0
+ field public static final String TTC_INDEX = "font_ttc_index";
+ field public static final String VARIATION_SETTINGS = "font_variation_settings";
+ field public static final String WEIGHT = "font_weight";
+ }
+
+ public static class FontsContractCompat.FontFamilyResult {
+ ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public FontsContractCompat.FontFamilyResult(int, androidx.core.provider.FontsContractCompat.FontInfo![]?);
+ method public androidx.core.provider.FontsContractCompat.FontInfo![]! getFonts();
+ method public int getStatusCode();
+ field public static final int STATUS_OK = 0; // 0x0
+ field public static final int STATUS_UNEXPECTED_DATA_PROVIDED = 2; // 0x2
+ field public static final int STATUS_WRONG_CERTIFICATES = 1; // 0x1
+ }
+
+ public static class FontsContractCompat.FontInfo {
+ ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public FontsContractCompat.FontInfo(android.net.Uri, @IntRange(from=0) int, @IntRange(from=1, to=1000) int, boolean, int);
+ method public int getResultCode();
+ method @IntRange(from=0) public int getTtcIndex();
+ method public android.net.Uri getUri();
+ method @IntRange(from=1, to=1000) public int getWeight();
+ method public boolean isItalic();
+ }
+
+ public static class FontsContractCompat.FontRequestCallback {
+ ctor public FontsContractCompat.FontRequestCallback();
+ method public void onTypefaceRequestFailed(@androidx.core.provider.FontsContractCompat.FontRequestCallback.FontRequestFailReason int);
+ method public void onTypefaceRetrieved(android.graphics.Typeface!);
+ field public static final int FAIL_REASON_FONT_LOAD_ERROR = -3; // 0xfffffffd
+ field public static final int FAIL_REASON_FONT_NOT_FOUND = 1; // 0x1
+ field public static final int FAIL_REASON_FONT_UNAVAILABLE = 2; // 0x2
+ field public static final int FAIL_REASON_MALFORMED_QUERY = 3; // 0x3
+ field public static final int FAIL_REASON_PROVIDER_NOT_FOUND = -1; // 0xffffffff
+ field public static final int FAIL_REASON_SECURITY_VIOLATION = -4; // 0xfffffffc
+ field public static final int FAIL_REASON_WRONG_CERTIFICATES = -2; // 0xfffffffe
+ field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final int RESULT_OK = 0; // 0x0
+ }
+
+ @IntDef({androidx.core.provider.FontsContractCompat.FontRequestCallback.FAIL_REASON_PROVIDER_NOT_FOUND, androidx.core.provider.FontsContractCompat.FontRequestCallback.FAIL_REASON_FONT_LOAD_ERROR, androidx.core.provider.FontsContractCompat.FontRequestCallback.FAIL_REASON_FONT_NOT_FOUND, androidx.core.provider.FontsContractCompat.FontRequestCallback.FAIL_REASON_FONT_UNAVAILABLE, androidx.core.provider.FontsContractCompat.FontRequestCallback.FAIL_REASON_MALFORMED_QUERY, androidx.core.provider.FontsContractCompat.FontRequestCallback.FAIL_REASON_WRONG_CERTIFICATES, androidx.core.provider.FontsContractCompat.FontRequestCallback.FAIL_REASON_SECURITY_VIOLATION, androidx.core.provider.FontsContractCompat.FontRequestCallback.RESULT_OK}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface FontsContractCompat.FontRequestCallback.FontRequestFailReason {
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class SelfDestructiveThread {
+ ctor public SelfDestructiveThread(String!, int, int);
+ method @VisibleForTesting public int getGeneration();
+ method @VisibleForTesting public boolean isRunning();
+ method public <T> void postAndReply(java.util.concurrent.Callable<T!>!, androidx.core.provider.SelfDestructiveThread.ReplyCallback<T!>!);
+ method public <T> T! postAndWait(java.util.concurrent.Callable<T!>!, int) throws java.lang.InterruptedException;
+ }
+
+ public static interface SelfDestructiveThread.ReplyCallback<T> {
+ method public void onReply(T!);
+ }
+
+}
+
+package androidx.core.telephony.mbms {
+
+ public final class MbmsHelper {
+ method public static CharSequence? getBestNameForService(android.content.Context, android.telephony.mbms.ServiceInfo);
+ }
+
+}
+
+package androidx.core.text {
+
+ public final class BidiFormatter {
+ method public static androidx.core.text.BidiFormatter! getInstance();
+ method public static androidx.core.text.BidiFormatter! getInstance(boolean);
+ method public static androidx.core.text.BidiFormatter! getInstance(java.util.Locale!);
+ method public boolean getStereoReset();
+ method public boolean isRtl(String!);
+ method public boolean isRtl(CharSequence!);
+ method public boolean isRtlContext();
+ method public String! unicodeWrap(String!, androidx.core.text.TextDirectionHeuristicCompat!, boolean);
+ method public CharSequence! unicodeWrap(CharSequence!, androidx.core.text.TextDirectionHeuristicCompat!, boolean);
+ method public String! unicodeWrap(String!, androidx.core.text.TextDirectionHeuristicCompat!);
+ method public CharSequence! unicodeWrap(CharSequence!, androidx.core.text.TextDirectionHeuristicCompat!);
+ method public String! unicodeWrap(String!, boolean);
+ method public CharSequence! unicodeWrap(CharSequence!, boolean);
+ method public String! unicodeWrap(String!);
+ method public CharSequence! unicodeWrap(CharSequence!);
+ }
+
+ public static final class BidiFormatter.Builder {
+ ctor public BidiFormatter.Builder();
+ ctor public BidiFormatter.Builder(boolean);
+ ctor public BidiFormatter.Builder(java.util.Locale!);
+ method public androidx.core.text.BidiFormatter! build();
+ method public androidx.core.text.BidiFormatter.Builder! setTextDirectionHeuristic(androidx.core.text.TextDirectionHeuristicCompat!);
+ method public androidx.core.text.BidiFormatter.Builder! stereoReset(boolean);
+ }
+
+ public final class HtmlCompat {
+ method public static android.text.Spanned fromHtml(String, int);
+ method public static android.text.Spanned fromHtml(String, int, android.text.Html.ImageGetter?, android.text.Html.TagHandler?);
+ method public static String toHtml(android.text.Spanned, int);
+ field public static final int FROM_HTML_MODE_COMPACT = 63; // 0x3f
+ field public static final int FROM_HTML_MODE_LEGACY = 0; // 0x0
+ field public static final int FROM_HTML_OPTION_USE_CSS_COLORS = 256; // 0x100
+ field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_BLOCKQUOTE = 32; // 0x20
+ field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_DIV = 16; // 0x10
+ field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_HEADING = 2; // 0x2
+ field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_LIST = 8; // 0x8
+ field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_LIST_ITEM = 4; // 0x4
+ field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_PARAGRAPH = 1; // 0x1
+ field public static final int TO_HTML_PARAGRAPH_LINES_CONSECUTIVE = 0; // 0x0
+ field public static final int TO_HTML_PARAGRAPH_LINES_INDIVIDUAL = 1; // 0x1
+ }
+
+ public final class ICUCompat {
+ method public static String? maximizeAndGetScript(java.util.Locale!);
+ }
+
+ public class PrecomputedTextCompat implements android.text.Spannable {
+ method public char charAt(int);
+ method public static androidx.core.text.PrecomputedTextCompat! create(CharSequence, androidx.core.text.PrecomputedTextCompat.Params);
+ method @IntRange(from=0) public int getParagraphCount();
+ method @IntRange(from=0) public int getParagraphEnd(@IntRange(from=0) int);
+ method @IntRange(from=0) public int getParagraphStart(@IntRange(from=0) int);
+ method public androidx.core.text.PrecomputedTextCompat.Params getParams();
+ method @RequiresApi(28) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.text.PrecomputedText? getPrecomputedText();
+ method public int getSpanEnd(Object!);
+ method public int getSpanFlags(Object!);
+ method public int getSpanStart(Object!);
+ method public <T> T![]! getSpans(int, int, Class<T!>!);
+ method @UiThread public static java.util.concurrent.Future<androidx.core.text.PrecomputedTextCompat!>! getTextFuture(CharSequence, androidx.core.text.PrecomputedTextCompat.Params, java.util.concurrent.Executor?);
+ method public int length();
+ method public int nextSpanTransition(int, int, Class!);
+ method public void removeSpan(Object!);
+ method public void setSpan(Object!, int, int, int);
+ method public CharSequence! subSequence(int, int);
+ }
+
+ public static final class PrecomputedTextCompat.Params {
+ ctor @RequiresApi(28) public PrecomputedTextCompat.Params(android.text.PrecomputedText.Params);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public boolean equalsWithoutTextDirection(androidx.core.text.PrecomputedTextCompat.Params);
+ method @RequiresApi(23) public int getBreakStrategy();
+ method @RequiresApi(23) public int getHyphenationFrequency();
+ method @RequiresApi(18) public android.text.TextDirectionHeuristic? getTextDirection();
+ method public android.text.TextPaint getTextPaint();
+ }
+
+ public static class PrecomputedTextCompat.Params.Builder {
+ ctor public PrecomputedTextCompat.Params.Builder(android.text.TextPaint);
+ method public androidx.core.text.PrecomputedTextCompat.Params build();
+ method @RequiresApi(23) public androidx.core.text.PrecomputedTextCompat.Params.Builder! setBreakStrategy(int);
+ method @RequiresApi(23) public androidx.core.text.PrecomputedTextCompat.Params.Builder! setHyphenationFrequency(int);
+ method @RequiresApi(18) public androidx.core.text.PrecomputedTextCompat.Params.Builder! setTextDirection(android.text.TextDirectionHeuristic);
+ }
+
+ public interface TextDirectionHeuristicCompat {
+ method public boolean isRtl(char[]!, int, int);
+ method public boolean isRtl(CharSequence!, int, int);
+ }
+
+ public final class TextDirectionHeuristicsCompat {
+ field public static final androidx.core.text.TextDirectionHeuristicCompat! ANYRTL_LTR;
+ field public static final androidx.core.text.TextDirectionHeuristicCompat! FIRSTSTRONG_LTR;
+ field public static final androidx.core.text.TextDirectionHeuristicCompat! FIRSTSTRONG_RTL;
+ field public static final androidx.core.text.TextDirectionHeuristicCompat! LOCALE;
+ field public static final androidx.core.text.TextDirectionHeuristicCompat! LTR;
+ field public static final androidx.core.text.TextDirectionHeuristicCompat! RTL;
+ }
+
+ public final class TextUtilsCompat {
+ method public static int getLayoutDirectionFromLocale(java.util.Locale?);
+ method public static String htmlEncode(String);
+ }
+
+}
+
+package androidx.core.text.util {
+
+ public final class LinkifyCompat {
+ method public static boolean addLinks(android.text.Spannable, @androidx.core.text.util.LinkifyCompat.LinkifyMask int);
+ method public static boolean addLinks(android.widget.TextView, @androidx.core.text.util.LinkifyCompat.LinkifyMask int);
+ method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, String?);
+ method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, String?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
+ method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, String?, String![]?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
+ method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?);
+ method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
+ method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?, String![]?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
+ }
+
+ @IntDef(flag=true, value={android.text.util.Linkify.WEB_URLS, android.text.util.Linkify.EMAIL_ADDRESSES, android.text.util.Linkify.PHONE_NUMBERS, android.text.util.Linkify.MAP_ADDRESSES, android.text.util.Linkify.ALL}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface LinkifyCompat.LinkifyMask {
+ }
+
+}
+
+package androidx.core.util {
+
+ public class AtomicFile {
+ ctor public AtomicFile(java.io.File);
+ method public void delete();
+ method public void failWrite(java.io.FileOutputStream?);
+ method public void finishWrite(java.io.FileOutputStream?);
+ method public java.io.File getBaseFile();
+ method public java.io.FileInputStream openRead() throws java.io.FileNotFoundException;
+ method public byte[] readFully() throws java.io.IOException;
+ method public java.io.FileOutputStream startWrite() throws java.io.IOException;
+ }
+
+ public interface Consumer<T> {
+ method public void accept(T!);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class DebugUtils {
+ method public static void buildShortClassTag(Object!, StringBuilder!);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class LogWriter extends java.io.Writer {
+ ctor public LogWriter(String!);
+ method public void close();
+ method public void flush();
+ method public void write(char[]!, int, int);
+ }
+
+ public class ObjectsCompat {
+ method public static boolean equals(Object?, Object?);
+ method public static int hash(java.lang.Object!...);
+ method public static int hashCode(Object?);
+ }
+
+ public class Pair<F, S> {
+ ctor public Pair(F?, S?);
+ method public static <A, B> androidx.core.util.Pair<A!,B!> create(A?, B?);
+ field public final F? first;
+ field public final S? second;
+ }
+
+ public final class PatternsCompat {
+ field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final java.util.regex.Pattern! AUTOLINK_EMAIL_ADDRESS;
+ field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final java.util.regex.Pattern! AUTOLINK_WEB_URL;
+ field public static final java.util.regex.Pattern! DOMAIN_NAME;
+ field public static final java.util.regex.Pattern! EMAIL_ADDRESS;
+ field public static final java.util.regex.Pattern! IP_ADDRESS;
+ field public static final java.util.regex.Pattern! WEB_URL;
+ }
+
+ public final class Pools {
+ }
+
+ public static interface Pools.Pool<T> {
+ method public T? acquire();
+ method public boolean release(T);
+ }
+
+ public static class Pools.SimplePool<T> implements androidx.core.util.Pools.Pool<T> {
+ ctor public Pools.SimplePool(int);
+ method public T! acquire();
+ method public boolean release(T);
+ }
+
+ public static class Pools.SynchronizedPool<T> extends androidx.core.util.Pools.SimplePool<T> {
+ ctor public Pools.SynchronizedPool(int);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class Preconditions {
+ method public static void checkArgument(boolean);
+ method public static void checkArgument(boolean, Object);
+ method public static int checkArgumentInRange(int, int, int, String);
+ method @IntRange(from=0) public static int checkArgumentNonnegative(int, String?);
+ method @IntRange(from=0) public static int checkArgumentNonnegative(int);
+ method public static <T> T checkNotNull(T?);
+ method public static <T> T checkNotNull(T?, Object);
+ method public static void checkState(boolean, String?);
+ method public static void checkState(boolean);
+ }
+
+ public interface Predicate<T> {
+ method public boolean test(T!);
+ }
+
+ public interface Supplier<T> {
+ method public T! get();
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class TimeUtils {
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static void formatDuration(long, StringBuilder!);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static void formatDuration(long, java.io.PrintWriter!, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static void formatDuration(long, java.io.PrintWriter!);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static void formatDuration(long, long, java.io.PrintWriter!);
+ field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final int HUNDRED_DAY_FIELD_LEN = 19; // 0x13
+ }
+
+}
+
+package androidx.core.view {
+
+ public class AccessibilityDelegateCompat {
+ ctor public AccessibilityDelegateCompat();
+ ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public AccessibilityDelegateCompat(android.view.View.AccessibilityDelegate!);
+ method public boolean dispatchPopulateAccessibilityEvent(android.view.View!, android.view.accessibility.AccessibilityEvent!);
+ method public androidx.core.view.accessibility.AccessibilityNodeProviderCompat! getAccessibilityNodeProvider(android.view.View!);
+ method public void onInitializeAccessibilityEvent(android.view.View!, android.view.accessibility.AccessibilityEvent!);
+ method public void onInitializeAccessibilityNodeInfo(android.view.View!, androidx.core.view.accessibility.AccessibilityNodeInfoCompat!);
+ method public void onPopulateAccessibilityEvent(android.view.View!, android.view.accessibility.AccessibilityEvent!);
+ method public boolean onRequestSendAccessibilityEvent(android.view.ViewGroup!, android.view.View!, android.view.accessibility.AccessibilityEvent!);
+ method public boolean performAccessibilityAction(android.view.View!, int, android.os.Bundle!);
+ method public void sendAccessibilityEvent(android.view.View!, int);
+ method public void sendAccessibilityEventUnchecked(android.view.View!, android.view.accessibility.AccessibilityEvent!);
+ }
+
+ public abstract class ActionProvider {
+ ctor public ActionProvider(android.content.Context!);
+ method public android.content.Context! getContext();
+ method public boolean hasSubMenu();
+ method public boolean isVisible();
+ method public abstract android.view.View! onCreateActionView();
+ method public android.view.View! onCreateActionView(android.view.MenuItem!);
+ method public boolean onPerformDefaultAction();
+ method public void onPrepareSubMenu(android.view.SubMenu!);
+ method public boolean overridesItemVisibility();
+ method public void refreshVisibility();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void reset();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSubUiVisibilityListener(androidx.core.view.ActionProvider.SubUiVisibilityListener!);
+ method public void setVisibilityListener(androidx.core.view.ActionProvider.VisibilityListener!);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void subUiVisibilityChanged(boolean);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static interface ActionProvider.SubUiVisibilityListener {
+ method public void onSubUiVisibilityChanged(boolean);
+ }
+
+ public static interface ActionProvider.VisibilityListener {
+ method public void onActionProviderVisibilityChanged(boolean);
+ }
+
+ public final class DisplayCutoutCompat {
+ ctor public DisplayCutoutCompat(android.graphics.Rect!, java.util.List<android.graphics.Rect!>!);
+ method public java.util.List<android.graphics.Rect!>! getBoundingRects();
+ method public int getSafeInsetBottom();
+ method public int getSafeInsetLeft();
+ method public int getSafeInsetRight();
+ method public int getSafeInsetTop();
+ }
+
+ public final class DragAndDropPermissionsCompat {
+ method public void release();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.view.DragAndDropPermissionsCompat? request(android.app.Activity!, android.view.DragEvent!);
+ }
+
+ public class DragStartHelper {
+ ctor public DragStartHelper(android.view.View!, androidx.core.view.DragStartHelper.OnDragStartListener!);
+ method public void attach();
+ method public void detach();
+ method public void getTouchPosition(android.graphics.Point!);
+ method public boolean onLongClick(android.view.View!);
+ method public boolean onTouch(android.view.View!, android.view.MotionEvent!);
+ }
+
+ public static interface DragStartHelper.OnDragStartListener {
+ method public boolean onDragStart(android.view.View!, androidx.core.view.DragStartHelper!);
+ }
+
+ public final class GestureDetectorCompat {
+ ctor public GestureDetectorCompat(android.content.Context!, android.view.GestureDetector.OnGestureListener!);
+ ctor public GestureDetectorCompat(android.content.Context!, android.view.GestureDetector.OnGestureListener!, android.os.Handler!);
+ method public boolean isLongpressEnabled();
+ method public boolean onTouchEvent(android.view.MotionEvent!);
+ method public void setIsLongpressEnabled(boolean);
+ method public void setOnDoubleTapListener(android.view.GestureDetector.OnDoubleTapListener!);
+ }
+
+ public final class GravityCompat {
+ method public static void apply(int, int, int, android.graphics.Rect!, android.graphics.Rect!, int);
+ method public static void apply(int, int, int, android.graphics.Rect!, int, int, android.graphics.Rect!, int);
+ method public static void applyDisplay(int, android.graphics.Rect!, android.graphics.Rect!, int);
+ method public static int getAbsoluteGravity(int, int);
+ field public static final int END = 8388613; // 0x800005
+ field public static final int RELATIVE_HORIZONTAL_GRAVITY_MASK = 8388615; // 0x800007
+ field public static final int RELATIVE_LAYOUT_DIRECTION = 8388608; // 0x800000
+ field public static final int START = 8388611; // 0x800003
+ }
+
+ public final class InputDeviceCompat {
+ field public static final int SOURCE_ANY = -256; // 0xffffff00
+ field public static final int SOURCE_CLASS_BUTTON = 1; // 0x1
+ field public static final int SOURCE_CLASS_JOYSTICK = 16; // 0x10
+ field public static final int SOURCE_CLASS_MASK = 255; // 0xff
+ field public static final int SOURCE_CLASS_NONE = 0; // 0x0
+ field public static final int SOURCE_CLASS_POINTER = 2; // 0x2
+ field public static final int SOURCE_CLASS_POSITION = 8; // 0x8
+ field public static final int SOURCE_CLASS_TRACKBALL = 4; // 0x4
+ field public static final int SOURCE_DPAD = 513; // 0x201
+ field public static final int SOURCE_GAMEPAD = 1025; // 0x401
+ field public static final int SOURCE_HDMI = 33554433; // 0x2000001
+ field public static final int SOURCE_JOYSTICK = 16777232; // 0x1000010
+ field public static final int SOURCE_KEYBOARD = 257; // 0x101
+ field public static final int SOURCE_MOUSE = 8194; // 0x2002
+ field public static final int SOURCE_ROTARY_ENCODER = 4194304; // 0x400000
+ field public static final int SOURCE_STYLUS = 16386; // 0x4002
+ field public static final int SOURCE_TOUCHPAD = 1048584; // 0x100008
+ field public static final int SOURCE_TOUCHSCREEN = 4098; // 0x1002
+ field public static final int SOURCE_TOUCH_NAVIGATION = 2097152; // 0x200000
+ field public static final int SOURCE_TRACKBALL = 65540; // 0x10004
+ field public static final int SOURCE_UNKNOWN = 0; // 0x0
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class KeyEventDispatcher {
+ method public static boolean dispatchBeforeHierarchy(android.view.View, android.view.KeyEvent);
+ method public static boolean dispatchKeyEvent(androidx.core.view.KeyEventDispatcher.Component, android.view.View?, android.view.Window.Callback?, android.view.KeyEvent);
+ }
+
+ public static interface KeyEventDispatcher.Component {
+ method public boolean superDispatchKeyEvent(android.view.KeyEvent!);
+ }
+
+ public final class LayoutInflaterCompat {
+ method @Deprecated public static androidx.core.view.LayoutInflaterFactory! getFactory(android.view.LayoutInflater!);
+ method @Deprecated public static void setFactory(android.view.LayoutInflater, androidx.core.view.LayoutInflaterFactory);
+ method public static void setFactory2(android.view.LayoutInflater, android.view.LayoutInflater.Factory2);
+ }
+
+ @Deprecated public interface LayoutInflaterFactory {
+ method @Deprecated public android.view.View! onCreateView(android.view.View!, String!, android.content.Context!, android.util.AttributeSet!);
+ }
+
+ public final class MarginLayoutParamsCompat {
+ method public static int getLayoutDirection(android.view.ViewGroup.MarginLayoutParams!);
+ method public static int getMarginEnd(android.view.ViewGroup.MarginLayoutParams!);
+ method public static int getMarginStart(android.view.ViewGroup.MarginLayoutParams!);
+ method public static boolean isMarginRelative(android.view.ViewGroup.MarginLayoutParams!);
+ method public static void resolveLayoutDirection(android.view.ViewGroup.MarginLayoutParams!, int);
+ method public static void setLayoutDirection(android.view.ViewGroup.MarginLayoutParams!, int);
+ method public static void setMarginEnd(android.view.ViewGroup.MarginLayoutParams!, int);
+ method public static void setMarginStart(android.view.ViewGroup.MarginLayoutParams!, int);
+ }
+
+ public final class MenuCompat {
+ method public static void setGroupDividerEnabled(android.view.Menu!, boolean);
+ method @Deprecated public static void setShowAsAction(android.view.MenuItem!, int);
+ }
+
+ public final class MenuItemCompat {
+ method @Deprecated public static boolean collapseActionView(android.view.MenuItem!);
+ method @Deprecated public static boolean expandActionView(android.view.MenuItem!);
+ method public static androidx.core.view.ActionProvider! getActionProvider(android.view.MenuItem!);
+ method @Deprecated public static android.view.View! getActionView(android.view.MenuItem!);
+ method public static int getAlphabeticModifiers(android.view.MenuItem!);
+ method public static CharSequence! getContentDescription(android.view.MenuItem!);
+ method public static android.content.res.ColorStateList! getIconTintList(android.view.MenuItem!);
+ method public static android.graphics.PorterDuff.Mode! getIconTintMode(android.view.MenuItem!);
+ method public static int getNumericModifiers(android.view.MenuItem!);
+ method public static CharSequence! getTooltipText(android.view.MenuItem!);
+ method @Deprecated public static boolean isActionViewExpanded(android.view.MenuItem!);
+ method public static android.view.MenuItem! setActionProvider(android.view.MenuItem!, androidx.core.view.ActionProvider!);
+ method @Deprecated public static android.view.MenuItem! setActionView(android.view.MenuItem!, android.view.View!);
+ method @Deprecated public static android.view.MenuItem! setActionView(android.view.MenuItem!, int);
+ method public static void setAlphabeticShortcut(android.view.MenuItem!, char, int);
+ method public static void setContentDescription(android.view.MenuItem!, CharSequence!);
+ method public static void setIconTintList(android.view.MenuItem!, android.content.res.ColorStateList!);
+ method public static void setIconTintMode(android.view.MenuItem!, android.graphics.PorterDuff.Mode!);
+ method public static void setNumericShortcut(android.view.MenuItem!, char, int);
+ method @Deprecated public static android.view.MenuItem! setOnActionExpandListener(android.view.MenuItem!, androidx.core.view.MenuItemCompat.OnActionExpandListener!);
+ method public static void setShortcut(android.view.MenuItem!, char, char, int, int);
+ method @Deprecated public static void setShowAsAction(android.view.MenuItem!, int);
+ method public static void setTooltipText(android.view.MenuItem!, CharSequence!);
+ field @Deprecated public static final int SHOW_AS_ACTION_ALWAYS = 2; // 0x2
+ field @Deprecated public static final int SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW = 8; // 0x8
+ field @Deprecated public static final int SHOW_AS_ACTION_IF_ROOM = 1; // 0x1
+ field @Deprecated public static final int SHOW_AS_ACTION_NEVER = 0; // 0x0
+ field @Deprecated public static final int SHOW_AS_ACTION_WITH_TEXT = 4; // 0x4
+ }
+
+ @Deprecated public static interface MenuItemCompat.OnActionExpandListener {
+ method @Deprecated public boolean onMenuItemActionCollapse(android.view.MenuItem!);
+ method @Deprecated public boolean onMenuItemActionExpand(android.view.MenuItem!);
+ }
+
+ public final class MotionEventCompat {
+ method @Deprecated public static int findPointerIndex(android.view.MotionEvent!, int);
+ method @Deprecated public static int getActionIndex(android.view.MotionEvent!);
+ method @Deprecated public static int getActionMasked(android.view.MotionEvent!);
+ method @Deprecated public static float getAxisValue(android.view.MotionEvent!, int);
+ method @Deprecated public static float getAxisValue(android.view.MotionEvent!, int, int);
+ method @Deprecated public static int getButtonState(android.view.MotionEvent!);
+ method @Deprecated public static int getPointerCount(android.view.MotionEvent!);
+ method @Deprecated public static int getPointerId(android.view.MotionEvent!, int);
+ method @Deprecated public static int getSource(android.view.MotionEvent!);
+ method @Deprecated public static float getX(android.view.MotionEvent!, int);
+ method @Deprecated public static float getY(android.view.MotionEvent!, int);
+ method public static boolean isFromSource(android.view.MotionEvent!, int);
+ field @Deprecated public static final int ACTION_HOVER_ENTER = 9; // 0x9
+ field @Deprecated public static final int ACTION_HOVER_EXIT = 10; // 0xa
+ field @Deprecated public static final int ACTION_HOVER_MOVE = 7; // 0x7
+ field @Deprecated public static final int ACTION_MASK = 255; // 0xff
+ field @Deprecated public static final int ACTION_POINTER_DOWN = 5; // 0x5
+ field @Deprecated public static final int ACTION_POINTER_INDEX_MASK = 65280; // 0xff00
+ field @Deprecated public static final int ACTION_POINTER_INDEX_SHIFT = 8; // 0x8
+ field @Deprecated public static final int ACTION_POINTER_UP = 6; // 0x6
+ field @Deprecated public static final int ACTION_SCROLL = 8; // 0x8
+ field @Deprecated public static final int AXIS_BRAKE = 23; // 0x17
+ field @Deprecated public static final int AXIS_DISTANCE = 24; // 0x18
+ field @Deprecated public static final int AXIS_GAS = 22; // 0x16
+ field @Deprecated public static final int AXIS_GENERIC_1 = 32; // 0x20
+ field @Deprecated public static final int AXIS_GENERIC_10 = 41; // 0x29
+ field @Deprecated public static final int AXIS_GENERIC_11 = 42; // 0x2a
+ field @Deprecated public static final int AXIS_GENERIC_12 = 43; // 0x2b
+ field @Deprecated public static final int AXIS_GENERIC_13 = 44; // 0x2c
+ field @Deprecated public static final int AXIS_GENERIC_14 = 45; // 0x2d
+ field @Deprecated public static final int AXIS_GENERIC_15 = 46; // 0x2e
+ field @Deprecated public static final int AXIS_GENERIC_16 = 47; // 0x2f
+ field @Deprecated public static final int AXIS_GENERIC_2 = 33; // 0x21
+ field @Deprecated public static final int AXIS_GENERIC_3 = 34; // 0x22
+ field @Deprecated public static final int AXIS_GENERIC_4 = 35; // 0x23
+ field @Deprecated public static final int AXIS_GENERIC_5 = 36; // 0x24
+ field @Deprecated public static final int AXIS_GENERIC_6 = 37; // 0x25
+ field @Deprecated public static final int AXIS_GENERIC_7 = 38; // 0x26
+ field @Deprecated public static final int AXIS_GENERIC_8 = 39; // 0x27
+ field @Deprecated public static final int AXIS_GENERIC_9 = 40; // 0x28
+ field @Deprecated public static final int AXIS_HAT_X = 15; // 0xf
+ field @Deprecated public static final int AXIS_HAT_Y = 16; // 0x10
+ field @Deprecated public static final int AXIS_HSCROLL = 10; // 0xa
+ field @Deprecated public static final int AXIS_LTRIGGER = 17; // 0x11
+ field @Deprecated public static final int AXIS_ORIENTATION = 8; // 0x8
+ field @Deprecated public static final int AXIS_PRESSURE = 2; // 0x2
+ field public static final int AXIS_RELATIVE_X = 27; // 0x1b
+ field public static final int AXIS_RELATIVE_Y = 28; // 0x1c
+ field @Deprecated public static final int AXIS_RTRIGGER = 18; // 0x12
+ field @Deprecated public static final int AXIS_RUDDER = 20; // 0x14
+ field @Deprecated public static final int AXIS_RX = 12; // 0xc
+ field @Deprecated public static final int AXIS_RY = 13; // 0xd
+ field @Deprecated public static final int AXIS_RZ = 14; // 0xe
+ field public static final int AXIS_SCROLL = 26; // 0x1a
+ field @Deprecated public static final int AXIS_SIZE = 3; // 0x3
+ field @Deprecated public static final int AXIS_THROTTLE = 19; // 0x13
+ field @Deprecated public static final int AXIS_TILT = 25; // 0x19
+ field @Deprecated public static final int AXIS_TOOL_MAJOR = 6; // 0x6
+ field @Deprecated public static final int AXIS_TOOL_MINOR = 7; // 0x7
+ field @Deprecated public static final int AXIS_TOUCH_MAJOR = 4; // 0x4
+ field @Deprecated public static final int AXIS_TOUCH_MINOR = 5; // 0x5
+ field @Deprecated public static final int AXIS_VSCROLL = 9; // 0x9
+ field @Deprecated public static final int AXIS_WHEEL = 21; // 0x15
+ field @Deprecated public static final int AXIS_X = 0; // 0x0
+ field @Deprecated public static final int AXIS_Y = 1; // 0x1
+ field @Deprecated public static final int AXIS_Z = 11; // 0xb
+ field @Deprecated public static final int BUTTON_PRIMARY = 1; // 0x1
+ }
+
+ public interface NestedScrollingChild {
+ method public boolean dispatchNestedFling(float, float, boolean);
+ method public boolean dispatchNestedPreFling(float, float);
+ method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?);
+ method public boolean dispatchNestedScroll(int, int, int, int, int[]?);
+ method public boolean hasNestedScrollingParent();
+ method public boolean isNestedScrollingEnabled();
+ method public void setNestedScrollingEnabled(boolean);
+ method public boolean startNestedScroll(@androidx.core.view.ViewCompat.ScrollAxis int);
+ method public void stopNestedScroll();
+ }
+
+ public interface NestedScrollingChild2 extends androidx.core.view.NestedScrollingChild {
+ method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?, @androidx.core.view.ViewCompat.NestedScrollType int);
+ method public boolean dispatchNestedScroll(int, int, int, int, int[]?, @androidx.core.view.ViewCompat.NestedScrollType int);
+ method public boolean hasNestedScrollingParent(@androidx.core.view.ViewCompat.NestedScrollType int);
+ method public boolean startNestedScroll(@androidx.core.view.ViewCompat.ScrollAxis int, @androidx.core.view.ViewCompat.NestedScrollType int);
+ method public void stopNestedScroll(@androidx.core.view.ViewCompat.NestedScrollType int);
+ }
+
+ public interface NestedScrollingChild3 extends androidx.core.view.NestedScrollingChild2 {
+ method public void dispatchNestedScroll(int, int, int, int, int[]?, @androidx.core.view.ViewCompat.NestedScrollType int, int[]);
+ }
+
+ public class NestedScrollingChildHelper {
+ ctor public NestedScrollingChildHelper(android.view.View);
+ method public boolean dispatchNestedFling(float, float, boolean);
+ method public boolean dispatchNestedPreFling(float, float);
+ method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?);
+ method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?, @androidx.core.view.ViewCompat.NestedScrollType int);
+ method public boolean dispatchNestedScroll(int, int, int, int, int[]?);
+ method public boolean dispatchNestedScroll(int, int, int, int, int[]?, @androidx.core.view.ViewCompat.NestedScrollType int);
+ method public void dispatchNestedScroll(int, int, int, int, int[]?, @androidx.core.view.ViewCompat.NestedScrollType int, int[]?);
+ method public boolean hasNestedScrollingParent();
+ method public boolean hasNestedScrollingParent(@androidx.core.view.ViewCompat.NestedScrollType int);
+ method public boolean isNestedScrollingEnabled();
+ method public void onDetachedFromWindow();
+ method public void onStopNestedScroll(android.view.View);
+ method public void setNestedScrollingEnabled(boolean);
+ method public boolean startNestedScroll(@androidx.core.view.ViewCompat.ScrollAxis int);
+ method public boolean startNestedScroll(@androidx.core.view.ViewCompat.ScrollAxis int, @androidx.core.view.ViewCompat.NestedScrollType int);
+ method public void stopNestedScroll();
+ method public void stopNestedScroll(@androidx.core.view.ViewCompat.NestedScrollType int);
+ }
+
+ public interface NestedScrollingParent {
+ method @androidx.core.view.ViewCompat.ScrollAxis public int getNestedScrollAxes();
+ method public boolean onNestedFling(android.view.View, float, float, boolean);
+ method public boolean onNestedPreFling(android.view.View, float, float);
+ method public void onNestedPreScroll(android.view.View, int, int, int[]);
+ method public void onNestedScroll(android.view.View, int, int, int, int);
+ method public void onNestedScrollAccepted(android.view.View, android.view.View, @androidx.core.view.ViewCompat.ScrollAxis int);
+ method public boolean onStartNestedScroll(android.view.View, android.view.View, @androidx.core.view.ViewCompat.ScrollAxis int);
+ method public void onStopNestedScroll(android.view.View);
+ }
+
+ public interface NestedScrollingParent2 extends androidx.core.view.NestedScrollingParent {
+ method public void onNestedPreScroll(android.view.View, int, int, int[], @androidx.core.view.ViewCompat.NestedScrollType int);
+ method public void onNestedScroll(android.view.View, int, int, int, int, @androidx.core.view.ViewCompat.NestedScrollType int);
+ method public void onNestedScrollAccepted(android.view.View, android.view.View, @androidx.core.view.ViewCompat.ScrollAxis int, @androidx.core.view.ViewCompat.NestedScrollType int);
+ method public boolean onStartNestedScroll(android.view.View, android.view.View, @androidx.core.view.ViewCompat.ScrollAxis int, @androidx.core.view.ViewCompat.NestedScrollType int);
+ method public void onStopNestedScroll(android.view.View, @androidx.core.view.ViewCompat.NestedScrollType int);
+ }
+
+ public interface NestedScrollingParent3 extends androidx.core.view.NestedScrollingParent2 {
+ method public void onNestedScroll(android.view.View, int, int, int, int, @androidx.core.view.ViewCompat.NestedScrollType int, int[]);
+ }
+
+ public class NestedScrollingParentHelper {
+ ctor public NestedScrollingParentHelper(android.view.ViewGroup);
+ method @androidx.core.view.ViewCompat.ScrollAxis public int getNestedScrollAxes();
+ method public void onNestedScrollAccepted(android.view.View, android.view.View, @androidx.core.view.ViewCompat.ScrollAxis int);
+ method public void onNestedScrollAccepted(android.view.View, android.view.View, @androidx.core.view.ViewCompat.ScrollAxis int, @androidx.core.view.ViewCompat.NestedScrollType int);
+ method public void onStopNestedScroll(android.view.View);
+ method public void onStopNestedScroll(android.view.View, @androidx.core.view.ViewCompat.NestedScrollType int);
+ }
+
+ public interface OnApplyWindowInsetsListener {
+ method public androidx.core.view.WindowInsetsCompat! onApplyWindowInsets(android.view.View!, androidx.core.view.WindowInsetsCompat!);
+ }
+
+ public final class OneShotPreDrawListener implements android.view.View.OnAttachStateChangeListener android.view.ViewTreeObserver.OnPreDrawListener {
+ method public static androidx.core.view.OneShotPreDrawListener add(android.view.View, Runnable);
+ method public boolean onPreDraw();
+ method public void onViewAttachedToWindow(android.view.View!);
+ method public void onViewDetachedFromWindow(android.view.View!);
+ method public void removeListener();
+ }
+
+ public final class PointerIconCompat {
+ method public static androidx.core.view.PointerIconCompat! create(android.graphics.Bitmap!, float, float);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public Object! getPointerIcon();
+ method public static androidx.core.view.PointerIconCompat! getSystemIcon(android.content.Context!, int);
+ method public static androidx.core.view.PointerIconCompat! load(android.content.res.Resources!, int);
+ field public static final int TYPE_ALIAS = 1010; // 0x3f2
+ field public static final int TYPE_ALL_SCROLL = 1013; // 0x3f5
+ field public static final int TYPE_ARROW = 1000; // 0x3e8
+ field public static final int TYPE_CELL = 1006; // 0x3ee
+ field public static final int TYPE_CONTEXT_MENU = 1001; // 0x3e9
+ field public static final int TYPE_COPY = 1011; // 0x3f3
+ field public static final int TYPE_CROSSHAIR = 1007; // 0x3ef
+ field public static final int TYPE_DEFAULT = 1000; // 0x3e8
+ field public static final int TYPE_GRAB = 1020; // 0x3fc
+ field public static final int TYPE_GRABBING = 1021; // 0x3fd
+ field public static final int TYPE_HAND = 1002; // 0x3ea
+ field public static final int TYPE_HELP = 1003; // 0x3eb
+ field public static final int TYPE_HORIZONTAL_DOUBLE_ARROW = 1014; // 0x3f6
+ field public static final int TYPE_NO_DROP = 1012; // 0x3f4
+ field public static final int TYPE_NULL = 0; // 0x0
+ field public static final int TYPE_TEXT = 1008; // 0x3f0
+ field public static final int TYPE_TOP_LEFT_DIAGONAL_DOUBLE_ARROW = 1017; // 0x3f9
+ field public static final int TYPE_TOP_RIGHT_DIAGONAL_DOUBLE_ARROW = 1016; // 0x3f8
+ field public static final int TYPE_VERTICAL_DOUBLE_ARROW = 1015; // 0x3f7
+ field public static final int TYPE_VERTICAL_TEXT = 1009; // 0x3f1
+ field public static final int TYPE_WAIT = 1004; // 0x3ec
+ field public static final int TYPE_ZOOM_IN = 1018; // 0x3fa
+ field public static final int TYPE_ZOOM_OUT = 1019; // 0x3fb
+ }
+
+ public final class ScaleGestureDetectorCompat {
+ method @Deprecated public static boolean isQuickScaleEnabled(Object!);
+ method public static boolean isQuickScaleEnabled(android.view.ScaleGestureDetector!);
+ method @Deprecated public static void setQuickScaleEnabled(Object!, boolean);
+ method public static void setQuickScaleEnabled(android.view.ScaleGestureDetector!, boolean);
+ }
+
+ public interface ScrollingView {
+ method public int computeHorizontalScrollExtent();
+ method public int computeHorizontalScrollOffset();
+ method public int computeHorizontalScrollRange();
+ method public int computeVerticalScrollExtent();
+ method public int computeVerticalScrollOffset();
+ method public int computeVerticalScrollRange();
+ }
+
+ public interface TintableBackgroundView {
+ method public android.content.res.ColorStateList? getSupportBackgroundTintList();
+ method public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+ method public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+ method public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+ }
+
+ @Deprecated public final class VelocityTrackerCompat {
+ method @Deprecated public static float getXVelocity(android.view.VelocityTracker!, int);
+ method @Deprecated public static float getYVelocity(android.view.VelocityTracker!, int);
+ }
+
+ public class ViewCompat {
+ ctor protected ViewCompat();
+ method public static int addAccessibilityAction(android.view.View, CharSequence, androidx.core.view.accessibility.AccessibilityViewCommand);
+ method public static void addKeyboardNavigationClusters(android.view.View, java.util.Collection<android.view.View!>, int);
+ method public static void addOnUnhandledKeyEventListener(android.view.View, androidx.core.view.ViewCompat.OnUnhandledKeyEventListenerCompat);
+ method public static androidx.core.view.ViewPropertyAnimatorCompat animate(android.view.View);
+ method @Deprecated public static boolean canScrollHorizontally(android.view.View!, int);
+ method @Deprecated public static boolean canScrollVertically(android.view.View!, int);
+ method public static void cancelDragAndDrop(android.view.View);
+ method @Deprecated public static int combineMeasuredStates(int, int);
+ method public static androidx.core.view.WindowInsetsCompat! dispatchApplyWindowInsets(android.view.View, androidx.core.view.WindowInsetsCompat!);
+ method public static void dispatchFinishTemporaryDetach(android.view.View);
+ method public static boolean dispatchNestedFling(android.view.View, float, float, boolean);
+ method public static boolean dispatchNestedPreFling(android.view.View, float, float);
+ method public static boolean dispatchNestedPreScroll(android.view.View, int, int, int[]?, int[]?);
+ method public static boolean dispatchNestedPreScroll(android.view.View, int, int, int[]?, int[]?, @androidx.core.view.ViewCompat.NestedScrollType int);
+ method public static boolean dispatchNestedScroll(android.view.View, int, int, int, int, int[]?);
+ method public static void dispatchNestedScroll(android.view.View, int, int, int, int, int[]?, @androidx.core.view.ViewCompat.NestedScrollType int, int[]);
+ method public static boolean dispatchNestedScroll(android.view.View, int, int, int, int, int[]?, @androidx.core.view.ViewCompat.NestedScrollType int);
+ method public static void dispatchStartTemporaryDetach(android.view.View);
+ method public static void enableAccessibleClickableSpanSupport(android.view.View!);
+ method public static int generateViewId();
+ method public static androidx.core.view.AccessibilityDelegateCompat? getAccessibilityDelegate(android.view.View);
+ method public static int getAccessibilityLiveRegion(android.view.View);
+ method public static androidx.core.view.accessibility.AccessibilityNodeProviderCompat! getAccessibilityNodeProvider(android.view.View);
+ method @UiThread public static CharSequence! getAccessibilityPaneTitle(android.view.View!);
+ method @Deprecated public static float getAlpha(android.view.View!);
+ method public static android.content.res.ColorStateList! getBackgroundTintList(android.view.View);
+ method public static android.graphics.PorterDuff.Mode! getBackgroundTintMode(android.view.View);
+ method public static android.graphics.Rect? getClipBounds(android.view.View);
+ method public static android.view.Display? getDisplay(android.view.View);
+ method public static float getElevation(android.view.View);
+ method public static boolean getFitsSystemWindows(android.view.View);
+ method public static int getImportantForAccessibility(android.view.View);
+ method public static int getImportantForAutofill(android.view.View);
+ method public static int getLabelFor(android.view.View);
+ method @Deprecated public static int getLayerType(android.view.View!);
+ method public static int getLayoutDirection(android.view.View);
+ method @Deprecated public static android.graphics.Matrix? getMatrix(android.view.View!);
+ method @Deprecated public static int getMeasuredHeightAndState(android.view.View!);
+ method @Deprecated public static int getMeasuredState(android.view.View!);
+ method @Deprecated public static int getMeasuredWidthAndState(android.view.View!);
+ method public static int getMinimumHeight(android.view.View);
+ method public static int getMinimumWidth(android.view.View);
+ method public static int getNextClusterForwardId(android.view.View);
+ method @Deprecated public static int getOverScrollMode(android.view.View!);
+ method @Px public static int getPaddingEnd(android.view.View);
+ method @Px public static int getPaddingStart(android.view.View);
+ method public static android.view.ViewParent! getParentForAccessibility(android.view.View);
+ method @Deprecated public static float getPivotX(android.view.View!);
+ method @Deprecated public static float getPivotY(android.view.View!);
+ method @Deprecated public static float getRotation(android.view.View!);
+ method @Deprecated public static float getRotationX(android.view.View!);
+ method @Deprecated public static float getRotationY(android.view.View!);
+ method @Deprecated public static float getScaleX(android.view.View!);
+ method @Deprecated public static float getScaleY(android.view.View!);
+ method public static int getScrollIndicators(android.view.View);
+ method public static java.util.List<android.graphics.Rect!> getSystemGestureExclusionRects(android.view.View);
+ method public static String? getTransitionName(android.view.View);
+ method @Deprecated public static float getTranslationX(android.view.View!);
+ method @Deprecated public static float getTranslationY(android.view.View!);
+ method public static float getTranslationZ(android.view.View);
+ method public static int getWindowSystemUiVisibility(android.view.View);
+ method @Deprecated public static float getX(android.view.View!);
+ method @Deprecated public static float getY(android.view.View!);
+ method public static float getZ(android.view.View);
+ method public static boolean hasAccessibilityDelegate(android.view.View);
+ method public static boolean hasExplicitFocusable(android.view.View);
+ method public static boolean hasNestedScrollingParent(android.view.View);
+ method public static boolean hasNestedScrollingParent(android.view.View, @androidx.core.view.ViewCompat.NestedScrollType int);
+ method public static boolean hasOnClickListeners(android.view.View);
+ method public static boolean hasOverlappingRendering(android.view.View);
+ method public static boolean hasTransientState(android.view.View);
+ method @UiThread public static boolean isAccessibilityHeading(android.view.View!);
+ method public static boolean isAttachedToWindow(android.view.View);
+ method public static boolean isFocusedByDefault(android.view.View);
+ method public static boolean isImportantForAccessibility(android.view.View);
+ method public static boolean isImportantForAutofill(android.view.View);
+ method public static boolean isInLayout(android.view.View);
+ method public static boolean isKeyboardNavigationCluster(android.view.View);
+ method public static boolean isLaidOut(android.view.View);
+ method public static boolean isLayoutDirectionResolved(android.view.View);
+ method public static boolean isNestedScrollingEnabled(android.view.View);
+ method @Deprecated public static boolean isOpaque(android.view.View!);
+ method public static boolean isPaddingRelative(android.view.View);
+ method @UiThread public static boolean isScreenReaderFocusable(android.view.View!);
+ method @Deprecated public static void jumpDrawablesToCurrentState(android.view.View!);
+ method public static android.view.View! keyboardNavigationClusterSearch(android.view.View, android.view.View!, @androidx.core.view.ViewCompat.FocusDirection int);
+ method public static void offsetLeftAndRight(android.view.View, int);
+ method public static void offsetTopAndBottom(android.view.View, int);
+ method public static androidx.core.view.WindowInsetsCompat! onApplyWindowInsets(android.view.View, androidx.core.view.WindowInsetsCompat!);
+ method @Deprecated public static void onInitializeAccessibilityEvent(android.view.View!, android.view.accessibility.AccessibilityEvent!);
+ method public static void onInitializeAccessibilityNodeInfo(android.view.View, androidx.core.view.accessibility.AccessibilityNodeInfoCompat!);
+ method @Deprecated public static void onPopulateAccessibilityEvent(android.view.View!, android.view.accessibility.AccessibilityEvent!);
+ method public static boolean performAccessibilityAction(android.view.View, int, android.os.Bundle!);
+ method public static void postInvalidateOnAnimation(android.view.View);
+ method public static void postInvalidateOnAnimation(android.view.View, int, int, int, int);
+ method public static void postOnAnimation(android.view.View, Runnable!);
+ method public static void postOnAnimationDelayed(android.view.View, Runnable!, long);
+ method public static void removeAccessibilityAction(android.view.View, int);
+ method public static void removeOnUnhandledKeyEventListener(android.view.View, androidx.core.view.ViewCompat.OnUnhandledKeyEventListenerCompat);
+ method public static void replaceAccessibilityAction(android.view.View, androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat, CharSequence?, androidx.core.view.accessibility.AccessibilityViewCommand?);
+ method public static void requestApplyInsets(android.view.View);
+ method public static <T extends android.view.View> T requireViewById(android.view.View, @IdRes int);
+ method @Deprecated public static int resolveSizeAndState(int, int, int);
+ method public static boolean restoreDefaultFocus(android.view.View);
+ method public static void setAccessibilityDelegate(android.view.View, androidx.core.view.AccessibilityDelegateCompat!);
+ method @UiThread public static void setAccessibilityHeading(android.view.View!, boolean);
+ method public static void setAccessibilityLiveRegion(android.view.View, int);
+ method @UiThread public static void setAccessibilityPaneTitle(android.view.View!, CharSequence!);
+ method @Deprecated public static void setActivated(android.view.View!, boolean);
+ method @Deprecated public static void setAlpha(android.view.View!, @FloatRange(from=0.0, to=1.0) float);
+ method public static void setAutofillHints(android.view.View, java.lang.String!...);
+ method public static void setBackground(android.view.View, android.graphics.drawable.Drawable?);
+ method public static void setBackgroundTintList(android.view.View, android.content.res.ColorStateList!);
+ method public static void setBackgroundTintMode(android.view.View, android.graphics.PorterDuff.Mode!);
+ method @Deprecated public static void setChildrenDrawingOrderEnabled(android.view.ViewGroup!, boolean);
+ method public static void setClipBounds(android.view.View, android.graphics.Rect!);
+ method public static void setElevation(android.view.View, float);
+ method @Deprecated public static void setFitsSystemWindows(android.view.View!, boolean);
+ method public static void setFocusedByDefault(android.view.View, boolean);
+ method public static void setHasTransientState(android.view.View, boolean);
+ method public static void setImportantForAccessibility(android.view.View, int);
+ method public static void setImportantForAutofill(android.view.View, int);
+ method public static void setKeyboardNavigationCluster(android.view.View, boolean);
+ method public static void setLabelFor(android.view.View, @IdRes int);
+ method public static void setLayerPaint(android.view.View, android.graphics.Paint!);
+ method @Deprecated public static void setLayerType(android.view.View!, int, android.graphics.Paint!);
+ method public static void setLayoutDirection(android.view.View, int);
+ method public static void setNestedScrollingEnabled(android.view.View, boolean);
+ method public static void setNextClusterForwardId(android.view.View, int);
+ method public static void setOnApplyWindowInsetsListener(android.view.View, androidx.core.view.OnApplyWindowInsetsListener!);
+ method @Deprecated public static void setOverScrollMode(android.view.View!, int);
+ method public static void setPaddingRelative(android.view.View, @Px int, @Px int, @Px int, @Px int);
+ method @Deprecated public static void setPivotX(android.view.View!, float);
+ method @Deprecated public static void setPivotY(android.view.View!, float);
+ method public static void setPointerIcon(android.view.View, androidx.core.view.PointerIconCompat!);
+ method @Deprecated public static void setRotation(android.view.View!, float);
+ method @Deprecated public static void setRotationX(android.view.View!, float);
+ method @Deprecated public static void setRotationY(android.view.View!, float);
+ method @Deprecated public static void setSaveFromParentEnabled(android.view.View!, boolean);
+ method @Deprecated public static void setScaleX(android.view.View!, float);
+ method @Deprecated public static void setScaleY(android.view.View!, float);
+ method @UiThread public static void setScreenReaderFocusable(android.view.View!, boolean);
+ method public static void setScrollIndicators(android.view.View, @androidx.core.view.ViewCompat.ScrollIndicators int);
+ method public static void setScrollIndicators(android.view.View, @androidx.core.view.ViewCompat.ScrollIndicators int, @androidx.core.view.ViewCompat.ScrollIndicators int);
+ method public static void setSystemGestureExclusionRects(android.view.View, java.util.List<android.graphics.Rect!>);
+ method public static void setTooltipText(android.view.View, CharSequence?);
+ method public static void setTransitionName(android.view.View, String!);
+ method @Deprecated public static void setTranslationX(android.view.View!, float);
+ method @Deprecated public static void setTranslationY(android.view.View!, float);
+ method public static void setTranslationZ(android.view.View, float);
+ method @Deprecated public static void setX(android.view.View!, float);
+ method @Deprecated public static void setY(android.view.View!, float);
+ method public static void setZ(android.view.View, float);
+ method public static boolean startDragAndDrop(android.view.View, android.content.ClipData!, android.view.View.DragShadowBuilder!, Object!, int);
+ method public static boolean startNestedScroll(android.view.View, @androidx.core.view.ViewCompat.ScrollAxis int);
+ method public static boolean startNestedScroll(android.view.View, @androidx.core.view.ViewCompat.ScrollAxis int, @androidx.core.view.ViewCompat.NestedScrollType int);
+ method public static void stopNestedScroll(android.view.View);
+ method public static void stopNestedScroll(android.view.View, @androidx.core.view.ViewCompat.NestedScrollType int);
+ method public static void updateDragShadow(android.view.View, android.view.View.DragShadowBuilder!);
+ field public static final int ACCESSIBILITY_LIVE_REGION_ASSERTIVE = 2; // 0x2
+ field public static final int ACCESSIBILITY_LIVE_REGION_NONE = 0; // 0x0
+ field public static final int ACCESSIBILITY_LIVE_REGION_POLITE = 1; // 0x1
+ field public static final int IMPORTANT_FOR_ACCESSIBILITY_AUTO = 0; // 0x0
+ field public static final int IMPORTANT_FOR_ACCESSIBILITY_NO = 2; // 0x2
+ field public static final int IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS = 4; // 0x4
+ field public static final int IMPORTANT_FOR_ACCESSIBILITY_YES = 1; // 0x1
+ field @Deprecated public static final int LAYER_TYPE_HARDWARE = 2; // 0x2
+ field @Deprecated public static final int LAYER_TYPE_NONE = 0; // 0x0
+ field @Deprecated public static final int LAYER_TYPE_SOFTWARE = 1; // 0x1
+ field public static final int LAYOUT_DIRECTION_INHERIT = 2; // 0x2
+ field public static final int LAYOUT_DIRECTION_LOCALE = 3; // 0x3
+ field public static final int LAYOUT_DIRECTION_LTR = 0; // 0x0
+ field public static final int LAYOUT_DIRECTION_RTL = 1; // 0x1
+ field @Deprecated public static final int MEASURED_HEIGHT_STATE_SHIFT = 16; // 0x10
+ field @Deprecated public static final int MEASURED_SIZE_MASK = 16777215; // 0xffffff
+ field @Deprecated public static final int MEASURED_STATE_MASK = -16777216; // 0xff000000
+ field @Deprecated public static final int MEASURED_STATE_TOO_SMALL = 16777216; // 0x1000000
+ field @Deprecated public static final int OVER_SCROLL_ALWAYS = 0; // 0x0
+ field @Deprecated public static final int OVER_SCROLL_IF_CONTENT_SCROLLS = 1; // 0x1
+ field @Deprecated public static final int OVER_SCROLL_NEVER = 2; // 0x2
+ field public static final int SCROLL_AXIS_HORIZONTAL = 1; // 0x1
+ field public static final int SCROLL_AXIS_NONE = 0; // 0x0
+ field public static final int SCROLL_AXIS_VERTICAL = 2; // 0x2
+ field public static final int SCROLL_INDICATOR_BOTTOM = 2; // 0x2
+ field public static final int SCROLL_INDICATOR_END = 32; // 0x20
+ field public static final int SCROLL_INDICATOR_LEFT = 4; // 0x4
+ field public static final int SCROLL_INDICATOR_RIGHT = 8; // 0x8
+ field public static final int SCROLL_INDICATOR_START = 16; // 0x10
+ field public static final int SCROLL_INDICATOR_TOP = 1; // 0x1
+ field public static final int TYPE_NON_TOUCH = 1; // 0x1
+ field public static final int TYPE_TOUCH = 0; // 0x0
+ }
+
+ @IntDef({android.view.View.FOCUS_LEFT, android.view.View.FOCUS_UP, android.view.View.FOCUS_RIGHT, android.view.View.FOCUS_DOWN, android.view.View.FOCUS_FORWARD, android.view.View.FOCUS_BACKWARD}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ViewCompat.FocusDirection {
+ }
+
+ @IntDef({android.view.View.FOCUS_LEFT, android.view.View.FOCUS_UP, android.view.View.FOCUS_RIGHT, android.view.View.FOCUS_DOWN}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ViewCompat.FocusRealDirection {
+ }
+
+ @IntDef({android.view.View.FOCUS_FORWARD, android.view.View.FOCUS_BACKWARD}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ViewCompat.FocusRelativeDirection {
+ }
+
+ @IntDef({androidx.core.view.ViewCompat.TYPE_TOUCH, androidx.core.view.ViewCompat.TYPE_NON_TOUCH}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ViewCompat.NestedScrollType {
+ }
+
+ public static interface ViewCompat.OnUnhandledKeyEventListenerCompat {
+ method public boolean onUnhandledKeyEvent(android.view.View!, android.view.KeyEvent!);
+ }
+
+ @IntDef(value={androidx.core.view.ViewCompat.SCROLL_AXIS_NONE, androidx.core.view.ViewCompat.SCROLL_AXIS_HORIZONTAL, androidx.core.view.ViewCompat.SCROLL_AXIS_VERTICAL}, flag=true) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ViewCompat.ScrollAxis {
+ }
+
+ @IntDef(flag=true, value={androidx.core.view.ViewCompat.SCROLL_INDICATOR_TOP, androidx.core.view.ViewCompat.SCROLL_INDICATOR_BOTTOM, androidx.core.view.ViewCompat.SCROLL_INDICATOR_LEFT, androidx.core.view.ViewCompat.SCROLL_INDICATOR_RIGHT, androidx.core.view.ViewCompat.SCROLL_INDICATOR_START, androidx.core.view.ViewCompat.SCROLL_INDICATOR_END}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ViewCompat.ScrollIndicators {
+ }
+
+ public final class ViewConfigurationCompat {
+ method public static float getScaledHorizontalScrollFactor(android.view.ViewConfiguration, android.content.Context);
+ method public static int getScaledHoverSlop(android.view.ViewConfiguration!);
+ method @Deprecated public static int getScaledPagingTouchSlop(android.view.ViewConfiguration!);
+ method public static float getScaledVerticalScrollFactor(android.view.ViewConfiguration, android.content.Context);
+ method @Deprecated public static boolean hasPermanentMenuKey(android.view.ViewConfiguration!);
+ method public static boolean shouldShowMenuShortcutsWhenKeyboardPresent(android.view.ViewConfiguration!, android.content.Context);
+ }
+
+ public final class ViewGroupCompat {
+ method public static int getLayoutMode(android.view.ViewGroup);
+ method @androidx.core.view.ViewCompat.ScrollAxis public static int getNestedScrollAxes(android.view.ViewGroup);
+ method public static boolean isTransitionGroup(android.view.ViewGroup);
+ method @Deprecated public static boolean onRequestSendAccessibilityEvent(android.view.ViewGroup!, android.view.View!, android.view.accessibility.AccessibilityEvent!);
+ method public static void setLayoutMode(android.view.ViewGroup, int);
+ method @Deprecated public static void setMotionEventSplittingEnabled(android.view.ViewGroup!, boolean);
+ method public static void setTransitionGroup(android.view.ViewGroup, boolean);
+ field public static final int LAYOUT_MODE_CLIP_BOUNDS = 0; // 0x0
+ field public static final int LAYOUT_MODE_OPTICAL_BOUNDS = 1; // 0x1
+ }
+
+ public final class ViewParentCompat {
+ method public static void notifySubtreeAccessibilityStateChanged(android.view.ViewParent!, android.view.View!, android.view.View!, int);
+ method public static boolean onNestedFling(android.view.ViewParent!, android.view.View!, float, float, boolean);
+ method public static boolean onNestedPreFling(android.view.ViewParent!, android.view.View!, float, float);
+ method public static void onNestedPreScroll(android.view.ViewParent!, android.view.View!, int, int, int[]!);
+ method public static void onNestedPreScroll(android.view.ViewParent!, android.view.View!, int, int, int[]!, int);
+ method public static void onNestedScroll(android.view.ViewParent!, android.view.View!, int, int, int, int);
+ method public static void onNestedScroll(android.view.ViewParent!, android.view.View!, int, int, int, int, int);
+ method public static void onNestedScroll(android.view.ViewParent!, android.view.View!, int, int, int, int, int, int[]);
+ method public static void onNestedScrollAccepted(android.view.ViewParent!, android.view.View!, android.view.View!, int);
+ method public static void onNestedScrollAccepted(android.view.ViewParent!, android.view.View!, android.view.View!, int, int);
+ method public static boolean onStartNestedScroll(android.view.ViewParent!, android.view.View!, android.view.View!, int);
+ method public static boolean onStartNestedScroll(android.view.ViewParent!, android.view.View!, android.view.View!, int, int);
+ method public static void onStopNestedScroll(android.view.ViewParent!, android.view.View!);
+ method public static void onStopNestedScroll(android.view.ViewParent!, android.view.View!, int);
+ method @Deprecated public static boolean requestSendAccessibilityEvent(android.view.ViewParent!, android.view.View!, android.view.accessibility.AccessibilityEvent!);
+ }
+
+ public final class ViewPropertyAnimatorCompat {
+ method public androidx.core.view.ViewPropertyAnimatorCompat! alpha(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! alphaBy(float);
+ method public void cancel();
+ method public long getDuration();
+ method public android.view.animation.Interpolator! getInterpolator();
+ method public long getStartDelay();
+ method public androidx.core.view.ViewPropertyAnimatorCompat! rotation(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! rotationBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! rotationX(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! rotationXBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! rotationY(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! rotationYBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! scaleX(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! scaleXBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! scaleY(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! scaleYBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! setDuration(long);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! setInterpolator(android.view.animation.Interpolator!);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! setListener(androidx.core.view.ViewPropertyAnimatorListener!);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! setStartDelay(long);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! setUpdateListener(androidx.core.view.ViewPropertyAnimatorUpdateListener!);
+ method public void start();
+ method public androidx.core.view.ViewPropertyAnimatorCompat! translationX(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! translationXBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! translationY(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! translationYBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! translationZ(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! translationZBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! withEndAction(Runnable!);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! withLayer();
+ method public androidx.core.view.ViewPropertyAnimatorCompat! withStartAction(Runnable!);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! x(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! xBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! y(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! yBy(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! z(float);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! zBy(float);
+ }
+
+ public interface ViewPropertyAnimatorListener {
+ method public void onAnimationCancel(android.view.View!);
+ method public void onAnimationEnd(android.view.View!);
+ method public void onAnimationStart(android.view.View!);
+ }
+
+ public class ViewPropertyAnimatorListenerAdapter implements androidx.core.view.ViewPropertyAnimatorListener {
+ ctor public ViewPropertyAnimatorListenerAdapter();
+ method public void onAnimationCancel(android.view.View!);
+ method public void onAnimationEnd(android.view.View!);
+ method public void onAnimationStart(android.view.View!);
+ }
+
+ public interface ViewPropertyAnimatorUpdateListener {
+ method public void onAnimationUpdate(android.view.View!);
+ }
+
+ public final class WindowCompat {
+ method public static <T extends android.view.View> T requireViewById(android.view.Window, @IdRes int);
+ field public static final int FEATURE_ACTION_BAR = 8; // 0x8
+ field public static final int FEATURE_ACTION_BAR_OVERLAY = 9; // 0x9
+ field public static final int FEATURE_ACTION_MODE_OVERLAY = 10; // 0xa
+ }
+
+ public class WindowInsetsCompat {
+ ctor public WindowInsetsCompat(androidx.core.view.WindowInsetsCompat!);
+ method public androidx.core.view.WindowInsetsCompat! consumeDisplayCutout();
+ method public androidx.core.view.WindowInsetsCompat! consumeStableInsets();
+ method public androidx.core.view.WindowInsetsCompat! consumeSystemWindowInsets();
+ method public androidx.core.view.DisplayCutoutCompat? getDisplayCutout();
+ method public androidx.core.graphics.Insets getMandatorySystemGestureInsets();
+ method public int getStableInsetBottom();
+ method public int getStableInsetLeft();
+ method public int getStableInsetRight();
+ method public int getStableInsetTop();
+ method public androidx.core.graphics.Insets getStableInsets();
+ method public androidx.core.graphics.Insets getSystemGestureInsets();
+ method public int getSystemWindowInsetBottom();
+ method public int getSystemWindowInsetLeft();
+ method public int getSystemWindowInsetRight();
+ method public int getSystemWindowInsetTop();
+ method public androidx.core.graphics.Insets getSystemWindowInsets();
+ method public androidx.core.graphics.Insets getTappableElementInsets();
+ method public boolean hasInsets();
+ method public boolean hasStableInsets();
+ method public boolean hasSystemWindowInsets();
+ method public boolean isConsumed();
+ method public boolean isRound();
+ method public androidx.core.view.WindowInsetsCompat! replaceSystemWindowInsets(int, int, int, int);
+ method public androidx.core.view.WindowInsetsCompat! replaceSystemWindowInsets(android.graphics.Rect!);
+ method @RequiresApi(20) public android.view.WindowInsets? toWindowInsets();
+ method @RequiresApi(20) public static androidx.core.view.WindowInsetsCompat toWindowInsetsCompat(android.view.WindowInsets);
+ }
+
+}
+
+package androidx.core.view.accessibility {
+
+ public final class AccessibilityClickableSpanCompat extends android.text.style.ClickableSpan {
+ ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public AccessibilityClickableSpanCompat(int, androidx.core.view.accessibility.AccessibilityNodeInfoCompat!, int);
+ method public void onClick(android.view.View);
+ field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final String SPAN_ID = "ACCESSIBILITY_CLICKABLE_SPAN_ID";
+ }
+
+ public final class AccessibilityEventCompat {
+ method @Deprecated public static void appendRecord(android.view.accessibility.AccessibilityEvent!, androidx.core.view.accessibility.AccessibilityRecordCompat!);
+ method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! asRecord(android.view.accessibility.AccessibilityEvent!);
+ method public static int getAction(android.view.accessibility.AccessibilityEvent!);
+ method public static int getContentChangeTypes(android.view.accessibility.AccessibilityEvent!);
+ method public static int getMovementGranularity(android.view.accessibility.AccessibilityEvent!);
+ method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! getRecord(android.view.accessibility.AccessibilityEvent!, int);
+ method @Deprecated public static int getRecordCount(android.view.accessibility.AccessibilityEvent!);
+ method public static void setAction(android.view.accessibility.AccessibilityEvent!, int);
+ method public static void setContentChangeTypes(android.view.accessibility.AccessibilityEvent!, int);
+ method public static void setMovementGranularity(android.view.accessibility.AccessibilityEvent!, int);
+ field public static final int CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION = 4; // 0x4
+ field public static final int CONTENT_CHANGE_TYPE_PANE_APPEARED = 16; // 0x10
+ field public static final int CONTENT_CHANGE_TYPE_PANE_DISAPPEARED = 32; // 0x20
+ field public static final int CONTENT_CHANGE_TYPE_PANE_TITLE = 8; // 0x8
+ field public static final int CONTENT_CHANGE_TYPE_SUBTREE = 1; // 0x1
+ field public static final int CONTENT_CHANGE_TYPE_TEXT = 2; // 0x2
+ field public static final int CONTENT_CHANGE_TYPE_UNDEFINED = 0; // 0x0
+ field public static final int TYPES_ALL_MASK = -1; // 0xffffffff
+ field public static final int TYPE_ANNOUNCEMENT = 16384; // 0x4000
+ field public static final int TYPE_ASSIST_READING_CONTEXT = 16777216; // 0x1000000
+ field public static final int TYPE_GESTURE_DETECTION_END = 524288; // 0x80000
+ field public static final int TYPE_GESTURE_DETECTION_START = 262144; // 0x40000
+ field @Deprecated public static final int TYPE_TOUCH_EXPLORATION_GESTURE_END = 1024; // 0x400
+ field @Deprecated public static final int TYPE_TOUCH_EXPLORATION_GESTURE_START = 512; // 0x200
+ field public static final int TYPE_TOUCH_INTERACTION_END = 2097152; // 0x200000
+ field public static final int TYPE_TOUCH_INTERACTION_START = 1048576; // 0x100000
+ field public static final int TYPE_VIEW_ACCESSIBILITY_FOCUSED = 32768; // 0x8000
+ field public static final int TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED = 65536; // 0x10000
+ field public static final int TYPE_VIEW_CONTEXT_CLICKED = 8388608; // 0x800000
+ field @Deprecated public static final int TYPE_VIEW_HOVER_ENTER = 128; // 0x80
+ field @Deprecated public static final int TYPE_VIEW_HOVER_EXIT = 256; // 0x100
+ field @Deprecated public static final int TYPE_VIEW_SCROLLED = 4096; // 0x1000
+ field @Deprecated public static final int TYPE_VIEW_TEXT_SELECTION_CHANGED = 8192; // 0x2000
+ field public static final int TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY = 131072; // 0x20000
+ field public static final int TYPE_WINDOWS_CHANGED = 4194304; // 0x400000
+ field @Deprecated public static final int TYPE_WINDOW_CONTENT_CHANGED = 2048; // 0x800
+ }
+
+ public final class AccessibilityManagerCompat {
+ method @Deprecated public static boolean addAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager!, androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener!);
+ method public static boolean addTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager!, androidx.core.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener!);
+ method @Deprecated public static java.util.List<android.accessibilityservice.AccessibilityServiceInfo!>! getEnabledAccessibilityServiceList(android.view.accessibility.AccessibilityManager!, int);
+ method @Deprecated public static java.util.List<android.accessibilityservice.AccessibilityServiceInfo!>! getInstalledAccessibilityServiceList(android.view.accessibility.AccessibilityManager!);
+ method @Deprecated public static boolean isTouchExplorationEnabled(android.view.accessibility.AccessibilityManager!);
+ method @Deprecated public static boolean removeAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager!, androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener!);
+ method public static boolean removeTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager!, androidx.core.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener!);
+ }
+
+ @Deprecated public static interface AccessibilityManagerCompat.AccessibilityStateChangeListener {
+ method @Deprecated public void onAccessibilityStateChanged(boolean);
+ }
+
+ @Deprecated public abstract static class AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat implements androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener {
+ ctor @Deprecated public AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat();
+ }
+
+ public static interface AccessibilityManagerCompat.TouchExplorationStateChangeListener {
+ method public void onTouchExplorationStateChanged(boolean);
+ }
+
+ public class AccessibilityNodeInfoCompat {
+ ctor @Deprecated public AccessibilityNodeInfoCompat(Object!);
+ method public void addAction(int);
+ method public void addAction(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat!);
+ method public void addChild(android.view.View!);
+ method public void addChild(android.view.View!, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void addSpansToExtras(CharSequence!, android.view.View!);
+ method public boolean canOpenPopup();
+ method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat!>! findAccessibilityNodeInfosByText(String!);
+ method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat!>! findAccessibilityNodeInfosByViewId(String!);
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! findFocus(int);
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! focusSearch(int);
+ method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat!>! getActionList();
+ method public int getActions();
+ method @Deprecated public void getBoundsInParent(android.graphics.Rect!);
+ method public void getBoundsInScreen(android.graphics.Rect!);
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getChild(int);
+ method public int getChildCount();
+ method public CharSequence! getClassName();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static android.text.style.ClickableSpan![]! getClickableSpans(CharSequence!);
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat! getCollectionInfo();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat! getCollectionItemInfo();
+ method public CharSequence! getContentDescription();
+ method public int getDrawingOrder();
+ method public CharSequence! getError();
+ method public android.os.Bundle! getExtras();
+ method public CharSequence? getHintText();
+ method @Deprecated public Object! getInfo();
+ method public int getInputType();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getLabelFor();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getLabeledBy();
+ method public int getLiveRegion();
+ method public int getMaxTextLength();
+ method public int getMovementGranularities();
+ method public CharSequence! getPackageName();
+ method public CharSequence? getPaneTitle();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getParent();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat! getRangeInfo();
+ method public CharSequence? getRoleDescription();
+ method public CharSequence! getText();
+ method public int getTextSelectionEnd();
+ method public int getTextSelectionStart();
+ method public CharSequence? getTooltipText();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.TouchDelegateInfoCompat? getTouchDelegateInfo();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getTraversalAfter();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getTraversalBefore();
+ method public String! getViewIdResourceName();
+ method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat! getWindow();
+ method public int getWindowId();
+ method public boolean isAccessibilityFocused();
+ method public boolean isCheckable();
+ method public boolean isChecked();
+ method public boolean isClickable();
+ method public boolean isContentInvalid();
+ method public boolean isContextClickable();
+ method public boolean isDismissable();
+ method public boolean isEditable();
+ method public boolean isEnabled();
+ method public boolean isFocusable();
+ method public boolean isFocused();
+ method public boolean isHeading();
+ method public boolean isImportantForAccessibility();
+ method public boolean isLongClickable();
+ method public boolean isMultiLine();
+ method public boolean isPassword();
+ method public boolean isScreenReaderFocusable();
+ method public boolean isScrollable();
+ method public boolean isSelected();
+ method public boolean isShowingHintText();
+ method public boolean isTextEntryKey();
+ method public boolean isVisibleToUser();
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain(android.view.View!);
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain(android.view.View!, int);
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain();
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain(androidx.core.view.accessibility.AccessibilityNodeInfoCompat!);
+ method public boolean performAction(int);
+ method public boolean performAction(int, android.os.Bundle!);
+ method public void recycle();
+ method public boolean refresh();
+ method public boolean removeAction(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat!);
+ method public boolean removeChild(android.view.View!);
+ method public boolean removeChild(android.view.View!, int);
+ method public void setAccessibilityFocused(boolean);
+ method @Deprecated public void setBoundsInParent(android.graphics.Rect!);
+ method public void setBoundsInScreen(android.graphics.Rect!);
+ method public void setCanOpenPopup(boolean);
+ method public void setCheckable(boolean);
+ method public void setChecked(boolean);
+ method public void setClassName(CharSequence!);
+ method public void setClickable(boolean);
+ method public void setCollectionInfo(Object!);
+ method public void setCollectionItemInfo(Object!);
+ method public void setContentDescription(CharSequence!);
+ method public void setContentInvalid(boolean);
+ method public void setContextClickable(boolean);
+ method public void setDismissable(boolean);
+ method public void setDrawingOrder(int);
+ method public void setEditable(boolean);
+ method public void setEnabled(boolean);
+ method public void setError(CharSequence!);
+ method public void setFocusable(boolean);
+ method public void setFocused(boolean);
+ method public void setHeading(boolean);
+ method public void setHintText(CharSequence?);
+ method public void setImportantForAccessibility(boolean);
+ method public void setInputType(int);
+ method public void setLabelFor(android.view.View!);
+ method public void setLabelFor(android.view.View!, int);
+ method public void setLabeledBy(android.view.View!);
+ method public void setLabeledBy(android.view.View!, int);
+ method public void setLiveRegion(int);
+ method public void setLongClickable(boolean);
+ method public void setMaxTextLength(int);
+ method public void setMovementGranularities(int);
+ method public void setMultiLine(boolean);
+ method public void setPackageName(CharSequence!);
+ method public void setPaneTitle(CharSequence?);
+ method public void setParent(android.view.View!);
+ method public void setParent(android.view.View!, int);
+ method public void setPassword(boolean);
+ method public void setRangeInfo(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat!);
+ method public void setRoleDescription(CharSequence?);
+ method public void setScreenReaderFocusable(boolean);
+ method public void setScrollable(boolean);
+ method public void setSelected(boolean);
+ method public void setShowingHintText(boolean);
+ method public void setSource(android.view.View!);
+ method public void setSource(android.view.View!, int);
+ method public void setText(CharSequence!);
+ method public void setTextEntryKey(boolean);
+ method public void setTextSelection(int, int);
+ method public void setTooltipText(CharSequence?);
+ method public void setTouchDelegateInfo(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.TouchDelegateInfoCompat);
+ method public void setTraversalAfter(android.view.View!);
+ method public void setTraversalAfter(android.view.View!, int);
+ method public void setTraversalBefore(android.view.View!);
+ method public void setTraversalBefore(android.view.View!, int);
+ method public void setViewIdResourceName(String!);
+ method public void setVisibleToUser(boolean);
+ method public android.view.accessibility.AccessibilityNodeInfo! unwrap();
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! wrap(android.view.accessibility.AccessibilityNodeInfo);
+ field public static final int ACTION_ACCESSIBILITY_FOCUS = 64; // 0x40
+ field public static final String ACTION_ARGUMENT_COLUMN_INT = "android.view.accessibility.action.ARGUMENT_COLUMN_INT";
+ field public static final String ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN = "ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN";
+ field public static final String ACTION_ARGUMENT_HTML_ELEMENT_STRING = "ACTION_ARGUMENT_HTML_ELEMENT_STRING";
+ field public static final String ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT = "ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT";
+ field public static final String ACTION_ARGUMENT_MOVE_WINDOW_X = "ACTION_ARGUMENT_MOVE_WINDOW_X";
+ field public static final String ACTION_ARGUMENT_MOVE_WINDOW_Y = "ACTION_ARGUMENT_MOVE_WINDOW_Y";
+ field public static final String ACTION_ARGUMENT_PROGRESS_VALUE = "android.view.accessibility.action.ARGUMENT_PROGRESS_VALUE";
+ field public static final String ACTION_ARGUMENT_ROW_INT = "android.view.accessibility.action.ARGUMENT_ROW_INT";
+ field public static final String ACTION_ARGUMENT_SELECTION_END_INT = "ACTION_ARGUMENT_SELECTION_END_INT";
+ field public static final String ACTION_ARGUMENT_SELECTION_START_INT = "ACTION_ARGUMENT_SELECTION_START_INT";
+ field public static final String ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE = "ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE";
+ field public static final int ACTION_CLEAR_ACCESSIBILITY_FOCUS = 128; // 0x80
+ field public static final int ACTION_CLEAR_FOCUS = 2; // 0x2
+ field public static final int ACTION_CLEAR_SELECTION = 8; // 0x8
+ field public static final int ACTION_CLICK = 16; // 0x10
+ field public static final int ACTION_COLLAPSE = 524288; // 0x80000
+ field public static final int ACTION_COPY = 16384; // 0x4000
+ field public static final int ACTION_CUT = 65536; // 0x10000
+ field public static final int ACTION_DISMISS = 1048576; // 0x100000
+ field public static final int ACTION_EXPAND = 262144; // 0x40000
+ field public static final int ACTION_FOCUS = 1; // 0x1
+ field public static final int ACTION_LONG_CLICK = 32; // 0x20
+ field public static final int ACTION_NEXT_AT_MOVEMENT_GRANULARITY = 256; // 0x100
+ field public static final int ACTION_NEXT_HTML_ELEMENT = 1024; // 0x400
+ field public static final int ACTION_PASTE = 32768; // 0x8000
+ field public static final int ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY = 512; // 0x200
+ field public static final int ACTION_PREVIOUS_HTML_ELEMENT = 2048; // 0x800
+ field public static final int ACTION_SCROLL_BACKWARD = 8192; // 0x2000
+ field public static final int ACTION_SCROLL_FORWARD = 4096; // 0x1000
+ field public static final int ACTION_SELECT = 4; // 0x4
+ field public static final int ACTION_SET_SELECTION = 131072; // 0x20000
+ field public static final int ACTION_SET_TEXT = 2097152; // 0x200000
+ field public static final int FOCUS_ACCESSIBILITY = 2; // 0x2
+ field public static final int FOCUS_INPUT = 1; // 0x1
+ field public static final int MOVEMENT_GRANULARITY_CHARACTER = 1; // 0x1
+ field public static final int MOVEMENT_GRANULARITY_LINE = 4; // 0x4
+ field public static final int MOVEMENT_GRANULARITY_PAGE = 16; // 0x10
+ field public static final int MOVEMENT_GRANULARITY_PARAGRAPH = 8; // 0x8
+ field public static final int MOVEMENT_GRANULARITY_WORD = 2; // 0x2
+ field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int mParentVirtualDescendantId;
+ }
+
+ public static class AccessibilityNodeInfoCompat.AccessibilityActionCompat {
+ ctor public AccessibilityNodeInfoCompat.AccessibilityActionCompat(int, CharSequence!);
+ ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public AccessibilityNodeInfoCompat.AccessibilityActionCompat(int, CharSequence!, androidx.core.view.accessibility.AccessibilityViewCommand!);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! createReplacementAction(CharSequence!, androidx.core.view.accessibility.AccessibilityViewCommand!);
+ method public int getId();
+ method public CharSequence! getLabel();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public boolean perform(android.view.View!, android.os.Bundle!);
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_ACCESSIBILITY_FOCUS;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLEAR_ACCESSIBILITY_FOCUS;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLEAR_FOCUS;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLEAR_SELECTION;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLICK;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_COLLAPSE;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CONTEXT_CLICK;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_COPY;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CUT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_DISMISS;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_EXPAND;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_FOCUS;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_HIDE_TOOLTIP;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_LONG_CLICK;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_MOVE_WINDOW;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_NEXT_AT_MOVEMENT_GRANULARITY;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_NEXT_HTML_ELEMENT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PAGE_DOWN;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PAGE_LEFT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PAGE_RIGHT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PAGE_UP;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_PASTE;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_PREVIOUS_HTML_ELEMENT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_BACKWARD;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_DOWN;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_FORWARD;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_LEFT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_RIGHT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_TO_POSITION;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_UP;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SELECT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SET_PROGRESS;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SET_SELECTION;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SET_TEXT;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SHOW_ON_SCREEN;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SHOW_TOOLTIP;
+ field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) protected final androidx.core.view.accessibility.AccessibilityViewCommand! mCommand;
+ }
+
+ public static class AccessibilityNodeInfoCompat.CollectionInfoCompat {
+ method public int getColumnCount();
+ method public int getRowCount();
+ method public int getSelectionMode();
+ method public boolean isHierarchical();
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat! obtain(int, int, boolean, int);
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat! obtain(int, int, boolean);
+ field public static final int SELECTION_MODE_MULTIPLE = 2; // 0x2
+ field public static final int SELECTION_MODE_NONE = 0; // 0x0
+ field public static final int SELECTION_MODE_SINGLE = 1; // 0x1
+ }
+
+ public static class AccessibilityNodeInfoCompat.CollectionItemInfoCompat {
+ method public int getColumnIndex();
+ method public int getColumnSpan();
+ method public int getRowIndex();
+ method public int getRowSpan();
+ method @Deprecated public boolean isHeading();
+ method public boolean isSelected();
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat! obtain(int, int, int, int, boolean, boolean);
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat! obtain(int, int, int, int, boolean);
+ }
+
+ public static class AccessibilityNodeInfoCompat.RangeInfoCompat {
+ method public float getCurrent();
+ method public float getMax();
+ method public float getMin();
+ method public int getType();
+ method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat! obtain(int, float, float, float);
+ field public static final int RANGE_TYPE_FLOAT = 1; // 0x1
+ field public static final int RANGE_TYPE_INT = 0; // 0x0
+ field public static final int RANGE_TYPE_PERCENT = 2; // 0x2
+ }
+
+ public static final class AccessibilityNodeInfoCompat.TouchDelegateInfoCompat {
+ ctor public AccessibilityNodeInfoCompat.TouchDelegateInfoCompat(java.util.Map<android.graphics.Region!,android.view.View!>);
+ method public android.graphics.Region? getRegionAt(@IntRange(from=0) int);
+ method @IntRange(from=0) public int getRegionCount();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? getTargetForRegion(android.graphics.Region);
+ }
+
+ public class AccessibilityNodeProviderCompat {
+ ctor public AccessibilityNodeProviderCompat();
+ ctor public AccessibilityNodeProviderCompat(Object!);
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? createAccessibilityNodeInfo(int);
+ method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat!>? findAccessibilityNodeInfosByText(String!, int);
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? findFocus(int);
+ method public Object! getProvider();
+ method public boolean performAction(int, int, android.os.Bundle!);
+ field public static final int HOST_VIEW_ID = -1; // 0xffffffff
+ }
+
+ public class AccessibilityRecordCompat {
+ ctor @Deprecated public AccessibilityRecordCompat(Object!);
+ method @Deprecated public boolean equals(Object?);
+ method @Deprecated public int getAddedCount();
+ method @Deprecated public CharSequence! getBeforeText();
+ method @Deprecated public CharSequence! getClassName();
+ method @Deprecated public CharSequence! getContentDescription();
+ method @Deprecated public int getCurrentItemIndex();
+ method @Deprecated public int getFromIndex();
+ method @Deprecated public Object! getImpl();
+ method @Deprecated public int getItemCount();
+ method @Deprecated public int getMaxScrollX();
+ method public static int getMaxScrollX(android.view.accessibility.AccessibilityRecord!);
+ method @Deprecated public int getMaxScrollY();
+ method public static int getMaxScrollY(android.view.accessibility.AccessibilityRecord!);
+ method @Deprecated public android.os.Parcelable! getParcelableData();
+ method @Deprecated public int getRemovedCount();
+ method @Deprecated public int getScrollX();
+ method @Deprecated public int getScrollY();
+ method @Deprecated public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getSource();
+ method @Deprecated public java.util.List<java.lang.CharSequence!>! getText();
+ method @Deprecated public int getToIndex();
+ method @Deprecated public int getWindowId();
+ method @Deprecated public int hashCode();
+ method @Deprecated public boolean isChecked();
+ method @Deprecated public boolean isEnabled();
+ method @Deprecated public boolean isFullScreen();
+ method @Deprecated public boolean isPassword();
+ method @Deprecated public boolean isScrollable();
+ method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! obtain(androidx.core.view.accessibility.AccessibilityRecordCompat!);
+ method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! obtain();
+ method @Deprecated public void recycle();
+ method @Deprecated public void setAddedCount(int);
+ method @Deprecated public void setBeforeText(CharSequence!);
+ method @Deprecated public void setChecked(boolean);
+ method @Deprecated public void setClassName(CharSequence!);
+ method @Deprecated public void setContentDescription(CharSequence!);
+ method @Deprecated public void setCurrentItemIndex(int);
+ method @Deprecated public void setEnabled(boolean);
+ method @Deprecated public void setFromIndex(int);
+ method @Deprecated public void setFullScreen(boolean);
+ method @Deprecated public void setItemCount(int);
+ method @Deprecated public void setMaxScrollX(int);
+ method public static void setMaxScrollX(android.view.accessibility.AccessibilityRecord!, int);
+ method @Deprecated public void setMaxScrollY(int);
+ method public static void setMaxScrollY(android.view.accessibility.AccessibilityRecord!, int);
+ method @Deprecated public void setParcelableData(android.os.Parcelable!);
+ method @Deprecated public void setPassword(boolean);
+ method @Deprecated public void setRemovedCount(int);
+ method @Deprecated public void setScrollX(int);
+ method @Deprecated public void setScrollY(int);
+ method @Deprecated public void setScrollable(boolean);
+ method @Deprecated public void setSource(android.view.View!);
+ method @Deprecated public void setSource(android.view.View!, int);
+ method public static void setSource(android.view.accessibility.AccessibilityRecord, android.view.View!, int);
+ method @Deprecated public void setToIndex(int);
+ }
+
+ public interface AccessibilityViewCommand {
+ method public boolean perform(android.view.View, androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments?);
+ }
+
+ public abstract static class AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.CommandArguments();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setBundle(android.os.Bundle!);
+ }
+
+ public static final class AccessibilityViewCommand.MoveAtGranularityArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.MoveAtGranularityArguments();
+ method public boolean getExtendSelection();
+ method public int getGranularity();
+ }
+
+ public static final class AccessibilityViewCommand.MoveHtmlArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.MoveHtmlArguments();
+ method public String! getHTMLElement();
+ }
+
+ public static final class AccessibilityViewCommand.MoveWindowArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.MoveWindowArguments();
+ method public int getX();
+ method public int getY();
+ }
+
+ public static final class AccessibilityViewCommand.ScrollToPositionArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.ScrollToPositionArguments();
+ method public int getColumn();
+ method public int getRow();
+ }
+
+ public static final class AccessibilityViewCommand.SetProgressArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.SetProgressArguments();
+ method public float getProgress();
+ }
+
+ public static final class AccessibilityViewCommand.SetSelectionArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.SetSelectionArguments();
+ method public int getEnd();
+ method public int getStart();
+ }
+
+ public static final class AccessibilityViewCommand.SetTextArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+ ctor public AccessibilityViewCommand.SetTextArguments();
+ method public CharSequence! getText();
+ }
+
+ public class AccessibilityWindowInfoCompat {
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getAnchor();
+ method public void getBoundsInScreen(android.graphics.Rect!);
+ method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat! getChild(int);
+ method public int getChildCount();
+ method public int getId();
+ method public int getLayer();
+ method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat! getParent();
+ method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getRoot();
+ method public CharSequence! getTitle();
+ method public int getType();
+ method public boolean isAccessibilityFocused();
+ method public boolean isActive();
+ method public boolean isFocused();
+ method public static androidx.core.view.accessibility.AccessibilityWindowInfoCompat! obtain();
+ method public static androidx.core.view.accessibility.AccessibilityWindowInfoCompat! obtain(androidx.core.view.accessibility.AccessibilityWindowInfoCompat!);
+ method public void recycle();
+ field public static final int TYPE_ACCESSIBILITY_OVERLAY = 4; // 0x4
+ field public static final int TYPE_APPLICATION = 1; // 0x1
+ field public static final int TYPE_INPUT_METHOD = 2; // 0x2
+ field public static final int TYPE_SPLIT_SCREEN_DIVIDER = 5; // 0x5
+ field public static final int TYPE_SYSTEM = 3; // 0x3
+ }
+
+}
+
+package androidx.core.view.animation {
+
+ public final class PathInterpolatorCompat {
+ method public static android.view.animation.Interpolator! create(android.graphics.Path!);
+ method public static android.view.animation.Interpolator! create(float, float);
+ method public static android.view.animation.Interpolator! create(float, float, float, float);
+ }
+
+}
+
+package androidx.core.view.inputmethod {
+
+ public final class EditorInfoCompat {
+ ctor @Deprecated public EditorInfoCompat();
+ method public static String![] getContentMimeTypes(android.view.inputmethod.EditorInfo!);
+ method public static void setContentMimeTypes(android.view.inputmethod.EditorInfo, String![]?);
+ field public static final int IME_FLAG_FORCE_ASCII = -2147483648; // 0x80000000
+ field public static final int IME_FLAG_NO_PERSONALIZED_LEARNING = 16777216; // 0x1000000
+ }
+
+ public final class InputConnectionCompat {
+ ctor @Deprecated public InputConnectionCompat();
+ method public static boolean commitContent(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo, androidx.core.view.inputmethod.InputContentInfoCompat, int, android.os.Bundle?);
+ method public static android.view.inputmethod.InputConnection createWrapper(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo, androidx.core.view.inputmethod.InputConnectionCompat.OnCommitContentListener);
+ field public static final int INPUT_CONTENT_GRANT_READ_URI_PERMISSION = 1; // 0x1
+ }
+
+ public static interface InputConnectionCompat.OnCommitContentListener {
+ method public boolean onCommitContent(androidx.core.view.inputmethod.InputContentInfoCompat!, int, android.os.Bundle!);
+ }
+
+ public final class InputContentInfoCompat {
+ ctor public InputContentInfoCompat(android.net.Uri, android.content.ClipDescription, android.net.Uri?);
+ method public android.net.Uri getContentUri();
+ method public android.content.ClipDescription getDescription();
+ method public android.net.Uri? getLinkUri();
+ method public void releasePermission();
+ method public void requestPermission();
+ method public Object? unwrap();
+ method public static androidx.core.view.inputmethod.InputContentInfoCompat? wrap(Object?);
+ }
+
+}
+
+package androidx.core.widget {
+
+ public abstract class AutoScrollHelper implements android.view.View.OnTouchListener {
+ ctor public AutoScrollHelper(android.view.View);
+ method public abstract boolean canTargetScrollHorizontally(int);
+ method public abstract boolean canTargetScrollVertically(int);
+ method public boolean isEnabled();
+ method public boolean isExclusive();
+ method public boolean onTouch(android.view.View!, android.view.MotionEvent!);
+ method public abstract void scrollTargetBy(int, int);
+ method public androidx.core.widget.AutoScrollHelper setActivationDelay(int);
+ method public androidx.core.widget.AutoScrollHelper setEdgeType(int);
+ method public androidx.core.widget.AutoScrollHelper! setEnabled(boolean);
+ method public androidx.core.widget.AutoScrollHelper! setExclusive(boolean);
+ method public androidx.core.widget.AutoScrollHelper setMaximumEdges(float, float);
+ method public androidx.core.widget.AutoScrollHelper setMaximumVelocity(float, float);
+ method public androidx.core.widget.AutoScrollHelper setMinimumVelocity(float, float);
+ method public androidx.core.widget.AutoScrollHelper setRampDownDuration(int);
+ method public androidx.core.widget.AutoScrollHelper setRampUpDuration(int);
+ method public androidx.core.widget.AutoScrollHelper setRelativeEdges(float, float);
+ method public androidx.core.widget.AutoScrollHelper setRelativeVelocity(float, float);
+ field public static final int EDGE_TYPE_INSIDE = 0; // 0x0
+ field public static final int EDGE_TYPE_INSIDE_EXTEND = 1; // 0x1
+ field public static final int EDGE_TYPE_OUTSIDE = 2; // 0x2
+ field public static final float NO_MAX = 3.4028235E38f;
+ field public static final float NO_MIN = 0.0f;
+ field public static final float RELATIVE_UNSPECIFIED = 0.0f;
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface AutoSizeableTextView {
+ method public int getAutoSizeMaxTextSize();
+ method public int getAutoSizeMinTextSize();
+ method public int getAutoSizeStepGranularity();
+ method public int[]! getAutoSizeTextAvailableSizes();
+ method @androidx.core.widget.TextViewCompat.AutoSizeTextType public int getAutoSizeTextType();
+ method public void setAutoSizeTextTypeUniformWithConfiguration(int, int, int, int) throws java.lang.IllegalArgumentException;
+ method public void setAutoSizeTextTypeUniformWithPresetSizes(int[], int) throws java.lang.IllegalArgumentException;
+ method public void setAutoSizeTextTypeWithDefaults(@androidx.core.widget.TextViewCompat.AutoSizeTextType int);
+ field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final boolean PLATFORM_SUPPORTS_AUTOSIZE;
+ }
+
+ public final class CompoundButtonCompat {
+ method public static android.graphics.drawable.Drawable? getButtonDrawable(android.widget.CompoundButton);
+ method public static android.content.res.ColorStateList? getButtonTintList(android.widget.CompoundButton);
+ method public static android.graphics.PorterDuff.Mode? getButtonTintMode(android.widget.CompoundButton);
+ method public static void setButtonTintList(android.widget.CompoundButton, android.content.res.ColorStateList?);
+ method public static void setButtonTintMode(android.widget.CompoundButton, android.graphics.PorterDuff.Mode?);
+ }
+
+ public class ContentLoadingProgressBar extends android.widget.ProgressBar {
+ ctor public ContentLoadingProgressBar(android.content.Context);
+ ctor public ContentLoadingProgressBar(android.content.Context, android.util.AttributeSet?);
+ method public void hide();
+ method public void onAttachedToWindow();
+ method public void onDetachedFromWindow();
+ method public void show();
+ }
+
+ public final class EdgeEffectCompat {
+ ctor @Deprecated public EdgeEffectCompat(android.content.Context!);
+ method @Deprecated public boolean draw(android.graphics.Canvas!);
+ method @Deprecated public void finish();
+ method @Deprecated public boolean isFinished();
+ method @Deprecated public boolean onAbsorb(int);
+ method @Deprecated public boolean onPull(float);
+ method @Deprecated public boolean onPull(float, float);
+ method public static void onPull(android.widget.EdgeEffect, float, float);
+ method @Deprecated public boolean onRelease();
+ method @Deprecated public void setSize(int, int);
+ }
+
+ public class ImageViewCompat {
+ method public static android.content.res.ColorStateList? getImageTintList(android.widget.ImageView);
+ method public static android.graphics.PorterDuff.Mode? getImageTintMode(android.widget.ImageView);
+ method public static void setImageTintList(android.widget.ImageView, android.content.res.ColorStateList?);
+ method public static void setImageTintMode(android.widget.ImageView, android.graphics.PorterDuff.Mode?);
+ }
+
+ public final class ListPopupWindowCompat {
+ method @Deprecated public static android.view.View.OnTouchListener! createDragToOpenListener(Object!, android.view.View!);
+ method public static android.view.View.OnTouchListener? createDragToOpenListener(android.widget.ListPopupWindow, android.view.View);
+ }
+
+ public class ListViewAutoScrollHelper extends androidx.core.widget.AutoScrollHelper {
+ ctor public ListViewAutoScrollHelper(android.widget.ListView);
+ method public boolean canTargetScrollHorizontally(int);
+ method public boolean canTargetScrollVertically(int);
+ method public void scrollTargetBy(int, int);
+ }
+
+ public final class ListViewCompat {
+ method public static boolean canScrollList(android.widget.ListView, int);
+ method public static void scrollListBy(android.widget.ListView, int);
+ }
+
+ public class NestedScrollView extends android.widget.FrameLayout implements androidx.core.view.NestedScrollingChild3 androidx.core.view.NestedScrollingParent3 androidx.core.view.ScrollingView {
+ ctor public NestedScrollView(android.content.Context);
+ ctor public NestedScrollView(android.content.Context, android.util.AttributeSet?);
+ ctor public NestedScrollView(android.content.Context, android.util.AttributeSet?, int);
+ method public boolean arrowScroll(int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeHorizontalScrollExtent();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeHorizontalScrollOffset();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeHorizontalScrollRange();
+ method protected int computeScrollDeltaToGetChildRectOnScreen(android.graphics.Rect!);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeVerticalScrollExtent();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeVerticalScrollOffset();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeVerticalScrollRange();
+ method public boolean dispatchNestedPreScroll(int, int, int[]!, int[]!, int);
+ method public void dispatchNestedScroll(int, int, int, int, int[]?, int, int[]);
+ method public boolean dispatchNestedScroll(int, int, int, int, int[]!, int);
+ method public boolean executeKeyEvent(android.view.KeyEvent);
+ method public void fling(int);
+ method public boolean fullScroll(int);
+ method public int getMaxScrollAmount();
+ method public boolean hasNestedScrollingParent(int);
+ method public boolean isFillViewport();
+ method public boolean isSmoothScrollingEnabled();
+ method public void onAttachedToWindow();
+ method public void onNestedPreScroll(android.view.View, int, int, int[], int);
+ method public void onNestedScroll(android.view.View, int, int, int, int, int, int[]);
+ method public void onNestedScroll(android.view.View, int, int, int, int, int);
+ method public void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
+ method public boolean onStartNestedScroll(android.view.View, android.view.View, int, int);
+ method public void onStopNestedScroll(android.view.View, int);
+ method public boolean pageScroll(int);
+ method public void setFillViewport(boolean);
+ method public void setOnScrollChangeListener(androidx.core.widget.NestedScrollView.OnScrollChangeListener?);
+ method public void setSmoothScrollingEnabled(boolean);
+ method public final void smoothScrollBy(int, int);
+ method public final void smoothScrollTo(int, int);
+ method public boolean startNestedScroll(int, int);
+ method public void stopNestedScroll(int);
+ }
+
+ public static interface NestedScrollView.OnScrollChangeListener {
+ method public void onScrollChange(androidx.core.widget.NestedScrollView!, int, int, int, int);
+ }
+
+ public final class PopupMenuCompat {
+ method public static android.view.View.OnTouchListener? getDragToOpenListener(Object);
+ }
+
+ public final class PopupWindowCompat {
+ method public static boolean getOverlapAnchor(android.widget.PopupWindow);
+ method public static int getWindowLayoutType(android.widget.PopupWindow);
+ method public static void setOverlapAnchor(android.widget.PopupWindow, boolean);
+ method public static void setWindowLayoutType(android.widget.PopupWindow, int);
+ method public static void showAsDropDown(android.widget.PopupWindow, android.view.View, int, int, int);
+ }
+
+ @Deprecated public final class ScrollerCompat {
+ method @Deprecated public void abortAnimation();
+ method @Deprecated public boolean computeScrollOffset();
+ method @Deprecated public static androidx.core.widget.ScrollerCompat! create(android.content.Context!);
+ method @Deprecated public static androidx.core.widget.ScrollerCompat! create(android.content.Context!, android.view.animation.Interpolator!);
+ method @Deprecated public void fling(int, int, int, int, int, int, int, int);
+ method @Deprecated public void fling(int, int, int, int, int, int, int, int, int, int);
+ method @Deprecated public float getCurrVelocity();
+ method @Deprecated public int getCurrX();
+ method @Deprecated public int getCurrY();
+ method @Deprecated public int getFinalX();
+ method @Deprecated public int getFinalY();
+ method @Deprecated public boolean isFinished();
+ method @Deprecated public boolean isOverScrolled();
+ method @Deprecated public void notifyHorizontalEdgeReached(int, int, int);
+ method @Deprecated public void notifyVerticalEdgeReached(int, int, int);
+ method @Deprecated public boolean springBack(int, int, int, int, int, int);
+ method @Deprecated public void startScroll(int, int, int, int);
+ method @Deprecated public void startScroll(int, int, int, int, int);
+ }
+
+ public final class TextViewCompat {
+ method public static int getAutoSizeMaxTextSize(android.widget.TextView);
+ method public static int getAutoSizeMinTextSize(android.widget.TextView);
+ method public static int getAutoSizeStepGranularity(android.widget.TextView);
+ method public static int[] getAutoSizeTextAvailableSizes(android.widget.TextView);
+ method public static int getAutoSizeTextType(android.widget.TextView);
+ method public static android.content.res.ColorStateList? getCompoundDrawableTintList(android.widget.TextView);
+ method public static android.graphics.PorterDuff.Mode? getCompoundDrawableTintMode(android.widget.TextView);
+ method public static android.graphics.drawable.Drawable![] getCompoundDrawablesRelative(android.widget.TextView);
+ method public static int getFirstBaselineToTopHeight(android.widget.TextView);
+ method public static int getLastBaselineToBottomHeight(android.widget.TextView);
+ method public static int getMaxLines(android.widget.TextView);
+ method public static int getMinLines(android.widget.TextView);
+ method public static androidx.core.text.PrecomputedTextCompat.Params getTextMetricsParams(android.widget.TextView);
+ method public static void setAutoSizeTextTypeUniformWithConfiguration(android.widget.TextView, int, int, int, int) throws java.lang.IllegalArgumentException;
+ method public static void setAutoSizeTextTypeUniformWithPresetSizes(android.widget.TextView, int[], int) throws java.lang.IllegalArgumentException;
+ method public static void setAutoSizeTextTypeWithDefaults(android.widget.TextView, int);
+ method public static void setCompoundDrawableTintList(android.widget.TextView, android.content.res.ColorStateList?);
+ method public static void setCompoundDrawableTintMode(android.widget.TextView, android.graphics.PorterDuff.Mode?);
+ method public static void setCompoundDrawablesRelative(android.widget.TextView, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?);
+ method public static void setCompoundDrawablesRelativeWithIntrinsicBounds(android.widget.TextView, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?);
+ method public static void setCompoundDrawablesRelativeWithIntrinsicBounds(android.widget.TextView, @DrawableRes int, @DrawableRes int, @DrawableRes int, @DrawableRes int);
+ method public static void setCustomSelectionActionModeCallback(android.widget.TextView, android.view.ActionMode.Callback);
+ method public static void setFirstBaselineToTopHeight(android.widget.TextView, @Px @IntRange(from=0) int);
+ method public static void setLastBaselineToBottomHeight(android.widget.TextView, @Px @IntRange(from=0) int);
+ method public static void setLineHeight(android.widget.TextView, @Px @IntRange(from=0) int);
+ method public static void setPrecomputedText(android.widget.TextView, androidx.core.text.PrecomputedTextCompat);
+ method public static void setTextAppearance(android.widget.TextView, @StyleRes int);
+ method public static void setTextMetricsParams(android.widget.TextView, androidx.core.text.PrecomputedTextCompat.Params);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static android.view.ActionMode.Callback wrapCustomSelectionActionModeCallback(android.widget.TextView, android.view.ActionMode.Callback);
+ field public static final int AUTO_SIZE_TEXT_TYPE_NONE = 0; // 0x0
+ field public static final int AUTO_SIZE_TEXT_TYPE_UNIFORM = 1; // 0x1
+ }
+
+ @IntDef({androidx.core.widget.TextViewCompat.AUTO_SIZE_TEXT_TYPE_NONE, androidx.core.widget.TextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface TextViewCompat.AutoSizeTextType {
+ }
+
+ public interface TintableCompoundButton {
+ method public android.content.res.ColorStateList? getSupportButtonTintList();
+ method public android.graphics.PorterDuff.Mode? getSupportButtonTintMode();
+ method public void setSupportButtonTintList(android.content.res.ColorStateList?);
+ method public void setSupportButtonTintMode(android.graphics.PorterDuff.Mode?);
+ }
+
+ public interface TintableCompoundDrawablesView {
+ method public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
+ method public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
+ method public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
+ method public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface TintableImageSourceView {
+ method public android.content.res.ColorStateList? getSupportImageTintList();
+ method public android.graphics.PorterDuff.Mode? getSupportImageTintMode();
+ method public void setSupportImageTintList(android.content.res.ColorStateList?);
+ method public void setSupportImageTintMode(android.graphics.PorterDuff.Mode?);
+ }
+
+}
+
diff --git a/core/core/api/restricted_current.txt b/core/core/api/restricted_current.txt
index 89456d6..1121902 100644
--- a/core/core/api/restricted_current.txt
+++ b/core/core/api/restricted_current.txt
@@ -1612,7 +1612,7 @@
}
public final class EnvironmentCompat {
- method public static String! getStorageState(java.io.File);
+ method public static String getStorageState(java.io.File);
field public static final String MEDIA_UNKNOWN = "unknown";
}
diff --git a/core/core/src/main/java/androidx/core/os/EnvironmentCompat.java b/core/core/src/main/java/androidx/core/os/EnvironmentCompat.java
index 3ca6c1a..da61db8 100644
--- a/core/core/src/main/java/androidx/core/os/EnvironmentCompat.java
+++ b/core/core/src/main/java/androidx/core/os/EnvironmentCompat.java
@@ -53,13 +53,18 @@
* {@link Environment#MEDIA_BAD_REMOVAL}, or
* {@link Environment#MEDIA_UNMOUNTABLE}.
*/
+ @SuppressWarnings("deprecation")
+ @NonNull
public static String getStorageState(@NonNull File path) {
- if (Build.VERSION.SDK_INT >= 19) {
+ if (Build.VERSION.SDK_INT >= 21) {
+ return Environment.getExternalStorageState(path);
+ } else if (Build.VERSION.SDK_INT >= 19) {
return Environment.getStorageState(path);
}
try {
final String canonicalPath = path.getCanonicalPath();
+ @SuppressWarnings("deprecation")
final String canonicalExternal = Environment.getExternalStorageDirectory()
.getCanonicalPath();
diff --git a/customview/src/main/java/androidx/customview/widget/ExploreByTouchHelper.java b/customview/src/main/java/androidx/customview/widget/ExploreByTouchHelper.java
index e0437c7..ae399dd 100644
--- a/customview/src/main/java/androidx/customview/widget/ExploreByTouchHelper.java
+++ b/customview/src/main/java/androidx/customview/widget/ExploreByTouchHelper.java
@@ -34,7 +34,6 @@
import androidx.core.view.ViewCompat;
import androidx.core.view.ViewCompat.FocusDirection;
import androidx.core.view.ViewCompat.FocusRealDirection;
-import androidx.core.view.ViewParentCompat;
import androidx.core.view.accessibility.AccessibilityEventCompat;
import androidx.core.view.accessibility.AccessibilityNodeInfoCompat;
import androidx.core.view.accessibility.AccessibilityNodeProviderCompat;
@@ -515,7 +514,7 @@
}
final AccessibilityEvent event = createEvent(virtualViewId, eventType);
- return ViewParentCompat.requestSendAccessibilityEvent(parent, mHost, event);
+ return parent.requestSendAccessibilityEvent(mHost, event);
}
/**
@@ -573,7 +572,7 @@
final AccessibilityEvent event = createEvent(virtualViewId,
AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED);
AccessibilityEventCompat.setContentChangeTypes(event, changeTypes);
- ViewParentCompat.requestSendAccessibilityEvent(parent, mHost, event);
+ parent.requestSendAccessibilityEvent(mHost, event);
}
}
}
@@ -797,6 +796,7 @@
node.setEnabled(true);
node.setFocusable(true);
node.setClassName(DEFAULT_CLASS_NAME);
+
node.setBoundsInParent(INVALID_PARENT_BOUNDS);
node.setBoundsInScreen(INVALID_PARENT_BOUNDS);
node.setParent(mHost);
diff --git a/enterprise/feedback/api/1.1.0-alpha01.txt b/enterprise/feedback/api/1.1.0-alpha01.txt
new file mode 100644
index 0000000..040814c
--- /dev/null
+++ b/enterprise/feedback/api/1.1.0-alpha01.txt
@@ -0,0 +1,59 @@
+// Signature format: 3.0
+package androidx.enterprise.feedback {
+
+ public abstract class KeyedAppState {
+ method public static androidx.enterprise.feedback.KeyedAppState.KeyedAppStateBuilder builder();
+ method public abstract String? getData();
+ method public abstract String getKey();
+ method public abstract String? getMessage();
+ method public abstract int getSeverity();
+ field public static final int MAX_DATA_LENGTH = 1000; // 0x3e8
+ field public static final int MAX_KEY_LENGTH = 100; // 0x64
+ field public static final int MAX_MESSAGE_LENGTH = 1000; // 0x3e8
+ field public static final int SEVERITY_ERROR = 2; // 0x2
+ field public static final int SEVERITY_INFO = 1; // 0x1
+ }
+
+ public abstract static class KeyedAppState.KeyedAppStateBuilder {
+ method public androidx.enterprise.feedback.KeyedAppState build();
+ method public abstract androidx.enterprise.feedback.KeyedAppState.KeyedAppStateBuilder setData(String?);
+ method public abstract androidx.enterprise.feedback.KeyedAppState.KeyedAppStateBuilder setKey(String);
+ method public abstract androidx.enterprise.feedback.KeyedAppState.KeyedAppStateBuilder setMessage(String?);
+ method public abstract androidx.enterprise.feedback.KeyedAppState.KeyedAppStateBuilder setSeverity(int);
+ }
+
+ public abstract class KeyedAppStatesReporter {
+ method public static androidx.enterprise.feedback.KeyedAppStatesReporter create(android.content.Context);
+ method public static androidx.enterprise.feedback.KeyedAppStatesReporter create(android.content.Context, java.util.concurrent.Executor);
+ method public abstract void setStates(java.util.Collection<androidx.enterprise.feedback.KeyedAppState!>);
+ method public abstract void setStatesImmediate(java.util.Collection<androidx.enterprise.feedback.KeyedAppState!>);
+ }
+
+ public abstract class KeyedAppStatesService extends android.app.Service {
+ ctor public KeyedAppStatesService();
+ method public android.os.IBinder onBind(android.content.Intent);
+ method public abstract void onReceive(java.util.Collection<androidx.enterprise.feedback.ReceivedKeyedAppState!>, boolean);
+ }
+
+ public abstract class ReceivedKeyedAppState {
+ method public static androidx.enterprise.feedback.ReceivedKeyedAppState.ReceivedKeyedAppStateBuilder builder();
+ method public abstract String? getData();
+ method public abstract String getKey();
+ method public abstract String? getMessage();
+ method public abstract String getPackageName();
+ method public abstract int getSeverity();
+ method public abstract long getTimestamp();
+ }
+
+ public abstract static class ReceivedKeyedAppState.ReceivedKeyedAppStateBuilder {
+ method public abstract androidx.enterprise.feedback.ReceivedKeyedAppState build();
+ method public abstract androidx.enterprise.feedback.ReceivedKeyedAppState.ReceivedKeyedAppStateBuilder setData(String?);
+ method public abstract androidx.enterprise.feedback.ReceivedKeyedAppState.ReceivedKeyedAppStateBuilder setKey(String);
+ method public abstract androidx.enterprise.feedback.ReceivedKeyedAppState.ReceivedKeyedAppStateBuilder setMessage(String?);
+ method public abstract androidx.enterprise.feedback.ReceivedKeyedAppState.ReceivedKeyedAppStateBuilder setPackageName(String);
+ method public abstract androidx.enterprise.feedback.ReceivedKeyedAppState.ReceivedKeyedAppStateBuilder setSeverity(int);
+ method public abstract androidx.enterprise.feedback.ReceivedKeyedAppState.ReceivedKeyedAppStateBuilder setTimestamp(long);
+ }
+
+}
+
diff --git a/enterprise/feedback/api/public_plus_experimental_1.1.0-alpha01.txt b/enterprise/feedback/api/public_plus_experimental_1.1.0-alpha01.txt
new file mode 100644
index 0000000..040814c
--- /dev/null
+++ b/enterprise/feedback/api/public_plus_experimental_1.1.0-alpha01.txt
@@ -0,0 +1,59 @@
+// Signature format: 3.0
+package androidx.enterprise.feedback {
+
+ public abstract class KeyedAppState {
+ method public static androidx.enterprise.feedback.KeyedAppState.KeyedAppStateBuilder builder();
+ method public abstract String? getData();
+ method public abstract String getKey();
+ method public abstract String? getMessage();
+ method public abstract int getSeverity();
+ field public static final int MAX_DATA_LENGTH = 1000; // 0x3e8
+ field public static final int MAX_KEY_LENGTH = 100; // 0x64
+ field public static final int MAX_MESSAGE_LENGTH = 1000; // 0x3e8
+ field public static final int SEVERITY_ERROR = 2; // 0x2
+ field public static final int SEVERITY_INFO = 1; // 0x1
+ }
+
+ public abstract static class KeyedAppState.KeyedAppStateBuilder {
+ method public androidx.enterprise.feedback.KeyedAppState build();
+ method public abstract androidx.enterprise.feedback.KeyedAppState.KeyedAppStateBuilder setData(String?);
+ method public abstract androidx.enterprise.feedback.KeyedAppState.KeyedAppStateBuilder setKey(String);
+ method public abstract androidx.enterprise.feedback.KeyedAppState.KeyedAppStateBuilder setMessage(String?);
+ method public abstract androidx.enterprise.feedback.KeyedAppState.KeyedAppStateBuilder setSeverity(int);
+ }
+
+ public abstract class KeyedAppStatesReporter {
+ method public static androidx.enterprise.feedback.KeyedAppStatesReporter create(android.content.Context);
+ method public static androidx.enterprise.feedback.KeyedAppStatesReporter create(android.content.Context, java.util.concurrent.Executor);
+ method public abstract void setStates(java.util.Collection<androidx.enterprise.feedback.KeyedAppState!>);
+ method public abstract void setStatesImmediate(java.util.Collection<androidx.enterprise.feedback.KeyedAppState!>);
+ }
+
+ public abstract class KeyedAppStatesService extends android.app.Service {
+ ctor public KeyedAppStatesService();
+ method public android.os.IBinder onBind(android.content.Intent);
+ method public abstract void onReceive(java.util.Collection<androidx.enterprise.feedback.ReceivedKeyedAppState!>, boolean);
+ }
+
+ public abstract class ReceivedKeyedAppState {
+ method public static androidx.enterprise.feedback.ReceivedKeyedAppState.ReceivedKeyedAppStateBuilder builder();
+ method public abstract String? getData();
+ method public abstract String getKey();
+ method public abstract String? getMessage();
+ method public abstract String getPackageName();
+ method public abstract int getSeverity();
+ method public abstract long getTimestamp();
+ }
+
+ public abstract static class ReceivedKeyedAppState.ReceivedKeyedAppStateBuilder {
+ method public abstract androidx.enterprise.feedback.ReceivedKeyedAppState build();
+ method public abstract androidx.enterprise.feedback.ReceivedKeyedAppState.ReceivedKeyedAppStateBuilder setData(String?);
+ method public abstract androidx.enterprise.feedback.ReceivedKeyedAppState.ReceivedKeyedAppStateBuilder setKey(String);
+ method public abstract androidx.enterprise.feedback.ReceivedKeyedAppState.ReceivedKeyedAppStateBuilder setMessage(String?);
+ method public abstract androidx.enterprise.feedback.ReceivedKeyedAppState.ReceivedKeyedAppStateBuilder setPackageName(String);
+ method public abstract androidx.enterprise.feedback.ReceivedKeyedAppState.ReceivedKeyedAppStateBuilder setSeverity(int);
+ method public abstract androidx.enterprise.feedback.ReceivedKeyedAppState.ReceivedKeyedAppStateBuilder setTimestamp(long);
+ }
+
+}
+
diff --git a/enterprise/feedback/api/res-1.1.0-alpha01.txt b/enterprise/feedback/api/res-1.1.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/enterprise/feedback/api/res-1.1.0-alpha01.txt
diff --git a/enterprise/feedback/api/restricted_1.1.0-alpha01.txt b/enterprise/feedback/api/restricted_1.1.0-alpha01.txt
new file mode 100644
index 0000000..040814c
--- /dev/null
+++ b/enterprise/feedback/api/restricted_1.1.0-alpha01.txt
@@ -0,0 +1,59 @@
+// Signature format: 3.0
+package androidx.enterprise.feedback {
+
+ public abstract class KeyedAppState {
+ method public static androidx.enterprise.feedback.KeyedAppState.KeyedAppStateBuilder builder();
+ method public abstract String? getData();
+ method public abstract String getKey();
+ method public abstract String? getMessage();
+ method public abstract int getSeverity();
+ field public static final int MAX_DATA_LENGTH = 1000; // 0x3e8
+ field public static final int MAX_KEY_LENGTH = 100; // 0x64
+ field public static final int MAX_MESSAGE_LENGTH = 1000; // 0x3e8
+ field public static final int SEVERITY_ERROR = 2; // 0x2
+ field public static final int SEVERITY_INFO = 1; // 0x1
+ }
+
+ public abstract static class KeyedAppState.KeyedAppStateBuilder {
+ method public androidx.enterprise.feedback.KeyedAppState build();
+ method public abstract androidx.enterprise.feedback.KeyedAppState.KeyedAppStateBuilder setData(String?);
+ method public abstract androidx.enterprise.feedback.KeyedAppState.KeyedAppStateBuilder setKey(String);
+ method public abstract androidx.enterprise.feedback.KeyedAppState.KeyedAppStateBuilder setMessage(String?);
+ method public abstract androidx.enterprise.feedback.KeyedAppState.KeyedAppStateBuilder setSeverity(int);
+ }
+
+ public abstract class KeyedAppStatesReporter {
+ method public static androidx.enterprise.feedback.KeyedAppStatesReporter create(android.content.Context);
+ method public static androidx.enterprise.feedback.KeyedAppStatesReporter create(android.content.Context, java.util.concurrent.Executor);
+ method public abstract void setStates(java.util.Collection<androidx.enterprise.feedback.KeyedAppState!>);
+ method public abstract void setStatesImmediate(java.util.Collection<androidx.enterprise.feedback.KeyedAppState!>);
+ }
+
+ public abstract class KeyedAppStatesService extends android.app.Service {
+ ctor public KeyedAppStatesService();
+ method public android.os.IBinder onBind(android.content.Intent);
+ method public abstract void onReceive(java.util.Collection<androidx.enterprise.feedback.ReceivedKeyedAppState!>, boolean);
+ }
+
+ public abstract class ReceivedKeyedAppState {
+ method public static androidx.enterprise.feedback.ReceivedKeyedAppState.ReceivedKeyedAppStateBuilder builder();
+ method public abstract String? getData();
+ method public abstract String getKey();
+ method public abstract String? getMessage();
+ method public abstract String getPackageName();
+ method public abstract int getSeverity();
+ method public abstract long getTimestamp();
+ }
+
+ public abstract static class ReceivedKeyedAppState.ReceivedKeyedAppStateBuilder {
+ method public abstract androidx.enterprise.feedback.ReceivedKeyedAppState build();
+ method public abstract androidx.enterprise.feedback.ReceivedKeyedAppState.ReceivedKeyedAppStateBuilder setData(String?);
+ method public abstract androidx.enterprise.feedback.ReceivedKeyedAppState.ReceivedKeyedAppStateBuilder setKey(String);
+ method public abstract androidx.enterprise.feedback.ReceivedKeyedAppState.ReceivedKeyedAppStateBuilder setMessage(String?);
+ method public abstract androidx.enterprise.feedback.ReceivedKeyedAppState.ReceivedKeyedAppStateBuilder setPackageName(String);
+ method public abstract androidx.enterprise.feedback.ReceivedKeyedAppState.ReceivedKeyedAppStateBuilder setSeverity(int);
+ method public abstract androidx.enterprise.feedback.ReceivedKeyedAppState.ReceivedKeyedAppStateBuilder setTimestamp(long);
+ }
+
+}
+
diff --git a/enterprise/feedback/testing/api/1.1.0-alpha01.txt b/enterprise/feedback/testing/api/1.1.0-alpha01.txt
new file mode 100644
index 0000000..9c90bc0
--- /dev/null
+++ b/enterprise/feedback/testing/api/1.1.0-alpha01.txt
@@ -0,0 +1,17 @@
+// Signature format: 3.0
+package androidx.enterprise.feedback {
+
+ public class FakeKeyedAppStatesReporter extends androidx.enterprise.feedback.KeyedAppStatesReporter {
+ method public java.util.List<androidx.enterprise.feedback.KeyedAppState!> getKeyedAppStates();
+ method public java.util.Map<java.lang.String!,androidx.enterprise.feedback.KeyedAppState!> getKeyedAppStatesByKey();
+ method public int getNumberOfUploads();
+ method public java.util.List<androidx.enterprise.feedback.KeyedAppState!> getOnDeviceKeyedAppStates();
+ method public java.util.Map<java.lang.String!,androidx.enterprise.feedback.KeyedAppState!> getOnDeviceKeyedAppStatesByKey();
+ method public java.util.List<androidx.enterprise.feedback.KeyedAppState!> getUploadedKeyedAppStates();
+ method public java.util.Map<java.lang.String!,androidx.enterprise.feedback.KeyedAppState!> getUploadedKeyedAppStatesByKey();
+ method public void setStates(java.util.Collection<androidx.enterprise.feedback.KeyedAppState!>);
+ method public void setStatesImmediate(java.util.Collection<androidx.enterprise.feedback.KeyedAppState!>);
+ }
+
+}
+
diff --git a/enterprise/feedback/testing/api/public_plus_experimental_1.1.0-alpha01.txt b/enterprise/feedback/testing/api/public_plus_experimental_1.1.0-alpha01.txt
new file mode 100644
index 0000000..9c90bc0
--- /dev/null
+++ b/enterprise/feedback/testing/api/public_plus_experimental_1.1.0-alpha01.txt
@@ -0,0 +1,17 @@
+// Signature format: 3.0
+package androidx.enterprise.feedback {
+
+ public class FakeKeyedAppStatesReporter extends androidx.enterprise.feedback.KeyedAppStatesReporter {
+ method public java.util.List<androidx.enterprise.feedback.KeyedAppState!> getKeyedAppStates();
+ method public java.util.Map<java.lang.String!,androidx.enterprise.feedback.KeyedAppState!> getKeyedAppStatesByKey();
+ method public int getNumberOfUploads();
+ method public java.util.List<androidx.enterprise.feedback.KeyedAppState!> getOnDeviceKeyedAppStates();
+ method public java.util.Map<java.lang.String!,androidx.enterprise.feedback.KeyedAppState!> getOnDeviceKeyedAppStatesByKey();
+ method public java.util.List<androidx.enterprise.feedback.KeyedAppState!> getUploadedKeyedAppStates();
+ method public java.util.Map<java.lang.String!,androidx.enterprise.feedback.KeyedAppState!> getUploadedKeyedAppStatesByKey();
+ method public void setStates(java.util.Collection<androidx.enterprise.feedback.KeyedAppState!>);
+ method public void setStatesImmediate(java.util.Collection<androidx.enterprise.feedback.KeyedAppState!>);
+ }
+
+}
+
diff --git a/enterprise/feedback/testing/api/res-1.1.0-alpha01.txt b/enterprise/feedback/testing/api/res-1.1.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/enterprise/feedback/testing/api/res-1.1.0-alpha01.txt
diff --git a/enterprise/feedback/testing/api/restricted_1.1.0-alpha01.txt b/enterprise/feedback/testing/api/restricted_1.1.0-alpha01.txt
new file mode 100644
index 0000000..9c90bc0
--- /dev/null
+++ b/enterprise/feedback/testing/api/restricted_1.1.0-alpha01.txt
@@ -0,0 +1,17 @@
+// Signature format: 3.0
+package androidx.enterprise.feedback {
+
+ public class FakeKeyedAppStatesReporter extends androidx.enterprise.feedback.KeyedAppStatesReporter {
+ method public java.util.List<androidx.enterprise.feedback.KeyedAppState!> getKeyedAppStates();
+ method public java.util.Map<java.lang.String!,androidx.enterprise.feedback.KeyedAppState!> getKeyedAppStatesByKey();
+ method public int getNumberOfUploads();
+ method public java.util.List<androidx.enterprise.feedback.KeyedAppState!> getOnDeviceKeyedAppStates();
+ method public java.util.Map<java.lang.String!,androidx.enterprise.feedback.KeyedAppState!> getOnDeviceKeyedAppStatesByKey();
+ method public java.util.List<androidx.enterprise.feedback.KeyedAppState!> getUploadedKeyedAppStates();
+ method public java.util.Map<java.lang.String!,androidx.enterprise.feedback.KeyedAppState!> getUploadedKeyedAppStatesByKey();
+ method public void setStates(java.util.Collection<androidx.enterprise.feedback.KeyedAppState!>);
+ method public void setStatesImmediate(java.util.Collection<androidx.enterprise.feedback.KeyedAppState!>);
+ }
+
+}
+
diff --git a/exifinterface/src/main/java/androidx/exifinterface/media/ExifInterface.java b/exifinterface/src/main/java/androidx/exifinterface/media/ExifInterface.java
index 7d7c3f9..fc0a595 100644
--- a/exifinterface/src/main/java/androidx/exifinterface/media/ExifInterface.java
+++ b/exifinterface/src/main/java/androidx/exifinterface/media/ExifInterface.java
@@ -2140,11 +2140,6 @@
private static final String TAG_ORF_CAMERA_SETTINGS_IFD_POINTER = "CameraSettingsIFDPointer";
private static final String TAG_ORF_IMAGE_PROCESSING_IFD_POINTER = "ImageProcessingIFDPointer";
- // Private tags used for thumbnail information.
- private static final String TAG_HAS_THUMBNAIL = "HasThumbnail";
- private static final String TAG_THUMBNAIL_OFFSET = "ThumbnailOffset";
- private static final String TAG_THUMBNAIL_LENGTH = "ThumbnailLength";
- private static final String TAG_THUMBNAIL_DATA = "ThumbnailData";
private static final int MAX_THUMBNAIL_SIZE = 512;
// Constants used for the Orientation Exif tag.
@@ -2868,7 +2863,6 @@
static final byte[] JPEG_SIGNATURE = new byte[] {(byte) 0xff, (byte) 0xd8, (byte) 0xff};
private static final String RAF_SIGNATURE = "FUJIFILMCCD-RAW";
private static final int RAF_OFFSET_TO_JPEG_IMAGE_OFFSET = 84;
- private static final int RAF_INFO_SIZE = 160;
private static final int RAF_JPEG_LENGTH_VALUE_SIZE = 4;
private static final byte[] HEIF_TYPE_FTYP = new byte[] {'f', 't', 'y', 'p'};
@@ -2911,7 +2905,6 @@
(byte) 0x4e, (byte) 0x44};
private static final int PNG_CHUNK_TYPE_BYTE_LENGTH = 4;
private static final int PNG_CHUNK_CRC_BYTE_LENGTH = 4;
- private static final int PNG_OFFSET_TO_IHDR_BYTES = 12;
// See https://developers.google.com/speed/webp/docs/riff_container, Section "WebP File Header"
private static final byte[] WEBP_SIGNATURE_1 = new byte[] {'R', 'I', 'F', 'F'};
@@ -2920,7 +2913,6 @@
private static final byte[] WEBP_CHUNK_TYPE_EXIF = new byte[]{(byte) 0x45, (byte) 0x58,
(byte) 0x49, (byte) 0x46};
private static final int WEBP_CHUNK_TYPE_BYTE_LENGTH = 4;
- private static final int WEBP_CHUNK_SIZE_BYTE_LENGTH = 4;
private static SimpleDateFormat sFormatter;
@@ -4387,24 +4379,6 @@
}
/**
- * Update the values of the tags in the tag groups if any value for the tag already was stored.
- *
- * @param tag the name of the tag.
- * @param value the value of the tag in a form of {@link ExifAttribute}.
- * @return Returns {@code true} if updating is placed.
- */
- private boolean updateAttribute(String tag, ExifAttribute value) {
- boolean updated = false;
- for (int i = 0 ; i < EXIF_TAGS.length; ++i) {
- if (mAttributes[i].containsKey(tag)) {
- mAttributes[i].put(tag, value);
- updated = true;
- }
- }
- return updated;
- }
-
- /**
* Remove any values of the specified tag.
*
* @param tag the name of the tag.
@@ -5446,9 +5420,9 @@
IFD_FORMAT_BYTE, value.length, offset, value));
}
}
+ break;
}
- // fall through
case MARKER_COM: {
byte[] bytes = new byte[length];
if (in.read(bytes) != length) {
diff --git a/jetifier/jetifier/migration.config b/jetifier/jetifier/migration.config
index bae5c22..90cb5b3 100644
--- a/jetifier/jetifier/migration.config
+++ b/jetifier/jetifier/migration.config
@@ -19,8 +19,7 @@
"android/databinding/"
],
"reversedRestrictToPackagePrefixes": [
- "androidx/",
- "com/google/android/material/"
+ "androidx/"
],
"rules": [
{
@@ -412,130 +411,6 @@
"to": "androidx/activity/{0}"
},
{
- "from": "android/support/design/widget/AppBarLayout(.*)",
- "to": "com/google/android/material/appbar/AppBarLayout{0}"
- },
- {
- "from": "android/support/design/widget/BaseTransientBottomBar(.*)",
- "to": "com/google/android/material/snackbar/BaseTransientBottomBar{0}"
- },
- {
- "from": "android/support/design/bottomsheet/BottomSheet(.*)",
- "to": "com/google/android/material/bottomsheet/BottomSheet{0}"
- },
- {
- "from": "android/support/design/widget/CheckableImageButton(.*)",
- "to": "com/google/android/material/internal/CheckableImageButton{0}"
- },
- {
- "from": "android/support/design/widget/CircularBorderDrawable(.*)",
- "to": "com/google/android/material/internal/CircularBorderDrawable{0}"
- },
- {
- "from": "android/support/design/widget/CollapsingTextHelper(.*)",
- "to": "com/google/android/material/internal/CollapsingTextHelper{0}"
- },
- {
- "from": "android/support/design/appbar/CollapsingToolbarLayout(.*)",
- "to": "com/google/android/material/appbar/CollapsingToolbarLayout{0}"
- },
- {
- "from": "android/support/design/widget/CutoutDrawable(.*)",
- "to": "com/google/android/material/textfield/CutoutDrawable{0}"
- },
- {
- "from": "android/support/design/widget/DescendantOffsetUtils(.*)",
- "to": "com/google/android/material/internal/DescendantOffsetUtils{0}"
- },
- {
- "from": "android/support/design/widget/DrawableUtils(.*)",
- "to": "com/google/android/material/internal/DrawableUtils{0}"
- },
- {
- "from": "android/support/design/widget/FloatingActionButton(.*)",
- "to": "com/google/android/material/floatingactionbutton/FloatingActionButton{0}"
- },
- {
- "from": "android/support/design/widget/HeaderBehavior(.*)",
- "to": "com/google/android/material/appbar/HeaderBehavior{0}"
- },
- {
- "from": "android/support/design/widget/HeaderScrollingViewBehavior(.*)",
- "to": "com/google/android/material/appbar/HeaderScrollingViewBehavior{0}"
- },
- {
- "from": "android/support/design/widget/HideBottomViewOnScrollBehavior(.*)",
- "to": "com/google/android/material/behavior/HeaderScrollingViewBehavior{0}"
- },
- {
- "from": "android/support/design/widget/IndicatorViewController(.*)",
- "to": "com/google/android/material/textfield/IndicatorViewController{0}"
- },
- {
- "from": "android/support/design/widget/MathUtils(.*)",
- "to": "com/google/android/material/math/MathUtils{0}"
- },
- {
- "from": "android/support/design/widget/Shadow(.*)",
- "to": "com/google/android/material/shadow/Shadow{0}"
- },
- {
- "from": "android/support/design/widget/Snackbar(.*)",
- "to": "com/google/android/material/snackbar/Snackbar{0}"
- },
- {
- "from": "android/support/design/widget/SnackbarManager(.*)",
- "to": "com/google/android/material/snackbar/SnackbarManager{0}"
- },
- {
- "from": "android/support/design/widget/StateListAnimator(.*)",
- "to": "com/google/android/material/internal/StateListAnimator{0}"
- },
- {
- "from": "android/support/design/widget/SwipeDismissBehavior(.*)",
- "to": "com/google/android/material/behavior/SwipeDismissBehavior{0}"
- },
- {
- "from": "android/support/design/widget/Tab(.*)",
- "to": "com/google/android/material/tabs/Tab{0}"
- },
- {
- "from": "android/support/design/widget/TextInput(.*)",
- "to": "com/google/android/material/textfield/TextInput{0}"
- },
- {
- "from": "android/support/design/widget/ViewOffsetBehavior(.*)",
- "to": "com/google/android/material/appbar/ViewOffsetBehavior{0}"
- },
- {
- "from": "android/support/design/widget/ViewOffsetHelper(.*)",
- "to": "com/google/android/material/appbar/ViewOffsetHelper{0}"
- },
- {
- "from": "android/support/design/widget/ViewUtilsLollipop(.*)",
- "to": "com/google/android/material/appbar/ViewUtilsLollipop{0}"
- },
- {
- "from": "android/support/design/widget/VisibilityAwareImageButton(.*)",
- "to": "com/google/android/material/internal/VisibilityAwareImageButton{0}"
- },
- {
- "from": "android/support/design/internal/BottomNavigation(.*)",
- "to": "com/google/android/material/bottomnavigation/BottomNavigation{0}"
- },
- {
- "from": "android/support/design/internal/SnackbarContentLayout(.*)",
- "to": "com/google/android/material/snackbar/SnackbarContentLayout{0}"
- },
- {
- "from": "android/support/design/R(.*)",
- "to": "com/google/android/material/R{0}"
- },
- {
- "from": "android/support/design/(.*)",
- "to": "com/google/android/material/{0}"
- },
- {
"from": "android/support/test/(.*)",
"to": "androidx/test/{0}"
}
@@ -930,27 +805,7 @@
"to": "ignore"
},
{
- "from": "com/google/android/material/bottomappbar/(.*)",
- "to": "ignore"
- },
- {
- "from": "com/google/android/material/bottomnavigation/(.*)",
- "to": "ignore"
- },
- {
- "from": "com/google/android/material/ripple/(.*)",
- "to": "ignore"
- },
- {
- "from": "com/google/android/material/canvas/(.*)",
- "to": "ignore"
- },
- {
- "from": "com/google/android/material/stateful/(.*)",
- "to": "ignore"
- },
- {
- "from": "com/google/android/material/expandable/(.*)",
+ "from": "androidx/test/espresso/(.*)",
"to": "ignore"
},
{
@@ -1188,10 +1043,6 @@
"to": "androidx/wear"
},
{
- "from": "android/support/design",
- "to": "com/google/android/material"
- },
- {
"from": "androidx/emoji/appcompat",
"to": "androidx/emoji/appcompat"
},
@@ -2763,9 +2614,9 @@
},
{
"from": {
- "groupId": "com.android.support.test.espresso",
+ "groupId": "androidx.test.espresso",
"artifactId": "espresso-accessibility",
- "version": "3.0.2"
+ "version": "{newEspressoVersion}"
},
"to": {
"groupId": "androidx.test.espresso",
@@ -2775,9 +2626,9 @@
},
{
"from": {
- "groupId": "com.android.support.test.espresso",
+ "groupId": "androidx.test.espresso",
"artifactId": "espresso-contrib",
- "version": "3.0.2"
+ "version": "{newEspressoVersion}"
},
"to": {
"groupId": "androidx.test.espresso",
@@ -2787,9 +2638,9 @@
},
{
"from": {
- "groupId": "com.android.support.test.espresso",
+ "groupId": "androidx.test.espresso",
"artifactId": "espresso-core",
- "version": "3.0.2"
+ "version": "{newEspressoVersion}"
},
"to": {
"groupId": "androidx.test.espresso",
@@ -2799,9 +2650,9 @@
},
{
"from": {
- "groupId": "com.android.support.test.espresso",
+ "groupId": "androidx.test.espresso",
"artifactId": "espresso-idling-resource",
- "version": "3.0.2"
+ "version": "{newEspressoVersion}"
},
"to": {
"groupId": "androidx.test.espresso",
@@ -2811,9 +2662,9 @@
},
{
"from": {
- "groupId": "com.android.support.test.espresso",
+ "groupId": "androidx.test.espresso",
"artifactId": "espresso-intents",
- "version": "3.0.2"
+ "version": "{newEspressoVersion}"
},
"to": {
"groupId": "androidx.test.espresso",
@@ -2823,9 +2674,9 @@
},
{
"from": {
- "groupId": "com.android.support.test.espresso",
+ "groupId": "androidx.test.espresso",
"artifactId": "espresso-remote",
- "version": "3.0.2"
+ "version": "{newEspressoVersion}"
},
"to": {
"groupId": "androidx.test.espresso",
@@ -2835,9 +2686,9 @@
},
{
"from": {
- "groupId": "com.android.support.test.espresso",
+ "groupId": "androidx.test.espresso",
"artifactId": "espresso-web",
- "version": "3.0.2"
+ "version": "{newEspressoVersion}"
},
"to": {
"groupId": "androidx.test.espresso",
@@ -2847,9 +2698,9 @@
},
{
"from": {
- "groupId": "com.android.support.test.espresso.idling",
+ "groupId": "androidx.test.espresso.idling",
"artifactId": "idling-concurrent",
- "version": "3.0.2"
+ "version": "{newEspressoVersion}"
},
"to": {
"groupId": "androidx.test.espresso.idling",
@@ -2859,9 +2710,9 @@
},
{
"from": {
- "groupId": "com.android.support.test.espresso.idling",
+ "groupId": "androidx.test.espresso.idling",
"artifactId": "idling-net",
- "version": "3.0.2"
+ "version": "{newEspressoVersion}"
},
"to": {
"groupId": "androidx.test.espresso.idling",
@@ -3727,110 +3578,6 @@
"android/support/constraint/solver/widgets/ResolutionNode": "androidx/constraintlayout/solver/widgets/ResolutionNode",
"android/support/constraint/solver/widgets/Snapshot": "androidx/constraintlayout/solver/widgets/Snapshot",
"android/support/constraint/solver/widgets/WidgetContainer": "androidx/constraintlayout/solver/widgets/WidgetContainer",
- "android/support/design/R": "com/google/android/material/R",
- "android/support/design/animation/AnimationUtils": "com/google/android/material/animation/AnimationUtils",
- "android/support/design/animation/AnimatorSetCompat": "com/google/android/material/animation/AnimatorSetCompat",
- "android/support/design/animation/ArgbEvaluatorCompat": "com/google/android/material/animation/ArgbEvaluatorCompat",
- "android/support/design/animation/ChildrenAlphaProperty": "com/google/android/material/animation/ChildrenAlphaProperty",
- "android/support/design/animation/DrawableAlphaProperty": "com/google/android/material/animation/DrawableAlphaProperty",
- "android/support/design/animation/ImageMatrixProperty": "com/google/android/material/animation/ImageMatrixProperty",
- "android/support/design/animation/MatrixEvaluator": "com/google/android/material/animation/MatrixEvaluator",
- "android/support/design/animation/MotionSpec": "com/google/android/material/animation/MotionSpec",
- "android/support/design/animation/MotionTiming": "com/google/android/material/animation/MotionTiming",
- "android/support/design/animation/Positioning": "com/google/android/material/animation/Positioning",
- "android/support/design/behavior/HideBottomViewOnScrollBehavior": "com/google/android/material/behavior/HideBottomViewOnScrollBehavior",
- "android/support/design/button/MaterialButton": "com/google/android/material/button/MaterialButton",
- "android/support/design/button/MaterialButtonBackgroundDrawable": "com/google/android/material/button/MaterialButtonBackgroundDrawable",
- "android/support/design/button/MaterialButtonHelper": "com/google/android/material/button/MaterialButtonHelper",
- "android/support/design/card/MaterialCardView": "com/google/android/material/card/MaterialCardView",
- "android/support/design/card/MaterialCardViewHelper": "com/google/android/material/card/MaterialCardViewHelper",
- "android/support/design/chip/Chip": "com/google/android/material/chip/Chip",
- "android/support/design/chip/ChipDrawable": "com/google/android/material/chip/ChipDrawable",
- "android/support/design/chip/ChipGroup": "com/google/android/material/chip/ChipGroup",
- "android/support/design/circularreveal/CircularRevealCompat": "com/google/android/material/circularreveal/CircularRevealCompat",
- "android/support/design/circularreveal/CircularRevealFrameLayout": "com/google/android/material/circularreveal/CircularRevealFrameLayout",
- "android/support/design/circularreveal/CircularRevealGridLayout": "com/google/android/material/circularreveal/CircularRevealGridLayout",
- "android/support/design/circularreveal/CircularRevealHelper": "com/google/android/material/circularreveal/CircularRevealHelper",
- "android/support/design/circularreveal/CircularRevealLinearLayout": "com/google/android/material/circularreveal/CircularRevealLinearLayout",
- "android/support/design/circularreveal/CircularRevealRelativeLayout": "com/google/android/material/circularreveal/CircularRevealRelativeLayout",
- "android/support/design/circularreveal/CircularRevealWidget": "com/google/android/material/circularreveal/CircularRevealWidget",
- "android/support/design/circularreveal/cardview/CircularRevealCardView": "com/google/android/material/circularreveal/cardview/CircularRevealCardView",
- "android/support/design/circularreveal/coordinatorlayout/CircularRevealCoordinatorLayout": "com/google/android/material/circularreveal/coordinatorlayout/CircularRevealCoordinatorLayout",
- "android/support/design/internal/BaselineLayout": "com/google/android/material/internal/BaselineLayout",
- "android/support/design/internal/BottomNavigationItemView": "com/google/android/material/bottomnavigation/BottomNavigationItemView",
- "android/support/design/internal/BottomNavigationMenu": "com/google/android/material/bottomnavigation/BottomNavigationMenu",
- "android/support/design/internal/BottomNavigationMenuView": "com/google/android/material/bottomnavigation/BottomNavigationMenuView",
- "android/support/design/internal/BottomNavigationPresenter": "com/google/android/material/bottomnavigation/BottomNavigationPresenter",
- "android/support/design/internal/Experimental": "com/google/android/material/internal/Experimental",
- "android/support/design/internal/FlowLayout": "com/google/android/material/internal/FlowLayout",
- "android/support/design/internal/ForegroundLinearLayout": "com/google/android/material/internal/ForegroundLinearLayout",
- "android/support/design/internal/NavigationMenu": "com/google/android/material/internal/NavigationMenu",
- "android/support/design/internal/NavigationMenuItemView": "com/google/android/material/internal/NavigationMenuItemView",
- "android/support/design/internal/NavigationMenuPresenter": "com/google/android/material/internal/NavigationMenuPresenter",
- "android/support/design/internal/NavigationMenuView": "com/google/android/material/internal/NavigationMenuView",
- "android/support/design/internal/NavigationSubMenu": "com/google/android/material/internal/NavigationSubMenu",
- "android/support/design/internal/ParcelableSparseArray": "com/google/android/material/internal/ParcelableSparseArray",
- "android/support/design/internal/ScrimInsetsFrameLayout": "com/google/android/material/internal/ScrimInsetsFrameLayout",
- "android/support/design/internal/TextScale": "com/google/android/material/internal/TextScale",
- "android/support/design/internal/ThemeEnforcement": "com/google/android/material/internal/ThemeEnforcement",
- "android/support/design/internal/ViewUtils": "com/google/android/material/internal/ViewUtils",
- "android/support/design/resources/MaterialResources": "com/google/android/material/resources/MaterialResources",
- "android/support/design/resources/TextAppearance": "com/google/android/material/resources/TextAppearance",
- "android/support/design/resources/TextAppearanceConfig": "com/google/android/material/resources/TextAppearanceConfig",
- "android/support/design/shape/CornerTreatment": "com/google/android/material/shape/CornerTreatment",
- "android/support/design/shape/CutCornerTreatment": "com/google/android/material/shape/CutCornerTreatment",
- "android/support/design/shape/EdgeTreatment": "com/google/android/material/shape/EdgeTreatment",
- "android/support/design/shape/InterpolateOnScrollPositionChangeHelper": "com/google/android/material/shape/InterpolateOnScrollPositionChangeHelper",
- "android/support/design/shape/MaterialShapeDrawable": "com/google/android/material/shape/MaterialShapeDrawable",
- "android/support/design/shape/RoundedCornerTreatment": "com/google/android/material/shape/RoundedCornerTreatment",
- "android/support/design/shape/ShapePath": "com/google/android/material/shape/ShapePath",
- "android/support/design/shape/ShapePathModel": "com/google/android/material/shape/ShapePathModel",
- "android/support/design/shape/TriangleEdgeTreatment": "com/google/android/material/shape/TriangleEdgeTreatment",
- "android/support/design/snackbar/ContentViewCallback": "com/google/android/material/snackbar/ContentViewCallback",
- "android/support/design/theme/MaterialComponentsViewInflater": "com/google/android/material/theme/MaterialComponentsViewInflater",
- "android/support/design/transformation/ExpandableBehavior": "com/google/android/material/transformation/ExpandableBehavior",
- "android/support/design/transformation/ExpandableTransformationBehavior": "com/google/android/material/transformation/ExpandableTransformationBehavior",
- "android/support/design/transformation/FabTransformationBehavior": "com/google/android/material/transformation/FabTransformationBehavior",
- "android/support/design/transformation/FabTransformationScrimBehavior": "com/google/android/material/transformation/FabTransformationScrimBehavior",
- "android/support/design/transformation/FabTransformationSheetBehavior": "com/google/android/material/transformation/FabTransformationSheetBehavior",
- "android/support/design/transformation/TransformationChildCard": "com/google/android/material/transformation/TransformationChildCard",
- "android/support/design/transformation/TransformationChildLayout": "com/google/android/material/transformation/TransformationChildLayout",
- "android/support/design/widget/AppBarLayout": "com/google/android/material/appbar/AppBarLayout",
- "android/support/design/widget/BaseTransientBottomBar": "com/google/android/material/snackbar/BaseTransientBottomBar",
- "android/support/design/bottomsheet/BottomSheetBehavior": "com/google/android/material/bottomsheet/BottomSheetBehavior",
- "android/support/design/bottomsheet/BottomSheetDialog": "com/google/android/material/bottomsheet/BottomSheetDialog",
- "android/support/design/bottomsheet/BottomSheetDialogFragment": "com/google/android/material/bottomsheet/BottomSheetDialogFragment",
- "android/support/design/widget/CheckableImageButton": "com/google/android/material/internal/CheckableImageButton",
- "android/support/design/widget/CircularBorderDrawable": "com/google/android/material/internal/CircularBorderDrawable",
- "android/support/design/widget/CircularBorderDrawableLollipop": "com/google/android/material/internal/CircularBorderDrawableLollipop",
- "android/support/design/widget/CollapsingTextHelper": "com/google/android/material/internal/CollapsingTextHelper",
- "android/support/design/appbar/CollapsingToolbarLayout": "com/google/android/material/appbar/CollapsingToolbarLayout",
- "android/support/design/widget/CutoutDrawable": "com/google/android/material/textfield/CutoutDrawable",
- "android/support/design/widget/DescendantOffsetUtils": "com/google/android/material/internal/DescendantOffsetUtils",
- "android/support/design/widget/DrawableUtils": "com/google/android/material/internal/DrawableUtils",
- "android/support/design/widget/FloatingActionButton": "com/google/android/material/floatingactionbutton/FloatingActionButton",
- "android/support/design/widget/FloatingActionButtonImpl": "com/google/android/material/floatingactionbutton/FloatingActionButtonImpl",
- "android/support/design/widget/FloatingActionButtonImplLollipop": "com/google/android/material/floatingactionbutton/FloatingActionButtonImplLollipop",
- "android/support/design/widget/HeaderBehavior": "com/google/android/material/appbar/HeaderBehavior",
- "android/support/design/widget/HeaderScrollingViewBehavior": "com/google/android/material/appbar/HeaderScrollingViewBehavior",
- "android/support/design/widget/IndicatorViewController": "com/google/android/material/textfield/IndicatorViewController",
- "android/support/design/widget/MathUtils": "com/google/android/material/math/MathUtils",
- "android/support/design/navigation/NavigationView": "com/google/android/material/navigation/NavigationView",
- "android/support/design/widget/ShadowDrawableWrapper": "com/google/android/material/shadow/ShadowDrawableWrapper",
- "android/support/design/widget/ShadowViewDelegate": "com/google/android/material/shadow/ShadowViewDelegate",
- "android/support/design/widget/Snackbar": "com/google/android/material/snackbar/Snackbar",
- "android/support/design/widget/SnackbarContentLayout": "com/google/android/material/snackbar/SnackbarContentLayout",
- "android/support/design/widget/SnackbarManager": "com/google/android/material/snackbar/SnackbarManager",
- "android/support/design/widget/StateListAnimator": "com/google/android/material/internal/StateListAnimator",
- "android/support/design/widget/SwipeDismissBehavior": "com/google/android/material/behavior/SwipeDismissBehavior",
- "android/support/design/widget/TabItem": "com/google/android/material/tabs/TabItem",
- "android/support/design/widget/TabLayout": "com/google/android/material/tabs/TabLayout",
- "android/support/design/widget/TextInputEditText": "com/google/android/material/textfield/TextInputEditText",
- "android/support/design/widget/TextInputLayout": "com/google/android/material/textfield/TextInputLayout",
- "android/support/design/widget/ViewOffsetBehavior": "com/google/android/material/appbar/ViewOffsetBehavior",
- "android/support/design/widget/ViewOffsetHelper": "com/google/android/material/appbar/ViewOffsetHelper",
- "android/support/design/widget/ViewUtilsLollipop": "com/google/android/material/appbar/ViewUtilsLollipop",
- "android/support/design/widget/VisibilityAwareImageButton": "com/google/android/material/internal/VisibilityAwareImageButton",
"android/support/mediacompat/R": "androidx/media/R",
"android/support/multidex/MultiDex": "androidx/multidex/MultiDex",
"android/support/multidex/MultiDexApplication": "androidx/multidex/MultiDexApplication",
@@ -3839,255 +3586,6 @@
"android/support/test/InstrumentationRegistry": "androidx/test/InstrumentationRegistry",
"android/support/test/annotation/Beta": "androidx/test/annotation/Beta",
"android/support/test/annotation/UiThreadTest": "androidx/test/annotation/UiThreadTest",
- "android/support/test/espresso/AmbiguousViewMatcherException": "androidx/test/espresso/AmbiguousViewMatcherException",
- "android/support/test/espresso/AppNotIdleException": "androidx/test/espresso/AppNotIdleException",
- "android/support/test/espresso/BaseLayerComponent": "androidx/test/espresso/BaseLayerComponent",
- "android/support/test/espresso/DaggerBaseLayerComponent": "androidx/test/espresso/DaggerBaseLayerComponent",
- "android/support/test/espresso/DataInteraction": "androidx/test/espresso/DataInteraction",
- "android/support/test/espresso/DataInteractionRemote": "androidx/test/espresso/DataInteractionRemote",
- "android/support/test/espresso/Espresso": "androidx/test/espresso/Espresso",
- "android/support/test/espresso/EspressoException": "androidx/test/espresso/EspressoException",
- "android/support/test/espresso/FailureHandler": "androidx/test/espresso/FailureHandler",
- "android/support/test/espresso/GraphHolder": "androidx/test/espresso/GraphHolder",
- "android/support/test/espresso/IdlingPolicies": "androidx/test/espresso/IdlingPolicies",
- "android/support/test/espresso/IdlingPolicy": "androidx/test/espresso/IdlingPolicy",
- "android/support/test/espresso/IdlingRegistry": "androidx/test/espresso/IdlingRegistry",
- "android/support/test/espresso/IdlingResource": "androidx/test/espresso/IdlingResource",
- "android/support/test/espresso/IdlingResourceTimeoutException": "androidx/test/espresso/IdlingResourceTimeoutException",
- "android/support/test/espresso/InjectEventSecurityException": "androidx/test/espresso/InjectEventSecurityException",
- "android/support/test/espresso/InteractionResultsHandler": "androidx/test/espresso/InteractionResultsHandler",
- "android/support/test/espresso/NoActivityResumedException": "androidx/test/espresso/NoActivityResumedException",
- "android/support/test/espresso/NoMatchingRootException": "androidx/test/espresso/NoMatchingRootException",
- "android/support/test/espresso/NoMatchingViewException": "androidx/test/espresso/NoMatchingViewException",
- "android/support/test/espresso/PerformException": "androidx/test/espresso/PerformException",
- "android/support/test/espresso/Root": "androidx/test/espresso/Root",
- "android/support/test/espresso/UiController": "androidx/test/espresso/UiController",
- "android/support/test/espresso/ViewAction": "androidx/test/espresso/ViewAction",
- "android/support/test/espresso/ViewAssertion": "androidx/test/espresso/ViewAssertion",
- "android/support/test/espresso/ViewFinder": "androidx/test/espresso/ViewFinder",
- "android/support/test/espresso/ViewInteraction": "androidx/test/espresso/ViewInteraction",
- "android/support/test/espresso/ViewInteractionComponent": "androidx/test/espresso/ViewInteractionComponent",
- "android/support/test/espresso/ViewInteractionModule": "androidx/test/espresso/ViewInteractionModule",
- "android/support/test/espresso/ViewInteractionModule_ProvideNeedsActivityFactory": "androidx/test/espresso/ViewInteractionModule_ProvideNeedsActivityFactory",
- "android/support/test/espresso/ViewInteractionModule_ProvideRemoteInteractionFactory": "androidx/test/espresso/ViewInteractionModule_ProvideRemoteInteractionFactory",
- "android/support/test/espresso/ViewInteractionModule_ProvideRootMatcherFactory": "androidx/test/espresso/ViewInteractionModule_ProvideRootMatcherFactory",
- "android/support/test/espresso/ViewInteractionModule_ProvideRootViewFactory": "androidx/test/espresso/ViewInteractionModule_ProvideRootViewFactory",
- "android/support/test/espresso/ViewInteractionModule_ProvideViewFinderFactory": "androidx/test/espresso/ViewInteractionModule_ProvideViewFinderFactory",
- "android/support/test/espresso/ViewInteractionModule_ProvideViewMatcherFactory": "androidx/test/espresso/ViewInteractionModule_ProvideViewMatcherFactory",
- "android/support/test/espresso/ViewInteraction_Factory": "androidx/test/espresso/ViewInteraction_Factory",
- "android/support/test/espresso/accessibility/AccessibilityChecks": "androidx/test/espresso/accessibility/AccessibilityChecks",
- "android/support/test/espresso/action/AdapterDataLoaderAction": "androidx/test/espresso/action/AdapterDataLoaderAction",
- "android/support/test/espresso/action/AdapterDataLoaderActionRemoteMsg": "androidx/test/espresso/action/AdapterDataLoaderActionRemoteMsg",
- "android/support/test/espresso/action/AdapterViewProtocol": "androidx/test/espresso/action/AdapterViewProtocol",
- "android/support/test/espresso/action/AdapterViewProtocols": "androidx/test/espresso/action/AdapterViewProtocols",
- "android/support/test/espresso/action/CloseKeyboardAction": "androidx/test/espresso/action/CloseKeyboardAction",
- "android/support/test/espresso/action/CoordinatesProvider": "androidx/test/espresso/action/CoordinatesProvider",
- "android/support/test/espresso/action/EditorAction": "androidx/test/espresso/action/EditorAction",
- "android/support/test/espresso/action/EspressoKey": "androidx/test/espresso/action/EspressoKey",
- "android/support/test/espresso/action/GeneralClickAction": "androidx/test/espresso/action/GeneralClickAction",
- "android/support/test/espresso/action/GeneralClickActionRemoteMessage": "androidx/test/espresso/action/GeneralClickActionRemoteMessage",
- "android/support/test/espresso/action/GeneralLocation": "androidx/test/espresso/action/GeneralLocation",
- "android/support/test/espresso/action/GeneralLocationRemoteMessage": "androidx/test/espresso/action/GeneralLocationRemoteMessage",
- "android/support/test/espresso/action/GeneralSwipeAction": "androidx/test/espresso/action/GeneralSwipeAction",
- "android/support/test/espresso/action/GeneralSwipeActionRemoteMessage": "androidx/test/espresso/action/GeneralSwipeActionRemoteMessage",
- "android/support/test/espresso/action/KeyEventAction": "androidx/test/espresso/action/KeyEventAction",
- "android/support/test/espresso/action/KeyEventActionBase": "androidx/test/espresso/action/KeyEventActionBase",
- "android/support/test/espresso/action/MotionEvents": "androidx/test/espresso/action/MotionEvents",
- "android/support/test/espresso/action/OpenLinkAction": "androidx/test/espresso/action/OpenLinkAction",
- "android/support/test/espresso/action/PrecisionDescriber": "androidx/test/espresso/action/PrecisionDescriber",
- "android/support/test/espresso/action/Press": "androidx/test/espresso/action/Press",
- "android/support/test/espresso/action/PressBackAction": "androidx/test/espresso/action/PressBackAction",
- "android/support/test/espresso/action/PressRemoteMessage": "androidx/test/espresso/action/PressRemoteMessage",
- "android/support/test/espresso/action/RemoteViewActions": "androidx/test/espresso/action/RemoteViewActions",
- "android/support/test/espresso/action/RepeatActionUntilViewState": "androidx/test/espresso/action/RepeatActionUntilViewState",
- "android/support/test/espresso/action/ReplaceTextAction": "androidx/test/espresso/action/ReplaceTextAction",
- "android/support/test/espresso/action/ScrollToAction": "androidx/test/espresso/action/ScrollToAction",
- "android/support/test/espresso/action/Swipe": "androidx/test/espresso/action/Swipe",
- "android/support/test/espresso/action/SwipeRemoteMessage": "androidx/test/espresso/action/SwipeRemoteMessage",
- "android/support/test/espresso/action/Swiper": "androidx/test/espresso/action/Swiper",
- "android/support/test/espresso/action/Tap": "androidx/test/espresso/action/Tap",
- "android/support/test/espresso/action/TapRemoteMessage": "androidx/test/espresso/action/TapRemoteMessage",
- "android/support/test/espresso/action/Tapper": "androidx/test/espresso/action/Tapper",
- "android/support/test/espresso/action/TranslatedCoordinatesProvider": "androidx/test/espresso/action/TranslatedCoordinatesProvider",
- "android/support/test/espresso/action/TranslatedCoordinatesProviderRemoteMessage": "androidx/test/espresso/action/TranslatedCoordinatesProviderRemoteMessage",
- "android/support/test/espresso/action/TypeTextAction": "androidx/test/espresso/action/TypeTextAction",
- "android/support/test/espresso/action/ViewActions": "androidx/test/espresso/action/ViewActions",
- "android/support/test/espresso/assertion/LayoutAssertions": "androidx/test/espresso/assertion/LayoutAssertions",
- "android/support/test/espresso/assertion/PositionAssertions": "androidx/test/espresso/assertion/PositionAssertions",
- "android/support/test/espresso/assertion/RemoteViewAssertions": "androidx/test/espresso/assertion/RemoteViewAssertions",
- "android/support/test/espresso/assertion/ViewAssertions": "androidx/test/espresso/assertion/ViewAssertions",
- "android/support/test/espresso/base/ActiveRootLister": "androidx/test/espresso/base/ActiveRootLister",
- "android/support/test/espresso/base/AsyncTaskPoolMonitor": "androidx/test/espresso/base/AsyncTaskPoolMonitor",
- "android/support/test/espresso/base/BaseLayerModule": "androidx/test/espresso/base/BaseLayerModule",
- "android/support/test/espresso/base/BaseLayerModule_FailureHandlerHolder_Factory": "androidx/test/espresso/base/BaseLayerModule_FailureHandlerHolder_Factory",
- "android/support/test/espresso/base/BaseLayerModule_ProvideActiveRootListerFactory": "androidx/test/espresso/base/BaseLayerModule_ProvideActiveRootListerFactory",
- "android/support/test/espresso/base/BaseLayerModule_ProvideCompatAsyncTaskMonitorFactory": "androidx/test/espresso/base/BaseLayerModule_ProvideCompatAsyncTaskMonitorFactory",
- "android/support/test/espresso/base/BaseLayerModule_ProvideDynamicNotiferFactory": "androidx/test/espresso/base/BaseLayerModule_ProvideDynamicNotiferFactory",
- "android/support/test/espresso/base/BaseLayerModule_ProvideEventInjectorFactory": "androidx/test/espresso/base/BaseLayerModule_ProvideEventInjectorFactory",
- "android/support/test/espresso/base/BaseLayerModule_ProvideFailureHanderFactory": "androidx/test/espresso/base/BaseLayerModule_ProvideFailureHanderFactory",
- "android/support/test/espresso/base/BaseLayerModule_ProvideFailureHandlerFactory": "androidx/test/espresso/base/BaseLayerModule_ProvideFailureHandlerFactory",
- "android/support/test/espresso/base/BaseLayerModule_ProvideLifecycleMonitorFactory": "androidx/test/espresso/base/BaseLayerModule_ProvideLifecycleMonitorFactory",
- "android/support/test/espresso/base/BaseLayerModule_ProvideMainLooperFactory": "androidx/test/espresso/base/BaseLayerModule_ProvideMainLooperFactory",
- "android/support/test/espresso/base/BaseLayerModule_ProvideMainThreadExecutorFactory": "androidx/test/espresso/base/BaseLayerModule_ProvideMainThreadExecutorFactory",
- "android/support/test/espresso/base/BaseLayerModule_ProvideRemoteExecutorFactory": "androidx/test/espresso/base/BaseLayerModule_ProvideRemoteExecutorFactory",
- "android/support/test/espresso/base/BaseLayerModule_ProvideSdkAsyncTaskMonitorFactory": "androidx/test/espresso/base/BaseLayerModule_ProvideSdkAsyncTaskMonitorFactory",
- "android/support/test/espresso/base/BaseLayerModule_ProvideTargetContextFactory": "androidx/test/espresso/base/BaseLayerModule_ProvideTargetContextFactory",
- "android/support/test/espresso/base/CompatAsyncTask": "androidx/test/espresso/base/CompatAsyncTask",
- "android/support/test/espresso/base/Default": "androidx/test/espresso/base/Default",
- "android/support/test/espresso/base/DefaultFailureHandler": "androidx/test/espresso/base/DefaultFailureHandler",
- "android/support/test/espresso/base/EventInjectionStrategy": "androidx/test/espresso/base/EventInjectionStrategy",
- "android/support/test/espresso/base/EventInjector": "androidx/test/espresso/base/EventInjector",
- "android/support/test/espresso/base/IdleNotifier": "androidx/test/espresso/base/IdleNotifier",
- "android/support/test/espresso/base/IdlingResourceRegistry": "androidx/test/espresso/base/IdlingResourceRegistry",
- "android/support/test/espresso/base/IdlingResourceRegistry_Factory": "androidx/test/espresso/base/IdlingResourceRegistry_Factory",
- "android/support/test/espresso/base/IdlingUiController": "androidx/test/espresso/base/IdlingUiController",
- "android/support/test/espresso/base/InputManagerEventInjectionStrategy": "androidx/test/espresso/base/InputManagerEventInjectionStrategy",
- "android/support/test/espresso/base/Interrogator": "androidx/test/espresso/base/Interrogator",
- "android/support/test/espresso/base/InterruptableUiController": "androidx/test/espresso/base/InterruptableUiController",
- "android/support/test/espresso/base/LooperIdlingResourceInterrogationHandler": "androidx/test/espresso/base/LooperIdlingResourceInterrogationHandler",
- "android/support/test/espresso/base/MainThread": "androidx/test/espresso/base/MainThread",
- "android/support/test/espresso/base/NoopIdleNotificationCallbackIdleNotifierProvider": "androidx/test/espresso/base/NoopIdleNotificationCallbackIdleNotifierProvider",
- "android/support/test/espresso/base/NoopRunnableIdleNotifier": "androidx/test/espresso/base/NoopRunnableIdleNotifier",
- "android/support/test/espresso/base/RootViewPicker": "androidx/test/espresso/base/RootViewPicker",
- "android/support/test/espresso/base/RootViewPickerScope": "androidx/test/espresso/base/RootViewPickerScope",
- "android/support/test/espresso/base/RootViewPicker_Factory": "androidx/test/espresso/base/RootViewPicker_Factory",
- "android/support/test/espresso/base/RootViewPicker_RootResultFetcher_Factory": "androidx/test/espresso/base/RootViewPicker_RootResultFetcher_Factory",
- "android/support/test/espresso/base/RootsOracle": "androidx/test/espresso/base/RootsOracle",
- "android/support/test/espresso/base/RootsOracle_Factory": "androidx/test/espresso/base/RootsOracle_Factory",
- "android/support/test/espresso/base/SdkAsyncTask": "androidx/test/espresso/base/SdkAsyncTask",
- "android/support/test/espresso/base/ThreadPoolExecutorExtractor": "androidx/test/espresso/base/ThreadPoolExecutorExtractor",
- "android/support/test/espresso/base/ThreadPoolExecutorExtractor_Factory": "androidx/test/espresso/base/ThreadPoolExecutorExtractor_Factory",
- "android/support/test/espresso/base/UiControllerImpl": "androidx/test/espresso/base/UiControllerImpl",
- "android/support/test/espresso/base/UiControllerImpl_Factory": "androidx/test/espresso/base/UiControllerImpl_Factory",
- "android/support/test/espresso/base/UiControllerModule": "androidx/test/espresso/base/UiControllerModule",
- "android/support/test/espresso/base/ViewFinderImpl": "androidx/test/espresso/base/ViewFinderImpl",
- "android/support/test/espresso/base/ViewFinderImpl_Factory": "androidx/test/espresso/base/ViewFinderImpl_Factory",
- "android/support/test/espresso/base/WindowManagerEventInjectionStrategy": "androidx/test/espresso/base/WindowManagerEventInjectionStrategy",
- "android/support/test/espresso/contrib/AccessibilityChecks": "androidx/test/espresso/contrib/AccessibilityChecks",
- "android/support/test/espresso/contrib/ActivityResultMatchers": "androidx/test/espresso/contrib/ActivityResultMatchers",
- "android/support/test/espresso/contrib/Checks": "androidx/test/espresso/contrib/Checks",
- "android/support/test/espresso/contrib/DrawerActions": "androidx/test/espresso/contrib/DrawerActions",
- "android/support/test/espresso/contrib/DrawerMatchers": "androidx/test/espresso/contrib/DrawerMatchers",
- "android/support/test/espresso/contrib/NavigationViewActions": "androidx/test/espresso/contrib/NavigationViewActions",
- "android/support/test/espresso/contrib/PickerActions": "androidx/test/espresso/contrib/PickerActions",
- "android/support/test/espresso/contrib/RecyclerViewActions": "androidx/test/espresso/contrib/RecyclerViewActions",
- "android/support/test/espresso/contrib/ViewPagerActions": "androidx/test/espresso/contrib/ViewPagerActions",
- "android/support/test/espresso/idling/CountingIdlingResource": "androidx/test/espresso/idling/CountingIdlingResource",
- "android/support/test/espresso/idling/concurrent/IdlingScheduledThreadPoolExecutor": "androidx/test/espresso/idling/concurrent/IdlingScheduledThreadPoolExecutor",
- "android/support/test/espresso/idling/concurrent/IdlingThreadPoolExecutor": "androidx/test/espresso/idling/concurrent/IdlingThreadPoolExecutor",
- "android/support/test/espresso/idling/net/UriIdlingResource": "androidx/test/espresso/idling/net/UriIdlingResource",
- "android/support/test/espresso/intent/ActivityResultFunction": "androidx/test/espresso/intent/ActivityResultFunction",
- "android/support/test/espresso/intent/Checks": "androidx/test/espresso/intent/Checks",
- "android/support/test/espresso/intent/Intents": "androidx/test/espresso/intent/Intents",
- "android/support/test/espresso/intent/OngoingStubbing": "androidx/test/espresso/intent/OngoingStubbing",
- "android/support/test/espresso/intent/ResettingStubber": "androidx/test/espresso/intent/ResettingStubber",
- "android/support/test/espresso/intent/ResettingStubberImpl": "androidx/test/espresso/intent/ResettingStubberImpl",
- "android/support/test/espresso/intent/ResolvedIntent": "androidx/test/espresso/intent/ResolvedIntent",
- "android/support/test/espresso/intent/ResolvedIntentImpl": "androidx/test/espresso/intent/ResolvedIntentImpl",
- "android/support/test/espresso/intent/VerifiableIntent": "androidx/test/espresso/intent/VerifiableIntent",
- "android/support/test/espresso/intent/VerifiableIntentImpl": "androidx/test/espresso/intent/VerifiableIntentImpl",
- "android/support/test/espresso/intent/VerificationMode": "androidx/test/espresso/intent/VerificationMode",
- "android/support/test/espresso/intent/VerificationModes": "androidx/test/espresso/intent/VerificationModes",
- "android/support/test/espresso/intent/matcher/BundleMatchers": "androidx/test/espresso/intent/matcher/BundleMatchers",
- "android/support/test/espresso/intent/matcher/ComponentNameMatchers": "androidx/test/espresso/intent/matcher/ComponentNameMatchers",
- "android/support/test/espresso/intent/matcher/IntentMatchers": "androidx/test/espresso/intent/matcher/IntentMatchers",
- "android/support/test/espresso/intent/matcher/UriMatchers": "androidx/test/espresso/intent/matcher/UriMatchers",
- "android/support/test/espresso/intent/rule/IntentsTestRule": "androidx/test/espresso/intent/rule/IntentsTestRule",
- "android/support/test/espresso/matcher/BoundedMatcher": "androidx/test/espresso/matcher/BoundedMatcher",
- "android/support/test/espresso/matcher/CursorMatchers": "androidx/test/espresso/matcher/CursorMatchers",
- "android/support/test/espresso/matcher/HasBackgroundMatcher": "androidx/test/espresso/matcher/HasBackgroundMatcher",
- "android/support/test/espresso/matcher/LayoutMatchers": "androidx/test/espresso/matcher/LayoutMatchers",
- "android/support/test/espresso/matcher/PreferenceMatchers": "androidx/test/espresso/matcher/PreferenceMatchers",
- "android/support/test/espresso/matcher/RemoteHamcrestCoreMatchers13": "androidx/test/espresso/matcher/RemoteHamcrestCoreMatchers13",
- "android/support/test/espresso/matcher/RemoteRootMatchers": "androidx/test/espresso/matcher/RemoteRootMatchers",
- "android/support/test/espresso/matcher/RemoteViewMatchers": "androidx/test/espresso/matcher/RemoteViewMatchers",
- "android/support/test/espresso/matcher/RootMatchers": "androidx/test/espresso/matcher/RootMatchers",
- "android/support/test/espresso/matcher/ViewMatchers": "androidx/test/espresso/matcher/ViewMatchers",
- "android/support/test/espresso/proto/UiInteraction": "androidx/test/espresso/proto/UiInteraction",
- "android/support/test/espresso/proto/action/ViewActions": "androidx/test/espresso/proto/action/ViewActions",
- "android/support/test/espresso/proto/assertion/ViewAssertions": "androidx/test/espresso/proto/assertion/ViewAssertions",
- "android/support/test/espresso/proto/matcher/RootMatchers": "androidx/test/espresso/proto/matcher/RootMatchers",
- "android/support/test/espresso/proto/matcher/ViewMatchers": "androidx/test/espresso/proto/matcher/ViewMatchers",
- "android/support/test/espresso/proto/matcher13/HamcrestMatchersv13": "androidx/test/espresso/proto/matcher13/HamcrestMatchersv13",
- "android/support/test/espresso/remote/AnyToTypeConverter": "androidx/test/espresso/remote/AnyToTypeConverter",
- "android/support/test/espresso/remote/Bindable": "androidx/test/espresso/remote/Bindable",
- "android/support/test/espresso/remote/BuilderReflector": "androidx/test/espresso/remote/BuilderReflector",
- "android/support/test/espresso/remote/ByteStringToParcelableConverter": "androidx/test/espresso/remote/ByteStringToParcelableConverter",
- "android/support/test/espresso/remote/ByteStringToTypeConverter": "androidx/test/espresso/remote/ByteStringToTypeConverter",
- "android/support/test/espresso/remote/ConstructorInvocation": "androidx/test/espresso/remote/ConstructorInvocation",
- "android/support/test/espresso/remote/Converter": "androidx/test/espresso/remote/Converter",
- "android/support/test/espresso/remote/EspressoRemote": "androidx/test/espresso/remote/EspressoRemote",
- "android/support/test/espresso/remote/EspressoRemoteMessage": "androidx/test/espresso/remote/EspressoRemoteMessage",
- "android/support/test/espresso/remote/FieldDescriptor": "androidx/test/espresso/remote/FieldDescriptor",
- "android/support/test/espresso/remote/GenericRemoteMessage": "androidx/test/espresso/remote/GenericRemoteMessage",
- "android/support/test/espresso/remote/IInteractionExecutionStatus": "androidx/test/espresso/remote/IInteractionExecutionStatus",
- "android/support/test/espresso/remote/InteractionRequest": "androidx/test/espresso/remote/InteractionRequest",
- "android/support/test/espresso/remote/InteractionResponse": "androidx/test/espresso/remote/InteractionResponse",
- "android/support/test/espresso/remote/MethodInvocation": "androidx/test/espresso/remote/MethodInvocation",
- "android/support/test/espresso/remote/NoRemoteEspressoInstanceException": "androidx/test/espresso/remote/NoRemoteEspressoInstanceException",
- "android/support/test/espresso/remote/NoopRemoteInteraction": "androidx/test/espresso/remote/NoopRemoteInteraction",
- "android/support/test/espresso/remote/ParcelableToByteStringConverter": "androidx/test/espresso/remote/ParcelableToByteStringConverter",
- "android/support/test/espresso/remote/ProtoReflector": "androidx/test/espresso/remote/ProtoReflector",
- "android/support/test/espresso/remote/ProtoUtils": "androidx/test/espresso/remote/ProtoUtils",
- "android/support/test/espresso/remote/RemoteDescriptor": "androidx/test/espresso/remote/RemoteDescriptor",
- "android/support/test/espresso/remote/RemoteDescriptorRegistry": "androidx/test/espresso/remote/RemoteDescriptorRegistry",
- "android/support/test/espresso/remote/RemoteEspressoException": "androidx/test/espresso/remote/RemoteEspressoException",
- "android/support/test/espresso/remote/RemoteInteraction": "androidx/test/espresso/remote/RemoteInteraction",
- "android/support/test/espresso/remote/RemoteInteractionRegistry": "androidx/test/espresso/remote/RemoteInteractionRegistry",
- "android/support/test/espresso/remote/RemoteMessageDeserializer": "androidx/test/espresso/remote/RemoteMessageDeserializer",
- "android/support/test/espresso/remote/RemoteMessageSerializer": "androidx/test/espresso/remote/RemoteMessageSerializer",
- "android/support/test/espresso/remote/RemoteProtocolException": "androidx/test/espresso/remote/RemoteProtocolException",
- "android/support/test/espresso/remote/TypeProtoConverters": "androidx/test/espresso/remote/TypeProtoConverters",
- "android/support/test/espresso/remote/TypeToAnyConverter": "androidx/test/espresso/remote/TypeToAnyConverter",
- "android/support/test/espresso/remote/TypeToByteStringConverter": "androidx/test/espresso/remote/TypeToByteStringConverter",
- "android/support/test/espresso/remote/annotation/RemoteMsgConstructor": "androidx/test/espresso/remote/annotation/RemoteMsgConstructor",
- "android/support/test/espresso/remote/annotation/RemoteMsgField": "androidx/test/espresso/remote/annotation/RemoteMsgField",
- "android/support/test/espresso/util/ActivityLifecycles": "androidx/test/espresso/util/ActivityLifecycles",
- "android/support/test/espresso/util/EspressoOptional": "androidx/test/espresso/util/EspressoOptional",
- "android/support/test/espresso/util/HumanReadables": "androidx/test/espresso/util/HumanReadables",
- "android/support/test/espresso/util/TreeIterables": "androidx/test/espresso/util/TreeIterables",
- "android/support/test/espresso/web/action/AtomAction": "androidx/test/espresso/web/action/AtomAction",
- "android/support/test/espresso/web/action/AtomActionRemoteMessage": "androidx/test/espresso/web/action/AtomActionRemoteMessage",
- "android/support/test/espresso/web/action/EnableJavascriptAction": "androidx/test/espresso/web/action/EnableJavascriptAction",
- "android/support/test/espresso/web/action/EvaluationAtom": "androidx/test/espresso/web/action/EvaluationAtom",
- "android/support/test/espresso/web/action/IAtomActionResultPropagator": "androidx/test/espresso/web/action/IAtomActionResultPropagator",
- "android/support/test/espresso/web/action/JavascriptEvaluation": "androidx/test/espresso/web/action/JavascriptEvaluation",
- "android/support/test/espresso/web/action/RemoteWebActions": "androidx/test/espresso/web/action/RemoteWebActions",
- "android/support/test/espresso/web/assertion/ByteStringToDocumentConverter": "androidx/test/espresso/web/assertion/ByteStringToDocumentConverter",
- "android/support/test/espresso/web/assertion/CheckResultWebAssertionRemoteMessage": "androidx/test/espresso/web/assertion/CheckResultWebAssertionRemoteMessage",
- "android/support/test/espresso/web/assertion/CompressorDecompressor": "androidx/test/espresso/web/assertion/CompressorDecompressor",
- "android/support/test/espresso/web/assertion/DocumentProtoConverters": "androidx/test/espresso/web/assertion/DocumentProtoConverters",
- "android/support/test/espresso/web/assertion/DocumentToByteStringConverter": "androidx/test/espresso/web/assertion/DocumentToByteStringConverter",
- "android/support/test/espresso/web/assertion/RemoteWebViewAssertions": "androidx/test/espresso/web/assertion/RemoteWebViewAssertions",
- "android/support/test/espresso/web/assertion/TagSoupDocumentParser": "androidx/test/espresso/web/assertion/TagSoupDocumentParser",
- "android/support/test/espresso/web/assertion/WebAssertion": "androidx/test/espresso/web/assertion/WebAssertion",
- "android/support/test/espresso/web/assertion/WebViewAssertions": "androidx/test/espresso/web/assertion/WebViewAssertions",
- "android/support/test/espresso/web/matcher/AmbiguousElementMatcherException": "androidx/test/espresso/web/matcher/AmbiguousElementMatcherException",
- "android/support/test/espresso/web/matcher/DomMatchers": "androidx/test/espresso/web/matcher/DomMatchers",
- "android/support/test/espresso/web/matcher/RemoteWebMatchers": "androidx/test/espresso/web/matcher/RemoteWebMatchers",
- "android/support/test/espresso/web/model/Atom": "androidx/test/espresso/web/model/Atom",
- "android/support/test/espresso/web/model/Atoms": "androidx/test/espresso/web/model/Atoms",
- "android/support/test/espresso/web/model/ElementReference": "androidx/test/espresso/web/model/ElementReference",
- "android/support/test/espresso/web/model/Evaluation": "androidx/test/espresso/web/model/Evaluation",
- "android/support/test/espresso/web/model/JSONAble": "androidx/test/espresso/web/model/JSONAble",
- "android/support/test/espresso/web/model/ModelCodec": "androidx/test/espresso/web/model/ModelCodec",
- "android/support/test/espresso/web/model/RemoteWebModelAtoms": "androidx/test/espresso/web/model/RemoteWebModelAtoms",
- "android/support/test/espresso/web/model/ScriptWithArgsSimpleAtomRemoteMessage": "androidx/test/espresso/web/model/ScriptWithArgsSimpleAtomRemoteMessage",
- "android/support/test/espresso/web/model/SimpleAtom": "androidx/test/espresso/web/model/SimpleAtom",
- "android/support/test/espresso/web/model/TransformingAtom": "androidx/test/espresso/web/model/TransformingAtom",
- "android/support/test/espresso/web/model/WindowReference": "androidx/test/espresso/web/model/WindowReference",
- "android/support/test/espresso/web/proto/action/WebActions": "androidx/test/espresso/web/proto/action/WebActions",
- "android/support/test/espresso/web/proto/assertion/WebAssertions": "androidx/test/espresso/web/proto/assertion/WebAssertions",
- "android/support/test/espresso/web/proto/matcher/RemoteWebMatchers": "androidx/test/espresso/web/proto/matcher/RemoteWebMatchers",
- "android/support/test/espresso/web/proto/model/WebModelAtoms": "androidx/test/espresso/web/proto/model/WebModelAtoms",
- "android/support/test/espresso/web/proto/sugar/WebSugar": "androidx/test/espresso/web/proto/sugar/WebSugar",
- "android/support/test/espresso/web/proto/webdriver/WebWebdriverAtoms": "androidx/test/espresso/web/proto/webdriver/WebWebdriverAtoms",
- "android/support/test/espresso/web/sugar/RemoteWebSugar": "androidx/test/espresso/web/sugar/RemoteWebSugar",
- "android/support/test/espresso/web/sugar/Web": "androidx/test/espresso/web/sugar/Web",
- "android/support/test/espresso/web/webdriver/DriverAtoms": "androidx/test/espresso/web/webdriver/DriverAtoms",
- "android/support/test/espresso/web/webdriver/Locator": "androidx/test/espresso/web/webdriver/Locator",
- "android/support/test/espresso/web/webdriver/RemoteWebDriverAtoms": "androidx/test/espresso/web/webdriver/RemoteWebDriverAtoms",
- "android/support/test/espresso/web/webdriver/WebDriverAtomScripts": "androidx/test/espresso/web/webdriver/WebDriverAtomScripts",
"android/support/test/filters/FlakyTest": "androidx/test/filters/FlakyTest",
"android/support/test/filters/LargeTest": "androidx/test/filters/LargeTest",
"android/support/test/filters/MediumTest": "androidx/test/filters/MediumTest",
@@ -4667,15 +4165,6 @@
"androidx/appcompat/widget/{any}",
"androidx/recyclerview/widget/{any}"
],
- "android/support/design/widget/{any}": [
- "com/google/android/material/**"
- ],
- "android/support/design/{any}": [
- "com/google/android/material/**"
- ],
- "android/support/design/internal/{any}": [
- "com/google/android/material/{any}"
- ],
"android/arch/persistence/room/paging/{any}": [
"androidx/room/paging/{any}"
],
diff --git a/jetifier/jetifier/preprocessor/scripts/processDefaultConfig.sh b/jetifier/jetifier/preprocessor/scripts/processDefaultConfig.sh
index 1fd37d5..00ba6539 100755
--- a/jetifier/jetifier/preprocessor/scripts/processDefaultConfig.sh
+++ b/jetifier/jetifier/preprocessor/scripts/processDefaultConfig.sh
@@ -61,7 +61,7 @@
function buildProjectUsingGradle() {
cd $1
- sh gradlew :jetifier-preprocessor:clean :jetifier-preprocessor:uploadArchives $2 > $TEMP_LOG --stacktrace
+ sh gradlew :jetifier-preprocessor:clean :jetifier-preprocessor:publish $2 > $TEMP_LOG --stacktrace
}
function downloadPackage() {
diff --git a/jetifier/jetifier/processor/src/main/kotlin/com/android/tools/build/jetifier/processor/transform/bytecode/ByteCodeTransformer.kt b/jetifier/jetifier/processor/src/main/kotlin/com/android/tools/build/jetifier/processor/transform/bytecode/ByteCodeTransformer.kt
index 58301ec..c7702aa 100644
--- a/jetifier/jetifier/processor/src/main/kotlin/com/android/tools/build/jetifier/processor/transform/bytecode/ByteCodeTransformer.kt
+++ b/jetifier/jetifier/processor/src/main/kotlin/com/android/tools/build/jetifier/processor/transform/bytecode/ByteCodeTransformer.kt
@@ -28,7 +28,6 @@
class ByteCodeTransformer internal constructor(
private val context: TransformationContext
) : Transformer {
-
// Does not yet support single bytecode file transformation, file has to be within archive.
override fun canTransform(file: ArchiveFile) = file.isClassFile() && !file.isSingleFile
@@ -37,7 +36,11 @@
val writer = ClassWriter(0 /* flags */)
val remapper = CoreRemapperImpl(context, writer)
- reader.accept(remapper.classRemapper, 0 /* flags */)
+ try {
+ reader.accept(remapper.classRemapper, 0 /* flags */)
+ } catch (e: ArrayIndexOutOfBoundsException) {
+ throw InvalidByteCodeException("Error processing '${file.relativePath}' bytecode.", e)
+ }
if (!remapper.changesDone) {
file.setNewDataSilently(writer.toByteArray())
@@ -47,4 +50,13 @@
file.updateRelativePath(remapper.rewritePath(file.relativePath))
}
-}
\ No newline at end of file
+}
+
+/**
+ * Thrown when rewriting a library with bytecode that can't be processed via ASM.
+ */
+// Happens for instance in b/140747218
+class InvalidByteCodeException(
+ message: String,
+ exception: Throwable
+) : Exception(message, exception)
\ No newline at end of file
diff --git a/jetifier/jetifier/processor/src/main/kotlin/com/android/tools/build/jetifier/processor/transform/proguard/ProGuardClassFilterParser.kt b/jetifier/jetifier/processor/src/main/kotlin/com/android/tools/build/jetifier/processor/transform/proguard/ProGuardClassFilterParser.kt
index 072d5ce..2fac1eb 100644
--- a/jetifier/jetifier/processor/src/main/kotlin/com/android/tools/build/jetifier/processor/transform/proguard/ProGuardClassFilterParser.kt
+++ b/jetifier/jetifier/processor/src/main/kotlin/com/android/tools/build/jetifier/processor/transform/proguard/ProGuardClassFilterParser.kt
@@ -28,13 +28,15 @@
companion object {
private const val RULES = "(adaptclassstrings|dontnote|dontwarn)"
+
+ // Allows us to match comments at the end of the line.
+ private const val COMMENT = "([ \\t]+#[^\\n]*)?"
}
val replacer = GroupsReplacer(
- pattern = PatternHelper.build("^ *-$RULES ⦅[^-]+⦆ *$", Pattern.MULTILINE),
- groupsMap = listOf(
- { filter: String -> listOf(rewriteClassFilter(filter)) }
- )
+ // As this is multiline regex, [^-#\n] prevents from selecting comments or new lines.
+ pattern = PatternHelper.build("^ *-$RULES ⦅[^-#\\n]+⦆$COMMENT$", Pattern.MULTILINE),
+ groupsMap = listOf { filter: String -> listOf(rewriteClassFilter(filter)) }
)
private fun rewriteClassFilter(classFilter: String): String {
@@ -61,7 +63,7 @@
val withoutNegation = type.substring(1, type.length)
return mapper.replaceType(withoutNegation)
- .map { '!' + it }
+ .map { "!$it" }
.toList()
}
}
\ No newline at end of file
diff --git a/jetifier/jetifier/processor/src/main/kotlin/com/android/tools/build/jetifier/processor/transform/proguard/ProGuardClassSpecParser.kt b/jetifier/jetifier/processor/src/main/kotlin/com/android/tools/build/jetifier/processor/transform/proguard/ProGuardClassSpecParser.kt
index aa5dc25..a947c8d 100644
--- a/jetifier/jetifier/processor/src/main/kotlin/com/android/tools/build/jetifier/processor/transform/proguard/ProGuardClassSpecParser.kt
+++ b/jetifier/jetifier/processor/src/main/kotlin/com/android/tools/build/jetifier/processor/transform/proguard/ProGuardClassSpecParser.kt
@@ -19,6 +19,7 @@
import com.android.tools.build.jetifier.processor.cartesianProduct
import com.android.tools.build.jetifier.processor.transform.proguard.patterns.GroupsReplacer
import com.android.tools.build.jetifier.processor.transform.proguard.patterns.PatternHelper
+import java.util.regex.Pattern
/**
* Parses and rewrites ProGuard rules that contain class specification. See ProGuard documentation
@@ -51,8 +52,9 @@
val replacer = GroupsReplacer(
pattern = PatternHelper.build(
- "-$RULES ($RULES_MODIFIERS )*(@⦅$ANNOTATION_TYPE⦆ )?($CLASS_MODIFIERS )*$CLASS_TYPES " +
- "⦅$CLASS_NAME⦆( (extends|implements) ⦅$CLASS_NAME⦆)?+ *( *\\{⦅[^}]*⦆\\} *)?+"),
+ "^ *-$RULES ($RULES_MODIFIERS )*(@⦅$ANNOTATION_TYPE⦆ )?($CLASS_MODIFIERS )" +
+ "*$CLASS_TYPES ⦅$CLASS_NAME⦆( (extends|implements) ⦅$CLASS_NAME⦆)?+ " +
+ "*( *\\{⦅[^}#]*⦆\\} *)?+", Pattern.MULTILINE),
groupsMap = listOf(
{ annotation: String -> mapper.replaceType(annotation) },
{ className: String -> mapper.replaceType(className) },
diff --git a/jetifier/jetifier/processor/src/main/kotlin/com/android/tools/build/jetifier/processor/transform/proguard/patterns/PatternHelper.kt b/jetifier/jetifier/processor/src/main/kotlin/com/android/tools/build/jetifier/processor/transform/proguard/patterns/PatternHelper.kt
index faa46ab..4c772a0 100644
--- a/jetifier/jetifier/processor/src/main/kotlin/com/android/tools/build/jetifier/processor/transform/proguard/patterns/PatternHelper.kt
+++ b/jetifier/jetifier/processor/src/main/kotlin/com/android/tools/build/jetifier/processor/transform/proguard/patterns/PatternHelper.kt
@@ -45,7 +45,11 @@
fun build(toReplace: String, flags: Int = 0): Pattern {
var result = toReplace
result = result.replace("(?<!\\\\)\\(".toRegex(), "(?:")
+ // Backup [ \\t] so other replacements don't break it.
+ result = result.replace("[ \\t]", "::whitespace::")
rewrites.forEach { result = result.replace(it.first, it.second) }
+ // Restore [ \\t]
+ result = result.replace("::whitespace::", "[ \\t]")
return Pattern.compile(result, flags)
}
}
\ No newline at end of file
diff --git a/jetifier/jetifier/processor/src/test/kotlin/com/android/tools/build/jetifier/processor/transform/bytecode/ByteCodeTransformerTest.kt b/jetifier/jetifier/processor/src/test/kotlin/com/android/tools/build/jetifier/processor/transform/bytecode/ByteCodeTransformerTest.kt
new file mode 100644
index 0000000..65ee514
--- /dev/null
+++ b/jetifier/jetifier/processor/src/test/kotlin/com/android/tools/build/jetifier/processor/transform/bytecode/ByteCodeTransformerTest.kt
@@ -0,0 +1,39 @@
+/*
+ * 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 com.android.tools.build.jetifier.processor.transform.bytecode
+
+import com.android.tools.build.jetifier.core.config.Config
+import com.android.tools.build.jetifier.processor.FileMapping
+import com.android.tools.build.jetifier.processor.Processor
+import org.junit.Test
+import java.io.File
+
+class ByteCodeTransformerTest {
+ @Test(expected = InvalidByteCodeException::class)
+ fun malformedBytecode_shouldThrowException() {
+ val processor = Processor.createProcessor3(config = Config.EMPTY)
+ processor.transform2(
+ input = setOf(
+ FileMapping(
+ File(javaClass
+ .getResource("/malformedBytecodeTest/malformedBytecodeArchive.zip").file),
+ File("test")
+ )
+ )
+ )
+ }
+}
\ No newline at end of file
diff --git a/jetifier/jetifier/processor/src/test/kotlin/com/android/tools/build/jetifier/processor/transform/proguard/ClassFilterTest.kt b/jetifier/jetifier/processor/src/test/kotlin/com/android/tools/build/jetifier/processor/transform/proguard/ClassFilterTest.kt
index 1cccdb1..1d90384 100644
--- a/jetifier/jetifier/processor/src/test/kotlin/com/android/tools/build/jetifier/processor/transform/proguard/ClassFilterTest.kt
+++ b/jetifier/jetifier/processor/src/test/kotlin/com/android/tools/build/jetifier/processor/transform/proguard/ClassFilterTest.kt
@@ -37,6 +37,23 @@
)
}
+ @Test fun proGuard_classFilter_commentAtTheEnd() {
+ ProGuardTester()
+ .forGivenPrefixes(
+ "support/"
+ )
+ .forGivenTypesMap(
+ "support/Activity" to "test/Activity",
+ "support/Fragment" to "test/Fragment"
+ )
+ .testThatGivenProGuard(
+ "-adaptclassstrings support.Activity, support.Fragment, keep.Me #support.Activity"
+ )
+ .rewritesTo(
+ "-adaptclassstrings test.Activity, test.Fragment, keep.Me #support.Activity"
+ )
+ }
+
@Test fun proGuard_classFilter_newLineIgnored() {
ProGuardTester()
.forGivenPrefixes(
@@ -51,7 +68,7 @@
" support.Activity"
)
.rewritesTo(
- "-adaptclassstrings test.Activity, test.Fragment, keep.Me \n" +
+ "-adaptclassstrings test.Activity, test.Fragment, keep.Me\n" +
" support.Activity"
)
}
diff --git a/jetifier/jetifier/processor/src/test/kotlin/com/android/tools/build/jetifier/processor/transform/proguard/ProguardSamplesTest.kt b/jetifier/jetifier/processor/src/test/kotlin/com/android/tools/build/jetifier/processor/transform/proguard/ProguardSamplesTest.kt
index ad5917d..8668fe7 100644
--- a/jetifier/jetifier/processor/src/test/kotlin/com/android/tools/build/jetifier/processor/transform/proguard/ProguardSamplesTest.kt
+++ b/jetifier/jetifier/processor/src/test/kotlin/com/android/tools/build/jetifier/processor/transform/proguard/ProguardSamplesTest.kt
@@ -272,4 +272,101 @@
"-dontwarn test.**"
)
}
+
+ @Test fun proGuard_sample6() {
+ ProGuardTester()
+ .forGivenPrefixes(
+ "support/"
+ )
+ .forGivenTypesMap(
+ "support/Activity" to "test/Activity"
+ )
+ .testThatGivenProGuard(
+ "# Comment\n" +
+ "-keep class * extends com.google.Class { *; }\n" +
+ "-dontwarn com.google.**\n" +
+ // Comment should not break the transformer
+ "# Note: comment 'com.google.android.Class\$Nested { \n" +
+ "-keep class com.google.android.Class\$*\n"
+ )
+ .rewritesTo(
+ "# Comment\n" +
+ "-keep class * extends com.google.Class { *; }\n" +
+ "-dontwarn com.google.**\n" +
+ "# Note: comment 'com.google.android.Class\$Nested { \n" +
+ "-keep class com.google.android.Class\$*\n"
+ )
+ }
+
+ @Test fun proGuard_sample7() {
+ ProGuardTester()
+ .forGivenPrefixes(
+ "support/"
+ )
+ .forGivenTypesMap(
+ "support/Activity" to "test/Activity"
+ )
+ .testThatGivenProGuard(
+ "-dontwarn support.Activity,\n" +
+ "support.Activity\n" + // New line should not be rewritten
+ "-dontwarn support.Activity\n" +
+ "support.Activity" // New line should not be rewritten
+ )
+ .rewritesTo(
+ "-dontwarn test.Activity\n" +
+ "support.Activity\n" +
+ "-dontwarn test.Activity\n" +
+ "support.Activity"
+ )
+ }
+
+ @Test fun proGuard_sample8() {
+ ProGuardTester()
+ .forGivenPrefixes(
+ "support/"
+ )
+ .forGivenTypesMap(
+ "support/Activity" to "test/Activity",
+ "support/Fragment" to "test/Fragment"
+ )
+ .testThatGivenProGuard(
+ "-keep public class * { \n" +
+ " void get(*); \n" +
+ " void get(support.Activity); \n" +
+ "# void get(support.Activity, support.Fragment, keep.Please); \n" +
+ "}"
+ )
+ .rewritesTo(
+ "-keep public class * { \n" +
+ " void get(*); \n" +
+ " void get(support.Activity); \n" +
+ "# void get(support.Activity, support.Fragment, keep.Please); \n" +
+ "}"
+ )
+ }
+
+ @Test fun proGuard_sample9() {
+ ProGuardTester()
+ .forGivenPrefixes(
+ "support/"
+ )
+ .forGivenTypesMap(
+ "support/Activity" to "test/Activity",
+ "support/Fragment" to "test/Fragment"
+ )
+ .testThatGivenProGuard(
+ "-keep public class * { \n" +
+ " void get(*); \n" +
+ " void get(#support.Activity); \n" +
+ " void get(support.Activity, support.Fragment, keep.Please); \n" +
+ "}"
+ )
+ .rewritesTo(
+ "-keep public class * { \n" +
+ " void get(*); \n" +
+ " void get(#support.Activity); \n" +
+ " void get(support.Activity, support.Fragment, keep.Please); \n" +
+ "}"
+ )
+ }
}
\ No newline at end of file
diff --git a/jetifier/jetifier/processor/src/test/resources/malformedBytecodeTest/malformedBytecodeArchive.zip b/jetifier/jetifier/processor/src/test/resources/malformedBytecodeTest/malformedBytecodeArchive.zip
new file mode 100644
index 0000000..6bdda32
--- /dev/null
+++ b/jetifier/jetifier/processor/src/test/resources/malformedBytecodeTest/malformedBytecodeArchive.zip
Binary files differ
diff --git a/jetifier/jetifier/standalone/src/main/kotlin/com/android/tools/build/jetifier/standalone/Main.kt b/jetifier/jetifier/standalone/src/main/kotlin/com/android/tools/build/jetifier/standalone/Main.kt
index 62183ca..d8cd722 100644
--- a/jetifier/jetifier/standalone/src/main/kotlin/com/android/tools/build/jetifier/standalone/Main.kt
+++ b/jetifier/jetifier/standalone/src/main/kotlin/com/android/tools/build/jetifier/standalone/Main.kt
@@ -155,7 +155,8 @@
useFallbackIfTypeIsMissing = !isStrict)
val transformationResult = processor.transform2(fileMappings)
- if (transformationResult.numberOfLibsModified == 0) {
+ val containsSingleJavaFiles = containsSingleJavaFiles(fileMappings)
+ if (!containsSingleJavaFiles && transformationResult.numberOfLibsModified == 0) {
// Jetifier is not needed here
Log.w(TAG, "No references were rewritten. You don't need to run Jetifier.")
}
@@ -167,6 +168,15 @@
}
}
+ private fun containsSingleJavaFiles(fileMappings: Set<FileMapping>): Boolean {
+ for (fileMapping in fileMappings) {
+ if (fileMapping.from.name.endsWith(".java")) {
+ return true
+ }
+ }
+ return false
+ }
+
private fun parseCmdLine(args: Array<String>): CommandLine? {
try {
return DefaultParser().parse(OPTIONS, args)
diff --git a/lifecycle/integration-tests/incrementality/build.gradle b/lifecycle/integration-tests/incrementality/build.gradle
index f85b722..8207fb4 100644
--- a/lifecycle/integration-tests/incrementality/build.gradle
+++ b/lifecycle/integration-tests/incrementality/build.gradle
@@ -64,6 +64,6 @@
tasks.findByName("compileTestKotlin").dependsOn(generateSdkResource)
// lifecycle-common and annotation are the dependencies of lifecycle-compiler
-tasks.findByPath("test").dependsOn(tasks.findByPath(":lifecycle:lifecycle-compiler:uploadArchives"),
- tasks.findByPath(":lifecycle:lifecycle-common:uploadArchives"),
- tasks.findByPath(":annotation:annotation:uploadArchives"))
+tasks.findByPath("test").dependsOn(tasks.findByPath(":lifecycle:lifecycle-compiler:publish"),
+ tasks.findByPath(":lifecycle:lifecycle-common:publish"),
+ tasks.findByPath(":annotation:annotation:publish"))
diff --git a/media/api/1.2.0-alpha02.ignore b/media/api/1.2.0-alpha02.ignore
new file mode 100644
index 0000000..de0edac
--- /dev/null
+++ b/media/api/1.2.0-alpha02.ignore
@@ -0,0 +1,3 @@
+// Baseline format: 1.0
+ChangedThrows: android.support.v4.media.session.MediaControllerCompat#MediaControllerCompat(android.content.Context, android.support.v4.media.session.MediaSessionCompat.Token):
+ Constructor android.support.v4.media.session.MediaControllerCompat no longer throws exception android.os.RemoteException
diff --git a/media/api/1.2.0-alpha02.txt b/media/api/1.2.0-alpha02.txt
new file mode 100644
index 0000000..9bf6f01
--- /dev/null
+++ b/media/api/1.2.0-alpha02.txt
@@ -0,0 +1,706 @@
+// Signature format: 3.0
+package android.support.v4.media {
+
+ public final class MediaBrowserCompat {
+ ctor public MediaBrowserCompat(android.content.Context!, android.content.ComponentName!, android.support.v4.media.MediaBrowserCompat.ConnectionCallback!, android.os.Bundle!);
+ method public void connect();
+ method public void disconnect();
+ method public android.os.Bundle? getExtras();
+ method public void getItem(String, android.support.v4.media.MediaBrowserCompat.ItemCallback);
+ method public String getRoot();
+ method public android.content.ComponentName getServiceComponent();
+ method public android.support.v4.media.session.MediaSessionCompat.Token getSessionToken();
+ method public boolean isConnected();
+ method public void search(String, android.os.Bundle!, android.support.v4.media.MediaBrowserCompat.SearchCallback);
+ method public void sendCustomAction(String, android.os.Bundle!, android.support.v4.media.MediaBrowserCompat.CustomActionCallback?);
+ method public void subscribe(String, android.support.v4.media.MediaBrowserCompat.SubscriptionCallback);
+ method public void subscribe(String, android.os.Bundle, android.support.v4.media.MediaBrowserCompat.SubscriptionCallback);
+ method public void unsubscribe(String);
+ method public void unsubscribe(String, android.support.v4.media.MediaBrowserCompat.SubscriptionCallback);
+ field public static final String CUSTOM_ACTION_DOWNLOAD = "android.support.v4.media.action.DOWNLOAD";
+ field public static final String CUSTOM_ACTION_REMOVE_DOWNLOADED_FILE = "android.support.v4.media.action.REMOVE_DOWNLOADED_FILE";
+ field public static final String EXTRA_DOWNLOAD_PROGRESS = "android.media.browse.extra.DOWNLOAD_PROGRESS";
+ field public static final String EXTRA_MEDIA_ID = "android.media.browse.extra.MEDIA_ID";
+ field public static final String EXTRA_PAGE = "android.media.browse.extra.PAGE";
+ field public static final String EXTRA_PAGE_SIZE = "android.media.browse.extra.PAGE_SIZE";
+ }
+
+ public static class MediaBrowserCompat.ConnectionCallback {
+ ctor public MediaBrowserCompat.ConnectionCallback();
+ method public void onConnected();
+ method public void onConnectionFailed();
+ method public void onConnectionSuspended();
+ }
+
+ public abstract static class MediaBrowserCompat.CustomActionCallback {
+ ctor public MediaBrowserCompat.CustomActionCallback();
+ method public void onError(String!, android.os.Bundle!, android.os.Bundle!);
+ method public void onProgressUpdate(String!, android.os.Bundle!, android.os.Bundle!);
+ method public void onResult(String!, android.os.Bundle!, android.os.Bundle!);
+ }
+
+ public abstract static class MediaBrowserCompat.ItemCallback {
+ ctor public MediaBrowserCompat.ItemCallback();
+ method public void onError(String);
+ method public void onItemLoaded(android.support.v4.media.MediaBrowserCompat.MediaItem!);
+ }
+
+ public static class MediaBrowserCompat.MediaItem implements android.os.Parcelable {
+ ctor public MediaBrowserCompat.MediaItem(android.support.v4.media.MediaDescriptionCompat, int);
+ method public int describeContents();
+ method public static android.support.v4.media.MediaBrowserCompat.MediaItem! fromMediaItem(Object!);
+ method public static java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem!>! fromMediaItemList(java.util.List<?>!);
+ method public android.support.v4.media.MediaDescriptionCompat getDescription();
+ method public int getFlags();
+ method public String? getMediaId();
+ method public boolean isBrowsable();
+ method public boolean isPlayable();
+ method public void writeToParcel(android.os.Parcel!, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.MediaBrowserCompat.MediaItem!>! CREATOR;
+ field public static final int FLAG_BROWSABLE = 1; // 0x1
+ field public static final int FLAG_PLAYABLE = 2; // 0x2
+ }
+
+ public abstract static class MediaBrowserCompat.SearchCallback {
+ ctor public MediaBrowserCompat.SearchCallback();
+ method public void onError(String, android.os.Bundle!);
+ method public void onSearchResult(String, android.os.Bundle!, java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem!>);
+ }
+
+ public abstract static class MediaBrowserCompat.SubscriptionCallback {
+ ctor public MediaBrowserCompat.SubscriptionCallback();
+ method public void onChildrenLoaded(String, java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem!>);
+ method public void onChildrenLoaded(String, java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem!>, android.os.Bundle);
+ method public void onError(String);
+ method public void onError(String, android.os.Bundle);
+ }
+
+ public final class MediaDescriptionCompat implements android.os.Parcelable {
+ method public int describeContents();
+ method public static android.support.v4.media.MediaDescriptionCompat! fromMediaDescription(Object!);
+ method public CharSequence? getDescription();
+ method public android.os.Bundle? getExtras();
+ method public android.graphics.Bitmap? getIconBitmap();
+ method public android.net.Uri? getIconUri();
+ method public Object! getMediaDescription();
+ method public String? getMediaId();
+ method public android.net.Uri? getMediaUri();
+ method public CharSequence? getSubtitle();
+ method public CharSequence? getTitle();
+ method public void writeToParcel(android.os.Parcel!, int);
+ field public static final long BT_FOLDER_TYPE_ALBUMS = 2L; // 0x2L
+ field public static final long BT_FOLDER_TYPE_ARTISTS = 3L; // 0x3L
+ field public static final long BT_FOLDER_TYPE_GENRES = 4L; // 0x4L
+ field public static final long BT_FOLDER_TYPE_MIXED = 0L; // 0x0L
+ field public static final long BT_FOLDER_TYPE_PLAYLISTS = 5L; // 0x5L
+ field public static final long BT_FOLDER_TYPE_TITLES = 1L; // 0x1L
+ field public static final long BT_FOLDER_TYPE_YEARS = 6L; // 0x6L
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.MediaDescriptionCompat!>! CREATOR;
+ field public static final String EXTRA_BT_FOLDER_TYPE = "android.media.extra.BT_FOLDER_TYPE";
+ field public static final String EXTRA_DOWNLOAD_STATUS = "android.media.extra.DOWNLOAD_STATUS";
+ field public static final long STATUS_DOWNLOADED = 2L; // 0x2L
+ field public static final long STATUS_DOWNLOADING = 1L; // 0x1L
+ field public static final long STATUS_NOT_DOWNLOADED = 0L; // 0x0L
+ }
+
+ public static final class MediaDescriptionCompat.Builder {
+ ctor public MediaDescriptionCompat.Builder();
+ method public android.support.v4.media.MediaDescriptionCompat! build();
+ method public android.support.v4.media.MediaDescriptionCompat.Builder! setDescription(CharSequence?);
+ method public android.support.v4.media.MediaDescriptionCompat.Builder! setExtras(android.os.Bundle?);
+ method public android.support.v4.media.MediaDescriptionCompat.Builder! setIconBitmap(android.graphics.Bitmap?);
+ method public android.support.v4.media.MediaDescriptionCompat.Builder! setIconUri(android.net.Uri?);
+ method public android.support.v4.media.MediaDescriptionCompat.Builder! setMediaId(String?);
+ method public android.support.v4.media.MediaDescriptionCompat.Builder! setMediaUri(android.net.Uri?);
+ method public android.support.v4.media.MediaDescriptionCompat.Builder! setSubtitle(CharSequence?);
+ method public android.support.v4.media.MediaDescriptionCompat.Builder! setTitle(CharSequence?);
+ }
+
+ public final class MediaMetadataCompat implements android.os.Parcelable {
+ method public boolean containsKey(String!);
+ method public int describeContents();
+ method public static android.support.v4.media.MediaMetadataCompat! fromMediaMetadata(Object!);
+ method public android.graphics.Bitmap! getBitmap(String!);
+ method public android.os.Bundle! getBundle();
+ method public android.support.v4.media.MediaDescriptionCompat! getDescription();
+ method public long getLong(String!);
+ method public Object! getMediaMetadata();
+ method public android.support.v4.media.RatingCompat! getRating(String!);
+ method public String! getString(String!);
+ method public CharSequence! getText(String!);
+ method public java.util.Set<java.lang.String!>! keySet();
+ method public int size();
+ method public void writeToParcel(android.os.Parcel!, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.MediaMetadataCompat!>! CREATOR;
+ field public static final String METADATA_KEY_ADVERTISEMENT = "android.media.metadata.ADVERTISEMENT";
+ field public static final String METADATA_KEY_ALBUM = "android.media.metadata.ALBUM";
+ field public static final String METADATA_KEY_ALBUM_ART = "android.media.metadata.ALBUM_ART";
+ field public static final String METADATA_KEY_ALBUM_ARTIST = "android.media.metadata.ALBUM_ARTIST";
+ field public static final String METADATA_KEY_ALBUM_ART_URI = "android.media.metadata.ALBUM_ART_URI";
+ field public static final String METADATA_KEY_ART = "android.media.metadata.ART";
+ field public static final String METADATA_KEY_ARTIST = "android.media.metadata.ARTIST";
+ field public static final String METADATA_KEY_ART_URI = "android.media.metadata.ART_URI";
+ field public static final String METADATA_KEY_AUTHOR = "android.media.metadata.AUTHOR";
+ field public static final String METADATA_KEY_BT_FOLDER_TYPE = "android.media.metadata.BT_FOLDER_TYPE";
+ field public static final String METADATA_KEY_COMPILATION = "android.media.metadata.COMPILATION";
+ field public static final String METADATA_KEY_COMPOSER = "android.media.metadata.COMPOSER";
+ field public static final String METADATA_KEY_DATE = "android.media.metadata.DATE";
+ field public static final String METADATA_KEY_DISC_NUMBER = "android.media.metadata.DISC_NUMBER";
+ field public static final String METADATA_KEY_DISPLAY_DESCRIPTION = "android.media.metadata.DISPLAY_DESCRIPTION";
+ field public static final String METADATA_KEY_DISPLAY_ICON = "android.media.metadata.DISPLAY_ICON";
+ field public static final String METADATA_KEY_DISPLAY_ICON_URI = "android.media.metadata.DISPLAY_ICON_URI";
+ field public static final String METADATA_KEY_DISPLAY_SUBTITLE = "android.media.metadata.DISPLAY_SUBTITLE";
+ field public static final String METADATA_KEY_DISPLAY_TITLE = "android.media.metadata.DISPLAY_TITLE";
+ field public static final String METADATA_KEY_DOWNLOAD_STATUS = "android.media.metadata.DOWNLOAD_STATUS";
+ field public static final String METADATA_KEY_DURATION = "android.media.metadata.DURATION";
+ field public static final String METADATA_KEY_GENRE = "android.media.metadata.GENRE";
+ field public static final String METADATA_KEY_MEDIA_ID = "android.media.metadata.MEDIA_ID";
+ field public static final String METADATA_KEY_MEDIA_URI = "android.media.metadata.MEDIA_URI";
+ field public static final String METADATA_KEY_NUM_TRACKS = "android.media.metadata.NUM_TRACKS";
+ field public static final String METADATA_KEY_RATING = "android.media.metadata.RATING";
+ field public static final String METADATA_KEY_TITLE = "android.media.metadata.TITLE";
+ field public static final String METADATA_KEY_TRACK_NUMBER = "android.media.metadata.TRACK_NUMBER";
+ field public static final String METADATA_KEY_USER_RATING = "android.media.metadata.USER_RATING";
+ field public static final String METADATA_KEY_WRITER = "android.media.metadata.WRITER";
+ field public static final String METADATA_KEY_YEAR = "android.media.metadata.YEAR";
+ }
+
+ public static final class MediaMetadataCompat.Builder {
+ ctor public MediaMetadataCompat.Builder();
+ ctor public MediaMetadataCompat.Builder(android.support.v4.media.MediaMetadataCompat!);
+ method public android.support.v4.media.MediaMetadataCompat! build();
+ method public android.support.v4.media.MediaMetadataCompat.Builder! putBitmap(String!, android.graphics.Bitmap!);
+ method public android.support.v4.media.MediaMetadataCompat.Builder! putLong(String!, long);
+ method public android.support.v4.media.MediaMetadataCompat.Builder! putRating(String!, android.support.v4.media.RatingCompat!);
+ method public android.support.v4.media.MediaMetadataCompat.Builder! putString(String!, String!);
+ method public android.support.v4.media.MediaMetadataCompat.Builder! putText(String!, CharSequence!);
+ }
+
+ public final class RatingCompat implements android.os.Parcelable {
+ method public int describeContents();
+ method public static android.support.v4.media.RatingCompat! fromRating(Object!);
+ method public float getPercentRating();
+ method public Object! getRating();
+ method public int getRatingStyle();
+ method public float getStarRating();
+ method public boolean hasHeart();
+ method public boolean isRated();
+ method public boolean isThumbUp();
+ method public static android.support.v4.media.RatingCompat! newHeartRating(boolean);
+ method public static android.support.v4.media.RatingCompat! newPercentageRating(float);
+ method public static android.support.v4.media.RatingCompat! newStarRating(int, float);
+ method public static android.support.v4.media.RatingCompat! newThumbRating(boolean);
+ method public static android.support.v4.media.RatingCompat! newUnratedRating(int);
+ method public void writeToParcel(android.os.Parcel!, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.RatingCompat!>! CREATOR;
+ field public static final int RATING_3_STARS = 3; // 0x3
+ field public static final int RATING_4_STARS = 4; // 0x4
+ field public static final int RATING_5_STARS = 5; // 0x5
+ field public static final int RATING_HEART = 1; // 0x1
+ field public static final int RATING_NONE = 0; // 0x0
+ field public static final int RATING_PERCENTAGE = 6; // 0x6
+ field public static final int RATING_THUMB_UP_DOWN = 2; // 0x2
+ }
+
+}
+
+package android.support.v4.media.session {
+
+ public final class MediaControllerCompat {
+ ctor public MediaControllerCompat(android.content.Context!, android.support.v4.media.session.MediaSessionCompat);
+ ctor public MediaControllerCompat(android.content.Context!, android.support.v4.media.session.MediaSessionCompat.Token);
+ method public void addQueueItem(android.support.v4.media.MediaDescriptionCompat!);
+ method public void addQueueItem(android.support.v4.media.MediaDescriptionCompat!, int);
+ method public void adjustVolume(int, int);
+ method public boolean dispatchMediaButtonEvent(android.view.KeyEvent!);
+ method public android.os.Bundle! getExtras();
+ method public long getFlags();
+ method public static android.support.v4.media.session.MediaControllerCompat! getMediaController(android.app.Activity);
+ method public Object! getMediaController();
+ method public android.support.v4.media.MediaMetadataCompat! getMetadata();
+ method public String! getPackageName();
+ method public android.support.v4.media.session.MediaControllerCompat.PlaybackInfo! getPlaybackInfo();
+ method public android.support.v4.media.session.PlaybackStateCompat! getPlaybackState();
+ method public java.util.List<android.support.v4.media.session.MediaSessionCompat.QueueItem!>! getQueue();
+ method public CharSequence! getQueueTitle();
+ method public int getRatingType();
+ method public int getRepeatMode();
+ method public android.app.PendingIntent! getSessionActivity();
+ method public android.os.Bundle getSessionInfo();
+ method public android.support.v4.media.session.MediaSessionCompat.Token! getSessionToken();
+ method public int getShuffleMode();
+ method public android.support.v4.media.session.MediaControllerCompat.TransportControls! getTransportControls();
+ method public boolean isCaptioningEnabled();
+ method public boolean isSessionReady();
+ method public void registerCallback(android.support.v4.media.session.MediaControllerCompat.Callback);
+ method public void registerCallback(android.support.v4.media.session.MediaControllerCompat.Callback, android.os.Handler!);
+ method public void removeQueueItem(android.support.v4.media.MediaDescriptionCompat!);
+ method @Deprecated public void removeQueueItemAt(int);
+ method public void sendCommand(String, android.os.Bundle?, android.os.ResultReceiver?);
+ method public static void setMediaController(android.app.Activity, android.support.v4.media.session.MediaControllerCompat!);
+ method public void setVolumeTo(int, int);
+ method public void unregisterCallback(android.support.v4.media.session.MediaControllerCompat.Callback);
+ }
+
+ public abstract static class MediaControllerCompat.Callback implements android.os.IBinder.DeathRecipient {
+ ctor public MediaControllerCompat.Callback();
+ method public void binderDied();
+ method public void onAudioInfoChanged(android.support.v4.media.session.MediaControllerCompat.PlaybackInfo!);
+ method public void onCaptioningEnabledChanged(boolean);
+ method public void onExtrasChanged(android.os.Bundle!);
+ method public void onMetadataChanged(android.support.v4.media.MediaMetadataCompat!);
+ method public void onPlaybackStateChanged(android.support.v4.media.session.PlaybackStateCompat!);
+ method public void onQueueChanged(java.util.List<android.support.v4.media.session.MediaSessionCompat.QueueItem!>!);
+ method public void onQueueTitleChanged(CharSequence!);
+ method public void onRepeatModeChanged(int);
+ method public void onSessionDestroyed();
+ method public void onSessionEvent(String!, android.os.Bundle!);
+ method public void onSessionReady();
+ method public void onShuffleModeChanged(int);
+ }
+
+ public static final class MediaControllerCompat.PlaybackInfo {
+ method public androidx.media.AudioAttributesCompat getAudioAttributes();
+ method @Deprecated public int getAudioStream();
+ method public int getCurrentVolume();
+ method public int getMaxVolume();
+ method public int getPlaybackType();
+ method public int getVolumeControl();
+ field public static final int PLAYBACK_TYPE_LOCAL = 1; // 0x1
+ field public static final int PLAYBACK_TYPE_REMOTE = 2; // 0x2
+ }
+
+ public abstract static class MediaControllerCompat.TransportControls {
+ method public abstract void fastForward();
+ method public abstract void pause();
+ method public abstract void play();
+ method public abstract void playFromMediaId(String!, android.os.Bundle!);
+ method public abstract void playFromSearch(String!, android.os.Bundle!);
+ method public abstract void playFromUri(android.net.Uri!, android.os.Bundle!);
+ method public abstract void prepare();
+ method public abstract void prepareFromMediaId(String!, android.os.Bundle!);
+ method public abstract void prepareFromSearch(String!, android.os.Bundle!);
+ method public abstract void prepareFromUri(android.net.Uri!, android.os.Bundle!);
+ method public abstract void rewind();
+ method public abstract void seekTo(long);
+ method public abstract void sendCustomAction(android.support.v4.media.session.PlaybackStateCompat.CustomAction!, android.os.Bundle!);
+ method public abstract void sendCustomAction(String!, android.os.Bundle!);
+ method public abstract void setCaptioningEnabled(boolean);
+ method public void setPlaybackSpeed(float);
+ method public abstract void setRating(android.support.v4.media.RatingCompat!);
+ method public abstract void setRating(android.support.v4.media.RatingCompat!, android.os.Bundle!);
+ method public abstract void setRepeatMode(int);
+ method public abstract void setShuffleMode(int);
+ method public abstract void skipToNext();
+ method public abstract void skipToPrevious();
+ method public abstract void skipToQueueItem(long);
+ method public abstract void stop();
+ field public static final String EXTRA_LEGACY_STREAM_TYPE = "android.media.session.extra.LEGACY_STREAM_TYPE";
+ }
+
+ public class MediaSessionCompat {
+ ctor public MediaSessionCompat(android.content.Context, String);
+ ctor public MediaSessionCompat(android.content.Context, String, android.content.ComponentName?, android.app.PendingIntent?);
+ ctor public MediaSessionCompat(android.content.Context, String, android.content.ComponentName?, android.app.PendingIntent?, android.os.Bundle?);
+ method public void addOnActiveChangeListener(android.support.v4.media.session.MediaSessionCompat.OnActiveChangeListener!);
+ method public static android.support.v4.media.session.MediaSessionCompat! fromMediaSession(android.content.Context!, Object!);
+ method public android.support.v4.media.session.MediaControllerCompat! getController();
+ method public final androidx.media.MediaSessionManager.RemoteUserInfo getCurrentControllerInfo();
+ method public Object! getMediaSession();
+ method public Object! getRemoteControlClient();
+ method public android.support.v4.media.session.MediaSessionCompat.Token! getSessionToken();
+ method public boolean isActive();
+ method public void release();
+ method public void removeOnActiveChangeListener(android.support.v4.media.session.MediaSessionCompat.OnActiveChangeListener!);
+ method public void sendSessionEvent(String!, android.os.Bundle!);
+ method public void setActive(boolean);
+ method public void setCallback(android.support.v4.media.session.MediaSessionCompat.Callback!);
+ method public void setCallback(android.support.v4.media.session.MediaSessionCompat.Callback!, android.os.Handler!);
+ method public void setCaptioningEnabled(boolean);
+ method public void setExtras(android.os.Bundle!);
+ method public void setFlags(int);
+ method public void setMediaButtonReceiver(android.app.PendingIntent!);
+ method public void setMetadata(android.support.v4.media.MediaMetadataCompat!);
+ method public void setPlaybackState(android.support.v4.media.session.PlaybackStateCompat!);
+ method public void setPlaybackToLocal(int);
+ method public void setPlaybackToRemote(androidx.media.VolumeProviderCompat!);
+ method public void setQueue(java.util.List<android.support.v4.media.session.MediaSessionCompat.QueueItem!>!);
+ method public void setQueueTitle(CharSequence!);
+ method public void setRatingType(int);
+ method public void setRepeatMode(int);
+ method public void setSessionActivity(android.app.PendingIntent!);
+ method public void setShuffleMode(int);
+ field public static final String ACTION_FLAG_AS_INAPPROPRIATE = "android.support.v4.media.session.action.FLAG_AS_INAPPROPRIATE";
+ field public static final String ACTION_FOLLOW = "android.support.v4.media.session.action.FOLLOW";
+ field public static final String ACTION_SKIP_AD = "android.support.v4.media.session.action.SKIP_AD";
+ field public static final String ACTION_UNFOLLOW = "android.support.v4.media.session.action.UNFOLLOW";
+ field public static final String ARGUMENT_MEDIA_ATTRIBUTE = "android.support.v4.media.session.ARGUMENT_MEDIA_ATTRIBUTE";
+ field public static final String ARGUMENT_MEDIA_ATTRIBUTE_VALUE = "android.support.v4.media.session.ARGUMENT_MEDIA_ATTRIBUTE_VALUE";
+ field @Deprecated public static final int FLAG_HANDLES_MEDIA_BUTTONS = 1; // 0x1
+ field public static final int FLAG_HANDLES_QUEUE_COMMANDS = 4; // 0x4
+ field @Deprecated public static final int FLAG_HANDLES_TRANSPORT_CONTROLS = 2; // 0x2
+ field public static final int MEDIA_ATTRIBUTE_ALBUM = 1; // 0x1
+ field public static final int MEDIA_ATTRIBUTE_ARTIST = 0; // 0x0
+ field public static final int MEDIA_ATTRIBUTE_PLAYLIST = 2; // 0x2
+ }
+
+ public abstract static class MediaSessionCompat.Callback {
+ ctor public MediaSessionCompat.Callback();
+ method public void onAddQueueItem(android.support.v4.media.MediaDescriptionCompat!);
+ method public void onAddQueueItem(android.support.v4.media.MediaDescriptionCompat!, int);
+ method public void onCommand(String!, android.os.Bundle!, android.os.ResultReceiver!);
+ method public void onCustomAction(String!, android.os.Bundle!);
+ method public void onFastForward();
+ method public boolean onMediaButtonEvent(android.content.Intent!);
+ method public void onPause();
+ method public void onPlay();
+ method public void onPlayFromMediaId(String!, android.os.Bundle!);
+ method public void onPlayFromSearch(String!, android.os.Bundle!);
+ method public void onPlayFromUri(android.net.Uri!, android.os.Bundle!);
+ method public void onPrepare();
+ method public void onPrepareFromMediaId(String!, android.os.Bundle!);
+ method public void onPrepareFromSearch(String!, android.os.Bundle!);
+ method public void onPrepareFromUri(android.net.Uri!, android.os.Bundle!);
+ method public void onRemoveQueueItem(android.support.v4.media.MediaDescriptionCompat!);
+ method @Deprecated public void onRemoveQueueItemAt(int);
+ method public void onRewind();
+ method public void onSeekTo(long);
+ method public void onSetCaptioningEnabled(boolean);
+ method public void onSetPlaybackSpeed(float);
+ method public void onSetRating(android.support.v4.media.RatingCompat!);
+ method public void onSetRating(android.support.v4.media.RatingCompat!, android.os.Bundle!);
+ method public void onSetRepeatMode(int);
+ method public void onSetShuffleMode(int);
+ method public void onSkipToNext();
+ method public void onSkipToPrevious();
+ method public void onSkipToQueueItem(long);
+ method public void onStop();
+ }
+
+ public static interface MediaSessionCompat.OnActiveChangeListener {
+ method public void onActiveChanged();
+ }
+
+ public static final class MediaSessionCompat.QueueItem implements android.os.Parcelable {
+ ctor public MediaSessionCompat.QueueItem(android.support.v4.media.MediaDescriptionCompat!, long);
+ method public int describeContents();
+ method public static android.support.v4.media.session.MediaSessionCompat.QueueItem! fromQueueItem(Object!);
+ method public static java.util.List<android.support.v4.media.session.MediaSessionCompat.QueueItem!>! fromQueueItemList(java.util.List<?>!);
+ method public android.support.v4.media.MediaDescriptionCompat! getDescription();
+ method public long getQueueId();
+ method public Object! getQueueItem();
+ method public void writeToParcel(android.os.Parcel!, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.session.MediaSessionCompat.QueueItem!>! CREATOR;
+ field public static final int UNKNOWN_ID = -1; // 0xffffffff
+ }
+
+ public static final class MediaSessionCompat.Token implements android.os.Parcelable {
+ method public int describeContents();
+ method public static android.support.v4.media.session.MediaSessionCompat.Token! fromToken(Object!);
+ method public Object! getToken();
+ method public void writeToParcel(android.os.Parcel!, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.session.MediaSessionCompat.Token!>! CREATOR;
+ }
+
+ public class ParcelableVolumeInfo implements android.os.Parcelable {
+ ctor public ParcelableVolumeInfo(int, int, int, int, int);
+ ctor public ParcelableVolumeInfo(android.os.Parcel!);
+ method public int describeContents();
+ method public void writeToParcel(android.os.Parcel!, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.session.ParcelableVolumeInfo!>! CREATOR;
+ field public int audioStream;
+ field public int controlType;
+ field public int currentVolume;
+ field public int maxVolume;
+ field public int volumeType;
+ }
+
+ public final class PlaybackStateCompat implements android.os.Parcelable {
+ method public int describeContents();
+ method public static android.support.v4.media.session.PlaybackStateCompat! fromPlaybackState(Object!);
+ method public long getActions();
+ method public long getActiveQueueItemId();
+ method public long getBufferedPosition();
+ method public java.util.List<android.support.v4.media.session.PlaybackStateCompat.CustomAction!>! getCustomActions();
+ method public int getErrorCode();
+ method public CharSequence! getErrorMessage();
+ method public android.os.Bundle? getExtras();
+ method public long getLastPositionUpdateTime();
+ method public float getPlaybackSpeed();
+ method public Object! getPlaybackState();
+ method public long getPosition();
+ method public int getState();
+ method public static int toKeyCode(long);
+ method public void writeToParcel(android.os.Parcel!, int);
+ field public static final long ACTION_FAST_FORWARD = 64L; // 0x40L
+ field public static final long ACTION_PAUSE = 2L; // 0x2L
+ field public static final long ACTION_PLAY = 4L; // 0x4L
+ field public static final long ACTION_PLAY_FROM_MEDIA_ID = 1024L; // 0x400L
+ field public static final long ACTION_PLAY_FROM_SEARCH = 2048L; // 0x800L
+ field public static final long ACTION_PLAY_FROM_URI = 8192L; // 0x2000L
+ field public static final long ACTION_PLAY_PAUSE = 512L; // 0x200L
+ field public static final long ACTION_PREPARE = 16384L; // 0x4000L
+ field public static final long ACTION_PREPARE_FROM_MEDIA_ID = 32768L; // 0x8000L
+ field public static final long ACTION_PREPARE_FROM_SEARCH = 65536L; // 0x10000L
+ field public static final long ACTION_PREPARE_FROM_URI = 131072L; // 0x20000L
+ field public static final long ACTION_REWIND = 8L; // 0x8L
+ field public static final long ACTION_SEEK_TO = 256L; // 0x100L
+ field public static final long ACTION_SET_CAPTIONING_ENABLED = 1048576L; // 0x100000L
+ field public static final long ACTION_SET_RATING = 128L; // 0x80L
+ field public static final long ACTION_SET_REPEAT_MODE = 262144L; // 0x40000L
+ field public static final long ACTION_SET_SHUFFLE_MODE = 2097152L; // 0x200000L
+ field @Deprecated public static final long ACTION_SET_SHUFFLE_MODE_ENABLED = 524288L; // 0x80000L
+ field public static final long ACTION_SKIP_TO_NEXT = 32L; // 0x20L
+ field public static final long ACTION_SKIP_TO_PREVIOUS = 16L; // 0x10L
+ field public static final long ACTION_SKIP_TO_QUEUE_ITEM = 4096L; // 0x1000L
+ field public static final long ACTION_STOP = 1L; // 0x1L
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.session.PlaybackStateCompat!>! CREATOR;
+ field public static final int ERROR_CODE_ACTION_ABORTED = 10; // 0xa
+ field public static final int ERROR_CODE_APP_ERROR = 1; // 0x1
+ field public static final int ERROR_CODE_AUTHENTICATION_EXPIRED = 3; // 0x3
+ field public static final int ERROR_CODE_CONCURRENT_STREAM_LIMIT = 5; // 0x5
+ field public static final int ERROR_CODE_CONTENT_ALREADY_PLAYING = 8; // 0x8
+ field public static final int ERROR_CODE_END_OF_QUEUE = 11; // 0xb
+ field public static final int ERROR_CODE_NOT_AVAILABLE_IN_REGION = 7; // 0x7
+ field public static final int ERROR_CODE_NOT_SUPPORTED = 2; // 0x2
+ field public static final int ERROR_CODE_PARENTAL_CONTROL_RESTRICTED = 6; // 0x6
+ field public static final int ERROR_CODE_PREMIUM_ACCOUNT_REQUIRED = 4; // 0x4
+ field public static final int ERROR_CODE_SKIP_LIMIT_REACHED = 9; // 0x9
+ field public static final int ERROR_CODE_UNKNOWN_ERROR = 0; // 0x0
+ field public static final long PLAYBACK_POSITION_UNKNOWN = -1L; // 0xffffffffffffffffL
+ field public static final int REPEAT_MODE_ALL = 2; // 0x2
+ field public static final int REPEAT_MODE_GROUP = 3; // 0x3
+ field public static final int REPEAT_MODE_INVALID = -1; // 0xffffffff
+ field public static final int REPEAT_MODE_NONE = 0; // 0x0
+ field public static final int REPEAT_MODE_ONE = 1; // 0x1
+ field public static final int SHUFFLE_MODE_ALL = 1; // 0x1
+ field public static final int SHUFFLE_MODE_GROUP = 2; // 0x2
+ field public static final int SHUFFLE_MODE_INVALID = -1; // 0xffffffff
+ field public static final int SHUFFLE_MODE_NONE = 0; // 0x0
+ field public static final int STATE_BUFFERING = 6; // 0x6
+ field public static final int STATE_CONNECTING = 8; // 0x8
+ field public static final int STATE_ERROR = 7; // 0x7
+ field public static final int STATE_FAST_FORWARDING = 4; // 0x4
+ field public static final int STATE_NONE = 0; // 0x0
+ field public static final int STATE_PAUSED = 2; // 0x2
+ field public static final int STATE_PLAYING = 3; // 0x3
+ field public static final int STATE_REWINDING = 5; // 0x5
+ field public static final int STATE_SKIPPING_TO_NEXT = 10; // 0xa
+ field public static final int STATE_SKIPPING_TO_PREVIOUS = 9; // 0x9
+ field public static final int STATE_SKIPPING_TO_QUEUE_ITEM = 11; // 0xb
+ field public static final int STATE_STOPPED = 1; // 0x1
+ }
+
+ public static final class PlaybackStateCompat.Builder {
+ ctor public PlaybackStateCompat.Builder();
+ ctor public PlaybackStateCompat.Builder(android.support.v4.media.session.PlaybackStateCompat!);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder! addCustomAction(String!, String!, int);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder! addCustomAction(android.support.v4.media.session.PlaybackStateCompat.CustomAction!);
+ method public android.support.v4.media.session.PlaybackStateCompat! build();
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder! setActions(long);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder! setActiveQueueItemId(long);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder! setBufferedPosition(long);
+ method @Deprecated public android.support.v4.media.session.PlaybackStateCompat.Builder! setErrorMessage(CharSequence!);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder! setErrorMessage(int, CharSequence!);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder! setExtras(android.os.Bundle!);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder! setState(int, long, float);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder! setState(int, long, float, long);
+ }
+
+ public static final class PlaybackStateCompat.CustomAction implements android.os.Parcelable {
+ method public int describeContents();
+ method public static android.support.v4.media.session.PlaybackStateCompat.CustomAction! fromCustomAction(Object!);
+ method public String! getAction();
+ method public Object! getCustomAction();
+ method public android.os.Bundle! getExtras();
+ method public int getIcon();
+ method public CharSequence! getName();
+ method public void writeToParcel(android.os.Parcel!, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.session.PlaybackStateCompat.CustomAction!>! CREATOR;
+ }
+
+ public static final class PlaybackStateCompat.CustomAction.Builder {
+ ctor public PlaybackStateCompat.CustomAction.Builder(String!, CharSequence!, int);
+ method public android.support.v4.media.session.PlaybackStateCompat.CustomAction! build();
+ method public android.support.v4.media.session.PlaybackStateCompat.CustomAction.Builder! setExtras(android.os.Bundle!);
+ }
+
+}
+
+package androidx.media {
+
+ public class AudioAttributesCompat implements androidx.versionedparcelable.VersionedParcelable {
+ method public int getContentType();
+ method public int getFlags();
+ method public int getLegacyStreamType();
+ method public int getUsage();
+ method public int getVolumeControlStream();
+ method public Object? unwrap();
+ method public static androidx.media.AudioAttributesCompat? wrap(Object);
+ field public static final int CONTENT_TYPE_MOVIE = 3; // 0x3
+ field public static final int CONTENT_TYPE_MUSIC = 2; // 0x2
+ field public static final int CONTENT_TYPE_SONIFICATION = 4; // 0x4
+ field public static final int CONTENT_TYPE_SPEECH = 1; // 0x1
+ field public static final int CONTENT_TYPE_UNKNOWN = 0; // 0x0
+ field public static final int FLAG_AUDIBILITY_ENFORCED = 1; // 0x1
+ field public static final int FLAG_HW_AV_SYNC = 16; // 0x10
+ field public static final int USAGE_ALARM = 4; // 0x4
+ field public static final int USAGE_ASSISTANCE_ACCESSIBILITY = 11; // 0xb
+ field public static final int USAGE_ASSISTANCE_NAVIGATION_GUIDANCE = 12; // 0xc
+ field public static final int USAGE_ASSISTANCE_SONIFICATION = 13; // 0xd
+ field public static final int USAGE_ASSISTANT = 16; // 0x10
+ field public static final int USAGE_GAME = 14; // 0xe
+ field public static final int USAGE_MEDIA = 1; // 0x1
+ field public static final int USAGE_NOTIFICATION = 5; // 0x5
+ field public static final int USAGE_NOTIFICATION_COMMUNICATION_DELAYED = 9; // 0x9
+ field public static final int USAGE_NOTIFICATION_COMMUNICATION_INSTANT = 8; // 0x8
+ field public static final int USAGE_NOTIFICATION_COMMUNICATION_REQUEST = 7; // 0x7
+ field public static final int USAGE_NOTIFICATION_EVENT = 10; // 0xa
+ field public static final int USAGE_NOTIFICATION_RINGTONE = 6; // 0x6
+ field public static final int USAGE_UNKNOWN = 0; // 0x0
+ field public static final int USAGE_VOICE_COMMUNICATION = 2; // 0x2
+ field public static final int USAGE_VOICE_COMMUNICATION_SIGNALLING = 3; // 0x3
+ }
+
+ public static class AudioAttributesCompat.Builder {
+ ctor public AudioAttributesCompat.Builder();
+ ctor public AudioAttributesCompat.Builder(androidx.media.AudioAttributesCompat!);
+ method public androidx.media.AudioAttributesCompat! build();
+ method public androidx.media.AudioAttributesCompat.Builder! setContentType(int);
+ method public androidx.media.AudioAttributesCompat.Builder! setFlags(int);
+ method public androidx.media.AudioAttributesCompat.Builder! setLegacyStreamType(int);
+ method public androidx.media.AudioAttributesCompat.Builder! setUsage(int);
+ }
+
+ public class AudioFocusRequestCompat {
+ method public androidx.media.AudioAttributesCompat getAudioAttributesCompat();
+ method public android.os.Handler getFocusChangeHandler();
+ method public int getFocusGain();
+ method public android.media.AudioManager.OnAudioFocusChangeListener getOnAudioFocusChangeListener();
+ method public boolean willPauseWhenDucked();
+ }
+
+ public static final class AudioFocusRequestCompat.Builder {
+ ctor public AudioFocusRequestCompat.Builder(int);
+ ctor public AudioFocusRequestCompat.Builder(androidx.media.AudioFocusRequestCompat);
+ method public androidx.media.AudioFocusRequestCompat! build();
+ method public androidx.media.AudioFocusRequestCompat.Builder setAudioAttributes(androidx.media.AudioAttributesCompat);
+ method public androidx.media.AudioFocusRequestCompat.Builder setFocusGain(int);
+ method public androidx.media.AudioFocusRequestCompat.Builder setOnAudioFocusChangeListener(android.media.AudioManager.OnAudioFocusChangeListener);
+ method public androidx.media.AudioFocusRequestCompat.Builder setOnAudioFocusChangeListener(android.media.AudioManager.OnAudioFocusChangeListener, android.os.Handler);
+ method public androidx.media.AudioFocusRequestCompat.Builder setWillPauseWhenDucked(boolean);
+ }
+
+ public final class AudioManagerCompat {
+ method public static int abandonAudioFocusRequest(android.media.AudioManager, androidx.media.AudioFocusRequestCompat);
+ method public static int requestAudioFocus(android.media.AudioManager, androidx.media.AudioFocusRequestCompat);
+ field public static final int AUDIOFOCUS_GAIN = 1; // 0x1
+ field public static final int AUDIOFOCUS_GAIN_TRANSIENT = 2; // 0x2
+ field public static final int AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE = 4; // 0x4
+ field public static final int AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK = 3; // 0x3
+ }
+
+ public abstract class MediaBrowserServiceCompat extends android.app.Service {
+ ctor public MediaBrowserServiceCompat();
+ method public void dump(java.io.FileDescriptor!, java.io.PrintWriter!, String![]!);
+ method public final android.os.Bundle! getBrowserRootHints();
+ method public final androidx.media.MediaSessionManager.RemoteUserInfo getCurrentBrowserInfo();
+ method public android.support.v4.media.session.MediaSessionCompat.Token? getSessionToken();
+ method public void notifyChildrenChanged(String);
+ method public void notifyChildrenChanged(String, android.os.Bundle);
+ method public android.os.IBinder! onBind(android.content.Intent!);
+ method public void onCustomAction(String, android.os.Bundle!, androidx.media.MediaBrowserServiceCompat.Result<android.os.Bundle!>);
+ method public abstract androidx.media.MediaBrowserServiceCompat.BrowserRoot? onGetRoot(String, int, android.os.Bundle?);
+ method public abstract void onLoadChildren(String, androidx.media.MediaBrowserServiceCompat.Result<java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem!>!>);
+ method public void onLoadChildren(String, androidx.media.MediaBrowserServiceCompat.Result<java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem!>!>, android.os.Bundle);
+ method public void onLoadItem(String!, androidx.media.MediaBrowserServiceCompat.Result<android.support.v4.media.MediaBrowserCompat.MediaItem!>);
+ method public void onSearch(String, android.os.Bundle!, androidx.media.MediaBrowserServiceCompat.Result<java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem!>!>);
+ method public void setSessionToken(android.support.v4.media.session.MediaSessionCompat.Token!);
+ field public static final String SERVICE_INTERFACE = "android.media.browse.MediaBrowserService";
+ }
+
+ public static final class MediaBrowserServiceCompat.BrowserRoot {
+ ctor public MediaBrowserServiceCompat.BrowserRoot(String, android.os.Bundle?);
+ method public android.os.Bundle! getExtras();
+ method public String! getRootId();
+ field public static final String EXTRA_OFFLINE = "android.service.media.extra.OFFLINE";
+ field public static final String EXTRA_RECENT = "android.service.media.extra.RECENT";
+ field public static final String EXTRA_SUGGESTED = "android.service.media.extra.SUGGESTED";
+ field @Deprecated public static final String EXTRA_SUGGESTION_KEYWORDS = "android.service.media.extra.SUGGESTION_KEYWORDS";
+ }
+
+ public static class MediaBrowserServiceCompat.Result<T> {
+ method public void detach();
+ method public void sendError(android.os.Bundle!);
+ method public void sendProgressUpdate(android.os.Bundle!);
+ method public void sendResult(T!);
+ }
+
+ public final class MediaSessionManager {
+ method public static androidx.media.MediaSessionManager getSessionManager(android.content.Context);
+ method public boolean isTrustedForMediaControl(androidx.media.MediaSessionManager.RemoteUserInfo);
+ }
+
+ public static final class MediaSessionManager.RemoteUserInfo {
+ ctor public MediaSessionManager.RemoteUserInfo(String, int, int);
+ method public String getPackageName();
+ method public int getPid();
+ method public int getUid();
+ field public static final String LEGACY_CONTROLLER = "android.media.session.MediaController";
+ }
+
+ public abstract class VolumeProviderCompat {
+ ctor public VolumeProviderCompat(int, int, int);
+ method public final int getCurrentVolume();
+ method public final int getMaxVolume();
+ method public final int getVolumeControl();
+ method public Object! getVolumeProvider();
+ method public void onAdjustVolume(int);
+ method public void onSetVolumeTo(int);
+ method public void setCallback(androidx.media.VolumeProviderCompat.Callback!);
+ method public final void setCurrentVolume(int);
+ field public static final int VOLUME_CONTROL_ABSOLUTE = 2; // 0x2
+ field public static final int VOLUME_CONTROL_FIXED = 0; // 0x0
+ field public static final int VOLUME_CONTROL_RELATIVE = 1; // 0x1
+ }
+
+ public abstract static class VolumeProviderCompat.Callback {
+ ctor public VolumeProviderCompat.Callback();
+ method public abstract void onVolumeChanged(androidx.media.VolumeProviderCompat!);
+ }
+
+}
+
+package androidx.media.app {
+
+ public class NotificationCompat {
+ }
+
+ public static class NotificationCompat.DecoratedMediaCustomViewStyle extends androidx.media.app.NotificationCompat.MediaStyle {
+ ctor public NotificationCompat.DecoratedMediaCustomViewStyle();
+ }
+
+ public static class NotificationCompat.MediaStyle extends androidx.core.app.NotificationCompat.Style {
+ ctor public NotificationCompat.MediaStyle();
+ ctor public NotificationCompat.MediaStyle(androidx.core.app.NotificationCompat.Builder!);
+ method public static android.support.v4.media.session.MediaSessionCompat.Token! getMediaSession(android.app.Notification!);
+ method public androidx.media.app.NotificationCompat.MediaStyle! setCancelButtonIntent(android.app.PendingIntent!);
+ method public androidx.media.app.NotificationCompat.MediaStyle! setMediaSession(android.support.v4.media.session.MediaSessionCompat.Token!);
+ method public androidx.media.app.NotificationCompat.MediaStyle! setShowActionsInCompactView(int...);
+ method public androidx.media.app.NotificationCompat.MediaStyle! setShowCancelButton(boolean);
+ }
+
+}
+
+package androidx.media.session {
+
+ public class MediaButtonReceiver extends android.content.BroadcastReceiver {
+ ctor public MediaButtonReceiver();
+ method public static android.app.PendingIntent! buildMediaButtonPendingIntent(android.content.Context!, long);
+ method public static android.app.PendingIntent! buildMediaButtonPendingIntent(android.content.Context!, android.content.ComponentName!, long);
+ method public static android.view.KeyEvent! handleIntent(android.support.v4.media.session.MediaSessionCompat!, android.content.Intent!);
+ method public void onReceive(android.content.Context!, android.content.Intent!);
+ }
+
+}
+
diff --git a/media/api/public_plus_experimental_1.2.0-alpha02.txt b/media/api/public_plus_experimental_1.2.0-alpha02.txt
new file mode 100644
index 0000000..9bf6f01
--- /dev/null
+++ b/media/api/public_plus_experimental_1.2.0-alpha02.txt
@@ -0,0 +1,706 @@
+// Signature format: 3.0
+package android.support.v4.media {
+
+ public final class MediaBrowserCompat {
+ ctor public MediaBrowserCompat(android.content.Context!, android.content.ComponentName!, android.support.v4.media.MediaBrowserCompat.ConnectionCallback!, android.os.Bundle!);
+ method public void connect();
+ method public void disconnect();
+ method public android.os.Bundle? getExtras();
+ method public void getItem(String, android.support.v4.media.MediaBrowserCompat.ItemCallback);
+ method public String getRoot();
+ method public android.content.ComponentName getServiceComponent();
+ method public android.support.v4.media.session.MediaSessionCompat.Token getSessionToken();
+ method public boolean isConnected();
+ method public void search(String, android.os.Bundle!, android.support.v4.media.MediaBrowserCompat.SearchCallback);
+ method public void sendCustomAction(String, android.os.Bundle!, android.support.v4.media.MediaBrowserCompat.CustomActionCallback?);
+ method public void subscribe(String, android.support.v4.media.MediaBrowserCompat.SubscriptionCallback);
+ method public void subscribe(String, android.os.Bundle, android.support.v4.media.MediaBrowserCompat.SubscriptionCallback);
+ method public void unsubscribe(String);
+ method public void unsubscribe(String, android.support.v4.media.MediaBrowserCompat.SubscriptionCallback);
+ field public static final String CUSTOM_ACTION_DOWNLOAD = "android.support.v4.media.action.DOWNLOAD";
+ field public static final String CUSTOM_ACTION_REMOVE_DOWNLOADED_FILE = "android.support.v4.media.action.REMOVE_DOWNLOADED_FILE";
+ field public static final String EXTRA_DOWNLOAD_PROGRESS = "android.media.browse.extra.DOWNLOAD_PROGRESS";
+ field public static final String EXTRA_MEDIA_ID = "android.media.browse.extra.MEDIA_ID";
+ field public static final String EXTRA_PAGE = "android.media.browse.extra.PAGE";
+ field public static final String EXTRA_PAGE_SIZE = "android.media.browse.extra.PAGE_SIZE";
+ }
+
+ public static class MediaBrowserCompat.ConnectionCallback {
+ ctor public MediaBrowserCompat.ConnectionCallback();
+ method public void onConnected();
+ method public void onConnectionFailed();
+ method public void onConnectionSuspended();
+ }
+
+ public abstract static class MediaBrowserCompat.CustomActionCallback {
+ ctor public MediaBrowserCompat.CustomActionCallback();
+ method public void onError(String!, android.os.Bundle!, android.os.Bundle!);
+ method public void onProgressUpdate(String!, android.os.Bundle!, android.os.Bundle!);
+ method public void onResult(String!, android.os.Bundle!, android.os.Bundle!);
+ }
+
+ public abstract static class MediaBrowserCompat.ItemCallback {
+ ctor public MediaBrowserCompat.ItemCallback();
+ method public void onError(String);
+ method public void onItemLoaded(android.support.v4.media.MediaBrowserCompat.MediaItem!);
+ }
+
+ public static class MediaBrowserCompat.MediaItem implements android.os.Parcelable {
+ ctor public MediaBrowserCompat.MediaItem(android.support.v4.media.MediaDescriptionCompat, int);
+ method public int describeContents();
+ method public static android.support.v4.media.MediaBrowserCompat.MediaItem! fromMediaItem(Object!);
+ method public static java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem!>! fromMediaItemList(java.util.List<?>!);
+ method public android.support.v4.media.MediaDescriptionCompat getDescription();
+ method public int getFlags();
+ method public String? getMediaId();
+ method public boolean isBrowsable();
+ method public boolean isPlayable();
+ method public void writeToParcel(android.os.Parcel!, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.MediaBrowserCompat.MediaItem!>! CREATOR;
+ field public static final int FLAG_BROWSABLE = 1; // 0x1
+ field public static final int FLAG_PLAYABLE = 2; // 0x2
+ }
+
+ public abstract static class MediaBrowserCompat.SearchCallback {
+ ctor public MediaBrowserCompat.SearchCallback();
+ method public void onError(String, android.os.Bundle!);
+ method public void onSearchResult(String, android.os.Bundle!, java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem!>);
+ }
+
+ public abstract static class MediaBrowserCompat.SubscriptionCallback {
+ ctor public MediaBrowserCompat.SubscriptionCallback();
+ method public void onChildrenLoaded(String, java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem!>);
+ method public void onChildrenLoaded(String, java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem!>, android.os.Bundle);
+ method public void onError(String);
+ method public void onError(String, android.os.Bundle);
+ }
+
+ public final class MediaDescriptionCompat implements android.os.Parcelable {
+ method public int describeContents();
+ method public static android.support.v4.media.MediaDescriptionCompat! fromMediaDescription(Object!);
+ method public CharSequence? getDescription();
+ method public android.os.Bundle? getExtras();
+ method public android.graphics.Bitmap? getIconBitmap();
+ method public android.net.Uri? getIconUri();
+ method public Object! getMediaDescription();
+ method public String? getMediaId();
+ method public android.net.Uri? getMediaUri();
+ method public CharSequence? getSubtitle();
+ method public CharSequence? getTitle();
+ method public void writeToParcel(android.os.Parcel!, int);
+ field public static final long BT_FOLDER_TYPE_ALBUMS = 2L; // 0x2L
+ field public static final long BT_FOLDER_TYPE_ARTISTS = 3L; // 0x3L
+ field public static final long BT_FOLDER_TYPE_GENRES = 4L; // 0x4L
+ field public static final long BT_FOLDER_TYPE_MIXED = 0L; // 0x0L
+ field public static final long BT_FOLDER_TYPE_PLAYLISTS = 5L; // 0x5L
+ field public static final long BT_FOLDER_TYPE_TITLES = 1L; // 0x1L
+ field public static final long BT_FOLDER_TYPE_YEARS = 6L; // 0x6L
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.MediaDescriptionCompat!>! CREATOR;
+ field public static final String EXTRA_BT_FOLDER_TYPE = "android.media.extra.BT_FOLDER_TYPE";
+ field public static final String EXTRA_DOWNLOAD_STATUS = "android.media.extra.DOWNLOAD_STATUS";
+ field public static final long STATUS_DOWNLOADED = 2L; // 0x2L
+ field public static final long STATUS_DOWNLOADING = 1L; // 0x1L
+ field public static final long STATUS_NOT_DOWNLOADED = 0L; // 0x0L
+ }
+
+ public static final class MediaDescriptionCompat.Builder {
+ ctor public MediaDescriptionCompat.Builder();
+ method public android.support.v4.media.MediaDescriptionCompat! build();
+ method public android.support.v4.media.MediaDescriptionCompat.Builder! setDescription(CharSequence?);
+ method public android.support.v4.media.MediaDescriptionCompat.Builder! setExtras(android.os.Bundle?);
+ method public android.support.v4.media.MediaDescriptionCompat.Builder! setIconBitmap(android.graphics.Bitmap?);
+ method public android.support.v4.media.MediaDescriptionCompat.Builder! setIconUri(android.net.Uri?);
+ method public android.support.v4.media.MediaDescriptionCompat.Builder! setMediaId(String?);
+ method public android.support.v4.media.MediaDescriptionCompat.Builder! setMediaUri(android.net.Uri?);
+ method public android.support.v4.media.MediaDescriptionCompat.Builder! setSubtitle(CharSequence?);
+ method public android.support.v4.media.MediaDescriptionCompat.Builder! setTitle(CharSequence?);
+ }
+
+ public final class MediaMetadataCompat implements android.os.Parcelable {
+ method public boolean containsKey(String!);
+ method public int describeContents();
+ method public static android.support.v4.media.MediaMetadataCompat! fromMediaMetadata(Object!);
+ method public android.graphics.Bitmap! getBitmap(String!);
+ method public android.os.Bundle! getBundle();
+ method public android.support.v4.media.MediaDescriptionCompat! getDescription();
+ method public long getLong(String!);
+ method public Object! getMediaMetadata();
+ method public android.support.v4.media.RatingCompat! getRating(String!);
+ method public String! getString(String!);
+ method public CharSequence! getText(String!);
+ method public java.util.Set<java.lang.String!>! keySet();
+ method public int size();
+ method public void writeToParcel(android.os.Parcel!, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.MediaMetadataCompat!>! CREATOR;
+ field public static final String METADATA_KEY_ADVERTISEMENT = "android.media.metadata.ADVERTISEMENT";
+ field public static final String METADATA_KEY_ALBUM = "android.media.metadata.ALBUM";
+ field public static final String METADATA_KEY_ALBUM_ART = "android.media.metadata.ALBUM_ART";
+ field public static final String METADATA_KEY_ALBUM_ARTIST = "android.media.metadata.ALBUM_ARTIST";
+ field public static final String METADATA_KEY_ALBUM_ART_URI = "android.media.metadata.ALBUM_ART_URI";
+ field public static final String METADATA_KEY_ART = "android.media.metadata.ART";
+ field public static final String METADATA_KEY_ARTIST = "android.media.metadata.ARTIST";
+ field public static final String METADATA_KEY_ART_URI = "android.media.metadata.ART_URI";
+ field public static final String METADATA_KEY_AUTHOR = "android.media.metadata.AUTHOR";
+ field public static final String METADATA_KEY_BT_FOLDER_TYPE = "android.media.metadata.BT_FOLDER_TYPE";
+ field public static final String METADATA_KEY_COMPILATION = "android.media.metadata.COMPILATION";
+ field public static final String METADATA_KEY_COMPOSER = "android.media.metadata.COMPOSER";
+ field public static final String METADATA_KEY_DATE = "android.media.metadata.DATE";
+ field public static final String METADATA_KEY_DISC_NUMBER = "android.media.metadata.DISC_NUMBER";
+ field public static final String METADATA_KEY_DISPLAY_DESCRIPTION = "android.media.metadata.DISPLAY_DESCRIPTION";
+ field public static final String METADATA_KEY_DISPLAY_ICON = "android.media.metadata.DISPLAY_ICON";
+ field public static final String METADATA_KEY_DISPLAY_ICON_URI = "android.media.metadata.DISPLAY_ICON_URI";
+ field public static final String METADATA_KEY_DISPLAY_SUBTITLE = "android.media.metadata.DISPLAY_SUBTITLE";
+ field public static final String METADATA_KEY_DISPLAY_TITLE = "android.media.metadata.DISPLAY_TITLE";
+ field public static final String METADATA_KEY_DOWNLOAD_STATUS = "android.media.metadata.DOWNLOAD_STATUS";
+ field public static final String METADATA_KEY_DURATION = "android.media.metadata.DURATION";
+ field public static final String METADATA_KEY_GENRE = "android.media.metadata.GENRE";
+ field public static final String METADATA_KEY_MEDIA_ID = "android.media.metadata.MEDIA_ID";
+ field public static final String METADATA_KEY_MEDIA_URI = "android.media.metadata.MEDIA_URI";
+ field public static final String METADATA_KEY_NUM_TRACKS = "android.media.metadata.NUM_TRACKS";
+ field public static final String METADATA_KEY_RATING = "android.media.metadata.RATING";
+ field public static final String METADATA_KEY_TITLE = "android.media.metadata.TITLE";
+ field public static final String METADATA_KEY_TRACK_NUMBER = "android.media.metadata.TRACK_NUMBER";
+ field public static final String METADATA_KEY_USER_RATING = "android.media.metadata.USER_RATING";
+ field public static final String METADATA_KEY_WRITER = "android.media.metadata.WRITER";
+ field public static final String METADATA_KEY_YEAR = "android.media.metadata.YEAR";
+ }
+
+ public static final class MediaMetadataCompat.Builder {
+ ctor public MediaMetadataCompat.Builder();
+ ctor public MediaMetadataCompat.Builder(android.support.v4.media.MediaMetadataCompat!);
+ method public android.support.v4.media.MediaMetadataCompat! build();
+ method public android.support.v4.media.MediaMetadataCompat.Builder! putBitmap(String!, android.graphics.Bitmap!);
+ method public android.support.v4.media.MediaMetadataCompat.Builder! putLong(String!, long);
+ method public android.support.v4.media.MediaMetadataCompat.Builder! putRating(String!, android.support.v4.media.RatingCompat!);
+ method public android.support.v4.media.MediaMetadataCompat.Builder! putString(String!, String!);
+ method public android.support.v4.media.MediaMetadataCompat.Builder! putText(String!, CharSequence!);
+ }
+
+ public final class RatingCompat implements android.os.Parcelable {
+ method public int describeContents();
+ method public static android.support.v4.media.RatingCompat! fromRating(Object!);
+ method public float getPercentRating();
+ method public Object! getRating();
+ method public int getRatingStyle();
+ method public float getStarRating();
+ method public boolean hasHeart();
+ method public boolean isRated();
+ method public boolean isThumbUp();
+ method public static android.support.v4.media.RatingCompat! newHeartRating(boolean);
+ method public static android.support.v4.media.RatingCompat! newPercentageRating(float);
+ method public static android.support.v4.media.RatingCompat! newStarRating(int, float);
+ method public static android.support.v4.media.RatingCompat! newThumbRating(boolean);
+ method public static android.support.v4.media.RatingCompat! newUnratedRating(int);
+ method public void writeToParcel(android.os.Parcel!, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.RatingCompat!>! CREATOR;
+ field public static final int RATING_3_STARS = 3; // 0x3
+ field public static final int RATING_4_STARS = 4; // 0x4
+ field public static final int RATING_5_STARS = 5; // 0x5
+ field public static final int RATING_HEART = 1; // 0x1
+ field public static final int RATING_NONE = 0; // 0x0
+ field public static final int RATING_PERCENTAGE = 6; // 0x6
+ field public static final int RATING_THUMB_UP_DOWN = 2; // 0x2
+ }
+
+}
+
+package android.support.v4.media.session {
+
+ public final class MediaControllerCompat {
+ ctor public MediaControllerCompat(android.content.Context!, android.support.v4.media.session.MediaSessionCompat);
+ ctor public MediaControllerCompat(android.content.Context!, android.support.v4.media.session.MediaSessionCompat.Token);
+ method public void addQueueItem(android.support.v4.media.MediaDescriptionCompat!);
+ method public void addQueueItem(android.support.v4.media.MediaDescriptionCompat!, int);
+ method public void adjustVolume(int, int);
+ method public boolean dispatchMediaButtonEvent(android.view.KeyEvent!);
+ method public android.os.Bundle! getExtras();
+ method public long getFlags();
+ method public static android.support.v4.media.session.MediaControllerCompat! getMediaController(android.app.Activity);
+ method public Object! getMediaController();
+ method public android.support.v4.media.MediaMetadataCompat! getMetadata();
+ method public String! getPackageName();
+ method public android.support.v4.media.session.MediaControllerCompat.PlaybackInfo! getPlaybackInfo();
+ method public android.support.v4.media.session.PlaybackStateCompat! getPlaybackState();
+ method public java.util.List<android.support.v4.media.session.MediaSessionCompat.QueueItem!>! getQueue();
+ method public CharSequence! getQueueTitle();
+ method public int getRatingType();
+ method public int getRepeatMode();
+ method public android.app.PendingIntent! getSessionActivity();
+ method public android.os.Bundle getSessionInfo();
+ method public android.support.v4.media.session.MediaSessionCompat.Token! getSessionToken();
+ method public int getShuffleMode();
+ method public android.support.v4.media.session.MediaControllerCompat.TransportControls! getTransportControls();
+ method public boolean isCaptioningEnabled();
+ method public boolean isSessionReady();
+ method public void registerCallback(android.support.v4.media.session.MediaControllerCompat.Callback);
+ method public void registerCallback(android.support.v4.media.session.MediaControllerCompat.Callback, android.os.Handler!);
+ method public void removeQueueItem(android.support.v4.media.MediaDescriptionCompat!);
+ method @Deprecated public void removeQueueItemAt(int);
+ method public void sendCommand(String, android.os.Bundle?, android.os.ResultReceiver?);
+ method public static void setMediaController(android.app.Activity, android.support.v4.media.session.MediaControllerCompat!);
+ method public void setVolumeTo(int, int);
+ method public void unregisterCallback(android.support.v4.media.session.MediaControllerCompat.Callback);
+ }
+
+ public abstract static class MediaControllerCompat.Callback implements android.os.IBinder.DeathRecipient {
+ ctor public MediaControllerCompat.Callback();
+ method public void binderDied();
+ method public void onAudioInfoChanged(android.support.v4.media.session.MediaControllerCompat.PlaybackInfo!);
+ method public void onCaptioningEnabledChanged(boolean);
+ method public void onExtrasChanged(android.os.Bundle!);
+ method public void onMetadataChanged(android.support.v4.media.MediaMetadataCompat!);
+ method public void onPlaybackStateChanged(android.support.v4.media.session.PlaybackStateCompat!);
+ method public void onQueueChanged(java.util.List<android.support.v4.media.session.MediaSessionCompat.QueueItem!>!);
+ method public void onQueueTitleChanged(CharSequence!);
+ method public void onRepeatModeChanged(int);
+ method public void onSessionDestroyed();
+ method public void onSessionEvent(String!, android.os.Bundle!);
+ method public void onSessionReady();
+ method public void onShuffleModeChanged(int);
+ }
+
+ public static final class MediaControllerCompat.PlaybackInfo {
+ method public androidx.media.AudioAttributesCompat getAudioAttributes();
+ method @Deprecated public int getAudioStream();
+ method public int getCurrentVolume();
+ method public int getMaxVolume();
+ method public int getPlaybackType();
+ method public int getVolumeControl();
+ field public static final int PLAYBACK_TYPE_LOCAL = 1; // 0x1
+ field public static final int PLAYBACK_TYPE_REMOTE = 2; // 0x2
+ }
+
+ public abstract static class MediaControllerCompat.TransportControls {
+ method public abstract void fastForward();
+ method public abstract void pause();
+ method public abstract void play();
+ method public abstract void playFromMediaId(String!, android.os.Bundle!);
+ method public abstract void playFromSearch(String!, android.os.Bundle!);
+ method public abstract void playFromUri(android.net.Uri!, android.os.Bundle!);
+ method public abstract void prepare();
+ method public abstract void prepareFromMediaId(String!, android.os.Bundle!);
+ method public abstract void prepareFromSearch(String!, android.os.Bundle!);
+ method public abstract void prepareFromUri(android.net.Uri!, android.os.Bundle!);
+ method public abstract void rewind();
+ method public abstract void seekTo(long);
+ method public abstract void sendCustomAction(android.support.v4.media.session.PlaybackStateCompat.CustomAction!, android.os.Bundle!);
+ method public abstract void sendCustomAction(String!, android.os.Bundle!);
+ method public abstract void setCaptioningEnabled(boolean);
+ method public void setPlaybackSpeed(float);
+ method public abstract void setRating(android.support.v4.media.RatingCompat!);
+ method public abstract void setRating(android.support.v4.media.RatingCompat!, android.os.Bundle!);
+ method public abstract void setRepeatMode(int);
+ method public abstract void setShuffleMode(int);
+ method public abstract void skipToNext();
+ method public abstract void skipToPrevious();
+ method public abstract void skipToQueueItem(long);
+ method public abstract void stop();
+ field public static final String EXTRA_LEGACY_STREAM_TYPE = "android.media.session.extra.LEGACY_STREAM_TYPE";
+ }
+
+ public class MediaSessionCompat {
+ ctor public MediaSessionCompat(android.content.Context, String);
+ ctor public MediaSessionCompat(android.content.Context, String, android.content.ComponentName?, android.app.PendingIntent?);
+ ctor public MediaSessionCompat(android.content.Context, String, android.content.ComponentName?, android.app.PendingIntent?, android.os.Bundle?);
+ method public void addOnActiveChangeListener(android.support.v4.media.session.MediaSessionCompat.OnActiveChangeListener!);
+ method public static android.support.v4.media.session.MediaSessionCompat! fromMediaSession(android.content.Context!, Object!);
+ method public android.support.v4.media.session.MediaControllerCompat! getController();
+ method public final androidx.media.MediaSessionManager.RemoteUserInfo getCurrentControllerInfo();
+ method public Object! getMediaSession();
+ method public Object! getRemoteControlClient();
+ method public android.support.v4.media.session.MediaSessionCompat.Token! getSessionToken();
+ method public boolean isActive();
+ method public void release();
+ method public void removeOnActiveChangeListener(android.support.v4.media.session.MediaSessionCompat.OnActiveChangeListener!);
+ method public void sendSessionEvent(String!, android.os.Bundle!);
+ method public void setActive(boolean);
+ method public void setCallback(android.support.v4.media.session.MediaSessionCompat.Callback!);
+ method public void setCallback(android.support.v4.media.session.MediaSessionCompat.Callback!, android.os.Handler!);
+ method public void setCaptioningEnabled(boolean);
+ method public void setExtras(android.os.Bundle!);
+ method public void setFlags(int);
+ method public void setMediaButtonReceiver(android.app.PendingIntent!);
+ method public void setMetadata(android.support.v4.media.MediaMetadataCompat!);
+ method public void setPlaybackState(android.support.v4.media.session.PlaybackStateCompat!);
+ method public void setPlaybackToLocal(int);
+ method public void setPlaybackToRemote(androidx.media.VolumeProviderCompat!);
+ method public void setQueue(java.util.List<android.support.v4.media.session.MediaSessionCompat.QueueItem!>!);
+ method public void setQueueTitle(CharSequence!);
+ method public void setRatingType(int);
+ method public void setRepeatMode(int);
+ method public void setSessionActivity(android.app.PendingIntent!);
+ method public void setShuffleMode(int);
+ field public static final String ACTION_FLAG_AS_INAPPROPRIATE = "android.support.v4.media.session.action.FLAG_AS_INAPPROPRIATE";
+ field public static final String ACTION_FOLLOW = "android.support.v4.media.session.action.FOLLOW";
+ field public static final String ACTION_SKIP_AD = "android.support.v4.media.session.action.SKIP_AD";
+ field public static final String ACTION_UNFOLLOW = "android.support.v4.media.session.action.UNFOLLOW";
+ field public static final String ARGUMENT_MEDIA_ATTRIBUTE = "android.support.v4.media.session.ARGUMENT_MEDIA_ATTRIBUTE";
+ field public static final String ARGUMENT_MEDIA_ATTRIBUTE_VALUE = "android.support.v4.media.session.ARGUMENT_MEDIA_ATTRIBUTE_VALUE";
+ field @Deprecated public static final int FLAG_HANDLES_MEDIA_BUTTONS = 1; // 0x1
+ field public static final int FLAG_HANDLES_QUEUE_COMMANDS = 4; // 0x4
+ field @Deprecated public static final int FLAG_HANDLES_TRANSPORT_CONTROLS = 2; // 0x2
+ field public static final int MEDIA_ATTRIBUTE_ALBUM = 1; // 0x1
+ field public static final int MEDIA_ATTRIBUTE_ARTIST = 0; // 0x0
+ field public static final int MEDIA_ATTRIBUTE_PLAYLIST = 2; // 0x2
+ }
+
+ public abstract static class MediaSessionCompat.Callback {
+ ctor public MediaSessionCompat.Callback();
+ method public void onAddQueueItem(android.support.v4.media.MediaDescriptionCompat!);
+ method public void onAddQueueItem(android.support.v4.media.MediaDescriptionCompat!, int);
+ method public void onCommand(String!, android.os.Bundle!, android.os.ResultReceiver!);
+ method public void onCustomAction(String!, android.os.Bundle!);
+ method public void onFastForward();
+ method public boolean onMediaButtonEvent(android.content.Intent!);
+ method public void onPause();
+ method public void onPlay();
+ method public void onPlayFromMediaId(String!, android.os.Bundle!);
+ method public void onPlayFromSearch(String!, android.os.Bundle!);
+ method public void onPlayFromUri(android.net.Uri!, android.os.Bundle!);
+ method public void onPrepare();
+ method public void onPrepareFromMediaId(String!, android.os.Bundle!);
+ method public void onPrepareFromSearch(String!, android.os.Bundle!);
+ method public void onPrepareFromUri(android.net.Uri!, android.os.Bundle!);
+ method public void onRemoveQueueItem(android.support.v4.media.MediaDescriptionCompat!);
+ method @Deprecated public void onRemoveQueueItemAt(int);
+ method public void onRewind();
+ method public void onSeekTo(long);
+ method public void onSetCaptioningEnabled(boolean);
+ method public void onSetPlaybackSpeed(float);
+ method public void onSetRating(android.support.v4.media.RatingCompat!);
+ method public void onSetRating(android.support.v4.media.RatingCompat!, android.os.Bundle!);
+ method public void onSetRepeatMode(int);
+ method public void onSetShuffleMode(int);
+ method public void onSkipToNext();
+ method public void onSkipToPrevious();
+ method public void onSkipToQueueItem(long);
+ method public void onStop();
+ }
+
+ public static interface MediaSessionCompat.OnActiveChangeListener {
+ method public void onActiveChanged();
+ }
+
+ public static final class MediaSessionCompat.QueueItem implements android.os.Parcelable {
+ ctor public MediaSessionCompat.QueueItem(android.support.v4.media.MediaDescriptionCompat!, long);
+ method public int describeContents();
+ method public static android.support.v4.media.session.MediaSessionCompat.QueueItem! fromQueueItem(Object!);
+ method public static java.util.List<android.support.v4.media.session.MediaSessionCompat.QueueItem!>! fromQueueItemList(java.util.List<?>!);
+ method public android.support.v4.media.MediaDescriptionCompat! getDescription();
+ method public long getQueueId();
+ method public Object! getQueueItem();
+ method public void writeToParcel(android.os.Parcel!, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.session.MediaSessionCompat.QueueItem!>! CREATOR;
+ field public static final int UNKNOWN_ID = -1; // 0xffffffff
+ }
+
+ public static final class MediaSessionCompat.Token implements android.os.Parcelable {
+ method public int describeContents();
+ method public static android.support.v4.media.session.MediaSessionCompat.Token! fromToken(Object!);
+ method public Object! getToken();
+ method public void writeToParcel(android.os.Parcel!, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.session.MediaSessionCompat.Token!>! CREATOR;
+ }
+
+ public class ParcelableVolumeInfo implements android.os.Parcelable {
+ ctor public ParcelableVolumeInfo(int, int, int, int, int);
+ ctor public ParcelableVolumeInfo(android.os.Parcel!);
+ method public int describeContents();
+ method public void writeToParcel(android.os.Parcel!, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.session.ParcelableVolumeInfo!>! CREATOR;
+ field public int audioStream;
+ field public int controlType;
+ field public int currentVolume;
+ field public int maxVolume;
+ field public int volumeType;
+ }
+
+ public final class PlaybackStateCompat implements android.os.Parcelable {
+ method public int describeContents();
+ method public static android.support.v4.media.session.PlaybackStateCompat! fromPlaybackState(Object!);
+ method public long getActions();
+ method public long getActiveQueueItemId();
+ method public long getBufferedPosition();
+ method public java.util.List<android.support.v4.media.session.PlaybackStateCompat.CustomAction!>! getCustomActions();
+ method public int getErrorCode();
+ method public CharSequence! getErrorMessage();
+ method public android.os.Bundle? getExtras();
+ method public long getLastPositionUpdateTime();
+ method public float getPlaybackSpeed();
+ method public Object! getPlaybackState();
+ method public long getPosition();
+ method public int getState();
+ method public static int toKeyCode(long);
+ method public void writeToParcel(android.os.Parcel!, int);
+ field public static final long ACTION_FAST_FORWARD = 64L; // 0x40L
+ field public static final long ACTION_PAUSE = 2L; // 0x2L
+ field public static final long ACTION_PLAY = 4L; // 0x4L
+ field public static final long ACTION_PLAY_FROM_MEDIA_ID = 1024L; // 0x400L
+ field public static final long ACTION_PLAY_FROM_SEARCH = 2048L; // 0x800L
+ field public static final long ACTION_PLAY_FROM_URI = 8192L; // 0x2000L
+ field public static final long ACTION_PLAY_PAUSE = 512L; // 0x200L
+ field public static final long ACTION_PREPARE = 16384L; // 0x4000L
+ field public static final long ACTION_PREPARE_FROM_MEDIA_ID = 32768L; // 0x8000L
+ field public static final long ACTION_PREPARE_FROM_SEARCH = 65536L; // 0x10000L
+ field public static final long ACTION_PREPARE_FROM_URI = 131072L; // 0x20000L
+ field public static final long ACTION_REWIND = 8L; // 0x8L
+ field public static final long ACTION_SEEK_TO = 256L; // 0x100L
+ field public static final long ACTION_SET_CAPTIONING_ENABLED = 1048576L; // 0x100000L
+ field public static final long ACTION_SET_RATING = 128L; // 0x80L
+ field public static final long ACTION_SET_REPEAT_MODE = 262144L; // 0x40000L
+ field public static final long ACTION_SET_SHUFFLE_MODE = 2097152L; // 0x200000L
+ field @Deprecated public static final long ACTION_SET_SHUFFLE_MODE_ENABLED = 524288L; // 0x80000L
+ field public static final long ACTION_SKIP_TO_NEXT = 32L; // 0x20L
+ field public static final long ACTION_SKIP_TO_PREVIOUS = 16L; // 0x10L
+ field public static final long ACTION_SKIP_TO_QUEUE_ITEM = 4096L; // 0x1000L
+ field public static final long ACTION_STOP = 1L; // 0x1L
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.session.PlaybackStateCompat!>! CREATOR;
+ field public static final int ERROR_CODE_ACTION_ABORTED = 10; // 0xa
+ field public static final int ERROR_CODE_APP_ERROR = 1; // 0x1
+ field public static final int ERROR_CODE_AUTHENTICATION_EXPIRED = 3; // 0x3
+ field public static final int ERROR_CODE_CONCURRENT_STREAM_LIMIT = 5; // 0x5
+ field public static final int ERROR_CODE_CONTENT_ALREADY_PLAYING = 8; // 0x8
+ field public static final int ERROR_CODE_END_OF_QUEUE = 11; // 0xb
+ field public static final int ERROR_CODE_NOT_AVAILABLE_IN_REGION = 7; // 0x7
+ field public static final int ERROR_CODE_NOT_SUPPORTED = 2; // 0x2
+ field public static final int ERROR_CODE_PARENTAL_CONTROL_RESTRICTED = 6; // 0x6
+ field public static final int ERROR_CODE_PREMIUM_ACCOUNT_REQUIRED = 4; // 0x4
+ field public static final int ERROR_CODE_SKIP_LIMIT_REACHED = 9; // 0x9
+ field public static final int ERROR_CODE_UNKNOWN_ERROR = 0; // 0x0
+ field public static final long PLAYBACK_POSITION_UNKNOWN = -1L; // 0xffffffffffffffffL
+ field public static final int REPEAT_MODE_ALL = 2; // 0x2
+ field public static final int REPEAT_MODE_GROUP = 3; // 0x3
+ field public static final int REPEAT_MODE_INVALID = -1; // 0xffffffff
+ field public static final int REPEAT_MODE_NONE = 0; // 0x0
+ field public static final int REPEAT_MODE_ONE = 1; // 0x1
+ field public static final int SHUFFLE_MODE_ALL = 1; // 0x1
+ field public static final int SHUFFLE_MODE_GROUP = 2; // 0x2
+ field public static final int SHUFFLE_MODE_INVALID = -1; // 0xffffffff
+ field public static final int SHUFFLE_MODE_NONE = 0; // 0x0
+ field public static final int STATE_BUFFERING = 6; // 0x6
+ field public static final int STATE_CONNECTING = 8; // 0x8
+ field public static final int STATE_ERROR = 7; // 0x7
+ field public static final int STATE_FAST_FORWARDING = 4; // 0x4
+ field public static final int STATE_NONE = 0; // 0x0
+ field public static final int STATE_PAUSED = 2; // 0x2
+ field public static final int STATE_PLAYING = 3; // 0x3
+ field public static final int STATE_REWINDING = 5; // 0x5
+ field public static final int STATE_SKIPPING_TO_NEXT = 10; // 0xa
+ field public static final int STATE_SKIPPING_TO_PREVIOUS = 9; // 0x9
+ field public static final int STATE_SKIPPING_TO_QUEUE_ITEM = 11; // 0xb
+ field public static final int STATE_STOPPED = 1; // 0x1
+ }
+
+ public static final class PlaybackStateCompat.Builder {
+ ctor public PlaybackStateCompat.Builder();
+ ctor public PlaybackStateCompat.Builder(android.support.v4.media.session.PlaybackStateCompat!);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder! addCustomAction(String!, String!, int);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder! addCustomAction(android.support.v4.media.session.PlaybackStateCompat.CustomAction!);
+ method public android.support.v4.media.session.PlaybackStateCompat! build();
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder! setActions(long);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder! setActiveQueueItemId(long);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder! setBufferedPosition(long);
+ method @Deprecated public android.support.v4.media.session.PlaybackStateCompat.Builder! setErrorMessage(CharSequence!);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder! setErrorMessage(int, CharSequence!);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder! setExtras(android.os.Bundle!);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder! setState(int, long, float);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder! setState(int, long, float, long);
+ }
+
+ public static final class PlaybackStateCompat.CustomAction implements android.os.Parcelable {
+ method public int describeContents();
+ method public static android.support.v4.media.session.PlaybackStateCompat.CustomAction! fromCustomAction(Object!);
+ method public String! getAction();
+ method public Object! getCustomAction();
+ method public android.os.Bundle! getExtras();
+ method public int getIcon();
+ method public CharSequence! getName();
+ method public void writeToParcel(android.os.Parcel!, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.session.PlaybackStateCompat.CustomAction!>! CREATOR;
+ }
+
+ public static final class PlaybackStateCompat.CustomAction.Builder {
+ ctor public PlaybackStateCompat.CustomAction.Builder(String!, CharSequence!, int);
+ method public android.support.v4.media.session.PlaybackStateCompat.CustomAction! build();
+ method public android.support.v4.media.session.PlaybackStateCompat.CustomAction.Builder! setExtras(android.os.Bundle!);
+ }
+
+}
+
+package androidx.media {
+
+ public class AudioAttributesCompat implements androidx.versionedparcelable.VersionedParcelable {
+ method public int getContentType();
+ method public int getFlags();
+ method public int getLegacyStreamType();
+ method public int getUsage();
+ method public int getVolumeControlStream();
+ method public Object? unwrap();
+ method public static androidx.media.AudioAttributesCompat? wrap(Object);
+ field public static final int CONTENT_TYPE_MOVIE = 3; // 0x3
+ field public static final int CONTENT_TYPE_MUSIC = 2; // 0x2
+ field public static final int CONTENT_TYPE_SONIFICATION = 4; // 0x4
+ field public static final int CONTENT_TYPE_SPEECH = 1; // 0x1
+ field public static final int CONTENT_TYPE_UNKNOWN = 0; // 0x0
+ field public static final int FLAG_AUDIBILITY_ENFORCED = 1; // 0x1
+ field public static final int FLAG_HW_AV_SYNC = 16; // 0x10
+ field public static final int USAGE_ALARM = 4; // 0x4
+ field public static final int USAGE_ASSISTANCE_ACCESSIBILITY = 11; // 0xb
+ field public static final int USAGE_ASSISTANCE_NAVIGATION_GUIDANCE = 12; // 0xc
+ field public static final int USAGE_ASSISTANCE_SONIFICATION = 13; // 0xd
+ field public static final int USAGE_ASSISTANT = 16; // 0x10
+ field public static final int USAGE_GAME = 14; // 0xe
+ field public static final int USAGE_MEDIA = 1; // 0x1
+ field public static final int USAGE_NOTIFICATION = 5; // 0x5
+ field public static final int USAGE_NOTIFICATION_COMMUNICATION_DELAYED = 9; // 0x9
+ field public static final int USAGE_NOTIFICATION_COMMUNICATION_INSTANT = 8; // 0x8
+ field public static final int USAGE_NOTIFICATION_COMMUNICATION_REQUEST = 7; // 0x7
+ field public static final int USAGE_NOTIFICATION_EVENT = 10; // 0xa
+ field public static final int USAGE_NOTIFICATION_RINGTONE = 6; // 0x6
+ field public static final int USAGE_UNKNOWN = 0; // 0x0
+ field public static final int USAGE_VOICE_COMMUNICATION = 2; // 0x2
+ field public static final int USAGE_VOICE_COMMUNICATION_SIGNALLING = 3; // 0x3
+ }
+
+ public static class AudioAttributesCompat.Builder {
+ ctor public AudioAttributesCompat.Builder();
+ ctor public AudioAttributesCompat.Builder(androidx.media.AudioAttributesCompat!);
+ method public androidx.media.AudioAttributesCompat! build();
+ method public androidx.media.AudioAttributesCompat.Builder! setContentType(int);
+ method public androidx.media.AudioAttributesCompat.Builder! setFlags(int);
+ method public androidx.media.AudioAttributesCompat.Builder! setLegacyStreamType(int);
+ method public androidx.media.AudioAttributesCompat.Builder! setUsage(int);
+ }
+
+ public class AudioFocusRequestCompat {
+ method public androidx.media.AudioAttributesCompat getAudioAttributesCompat();
+ method public android.os.Handler getFocusChangeHandler();
+ method public int getFocusGain();
+ method public android.media.AudioManager.OnAudioFocusChangeListener getOnAudioFocusChangeListener();
+ method public boolean willPauseWhenDucked();
+ }
+
+ public static final class AudioFocusRequestCompat.Builder {
+ ctor public AudioFocusRequestCompat.Builder(int);
+ ctor public AudioFocusRequestCompat.Builder(androidx.media.AudioFocusRequestCompat);
+ method public androidx.media.AudioFocusRequestCompat! build();
+ method public androidx.media.AudioFocusRequestCompat.Builder setAudioAttributes(androidx.media.AudioAttributesCompat);
+ method public androidx.media.AudioFocusRequestCompat.Builder setFocusGain(int);
+ method public androidx.media.AudioFocusRequestCompat.Builder setOnAudioFocusChangeListener(android.media.AudioManager.OnAudioFocusChangeListener);
+ method public androidx.media.AudioFocusRequestCompat.Builder setOnAudioFocusChangeListener(android.media.AudioManager.OnAudioFocusChangeListener, android.os.Handler);
+ method public androidx.media.AudioFocusRequestCompat.Builder setWillPauseWhenDucked(boolean);
+ }
+
+ public final class AudioManagerCompat {
+ method public static int abandonAudioFocusRequest(android.media.AudioManager, androidx.media.AudioFocusRequestCompat);
+ method public static int requestAudioFocus(android.media.AudioManager, androidx.media.AudioFocusRequestCompat);
+ field public static final int AUDIOFOCUS_GAIN = 1; // 0x1
+ field public static final int AUDIOFOCUS_GAIN_TRANSIENT = 2; // 0x2
+ field public static final int AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE = 4; // 0x4
+ field public static final int AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK = 3; // 0x3
+ }
+
+ public abstract class MediaBrowserServiceCompat extends android.app.Service {
+ ctor public MediaBrowserServiceCompat();
+ method public void dump(java.io.FileDescriptor!, java.io.PrintWriter!, String![]!);
+ method public final android.os.Bundle! getBrowserRootHints();
+ method public final androidx.media.MediaSessionManager.RemoteUserInfo getCurrentBrowserInfo();
+ method public android.support.v4.media.session.MediaSessionCompat.Token? getSessionToken();
+ method public void notifyChildrenChanged(String);
+ method public void notifyChildrenChanged(String, android.os.Bundle);
+ method public android.os.IBinder! onBind(android.content.Intent!);
+ method public void onCustomAction(String, android.os.Bundle!, androidx.media.MediaBrowserServiceCompat.Result<android.os.Bundle!>);
+ method public abstract androidx.media.MediaBrowserServiceCompat.BrowserRoot? onGetRoot(String, int, android.os.Bundle?);
+ method public abstract void onLoadChildren(String, androidx.media.MediaBrowserServiceCompat.Result<java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem!>!>);
+ method public void onLoadChildren(String, androidx.media.MediaBrowserServiceCompat.Result<java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem!>!>, android.os.Bundle);
+ method public void onLoadItem(String!, androidx.media.MediaBrowserServiceCompat.Result<android.support.v4.media.MediaBrowserCompat.MediaItem!>);
+ method public void onSearch(String, android.os.Bundle!, androidx.media.MediaBrowserServiceCompat.Result<java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem!>!>);
+ method public void setSessionToken(android.support.v4.media.session.MediaSessionCompat.Token!);
+ field public static final String SERVICE_INTERFACE = "android.media.browse.MediaBrowserService";
+ }
+
+ public static final class MediaBrowserServiceCompat.BrowserRoot {
+ ctor public MediaBrowserServiceCompat.BrowserRoot(String, android.os.Bundle?);
+ method public android.os.Bundle! getExtras();
+ method public String! getRootId();
+ field public static final String EXTRA_OFFLINE = "android.service.media.extra.OFFLINE";
+ field public static final String EXTRA_RECENT = "android.service.media.extra.RECENT";
+ field public static final String EXTRA_SUGGESTED = "android.service.media.extra.SUGGESTED";
+ field @Deprecated public static final String EXTRA_SUGGESTION_KEYWORDS = "android.service.media.extra.SUGGESTION_KEYWORDS";
+ }
+
+ public static class MediaBrowserServiceCompat.Result<T> {
+ method public void detach();
+ method public void sendError(android.os.Bundle!);
+ method public void sendProgressUpdate(android.os.Bundle!);
+ method public void sendResult(T!);
+ }
+
+ public final class MediaSessionManager {
+ method public static androidx.media.MediaSessionManager getSessionManager(android.content.Context);
+ method public boolean isTrustedForMediaControl(androidx.media.MediaSessionManager.RemoteUserInfo);
+ }
+
+ public static final class MediaSessionManager.RemoteUserInfo {
+ ctor public MediaSessionManager.RemoteUserInfo(String, int, int);
+ method public String getPackageName();
+ method public int getPid();
+ method public int getUid();
+ field public static final String LEGACY_CONTROLLER = "android.media.session.MediaController";
+ }
+
+ public abstract class VolumeProviderCompat {
+ ctor public VolumeProviderCompat(int, int, int);
+ method public final int getCurrentVolume();
+ method public final int getMaxVolume();
+ method public final int getVolumeControl();
+ method public Object! getVolumeProvider();
+ method public void onAdjustVolume(int);
+ method public void onSetVolumeTo(int);
+ method public void setCallback(androidx.media.VolumeProviderCompat.Callback!);
+ method public final void setCurrentVolume(int);
+ field public static final int VOLUME_CONTROL_ABSOLUTE = 2; // 0x2
+ field public static final int VOLUME_CONTROL_FIXED = 0; // 0x0
+ field public static final int VOLUME_CONTROL_RELATIVE = 1; // 0x1
+ }
+
+ public abstract static class VolumeProviderCompat.Callback {
+ ctor public VolumeProviderCompat.Callback();
+ method public abstract void onVolumeChanged(androidx.media.VolumeProviderCompat!);
+ }
+
+}
+
+package androidx.media.app {
+
+ public class NotificationCompat {
+ }
+
+ public static class NotificationCompat.DecoratedMediaCustomViewStyle extends androidx.media.app.NotificationCompat.MediaStyle {
+ ctor public NotificationCompat.DecoratedMediaCustomViewStyle();
+ }
+
+ public static class NotificationCompat.MediaStyle extends androidx.core.app.NotificationCompat.Style {
+ ctor public NotificationCompat.MediaStyle();
+ ctor public NotificationCompat.MediaStyle(androidx.core.app.NotificationCompat.Builder!);
+ method public static android.support.v4.media.session.MediaSessionCompat.Token! getMediaSession(android.app.Notification!);
+ method public androidx.media.app.NotificationCompat.MediaStyle! setCancelButtonIntent(android.app.PendingIntent!);
+ method public androidx.media.app.NotificationCompat.MediaStyle! setMediaSession(android.support.v4.media.session.MediaSessionCompat.Token!);
+ method public androidx.media.app.NotificationCompat.MediaStyle! setShowActionsInCompactView(int...);
+ method public androidx.media.app.NotificationCompat.MediaStyle! setShowCancelButton(boolean);
+ }
+
+}
+
+package androidx.media.session {
+
+ public class MediaButtonReceiver extends android.content.BroadcastReceiver {
+ ctor public MediaButtonReceiver();
+ method public static android.app.PendingIntent! buildMediaButtonPendingIntent(android.content.Context!, long);
+ method public static android.app.PendingIntent! buildMediaButtonPendingIntent(android.content.Context!, android.content.ComponentName!, long);
+ method public static android.view.KeyEvent! handleIntent(android.support.v4.media.session.MediaSessionCompat!, android.content.Intent!);
+ method public void onReceive(android.content.Context!, android.content.Intent!);
+ }
+
+}
+
diff --git a/media/api/res-1.2.0-alpha02.txt b/media/api/res-1.2.0-alpha02.txt
new file mode 100644
index 0000000..7a1e44d
--- /dev/null
+++ b/media/api/res-1.2.0-alpha02.txt
@@ -0,0 +1,5 @@
+style TextAppearance_Compat_Notification_Info_Media
+style TextAppearance_Compat_Notification_Line2_Media
+style TextAppearance_Compat_Notification_Media
+style TextAppearance_Compat_Notification_Time_Media
+style TextAppearance_Compat_Notification_Title_Media
diff --git a/media/api/restricted_1.2.0-alpha02.ignore b/media/api/restricted_1.2.0-alpha02.ignore
new file mode 100644
index 0000000..de0edac
--- /dev/null
+++ b/media/api/restricted_1.2.0-alpha02.ignore
@@ -0,0 +1,3 @@
+// Baseline format: 1.0
+ChangedThrows: android.support.v4.media.session.MediaControllerCompat#MediaControllerCompat(android.content.Context, android.support.v4.media.session.MediaSessionCompat.Token):
+ Constructor android.support.v4.media.session.MediaControllerCompat no longer throws exception android.os.RemoteException
diff --git a/media/api/restricted_1.2.0-alpha02.txt b/media/api/restricted_1.2.0-alpha02.txt
new file mode 100644
index 0000000..9c1f0db
--- /dev/null
+++ b/media/api/restricted_1.2.0-alpha02.txt
@@ -0,0 +1,743 @@
+// Signature format: 3.0
+package android.support.v4.media {
+
+ public final class MediaBrowserCompat {
+ ctor public MediaBrowserCompat(android.content.Context!, android.content.ComponentName!, android.support.v4.media.MediaBrowserCompat.ConnectionCallback!, android.os.Bundle!);
+ method public void connect();
+ method public void disconnect();
+ method public android.os.Bundle? getExtras();
+ method public void getItem(String, android.support.v4.media.MediaBrowserCompat.ItemCallback);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.os.Bundle? getNotifyChildrenChangedOptions();
+ method public String getRoot();
+ method public android.content.ComponentName getServiceComponent();
+ method public android.support.v4.media.session.MediaSessionCompat.Token getSessionToken();
+ method public boolean isConnected();
+ method public void search(String, android.os.Bundle!, android.support.v4.media.MediaBrowserCompat.SearchCallback);
+ method public void sendCustomAction(String, android.os.Bundle!, android.support.v4.media.MediaBrowserCompat.CustomActionCallback?);
+ method public void subscribe(String, android.support.v4.media.MediaBrowserCompat.SubscriptionCallback);
+ method public void subscribe(String, android.os.Bundle, android.support.v4.media.MediaBrowserCompat.SubscriptionCallback);
+ method public void unsubscribe(String);
+ method public void unsubscribe(String, android.support.v4.media.MediaBrowserCompat.SubscriptionCallback);
+ field public static final String CUSTOM_ACTION_DOWNLOAD = "android.support.v4.media.action.DOWNLOAD";
+ field public static final String CUSTOM_ACTION_REMOVE_DOWNLOADED_FILE = "android.support.v4.media.action.REMOVE_DOWNLOADED_FILE";
+ field public static final String EXTRA_DOWNLOAD_PROGRESS = "android.media.browse.extra.DOWNLOAD_PROGRESS";
+ field public static final String EXTRA_MEDIA_ID = "android.media.browse.extra.MEDIA_ID";
+ field public static final String EXTRA_PAGE = "android.media.browse.extra.PAGE";
+ field public static final String EXTRA_PAGE_SIZE = "android.media.browse.extra.PAGE_SIZE";
+ }
+
+ public static class MediaBrowserCompat.ConnectionCallback {
+ ctor public MediaBrowserCompat.ConnectionCallback();
+ method public void onConnected();
+ method public void onConnectionFailed();
+ method public void onConnectionSuspended();
+ }
+
+ public abstract static class MediaBrowserCompat.CustomActionCallback {
+ ctor public MediaBrowserCompat.CustomActionCallback();
+ method public void onError(String!, android.os.Bundle!, android.os.Bundle!);
+ method public void onProgressUpdate(String!, android.os.Bundle!, android.os.Bundle!);
+ method public void onResult(String!, android.os.Bundle!, android.os.Bundle!);
+ }
+
+ public abstract static class MediaBrowserCompat.ItemCallback {
+ ctor public MediaBrowserCompat.ItemCallback();
+ method public void onError(String);
+ method public void onItemLoaded(android.support.v4.media.MediaBrowserCompat.MediaItem!);
+ }
+
+ public static class MediaBrowserCompat.MediaItem implements android.os.Parcelable {
+ ctor public MediaBrowserCompat.MediaItem(android.support.v4.media.MediaDescriptionCompat, int);
+ method public int describeContents();
+ method public static android.support.v4.media.MediaBrowserCompat.MediaItem! fromMediaItem(Object!);
+ method public static java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem!>! fromMediaItemList(java.util.List<?>!);
+ method public android.support.v4.media.MediaDescriptionCompat getDescription();
+ method public int getFlags();
+ method public String? getMediaId();
+ method public boolean isBrowsable();
+ method public boolean isPlayable();
+ method public void writeToParcel(android.os.Parcel!, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.MediaBrowserCompat.MediaItem!>! CREATOR;
+ field public static final int FLAG_BROWSABLE = 1; // 0x1
+ field public static final int FLAG_PLAYABLE = 2; // 0x2
+ }
+
+ public abstract static class MediaBrowserCompat.SearchCallback {
+ ctor public MediaBrowserCompat.SearchCallback();
+ method public void onError(String, android.os.Bundle!);
+ method public void onSearchResult(String, android.os.Bundle!, java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem!>);
+ }
+
+ public abstract static class MediaBrowserCompat.SubscriptionCallback {
+ ctor public MediaBrowserCompat.SubscriptionCallback();
+ method public void onChildrenLoaded(String, java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem!>);
+ method public void onChildrenLoaded(String, java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem!>, android.os.Bundle);
+ method public void onError(String);
+ method public void onError(String, android.os.Bundle);
+ }
+
+ public final class MediaDescriptionCompat implements android.os.Parcelable {
+ method public int describeContents();
+ method public static android.support.v4.media.MediaDescriptionCompat! fromMediaDescription(Object!);
+ method public CharSequence? getDescription();
+ method public android.os.Bundle? getExtras();
+ method public android.graphics.Bitmap? getIconBitmap();
+ method public android.net.Uri? getIconUri();
+ method public Object! getMediaDescription();
+ method public String? getMediaId();
+ method public android.net.Uri? getMediaUri();
+ method public CharSequence? getSubtitle();
+ method public CharSequence? getTitle();
+ method public void writeToParcel(android.os.Parcel!, int);
+ field public static final long BT_FOLDER_TYPE_ALBUMS = 2L; // 0x2L
+ field public static final long BT_FOLDER_TYPE_ARTISTS = 3L; // 0x3L
+ field public static final long BT_FOLDER_TYPE_GENRES = 4L; // 0x4L
+ field public static final long BT_FOLDER_TYPE_MIXED = 0L; // 0x0L
+ field public static final long BT_FOLDER_TYPE_PLAYLISTS = 5L; // 0x5L
+ field public static final long BT_FOLDER_TYPE_TITLES = 1L; // 0x1L
+ field public static final long BT_FOLDER_TYPE_YEARS = 6L; // 0x6L
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.MediaDescriptionCompat!>! CREATOR;
+ field public static final String EXTRA_BT_FOLDER_TYPE = "android.media.extra.BT_FOLDER_TYPE";
+ field public static final String EXTRA_DOWNLOAD_STATUS = "android.media.extra.DOWNLOAD_STATUS";
+ field public static final long STATUS_DOWNLOADED = 2L; // 0x2L
+ field public static final long STATUS_DOWNLOADING = 1L; // 0x1L
+ field public static final long STATUS_NOT_DOWNLOADED = 0L; // 0x0L
+ }
+
+ public static final class MediaDescriptionCompat.Builder {
+ ctor public MediaDescriptionCompat.Builder();
+ method public android.support.v4.media.MediaDescriptionCompat! build();
+ method public android.support.v4.media.MediaDescriptionCompat.Builder! setDescription(CharSequence?);
+ method public android.support.v4.media.MediaDescriptionCompat.Builder! setExtras(android.os.Bundle?);
+ method public android.support.v4.media.MediaDescriptionCompat.Builder! setIconBitmap(android.graphics.Bitmap?);
+ method public android.support.v4.media.MediaDescriptionCompat.Builder! setIconUri(android.net.Uri?);
+ method public android.support.v4.media.MediaDescriptionCompat.Builder! setMediaId(String?);
+ method public android.support.v4.media.MediaDescriptionCompat.Builder! setMediaUri(android.net.Uri?);
+ method public android.support.v4.media.MediaDescriptionCompat.Builder! setSubtitle(CharSequence?);
+ method public android.support.v4.media.MediaDescriptionCompat.Builder! setTitle(CharSequence?);
+ }
+
+ public final class MediaMetadataCompat implements android.os.Parcelable {
+ method public boolean containsKey(String!);
+ method public int describeContents();
+ method public static android.support.v4.media.MediaMetadataCompat! fromMediaMetadata(Object!);
+ method public android.graphics.Bitmap! getBitmap(String!);
+ method public android.os.Bundle! getBundle();
+ method public android.support.v4.media.MediaDescriptionCompat! getDescription();
+ method public long getLong(String!);
+ method public Object! getMediaMetadata();
+ method public android.support.v4.media.RatingCompat! getRating(String!);
+ method public String! getString(String!);
+ method public CharSequence! getText(String!);
+ method public java.util.Set<java.lang.String!>! keySet();
+ method public int size();
+ method public void writeToParcel(android.os.Parcel!, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.MediaMetadataCompat!>! CREATOR;
+ field public static final String METADATA_KEY_ADVERTISEMENT = "android.media.metadata.ADVERTISEMENT";
+ field public static final String METADATA_KEY_ALBUM = "android.media.metadata.ALBUM";
+ field public static final String METADATA_KEY_ALBUM_ART = "android.media.metadata.ALBUM_ART";
+ field public static final String METADATA_KEY_ALBUM_ARTIST = "android.media.metadata.ALBUM_ARTIST";
+ field public static final String METADATA_KEY_ALBUM_ART_URI = "android.media.metadata.ALBUM_ART_URI";
+ field public static final String METADATA_KEY_ART = "android.media.metadata.ART";
+ field public static final String METADATA_KEY_ARTIST = "android.media.metadata.ARTIST";
+ field public static final String METADATA_KEY_ART_URI = "android.media.metadata.ART_URI";
+ field public static final String METADATA_KEY_AUTHOR = "android.media.metadata.AUTHOR";
+ field public static final String METADATA_KEY_BT_FOLDER_TYPE = "android.media.metadata.BT_FOLDER_TYPE";
+ field public static final String METADATA_KEY_COMPILATION = "android.media.metadata.COMPILATION";
+ field public static final String METADATA_KEY_COMPOSER = "android.media.metadata.COMPOSER";
+ field public static final String METADATA_KEY_DATE = "android.media.metadata.DATE";
+ field public static final String METADATA_KEY_DISC_NUMBER = "android.media.metadata.DISC_NUMBER";
+ field public static final String METADATA_KEY_DISPLAY_DESCRIPTION = "android.media.metadata.DISPLAY_DESCRIPTION";
+ field public static final String METADATA_KEY_DISPLAY_ICON = "android.media.metadata.DISPLAY_ICON";
+ field public static final String METADATA_KEY_DISPLAY_ICON_URI = "android.media.metadata.DISPLAY_ICON_URI";
+ field public static final String METADATA_KEY_DISPLAY_SUBTITLE = "android.media.metadata.DISPLAY_SUBTITLE";
+ field public static final String METADATA_KEY_DISPLAY_TITLE = "android.media.metadata.DISPLAY_TITLE";
+ field public static final String METADATA_KEY_DOWNLOAD_STATUS = "android.media.metadata.DOWNLOAD_STATUS";
+ field public static final String METADATA_KEY_DURATION = "android.media.metadata.DURATION";
+ field public static final String METADATA_KEY_GENRE = "android.media.metadata.GENRE";
+ field public static final String METADATA_KEY_MEDIA_ID = "android.media.metadata.MEDIA_ID";
+ field public static final String METADATA_KEY_MEDIA_URI = "android.media.metadata.MEDIA_URI";
+ field public static final String METADATA_KEY_NUM_TRACKS = "android.media.metadata.NUM_TRACKS";
+ field public static final String METADATA_KEY_RATING = "android.media.metadata.RATING";
+ field public static final String METADATA_KEY_TITLE = "android.media.metadata.TITLE";
+ field public static final String METADATA_KEY_TRACK_NUMBER = "android.media.metadata.TRACK_NUMBER";
+ field public static final String METADATA_KEY_USER_RATING = "android.media.metadata.USER_RATING";
+ field public static final String METADATA_KEY_WRITER = "android.media.metadata.WRITER";
+ field public static final String METADATA_KEY_YEAR = "android.media.metadata.YEAR";
+ }
+
+ public static final class MediaMetadataCompat.Builder {
+ ctor public MediaMetadataCompat.Builder();
+ ctor public MediaMetadataCompat.Builder(android.support.v4.media.MediaMetadataCompat!);
+ method public android.support.v4.media.MediaMetadataCompat! build();
+ method public android.support.v4.media.MediaMetadataCompat.Builder! putBitmap(String!, android.graphics.Bitmap!);
+ method public android.support.v4.media.MediaMetadataCompat.Builder! putLong(String!, long);
+ method public android.support.v4.media.MediaMetadataCompat.Builder! putRating(String!, android.support.v4.media.RatingCompat!);
+ method public android.support.v4.media.MediaMetadataCompat.Builder! putString(String!, String!);
+ method public android.support.v4.media.MediaMetadataCompat.Builder! putText(String!, CharSequence!);
+ }
+
+ public final class RatingCompat implements android.os.Parcelable {
+ method public int describeContents();
+ method public static android.support.v4.media.RatingCompat! fromRating(Object!);
+ method public float getPercentRating();
+ method public Object! getRating();
+ method @android.support.v4.media.RatingCompat.Style public int getRatingStyle();
+ method public float getStarRating();
+ method public boolean hasHeart();
+ method public boolean isRated();
+ method public boolean isThumbUp();
+ method public static android.support.v4.media.RatingCompat! newHeartRating(boolean);
+ method public static android.support.v4.media.RatingCompat! newPercentageRating(float);
+ method public static android.support.v4.media.RatingCompat! newStarRating(@android.support.v4.media.RatingCompat.StarStyle int, float);
+ method public static android.support.v4.media.RatingCompat! newThumbRating(boolean);
+ method public static android.support.v4.media.RatingCompat! newUnratedRating(@android.support.v4.media.RatingCompat.Style int);
+ method public void writeToParcel(android.os.Parcel!, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.RatingCompat!>! CREATOR;
+ field public static final int RATING_3_STARS = 3; // 0x3
+ field public static final int RATING_4_STARS = 4; // 0x4
+ field public static final int RATING_5_STARS = 5; // 0x5
+ field public static final int RATING_HEART = 1; // 0x1
+ field public static final int RATING_NONE = 0; // 0x0
+ field public static final int RATING_PERCENTAGE = 6; // 0x6
+ field public static final int RATING_THUMB_UP_DOWN = 2; // 0x2
+ }
+
+
+ @IntDef({android.support.v4.media.RatingCompat.RATING_NONE, android.support.v4.media.RatingCompat.RATING_HEART, android.support.v4.media.RatingCompat.RATING_THUMB_UP_DOWN, android.support.v4.media.RatingCompat.RATING_3_STARS, android.support.v4.media.RatingCompat.RATING_4_STARS, android.support.v4.media.RatingCompat.RATING_5_STARS, android.support.v4.media.RatingCompat.RATING_PERCENTAGE}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface RatingCompat.Style {
+ }
+
+}
+
+package android.support.v4.media.session {
+
+ public final class MediaControllerCompat {
+ ctor public MediaControllerCompat(android.content.Context!, android.support.v4.media.session.MediaSessionCompat);
+ ctor public MediaControllerCompat(android.content.Context!, android.support.v4.media.session.MediaSessionCompat.Token);
+ method public void addQueueItem(android.support.v4.media.MediaDescriptionCompat!);
+ method public void addQueueItem(android.support.v4.media.MediaDescriptionCompat!, int);
+ method public void adjustVolume(int, int);
+ method public boolean dispatchMediaButtonEvent(android.view.KeyEvent!);
+ method public android.os.Bundle! getExtras();
+ method public long getFlags();
+ method public static android.support.v4.media.session.MediaControllerCompat! getMediaController(android.app.Activity);
+ method public Object! getMediaController();
+ method public android.support.v4.media.MediaMetadataCompat! getMetadata();
+ method public String! getPackageName();
+ method public android.support.v4.media.session.MediaControllerCompat.PlaybackInfo! getPlaybackInfo();
+ method public android.support.v4.media.session.PlaybackStateCompat! getPlaybackState();
+ method public java.util.List<android.support.v4.media.session.MediaSessionCompat.QueueItem!>! getQueue();
+ method public CharSequence! getQueueTitle();
+ method public int getRatingType();
+ method public int getRepeatMode();
+ method public android.app.PendingIntent! getSessionActivity();
+ method public android.os.Bundle getSessionInfo();
+ method public android.support.v4.media.session.MediaSessionCompat.Token! getSessionToken();
+ method public int getShuffleMode();
+ method public android.support.v4.media.session.MediaControllerCompat.TransportControls! getTransportControls();
+ method public boolean isCaptioningEnabled();
+ method public boolean isSessionReady();
+ method public void registerCallback(android.support.v4.media.session.MediaControllerCompat.Callback);
+ method public void registerCallback(android.support.v4.media.session.MediaControllerCompat.Callback, android.os.Handler!);
+ method public void removeQueueItem(android.support.v4.media.MediaDescriptionCompat!);
+ method @Deprecated public void removeQueueItemAt(int);
+ method public void sendCommand(String, android.os.Bundle?, android.os.ResultReceiver?);
+ method public static void setMediaController(android.app.Activity, android.support.v4.media.session.MediaControllerCompat!);
+ method public void setVolumeTo(int, int);
+ method public void unregisterCallback(android.support.v4.media.session.MediaControllerCompat.Callback);
+ }
+
+ public abstract static class MediaControllerCompat.Callback implements android.os.IBinder.DeathRecipient {
+ ctor public MediaControllerCompat.Callback();
+ method public void binderDied();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.support.v4.media.session.IMediaControllerCallback! getIControllerCallback();
+ method public void onAudioInfoChanged(android.support.v4.media.session.MediaControllerCompat.PlaybackInfo!);
+ method public void onCaptioningEnabledChanged(boolean);
+ method public void onExtrasChanged(android.os.Bundle!);
+ method public void onMetadataChanged(android.support.v4.media.MediaMetadataCompat!);
+ method public void onPlaybackStateChanged(android.support.v4.media.session.PlaybackStateCompat!);
+ method public void onQueueChanged(java.util.List<android.support.v4.media.session.MediaSessionCompat.QueueItem!>!);
+ method public void onQueueTitleChanged(CharSequence!);
+ method public void onRepeatModeChanged(@android.support.v4.media.session.PlaybackStateCompat.RepeatMode int);
+ method public void onSessionDestroyed();
+ method public void onSessionEvent(String!, android.os.Bundle!);
+ method public void onSessionReady();
+ method public void onShuffleModeChanged(@android.support.v4.media.session.PlaybackStateCompat.ShuffleMode int);
+ }
+
+ public static final class MediaControllerCompat.PlaybackInfo {
+ method public androidx.media.AudioAttributesCompat getAudioAttributes();
+ method @Deprecated public int getAudioStream();
+ method public int getCurrentVolume();
+ method public int getMaxVolume();
+ method public int getPlaybackType();
+ method public int getVolumeControl();
+ field public static final int PLAYBACK_TYPE_LOCAL = 1; // 0x1
+ field public static final int PLAYBACK_TYPE_REMOTE = 2; // 0x2
+ }
+
+ public abstract static class MediaControllerCompat.TransportControls {
+ method public abstract void fastForward();
+ method public abstract void pause();
+ method public abstract void play();
+ method public abstract void playFromMediaId(String!, android.os.Bundle!);
+ method public abstract void playFromSearch(String!, android.os.Bundle!);
+ method public abstract void playFromUri(android.net.Uri!, android.os.Bundle!);
+ method public abstract void prepare();
+ method public abstract void prepareFromMediaId(String!, android.os.Bundle!);
+ method public abstract void prepareFromSearch(String!, android.os.Bundle!);
+ method public abstract void prepareFromUri(android.net.Uri!, android.os.Bundle!);
+ method public abstract void rewind();
+ method public abstract void seekTo(long);
+ method public abstract void sendCustomAction(android.support.v4.media.session.PlaybackStateCompat.CustomAction!, android.os.Bundle!);
+ method public abstract void sendCustomAction(String!, android.os.Bundle!);
+ method public abstract void setCaptioningEnabled(boolean);
+ method public void setPlaybackSpeed(float);
+ method public abstract void setRating(android.support.v4.media.RatingCompat!);
+ method public abstract void setRating(android.support.v4.media.RatingCompat!, android.os.Bundle!);
+ method public abstract void setRepeatMode(@android.support.v4.media.session.PlaybackStateCompat.RepeatMode int);
+ method public abstract void setShuffleMode(@android.support.v4.media.session.PlaybackStateCompat.ShuffleMode int);
+ method public abstract void skipToNext();
+ method public abstract void skipToPrevious();
+ method public abstract void skipToQueueItem(long);
+ method public abstract void stop();
+ field public static final String EXTRA_LEGACY_STREAM_TYPE = "android.media.session.extra.LEGACY_STREAM_TYPE";
+ }
+
+ public class MediaSessionCompat {
+ ctor public MediaSessionCompat(android.content.Context, String);
+ ctor public MediaSessionCompat(android.content.Context, String, android.content.ComponentName?, android.app.PendingIntent?);
+ ctor public MediaSessionCompat(android.content.Context, String, android.content.ComponentName?, android.app.PendingIntent?, android.os.Bundle?);
+ ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public MediaSessionCompat(android.content.Context, String, android.content.ComponentName?, android.app.PendingIntent?, android.os.Bundle?, androidx.versionedparcelable.VersionedParcelable?);
+ method public void addOnActiveChangeListener(android.support.v4.media.session.MediaSessionCompat.OnActiveChangeListener!);
+ method public static android.support.v4.media.session.MediaSessionCompat! fromMediaSession(android.content.Context!, Object!);
+ method public android.support.v4.media.session.MediaControllerCompat! getController();
+ method public final androidx.media.MediaSessionManager.RemoteUserInfo getCurrentControllerInfo();
+ method public Object! getMediaSession();
+ method public Object! getRemoteControlClient();
+ method public android.support.v4.media.session.MediaSessionCompat.Token! getSessionToken();
+ method public boolean isActive();
+ method public void release();
+ method public void removeOnActiveChangeListener(android.support.v4.media.session.MediaSessionCompat.OnActiveChangeListener!);
+ method public void sendSessionEvent(String!, android.os.Bundle!);
+ method public void setActive(boolean);
+ method public void setCallback(android.support.v4.media.session.MediaSessionCompat.Callback!);
+ method public void setCallback(android.support.v4.media.session.MediaSessionCompat.Callback!, android.os.Handler!);
+ method public void setCaptioningEnabled(boolean);
+ method public void setExtras(android.os.Bundle!);
+ method public void setFlags(int);
+ method public void setMediaButtonReceiver(android.app.PendingIntent!);
+ method public void setMetadata(android.support.v4.media.MediaMetadataCompat!);
+ method public void setPlaybackState(android.support.v4.media.session.PlaybackStateCompat!);
+ method public void setPlaybackToLocal(int);
+ method public void setPlaybackToRemote(androidx.media.VolumeProviderCompat!);
+ method public void setQueue(java.util.List<android.support.v4.media.session.MediaSessionCompat.QueueItem!>!);
+ method public void setQueueTitle(CharSequence!);
+ method public void setRatingType(@android.support.v4.media.RatingCompat.Style int);
+ method public void setRepeatMode(@android.support.v4.media.session.PlaybackStateCompat.RepeatMode int);
+ method public void setSessionActivity(android.app.PendingIntent!);
+ method public void setShuffleMode(@android.support.v4.media.session.PlaybackStateCompat.ShuffleMode int);
+ field public static final String ACTION_FLAG_AS_INAPPROPRIATE = "android.support.v4.media.session.action.FLAG_AS_INAPPROPRIATE";
+ field public static final String ACTION_FOLLOW = "android.support.v4.media.session.action.FOLLOW";
+ field public static final String ACTION_SKIP_AD = "android.support.v4.media.session.action.SKIP_AD";
+ field public static final String ACTION_UNFOLLOW = "android.support.v4.media.session.action.UNFOLLOW";
+ field public static final String ARGUMENT_MEDIA_ATTRIBUTE = "android.support.v4.media.session.ARGUMENT_MEDIA_ATTRIBUTE";
+ field public static final String ARGUMENT_MEDIA_ATTRIBUTE_VALUE = "android.support.v4.media.session.ARGUMENT_MEDIA_ATTRIBUTE_VALUE";
+ field @Deprecated public static final int FLAG_HANDLES_MEDIA_BUTTONS = 1; // 0x1
+ field public static final int FLAG_HANDLES_QUEUE_COMMANDS = 4; // 0x4
+ field @Deprecated public static final int FLAG_HANDLES_TRANSPORT_CONTROLS = 2; // 0x2
+ field public static final int MEDIA_ATTRIBUTE_ALBUM = 1; // 0x1
+ field public static final int MEDIA_ATTRIBUTE_ARTIST = 0; // 0x0
+ field public static final int MEDIA_ATTRIBUTE_PLAYLIST = 2; // 0x2
+ }
+
+ public abstract static class MediaSessionCompat.Callback {
+ ctor public MediaSessionCompat.Callback();
+ method public void onAddQueueItem(android.support.v4.media.MediaDescriptionCompat!);
+ method public void onAddQueueItem(android.support.v4.media.MediaDescriptionCompat!, int);
+ method public void onCommand(String!, android.os.Bundle!, android.os.ResultReceiver!);
+ method public void onCustomAction(String!, android.os.Bundle!);
+ method public void onFastForward();
+ method public boolean onMediaButtonEvent(android.content.Intent!);
+ method public void onPause();
+ method public void onPlay();
+ method public void onPlayFromMediaId(String!, android.os.Bundle!);
+ method public void onPlayFromSearch(String!, android.os.Bundle!);
+ method public void onPlayFromUri(android.net.Uri!, android.os.Bundle!);
+ method public void onPrepare();
+ method public void onPrepareFromMediaId(String!, android.os.Bundle!);
+ method public void onPrepareFromSearch(String!, android.os.Bundle!);
+ method public void onPrepareFromUri(android.net.Uri!, android.os.Bundle!);
+ method public void onRemoveQueueItem(android.support.v4.media.MediaDescriptionCompat!);
+ method @Deprecated public void onRemoveQueueItemAt(int);
+ method public void onRewind();
+ method public void onSeekTo(long);
+ method public void onSetCaptioningEnabled(boolean);
+ method public void onSetPlaybackSpeed(float);
+ method public void onSetRating(android.support.v4.media.RatingCompat!);
+ method public void onSetRating(android.support.v4.media.RatingCompat!, android.os.Bundle!);
+ method public void onSetRepeatMode(@android.support.v4.media.session.PlaybackStateCompat.RepeatMode int);
+ method public void onSetShuffleMode(@android.support.v4.media.session.PlaybackStateCompat.ShuffleMode int);
+ method public void onSkipToNext();
+ method public void onSkipToPrevious();
+ method public void onSkipToQueueItem(long);
+ method public void onStop();
+ }
+
+ public static interface MediaSessionCompat.OnActiveChangeListener {
+ method public void onActiveChanged();
+ }
+
+ public static final class MediaSessionCompat.QueueItem implements android.os.Parcelable {
+ ctor public MediaSessionCompat.QueueItem(android.support.v4.media.MediaDescriptionCompat!, long);
+ method public int describeContents();
+ method public static android.support.v4.media.session.MediaSessionCompat.QueueItem! fromQueueItem(Object!);
+ method public static java.util.List<android.support.v4.media.session.MediaSessionCompat.QueueItem!>! fromQueueItemList(java.util.List<?>!);
+ method public android.support.v4.media.MediaDescriptionCompat! getDescription();
+ method public long getQueueId();
+ method public Object! getQueueItem();
+ method public void writeToParcel(android.os.Parcel!, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.session.MediaSessionCompat.QueueItem!>! CREATOR;
+ field public static final int UNKNOWN_ID = -1; // 0xffffffff
+ }
+
+ public static final class MediaSessionCompat.Token implements android.os.Parcelable {
+ method public int describeContents();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static android.support.v4.media.session.MediaSessionCompat.Token! fromBundle(android.os.Bundle!);
+ method public static android.support.v4.media.session.MediaSessionCompat.Token! fromToken(Object!);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.versionedparcelable.VersionedParcelable! getSession2Token();
+ method public Object! getToken();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSession2Token(androidx.versionedparcelable.VersionedParcelable!);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.os.Bundle! toBundle();
+ method public void writeToParcel(android.os.Parcel!, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.session.MediaSessionCompat.Token!>! CREATOR;
+ }
+
+ public class ParcelableVolumeInfo implements android.os.Parcelable {
+ ctor public ParcelableVolumeInfo(int, int, int, int, int);
+ ctor public ParcelableVolumeInfo(android.os.Parcel!);
+ method public int describeContents();
+ method public void writeToParcel(android.os.Parcel!, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.session.ParcelableVolumeInfo!>! CREATOR;
+ field public int audioStream;
+ field public int controlType;
+ field public int currentVolume;
+ field public int maxVolume;
+ field public int volumeType;
+ }
+
+ public final class PlaybackStateCompat implements android.os.Parcelable {
+ method public int describeContents();
+ method public static android.support.v4.media.session.PlaybackStateCompat! fromPlaybackState(Object!);
+ method @android.support.v4.media.session.PlaybackStateCompat.Actions public long getActions();
+ method public long getActiveQueueItemId();
+ method public long getBufferedPosition();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public long getCurrentPosition(Long!);
+ method public java.util.List<android.support.v4.media.session.PlaybackStateCompat.CustomAction!>! getCustomActions();
+ method public int getErrorCode();
+ method public CharSequence! getErrorMessage();
+ method public android.os.Bundle? getExtras();
+ method public long getLastPositionUpdateTime();
+ method public float getPlaybackSpeed();
+ method public Object! getPlaybackState();
+ method public long getPosition();
+ method @android.support.v4.media.session.PlaybackStateCompat.State public int getState();
+ method public static int toKeyCode(@android.support.v4.media.session.PlaybackStateCompat.MediaKeyAction long);
+ method public void writeToParcel(android.os.Parcel!, int);
+ field public static final long ACTION_FAST_FORWARD = 64L; // 0x40L
+ field public static final long ACTION_PAUSE = 2L; // 0x2L
+ field public static final long ACTION_PLAY = 4L; // 0x4L
+ field public static final long ACTION_PLAY_FROM_MEDIA_ID = 1024L; // 0x400L
+ field public static final long ACTION_PLAY_FROM_SEARCH = 2048L; // 0x800L
+ field public static final long ACTION_PLAY_FROM_URI = 8192L; // 0x2000L
+ field public static final long ACTION_PLAY_PAUSE = 512L; // 0x200L
+ field public static final long ACTION_PREPARE = 16384L; // 0x4000L
+ field public static final long ACTION_PREPARE_FROM_MEDIA_ID = 32768L; // 0x8000L
+ field public static final long ACTION_PREPARE_FROM_SEARCH = 65536L; // 0x10000L
+ field public static final long ACTION_PREPARE_FROM_URI = 131072L; // 0x20000L
+ field public static final long ACTION_REWIND = 8L; // 0x8L
+ field public static final long ACTION_SEEK_TO = 256L; // 0x100L
+ field public static final long ACTION_SET_CAPTIONING_ENABLED = 1048576L; // 0x100000L
+ field public static final long ACTION_SET_RATING = 128L; // 0x80L
+ field public static final long ACTION_SET_REPEAT_MODE = 262144L; // 0x40000L
+ field public static final long ACTION_SET_SHUFFLE_MODE = 2097152L; // 0x200000L
+ field @Deprecated public static final long ACTION_SET_SHUFFLE_MODE_ENABLED = 524288L; // 0x80000L
+ field public static final long ACTION_SKIP_TO_NEXT = 32L; // 0x20L
+ field public static final long ACTION_SKIP_TO_PREVIOUS = 16L; // 0x10L
+ field public static final long ACTION_SKIP_TO_QUEUE_ITEM = 4096L; // 0x1000L
+ field public static final long ACTION_STOP = 1L; // 0x1L
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.session.PlaybackStateCompat!>! CREATOR;
+ field public static final int ERROR_CODE_ACTION_ABORTED = 10; // 0xa
+ field public static final int ERROR_CODE_APP_ERROR = 1; // 0x1
+ field public static final int ERROR_CODE_AUTHENTICATION_EXPIRED = 3; // 0x3
+ field public static final int ERROR_CODE_CONCURRENT_STREAM_LIMIT = 5; // 0x5
+ field public static final int ERROR_CODE_CONTENT_ALREADY_PLAYING = 8; // 0x8
+ field public static final int ERROR_CODE_END_OF_QUEUE = 11; // 0xb
+ field public static final int ERROR_CODE_NOT_AVAILABLE_IN_REGION = 7; // 0x7
+ field public static final int ERROR_CODE_NOT_SUPPORTED = 2; // 0x2
+ field public static final int ERROR_CODE_PARENTAL_CONTROL_RESTRICTED = 6; // 0x6
+ field public static final int ERROR_CODE_PREMIUM_ACCOUNT_REQUIRED = 4; // 0x4
+ field public static final int ERROR_CODE_SKIP_LIMIT_REACHED = 9; // 0x9
+ field public static final int ERROR_CODE_UNKNOWN_ERROR = 0; // 0x0
+ field public static final long PLAYBACK_POSITION_UNKNOWN = -1L; // 0xffffffffffffffffL
+ field public static final int REPEAT_MODE_ALL = 2; // 0x2
+ field public static final int REPEAT_MODE_GROUP = 3; // 0x3
+ field public static final int REPEAT_MODE_INVALID = -1; // 0xffffffff
+ field public static final int REPEAT_MODE_NONE = 0; // 0x0
+ field public static final int REPEAT_MODE_ONE = 1; // 0x1
+ field public static final int SHUFFLE_MODE_ALL = 1; // 0x1
+ field public static final int SHUFFLE_MODE_GROUP = 2; // 0x2
+ field public static final int SHUFFLE_MODE_INVALID = -1; // 0xffffffff
+ field public static final int SHUFFLE_MODE_NONE = 0; // 0x0
+ field public static final int STATE_BUFFERING = 6; // 0x6
+ field public static final int STATE_CONNECTING = 8; // 0x8
+ field public static final int STATE_ERROR = 7; // 0x7
+ field public static final int STATE_FAST_FORWARDING = 4; // 0x4
+ field public static final int STATE_NONE = 0; // 0x0
+ field public static final int STATE_PAUSED = 2; // 0x2
+ field public static final int STATE_PLAYING = 3; // 0x3
+ field public static final int STATE_REWINDING = 5; // 0x5
+ field public static final int STATE_SKIPPING_TO_NEXT = 10; // 0xa
+ field public static final int STATE_SKIPPING_TO_PREVIOUS = 9; // 0x9
+ field public static final int STATE_SKIPPING_TO_QUEUE_ITEM = 11; // 0xb
+ field public static final int STATE_STOPPED = 1; // 0x1
+ }
+
+ @LongDef(flag=true, value={android.support.v4.media.session.PlaybackStateCompat.ACTION_STOP, android.support.v4.media.session.PlaybackStateCompat.ACTION_PAUSE, android.support.v4.media.session.PlaybackStateCompat.ACTION_PLAY, android.support.v4.media.session.PlaybackStateCompat.ACTION_REWIND, android.support.v4.media.session.PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS, android.support.v4.media.session.PlaybackStateCompat.ACTION_SKIP_TO_NEXT, android.support.v4.media.session.PlaybackStateCompat.ACTION_FAST_FORWARD, android.support.v4.media.session.PlaybackStateCompat.ACTION_SET_RATING, android.support.v4.media.session.PlaybackStateCompat.ACTION_SEEK_TO, android.support.v4.media.session.PlaybackStateCompat.ACTION_PLAY_PAUSE, android.support.v4.media.session.PlaybackStateCompat.ACTION_PLAY_FROM_MEDIA_ID, android.support.v4.media.session.PlaybackStateCompat.ACTION_PLAY_FROM_SEARCH, android.support.v4.media.session.PlaybackStateCompat.ACTION_SKIP_TO_QUEUE_ITEM, android.support.v4.media.session.PlaybackStateCompat.ACTION_PLAY_FROM_URI, android.support.v4.media.session.PlaybackStateCompat.ACTION_PREPARE, android.support.v4.media.session.PlaybackStateCompat.ACTION_PREPARE_FROM_MEDIA_ID, android.support.v4.media.session.PlaybackStateCompat.ACTION_PREPARE_FROM_SEARCH, android.support.v4.media.session.PlaybackStateCompat.ACTION_PREPARE_FROM_URI, android.support.v4.media.session.PlaybackStateCompat.ACTION_SET_REPEAT_MODE, android.support.v4.media.session.PlaybackStateCompat.ACTION_SET_SHUFFLE_MODE, android.support.v4.media.session.PlaybackStateCompat.ACTION_SET_CAPTIONING_ENABLED}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface PlaybackStateCompat.Actions {
+ }
+
+ public static final class PlaybackStateCompat.Builder {
+ ctor public PlaybackStateCompat.Builder();
+ ctor public PlaybackStateCompat.Builder(android.support.v4.media.session.PlaybackStateCompat!);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder! addCustomAction(String!, String!, int);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder! addCustomAction(android.support.v4.media.session.PlaybackStateCompat.CustomAction!);
+ method public android.support.v4.media.session.PlaybackStateCompat! build();
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder! setActions(@android.support.v4.media.session.PlaybackStateCompat.Actions long);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder! setActiveQueueItemId(long);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder! setBufferedPosition(long);
+ method @Deprecated public android.support.v4.media.session.PlaybackStateCompat.Builder! setErrorMessage(CharSequence!);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder! setErrorMessage(int, CharSequence!);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder! setExtras(android.os.Bundle!);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder! setState(@android.support.v4.media.session.PlaybackStateCompat.State int, long, float);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder! setState(@android.support.v4.media.session.PlaybackStateCompat.State int, long, float, long);
+ }
+
+ public static final class PlaybackStateCompat.CustomAction implements android.os.Parcelable {
+ method public int describeContents();
+ method public static android.support.v4.media.session.PlaybackStateCompat.CustomAction! fromCustomAction(Object!);
+ method public String! getAction();
+ method public Object! getCustomAction();
+ method public android.os.Bundle! getExtras();
+ method public int getIcon();
+ method public CharSequence! getName();
+ method public void writeToParcel(android.os.Parcel!, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.session.PlaybackStateCompat.CustomAction!>! CREATOR;
+ }
+
+ public static final class PlaybackStateCompat.CustomAction.Builder {
+ ctor public PlaybackStateCompat.CustomAction.Builder(String!, CharSequence!, int);
+ method public android.support.v4.media.session.PlaybackStateCompat.CustomAction! build();
+ method public android.support.v4.media.session.PlaybackStateCompat.CustomAction.Builder! setExtras(android.os.Bundle!);
+ }
+
+
+ @IntDef({android.support.v4.media.session.PlaybackStateCompat.REPEAT_MODE_INVALID, android.support.v4.media.session.PlaybackStateCompat.REPEAT_MODE_NONE, android.support.v4.media.session.PlaybackStateCompat.REPEAT_MODE_ONE, android.support.v4.media.session.PlaybackStateCompat.REPEAT_MODE_ALL, android.support.v4.media.session.PlaybackStateCompat.REPEAT_MODE_GROUP}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface PlaybackStateCompat.RepeatMode {
+ }
+
+ @IntDef({android.support.v4.media.session.PlaybackStateCompat.SHUFFLE_MODE_INVALID, android.support.v4.media.session.PlaybackStateCompat.SHUFFLE_MODE_NONE, android.support.v4.media.session.PlaybackStateCompat.SHUFFLE_MODE_ALL, android.support.v4.media.session.PlaybackStateCompat.SHUFFLE_MODE_GROUP}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface PlaybackStateCompat.ShuffleMode {
+ }
+
+ @IntDef({android.support.v4.media.session.PlaybackStateCompat.STATE_NONE, android.support.v4.media.session.PlaybackStateCompat.STATE_STOPPED, android.support.v4.media.session.PlaybackStateCompat.STATE_PAUSED, android.support.v4.media.session.PlaybackStateCompat.STATE_PLAYING, android.support.v4.media.session.PlaybackStateCompat.STATE_FAST_FORWARDING, android.support.v4.media.session.PlaybackStateCompat.STATE_REWINDING, android.support.v4.media.session.PlaybackStateCompat.STATE_BUFFERING, android.support.v4.media.session.PlaybackStateCompat.STATE_ERROR, android.support.v4.media.session.PlaybackStateCompat.STATE_CONNECTING, android.support.v4.media.session.PlaybackStateCompat.STATE_SKIPPING_TO_PREVIOUS, android.support.v4.media.session.PlaybackStateCompat.STATE_SKIPPING_TO_NEXT, android.support.v4.media.session.PlaybackStateCompat.STATE_SKIPPING_TO_QUEUE_ITEM}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface PlaybackStateCompat.State {
+ }
+
+}
+
+package androidx.media {
+
+ public class AudioAttributesCompat implements androidx.versionedparcelable.VersionedParcelable {
+ method public int getContentType();
+ method public int getFlags();
+ method public int getLegacyStreamType();
+ method @androidx.media.AudioAttributesCompat.AttributeUsage public int getUsage();
+ method public int getVolumeControlStream();
+ method public Object? unwrap();
+ method public static androidx.media.AudioAttributesCompat? wrap(Object);
+ field public static final int CONTENT_TYPE_MOVIE = 3; // 0x3
+ field public static final int CONTENT_TYPE_MUSIC = 2; // 0x2
+ field public static final int CONTENT_TYPE_SONIFICATION = 4; // 0x4
+ field public static final int CONTENT_TYPE_SPEECH = 1; // 0x1
+ field public static final int CONTENT_TYPE_UNKNOWN = 0; // 0x0
+ field public static final int FLAG_AUDIBILITY_ENFORCED = 1; // 0x1
+ field public static final int FLAG_HW_AV_SYNC = 16; // 0x10
+ field public static final int USAGE_ALARM = 4; // 0x4
+ field public static final int USAGE_ASSISTANCE_ACCESSIBILITY = 11; // 0xb
+ field public static final int USAGE_ASSISTANCE_NAVIGATION_GUIDANCE = 12; // 0xc
+ field public static final int USAGE_ASSISTANCE_SONIFICATION = 13; // 0xd
+ field public static final int USAGE_ASSISTANT = 16; // 0x10
+ field public static final int USAGE_GAME = 14; // 0xe
+ field public static final int USAGE_MEDIA = 1; // 0x1
+ field public static final int USAGE_NOTIFICATION = 5; // 0x5
+ field public static final int USAGE_NOTIFICATION_COMMUNICATION_DELAYED = 9; // 0x9
+ field public static final int USAGE_NOTIFICATION_COMMUNICATION_INSTANT = 8; // 0x8
+ field public static final int USAGE_NOTIFICATION_COMMUNICATION_REQUEST = 7; // 0x7
+ field public static final int USAGE_NOTIFICATION_EVENT = 10; // 0xa
+ field public static final int USAGE_NOTIFICATION_RINGTONE = 6; // 0x6
+ field public static final int USAGE_UNKNOWN = 0; // 0x0
+ field public static final int USAGE_VOICE_COMMUNICATION = 2; // 0x2
+ field public static final int USAGE_VOICE_COMMUNICATION_SIGNALLING = 3; // 0x3
+ }
+
+
+
+ public static class AudioAttributesCompat.Builder {
+ ctor public AudioAttributesCompat.Builder();
+ ctor public AudioAttributesCompat.Builder(androidx.media.AudioAttributesCompat!);
+ method public androidx.media.AudioAttributesCompat! build();
+ method public androidx.media.AudioAttributesCompat.Builder! setContentType(@androidx.media.AudioAttributesCompat.AttributeContentType int);
+ method public androidx.media.AudioAttributesCompat.Builder! setFlags(int);
+ method public androidx.media.AudioAttributesCompat.Builder! setLegacyStreamType(int);
+ method public androidx.media.AudioAttributesCompat.Builder! setUsage(@androidx.media.AudioAttributesCompat.AttributeUsage int);
+ }
+
+
+
+
+ public class AudioFocusRequestCompat {
+ method public androidx.media.AudioAttributesCompat getAudioAttributesCompat();
+ method public android.os.Handler getFocusChangeHandler();
+ method public int getFocusGain();
+ method public android.media.AudioManager.OnAudioFocusChangeListener getOnAudioFocusChangeListener();
+ method public boolean willPauseWhenDucked();
+ }
+
+ public static final class AudioFocusRequestCompat.Builder {
+ ctor public AudioFocusRequestCompat.Builder(int);
+ ctor public AudioFocusRequestCompat.Builder(androidx.media.AudioFocusRequestCompat);
+ method public androidx.media.AudioFocusRequestCompat! build();
+ method public androidx.media.AudioFocusRequestCompat.Builder setAudioAttributes(androidx.media.AudioAttributesCompat);
+ method public androidx.media.AudioFocusRequestCompat.Builder setFocusGain(int);
+ method public androidx.media.AudioFocusRequestCompat.Builder setOnAudioFocusChangeListener(android.media.AudioManager.OnAudioFocusChangeListener);
+ method public androidx.media.AudioFocusRequestCompat.Builder setOnAudioFocusChangeListener(android.media.AudioManager.OnAudioFocusChangeListener, android.os.Handler);
+ method public androidx.media.AudioFocusRequestCompat.Builder setWillPauseWhenDucked(boolean);
+ }
+
+ public final class AudioManagerCompat {
+ method public static int abandonAudioFocusRequest(android.media.AudioManager, androidx.media.AudioFocusRequestCompat);
+ method public static int requestAudioFocus(android.media.AudioManager, androidx.media.AudioFocusRequestCompat);
+ field public static final int AUDIOFOCUS_GAIN = 1; // 0x1
+ field public static final int AUDIOFOCUS_GAIN_TRANSIENT = 2; // 0x2
+ field public static final int AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE = 4; // 0x4
+ field public static final int AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK = 3; // 0x3
+ }
+
+
+
+ public abstract class MediaBrowserServiceCompat extends android.app.Service {
+ ctor public MediaBrowserServiceCompat();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void attachToBaseContext(android.content.Context!);
+ method public void dump(java.io.FileDescriptor!, java.io.PrintWriter!, String![]!);
+ method public final android.os.Bundle! getBrowserRootHints();
+ method public final androidx.media.MediaSessionManager.RemoteUserInfo getCurrentBrowserInfo();
+ method public android.support.v4.media.session.MediaSessionCompat.Token? getSessionToken();
+ method public void notifyChildrenChanged(String);
+ method public void notifyChildrenChanged(String, android.os.Bundle);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void notifyChildrenChanged(androidx.media.MediaSessionManager.RemoteUserInfo, String, android.os.Bundle);
+ method public android.os.IBinder! onBind(android.content.Intent!);
+ method public void onCustomAction(String, android.os.Bundle!, androidx.media.MediaBrowserServiceCompat.Result<android.os.Bundle!>);
+ method public abstract androidx.media.MediaBrowserServiceCompat.BrowserRoot? onGetRoot(String, int, android.os.Bundle?);
+ method public abstract void onLoadChildren(String, androidx.media.MediaBrowserServiceCompat.Result<java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem!>!>);
+ method public void onLoadChildren(String, androidx.media.MediaBrowserServiceCompat.Result<java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem!>!>, android.os.Bundle);
+ method public void onLoadItem(String!, androidx.media.MediaBrowserServiceCompat.Result<android.support.v4.media.MediaBrowserCompat.MediaItem!>);
+ method public void onSearch(String, android.os.Bundle!, androidx.media.MediaBrowserServiceCompat.Result<java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem!>!>);
+ method public void setSessionToken(android.support.v4.media.session.MediaSessionCompat.Token!);
+ field public static final String SERVICE_INTERFACE = "android.media.browse.MediaBrowserService";
+ }
+
+ public static final class MediaBrowserServiceCompat.BrowserRoot {
+ ctor public MediaBrowserServiceCompat.BrowserRoot(String, android.os.Bundle?);
+ method public android.os.Bundle! getExtras();
+ method public String! getRootId();
+ field public static final String EXTRA_OFFLINE = "android.service.media.extra.OFFLINE";
+ field public static final String EXTRA_RECENT = "android.service.media.extra.RECENT";
+ field public static final String EXTRA_SUGGESTED = "android.service.media.extra.SUGGESTED";
+ field @Deprecated public static final String EXTRA_SUGGESTION_KEYWORDS = "android.service.media.extra.SUGGESTION_KEYWORDS";
+ }
+
+ public static class MediaBrowserServiceCompat.Result<T> {
+ method public void detach();
+ method public void sendError(android.os.Bundle!);
+ method public void sendProgressUpdate(android.os.Bundle!);
+ method public void sendResult(T!);
+ }
+
+ public final class MediaSessionManager {
+ method public static androidx.media.MediaSessionManager getSessionManager(android.content.Context);
+ method public boolean isTrustedForMediaControl(androidx.media.MediaSessionManager.RemoteUserInfo);
+ }
+
+ public static final class MediaSessionManager.RemoteUserInfo {
+ ctor public MediaSessionManager.RemoteUserInfo(String, int, int);
+ method public String getPackageName();
+ method public int getPid();
+ method public int getUid();
+ field public static final String LEGACY_CONTROLLER = "android.media.session.MediaController";
+ }
+
+ public abstract class VolumeProviderCompat {
+ ctor public VolumeProviderCompat(@androidx.media.VolumeProviderCompat.ControlType int, int, int);
+ method public final int getCurrentVolume();
+ method public final int getMaxVolume();
+ method @androidx.media.VolumeProviderCompat.ControlType public final int getVolumeControl();
+ method public Object! getVolumeProvider();
+ method public void onAdjustVolume(int);
+ method public void onSetVolumeTo(int);
+ method public void setCallback(androidx.media.VolumeProviderCompat.Callback!);
+ method public final void setCurrentVolume(int);
+ field public static final int VOLUME_CONTROL_ABSOLUTE = 2; // 0x2
+ field public static final int VOLUME_CONTROL_FIXED = 0; // 0x0
+ field public static final int VOLUME_CONTROL_RELATIVE = 1; // 0x1
+ }
+
+ public abstract static class VolumeProviderCompat.Callback {
+ ctor public VolumeProviderCompat.Callback();
+ method public abstract void onVolumeChanged(androidx.media.VolumeProviderCompat!);
+ }
+
+ @IntDef({androidx.media.VolumeProviderCompat.VOLUME_CONTROL_FIXED, androidx.media.VolumeProviderCompat.VOLUME_CONTROL_RELATIVE, androidx.media.VolumeProviderCompat.VOLUME_CONTROL_ABSOLUTE}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface VolumeProviderCompat.ControlType {
+ }
+
+}
+
+package androidx.media.app {
+
+ public class NotificationCompat {
+ }
+
+ public static class NotificationCompat.DecoratedMediaCustomViewStyle extends androidx.media.app.NotificationCompat.MediaStyle {
+ ctor public NotificationCompat.DecoratedMediaCustomViewStyle();
+ }
+
+ public static class NotificationCompat.MediaStyle extends androidx.core.app.NotificationCompat.Style {
+ ctor public NotificationCompat.MediaStyle();
+ ctor public NotificationCompat.MediaStyle(androidx.core.app.NotificationCompat.Builder!);
+ method public static android.support.v4.media.session.MediaSessionCompat.Token! getMediaSession(android.app.Notification!);
+ method public androidx.media.app.NotificationCompat.MediaStyle! setCancelButtonIntent(android.app.PendingIntent!);
+ method public androidx.media.app.NotificationCompat.MediaStyle! setMediaSession(android.support.v4.media.session.MediaSessionCompat.Token!);
+ method public androidx.media.app.NotificationCompat.MediaStyle! setShowActionsInCompactView(int...);
+ method public androidx.media.app.NotificationCompat.MediaStyle! setShowCancelButton(boolean);
+ }
+
+}
+
+package androidx.media.session {
+
+ public class MediaButtonReceiver extends android.content.BroadcastReceiver {
+ ctor public MediaButtonReceiver();
+ method public static android.app.PendingIntent! buildMediaButtonPendingIntent(android.content.Context!, @android.support.v4.media.session.PlaybackStateCompat.MediaKeyAction long);
+ method public static android.app.PendingIntent! buildMediaButtonPendingIntent(android.content.Context!, android.content.ComponentName!, @android.support.v4.media.session.PlaybackStateCompat.MediaKeyAction long);
+ method public static android.view.KeyEvent! handleIntent(android.support.v4.media.session.MediaSessionCompat!, android.content.Intent!);
+ method public void onReceive(android.content.Context!, android.content.Intent!);
+ }
+
+}
+
diff --git a/media2/common/src/main/java/androidx/media2/common/SessionPlayer.java b/media2/common/src/main/java/androidx/media2/common/SessionPlayer.java
index cbf6ba9..8fd0b11 100644
--- a/media2/common/src/main/java/androidx/media2/common/SessionPlayer.java
+++ b/media2/common/src/main/java/androidx/media2/common/SessionPlayer.java
@@ -907,7 +907,9 @@
}
/**
- * Gets the list of tracks.
+ * Gets the full list of selected and unselected tracks that the media contains. The order of
+ * the list is irrelevant as different players expose tracks in different ways, but the tracks
+ * will generally be ordered based on track type.
* <p>
* The types of tracks supported may vary based on player implementation.
*
diff --git a/media2/session/api/1.1.0-alpha01.txt b/media2/session/api/1.1.0-alpha01.txt
index c8258c9..036185a 100644
--- a/media2/session/api/1.1.0-alpha01.txt
+++ b/media2/session/api/1.1.0-alpha01.txt
@@ -74,7 +74,7 @@
method public androidx.media2.common.MediaMetadata? getPlaylistMetadata();
method public int getPreviousMediaItemIndex();
method @androidx.media2.common.SessionPlayer.RepeatMode public int getRepeatMode();
- method public androidx.media2.common.SessionPlayer.TrackInfo? getSelectedTrack(int);
+ method public androidx.media2.common.SessionPlayer.TrackInfo? getSelectedTrack(@androidx.media2.common.SessionPlayer.TrackInfo.MediaTrackType int);
method public android.app.PendingIntent? getSessionActivity();
method @androidx.media2.common.SessionPlayer.ShuffleMode public int getShuffleMode();
method public java.util.List<androidx.media2.common.SessionPlayer.TrackInfo!> getTracks();
diff --git a/media2/session/api/current.txt b/media2/session/api/current.txt
index c8258c9..036185a 100644
--- a/media2/session/api/current.txt
+++ b/media2/session/api/current.txt
@@ -74,7 +74,7 @@
method public androidx.media2.common.MediaMetadata? getPlaylistMetadata();
method public int getPreviousMediaItemIndex();
method @androidx.media2.common.SessionPlayer.RepeatMode public int getRepeatMode();
- method public androidx.media2.common.SessionPlayer.TrackInfo? getSelectedTrack(int);
+ method public androidx.media2.common.SessionPlayer.TrackInfo? getSelectedTrack(@androidx.media2.common.SessionPlayer.TrackInfo.MediaTrackType int);
method public android.app.PendingIntent? getSessionActivity();
method @androidx.media2.common.SessionPlayer.ShuffleMode public int getShuffleMode();
method public java.util.List<androidx.media2.common.SessionPlayer.TrackInfo!> getTracks();
diff --git a/media2/session/api/public_plus_experimental_1.1.0-alpha01.txt b/media2/session/api/public_plus_experimental_1.1.0-alpha01.txt
index c8258c9..036185a 100644
--- a/media2/session/api/public_plus_experimental_1.1.0-alpha01.txt
+++ b/media2/session/api/public_plus_experimental_1.1.0-alpha01.txt
@@ -74,7 +74,7 @@
method public androidx.media2.common.MediaMetadata? getPlaylistMetadata();
method public int getPreviousMediaItemIndex();
method @androidx.media2.common.SessionPlayer.RepeatMode public int getRepeatMode();
- method public androidx.media2.common.SessionPlayer.TrackInfo? getSelectedTrack(int);
+ method public androidx.media2.common.SessionPlayer.TrackInfo? getSelectedTrack(@androidx.media2.common.SessionPlayer.TrackInfo.MediaTrackType int);
method public android.app.PendingIntent? getSessionActivity();
method @androidx.media2.common.SessionPlayer.ShuffleMode public int getShuffleMode();
method public java.util.List<androidx.media2.common.SessionPlayer.TrackInfo!> getTracks();
diff --git a/media2/session/api/public_plus_experimental_current.txt b/media2/session/api/public_plus_experimental_current.txt
index c8258c9..036185a 100644
--- a/media2/session/api/public_plus_experimental_current.txt
+++ b/media2/session/api/public_plus_experimental_current.txt
@@ -74,7 +74,7 @@
method public androidx.media2.common.MediaMetadata? getPlaylistMetadata();
method public int getPreviousMediaItemIndex();
method @androidx.media2.common.SessionPlayer.RepeatMode public int getRepeatMode();
- method public androidx.media2.common.SessionPlayer.TrackInfo? getSelectedTrack(int);
+ method public androidx.media2.common.SessionPlayer.TrackInfo? getSelectedTrack(@androidx.media2.common.SessionPlayer.TrackInfo.MediaTrackType int);
method public android.app.PendingIntent? getSessionActivity();
method @androidx.media2.common.SessionPlayer.ShuffleMode public int getShuffleMode();
method public java.util.List<androidx.media2.common.SessionPlayer.TrackInfo!> getTracks();
diff --git a/media2/session/api/restricted_1.1.0-alpha01.txt b/media2/session/api/restricted_1.1.0-alpha01.txt
index 9214197..5d71a69 100644
--- a/media2/session/api/restricted_1.1.0-alpha01.txt
+++ b/media2/session/api/restricted_1.1.0-alpha01.txt
@@ -75,7 +75,7 @@
method public androidx.media2.common.MediaMetadata? getPlaylistMetadata();
method public int getPreviousMediaItemIndex();
method @androidx.media2.common.SessionPlayer.RepeatMode public int getRepeatMode();
- method public androidx.media2.common.SessionPlayer.TrackInfo? getSelectedTrack(int);
+ method public androidx.media2.common.SessionPlayer.TrackInfo? getSelectedTrack(@androidx.media2.common.SessionPlayer.TrackInfo.MediaTrackType int);
method public android.app.PendingIntent? getSessionActivity();
method @androidx.media2.common.SessionPlayer.ShuffleMode public int getShuffleMode();
method public java.util.List<androidx.media2.common.SessionPlayer.TrackInfo!> getTracks();
diff --git a/media2/session/api/restricted_current.txt b/media2/session/api/restricted_current.txt
index 9214197..5d71a69 100644
--- a/media2/session/api/restricted_current.txt
+++ b/media2/session/api/restricted_current.txt
@@ -75,7 +75,7 @@
method public androidx.media2.common.MediaMetadata? getPlaylistMetadata();
method public int getPreviousMediaItemIndex();
method @androidx.media2.common.SessionPlayer.RepeatMode public int getRepeatMode();
- method public androidx.media2.common.SessionPlayer.TrackInfo? getSelectedTrack(int);
+ method public androidx.media2.common.SessionPlayer.TrackInfo? getSelectedTrack(@androidx.media2.common.SessionPlayer.TrackInfo.MediaTrackType int);
method public android.app.PendingIntent? getSessionActivity();
method @androidx.media2.common.SessionPlayer.ShuffleMode public int getShuffleMode();
method public java.util.List<androidx.media2.common.SessionPlayer.TrackInfo!> getTracks();
diff --git a/media2/session/src/main/java/androidx/media2/session/MediaController.java b/media2/session/src/main/java/androidx/media2/session/MediaController.java
index 1966f08..0a5d41c 100644
--- a/media2/session/src/main/java/androidx/media2/session/MediaController.java
+++ b/media2/session/src/main/java/androidx/media2/session/MediaController.java
@@ -1278,7 +1278,7 @@
* @return selected track info
*/
@Nullable
- public TrackInfo getSelectedTrack(int trackType) {
+ public TrackInfo getSelectedTrack(@TrackInfo.MediaTrackType int trackType) {
return isConnected() ? getImpl().getSelectedTrack(trackType) : null;
}
diff --git a/room/compiler/src/main/kotlin/androidx/room/ext/javapoet_ext.kt b/room/compiler/src/main/kotlin/androidx/room/ext/javapoet_ext.kt
index 0267637..de835eb8 100644
--- a/room/compiler/src/main/kotlin/androidx/room/ext/javapoet_ext.kt
+++ b/room/compiler/src/main/kotlin/androidx/room/ext/javapoet_ext.kt
@@ -121,6 +121,7 @@
object CommonTypeNames {
val LIST = ClassName.get("java.util", "List")
+ val MAP = ClassName.get("java.util", "Map")
val SET = ClassName.get("java.util", "Set")
val STRING = ClassName.get("java.lang", "String")
val INTEGER = ClassName.get("java.lang", "Integer")
diff --git a/room/compiler/src/main/kotlin/androidx/room/writer/RelationCollectorMethodWriter.kt b/room/compiler/src/main/kotlin/androidx/room/writer/RelationCollectorMethodWriter.kt
index b2d3410..1ca5dba 100644
--- a/room/compiler/src/main/kotlin/androidx/room/writer/RelationCollectorMethodWriter.kt
+++ b/room/compiler/src/main/kotlin/androidx/room/writer/RelationCollectorMethodWriter.kt
@@ -18,6 +18,7 @@
import androidx.room.ext.AndroidTypeNames
import androidx.room.ext.CollectionTypeNames
+import androidx.room.ext.CommonTypeNames
import androidx.room.ext.L
import androidx.room.ext.N
import androidx.room.ext.RoomTypeNames
@@ -27,6 +28,7 @@
import androidx.room.solver.query.result.PojoRowAdapter
import androidx.room.vo.RelationCollector
import com.squareup.javapoet.ClassName
+import com.squareup.javapoet.CodeBlock
import com.squareup.javapoet.MethodSpec
import com.squareup.javapoet.ParameterSpec
import com.squareup.javapoet.ParameterizedTypeName
@@ -72,6 +74,20 @@
collector.mapTypeName.rawType == CollectionTypeNames.LONG_SPARSE_ARRAY
val usingArrayMap =
collector.mapTypeName.rawType == CollectionTypeNames.ARRAY_MAP
+ fun CodeBlock.Builder.addBatchPutAllStatement(tmpMapVar: String) {
+ if (usingArrayMap) {
+ // When using ArrayMap there is ambiguity in the putAll() method, clear the
+ // confusion by casting the temporary map.
+ val disambiguityTypeName =
+ ParameterizedTypeName.get(CommonTypeNames.MAP,
+ collector.mapTypeName.typeArguments[0],
+ collector.mapTypeName.typeArguments[1])
+ addStatement("$N.putAll(($T) $L)",
+ param, disambiguityTypeName, tmpMapVar)
+ } else {
+ addStatement("$N.putAll($L)", param, tmpMapVar)
+ }
+ }
if (usingLongSparseArray) {
beginControlFlow("if ($N.isEmpty())", param)
} else {
@@ -99,16 +115,25 @@
addStatement("$T $L = 0", TypeName.INT, mapIndexVar)
addStatement("final $T $L = $N.size()", TypeName.INT, limitVar, param)
beginControlFlow("while($L < $L)", mapIndexVar, limitVar).apply {
- addStatement("$L.put($N.keyAt($L), $N.valueAt($L))",
- tmpMapVar, param, mapIndexVar, param, mapIndexVar)
+ if (collector.relationTypeIsCollection) {
+ addStatement("$L.put($N.keyAt($L), $N.valueAt($L))",
+ tmpMapVar, param, mapIndexVar, param, mapIndexVar)
+ } else {
+ addStatement("$L.put($N.keyAt($L), null)",
+ tmpMapVar, param, mapIndexVar)
+ }
addStatement("$L++", mapIndexVar)
}
} else {
val mapKeyVar = scope.getTmpVar("_mapKey")
beginControlFlow("for($T $L : $L)",
collector.keyTypeName, mapKeyVar, KEY_SET_VARIABLE).apply {
- addStatement("$L.put($L, $N.get($L))",
- tmpMapVar, mapKeyVar, param, mapKeyVar)
+ if (collector.relationTypeIsCollection) {
+ addStatement("$L.put($L, $N.get($L))",
+ tmpMapVar, mapKeyVar, param, mapKeyVar)
+ } else {
+ addStatement("$L.put($L, null)", tmpMapVar, mapKeyVar)
+ }
}
}.apply {
addStatement("$L++", tmpIndexVar)
@@ -116,6 +141,11 @@
tmpIndexVar, RoomTypeNames.ROOM_DB).apply {
// recursively load that batch
addStatement("$L($L)", methodName, tmpMapVar)
+ // for non collection relation, put the loaded batch in the original map,
+ // not needed when dealing with collections since references are passed
+ if (!collector.relationTypeIsCollection) {
+ addBatchPutAllStatement(tmpMapVar)
+ }
// clear nukes the backing data hence we create a new one
addStatement("$L = new $T($T.MAX_BIND_PARAMETER_CNT)",
tmpMapVar, collector.mapTypeName, RoomTypeNames.ROOM_DB)
@@ -125,6 +155,10 @@
beginControlFlow("if($L > 0)", tmpIndexVar).apply {
// load the last batch
addStatement("$L($L)", methodName, tmpMapVar)
+ // for non collection relation, put the last batch in the original map
+ if (!collector.relationTypeIsCollection) {
+ addBatchPutAllStatement(tmpMapVar)
+ }
}.endControlFlow()
addStatement("return")
}.endControlFlow()
diff --git a/room/integration-tests/incremental-annotation-processing/build.gradle b/room/integration-tests/incremental-annotation-processing/build.gradle
index c02ecb2..21fe960 100644
--- a/room/integration-tests/incremental-annotation-processing/build.gradle
+++ b/room/integration-tests/incremental-annotation-processing/build.gradle
@@ -66,8 +66,8 @@
tasks.findByName("compileTestKotlin").dependsOn(generateSdkResource)
tasks.findByPath("test").dependsOn(
- tasks.findByPath(":room:room-common:uploadArchives"),
- tasks.findByPath(":room:room-runtime:uploadArchives"),
- tasks.findByPath(":room:room-migration:uploadArchives"),
- tasks.findByPath(":room:room-compiler:uploadArchives"),
+ tasks.findByPath(":room:room-common:publish"),
+ tasks.findByPath(":room:room-runtime:publish"),
+ tasks.findByPath(":room:room-migration:publish"),
+ tasks.findByPath(":room:room-compiler:publish"),
)
diff --git a/room/integration-tests/noappcompattestapp/src/androidTest/java/androidx/room/integration/noappcompat/BareRelationDatabaseTest.java b/room/integration-tests/noappcompattestapp/src/androidTest/java/androidx/room/integration/noappcompat/BareRelationDatabaseTest.java
index ff1230b..64ceb77 100644
--- a/room/integration-tests/noappcompattestapp/src/androidTest/java/androidx/room/integration/noappcompat/BareRelationDatabaseTest.java
+++ b/room/integration-tests/noappcompattestapp/src/androidTest/java/androidx/room/integration/noappcompat/BareRelationDatabaseTest.java
@@ -31,7 +31,7 @@
import androidx.room.RoomDatabase;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
-import androidx.test.filters.SmallTest;
+import androidx.test.filters.LargeTest;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -40,7 +40,7 @@
// More than a simple read & write, this test that we generate correct relationship collector
// code that doesn't use androidx.collection
-@SmallTest
+@LargeTest
@RunWith(AndroidJUnit4.class)
@SuppressWarnings("WeakerAccess") // to avoid naming field with m
public class BareRelationDatabaseTest {
@@ -62,6 +62,28 @@
assertThat(result.pets.get(1).petId, is(2L));
}
+ @Test
+ public void large_nonCollectionRelation() {
+ RelationDatabase db = Room.inMemoryDatabaseBuilder(
+ ApplicationProvider.getApplicationContext(), RelationDatabase.class)
+ .build();
+ UserPetDao dao = db.getDao();
+
+ int count = 2000;
+ db.runInTransaction(() -> {
+ for (int i = 1; i <= count; i++) {
+ dao.insertUser(new User(i));
+ dao.insertPet(new Pet(i, i));
+ }
+ });
+
+ List<UserAndPet> ownerAndPet = dao.getUsersWithPet();
+ assertThat(ownerAndPet.size(), is(count));
+ for (int i = 0; i < count; i++) {
+ assertThat(ownerAndPet.get(i).pet.petId, is(i + 1L));
+ }
+ }
+
@Database(entities = {User.class, Pet.class}, version = 1, exportSchema = false)
abstract static class RelationDatabase extends RoomDatabase {
abstract UserPetDao getDao();
@@ -72,6 +94,9 @@
@Query("SELECT * FROM User WHERE userId = :id")
UserAndPets getUserWithPets(long id);
+ @Query("SELECT * FROM User")
+ List<UserAndPet> getUsersWithPet();
+
@Insert
void insertUser(User user);
@@ -107,4 +132,11 @@
@Relation(parentColumn = "userId", entityColumn = "ownerId")
public List<Pet> pets;
}
+
+ static class UserAndPet {
+ @Embedded
+ public User user;
+ @Relation(parentColumn = "userId", entityColumn = "ownerId")
+ public Pet pet;
+ }
}
diff --git a/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/dao/RobotsDao.java b/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/dao/RobotsDao.java
index ee4acd8..3cd476d 100644
--- a/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/dao/RobotsDao.java
+++ b/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/dao/RobotsDao.java
@@ -22,6 +22,7 @@
import androidx.room.integration.testapp.vo.Cluster;
import androidx.room.integration.testapp.vo.Hivemind;
import androidx.room.integration.testapp.vo.Robot;
+import androidx.room.integration.testapp.vo.RobotAndHivemind;
import java.util.List;
import java.util.UUID;
@@ -40,4 +41,7 @@
@Query("SELECT * FROM Robot WHERE mHiveId = :hiveId")
List<Robot> getHiveRobots(UUID hiveId);
+
+ @Query("SELECT * FROM Robot")
+ List<RobotAndHivemind> getRobotsWithHivemind();
}
diff --git a/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/test/PojoWithRelationTest.java b/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/test/PojoWithRelationTest.java
index 1cced11..3cb7571 100644
--- a/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/test/PojoWithRelationTest.java
+++ b/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/test/PojoWithRelationTest.java
@@ -28,6 +28,7 @@
import androidx.room.integration.testapp.vo.PetAndOwner;
import androidx.room.integration.testapp.vo.PetWithToyIds;
import androidx.room.integration.testapp.vo.Robot;
+import androidx.room.integration.testapp.vo.RobotAndHivemind;
import androidx.room.integration.testapp.vo.Toy;
import androidx.room.integration.testapp.vo.User;
import androidx.room.integration.testapp.vo.UserAndAllPets;
@@ -301,6 +302,44 @@
}
@Test
+ public void large_nonCollectionRelation() {
+ int count = 2000;
+ mDatabase.runInTransaction(() -> {
+ for (int i = 1; i <= count; i++) {
+ mUserDao.insert(TestUtil.createUser(i));
+ Pet pet = TestUtil.createPet(i);
+ pet.setUserId(i);
+ mPetDao.insertOrReplace(pet);
+ }
+ });
+
+ List<PetAndOwner> petAndOwners = mPetDao.allPetsWithOwners();
+ assertThat(petAndOwners.size(), is(count));
+ for (int i = 0; i < count; i++) {
+ assertThat(petAndOwners.get(i).getUser().getId(), is(i + 1));
+ }
+ }
+
+ @Test
+ public void large_nonCollectionRelation_withComplexKey() {
+ int count = 2000;
+ mDatabase.runInTransaction(() -> {
+ for (int i = 1; i <= count; i++) {
+ Hivemind hivemind = new Hivemind(UUID.randomUUID());
+ mRobotsDao.putHivemind(hivemind);
+ Robot robot = new Robot(UUID.randomUUID(), hivemind.mId);
+ mRobotsDao.putRobot(robot);
+ }
+ });
+
+ List<RobotAndHivemind> robotsWithHivemind = mRobotsDao.getRobotsWithHivemind();
+ assertThat(robotsWithHivemind.size(), is(count));
+ for (int i = 0; i < count; i++) {
+ assertThat(robotsWithHivemind.get(i).getHivemind(), is(notNullValue()));
+ }
+ }
+
+ @Test
public void relationWithBlobKey() {
UUID hiveId1 = UUID.randomUUID();
UUID hiveId2 = UUID.randomUUID();
diff --git a/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/vo/RobotAndHivemind.java b/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/vo/RobotAndHivemind.java
new file mode 100644
index 0000000..965011f
--- /dev/null
+++ b/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/vo/RobotAndHivemind.java
@@ -0,0 +1,42 @@
+/*
+ * 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.integration.testapp.vo;
+
+import androidx.room.Embedded;
+import androidx.room.Relation;
+
+public class RobotAndHivemind {
+
+ @Embedded
+ public final Robot mRobot;
+
+ @Relation(parentColumn = "mHiveId", entityColumn = "mId")
+ public final Hivemind mHivemind;
+
+ public RobotAndHivemind(Robot robot, Hivemind hivemind) {
+ mRobot = robot;
+ mHivemind = hivemind;
+ }
+
+ public Robot getRobot() {
+ return mRobot;
+ }
+
+ public Hivemind getHivemind() {
+ return mHivemind;
+ }
+}
diff --git a/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/ActionBarDisplayOptions.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/ActionBarDisplayOptions.java
index 663ef89..3d04ba5 100644
--- a/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/ActionBarDisplayOptions.java
+++ b/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/ActionBarDisplayOptions.java
@@ -20,7 +20,6 @@
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
-import android.widget.ArrayAdapter;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.ActionBar.Tab;
@@ -58,10 +57,6 @@
final ActionBar bar = getSupportActionBar();
bar.setCustomView(mCustomView, mCustomViewLayoutParams);
- final ArrayAdapter<String> listAdapter = new ArrayAdapter<String>(bar.getThemedContext(),
- R.layout.support_simple_spinner_dropdown_item,
- new String[] { "Item 1", "Item 2", "Item 3" });
-
bar.setLogo(R.drawable.ic_media_play);
}
diff --git a/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/ActionBarFragmentMenu.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/ActionBarFragmentMenu.java
index 6fb369a5..be79b92 100644
--- a/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/ActionBarFragmentMenu.java
+++ b/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/ActionBarFragmentMenu.java
@@ -20,11 +20,11 @@
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
-import android.view.View;
import android.view.View.OnClickListener;
import android.widget.CheckBox;
import android.widget.Toast;
+import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
@@ -45,12 +45,7 @@
CheckBox mMenuVisibility;
// Update fragment visibility when check boxes are changed.
- final OnClickListener mClickListener = new OnClickListener() {
- @Override
- public void onClick(View v) {
- updateFragmentVisibility();
- }
- };
+ final OnClickListener mClickListener = v -> updateFragmentVisibility();
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -73,15 +68,15 @@
ft.commit();
// Watch check box clicks.
- mCheckBox1 = (CheckBox)findViewById(R.id.menu1);
+ mCheckBox1 = findViewById(R.id.menu1);
mCheckBox1.setOnClickListener(mClickListener);
- mCheckBox2 = (CheckBox)findViewById(R.id.menu2);
+ mCheckBox2 = findViewById(R.id.menu2);
mCheckBox2.setOnClickListener(mClickListener);
- mCheckBox3 = (CheckBox)findViewById(R.id.menu3);
+ mCheckBox3 = findViewById(R.id.menu3);
mCheckBox3.setOnClickListener(mClickListener);
- mHasOptionsMenu = (CheckBox)findViewById(R.id.has_options_menu);
+ mHasOptionsMenu = findViewById(R.id.has_options_menu);
mHasOptionsMenu.setOnClickListener(mClickListener);
- mMenuVisibility = (CheckBox)findViewById(R.id.menu_visibility);
+ mMenuVisibility = findViewById(R.id.menu_visibility);
mMenuVisibility.setOnClickListener(mClickListener);
// Make sure fragments start out with correct visibility.
@@ -89,7 +84,7 @@
}
@Override
- protected void onRestoreInstanceState(Bundle savedInstanceState) {
+ protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
// Make sure fragments are updated after check box view state is restored.
updateFragmentVisibility();
@@ -135,7 +130,7 @@
}
@Override
- public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+ public void onCreateOptionsMenu(Menu menu, @NonNull MenuInflater inflater) {
menu.add("Menu 1a").setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
menu.add("Menu 1b").setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
super.onCreateOptionsMenu(menu, inflater);
@@ -143,11 +138,11 @@
@Override
public boolean onOptionsItemSelected(MenuItem item) {
- if (item.getTitle().equals("Menu 1a")) {
+ if (item.getTitle().toString().equals("Menu 1a")) {
Toast.makeText(getActivity(), "Selected Menu 1a.", Toast.LENGTH_SHORT).show();
return true;
}
- if (item.getTitle().equals("Menu 1b")) {
+ if (item.getTitle().toString().equals("Menu 1b")) {
Toast.makeText(getActivity(), "Selected Menu 1b.", Toast.LENGTH_SHORT).show();
return true;
}
@@ -177,13 +172,13 @@
}
@Override
- public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+ public void onCreateOptionsMenu(Menu menu, @NonNull MenuInflater inflater) {
menu.add("Menu 2").setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
- if (item.getTitle().equals("Menu 2")) {
+ if (item.getTitle().toString().equals("Menu 2")) {
Toast.makeText(getActivity(), "Selected Menu 2.", Toast.LENGTH_SHORT).show();
return true;
}
@@ -203,7 +198,7 @@
}
@Override
- public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+ public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
Toast.makeText(getActivity(), "Created nested fragment's menu.",
Toast.LENGTH_SHORT).show();
inflater.inflate(R.menu.display_options_actions, menu);
@@ -218,7 +213,7 @@
}
@Override
- public void onPrepareOptionsMenu(Menu menu) {
+ public void onPrepareOptionsMenu(@NonNull Menu menu) {
Toast.makeText(getActivity(), "Prepared nested fragment's menu.",
Toast.LENGTH_SHORT).show();
super.onPrepareOptionsMenu(menu);
diff --git a/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/DialogUsage.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/DialogUsage.java
index c06760c..957089c 100644
--- a/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/DialogUsage.java
+++ b/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/DialogUsage.java
@@ -16,13 +16,8 @@
package com.example.android.supportv7.app;
import android.app.Dialog;
-import android.content.Context;
import android.os.Bundle;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.View;
import android.widget.Spinner;
-import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.app.AppCompatDialog;
@@ -44,12 +39,7 @@
mSpinner = findViewById(R.id.spinner_dialogs);
// Add an OnClickListener to show our selected dialog
- findViewById(R.id.btn_show_dialog).setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- showSelectedDialog();
- }
- });
+ findViewById(R.id.btn_show_dialog).setOnClickListener(view -> showSelectedDialog());
}
private void showSelectedDialog() {
@@ -77,28 +67,4 @@
dialog.show();
}
- /**
- * A simple {@link androidx.appcompat.app.AppCompatDialog} implementation which
- * inflates some items into it's options menu, and shows a toast when one is selected.
- */
- private class MenuDialog extends AppCompatDialog {
-
- public MenuDialog(Context context) {
- super(context);
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.actions, menu);
- return true;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- Toast.makeText(getOwnerActivity(), "Dialog action selected: " + item.getTitle(),
- Toast.LENGTH_SHORT).show();
- return true;
- }
- }
-
}
diff --git a/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/ToolbarFragmentPagerMenu.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/ToolbarFragmentPagerMenu.java
index 6cdf042..f8ee1ff 100644
--- a/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/ToolbarFragmentPagerMenu.java
+++ b/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/ToolbarFragmentPagerMenu.java
@@ -117,11 +117,11 @@
@Override
public boolean onOptionsItemSelected(MenuItem item) {
- if (item.getTitle().equals("Menu 1a")) {
+ if (item.getTitle().toString().equals("Menu 1a")) {
Toast.makeText(getActivity(), "Selected Menu 1a.", Toast.LENGTH_SHORT).show();
return true;
}
- if (item.getTitle().equals("Menu 1b")) {
+ if (item.getTitle().toString().equals("Menu 1b")) {
Toast.makeText(getActivity(), "Selected Menu 1b.", Toast.LENGTH_SHORT).show();
return true;
}
@@ -160,7 +160,7 @@
@Override
public boolean onOptionsItemSelected(MenuItem item) {
- if (item.getTitle().equals("Menu 2")) {
+ if (item.getTitle().toString().equals("Menu 2")) {
Toast.makeText(getActivity(), "Selected Menu 2.", Toast.LENGTH_SHORT).show();
return true;
}
diff --git a/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/PlaylistItem.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/PlaylistItem.java
index 05fe5a5..0308a48b 100644
--- a/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/PlaylistItem.java
+++ b/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/PlaylistItem.java
@@ -31,7 +31,6 @@
private final String mItemId;
private final Uri mUri;
private final String mTitle;
- private final String mMime;
private final PendingIntent mUpdateReceiver;
// changeable states
private int mPlaybackState = MediaItemStatus.PLAYBACK_STATE_PENDING;
@@ -46,7 +45,6 @@
mItemId = iid;
mTitle = title;
mUri = uri;
- mMime = mime;
mUpdateReceiver = pi;
setTimestamp(SystemClock.elapsedRealtime());
}
diff --git a/samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/AnimatedRecyclerView.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/AnimatedRecyclerView.java
index 248e7ab..8b7a478 100644
--- a/samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/AnimatedRecyclerView.java
+++ b/samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/AnimatedRecyclerView.java
@@ -31,6 +31,7 @@
import android.widget.CompoundButton;
import android.widget.TextView;
+import androidx.annotation.NonNull;
import androidx.collection.ArrayMap;
import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.RecyclerView;
@@ -151,19 +152,21 @@
mPendingSettleList.clear();
}
+ @NonNull
@Override
- public ItemHolderInfo recordPreLayoutInformation(RecyclerView.State state,
- RecyclerView.ViewHolder viewHolder,
- @AdapterChanges int changeFlags, List<Object> payloads) {
+ public ItemHolderInfo recordPreLayoutInformation(@NonNull RecyclerView.State state,
+ @NonNull RecyclerView.ViewHolder viewHolder,
+ @AdapterChanges int changeFlags, @NonNull List<Object> payloads) {
MyItemInfo info = (MyItemInfo) super
.recordPreLayoutInformation(state, viewHolder, changeFlags, payloads);
info.text = ((MyViewHolder) viewHolder).textView.getText();
return info;
}
+ @NonNull
@Override
- public ItemHolderInfo recordPostLayoutInformation(RecyclerView.State state,
- RecyclerView.ViewHolder viewHolder) {
+ public ItemHolderInfo recordPostLayoutInformation(@NonNull RecyclerView.State state,
+ @NonNull RecyclerView.ViewHolder viewHolder) {
MyItemInfo info = (MyItemInfo) super.recordPostLayoutInformation(state, viewHolder);
info.text = ((MyViewHolder) viewHolder).textView.getText();
return info;
@@ -171,7 +174,7 @@
@Override
- public boolean canReuseUpdatedViewHolder(RecyclerView.ViewHolder viewHolder) {
+ public boolean canReuseUpdatedViewHolder(@NonNull RecyclerView.ViewHolder viewHolder) {
return mEnableInPlaceChange;
}
@@ -203,17 +206,16 @@
}
@Override
- public boolean animateChange(RecyclerView.ViewHolder oldHolder,
- RecyclerView.ViewHolder newHolder, ItemHolderInfo preInfo,
- ItemHolderInfo postInfo) {
+ public boolean animateChange(@NonNull RecyclerView.ViewHolder oldHolder,
+ @NonNull RecyclerView.ViewHolder newHolder, @NonNull ItemHolderInfo preInfo,
+ @NonNull ItemHolderInfo postInfo) {
if (oldHolder != newHolder) {
return super.animateChange(oldHolder, newHolder, preInfo, postInfo);
}
- return animateChangeApiHoneycombMr1(oldHolder, newHolder, preInfo, postInfo);
+ return animateChangeApiHoneycombMr1(oldHolder, preInfo, postInfo);
}
private boolean animateChangeApiHoneycombMr1(RecyclerView.ViewHolder oldHolder,
- RecyclerView.ViewHolder newHolder,
ItemHolderInfo preInfo, ItemHolderInfo postInfo) {
endAnimation(oldHolder);
MyItemInfo pre = (MyItemInfo) preInfo;
@@ -222,7 +224,7 @@
CharSequence finalText = post.text;
- if (pre.text.equals(post.text)) {
+ if (pre.text.toString().contentEquals(post.text)) {
// same content. Just translate back to 0
final long duration = (long) (getChangeDuration()
* (vh.textView.getTranslationX() / vh.textView.getWidth()));
@@ -250,6 +252,7 @@
return true;
}
+ @NonNull
@Override
public ItemHolderInfo obtainHolderInfo() {
return new MyItemInfo();
@@ -377,10 +380,6 @@
}
}
- private String generateNewText() {
- return "Added Item #" + mNumItemsAdded++;
- }
-
public void d1a2d3(View view) {
removeAtPosition(1);
addAtPosition(2, "Added Item #" + mNumItemsAdded++);
diff --git a/samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/selection/simple/DemoHolder.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/selection/simple/DemoHolder.java
index ce5d4cd..ad28e23 100644
--- a/samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/selection/simple/DemoHolder.java
+++ b/samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/selection/simple/DemoHolder.java
@@ -20,7 +20,6 @@
import android.widget.LinearLayout;
import android.widget.TextView;
-import androidx.annotation.Nullable;
import androidx.recyclerview.selection.ItemDetailsLookup.ItemDetails;
import androidx.recyclerview.widget.RecyclerView;
@@ -32,7 +31,6 @@
private final TextView mSelector;
private final TextView mLabel;
private final ItemDetails<Long> mDetails;
- private @Nullable Long mKey;
DemoHolder(LinearLayout layout) {
super(layout);
diff --git a/samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/selection/simple/SimpleSelectionDemoActivity.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/selection/simple/SimpleSelectionDemoActivity.java
index 17ee698..fafddc4 100644
--- a/samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/selection/simple/SimpleSelectionDemoActivity.java
+++ b/samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/selection/simple/SimpleSelectionDemoActivity.java
@@ -57,7 +57,7 @@
super.onCreate(savedInstanceState);
setContentView(R.layout.selection_demo_layout);
- RecyclerView recView = (RecyclerView) findViewById(R.id.list);
+ RecyclerView recView = findViewById(R.id.list);
// keyProvider depends on mAdapter.setHasStableIds(true).
ItemKeyProvider<Long> keyProvider = new StableIdKeyProvider(recView);
@@ -65,7 +65,7 @@
mLayout = new GridLayoutManager(this, mColumnCount);
recView.setLayoutManager(mLayout);
- mAdapter = new SimpleSelectionDemoAdapter(this, keyProvider);
+ mAdapter = new SimpleSelectionDemoAdapter(this);
// The adapter is paired with a key provider that supports
// the native RecyclerView stableId. For this to work correctly
// the adapter must report that it supports stable ids.
diff --git a/samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/selection/simple/SimpleSelectionDemoAdapter.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/selection/simple/SimpleSelectionDemoAdapter.java
index 6eca668..5ca576d 100644
--- a/samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/selection/simple/SimpleSelectionDemoAdapter.java
+++ b/samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/selection/simple/SimpleSelectionDemoAdapter.java
@@ -25,7 +25,7 @@
import android.view.ViewGroup;
import android.widget.LinearLayout;
-import androidx.recyclerview.selection.ItemKeyProvider;
+import androidx.annotation.NonNull;
import androidx.recyclerview.selection.SelectionTracker;
import androidx.recyclerview.widget.RecyclerView;
@@ -36,33 +36,23 @@
private static final String TAG = "SelectionDemos";
private final Context mContext;
- private final ItemKeyProvider<Long> mKeyProvider;
// This should be replaced at "bind" time with a real test that
// asks SelectionTracker.
private SelectionTest mSelTest;
- SimpleSelectionDemoAdapter(Context context, ItemKeyProvider<Long> keyProvider) {
+ SimpleSelectionDemoAdapter(Context context) {
mContext = context;
- mKeyProvider = keyProvider;
- mSelTest = new SelectionTest() {
- @Override
- public boolean isSelected(Long id) {
- throw new IllegalStateException(
- "Adapter must be initialized with SelectionTracker.");
- }
+ mSelTest = id -> {
+ throw new IllegalStateException(
+ "Adapter must be initialized with SelectionTracker.");
};
}
// Glue together SelectionTracker and the adapter.
public void bindSelectionHelper(final SelectionTracker<Long> selectionTracker) {
checkArgument(selectionTracker != null);
- mSelTest = new SelectionTest() {
- @Override
- public boolean isSelected(Long id) {
- return selectionTracker.isSelected(id);
- }
- };
+ mSelTest = selectionTracker::isSelected;
}
void loadData() {
@@ -91,7 +81,7 @@
}
@Override
- public DemoHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+ public DemoHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LinearLayout layout = inflateLayout(mContext, parent, R.layout.selection_demo_list_item);
return new DemoHolder(layout);
}
diff --git a/ui/ui-framework/api/0.1.0-dev03.txt b/ui/ui-framework/api/0.1.0-dev03.txt
index 82030ac..2a8753d 100644
--- a/ui/ui-framework/api/0.1.0-dev03.txt
+++ b/ui/ui-framework/api/0.1.0-dev03.txt
@@ -69,7 +69,7 @@
public final class PointerInputWrapperKt {
ctor public PointerInputWrapperKt();
- method public static inline void PointerInputWrapper(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.core.IntPxSize,? extends java.util.List<androidx.ui.core.PointerInputChange>> pointerInputHandler = { event, _, _ -> event }, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+ method public static inline void PointerInputWrapper(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.core.IntPxSize,? extends java.util.List<androidx.ui.core.PointerInputChange>> pointerInputHandler = { event, _, _ -> event }, kotlin.jvm.functions.Function0<kotlin.Unit> cancelHandler = {}, kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
public final class RepaintBoundaryKt {
@@ -98,7 +98,7 @@
public final class TextKt {
ctor public TextKt();
method public static void CurrentTextStyleProvider(androidx.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
- method public static void Text(androidx.ui.core.Modifier modifier = Modifier.None, String? text = null, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor, kotlin.jvm.functions.Function1<? super androidx.ui.core.TextSpanScope,kotlin.Unit> child);
+ method public static void Text(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor, kotlin.jvm.functions.Function1<? super androidx.ui.core.TextSpanScope,kotlin.Unit> child);
method public static void Text(String text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor);
method public static void Text(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor);
method public static androidx.compose.Effect<androidx.ui.text.TextStyle> currentTextStyle();
diff --git a/ui/ui-framework/api/api_lint.ignore b/ui/ui-framework/api/api_lint.ignore
index 33630e7..40f9062 100644
--- a/ui/ui-framework/api/api_lint.ignore
+++ b/ui/ui-framework/api/api_lint.ignore
@@ -21,7 +21,7 @@
AutoBoxing: androidx.ui.core.TextKt#Text(String, androidx.ui.core.Modifier, androidx.ui.text.TextStyle, androidx.ui.text.ParagraphStyle, boolean, androidx.ui.text.style.TextOverflow, Integer, androidx.ui.graphics.Color) parameter #6:
Must avoid boxed primitives (`java.lang.Integer`)
-AutoBoxing: androidx.ui.core.TextKt#Text(androidx.ui.core.Modifier, String, androidx.ui.text.TextStyle, androidx.ui.text.ParagraphStyle, boolean, androidx.ui.text.style.TextOverflow, Integer, androidx.ui.graphics.Color, kotlin.jvm.functions.Function1<? super androidx.ui.core.TextSpanScope,kotlin.Unit>) parameter #6:
+AutoBoxing: androidx.ui.core.TextKt#Text(androidx.ui.core.Modifier, androidx.ui.text.TextStyle, androidx.ui.text.ParagraphStyle, boolean, androidx.ui.text.style.TextOverflow, Integer, androidx.ui.graphics.Color, kotlin.jvm.functions.Function1<? super androidx.ui.core.TextSpanScope,kotlin.Unit>) parameter #5:
Must avoid boxed primitives (`java.lang.Integer`)
AutoBoxing: androidx.ui.core.TextKt#Text(androidx.ui.text.AnnotatedString, androidx.ui.core.Modifier, androidx.ui.text.TextStyle, androidx.ui.text.ParagraphStyle, boolean, androidx.ui.text.style.TextOverflow, Integer, androidx.ui.graphics.Color) parameter #6:
Must avoid boxed primitives (`java.lang.Integer`)
diff --git a/ui/ui-framework/api/current.txt b/ui/ui-framework/api/current.txt
index 82030ac..2a8753d 100644
--- a/ui/ui-framework/api/current.txt
+++ b/ui/ui-framework/api/current.txt
@@ -69,7 +69,7 @@
public final class PointerInputWrapperKt {
ctor public PointerInputWrapperKt();
- method public static inline void PointerInputWrapper(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.core.IntPxSize,? extends java.util.List<androidx.ui.core.PointerInputChange>> pointerInputHandler = { event, _, _ -> event }, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+ method public static inline void PointerInputWrapper(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.core.IntPxSize,? extends java.util.List<androidx.ui.core.PointerInputChange>> pointerInputHandler = { event, _, _ -> event }, kotlin.jvm.functions.Function0<kotlin.Unit> cancelHandler = {}, kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
public final class RepaintBoundaryKt {
@@ -98,7 +98,7 @@
public final class TextKt {
ctor public TextKt();
method public static void CurrentTextStyleProvider(androidx.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
- method public static void Text(androidx.ui.core.Modifier modifier = Modifier.None, String? text = null, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor, kotlin.jvm.functions.Function1<? super androidx.ui.core.TextSpanScope,kotlin.Unit> child);
+ method public static void Text(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor, kotlin.jvm.functions.Function1<? super androidx.ui.core.TextSpanScope,kotlin.Unit> child);
method public static void Text(String text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor);
method public static void Text(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor);
method public static androidx.compose.Effect<androidx.ui.text.TextStyle> currentTextStyle();
diff --git a/ui/ui-framework/api/public_plus_experimental_0.1.0-dev03.txt b/ui/ui-framework/api/public_plus_experimental_0.1.0-dev03.txt
index 82030ac..2a8753d 100644
--- a/ui/ui-framework/api/public_plus_experimental_0.1.0-dev03.txt
+++ b/ui/ui-framework/api/public_plus_experimental_0.1.0-dev03.txt
@@ -69,7 +69,7 @@
public final class PointerInputWrapperKt {
ctor public PointerInputWrapperKt();
- method public static inline void PointerInputWrapper(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.core.IntPxSize,? extends java.util.List<androidx.ui.core.PointerInputChange>> pointerInputHandler = { event, _, _ -> event }, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+ method public static inline void PointerInputWrapper(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.core.IntPxSize,? extends java.util.List<androidx.ui.core.PointerInputChange>> pointerInputHandler = { event, _, _ -> event }, kotlin.jvm.functions.Function0<kotlin.Unit> cancelHandler = {}, kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
public final class RepaintBoundaryKt {
@@ -98,7 +98,7 @@
public final class TextKt {
ctor public TextKt();
method public static void CurrentTextStyleProvider(androidx.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
- method public static void Text(androidx.ui.core.Modifier modifier = Modifier.None, String? text = null, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor, kotlin.jvm.functions.Function1<? super androidx.ui.core.TextSpanScope,kotlin.Unit> child);
+ method public static void Text(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor, kotlin.jvm.functions.Function1<? super androidx.ui.core.TextSpanScope,kotlin.Unit> child);
method public static void Text(String text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor);
method public static void Text(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor);
method public static androidx.compose.Effect<androidx.ui.text.TextStyle> currentTextStyle();
diff --git a/ui/ui-framework/api/public_plus_experimental_current.txt b/ui/ui-framework/api/public_plus_experimental_current.txt
index 82030ac..2a8753d 100644
--- a/ui/ui-framework/api/public_plus_experimental_current.txt
+++ b/ui/ui-framework/api/public_plus_experimental_current.txt
@@ -69,7 +69,7 @@
public final class PointerInputWrapperKt {
ctor public PointerInputWrapperKt();
- method public static inline void PointerInputWrapper(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.core.IntPxSize,? extends java.util.List<androidx.ui.core.PointerInputChange>> pointerInputHandler = { event, _, _ -> event }, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+ method public static inline void PointerInputWrapper(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.core.IntPxSize,? extends java.util.List<androidx.ui.core.PointerInputChange>> pointerInputHandler = { event, _, _ -> event }, kotlin.jvm.functions.Function0<kotlin.Unit> cancelHandler = {}, kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
public final class RepaintBoundaryKt {
@@ -98,7 +98,7 @@
public final class TextKt {
ctor public TextKt();
method public static void CurrentTextStyleProvider(androidx.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
- method public static void Text(androidx.ui.core.Modifier modifier = Modifier.None, String? text = null, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor, kotlin.jvm.functions.Function1<? super androidx.ui.core.TextSpanScope,kotlin.Unit> child);
+ method public static void Text(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor, kotlin.jvm.functions.Function1<? super androidx.ui.core.TextSpanScope,kotlin.Unit> child);
method public static void Text(String text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor);
method public static void Text(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor);
method public static androidx.compose.Effect<androidx.ui.text.TextStyle> currentTextStyle();
diff --git a/ui/ui-framework/api/restricted_0.1.0-dev03.txt b/ui/ui-framework/api/restricted_0.1.0-dev03.txt
index 82030ac..2a8753d 100644
--- a/ui/ui-framework/api/restricted_0.1.0-dev03.txt
+++ b/ui/ui-framework/api/restricted_0.1.0-dev03.txt
@@ -69,7 +69,7 @@
public final class PointerInputWrapperKt {
ctor public PointerInputWrapperKt();
- method public static inline void PointerInputWrapper(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.core.IntPxSize,? extends java.util.List<androidx.ui.core.PointerInputChange>> pointerInputHandler = { event, _, _ -> event }, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+ method public static inline void PointerInputWrapper(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.core.IntPxSize,? extends java.util.List<androidx.ui.core.PointerInputChange>> pointerInputHandler = { event, _, _ -> event }, kotlin.jvm.functions.Function0<kotlin.Unit> cancelHandler = {}, kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
public final class RepaintBoundaryKt {
@@ -98,7 +98,7 @@
public final class TextKt {
ctor public TextKt();
method public static void CurrentTextStyleProvider(androidx.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
- method public static void Text(androidx.ui.core.Modifier modifier = Modifier.None, String? text = null, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor, kotlin.jvm.functions.Function1<? super androidx.ui.core.TextSpanScope,kotlin.Unit> child);
+ method public static void Text(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor, kotlin.jvm.functions.Function1<? super androidx.ui.core.TextSpanScope,kotlin.Unit> child);
method public static void Text(String text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor);
method public static void Text(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor);
method public static androidx.compose.Effect<androidx.ui.text.TextStyle> currentTextStyle();
diff --git a/ui/ui-framework/api/restricted_current.txt b/ui/ui-framework/api/restricted_current.txt
index 82030ac..2a8753d 100644
--- a/ui/ui-framework/api/restricted_current.txt
+++ b/ui/ui-framework/api/restricted_current.txt
@@ -69,7 +69,7 @@
public final class PointerInputWrapperKt {
ctor public PointerInputWrapperKt();
- method public static inline void PointerInputWrapper(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.core.IntPxSize,? extends java.util.List<androidx.ui.core.PointerInputChange>> pointerInputHandler = { event, _, _ -> event }, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+ method public static inline void PointerInputWrapper(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.core.IntPxSize,? extends java.util.List<androidx.ui.core.PointerInputChange>> pointerInputHandler = { event, _, _ -> event }, kotlin.jvm.functions.Function0<kotlin.Unit> cancelHandler = {}, kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
public final class RepaintBoundaryKt {
@@ -98,7 +98,7 @@
public final class TextKt {
ctor public TextKt();
method public static void CurrentTextStyleProvider(androidx.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
- method public static void Text(androidx.ui.core.Modifier modifier = Modifier.None, String? text = null, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor, kotlin.jvm.functions.Function1<? super androidx.ui.core.TextSpanScope,kotlin.Unit> child);
+ method public static void Text(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor, kotlin.jvm.functions.Function1<? super androidx.ui.core.TextSpanScope,kotlin.Unit> child);
method public static void Text(String text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor);
method public static void Text(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor);
method public static androidx.compose.Effect<androidx.ui.text.TextStyle> currentTextStyle();
diff --git a/ui/ui-framework/src/main/java/androidx/ui/core/PointerInputWrapper.kt b/ui/ui-framework/src/main/java/androidx/ui/core/PointerInputWrapper.kt
index eb444bb..b22141a 100644
--- a/ui/ui-framework/src/main/java/androidx/ui/core/PointerInputWrapper.kt
+++ b/ui/ui-framework/src/main/java/androidx/ui/core/PointerInputWrapper.kt
@@ -21,10 +21,11 @@
@Composable
inline fun PointerInputWrapper(
noinline pointerInputHandler: PointerInputHandler = { event, _, _ -> event },
+ noinline cancelHandler: () -> Unit = {},
crossinline children: @Composable() () -> Unit
) {
// Hide the internals of PointerInputNode
- PointerInputNode(pointerInputHandler = pointerInputHandler) {
+ PointerInputNode(pointerInputHandler = pointerInputHandler, cancelHandler = cancelHandler) {
children()
}
}
diff --git a/ui/ui-framework/src/main/java/androidx/ui/core/Text.kt b/ui/ui-framework/src/main/java/androidx/ui/core/Text.kt
index 83af2d9..122cfce 100644
--- a/ui/ui-framework/src/main/java/androidx/ui/core/Text.kt
+++ b/ui/ui-framework/src/main/java/androidx/ui/core/Text.kt
@@ -55,8 +55,6 @@
* same line depending on the layout constraints.
*
* @param modifier Modifier to apply to this layout node.
- * @param text Text to render in this composable. If there are also [Span]s in this composable,
- * they will be append after the given [text].
* @param style Style configuration that applies at character level such as color, font etc.
* @param paragraphStyle Style configuration that applies only to paragraphs such as text
* alignment, or text direction.
@@ -72,7 +70,6 @@
@Composable
fun Text(
modifier: Modifier = Modifier.None,
- text: String? = null,
style: TextStyle? = null,
paragraphStyle: ParagraphStyle? = null,
softWrap: Boolean = DefaultSoftWrap,
@@ -81,7 +78,7 @@
selectionColor: Color = DefaultSelectionColor,
child: @Composable TextSpanScope.() -> Unit
) {
- val rootTextSpan = +memo(text) { TextSpan(text = text) }
+ val rootTextSpan = +memo { TextSpan() }
val ref = +compositionReference()
compose(rootTextSpan, ref, child)
+onDispose { disposeComposition(rootTextSpan, ref) }
diff --git a/ui/ui-framework/src/main/java/androidx/ui/core/TextField.kt b/ui/ui-framework/src/main/java/androidx/ui/core/TextField.kt
index c3650a7..8a432f2 100644
--- a/ui/ui-framework/src/main/java/androidx/ui/core/TextField.kt
+++ b/ui/ui-framework/src/main/java/androidx/ui/core/TextField.kt
@@ -48,7 +48,7 @@
* Example usage:
* @sample androidx.ui.framework.samples.StringTextFieldSample
*
- * This is the most simple TextFiled that observes only text update and have control only for the
+ * This is the most simple TextField that observes only text update and have control only for the
* text. If you want to change/observe the selection/cursor location, you can use TextField with
* [EditorModel] object.
*
diff --git a/ui/ui-framework/src/main/java/androidx/ui/core/TextFieldDelegate.kt b/ui/ui-framework/src/main/java/androidx/ui/core/TextFieldDelegate.kt
index 7e7fb5d..4789ff5 100644
--- a/ui/ui-framework/src/main/java/androidx/ui/core/TextFieldDelegate.kt
+++ b/ui/ui-framework/src/main/java/androidx/ui/core/TextFieldDelegate.kt
@@ -17,11 +17,15 @@
package androidx.ui.core
import androidx.ui.engine.geometry.Rect
+import androidx.ui.graphics.Canvas
import androidx.ui.graphics.Color
import androidx.ui.input.EditOperation
import androidx.ui.input.EditProcessor
import androidx.ui.input.FinishComposingTextEditOp
+import androidx.ui.input.INVALID_SESSION
import androidx.ui.input.ImeAction
+import androidx.ui.input.InputSessionToken
+import androidx.ui.input.InputState
import androidx.ui.input.KeyboardType
import androidx.ui.input.OffsetMap
import androidx.ui.input.SetSelectionEditOp
@@ -29,10 +33,6 @@
import androidx.ui.input.TransformedText
import androidx.ui.input.VisualTransformation
import androidx.ui.input.identityOffsetMap
-import androidx.ui.graphics.Canvas
-import androidx.ui.input.INVALID_SESSION
-import androidx.ui.input.InputSessionToken
-import androidx.ui.input.InputState
import androidx.ui.text.AnnotatedString
import androidx.ui.text.Paragraph
import androidx.ui.text.ParagraphConstraints
@@ -43,6 +43,7 @@
import androidx.ui.text.font.Font
import androidx.ui.text.style.TextDecoration
import androidx.ui.text.style.TextDirectionAlgorithm
+import kotlin.math.ceil
import kotlin.math.roundToInt
// -5185306 = 0xFFB0E0E6 = A(0xFF), R(0xB0), G(0xE0), B(0xE6)
@@ -91,9 +92,16 @@
@JvmStatic
fun layout(textDelegate: TextDelegate, constraints: Constraints): Pair<IntPx, IntPx> {
- // We anyway need to compute layout for preventing NPE during draw which require layout
- // result.
- textDelegate.layout(Constraints.tightConstraintsForWidth(constraints.maxWidth))
+ if (constraints.maxWidth.isFinite()) {
+ textDelegate.layout(Constraints.tightConstraintsForWidth(constraints.maxWidth))
+ } else {
+ // TextField want to fill the required width but if infinite width is passed,
+ // falling back to wrap-content behavior since it may be in the horizontal scroller.
+ val intrinsics = textDelegate.layoutIntrinsics()
+ textDelegate.layout(Constraints.tightConstraintsForWidth(
+ ceil(intrinsics.maxIntrinsicWidth).px.round()
+ ))
+ }
val isEmptyText = textDelegate.text.text.isEmpty()
val height = if (isEmptyText) {
@@ -105,7 +113,7 @@
} else {
textDelegate.height.px.round()
}
- val width = constraints.maxWidth
+ val width = ceil(textDelegate.width).px.round()
return Pair(width, height)
}
diff --git a/ui/ui-framework/src/main/java/androidx/ui/core/gesture/PressIndicatorGestureDetector.kt b/ui/ui-framework/src/main/java/androidx/ui/core/gesture/PressIndicatorGestureDetector.kt
index 53ea90a..0502ec4 100644
--- a/ui/ui-framework/src/main/java/androidx/ui/core/gesture/PressIndicatorGestureDetector.kt
+++ b/ui/ui-framework/src/main/java/androidx/ui/core/gesture/PressIndicatorGestureDetector.kt
@@ -60,7 +60,11 @@
recognizer.>
recognizer.>
- PointerInputWrapper(pointerInputHandler = recognizer.pointerInputHandler, children = children)
+ PointerInputWrapper(
+ pointerInputHandler = recognizer.pointerInputHandler,
+ cancelHandler = recognizer.cancelHandler,
+ children = children
+ )
}
internal class PressIndicatorGestureRecognizer {
@@ -83,8 +87,12 @@
var onStop: (() -> Unit)? = null
/**
- * Called if onStart was attempted to be called (it may have been null), and pointer movement
- * was consumed by the time of the [PointerEventPass.PostDown] reaches this gesture detector.
+ * Called if onStart was attempted to be called (it may have been null), and either:
+ * 1. Pointer movement was consumed by the time [PointerEventPass.PostDown] reaches this
+ * gesture detector.
+ * 2. The Compose root is notified that it will no longer receive input, and thus onStop
+ * will never be reached (For example, the Android View that hosts compose receives
+ * MotionEvent.ACTION_CANCEL).
*
* This should be used for removing visual feedback that indicates that the press gesture was
* cancelled.
@@ -142,10 +150,18 @@
) {
// On the final pass, if we have started and any of the changes had consumed
// position changes, we cancel.
- started = false
- onCancel?.invoke()
+ cancel()
}
internalChanges
}
-}
\ No newline at end of file
+
+ var cancelHandler = ::cancel
+
+ private fun cancel() {
+ if (started) {
+ started = false
+ onCancel?.invoke()
+ }
+ }
+}
diff --git a/ui/ui-framework/src/test/java/androidx/ui/core/TextFieldDelegateTest.kt b/ui/ui-framework/src/test/java/androidx/ui/core/TextFieldDelegateTest.kt
index d6886db..206ff8d 100644
--- a/ui/ui-framework/src/test/java/androidx/ui/core/TextFieldDelegateTest.kt
+++ b/ui/ui-framework/src/test/java/androidx/ui/core/TextFieldDelegateTest.kt
@@ -31,6 +31,7 @@
import androidx.ui.input.TextInputService
import androidx.ui.input.TransformedText
import androidx.ui.text.AnnotatedString
+import androidx.ui.text.MultiParagraphIntrinsics
import androidx.ui.text.TextDelegate
import androidx.ui.text.TextRange
import androidx.ui.text.TextStyle
@@ -63,6 +64,7 @@
private lateinit var onEditorActionPerformed: (Any) -> Unit
private lateinit var textInputService: TextInputService
private lateinit var layoutCoordinates: LayoutCoordinates
+ private lateinit var multiParagraphIntrinsics: MultiParagraphIntrinsics
val creditCardOffsetTranslator = object : OffsetMap {
override fun originalToTransformed(offset: Int): Int {
@@ -104,6 +106,7 @@
>
textInputService = mock()
layoutCoordinates = mock()
+ multiParagraphIntrinsics = mock()
}
@Test
@@ -339,6 +342,7 @@
whenever(mDelegate.density).thenReturn(Density(1.0f))
whenever(mDelegate.resourceLoader).thenReturn(mock())
whenever(mDelegate.height).thenReturn(512.0f)
+ whenever(mDelegate.width).thenReturn(1024.0f)
val res = TextFieldDelegate.layout(mDelegate, constraints)
assertEquals(1024.px.round(), res.first)
@@ -474,4 +478,56 @@
AnnotatedString.Item(TextStyle(decoration = TextDecoration.Underline), 3, 6)
)
}
+
+ @Test
+ fun infinte_constraints() {
+ val constraints = Constraints(
+ minWidth = 0.px.round(),
+ maxWidth = IntPx.Infinity,
+ minHeight = 0.px.round(),
+ maxHeight = 2048.px.round()
+ )
+
+ val dummyText = AnnotatedString(text = "Hello, World")
+ whenever(mDelegate.text).thenReturn(dummyText)
+ whenever(mDelegate.textStyle).thenReturn(TextStyle())
+ whenever(mDelegate.density).thenReturn(Density(1.0f))
+ whenever(mDelegate.resourceLoader).thenReturn(mock())
+ whenever(mDelegate.height).thenReturn(512.0f)
+ whenever(mDelegate.width).thenReturn(123.0f)
+ whenever(mDelegate.layoutIntrinsics()).thenReturn(multiParagraphIntrinsics)
+ whenever(multiParagraphIntrinsics.maxIntrinsicWidth).thenReturn(123f)
+
+ val res = TextFieldDelegate.layout(mDelegate, constraints)
+ assertThat(res.first).isEqualTo(123.ipx)
+ assertEquals(512.ipx, res.second)
+
+ verify(mDelegate, times(1)).layout(Constraints.tightConstraintsForWidth(123.ipx))
+ }
+
+ @Test
+ fun infinte_constraints_ceiling() {
+ val constraints = Constraints(
+ minWidth = 0.px.round(),
+ maxWidth = IntPx.Infinity,
+ minHeight = 0.px.round(),
+ maxHeight = 2048.px.round()
+ )
+
+ val dummyText = AnnotatedString(text = "Hello, World")
+ whenever(mDelegate.text).thenReturn(dummyText)
+ whenever(mDelegate.textStyle).thenReturn(TextStyle())
+ whenever(mDelegate.density).thenReturn(Density(1.0f))
+ whenever(mDelegate.resourceLoader).thenReturn(mock())
+ whenever(mDelegate.height).thenReturn(512.0f)
+ whenever(mDelegate.width).thenReturn(123.1f)
+ whenever(mDelegate.layoutIntrinsics()).thenReturn(multiParagraphIntrinsics)
+ whenever(multiParagraphIntrinsics.maxIntrinsicWidth).thenReturn(123.1f)
+
+ val res = TextFieldDelegate.layout(mDelegate, constraints)
+ assertThat(res.first).isEqualTo(124.ipx)
+ assertEquals(512.ipx, res.second)
+
+ verify(mDelegate, times(1)).layout(Constraints.tightConstraintsForWidth(124.ipx))
+ }
}
diff --git a/ui/ui-framework/src/test/java/androidx/ui/core/gesture/PressIndicatorGestureDetectorTest.kt b/ui/ui-framework/src/test/java/androidx/ui/core/gesture/PressIndicatorGestureDetectorTest.kt
index 36b39be..5d79447 100644
--- a/ui/ui-framework/src/test/java/androidx/ui/core/gesture/PressIndicatorGestureDetectorTest.kt
+++ b/ui/ui-framework/src/test/java/androidx/ui/core/gesture/PressIndicatorGestureDetectorTest.kt
@@ -32,10 +32,12 @@
import androidx.ui.testutils.moveTo
import androidx.ui.testutils.up
import com.nhaarman.mockitokotlin2.any
+import com.nhaarman.mockitokotlin2.inOrder
import com.nhaarman.mockitokotlin2.mock
import com.nhaarman.mockitokotlin2.never
import com.nhaarman.mockitokotlin2.times
import com.nhaarman.mockitokotlin2.verify
+import com.nhaarman.mockitokotlin2.verifyNoMoreInteractions
import org.hamcrest.CoreMatchers.`is`
import org.hamcrest.MatcherAssert.assertThat
import org.junit.Before
@@ -43,7 +45,8 @@
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-// TODO(shepshapard): Write tests that verify consumption behavior that blocks ancestors and descendants.
+// TODO(shepshapard): Write tests that verify consumption behavior that blocks ancestors and
+// descendants.
@RunWith(JUnit4::class)
class PressIndicatorGestureDetectorTest {
@@ -422,4 +425,94 @@
).first()
assertThat(pointer.consumed.downChange, `is`(true))
}
+
+ // Verification of correct cancellation handling.
+
+ @Test
+ fun cancelHandler_justCancel_noCallbacksCalled() {
+ recognizer.cancelHandler.invoke()
+
+ verifyNoMoreInteractions(recognizer.onStart, recognizer.onStop, recognizer.onCancel)
+ }
+
+ @Test
+ fun cancelHandler_downConsumedCancel_noCallbacksCalled() {
+ recognizer.pointerInputHandler.invokeOverAllPasses(listOf(down().consumeDownChange()))
+ recognizer.cancelHandler.invoke()
+
+ verifyNoMoreInteractions(recognizer.onStart, recognizer.onStop, recognizer.onCancel)
+ }
+
+ @Test
+ fun cancelHandler_downCancel_justStartAndCancelCalledInOrderOnce() {
+ recognizer.pointerInputHandler.invokeOverAllPasses(listOf(down()))
+ recognizer.cancelHandler.invoke()
+
+ inOrder(recognizer.onStart!!, recognizer.onCancel!!) {
+ verify(recognizer.onStart!!).invoke(any())
+ verify(recognizer.onCancel!!).invoke()
+ }
+ verifyNoMoreInteractions(recognizer.onStart, recognizer.onStop, recognizer.onCancel)
+ }
+
+ @Test
+ fun cancelHandler_downUpCancel_justStartAndStopCalledInOrderOnce() {
+ var pointer = down()
+ recognizer.pointerInputHandler.invokeOverAllPasses(listOf(pointer))
+ pointer = pointer.up(100L.millisecondsToTimestamp())
+ recognizer.pointerInputHandler.invokeOverAllPasses(listOf(pointer))
+ recognizer.cancelHandler.invoke()
+
+ inOrder(recognizer.onStart!!, recognizer.onStop!!) {
+ verify(recognizer.onStart!!).invoke(any())
+ verify(recognizer.onStop!!).invoke()
+ }
+ verifyNoMoreInteractions(recognizer.onStart, recognizer.onStop, recognizer.onCancel)
+ }
+
+ @Test
+ fun cancelHandler_downMoveCancel_justStartAndCancelCalledInOrderOnce() {
+ var pointer = down()
+ recognizer.pointerInputHandler.invokeOverAllPasses(listOf(pointer))
+ pointer = pointer.moveTo(50L.millisecondsToTimestamp(), 1f)
+ recognizer.pointerInputHandler.invokeOverAllPasses(listOf(pointer))
+ recognizer.cancelHandler.invoke()
+
+ inOrder(recognizer.onStart!!, recognizer.onCancel!!) {
+ verify(recognizer.onStart!!).invoke(any())
+ verify(recognizer.onCancel!!).invoke()
+ }
+ verifyNoMoreInteractions(recognizer.onStart, recognizer.onStop, recognizer.onCancel)
+ }
+
+ @Test
+ fun cancelHandler_downMoveConsumedCancel_justStartAndCancelCalledInOrderOnce() {
+ var pointer = down()
+ recognizer.pointerInputHandler.invokeOverAllPasses(listOf(pointer))
+ pointer = pointer.moveTo(50L.millisecondsToTimestamp(), 1f).consume(1f)
+ recognizer.pointerInputHandler.invokeOverAllPasses(listOf(pointer))
+ recognizer.cancelHandler.invoke()
+
+ inOrder(recognizer.onStart!!, recognizer.onCancel!!) {
+ verify(recognizer.onStart!!).invoke(any())
+ verify(recognizer.onCancel!!).invoke()
+ }
+ verifyNoMoreInteractions(recognizer.onStart, recognizer.onStop, recognizer.onCancel)
+ }
+
+ @Test
+ fun cancelHandler_downThenCancelThenDown_justStartCancelStartCalledInOrderOnce() {
+ var pointer = down()
+ recognizer.pointerInputHandler.invokeOverAllPasses(listOf(pointer))
+ recognizer.cancelHandler.invoke()
+ pointer = down()
+ recognizer.pointerInputHandler.invokeOverAllPasses(listOf(pointer))
+
+ inOrder(recognizer.onStart!!, recognizer.onCancel!!) {
+ verify(recognizer.onStart!!).invoke(any())
+ verify(recognizer.onCancel!!).invoke()
+ verify(recognizer.onStart!!).invoke(any())
+ }
+ verifyNoMoreInteractions(recognizer.onStart, recognizer.onStop, recognizer.onCancel)
+ }
}
\ No newline at end of file
diff --git a/ui/ui-layout/api/0.1.0-dev03.txt b/ui/ui-layout/api/0.1.0-dev03.txt
index dfbedd7..4b107bc 100644
--- a/ui/ui-layout/api/0.1.0-dev03.txt
+++ b/ui/ui-layout/api/0.1.0-dev03.txt
@@ -19,6 +19,15 @@
method @Deprecated public static void AspectRatio(float aspectRatio, kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
+ public final class ColumnScope extends androidx.ui.layout.FlexScope {
+ method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
+ method public androidx.ui.core.LayoutModifier getEnd(androidx.ui.layout.Gravity);
+ method public androidx.ui.core.LayoutModifier getStart(androidx.ui.layout.Gravity);
+ property public final androidx.ui.core.LayoutModifier Center;
+ property public final androidx.ui.core.LayoutModifier End;
+ property public final androidx.ui.core.LayoutModifier Start;
+ }
+
public final class ConstrainedBoxKt {
ctor public ConstrainedBoxKt();
method public static void ConstrainedBox(androidx.ui.layout.DpConstraints constraints, androidx.ui.core.Modifier modifier = Modifier.None, kotlin.jvm.functions.Function0<kotlin.Unit> children);
@@ -116,15 +125,15 @@
public final class FlexKt {
ctor public FlexKt();
- method public static void Column(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.layout.CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.Start, androidx.ui.layout.LayoutSize crossAxisSize = androidx.ui.layout.LayoutSize.Wrap, kotlin.jvm.functions.Function1<? super androidx.ui.layout.FlexScope,kotlin.Unit> block);
+ method public static void Column(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.layout.CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.Start, androidx.ui.layout.LayoutSize crossAxisSize = androidx.ui.layout.LayoutSize.Wrap, kotlin.jvm.functions.Function1<? super androidx.ui.layout.ColumnScope,kotlin.Unit> block);
method public static void FlexColumn(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.layout.CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.Start, androidx.ui.layout.LayoutSize crossAxisSize = androidx.ui.layout.LayoutSize.Wrap, kotlin.jvm.functions.Function1<? super androidx.ui.layout.FlexChildren,kotlin.Unit> block);
method public static void FlexRow(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.layout.CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.Start, androidx.ui.layout.LayoutSize crossAxisSize = androidx.ui.layout.LayoutSize.Wrap, kotlin.jvm.functions.Function1<? super androidx.ui.layout.FlexChildren,kotlin.Unit> block);
- method public static void Row(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.layout.CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.Start, androidx.ui.layout.LayoutSize crossAxisSize = androidx.ui.layout.LayoutSize.Wrap, kotlin.jvm.functions.Function1<? super androidx.ui.layout.FlexScope,kotlin.Unit> block);
+ method public static void Row(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.layout.CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.Start, androidx.ui.layout.LayoutSize crossAxisSize = androidx.ui.layout.LayoutSize.Wrap, kotlin.jvm.functions.Function1<? super androidx.ui.layout.RowScope,kotlin.Unit> block);
}
- public final class FlexScope {
- method public androidx.ui.core.LayoutModifier Flexible(float flex, boolean tight = true);
- method public androidx.ui.core.LayoutModifier getInflexible();
+ public abstract sealed class FlexScope {
+ method public final androidx.ui.core.LayoutModifier Flexible(float flex, boolean tight = true);
+ method public final androidx.ui.core.LayoutModifier getInflexible();
property public final androidx.ui.core.LayoutModifier Inflexible;
}
@@ -140,6 +149,10 @@
method public static void FlowRow(androidx.ui.layout.LayoutSize mainAxisSize = androidx.ui.layout.LayoutSize.Wrap, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.core.Dp mainAxisSpacing = 0.dp, androidx.ui.layout.FlowCrossAxisAlignment crossAxisAlignment = androidx.ui.layout.FlowCrossAxisAlignment.Start, androidx.ui.core.Dp crossAxisSpacing = 0.dp, androidx.ui.layout.MainAxisAlignment lastLineMainAxisAlignment = mainAxisAlignment, kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
+ public final class Gravity {
+ field public static final androidx.ui.layout.Gravity! INSTANCE;
+ }
+
public final class IntrinsicKt {
ctor public IntrinsicKt();
method public static void MaxIntrinsicHeight(kotlin.jvm.functions.Function0<kotlin.Unit> children);
@@ -162,6 +175,15 @@
enum_constant public static final androidx.ui.layout.MainAxisAlignment Start;
}
+ public final class RowScope extends androidx.ui.layout.FlexScope {
+ method public androidx.ui.core.LayoutModifier getBottom(androidx.ui.layout.Gravity);
+ method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
+ method public androidx.ui.core.LayoutModifier getTop(androidx.ui.layout.Gravity);
+ property public final androidx.ui.core.LayoutModifier Bottom;
+ property public final androidx.ui.core.LayoutModifier Center;
+ property public final androidx.ui.core.LayoutModifier Top;
+ }
+
public final class SpacerKt {
ctor public SpacerKt();
method public static void FixedSpacer(androidx.ui.core.Dp width, androidx.ui.core.Dp height);
diff --git a/ui/ui-layout/api/api_lint.ignore b/ui/ui-layout/api/api_lint.ignore
index b88d3ac..01bab4c 100644
--- a/ui/ui-layout/api/api_lint.ignore
+++ b/ui/ui-layout/api/api_lint.ignore
@@ -15,3 +15,5 @@
Missing nullability on field `INSTANCE` in class `class androidx.ui.layout.TableColumnWidth.MinIntrinsic`
MissingNullability: androidx.ui.layout.TableColumnWidth.Wrap#INSTANCE:
Missing nullability on field `INSTANCE` in class `class androidx.ui.layout.TableColumnWidth.Wrap`
+MissingNullability: androidx.ui.layout.Gravity#INSTANCE:
+ Missing nullability on field `INSTANCE` in class `class androidx.ui.layout.Gravity`
\ No newline at end of file
diff --git a/ui/ui-layout/api/current.txt b/ui/ui-layout/api/current.txt
index dfbedd7..4b107bc 100644
--- a/ui/ui-layout/api/current.txt
+++ b/ui/ui-layout/api/current.txt
@@ -19,6 +19,15 @@
method @Deprecated public static void AspectRatio(float aspectRatio, kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
+ public final class ColumnScope extends androidx.ui.layout.FlexScope {
+ method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
+ method public androidx.ui.core.LayoutModifier getEnd(androidx.ui.layout.Gravity);
+ method public androidx.ui.core.LayoutModifier getStart(androidx.ui.layout.Gravity);
+ property public final androidx.ui.core.LayoutModifier Center;
+ property public final androidx.ui.core.LayoutModifier End;
+ property public final androidx.ui.core.LayoutModifier Start;
+ }
+
public final class ConstrainedBoxKt {
ctor public ConstrainedBoxKt();
method public static void ConstrainedBox(androidx.ui.layout.DpConstraints constraints, androidx.ui.core.Modifier modifier = Modifier.None, kotlin.jvm.functions.Function0<kotlin.Unit> children);
@@ -116,15 +125,15 @@
public final class FlexKt {
ctor public FlexKt();
- method public static void Column(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.layout.CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.Start, androidx.ui.layout.LayoutSize crossAxisSize = androidx.ui.layout.LayoutSize.Wrap, kotlin.jvm.functions.Function1<? super androidx.ui.layout.FlexScope,kotlin.Unit> block);
+ method public static void Column(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.layout.CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.Start, androidx.ui.layout.LayoutSize crossAxisSize = androidx.ui.layout.LayoutSize.Wrap, kotlin.jvm.functions.Function1<? super androidx.ui.layout.ColumnScope,kotlin.Unit> block);
method public static void FlexColumn(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.layout.CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.Start, androidx.ui.layout.LayoutSize crossAxisSize = androidx.ui.layout.LayoutSize.Wrap, kotlin.jvm.functions.Function1<? super androidx.ui.layout.FlexChildren,kotlin.Unit> block);
method public static void FlexRow(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.layout.CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.Start, androidx.ui.layout.LayoutSize crossAxisSize = androidx.ui.layout.LayoutSize.Wrap, kotlin.jvm.functions.Function1<? super androidx.ui.layout.FlexChildren,kotlin.Unit> block);
- method public static void Row(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.layout.CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.Start, androidx.ui.layout.LayoutSize crossAxisSize = androidx.ui.layout.LayoutSize.Wrap, kotlin.jvm.functions.Function1<? super androidx.ui.layout.FlexScope,kotlin.Unit> block);
+ method public static void Row(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.layout.CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.Start, androidx.ui.layout.LayoutSize crossAxisSize = androidx.ui.layout.LayoutSize.Wrap, kotlin.jvm.functions.Function1<? super androidx.ui.layout.RowScope,kotlin.Unit> block);
}
- public final class FlexScope {
- method public androidx.ui.core.LayoutModifier Flexible(float flex, boolean tight = true);
- method public androidx.ui.core.LayoutModifier getInflexible();
+ public abstract sealed class FlexScope {
+ method public final androidx.ui.core.LayoutModifier Flexible(float flex, boolean tight = true);
+ method public final androidx.ui.core.LayoutModifier getInflexible();
property public final androidx.ui.core.LayoutModifier Inflexible;
}
@@ -140,6 +149,10 @@
method public static void FlowRow(androidx.ui.layout.LayoutSize mainAxisSize = androidx.ui.layout.LayoutSize.Wrap, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.core.Dp mainAxisSpacing = 0.dp, androidx.ui.layout.FlowCrossAxisAlignment crossAxisAlignment = androidx.ui.layout.FlowCrossAxisAlignment.Start, androidx.ui.core.Dp crossAxisSpacing = 0.dp, androidx.ui.layout.MainAxisAlignment lastLineMainAxisAlignment = mainAxisAlignment, kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
+ public final class Gravity {
+ field public static final androidx.ui.layout.Gravity! INSTANCE;
+ }
+
public final class IntrinsicKt {
ctor public IntrinsicKt();
method public static void MaxIntrinsicHeight(kotlin.jvm.functions.Function0<kotlin.Unit> children);
@@ -162,6 +175,15 @@
enum_constant public static final androidx.ui.layout.MainAxisAlignment Start;
}
+ public final class RowScope extends androidx.ui.layout.FlexScope {
+ method public androidx.ui.core.LayoutModifier getBottom(androidx.ui.layout.Gravity);
+ method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
+ method public androidx.ui.core.LayoutModifier getTop(androidx.ui.layout.Gravity);
+ property public final androidx.ui.core.LayoutModifier Bottom;
+ property public final androidx.ui.core.LayoutModifier Center;
+ property public final androidx.ui.core.LayoutModifier Top;
+ }
+
public final class SpacerKt {
ctor public SpacerKt();
method public static void FixedSpacer(androidx.ui.core.Dp width, androidx.ui.core.Dp height);
diff --git a/ui/ui-layout/api/public_plus_experimental_0.1.0-dev03.txt b/ui/ui-layout/api/public_plus_experimental_0.1.0-dev03.txt
index dfbedd7..4b107bc 100644
--- a/ui/ui-layout/api/public_plus_experimental_0.1.0-dev03.txt
+++ b/ui/ui-layout/api/public_plus_experimental_0.1.0-dev03.txt
@@ -19,6 +19,15 @@
method @Deprecated public static void AspectRatio(float aspectRatio, kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
+ public final class ColumnScope extends androidx.ui.layout.FlexScope {
+ method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
+ method public androidx.ui.core.LayoutModifier getEnd(androidx.ui.layout.Gravity);
+ method public androidx.ui.core.LayoutModifier getStart(androidx.ui.layout.Gravity);
+ property public final androidx.ui.core.LayoutModifier Center;
+ property public final androidx.ui.core.LayoutModifier End;
+ property public final androidx.ui.core.LayoutModifier Start;
+ }
+
public final class ConstrainedBoxKt {
ctor public ConstrainedBoxKt();
method public static void ConstrainedBox(androidx.ui.layout.DpConstraints constraints, androidx.ui.core.Modifier modifier = Modifier.None, kotlin.jvm.functions.Function0<kotlin.Unit> children);
@@ -116,15 +125,15 @@
public final class FlexKt {
ctor public FlexKt();
- method public static void Column(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.layout.CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.Start, androidx.ui.layout.LayoutSize crossAxisSize = androidx.ui.layout.LayoutSize.Wrap, kotlin.jvm.functions.Function1<? super androidx.ui.layout.FlexScope,kotlin.Unit> block);
+ method public static void Column(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.layout.CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.Start, androidx.ui.layout.LayoutSize crossAxisSize = androidx.ui.layout.LayoutSize.Wrap, kotlin.jvm.functions.Function1<? super androidx.ui.layout.ColumnScope,kotlin.Unit> block);
method public static void FlexColumn(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.layout.CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.Start, androidx.ui.layout.LayoutSize crossAxisSize = androidx.ui.layout.LayoutSize.Wrap, kotlin.jvm.functions.Function1<? super androidx.ui.layout.FlexChildren,kotlin.Unit> block);
method public static void FlexRow(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.layout.CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.Start, androidx.ui.layout.LayoutSize crossAxisSize = androidx.ui.layout.LayoutSize.Wrap, kotlin.jvm.functions.Function1<? super androidx.ui.layout.FlexChildren,kotlin.Unit> block);
- method public static void Row(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.layout.CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.Start, androidx.ui.layout.LayoutSize crossAxisSize = androidx.ui.layout.LayoutSize.Wrap, kotlin.jvm.functions.Function1<? super androidx.ui.layout.FlexScope,kotlin.Unit> block);
+ method public static void Row(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.layout.CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.Start, androidx.ui.layout.LayoutSize crossAxisSize = androidx.ui.layout.LayoutSize.Wrap, kotlin.jvm.functions.Function1<? super androidx.ui.layout.RowScope,kotlin.Unit> block);
}
- public final class FlexScope {
- method public androidx.ui.core.LayoutModifier Flexible(float flex, boolean tight = true);
- method public androidx.ui.core.LayoutModifier getInflexible();
+ public abstract sealed class FlexScope {
+ method public final androidx.ui.core.LayoutModifier Flexible(float flex, boolean tight = true);
+ method public final androidx.ui.core.LayoutModifier getInflexible();
property public final androidx.ui.core.LayoutModifier Inflexible;
}
@@ -140,6 +149,10 @@
method public static void FlowRow(androidx.ui.layout.LayoutSize mainAxisSize = androidx.ui.layout.LayoutSize.Wrap, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.core.Dp mainAxisSpacing = 0.dp, androidx.ui.layout.FlowCrossAxisAlignment crossAxisAlignment = androidx.ui.layout.FlowCrossAxisAlignment.Start, androidx.ui.core.Dp crossAxisSpacing = 0.dp, androidx.ui.layout.MainAxisAlignment lastLineMainAxisAlignment = mainAxisAlignment, kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
+ public final class Gravity {
+ field public static final androidx.ui.layout.Gravity! INSTANCE;
+ }
+
public final class IntrinsicKt {
ctor public IntrinsicKt();
method public static void MaxIntrinsicHeight(kotlin.jvm.functions.Function0<kotlin.Unit> children);
@@ -162,6 +175,15 @@
enum_constant public static final androidx.ui.layout.MainAxisAlignment Start;
}
+ public final class RowScope extends androidx.ui.layout.FlexScope {
+ method public androidx.ui.core.LayoutModifier getBottom(androidx.ui.layout.Gravity);
+ method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
+ method public androidx.ui.core.LayoutModifier getTop(androidx.ui.layout.Gravity);
+ property public final androidx.ui.core.LayoutModifier Bottom;
+ property public final androidx.ui.core.LayoutModifier Center;
+ property public final androidx.ui.core.LayoutModifier Top;
+ }
+
public final class SpacerKt {
ctor public SpacerKt();
method public static void FixedSpacer(androidx.ui.core.Dp width, androidx.ui.core.Dp height);
diff --git a/ui/ui-layout/api/public_plus_experimental_current.txt b/ui/ui-layout/api/public_plus_experimental_current.txt
index dfbedd7..4b107bc 100644
--- a/ui/ui-layout/api/public_plus_experimental_current.txt
+++ b/ui/ui-layout/api/public_plus_experimental_current.txt
@@ -19,6 +19,15 @@
method @Deprecated public static void AspectRatio(float aspectRatio, kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
+ public final class ColumnScope extends androidx.ui.layout.FlexScope {
+ method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
+ method public androidx.ui.core.LayoutModifier getEnd(androidx.ui.layout.Gravity);
+ method public androidx.ui.core.LayoutModifier getStart(androidx.ui.layout.Gravity);
+ property public final androidx.ui.core.LayoutModifier Center;
+ property public final androidx.ui.core.LayoutModifier End;
+ property public final androidx.ui.core.LayoutModifier Start;
+ }
+
public final class ConstrainedBoxKt {
ctor public ConstrainedBoxKt();
method public static void ConstrainedBox(androidx.ui.layout.DpConstraints constraints, androidx.ui.core.Modifier modifier = Modifier.None, kotlin.jvm.functions.Function0<kotlin.Unit> children);
@@ -116,15 +125,15 @@
public final class FlexKt {
ctor public FlexKt();
- method public static void Column(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.layout.CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.Start, androidx.ui.layout.LayoutSize crossAxisSize = androidx.ui.layout.LayoutSize.Wrap, kotlin.jvm.functions.Function1<? super androidx.ui.layout.FlexScope,kotlin.Unit> block);
+ method public static void Column(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.layout.CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.Start, androidx.ui.layout.LayoutSize crossAxisSize = androidx.ui.layout.LayoutSize.Wrap, kotlin.jvm.functions.Function1<? super androidx.ui.layout.ColumnScope,kotlin.Unit> block);
method public static void FlexColumn(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.layout.CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.Start, androidx.ui.layout.LayoutSize crossAxisSize = androidx.ui.layout.LayoutSize.Wrap, kotlin.jvm.functions.Function1<? super androidx.ui.layout.FlexChildren,kotlin.Unit> block);
method public static void FlexRow(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.layout.CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.Start, androidx.ui.layout.LayoutSize crossAxisSize = androidx.ui.layout.LayoutSize.Wrap, kotlin.jvm.functions.Function1<? super androidx.ui.layout.FlexChildren,kotlin.Unit> block);
- method public static void Row(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.layout.CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.Start, androidx.ui.layout.LayoutSize crossAxisSize = androidx.ui.layout.LayoutSize.Wrap, kotlin.jvm.functions.Function1<? super androidx.ui.layout.FlexScope,kotlin.Unit> block);
+ method public static void Row(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.layout.CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.Start, androidx.ui.layout.LayoutSize crossAxisSize = androidx.ui.layout.LayoutSize.Wrap, kotlin.jvm.functions.Function1<? super androidx.ui.layout.RowScope,kotlin.Unit> block);
}
- public final class FlexScope {
- method public androidx.ui.core.LayoutModifier Flexible(float flex, boolean tight = true);
- method public androidx.ui.core.LayoutModifier getInflexible();
+ public abstract sealed class FlexScope {
+ method public final androidx.ui.core.LayoutModifier Flexible(float flex, boolean tight = true);
+ method public final androidx.ui.core.LayoutModifier getInflexible();
property public final androidx.ui.core.LayoutModifier Inflexible;
}
@@ -140,6 +149,10 @@
method public static void FlowRow(androidx.ui.layout.LayoutSize mainAxisSize = androidx.ui.layout.LayoutSize.Wrap, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.core.Dp mainAxisSpacing = 0.dp, androidx.ui.layout.FlowCrossAxisAlignment crossAxisAlignment = androidx.ui.layout.FlowCrossAxisAlignment.Start, androidx.ui.core.Dp crossAxisSpacing = 0.dp, androidx.ui.layout.MainAxisAlignment lastLineMainAxisAlignment = mainAxisAlignment, kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
+ public final class Gravity {
+ field public static final androidx.ui.layout.Gravity! INSTANCE;
+ }
+
public final class IntrinsicKt {
ctor public IntrinsicKt();
method public static void MaxIntrinsicHeight(kotlin.jvm.functions.Function0<kotlin.Unit> children);
@@ -162,6 +175,15 @@
enum_constant public static final androidx.ui.layout.MainAxisAlignment Start;
}
+ public final class RowScope extends androidx.ui.layout.FlexScope {
+ method public androidx.ui.core.LayoutModifier getBottom(androidx.ui.layout.Gravity);
+ method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
+ method public androidx.ui.core.LayoutModifier getTop(androidx.ui.layout.Gravity);
+ property public final androidx.ui.core.LayoutModifier Bottom;
+ property public final androidx.ui.core.LayoutModifier Center;
+ property public final androidx.ui.core.LayoutModifier Top;
+ }
+
public final class SpacerKt {
ctor public SpacerKt();
method public static void FixedSpacer(androidx.ui.core.Dp width, androidx.ui.core.Dp height);
diff --git a/ui/ui-layout/api/restricted_0.1.0-dev03.txt b/ui/ui-layout/api/restricted_0.1.0-dev03.txt
index dfbedd7..4b107bc 100644
--- a/ui/ui-layout/api/restricted_0.1.0-dev03.txt
+++ b/ui/ui-layout/api/restricted_0.1.0-dev03.txt
@@ -19,6 +19,15 @@
method @Deprecated public static void AspectRatio(float aspectRatio, kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
+ public final class ColumnScope extends androidx.ui.layout.FlexScope {
+ method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
+ method public androidx.ui.core.LayoutModifier getEnd(androidx.ui.layout.Gravity);
+ method public androidx.ui.core.LayoutModifier getStart(androidx.ui.layout.Gravity);
+ property public final androidx.ui.core.LayoutModifier Center;
+ property public final androidx.ui.core.LayoutModifier End;
+ property public final androidx.ui.core.LayoutModifier Start;
+ }
+
public final class ConstrainedBoxKt {
ctor public ConstrainedBoxKt();
method public static void ConstrainedBox(androidx.ui.layout.DpConstraints constraints, androidx.ui.core.Modifier modifier = Modifier.None, kotlin.jvm.functions.Function0<kotlin.Unit> children);
@@ -116,15 +125,15 @@
public final class FlexKt {
ctor public FlexKt();
- method public static void Column(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.layout.CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.Start, androidx.ui.layout.LayoutSize crossAxisSize = androidx.ui.layout.LayoutSize.Wrap, kotlin.jvm.functions.Function1<? super androidx.ui.layout.FlexScope,kotlin.Unit> block);
+ method public static void Column(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.layout.CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.Start, androidx.ui.layout.LayoutSize crossAxisSize = androidx.ui.layout.LayoutSize.Wrap, kotlin.jvm.functions.Function1<? super androidx.ui.layout.ColumnScope,kotlin.Unit> block);
method public static void FlexColumn(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.layout.CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.Start, androidx.ui.layout.LayoutSize crossAxisSize = androidx.ui.layout.LayoutSize.Wrap, kotlin.jvm.functions.Function1<? super androidx.ui.layout.FlexChildren,kotlin.Unit> block);
method public static void FlexRow(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.layout.CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.Start, androidx.ui.layout.LayoutSize crossAxisSize = androidx.ui.layout.LayoutSize.Wrap, kotlin.jvm.functions.Function1<? super androidx.ui.layout.FlexChildren,kotlin.Unit> block);
- method public static void Row(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.layout.CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.Start, androidx.ui.layout.LayoutSize crossAxisSize = androidx.ui.layout.LayoutSize.Wrap, kotlin.jvm.functions.Function1<? super androidx.ui.layout.FlexScope,kotlin.Unit> block);
+ method public static void Row(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.layout.CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.Start, androidx.ui.layout.LayoutSize crossAxisSize = androidx.ui.layout.LayoutSize.Wrap, kotlin.jvm.functions.Function1<? super androidx.ui.layout.RowScope,kotlin.Unit> block);
}
- public final class FlexScope {
- method public androidx.ui.core.LayoutModifier Flexible(float flex, boolean tight = true);
- method public androidx.ui.core.LayoutModifier getInflexible();
+ public abstract sealed class FlexScope {
+ method public final androidx.ui.core.LayoutModifier Flexible(float flex, boolean tight = true);
+ method public final androidx.ui.core.LayoutModifier getInflexible();
property public final androidx.ui.core.LayoutModifier Inflexible;
}
@@ -140,6 +149,10 @@
method public static void FlowRow(androidx.ui.layout.LayoutSize mainAxisSize = androidx.ui.layout.LayoutSize.Wrap, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.core.Dp mainAxisSpacing = 0.dp, androidx.ui.layout.FlowCrossAxisAlignment crossAxisAlignment = androidx.ui.layout.FlowCrossAxisAlignment.Start, androidx.ui.core.Dp crossAxisSpacing = 0.dp, androidx.ui.layout.MainAxisAlignment lastLineMainAxisAlignment = mainAxisAlignment, kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
+ public final class Gravity {
+ field public static final androidx.ui.layout.Gravity! INSTANCE;
+ }
+
public final class IntrinsicKt {
ctor public IntrinsicKt();
method public static void MaxIntrinsicHeight(kotlin.jvm.functions.Function0<kotlin.Unit> children);
@@ -162,6 +175,15 @@
enum_constant public static final androidx.ui.layout.MainAxisAlignment Start;
}
+ public final class RowScope extends androidx.ui.layout.FlexScope {
+ method public androidx.ui.core.LayoutModifier getBottom(androidx.ui.layout.Gravity);
+ method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
+ method public androidx.ui.core.LayoutModifier getTop(androidx.ui.layout.Gravity);
+ property public final androidx.ui.core.LayoutModifier Bottom;
+ property public final androidx.ui.core.LayoutModifier Center;
+ property public final androidx.ui.core.LayoutModifier Top;
+ }
+
public final class SpacerKt {
ctor public SpacerKt();
method public static void FixedSpacer(androidx.ui.core.Dp width, androidx.ui.core.Dp height);
diff --git a/ui/ui-layout/api/restricted_current.txt b/ui/ui-layout/api/restricted_current.txt
index dfbedd7..4b107bc 100644
--- a/ui/ui-layout/api/restricted_current.txt
+++ b/ui/ui-layout/api/restricted_current.txt
@@ -19,6 +19,15 @@
method @Deprecated public static void AspectRatio(float aspectRatio, kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
+ public final class ColumnScope extends androidx.ui.layout.FlexScope {
+ method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
+ method public androidx.ui.core.LayoutModifier getEnd(androidx.ui.layout.Gravity);
+ method public androidx.ui.core.LayoutModifier getStart(androidx.ui.layout.Gravity);
+ property public final androidx.ui.core.LayoutModifier Center;
+ property public final androidx.ui.core.LayoutModifier End;
+ property public final androidx.ui.core.LayoutModifier Start;
+ }
+
public final class ConstrainedBoxKt {
ctor public ConstrainedBoxKt();
method public static void ConstrainedBox(androidx.ui.layout.DpConstraints constraints, androidx.ui.core.Modifier modifier = Modifier.None, kotlin.jvm.functions.Function0<kotlin.Unit> children);
@@ -116,15 +125,15 @@
public final class FlexKt {
ctor public FlexKt();
- method public static void Column(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.layout.CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.Start, androidx.ui.layout.LayoutSize crossAxisSize = androidx.ui.layout.LayoutSize.Wrap, kotlin.jvm.functions.Function1<? super androidx.ui.layout.FlexScope,kotlin.Unit> block);
+ method public static void Column(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.layout.CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.Start, androidx.ui.layout.LayoutSize crossAxisSize = androidx.ui.layout.LayoutSize.Wrap, kotlin.jvm.functions.Function1<? super androidx.ui.layout.ColumnScope,kotlin.Unit> block);
method public static void FlexColumn(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.layout.CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.Start, androidx.ui.layout.LayoutSize crossAxisSize = androidx.ui.layout.LayoutSize.Wrap, kotlin.jvm.functions.Function1<? super androidx.ui.layout.FlexChildren,kotlin.Unit> block);
method public static void FlexRow(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.layout.CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.Start, androidx.ui.layout.LayoutSize crossAxisSize = androidx.ui.layout.LayoutSize.Wrap, kotlin.jvm.functions.Function1<? super androidx.ui.layout.FlexChildren,kotlin.Unit> block);
- method public static void Row(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.layout.CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.Start, androidx.ui.layout.LayoutSize crossAxisSize = androidx.ui.layout.LayoutSize.Wrap, kotlin.jvm.functions.Function1<? super androidx.ui.layout.FlexScope,kotlin.Unit> block);
+ method public static void Row(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.layout.CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.Start, androidx.ui.layout.LayoutSize crossAxisSize = androidx.ui.layout.LayoutSize.Wrap, kotlin.jvm.functions.Function1<? super androidx.ui.layout.RowScope,kotlin.Unit> block);
}
- public final class FlexScope {
- method public androidx.ui.core.LayoutModifier Flexible(float flex, boolean tight = true);
- method public androidx.ui.core.LayoutModifier getInflexible();
+ public abstract sealed class FlexScope {
+ method public final androidx.ui.core.LayoutModifier Flexible(float flex, boolean tight = true);
+ method public final androidx.ui.core.LayoutModifier getInflexible();
property public final androidx.ui.core.LayoutModifier Inflexible;
}
@@ -140,6 +149,10 @@
method public static void FlowRow(androidx.ui.layout.LayoutSize mainAxisSize = androidx.ui.layout.LayoutSize.Wrap, androidx.ui.layout.MainAxisAlignment mainAxisAlignment = androidx.ui.layout.MainAxisAlignment.Start, androidx.ui.core.Dp mainAxisSpacing = 0.dp, androidx.ui.layout.FlowCrossAxisAlignment crossAxisAlignment = androidx.ui.layout.FlowCrossAxisAlignment.Start, androidx.ui.core.Dp crossAxisSpacing = 0.dp, androidx.ui.layout.MainAxisAlignment lastLineMainAxisAlignment = mainAxisAlignment, kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
+ public final class Gravity {
+ field public static final androidx.ui.layout.Gravity! INSTANCE;
+ }
+
public final class IntrinsicKt {
ctor public IntrinsicKt();
method public static void MaxIntrinsicHeight(kotlin.jvm.functions.Function0<kotlin.Unit> children);
@@ -162,6 +175,15 @@
enum_constant public static final androidx.ui.layout.MainAxisAlignment Start;
}
+ public final class RowScope extends androidx.ui.layout.FlexScope {
+ method public androidx.ui.core.LayoutModifier getBottom(androidx.ui.layout.Gravity);
+ method public androidx.ui.core.LayoutModifier getCenter(androidx.ui.layout.Gravity);
+ method public androidx.ui.core.LayoutModifier getTop(androidx.ui.layout.Gravity);
+ property public final androidx.ui.core.LayoutModifier Bottom;
+ property public final androidx.ui.core.LayoutModifier Center;
+ property public final androidx.ui.core.LayoutModifier Top;
+ }
+
public final class SpacerKt {
ctor public SpacerKt();
method public static void FixedSpacer(androidx.ui.core.Dp width, androidx.ui.core.Dp height);
diff --git a/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/AlignSample.kt b/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/AlignSample.kt
index 683da48..0e94d80 100644
--- a/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/AlignSample.kt
+++ b/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/AlignSample.kt
@@ -23,6 +23,11 @@
import androidx.ui.graphics.Color
import androidx.ui.layout.Align
import androidx.ui.layout.Center
+import androidx.ui.layout.Column
+import androidx.ui.layout.ExpandedHeight
+import androidx.ui.layout.ExpandedWidth
+import androidx.ui.layout.Gravity
+import androidx.ui.layout.Row
@Sampled
@Composable
@@ -39,3 +44,41 @@
SizedRectangle(color = Color.Blue, width = 20.dp, height = 20.dp)
}
}
+
+@Sampled
+@Composable
+fun SimpleGravityInRow() {
+ Row(ExpandedHeight) {
+ // The child with no gravity modifier is positioned by default so that its top edge is
+ // aligned to the top of the vertical axis.
+ SizedRectangle(color = Color.Magenta, width = 80.dp, height = 40.dp)
+ // Gravity.Top, the child will be positioned so that its top edge is aligned to the top
+ // of the vertical axis.
+ SizedRectangle(Gravity.Top, color = Color.Red, width = 80.dp, height = 40.dp)
+ // Gravity.Center, the child will be positioned so that its center is in the middle of
+ // the vertical axis.
+ SizedRectangle(Gravity.Center, color = Color.Yellow, width = 80.dp, height = 40.dp)
+ // Gravity.Bottom, the child will be positioned so that its bottom edge is aligned to the
+ // bottom of the vertical axis.
+ SizedRectangle(Gravity.Bottom, color = Color.Green, width = 80.dp, height = 40.dp)
+ }
+}
+
+@Sampled
+@Composable
+fun SimpleGravityInColumn() {
+ Column(ExpandedWidth) {
+ // The child with no gravity modifier is positioned by default so that its start edge
+ // aligned with the start edge of the horizontal axis.
+ SizedRectangle(color = Color.Magenta, width = 80.dp, height = 40.dp)
+ // Gravity.Start, the child will be positioned so that its start edge is aligned with
+ // the start edge of the horizontal axis.
+ SizedRectangle(Gravity.Start, color = Color.Red, width = 80.dp, height = 40.dp)
+ // Gravity.Center, the child will be positioned so that its center is in the middle of
+ // the horizontal axis.
+ SizedRectangle(Gravity.Center, color = Color.Yellow, width = 80.dp, height = 40.dp)
+ // Gravity.End, the child will be positioned so that its end edge aligned to the end of
+ // the horizontal axis.
+ SizedRectangle(Gravity.End, color = Color.Green, width = 80.dp, height = 40.dp)
+ }
+}
\ No newline at end of file
diff --git a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/FlexTest.kt b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/FlexTest.kt
index 15c7eb9..e72812f 100644
--- a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/FlexTest.kt
+++ b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/FlexTest.kt
@@ -39,6 +39,7 @@
import androidx.ui.core.OnChildPositioned
import androidx.ui.core.OnPositioned
import androidx.ui.core.VerticalAlignmentLine
+import androidx.ui.core.globalPosition
import androidx.ui.core.min
import androidx.ui.layout.Align
import androidx.ui.layout.AspectRatio
@@ -50,6 +51,7 @@
import androidx.ui.layout.FixedSpacer
import androidx.ui.layout.FlexColumn
import androidx.ui.layout.FlexRow
+import androidx.ui.layout.Gravity
import androidx.ui.layout.Row
import androidx.ui.layout.Wrap
import org.junit.Assert.assertNotNull
@@ -64,6 +66,7 @@
@SmallTest
@RunWith(JUnit4::class)
class FlexTest : LayoutTest() {
+ // region Size and position tests for Row and Column
@Test
fun testRow() = withDensity(density) {
val sizeDp = 50.dp
@@ -539,7 +542,9 @@
assertEquals(PxPosition(0.px, 0.px), childPosition[0])
assertEquals(PxPosition(0.px, childrenHeight.toPx()), childPosition[1])
}
+ // endregion
+ // region Cross axis alignment tests in Row
@Test
fun testRow_withStartCrossAxisAlignment() = withDensity(density) {
val sizeDp = 50.dp
@@ -685,6 +690,62 @@
}
@Test
+ fun testRow_withGravityModifier() = withDensity(density) {
+ val sizeDp = 50.dp
+ val size = sizeDp.toIntPx()
+
+ val drawLatch = CountDownLatch(3)
+ val childSize = arrayOfNulls<PxSize>(3)
+ val childPosition = arrayOfNulls<PxPosition>(3)
+ show {
+ Align(Alignment.TopLeft) {
+ Row(ExpandedHeight) {
+ Container(width = sizeDp, height = sizeDp, modifier = Gravity.Top) {
+ OnPositioned( coordinates ->
+ childSize[0] = coordinates.size
+ childPosition[0] = coordinates.globalPosition
+ drawLatch.countDown()
+ })
+ }
+ Container(width = sizeDp, height = sizeDp, modifier = Gravity.Center) {
+ OnPositioned( coordinates ->
+ childSize[1] = coordinates.size
+ childPosition[1] = coordinates.globalPosition
+ drawLatch.countDown()
+ })
+ }
+ Container(width = sizeDp, height = sizeDp, modifier = Gravity.Bottom) {
+ OnPositioned( coordinates ->
+ childSize[2] = coordinates.size
+ childPosition[2] = coordinates.globalPosition
+ drawLatch.countDown()
+ })
+ }
+ }
+ }
+ }
+ drawLatch.await(1, TimeUnit.SECONDS)
+
+ val root = findAndroidComposeView()
+ waitForDraw(root)
+ val rootHeight = root.height.px
+
+ assertEquals(PxSize(size.toPx(), size.toPx()), childSize[0])
+ assertEquals(PxPosition(0.px, 0.px), childPosition[0])
+
+ assertEquals(PxSize(size.toPx(), size.toPx()), childSize[1])
+ assertEquals(
+ PxPosition(size.toPx(), ((rootHeight - size.toPx()) / 2).round().toPx()),
+ childPosition[1]
+ )
+
+ assertEquals(PxSize(size.toPx(), size.toPx()), childSize[2])
+ assertEquals(PxPosition(size.toPx() * 2, rootHeight - size.toPx()), childPosition[2])
+ }
+ // endregion
+
+ // region Cross axis alignment tests in Column
+ @Test
fun testColumn_withStartCrossAxisAlignment() = withDensity(density) {
val sizeDp = 50.dp
val size = sizeDp.toIntPx()
@@ -830,6 +891,62 @@
}
@Test
+ fun testColumn_withGravityModifier() = withDensity(density) {
+ val sizeDp = 50.dp
+ val size = sizeDp.toIntPx()
+
+ val drawLatch = CountDownLatch(3)
+ val childSize = arrayOfNulls<PxSize>(3)
+ val childPosition = arrayOfNulls<PxPosition>(3)
+ show {
+ Align(Alignment.TopCenter) {
+ Column(ExpandedWidth) {
+ Container(width = sizeDp, height = sizeDp, modifier = Gravity.Start) {
+ OnPositioned( coordinates ->
+ childSize[0] = coordinates.size
+ childPosition[0] = coordinates.globalPosition
+ drawLatch.countDown()
+ })
+ }
+ Container(width = sizeDp, height = sizeDp, modifier = Gravity.Center) {
+ OnPositioned( coordinates ->
+ childSize[1] = coordinates.size
+ childPosition[1] = coordinates.globalPosition
+ drawLatch.countDown()
+ })
+ }
+ Container(width = sizeDp, height = sizeDp, modifier = Gravity.End) {
+ OnPositioned( coordinates ->
+ childSize[2] = coordinates.size
+ childPosition[2] = coordinates.globalPosition
+ drawLatch.countDown()
+ })
+ }
+ }
+ }
+ }
+ drawLatch.await(1, TimeUnit.SECONDS)
+
+ val root = findAndroidComposeView()
+ waitForDraw(root)
+ val rootWidth = root.width.px
+
+ assertEquals(PxSize(size.toPx(), size.toPx()), childSize[0])
+ assertEquals(PxPosition(0.px, 0.px), childPosition[0])
+
+ assertEquals(PxSize(size.toPx(), size.toPx()), childSize[1])
+ assertEquals(
+ PxPosition(((rootWidth - size.toPx()) / 2).round().toPx(), size.toPx()),
+ childPosition[1]
+ )
+
+ assertEquals(PxSize(size.toPx(), size.toPx()), childSize[2])
+ assertEquals(PxPosition(rootWidth - size.toPx(), size.toPx() * 2), childPosition[2])
+ }
+ // endregion
+
+ // region Size tests in Row
+ @Test
fun testRow_expandedWidth_withExpandedModifier() = withDensity(density) {
val sizeDp = 50.dp
@@ -1192,7 +1309,9 @@
expandedChildSize
)
}
+ // endregion
+ // region Size tests in Column
@Test
fun testColumn_expandedHeight_withExpandedModifier() = withDensity(density) {
val sizeDp = 50.dp
@@ -1556,7 +1675,9 @@
expandedChildSize
)
}
+ // endregion
+ // region Main axis alignment tests in Row
@Test
fun testRow_withStartMainAxisAlignment() = withDensity(density) {
val sizeDp = 50.dp
@@ -1824,7 +1945,9 @@
assertEquals(PxPosition((gap * 3 / 2).toPx() + size.toPx(), 0.px), childPosition[1])
assertEquals(PxPosition((gap * 5 / 2).toPx() + size.toPx() * 2, 0.px), childPosition[2])
}
+ // endregion
+ // region Main axis alignment tests in Column
@Test
fun testColumn_withStartMainAxisAlignment() = withDensity(density) {
val sizeDp = 50.dp
@@ -2156,7 +2279,9 @@
assertEquals(PxSize(childSize, childSize), containerSize.value)
}
+ // endregion
+ // region Intrinsic measurement tests
@Test
fun testRow_withInflexibleChildren_hasCorrectIntrinsicMeasurements() = withDensity(density) {
testIntrinsics(@Composable {
@@ -2170,6 +2295,11 @@
ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp)) { }
}
}, @Composable {
+ Row {
+ Container(AspectRatio(2f) wraps Gravity.Top) { }
+ ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp), Gravity.Center) { }
+ }
+ }, @Composable {
Row(
ExpandedWidth,
mainAxisAlignment = MainAxisAlignment.Start,
@@ -2251,6 +2381,19 @@
ConstrainedBox(DpConstraints.tightConstraints(20.dp, 30.dp)) { }
}
}, @Composable {
+ Row {
+ ConstrainedBox(
+ DpConstraints.tightConstraints(20.dp, 30.dp),
+ Flexible(3f) wraps Gravity.Top
+ ) { }
+ ConstrainedBox(
+ DpConstraints.tightConstraints(30.dp, 40.dp),
+ Flexible(2f) wraps Gravity.Center
+ ) { }
+ Container(AspectRatio(2f) wraps Flexible(2f)) { }
+ ConstrainedBox(DpConstraints.tightConstraints(20.dp, 30.dp), Gravity.Bottom) { }
+ }
+ }, @Composable {
Row(
mainAxisAlignment = MainAxisAlignment.Start,
crossAxisAlignment = CrossAxisAlignment.Start
@@ -2360,6 +2503,11 @@
ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp)) { }
}
}, @Composable {
+ Column {
+ Container(AspectRatio(2f) wraps Gravity.Start) { }
+ ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp), Gravity.End) { }
+ }
+ }, @Composable {
Column(ExpandedHeight) {
Container(AspectRatio(2f)) { }
ConstrainedBox(DpConstraints.tightConstraints(50.dp, 40.dp)) { }
@@ -2446,6 +2594,19 @@
ConstrainedBox(DpConstraints.tightConstraints(30.dp, 20.dp)) { }
}
}, @Composable {
+ Column {
+ ConstrainedBox(
+ DpConstraints.tightConstraints(30.dp, 20.dp),
+ Flexible(3f) wraps Gravity.Start
+ ) { }
+ ConstrainedBox(
+ DpConstraints.tightConstraints(40.dp, 30.dp),
+ Flexible(2f) wraps Gravity.Center
+ ) { }
+ Container(AspectRatio(0.5f) wraps Flexible(2f)) { }
+ ConstrainedBox(DpConstraints.tightConstraints(30.dp, 20.dp), Gravity.End) { }
+ }
+ }, @Composable {
Column(
mainAxisAlignment = MainAxisAlignment.Start,
crossAxisAlignment = CrossAxisAlignment.Start
@@ -2985,4 +3146,5 @@
assertNotNull(containerSize)
assertEquals(PxSize(sizeIntPx, sizeIntPx), containerSize.value)
}
+ // endregion
}
diff --git a/ui/ui-layout/src/main/java/androidx/ui/layout/Align.kt b/ui/ui-layout/src/main/java/androidx/ui/layout/Align.kt
index 26a4f79..22ff31b 100644
--- a/ui/ui-layout/src/main/java/androidx/ui/layout/Align.kt
+++ b/ui/ui-layout/src/main/java/androidx/ui/layout/Align.kt
@@ -84,3 +84,21 @@
fun Center(children: @Composable() () -> Unit) {
Align(alignment = Alignment.Center, children = children)
}
+
+/**
+ * Provides scope-dependent alignment options for children layouts where the alignment is handled
+ * by the parent layout rather than the child itself. Different layout models allow different
+ * [Gravity] options. For example, [Row] provides Top and Bottom, while [Column] provides
+ * Start and End.
+ * Unlike [Align], layout children with [Gravity] are aligned only after the size
+ * of the parent is known, therefore not affecting the size of the parent in order to achieve
+ * their own alignment.
+ *
+ * Example usage:
+ *
+ * @sample androidx.ui.layout.samples.SimpleGravityInRow
+ *
+ * @sample androidx.ui.layout.samples.SimpleGravityInColumn
+ *
+ */
+object Gravity
diff --git a/ui/ui-layout/src/main/java/androidx/ui/layout/Flex.kt b/ui/ui-layout/src/main/java/androidx/ui/layout/Flex.kt
index ba25849..804ad98 100644
--- a/ui/ui-layout/src/main/java/androidx/ui/layout/Flex.kt
+++ b/ui/ui-layout/src/main/java/androidx/ui/layout/Flex.kt
@@ -41,11 +41,6 @@
import androidx.ui.core.toPx
/**
- * Parent data associated with children to assign flex and fit values for them.
- */
-private data class FlexInfo(val flex: Float, val fit: FlexFit)
-
-/**
* Collects information about the children of a [FlexColumn] or [FlexColumn]
* when its body is executed with a [FlexChildren] instance as argument.
*/
@@ -56,7 +51,10 @@
throw IllegalArgumentException("flex must be >= 0")
}
childrenList += {
- ParentData(data = FlexInfo(flex = flex, fit = FlexFit.Tight), children = children)
+ ParentData(
+ data = FlexChildProperties(flex = flex, fit = FlexFit.Tight),
+ children = children
+ )
}
}
@@ -65,13 +63,19 @@
throw IllegalArgumentException("flex must be >= 0")
}
childrenList += {
- ParentData(data = FlexInfo(flex = flex, fit = FlexFit.Loose), children = children)
+ ParentData(
+ data = FlexChildProperties(flex = flex, fit = FlexFit.Loose),
+ children = children
+ )
}
}
fun inflexible(children: @Composable() () -> Unit) {
childrenList += @Composable {
- ParentData(data = FlexInfo(flex = 0f, fit = FlexFit.Loose), children = children)
+ ParentData(
+ data = FlexChildProperties(flex = 0f, fit = FlexFit.Loose),
+ children = children
+ )
}
}
}
@@ -161,8 +165,7 @@
/**
* A FlexScope provides a scope for Inflexible/Flexible functions.
*/
-class FlexScope internal constructor() {
-
+sealed class FlexScope {
/**
* A layout modifier within a [Column] or [Row] that makes the target component flexible.
* It will be assigned a space according to its flex weight relative to the flexible siblings.
@@ -171,9 +174,9 @@
*/
fun Flexible(flex: Float, tight: Boolean = true): LayoutModifier =
if (tight) {
- FlexModifier(FlexInfo(flex, FlexFit.Tight))
+ FlexModifier(FlexChildProperties(flex, FlexFit.Tight))
} else {
- FlexModifier(FlexInfo(flex, FlexFit.Loose))
+ FlexModifier(FlexChildProperties(flex, FlexFit.Loose))
}
/**
@@ -183,7 +186,66 @@
val Inflexible: LayoutModifier = inflexibleModifier
internal companion object {
- val inflexibleModifier: LayoutModifier = FlexModifier(FlexInfo(0f, FlexFit.Loose))
+ val inflexibleModifier: LayoutModifier = FlexModifier(
+ FlexChildProperties(0f, FlexFit.Loose)
+ )
+ }
+}
+
+/**
+ * A ColumnScope provides a scope for the children of a [Column].
+ */
+@Suppress("unused")
+class ColumnScope internal constructor() : FlexScope() {
+ /**
+ * A layout modifier within a Column that positions target component in a horizontal direction
+ * so that its start edge is aligned to the start edge of the horizontal axis.
+ */
+ // TODO: Consider ltr/rtl.
+ val Gravity.Start: LayoutModifier get() = StartGravityModifier
+ /**
+ * A layout modifier within a Column that positions target component in a horizontal direction
+ * so that its center is in the middle of the horizontal axis.
+ */
+ val Gravity.Center: LayoutModifier get() = CenterGravityModifier
+ /**
+ * A layout modifier within a Column that positions target component in a horizontal direction
+ * so that its end edge is aligned to the end edge of the horizontal axis.
+ */
+ val Gravity.End: LayoutModifier get() = EndGravityModifier
+
+ internal companion object {
+ val StartGravityModifier: LayoutModifier = GravityModifier(CrossAxisAlignment.Start)
+ val CenterGravityModifier: LayoutModifier = GravityModifier(CrossAxisAlignment.Center)
+ val EndGravityModifier: LayoutModifier = GravityModifier(CrossAxisAlignment.End)
+ }
+}
+
+/**
+ * A RowScope provides a scope for the children of a [Row].
+ */
+@Suppress("unused")
+class RowScope internal constructor() : FlexScope() {
+ /**
+ * A layout modifier within a Row that positions target component in a vertical direction
+ * so that its top edge is aligned to the top edge of the vertical axis.
+ */
+ val Gravity.Top: LayoutModifier get() = TopGravityModifier
+ /**
+ * A layout modifier within a Row that positions target component in a vertical direction
+ * so that its center is in the middle of the vertical axis.
+ */
+ val Gravity.Center: LayoutModifier get() = CenterGravityModifier
+ /**
+ * A layout modifier within a Row that positions target component in a vertical direction
+ * so that its bottom edge is aligned to the bottom edge of the vertical axis.
+ */
+ val Gravity.Bottom: LayoutModifier get() = BottomGravityModifier
+
+ internal companion object {
+ val TopGravityModifier: LayoutModifier = GravityModifier(CrossAxisAlignment.Start)
+ val CenterGravityModifier: LayoutModifier = GravityModifier(CrossAxisAlignment.Center)
+ val BottomGravityModifier: LayoutModifier = GravityModifier(CrossAxisAlignment.End)
}
}
@@ -211,15 +273,15 @@
mainAxisAlignment: MainAxisAlignment = MainAxisAlignment.Start,
crossAxisAlignment: CrossAxisAlignment = CrossAxisAlignment.Start,
crossAxisSize: LayoutSize = LayoutSize.Wrap,
- block: @Composable() FlexScope.() -> Unit
+ block: @Composable() RowScope.() -> Unit
) {
- ModifiedFlexLayout(
+ FlexLayout(
orientation = LayoutOrientation.Horizontal,
+ modifier = modifier,
mainAxisAlignment = mainAxisAlignment,
crossAxisAlignment = crossAxisAlignment,
crossAxisSize = crossAxisSize,
- modifier = modifier,
- block = block
+ layoutChildren = { RowScope().block() }
)
}
@@ -247,15 +309,15 @@
mainAxisAlignment: MainAxisAlignment = MainAxisAlignment.Start,
crossAxisAlignment: CrossAxisAlignment = CrossAxisAlignment.Start,
crossAxisSize: LayoutSize = LayoutSize.Wrap,
- block: @Composable() FlexScope.() -> Unit
+ block: @Composable() ColumnScope.() -> Unit
) {
- ModifiedFlexLayout(
+ FlexLayout(
orientation = LayoutOrientation.Vertical,
+ modifier = modifier,
mainAxisAlignment = mainAxisAlignment,
crossAxisAlignment = crossAxisAlignment,
crossAxisSize = crossAxisSize,
- modifier = modifier,
- block = block
+ layoutChildren = { ColumnScope().block() }
)
}
@@ -500,36 +562,13 @@
}
private val IntrinsicMeasurable.flex: Float
- get() = when (parentData) {
- is FlexInfo -> (parentData as FlexInfo).flex
- // falls back to inflexible if FlexModifier for child is not provided
- else -> 0f
- }
-private val IntrinsicMeasurable.fit: FlexFit
- get() = when (parentData) {
- is FlexInfo -> (parentData as FlexInfo).fit
- // falls back to inflexible if FlexModifier for child is not provided
- else -> FlexFit.Loose
- }
+ get() = (parentData as? FlexChildProperties)?.flex ?: 0f
-@Composable
-private fun ModifiedFlexLayout(
- orientation: LayoutOrientation,
- modifier: Modifier = Modifier.None,
- mainAxisAlignment: MainAxisAlignment,
- crossAxisSize: LayoutSize,
- crossAxisAlignment: CrossAxisAlignment,
- block: @Composable() FlexScope.() -> Unit
-) {
- FlexLayout(
- orientation = orientation,
- modifier = modifier,
- mainAxisAlignment = mainAxisAlignment,
- crossAxisSize = crossAxisSize,
- crossAxisAlignment = crossAxisAlignment,
- layoutChildren = { FlexScope().block() }
- )
-}
+private val IntrinsicMeasurable.fit: FlexFit
+ get() = (parentData as? FlexChildProperties)?.fit ?: FlexFit.Loose
+
+private val IntrinsicMeasurable.crossAxisAlignment: CrossAxisAlignment?
+ get() = (parentData as? FlexChildProperties)?.crossAxisAlignment
@Composable
private fun Flex(
@@ -603,7 +642,9 @@
val placeable = child.measure(
// Ask for preferred main axis size.
constraints.looseMainAxis().let {
- if (crossAxisAlignment == CrossAxisAlignment.Stretch) {
+ if (child.crossAxisAlignment == CrossAxisAlignment.Stretch ||
+ crossAxisAlignment == CrossAxisAlignment.Stretch
+ ) {
it.stretchCrossAxis()
} else {
it.copy(crossAxisMin = IntPx.Zero)
@@ -653,7 +694,9 @@
IntPx.Zero
},
childMainAxisSize,
- if (crossAxisAlignment == CrossAxisAlignment.Stretch) {
+ if (child.crossAxisAlignment == CrossAxisAlignment.Stretch ||
+ crossAxisAlignment == CrossAxisAlignment.Stretch
+ ) {
constraints.crossAxisMax
} else {
IntPx.Zero
@@ -702,7 +745,8 @@
.align(mainAxisLayoutSize, childrenMainAxisSize)
placeables.forEachIndexed { index, placeable ->
placeable!!
- val crossAxis = when (crossAxisAlignment) {
+ val childCrossAligment = children[index].crossAxisAlignment ?: crossAxisAlignment
+ val crossAxis = when (childCrossAligment) {
CrossAxisAlignment.Start -> IntPx.Zero
CrossAxisAlignment.Stretch -> IntPx.Zero
CrossAxisAlignment.End -> {
@@ -915,7 +959,7 @@
return crossAxisMax
}
-private data class FlexModifier(val flexInfo: FlexInfo) : LayoutModifier {
+private data class FlexModifier(val flexProperties: FlexChildProperties) : LayoutModifier {
override fun DensityScope.modifyConstraints(constraints: Constraints): Constraints {
return constraints
}
@@ -955,7 +999,64 @@
return value
}
- override fun DensityScope.modifyParentData(parentData: Any?): FlexInfo {
- return if (parentData is FlexInfo) parentData else flexInfo
+ override fun DensityScope.modifyParentData(parentData: Any?): FlexChildProperties {
+ return if (parentData is FlexChildProperties) {
+ if (parentData.flex == null || parentData.fit == null) {
+ parentData.flex = flexProperties.flex
+ parentData.fit = flexProperties.fit
+ }
+ parentData
+ } else {
+ FlexChildProperties(flex = flexProperties.flex, fit = flexProperties.fit)
+ }
}
}
+
+private data class GravityModifier(val alignment: CrossAxisAlignment) : LayoutModifier {
+ override fun DensityScope.modifyConstraints(constraints: Constraints) = constraints
+
+ override fun DensityScope.modifySize(
+ constraints: Constraints,
+ childSize: IntPxSize
+ ) = childSize
+
+ override fun DensityScope.minIntrinsicWidthOf(measurable: Measurable, height: IntPx) =
+ measurable.minIntrinsicWidth(height)
+
+ override fun DensityScope.maxIntrinsicWidthOf(measurable: Measurable, height: IntPx) =
+ measurable.maxIntrinsicWidth(height)
+
+ override fun DensityScope.minIntrinsicHeightOf(measurable: Measurable, width: IntPx) =
+ measurable.minIntrinsicHeight(width)
+
+ override fun DensityScope.maxIntrinsicHeightOf(measurable: Measurable, width: IntPx) =
+ measurable.maxIntrinsicHeight(width)
+
+ override fun DensityScope.modifyPosition(
+ childPosition: IntPxPosition,
+ childSize: IntPxSize,
+ containerSize: IntPxSize
+ ) = childPosition
+
+ override fun DensityScope.modifyAlignmentLine(line: AlignmentLine, value: IntPx?) = value
+
+ override fun DensityScope.modifyParentData(parentData: Any?): FlexChildProperties {
+ return if (parentData is FlexChildProperties) {
+ if (parentData.crossAxisAlignment == null) {
+ parentData.crossAxisAlignment = alignment
+ }
+ parentData
+ } else {
+ FlexChildProperties(crossAxisAlignment = alignment)
+ }
+ }
+}
+
+/**
+ * Parent data associated with children.
+ */
+private data class FlexChildProperties(
+ var flex: Float? = null,
+ var fit: FlexFit? = null,
+ var crossAxisAlignment: CrossAxisAlignment? = null
+)
\ No newline at end of file
diff --git a/ui/ui-material/api/0.1.0-dev03.txt b/ui/ui-material/api/0.1.0-dev03.txt
index eaac15d..242833c 100644
--- a/ui/ui-material/api/0.1.0-dev03.txt
+++ b/ui/ui-material/api/0.1.0-dev03.txt
@@ -9,6 +9,7 @@
public final class AlertDialogKt {
ctor public AlertDialogKt();
method public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onCloseRequest, kotlin.jvm.functions.Function0<kotlin.Unit>? title = null, kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> confirmButton, kotlin.jvm.functions.Function0<kotlin.Unit>? dismissButton = null, androidx.ui.material.AlertDialogButtonLayout buttonLayout = androidx.ui.material.AlertDialogButtonLayout.SideBySide);
+ method public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onCloseRequest, kotlin.jvm.functions.Function0<kotlin.Unit>? title = (kotlin.jvm.functions.Function0<? extends kotlin.Unit>)null, kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> buttons);
}
public final class AppBarKt {
diff --git a/ui/ui-material/api/current.txt b/ui/ui-material/api/current.txt
index eaac15d..242833c 100644
--- a/ui/ui-material/api/current.txt
+++ b/ui/ui-material/api/current.txt
@@ -9,6 +9,7 @@
public final class AlertDialogKt {
ctor public AlertDialogKt();
method public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onCloseRequest, kotlin.jvm.functions.Function0<kotlin.Unit>? title = null, kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> confirmButton, kotlin.jvm.functions.Function0<kotlin.Unit>? dismissButton = null, androidx.ui.material.AlertDialogButtonLayout buttonLayout = androidx.ui.material.AlertDialogButtonLayout.SideBySide);
+ method public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onCloseRequest, kotlin.jvm.functions.Function0<kotlin.Unit>? title = (kotlin.jvm.functions.Function0<? extends kotlin.Unit>)null, kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> buttons);
}
public final class AppBarKt {
diff --git a/ui/ui-material/api/public_plus_experimental_0.1.0-dev03.txt b/ui/ui-material/api/public_plus_experimental_0.1.0-dev03.txt
index eaac15d..242833c 100644
--- a/ui/ui-material/api/public_plus_experimental_0.1.0-dev03.txt
+++ b/ui/ui-material/api/public_plus_experimental_0.1.0-dev03.txt
@@ -9,6 +9,7 @@
public final class AlertDialogKt {
ctor public AlertDialogKt();
method public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onCloseRequest, kotlin.jvm.functions.Function0<kotlin.Unit>? title = null, kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> confirmButton, kotlin.jvm.functions.Function0<kotlin.Unit>? dismissButton = null, androidx.ui.material.AlertDialogButtonLayout buttonLayout = androidx.ui.material.AlertDialogButtonLayout.SideBySide);
+ method public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onCloseRequest, kotlin.jvm.functions.Function0<kotlin.Unit>? title = (kotlin.jvm.functions.Function0<? extends kotlin.Unit>)null, kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> buttons);
}
public final class AppBarKt {
diff --git a/ui/ui-material/api/public_plus_experimental_current.txt b/ui/ui-material/api/public_plus_experimental_current.txt
index eaac15d..242833c 100644
--- a/ui/ui-material/api/public_plus_experimental_current.txt
+++ b/ui/ui-material/api/public_plus_experimental_current.txt
@@ -9,6 +9,7 @@
public final class AlertDialogKt {
ctor public AlertDialogKt();
method public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onCloseRequest, kotlin.jvm.functions.Function0<kotlin.Unit>? title = null, kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> confirmButton, kotlin.jvm.functions.Function0<kotlin.Unit>? dismissButton = null, androidx.ui.material.AlertDialogButtonLayout buttonLayout = androidx.ui.material.AlertDialogButtonLayout.SideBySide);
+ method public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onCloseRequest, kotlin.jvm.functions.Function0<kotlin.Unit>? title = (kotlin.jvm.functions.Function0<? extends kotlin.Unit>)null, kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> buttons);
}
public final class AppBarKt {
diff --git a/ui/ui-material/api/restricted_0.1.0-dev03.txt b/ui/ui-material/api/restricted_0.1.0-dev03.txt
index eaac15d..242833c 100644
--- a/ui/ui-material/api/restricted_0.1.0-dev03.txt
+++ b/ui/ui-material/api/restricted_0.1.0-dev03.txt
@@ -9,6 +9,7 @@
public final class AlertDialogKt {
ctor public AlertDialogKt();
method public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onCloseRequest, kotlin.jvm.functions.Function0<kotlin.Unit>? title = null, kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> confirmButton, kotlin.jvm.functions.Function0<kotlin.Unit>? dismissButton = null, androidx.ui.material.AlertDialogButtonLayout buttonLayout = androidx.ui.material.AlertDialogButtonLayout.SideBySide);
+ method public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onCloseRequest, kotlin.jvm.functions.Function0<kotlin.Unit>? title = (kotlin.jvm.functions.Function0<? extends kotlin.Unit>)null, kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> buttons);
}
public final class AppBarKt {
diff --git a/ui/ui-material/api/restricted_current.txt b/ui/ui-material/api/restricted_current.txt
index eaac15d..242833c 100644
--- a/ui/ui-material/api/restricted_current.txt
+++ b/ui/ui-material/api/restricted_current.txt
@@ -9,6 +9,7 @@
public final class AlertDialogKt {
ctor public AlertDialogKt();
method public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onCloseRequest, kotlin.jvm.functions.Function0<kotlin.Unit>? title = null, kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> confirmButton, kotlin.jvm.functions.Function0<kotlin.Unit>? dismissButton = null, androidx.ui.material.AlertDialogButtonLayout buttonLayout = androidx.ui.material.AlertDialogButtonLayout.SideBySide);
+ method public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onCloseRequest, kotlin.jvm.functions.Function0<kotlin.Unit>? title = (kotlin.jvm.functions.Function0<? extends kotlin.Unit>)null, kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> buttons);
}
public final class AppBarKt {
diff --git a/ui/ui-material/integration-tests/samples/src/main/java/androidx/ui/material/samples/AlertDialogSample.kt b/ui/ui-material/integration-tests/samples/src/main/java/androidx/ui/material/samples/AlertDialogSample.kt
index 6dd3cfb..4c0d038 100644
--- a/ui/ui-material/integration-tests/samples/src/main/java/androidx/ui/material/samples/AlertDialogSample.kt
+++ b/ui/ui-material/integration-tests/samples/src/main/java/androidx/ui/material/samples/AlertDialogSample.kt
@@ -21,6 +21,8 @@
import androidx.compose.state
import androidx.compose.unaryPlus
import androidx.ui.core.Text
+import androidx.ui.layout.MainAxisAlignment
+import androidx.ui.layout.Row
import androidx.ui.material.AlertDialog
import androidx.ui.material.AlertDialogButtonLayout
import androidx.ui.material.Button
@@ -90,4 +92,30 @@
buttonLayout = AlertDialogButtonLayout.Stacked
)
}
+}
+
+@Sampled
+@Composable
+fun CustomAlertDialogSample() {
+ val openDialog = +state { true }
+
+ if (openDialog.value) {
+ AlertDialog(
+ >
+ openDialog.value = false
+ },
+ title = {
+ Text(text = "Title")
+ },
+ text = {
+ Text("This area typically contains the supportive text" +
+ " which presents the details regarding the Dialog's purpose.")
+ },
+ buttons = {
+ Row(mainAxisAlignment = MainAxisAlignment.Center) {
+ Button("Button", openDialog.value = false })
+ }
+ }
+ )
+ }
}
\ No newline at end of file
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/AlertDialog.kt b/ui/ui-material/src/main/java/androidx/ui/material/AlertDialog.kt
index f54a720..0c3372f 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/AlertDialog.kt
+++ b/ui/ui-material/src/main/java/androidx/ui/material/AlertDialog.kt
@@ -71,6 +71,43 @@
dismissButton: @Composable() (() -> Unit)? = null,
buttonLayout: AlertDialogButtonLayout = AlertDialogButtonLayout.SideBySide
) {
+ AlertDialog(
+ >
+ title = title,
+ text = text,
+ buttons = {
+ AlertDialogButtonLayout(
+ confirmButton = confirmButton,
+ dismissButton = dismissButton,
+ buttonLayout = buttonLayout
+ )
+ }
+ )
+}
+
+/**
+ * Alert dialog is a [Dialog] which interrupts the user with urgent information, details or actions.
+ *
+ * This function can be used to fully customize the button area, e.g. with:
+ *
+ * @sample androidx.ui.material.samples.CustomAlertDialogSample
+ *
+ * @param onCloseRequest Executes when the user tries to dismiss the Dialog by clicking outside
+ * or pressing the back button.
+ * @param title The title of the Dialog which should specify the purpose of the Dialog. The title
+ * is not mandatory, because there may be sufficient information inside the [text].
+ * @param text The text which presents the details regarding
+ * the Dialog's purpose.
+ * @param buttons Function that emits the layout with the buttons
+ */
+@Suppress("USELESS_CAST")
+@Composable
+fun AlertDialog(
+ onCloseRequest: () -> Unit,
+ title: (@Composable() () -> Unit)? = null as @Composable() (() -> Unit)?,
+ text: (@Composable() () -> Unit),
+ buttons: @Composable() () -> Unit
+) {
// TODO: Find a cleaner way to pass the properties of the MaterialTheme
val currentColors = +ambient(Colors)
val currentTypography = +ambient(Typography)
@@ -98,11 +135,7 @@
CurrentTextStyleProvider(textStyle, text)
}
HeightSpacer(height = TextToButtonsHeight)
- AlertDialogButtonLayout(
- confirmButton = confirmButton,
- dismissButton = dismissButton,
- buttonLayout = buttonLayout
- )
+ buttons()
}
}
}
@@ -152,7 +185,7 @@
}
private val AlertDialogWidth = 280.dp
-private val ButtonsPadding = EdgeInsets(left = 0.dp, top = 8.dp, right = 8.dp, bottom = 8.dp)
+private val ButtonsPadding = EdgeInsets(all = 8.dp)
private val ButtonsWidthSpace = 8.dp
private val ButtonsHeightSpace = 12.dp
// TODO(b/138924683): Top padding should be actually be a distance between the Text baseline and
diff --git a/ui/ui-platform/api/0.1.0-dev03.txt b/ui/ui-platform/api/0.1.0-dev03.txt
index 5deb239..bd3e1b4 100644
--- a/ui/ui-platform/api/0.1.0-dev03.txt
+++ b/ui/ui-platform/api/0.1.0-dev03.txt
@@ -235,8 +235,11 @@
public final class PointerInputNode extends androidx.ui.core.ComponentNode {
ctor public PointerInputNode();
+ method public kotlin.jvm.functions.Function0<kotlin.Unit> getCancelHandler();
method public kotlin.jvm.functions.Function3<java.util.List<androidx.ui.core.PointerInputChange>,androidx.ui.core.PointerEventPass,androidx.ui.core.IntPxSize,java.util.List<androidx.ui.core.PointerInputChange>> getPointerInputHandler();
+ method public void setCancelHandler(kotlin.jvm.functions.Function0<kotlin.Unit> p);
method public void setPointerInputHandler(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.core.IntPxSize,? extends java.util.List<androidx.ui.core.PointerInputChange>> p);
+ property public final kotlin.jvm.functions.Function0<kotlin.Unit> cancelHandler;
property public final kotlin.jvm.functions.Function3<java.util.List<androidx.ui.core.PointerInputChange>,androidx.ui.core.PointerEventPass,androidx.ui.core.IntPxSize,java.util.List<androidx.ui.core.PointerInputChange>> pointerInputHandler;
}
diff --git a/ui/ui-platform/api/current.txt b/ui/ui-platform/api/current.txt
index 5deb239..bd3e1b4 100644
--- a/ui/ui-platform/api/current.txt
+++ b/ui/ui-platform/api/current.txt
@@ -235,8 +235,11 @@
public final class PointerInputNode extends androidx.ui.core.ComponentNode {
ctor public PointerInputNode();
+ method public kotlin.jvm.functions.Function0<kotlin.Unit> getCancelHandler();
method public kotlin.jvm.functions.Function3<java.util.List<androidx.ui.core.PointerInputChange>,androidx.ui.core.PointerEventPass,androidx.ui.core.IntPxSize,java.util.List<androidx.ui.core.PointerInputChange>> getPointerInputHandler();
+ method public void setCancelHandler(kotlin.jvm.functions.Function0<kotlin.Unit> p);
method public void setPointerInputHandler(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.core.IntPxSize,? extends java.util.List<androidx.ui.core.PointerInputChange>> p);
+ property public final kotlin.jvm.functions.Function0<kotlin.Unit> cancelHandler;
property public final kotlin.jvm.functions.Function3<java.util.List<androidx.ui.core.PointerInputChange>,androidx.ui.core.PointerEventPass,androidx.ui.core.IntPxSize,java.util.List<androidx.ui.core.PointerInputChange>> pointerInputHandler;
}
diff --git a/ui/ui-platform/api/public_plus_experimental_0.1.0-dev03.txt b/ui/ui-platform/api/public_plus_experimental_0.1.0-dev03.txt
index 5deb239..bd3e1b4 100644
--- a/ui/ui-platform/api/public_plus_experimental_0.1.0-dev03.txt
+++ b/ui/ui-platform/api/public_plus_experimental_0.1.0-dev03.txt
@@ -235,8 +235,11 @@
public final class PointerInputNode extends androidx.ui.core.ComponentNode {
ctor public PointerInputNode();
+ method public kotlin.jvm.functions.Function0<kotlin.Unit> getCancelHandler();
method public kotlin.jvm.functions.Function3<java.util.List<androidx.ui.core.PointerInputChange>,androidx.ui.core.PointerEventPass,androidx.ui.core.IntPxSize,java.util.List<androidx.ui.core.PointerInputChange>> getPointerInputHandler();
+ method public void setCancelHandler(kotlin.jvm.functions.Function0<kotlin.Unit> p);
method public void setPointerInputHandler(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.core.IntPxSize,? extends java.util.List<androidx.ui.core.PointerInputChange>> p);
+ property public final kotlin.jvm.functions.Function0<kotlin.Unit> cancelHandler;
property public final kotlin.jvm.functions.Function3<java.util.List<androidx.ui.core.PointerInputChange>,androidx.ui.core.PointerEventPass,androidx.ui.core.IntPxSize,java.util.List<androidx.ui.core.PointerInputChange>> pointerInputHandler;
}
diff --git a/ui/ui-platform/api/public_plus_experimental_current.txt b/ui/ui-platform/api/public_plus_experimental_current.txt
index 5deb239..bd3e1b4 100644
--- a/ui/ui-platform/api/public_plus_experimental_current.txt
+++ b/ui/ui-platform/api/public_plus_experimental_current.txt
@@ -235,8 +235,11 @@
public final class PointerInputNode extends androidx.ui.core.ComponentNode {
ctor public PointerInputNode();
+ method public kotlin.jvm.functions.Function0<kotlin.Unit> getCancelHandler();
method public kotlin.jvm.functions.Function3<java.util.List<androidx.ui.core.PointerInputChange>,androidx.ui.core.PointerEventPass,androidx.ui.core.IntPxSize,java.util.List<androidx.ui.core.PointerInputChange>> getPointerInputHandler();
+ method public void setCancelHandler(kotlin.jvm.functions.Function0<kotlin.Unit> p);
method public void setPointerInputHandler(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.core.IntPxSize,? extends java.util.List<androidx.ui.core.PointerInputChange>> p);
+ property public final kotlin.jvm.functions.Function0<kotlin.Unit> cancelHandler;
property public final kotlin.jvm.functions.Function3<java.util.List<androidx.ui.core.PointerInputChange>,androidx.ui.core.PointerEventPass,androidx.ui.core.IntPxSize,java.util.List<androidx.ui.core.PointerInputChange>> pointerInputHandler;
}
diff --git a/ui/ui-platform/api/restricted_0.1.0-dev03.txt b/ui/ui-platform/api/restricted_0.1.0-dev03.txt
index 8183dfe..3f9198d 100644
--- a/ui/ui-platform/api/restricted_0.1.0-dev03.txt
+++ b/ui/ui-platform/api/restricted_0.1.0-dev03.txt
@@ -235,8 +235,11 @@
public final class PointerInputNode extends androidx.ui.core.ComponentNode {
ctor public PointerInputNode();
+ method public kotlin.jvm.functions.Function0<kotlin.Unit> getCancelHandler();
method public kotlin.jvm.functions.Function3<java.util.List<androidx.ui.core.PointerInputChange>,androidx.ui.core.PointerEventPass,androidx.ui.core.IntPxSize,java.util.List<androidx.ui.core.PointerInputChange>> getPointerInputHandler();
+ method public void setCancelHandler(kotlin.jvm.functions.Function0<kotlin.Unit> p);
method public void setPointerInputHandler(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.core.IntPxSize,? extends java.util.List<androidx.ui.core.PointerInputChange>> p);
+ property public final kotlin.jvm.functions.Function0<kotlin.Unit> cancelHandler;
property public final kotlin.jvm.functions.Function3<java.util.List<androidx.ui.core.PointerInputChange>,androidx.ui.core.PointerEventPass,androidx.ui.core.IntPxSize,java.util.List<androidx.ui.core.PointerInputChange>> pointerInputHandler;
}
diff --git a/ui/ui-platform/api/restricted_current.txt b/ui/ui-platform/api/restricted_current.txt
index 8183dfe..3f9198d 100644
--- a/ui/ui-platform/api/restricted_current.txt
+++ b/ui/ui-platform/api/restricted_current.txt
@@ -235,8 +235,11 @@
public final class PointerInputNode extends androidx.ui.core.ComponentNode {
ctor public PointerInputNode();
+ method public kotlin.jvm.functions.Function0<kotlin.Unit> getCancelHandler();
method public kotlin.jvm.functions.Function3<java.util.List<androidx.ui.core.PointerInputChange>,androidx.ui.core.PointerEventPass,androidx.ui.core.IntPxSize,java.util.List<androidx.ui.core.PointerInputChange>> getPointerInputHandler();
+ method public void setCancelHandler(kotlin.jvm.functions.Function0<kotlin.Unit> p);
method public void setPointerInputHandler(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.core.IntPxSize,? extends java.util.List<androidx.ui.core.PointerInputChange>> p);
+ property public final kotlin.jvm.functions.Function0<kotlin.Unit> cancelHandler;
property public final kotlin.jvm.functions.Function3<java.util.List<androidx.ui.core.PointerInputChange>,androidx.ui.core.PointerEventPass,androidx.ui.core.IntPxSize,java.util.List<androidx.ui.core.PointerInputChange>> pointerInputHandler;
}
diff --git a/ui/ui-platform/src/main/java/androidx/ui/core/AndroidOwner.kt b/ui/ui-platform/src/main/java/androidx/ui/core/AndroidOwner.kt
index 7930baf..45e6c53 100644
--- a/ui/ui-platform/src/main/java/androidx/ui/core/AndroidOwner.kt
+++ b/ui/ui-platform/src/main/java/androidx/ui/core/AndroidOwner.kt
@@ -542,10 +542,15 @@
if (autofillSupported()) _autofill?.performAutofill(values)
}
+ // TODO(shepshapard): Test this method.
override fun onTouchEvent(event: MotionEvent): Boolean {
trace("AndroidOwner:onTouch") {
- pointerInputEventProcessor.process(event.toPointerInputEvent())
- // TODO(shepshapard): Only return if a child was hit.
+ if (event.actionMasked == MotionEvent.ACTION_CANCEL) {
+ pointerInputEventProcessor.processCancel()
+ } else {
+ pointerInputEventProcessor.process(event.toPointerInputEvent())
+ }
+ // TODO(shepshapard): Only return if some aspect of the change was consumed.
}
return true
}
diff --git a/ui/ui-platform/src/main/java/androidx/ui/core/ComponentNodes.kt b/ui/ui-platform/src/main/java/androidx/ui/core/ComponentNodes.kt
index 930edde..f4f309b 100644
--- a/ui/ui-platform/src/main/java/androidx/ui/core/ComponentNodes.kt
+++ b/ui/ui-platform/src/main/java/androidx/ui/core/ComponentNodes.kt
@@ -329,7 +329,18 @@
* Backing node for handling pointer events.
*/
class PointerInputNode : ComponentNode() {
+ /**
+ * Invoked when pointers that previously hit this PointerInputNode have changed.
+ */
var pointerInputHandler: PointerInputHandler = { event, _, _ -> event }
+
+ // TODO(b/142486858): Should cancelHandler be called when the PointerInputNode is removed
+ // from the hierarchy?
+ /**
+ * Invoked when Android passes an ACTION_CANCEL event to the [AndroidComposeView.onTouchEvent]
+ * method.
+ */
+ var cancelHandler: () -> Unit = { }
}
/**
diff --git a/ui/ui-platform/src/main/java/androidx/ui/core/input/RecordingInputConnection.kt b/ui/ui-platform/src/main/java/androidx/ui/core/input/RecordingInputConnection.kt
index d4eaa03..28a0f90 100644
--- a/ui/ui-platform/src/main/java/androidx/ui/core/input/RecordingInputConnection.kt
+++ b/ui/ui-platform/src/main/java/androidx/ui/core/input/RecordingInputConnection.kt
@@ -241,7 +241,8 @@
override fun requestCursorUpdates(cursorUpdateMode: Int): Boolean {
if (DEBUG) { Log.d(TAG, "requestCursorUpdates($cursorUpdateMode)") }
- TODO("not implemented")
+ Log.w(TAG, "requestCursorUpdates is not supported")
+ return false
}
override fun getExtractedText(request: ExtractedTextRequest?, flags: Int): ExtractedText {
@@ -259,7 +260,8 @@
override fun performContextMenuAction(id: Int): Boolean {
if (DEBUG) { Log.d(TAG, "performContextMenuAction($id)") }
- TODO("not implemented")
+ Log.w(TAG, "performContextMenuAction is not supported")
+ return false
}
override fun performEditorAction(editorAction: Int): Boolean {
diff --git a/ui/ui-platform/src/main/java/androidx/ui/core/pointerinput/HitPathTracker.kt b/ui/ui-platform/src/main/java/androidx/ui/core/pointerinput/HitPathTracker.kt
index 0e8ff2a..5809a34 100644
--- a/ui/ui-platform/src/main/java/androidx/ui/core/pointerinput/HitPathTracker.kt
+++ b/ui/ui-platform/src/main/java/androidx/ui/core/pointerinput/HitPathTracker.kt
@@ -27,6 +27,7 @@
import androidx.ui.core.positionRelativeToRoot
import androidx.ui.core.isAttached
import androidx.ui.core.visitLayoutChildren
+import java.lang.IllegalStateException
import kotlin.math.min
import kotlin.math.max
@@ -36,13 +37,16 @@
*/
internal class HitPathTracker {
+ // TODO(shepshapard): Consider not making the root an instance of Node, but instead some other
+ // "root" class. It may simplify the implementation of Node.
internal val root: Node = Node()
/**
* Associates [pointerId] to [pointerInputNodes] and tracks them.
*
* @param pointerId The id of the pointer that was hit tested against [PointerInputNode]s
- * @param pointerInputNodes The [PointerInputNode]s that were hit by [pointerId]
+ * @param pointerInputNodes The [PointerInputNode]s that were hit by [pointerId]. Must be
+ * ordered from ancestor to descendant.
*/
fun addHitPath(pointerId: Int, pointerInputNodes: List<PointerInputNode>) {
var parent = root
@@ -88,6 +92,22 @@
}
/**
+ * Dispatches cancel events to all tracked [PointerInputNode]s to notify them that
+ * [PointerInputNode.pointerInputHandler] will not be called again until all pointers have been
+ * removed from the application and then at least one is added again.
+ */
+ fun dispatchCancel() {
+ root.dispatchCancel()
+ }
+
+ /**
+ * Removes all paths tracked by [addHitPath].
+ */
+ fun clear() {
+ root.clear()
+ }
+
+ /**
* Removes the [pointerId] and any [PointerInputNode]s that are no longer associated with any
* remaining [pointerId].
*/
@@ -166,6 +186,14 @@
}
}
+ if (relevantChanges.isEmpty()) {
+ throw IllegalStateException("Currently, HitPathTracker is operating under the " +
+ "assumption that there should never be a circumstance in which it is tracking" +
+ " a PointerInputNode where when it receives pointerInputChanges, none are " +
+ "relevant to that PointerInputNode. This assumption may not hold true in " +
+ "the future, but currently it assumes it can abide by this contract.")
+ }
+
// For each relevant change:
// 1. subtract the offset
// 2. dispatch the change on the down pass,
@@ -200,6 +228,27 @@
pointerInputChanges.putAll(relevantChanges)
}
+ // TODO(shepshapard): Should some order of cancel dispatch be guaranteed? I think the answer is
+ // essentially "no", but given that an order can be consistent... maybe we might as well
+ // set an arbitrary standard and stick to it so user expectations are maintained.
+ /**
+ * Does a depth first traversal and invokes [PointerInputNode.cancelHandler] during
+ * backtracking.
+ */
+ fun dispatchCancel() {
+ children.forEach { it.dispatchCancel() }
+ pointerInputNode?.cancelHandler?.invoke()
+ }
+
+ /**
+ * Removes all children from this Node.
+ */
+ fun clear() {
+ children.clear()
+ }
+
+ // TODO(b/142486858): Should cancel events be dispatched to PointerInputNodes that have been
+ // removed from the tree?
fun removeDetachedPointerInputNodes() {
children.removeAll {
it.pointerInputNode != null && !it.pointerInputNode.isAttached()
@@ -209,6 +258,8 @@
}
}
+ // TODO(shepshapard): Not sure if this functionality should exist. The question will be moot
+ // when/if PointerInputNodes are converted into modifiers.
fun removePointerInputNodesWithNoLayoutNodeDescendants() {
children.removeAll {
it.pointerInputNode != null && it.pointerInputNode.hasNoLayoutDescendants()
diff --git a/ui/ui-platform/src/main/java/androidx/ui/core/pointerinput/PointerInputEventProcessor.kt b/ui/ui-platform/src/main/java/androidx/ui/core/pointerinput/PointerInputEventProcessor.kt
index 4624f83..a00e700 100644
--- a/ui/ui-platform/src/main/java/androidx/ui/core/pointerinput/PointerInputEventProcessor.kt
+++ b/ui/ui-platform/src/main/java/androidx/ui/core/pointerinput/PointerInputEventProcessor.kt
@@ -77,6 +77,22 @@
}
}
+ // TODO(b/142486858): It seems likely that removed PointerInputNodes should not have their
+ // cancelHandlers called. Investigate this.
+ /**
+ * Responds appropriately to Android ACTION_CANCEL events.
+ *
+ * Specifically, [PointerInputNode.cancelHandler] is invoked on tracked [PointerInputNode]s and
+ * and this [PointerInputEventProcessor] is reset such that it is no longer tracking any
+ * [PointerInputNode]s and expects the next [PointerInputEvent] it processes to represent only
+ * new pointers.
+ */
+ fun processCancel() {
+ pointerInputChangeEventProducer.clear()
+ hitPathTracker.dispatchCancel()
+ hitPathTracker.clear()
+ }
+
/**
* Searches for [PointerInputNode]s among the [ComponentNode]'s descendants, determines if the
* [point] is within their virtual bounds, and adds them to [hitPointerInputNodes] if they are.
@@ -201,6 +217,9 @@
private class PointerInputChangeEventProducer {
private val previousPointerInputData: MutableMap<Int, PointerInputData> = mutableMapOf()
+ /**
+ * Produces [PointerInputChangeEvent]s by tracking changes between [PointerInputEvent]s
+ */
internal fun produce(pointerEvent: PointerInputEvent):
PointerInputChangeEvent {
val changes: MutableList<PointerInputChange> = mutableListOf()
@@ -221,6 +240,13 @@
}
return PointerInputChangeEvent(pointerEvent.timestamp, changes)
}
+
+ /**
+ * Clears all tracked information.
+ */
+ internal fun clear() {
+ previousPointerInputData.clear()
+ }
}
// TODO(shepshapard): The timestamp property probably doesn't need to exist (and therefore, nor does
diff --git a/ui/ui-platform/src/test/java/androidx/ui/core/pointerinput/HitPathTrackerTest.kt b/ui/ui-platform/src/test/java/androidx/ui/core/pointerinput/HitPathTrackerTest.kt
index fc23d956..4fb9d34 100644
--- a/ui/ui-platform/src/test/java/androidx/ui/core/pointerinput/HitPathTrackerTest.kt
+++ b/ui/ui-platform/src/test/java/androidx/ui/core/pointerinput/HitPathTrackerTest.kt
@@ -3251,6 +3251,175 @@
verifyNoMoreInteractions(pointerInputNode.pointerInputHandler)
}
+ @Test
+ fun dispatchCancel_nothingTracked_doesNotCrash() {
+ hitResult.dispatchCancel()
+ }
+
+ // Pin -> Ln
+ @Test
+ fun dispatchCancel_singlePin_cancelHandlerIsCalled() {
+ val pointerInputNode = PointerInputNode().apply {
+ cancelHandler = spy(MyCancelHandler())
+ }
+ hitResult.addHitPath(3, listOf(pointerInputNode))
+
+ hitResult.dispatchCancel()
+
+ verify(pointerInputNode.cancelHandler).invoke()
+ }
+
+ // Pin -> Pin -> Pin
+ @Test
+ fun dispatchCancel_3Pins_cancelHandlersCalledOnceInOrder() {
+ val pointerInputNodeChild = PointerInputNode()
+ val pointerInputNodeMiddle = PointerInputNode()
+ val pointerInputNodeParent = PointerInputNode()
+ pointerInputNodeChild.cancelHandler = spy(MyCancelHandler())
+ pointerInputNodeMiddle.cancelHandler = spy(MyCancelHandler())
+ pointerInputNodeParent.cancelHandler = spy(MyCancelHandler())
+ hitResult.addHitPath(3,
+ listOf(pointerInputNodeParent, pointerInputNodeMiddle, pointerInputNodeChild)
+ )
+
+ hitResult.dispatchCancel()
+
+ inOrder(
+ pointerInputNodeParent.cancelHandler,
+ pointerInputNodeMiddle.cancelHandler,
+ pointerInputNodeChild.cancelHandler
+ ) {
+ verify(pointerInputNodeChild.cancelHandler).invoke()
+ verify(pointerInputNodeMiddle.cancelHandler).invoke()
+ verify(pointerInputNodeParent.cancelHandler).invoke()
+ }
+ }
+
+ // PIN -> PIN
+ // PIN -> PIN
+ @Test
+ fun dispatchCancel_2IndependentPathsFromRoot_cancelHandlersCalledOnceInOrder() {
+ val pinParent1 = PointerInputNode()
+ val pinChild1 = PointerInputNode()
+ val pinParent2 = PointerInputNode()
+ val pinChild2 = PointerInputNode()
+ pinParent1.cancelHandler = spy(MyCancelHandler())
+ pinChild1.cancelHandler = spy(MyCancelHandler())
+ pinParent2.cancelHandler = spy(MyCancelHandler())
+ pinChild2.cancelHandler = spy(MyCancelHandler())
+ hitResult.addHitPath(3, listOf(pinParent1, pinChild1))
+ hitResult.addHitPath(5, listOf(pinParent2, pinChild2))
+
+ hitResult.dispatchCancel()
+
+ inOrder(pinParent1.cancelHandler, pinChild1.cancelHandler) {
+ verify(pinChild1.cancelHandler).invoke()
+ verify(pinParent1.cancelHandler).invoke()
+ }
+ inOrder(pinParent2.cancelHandler, pinChild2.cancelHandler) {
+ verify(pinChild2.cancelHandler).invoke()
+ verify(pinParent2.cancelHandler).invoke()
+ }
+ verifyNoMoreInteractions(
+ pinParent1.cancelHandler,
+ pinChild1.cancelHandler,
+ pinParent2.cancelHandler,
+ pinChild2.cancelHandler
+ )
+ }
+
+ // PIN -> PIN
+ // -> PIN
+ @Test
+ fun dispatchCancel_2BranchingPaths_cancelHandlersCalledOnceInOrder() {
+ val pinParent = PointerInputNode()
+ val pinChild1 = PointerInputNode()
+ val pinChild2 = PointerInputNode()
+ pinParent.cancelHandler = spy(MyCancelHandler())
+ pinChild1.cancelHandler = spy(MyCancelHandler())
+ pinChild2.cancelHandler = spy(MyCancelHandler())
+ hitResult.addHitPath(3, listOf(pinParent, pinChild1))
+ hitResult.addHitPath(5, listOf(pinParent, pinChild2))
+
+ hitResult.dispatchCancel()
+
+ inOrder(pinParent.cancelHandler, pinChild1.cancelHandler) {
+ verify(pinChild1.cancelHandler).invoke()
+ verify(pinParent.cancelHandler).invoke()
+ }
+ inOrder(pinParent.cancelHandler, pinChild2.cancelHandler) {
+ verify(pinChild2.cancelHandler).invoke()
+ verify(pinParent.cancelHandler).invoke()
+ }
+ verifyNoMoreInteractions(
+ pinParent.cancelHandler,
+ pinChild1.cancelHandler,
+ pinChild2.cancelHandler
+ )
+ }
+
+ @Test
+ fun clear_nothingTracked_doesNotCrash() {
+ hitResult.clear()
+ }
+
+ // Pin -> Ln
+ @Test
+ fun clear_singlePin_cleared() {
+ val pointerInputNode = PointerInputNode()
+ hitResult.addHitPath(3, listOf(pointerInputNode))
+
+ hitResult.clear()
+
+ assertThat(areEqual(hitResult.root, Node())).isTrue()
+ }
+
+ // Pin -> Pin -> Pin
+ @Test
+ fun clear_3Pins_cleared() {
+ val pointerInputNodeChild = PointerInputNode()
+ val pointerInputNodeMiddle = PointerInputNode()
+ val pointerInputNodeParent = PointerInputNode()
+ hitResult.addHitPath(3,
+ listOf(pointerInputNodeParent, pointerInputNodeMiddle, pointerInputNodeChild)
+ )
+
+ hitResult.clear()
+
+ assertThat(areEqual(hitResult.root, Node())).isTrue()
+ }
+
+ // PIN -> PIN
+ // PIN -> PIN
+ @Test
+ fun clear_2IndependentPathsFromRoot_cleared() {
+ val pinParent1 = PointerInputNode()
+ val pinChild1 = PointerInputNode()
+ val pinParent2 = PointerInputNode()
+ val pinChild2 = PointerInputNode()
+ hitResult.addHitPath(3, listOf(pinParent1, pinChild1))
+ hitResult.addHitPath(5, listOf(pinParent2, pinChild2))
+
+ hitResult.clear()
+
+ assertThat(areEqual(hitResult.root, Node())).isTrue()
+ }
+
+ // PIN -> PIN
+ // -> PIN
+ @Test
+ fun clear_2BranchingPaths_cleared() {
+ val pinParent = PointerInputNode()
+ val pinChild1 = PointerInputNode()
+ val pinChild2 = PointerInputNode()
+ hitResult.addHitPath(3, listOf(pinParent, pinChild1))
+ hitResult.addHitPath(5, listOf(pinParent, pinChild2))
+
+ hitResult.clear()
+
+ assertThat(areEqual(hitResult.root, Node())).isTrue()
+ }
+
private fun areEqual(actualNode: Node, expectedNode: Node): Boolean {
if (actualNode.pointerInputNode != expectedNode.pointerInputNode) {
return false
diff --git a/ui/ui-platform/src/test/java/androidx/ui/core/pointerinput/PointerInputEventProcessorTest.kt b/ui/ui-platform/src/test/java/androidx/ui/core/pointerinput/PointerInputEventProcessorTest.kt
index 031f136..5facb61 100644
--- a/ui/ui-platform/src/test/java/androidx/ui/core/pointerinput/PointerInputEventProcessorTest.kt
+++ b/ui/ui-platform/src/test/java/androidx/ui/core/pointerinput/PointerInputEventProcessorTest.kt
@@ -1867,4 +1867,499 @@
verifyNoMoreInteractions(parentPointerInputNode.pointerInputHandler)
verifyNoMoreInteractions(childPointerInputNode.pointerInputHandler)
}
+
+ @Test
+ fun processCancel_noPointers_doesntCrash() {
+ pointerInputEventProcessor.processCancel()
+ }
+
+ @Test
+ fun processCancel_downThenCancel_pinOnlyReceivesCorrectDownThenCancel() {
+
+ // Arrange
+
+ val pointerInputNode: PointerInputNode = PointerInputNode().apply {
+ emitInsertAt(0, LayoutNode(0, 0, 500, 500))
+ pointerInputHandler = spy(MyPointerInputHandler())
+ cancelHandler = spy(MyCancelHandler())
+ }
+ root.emitInsertAt(0, pointerInputNode)
+
+ val pointerInputEvent =
+ PointerInputEvent(
+ 7,
+ 5L.millisecondsToTimestamp(),
+ PxPosition(250.px, 250.px),
+ true
+ )
+
+ val expectedChange =
+ PointerInputChange(
+ id = 7,
+ current = PointerInputData(
+ 5L.millisecondsToTimestamp(),
+ PxPosition(250.px, 250.px),
+ true
+ ),
+ previous = PointerInputData(null, null, false),
+ consumed = ConsumedData()
+ )
+
+ // Act
+
+ pointerInputEventProcessor.process(pointerInputEvent)
+ pointerInputEventProcessor.processCancel()
+
+ // Assert
+
+ inOrder(pointerInputNode.pointerInputHandler, pointerInputNode.cancelHandler) {
+ for (pass in PointerEventPass.values()) {
+ verify(pointerInputNode.pointerInputHandler).invoke(
+ eq(listOf(expectedChange)),
+ eq(pass),
+ any()
+ )
+ }
+ verify(pointerInputNode.cancelHandler).invoke()
+ }
+ verifyNoMoreInteractions(
+ pointerInputNode.pointerInputHandler,
+ pointerInputNode.cancelHandler
+ )
+ }
+
+ @Test
+ fun processCancel_downDownOnSamePinThenCancel_pinOnlyReceivesCorrectChangesThenCancel() {
+
+ // Arrange
+
+ val pointerInputNode: PointerInputNode = PointerInputNode().apply {
+ emitInsertAt(0, LayoutNode(0, 0, 500, 500))
+ pointerInputHandler = spy(MyPointerInputHandler())
+ cancelHandler = spy(MyCancelHandler())
+ }
+ root.emitInsertAt(0, pointerInputNode)
+
+ val pointerInputEvent1 =
+ PointerInputEvent(
+ 7,
+ 5L.millisecondsToTimestamp(),
+ PxPosition(200.px, 200.px),
+ true
+ )
+
+ val pointerInputEvent2 =
+ PointerInputEvent(
+ 10L.millisecondsToTimestamp(),
+ listOf(
+ PointerInputEventData(
+ 7,
+ 10L.millisecondsToTimestamp(),
+ PxPosition(200.px, 200.px),
+ true
+ ),
+ PointerInputEventData(
+ 9,
+ 10L.millisecondsToTimestamp(),
+ PxPosition(300.px, 300.px),
+ true
+ )
+ )
+ )
+
+ val expectedChanges1 =
+ listOf(
+ PointerInputChange(
+ id = 7,
+ current = PointerInputData(
+ 5L.millisecondsToTimestamp(),
+ PxPosition(200.px, 200.px),
+ true
+ ),
+ previous = PointerInputData(null, null, false),
+ consumed = ConsumedData()
+ )
+ )
+
+ val expectedChanges2 =
+ listOf(
+ PointerInputChange(
+ id = 7,
+ current = PointerInputData(
+ 10L.millisecondsToTimestamp(),
+ PxPosition(200.px, 200.px),
+ true
+ ),
+ previous = PointerInputData(
+ 5L.millisecondsToTimestamp(),
+ PxPosition(200.px, 200.px),
+ true
+ ),
+ consumed = ConsumedData()
+ ),
+ PointerInputChange(
+ id = 9,
+ current = PointerInputData(
+ 10L.millisecondsToTimestamp(),
+ PxPosition(300.px, 300.px),
+ true
+ ),
+ previous = PointerInputData(null, null, false),
+ consumed = ConsumedData()
+ )
+ )
+
+ // Act
+
+ pointerInputEventProcessor.process(pointerInputEvent1)
+ pointerInputEventProcessor.process(pointerInputEvent2)
+ pointerInputEventProcessor.processCancel()
+
+ // Assert
+
+ inOrder(pointerInputNode.pointerInputHandler, pointerInputNode.cancelHandler) {
+ for (pass in PointerEventPass.values()) {
+ verify(pointerInputNode.pointerInputHandler).invoke(
+ eq(expectedChanges1),
+ eq(pass),
+ any()
+ )
+ }
+ for (pass in PointerEventPass.values()) {
+ verify(pointerInputNode.pointerInputHandler).invoke(
+ eq(expectedChanges2),
+ eq(pass),
+ any()
+ )
+ }
+ verify(pointerInputNode.cancelHandler).invoke()
+ }
+ verifyNoMoreInteractions(
+ pointerInputNode.pointerInputHandler,
+ pointerInputNode.cancelHandler
+ )
+ }
+
+ @Test
+ fun processCancel_downOn2DifferentPinsThenCancel_pinsOnlyReceiveCorrectDownsThenCancel() {
+
+ // Arrange
+
+ val pointerInputNode1: PointerInputNode = PointerInputNode().apply {
+ emitInsertAt(0, LayoutNode(0, 0, 199, 199))
+ pointerInputHandler = spy(MyPointerInputHandler())
+ cancelHandler = spy(MyCancelHandler())
+ }
+ val pointerInputNode2: PointerInputNode = PointerInputNode().apply {
+ emitInsertAt(0, LayoutNode(200, 200, 399, 399))
+ pointerInputHandler = spy(MyPointerInputHandler())
+ cancelHandler = spy(MyCancelHandler())
+ }
+ root.emitInsertAt(0, pointerInputNode1)
+ root.emitInsertAt(1, pointerInputNode2)
+
+ val pointerInputEventData1 =
+ PointerInputEventData(
+ 7,
+ 5L.millisecondsToTimestamp(),
+ PxPosition(100.px, 100.px),
+ true
+ )
+
+ val pointerInputEventData2 =
+ PointerInputEventData(
+ 9,
+ 5L.millisecondsToTimestamp(),
+ PxPosition(300.px, 300.px),
+ true
+ )
+
+ val pointerInputEvent = PointerInputEvent(
+ 5L.millisecondsToTimestamp(),
+ listOf(pointerInputEventData1, pointerInputEventData2)
+ )
+
+ val expectedChange1 =
+ PointerInputChange(
+ id = 7,
+ current = PointerInputData(
+ 5L.millisecondsToTimestamp(),
+ PxPosition(100.px, 100.px),
+ true
+ ),
+ previous = PointerInputData(null, null, false),
+ consumed = ConsumedData()
+ )
+
+ val expectedChange2 =
+ PointerInputChange(
+ id = 9,
+ current = PointerInputData(
+ 5L.millisecondsToTimestamp(),
+ PxPosition(100.px, 100.px),
+ true
+ ),
+ previous = PointerInputData(null, null, false),
+ consumed = ConsumedData()
+ )
+
+ // Act
+
+ pointerInputEventProcessor.process(pointerInputEvent)
+ pointerInputEventProcessor.processCancel()
+
+ // Assert
+
+ inOrder(pointerInputNode1.pointerInputHandler, pointerInputNode1.cancelHandler) {
+ for (pass in PointerEventPass.values()) {
+ verify(pointerInputNode1.pointerInputHandler).invoke(
+ eq(listOf(expectedChange1)),
+ eq(pass),
+ any()
+ )
+ }
+ verify(pointerInputNode1.cancelHandler).invoke()
+ }
+ inOrder(pointerInputNode2.pointerInputHandler, pointerInputNode2.cancelHandler) {
+ for (pass in PointerEventPass.values()) {
+ verify(pointerInputNode2.pointerInputHandler).invoke(
+ eq(listOf(expectedChange2)),
+ eq(pass),
+ any()
+ )
+ }
+ verify(pointerInputNode2.cancelHandler).invoke()
+ }
+ verifyNoMoreInteractions(
+ pointerInputNode1.pointerInputHandler,
+ pointerInputNode1.cancelHandler,
+ pointerInputNode2.pointerInputHandler,
+ pointerInputNode2.cancelHandler
+ )
+ }
+
+ @Test
+ fun processCancel_downMoveCancel_pinOnlyReceivesCorrectDownMoveCancel() {
+
+ // Arrange
+
+ val pointerInputNode: PointerInputNode = PointerInputNode().apply {
+ emitInsertAt(0, LayoutNode(0, 0, 500, 500))
+ pointerInputHandler = spy(MyPointerInputHandler())
+ cancelHandler = spy(MyCancelHandler())
+ }
+ root.emitInsertAt(0, pointerInputNode)
+
+ val down =
+ PointerInputEvent(
+ 7,
+ 5L.millisecondsToTimestamp(),
+ PxPosition(200.px, 200.px),
+ true
+ )
+
+ val move =
+ PointerInputEvent(
+ 7,
+ 10L.millisecondsToTimestamp(),
+ PxPosition(300.px, 300.px),
+ true
+ )
+
+ val expectedDown =
+ PointerInputChange(
+ id = 7,
+ current = PointerInputData(
+ 5L.millisecondsToTimestamp(),
+ PxPosition(200.px, 200.px),
+ true
+ ),
+ previous = PointerInputData(null, null, false),
+ consumed = ConsumedData()
+ )
+
+ val expectedMove =
+ PointerInputChange(
+ id = 7,
+ current = PointerInputData(
+ 10L.millisecondsToTimestamp(),
+ PxPosition(300.px, 300.px),
+ true
+ ),
+ previous = PointerInputData(
+ 5L.millisecondsToTimestamp(),
+ PxPosition(200.px, 200.px),
+ true
+ ),
+ consumed = ConsumedData()
+ )
+
+ // Act
+
+ pointerInputEventProcessor.process(down)
+ pointerInputEventProcessor.process(move)
+ pointerInputEventProcessor.processCancel()
+
+ // Assert
+
+ inOrder(pointerInputNode.pointerInputHandler, pointerInputNode.cancelHandler) {
+ for (pass in PointerEventPass.values()) {
+ verify(pointerInputNode.pointerInputHandler).invoke(
+ eq(listOf(expectedDown)),
+ eq(pass),
+ any()
+ )
+ }
+ for (pass in PointerEventPass.values()) {
+ verify(pointerInputNode.pointerInputHandler).invoke(
+ eq(listOf(expectedMove)),
+ eq(pass),
+ any()
+ )
+ }
+ verify(pointerInputNode.cancelHandler).invoke()
+ }
+ verifyNoMoreInteractions(
+ pointerInputNode.pointerInputHandler,
+ pointerInputNode.cancelHandler
+ )
+ }
+
+ @Test
+ fun processCancel_downCancelMoveUp_pinOnlyReceivesCorrectDownCancel() {
+
+ // Arrange
+
+ val pointerInputNode: PointerInputNode = PointerInputNode().apply {
+ emitInsertAt(0, LayoutNode(0, 0, 500, 500))
+ pointerInputHandler = spy(MyPointerInputHandler())
+ cancelHandler = spy(MyCancelHandler())
+ }
+ root.emitInsertAt(0, pointerInputNode)
+
+ val down =
+ PointerInputEvent(
+ 7,
+ 5L.millisecondsToTimestamp(),
+ PxPosition(200.px, 200.px),
+ true
+ )
+
+ val expectedDown =
+ PointerInputChange(
+ id = 7,
+ current = PointerInputData(
+ 5L.millisecondsToTimestamp(),
+ PxPosition(200.px, 200.px),
+ true
+ ),
+ previous = PointerInputData(null, null, false),
+ consumed = ConsumedData()
+ )
+
+ // Act
+
+ pointerInputEventProcessor.process(down)
+ pointerInputEventProcessor.processCancel()
+
+ // Assert
+
+ inOrder(pointerInputNode.pointerInputHandler, pointerInputNode.cancelHandler) {
+ for (pass in PointerEventPass.values()) {
+ verify(pointerInputNode.pointerInputHandler).invoke(
+ eq(listOf(expectedDown)),
+ eq(pass),
+ any()
+ )
+ }
+ verify(pointerInputNode.cancelHandler).invoke()
+ }
+ verifyNoMoreInteractions(
+ pointerInputNode.pointerInputHandler,
+ pointerInputNode.cancelHandler
+ )
+ }
+
+ @Test
+ fun processCancel_downCancelDown_pinOnlyReceivesCorrectDownCancelDown() {
+
+ // Arrange
+
+ val pointerInputNode: PointerInputNode = PointerInputNode().apply {
+ emitInsertAt(0, LayoutNode(0, 0, 500, 500))
+ pointerInputHandler = spy(MyPointerInputHandler())
+ cancelHandler = spy(MyCancelHandler())
+ }
+ root.emitInsertAt(0, pointerInputNode)
+
+ val down1 =
+ PointerInputEvent(
+ 7,
+ 5L.millisecondsToTimestamp(),
+ PxPosition(200.px, 200.px),
+ true
+ )
+
+ val down2 =
+ PointerInputEvent(
+ 7,
+ 10L.millisecondsToTimestamp(),
+ PxPosition(200.px, 200.px),
+ true
+ )
+
+ val expectedDown1 =
+ PointerInputChange(
+ id = 7,
+ current = PointerInputData(
+ 5L.millisecondsToTimestamp(),
+ PxPosition(200.px, 200.px),
+ true
+ ),
+ previous = PointerInputData(null, null, false),
+ consumed = ConsumedData()
+ )
+
+ val expectedDown2 =
+ PointerInputChange(
+ id = 7,
+ current = PointerInputData(
+ 10L.millisecondsToTimestamp(),
+ PxPosition(200.px, 200.px),
+ true
+ ),
+ previous = PointerInputData(null, null, false),
+ consumed = ConsumedData()
+ )
+
+ // Act
+
+ pointerInputEventProcessor.process(down1)
+ pointerInputEventProcessor.processCancel()
+ pointerInputEventProcessor.process(down2)
+
+ // Assert
+
+ inOrder(pointerInputNode.pointerInputHandler, pointerInputNode.cancelHandler) {
+ for (pass in PointerEventPass.values()) {
+ verify(pointerInputNode.pointerInputHandler).invoke(
+ eq(listOf(expectedDown1)),
+ eq(pass),
+ any()
+ )
+ }
+ verify(pointerInputNode.cancelHandler).invoke()
+ for (pass in PointerEventPass.values()) {
+ verify(pointerInputNode.pointerInputHandler).invoke(
+ eq(listOf(expectedDown2)),
+ eq(pass),
+ any()
+ )
+ }
+ }
+ verifyNoMoreInteractions(
+ pointerInputNode.pointerInputHandler,
+ pointerInputNode.cancelHandler
+ )
+ }
}
\ No newline at end of file
diff --git a/ui/ui-platform/src/test/java/androidx/ui/core/pointerinput/TestUtils.kt b/ui/ui-platform/src/test/java/androidx/ui/core/pointerinput/TestUtils.kt
index 44c93b7..b92dc8b 100644
--- a/ui/ui-platform/src/test/java/androidx/ui/core/pointerinput/TestUtils.kt
+++ b/ui/ui-platform/src/test/java/androidx/ui/core/pointerinput/TestUtils.kt
@@ -47,17 +47,16 @@
}
}
+open class MyCancelHandler : () -> Unit {
+ override fun invoke() {}
+}
+
internal fun LayoutNode(x: Int, y: Int, x2: Int, y2: Int) =
LayoutNode().apply {
resize(x2.ipx - x.ipx, y2.ipx - y.ipx)
place(x.ipx, y.ipx)
}
-internal fun LayoutNode(position: IntPxPosition) =
- androidx.ui.core.LayoutNode().apply {
- place(position.x, position.y)
- }
-
internal fun LayoutNode(position: IntPxPosition, size: IntPxSize) =
LayoutNode().apply {
resize(size.width, size.height)
diff --git a/ui/ui-text/api/0.1.0-dev03.txt b/ui/ui-text/api/0.1.0-dev03.txt
index f17691f..4150384 100644
--- a/ui/ui-text/api/0.1.0-dev03.txt
+++ b/ui/ui-text/api/0.1.0-dev03.txt
@@ -166,12 +166,60 @@
property public final androidx.ui.text.LocaleList current;
}
+ public final class MultiParagraph {
+ ctor public MultiParagraph(androidx.ui.text.MultiParagraphIntrinsics intrinsics, Integer? maxLines, Boolean? ellipsis, androidx.ui.text.ParagraphConstraints constraints);
+ ctor public MultiParagraph(androidx.ui.text.AnnotatedString annotatedString, androidx.ui.text.TextStyle textStyle, androidx.ui.text.ParagraphStyle paragraphStyle, Integer? maxLines, Boolean? ellipsis, androidx.ui.text.ParagraphConstraints constraints, androidx.ui.core.Density density, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
+ method public androidx.ui.text.style.TextDirection getBidiRunDirection(int offset);
+ method public androidx.ui.engine.geometry.Rect getBoundingBox(int offset);
+ method public androidx.ui.engine.geometry.Rect getCursorRect(int offset);
+ method public boolean getDidExceedMaxLines();
+ method public float getFirstBaseline();
+ method public float getHeight();
+ method public float getHorizontalPosition(int offset, boolean usePrimaryDirection);
+ method public androidx.ui.text.MultiParagraphIntrinsics getIntrinsics();
+ method public float getLastBaseline();
+ method public float getLineBottom(int lineIndex);
+ method public int getLineCount();
+ method public int getLineForOffset(int offset);
+ method public float getLineHeight(int lineIndex);
+ method public float getLineLeft(int lineIndex);
+ method public float getLineRight(int lineIndex);
+ method public float getLineWidth(int lineIndex);
+ method public float getMaxIntrinsicWidth();
+ method public Integer? getMaxLines();
+ method public float getMinIntrinsicWidth();
+ method public int getOffsetForPosition(androidx.ui.core.PxPosition position);
+ method public androidx.ui.text.style.TextDirection getParagraphDirection(int offset);
+ method public androidx.ui.graphics.Path getPathForRange(int start, int end);
+ method public float getWidth();
+ method public androidx.ui.text.TextRange getWordBoundary(int offset);
+ method public void paint(androidx.ui.graphics.Canvas canvas);
+ property public final boolean didExceedMaxLines;
+ property public final float firstBaseline;
+ property public final float height;
+ property public final float lastBaseline;
+ property public final int lineCount;
+ property public final float maxIntrinsicWidth;
+ property public final float minIntrinsicWidth;
+ property public final float width;
+ }
+
+ public final class MultiParagraphIntrinsics implements androidx.ui.text.ParagraphIntrinsics {
+ ctor public MultiParagraphIntrinsics(androidx.ui.text.AnnotatedString annotatedString, androidx.ui.text.TextStyle textStyle, androidx.ui.text.ParagraphStyle paragraphStyle, androidx.ui.core.Density density, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
+ method public androidx.ui.text.AnnotatedString getAnnotatedString();
+ method public float getMaxIntrinsicWidth();
+ method public float getMinIntrinsicWidth();
+ property public float maxIntrinsicWidth;
+ property public float minIntrinsicWidth;
+ }
+
public final class MultiParagraphKt {
ctor public MultiParagraphKt();
}
public interface Paragraph {
method public androidx.ui.text.style.TextDirection getBidiRunDirection(int offset);
+ method public androidx.ui.engine.geometry.Rect getBoundingBox(int offset);
method public androidx.ui.engine.geometry.Rect getCursorRect(int offset);
method public boolean getDidExceedMaxLines();
method public float getFirstBaseline();
@@ -180,6 +228,7 @@
method public float getLastBaseline();
method public float getLineBottom(int lineIndex);
method public int getLineCount();
+ method public int getLineForOffset(int offset);
method public float getLineHeight(int lineIndex);
method public float getLineLeft(int lineIndex);
method public float getLineRight(int lineIndex);
diff --git a/ui/ui-text/api/api_lint.ignore b/ui/ui-text/api/api_lint.ignore
index a6b87e7..8d871e2 100644
--- a/ui/ui-text/api/api_lint.ignore
+++ b/ui/ui-text/api/api_lint.ignore
@@ -1,4 +1,10 @@
// Baseline format: 1.0
+AutoBoxing: androidx.ui.text.MultiParagraph#MultiParagraph(androidx.ui.text.AnnotatedString, androidx.ui.text.TextStyle, androidx.ui.text.ParagraphStyle, Integer, Boolean, androidx.ui.text.ParagraphConstraints, androidx.ui.core.Density, androidx.ui.text.font.Font.ResourceLoader) parameter #3:
+ Must avoid boxed primitives (`java.lang.Integer`)
+AutoBoxing: androidx.ui.text.MultiParagraph#MultiParagraph(androidx.ui.text.MultiParagraphIntrinsics, Integer, Boolean, androidx.ui.text.ParagraphConstraints) parameter #1:
+ Must avoid boxed primitives (`java.lang.Integer`)
+AutoBoxing: androidx.ui.text.MultiParagraph#getMaxLines():
+ Must avoid boxed primitives (`java.lang.Integer`)
AutoBoxing: androidx.ui.text.ParagraphKt#Paragraph(String, androidx.ui.text.TextStyle, androidx.ui.text.ParagraphStyle, java.util.List<androidx.ui.text.AnnotatedString.Item<androidx.ui.text.TextStyle>>, Integer, Boolean, androidx.ui.text.ParagraphConstraints, androidx.ui.core.Density, androidx.ui.text.font.Font.ResourceLoader) parameter #4:
Must avoid boxed primitives (`java.lang.Integer`)
AutoBoxing: androidx.ui.text.ParagraphKt#Paragraph(androidx.ui.text.ParagraphIntrinsics, Integer, Boolean, androidx.ui.text.ParagraphConstraints) parameter #1:
diff --git a/ui/ui-text/api/current.txt b/ui/ui-text/api/current.txt
index f17691f..4150384 100644
--- a/ui/ui-text/api/current.txt
+++ b/ui/ui-text/api/current.txt
@@ -166,12 +166,60 @@
property public final androidx.ui.text.LocaleList current;
}
+ public final class MultiParagraph {
+ ctor public MultiParagraph(androidx.ui.text.MultiParagraphIntrinsics intrinsics, Integer? maxLines, Boolean? ellipsis, androidx.ui.text.ParagraphConstraints constraints);
+ ctor public MultiParagraph(androidx.ui.text.AnnotatedString annotatedString, androidx.ui.text.TextStyle textStyle, androidx.ui.text.ParagraphStyle paragraphStyle, Integer? maxLines, Boolean? ellipsis, androidx.ui.text.ParagraphConstraints constraints, androidx.ui.core.Density density, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
+ method public androidx.ui.text.style.TextDirection getBidiRunDirection(int offset);
+ method public androidx.ui.engine.geometry.Rect getBoundingBox(int offset);
+ method public androidx.ui.engine.geometry.Rect getCursorRect(int offset);
+ method public boolean getDidExceedMaxLines();
+ method public float getFirstBaseline();
+ method public float getHeight();
+ method public float getHorizontalPosition(int offset, boolean usePrimaryDirection);
+ method public androidx.ui.text.MultiParagraphIntrinsics getIntrinsics();
+ method public float getLastBaseline();
+ method public float getLineBottom(int lineIndex);
+ method public int getLineCount();
+ method public int getLineForOffset(int offset);
+ method public float getLineHeight(int lineIndex);
+ method public float getLineLeft(int lineIndex);
+ method public float getLineRight(int lineIndex);
+ method public float getLineWidth(int lineIndex);
+ method public float getMaxIntrinsicWidth();
+ method public Integer? getMaxLines();
+ method public float getMinIntrinsicWidth();
+ method public int getOffsetForPosition(androidx.ui.core.PxPosition position);
+ method public androidx.ui.text.style.TextDirection getParagraphDirection(int offset);
+ method public androidx.ui.graphics.Path getPathForRange(int start, int end);
+ method public float getWidth();
+ method public androidx.ui.text.TextRange getWordBoundary(int offset);
+ method public void paint(androidx.ui.graphics.Canvas canvas);
+ property public final boolean didExceedMaxLines;
+ property public final float firstBaseline;
+ property public final float height;
+ property public final float lastBaseline;
+ property public final int lineCount;
+ property public final float maxIntrinsicWidth;
+ property public final float minIntrinsicWidth;
+ property public final float width;
+ }
+
+ public final class MultiParagraphIntrinsics implements androidx.ui.text.ParagraphIntrinsics {
+ ctor public MultiParagraphIntrinsics(androidx.ui.text.AnnotatedString annotatedString, androidx.ui.text.TextStyle textStyle, androidx.ui.text.ParagraphStyle paragraphStyle, androidx.ui.core.Density density, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
+ method public androidx.ui.text.AnnotatedString getAnnotatedString();
+ method public float getMaxIntrinsicWidth();
+ method public float getMinIntrinsicWidth();
+ property public float maxIntrinsicWidth;
+ property public float minIntrinsicWidth;
+ }
+
public final class MultiParagraphKt {
ctor public MultiParagraphKt();
}
public interface Paragraph {
method public androidx.ui.text.style.TextDirection getBidiRunDirection(int offset);
+ method public androidx.ui.engine.geometry.Rect getBoundingBox(int offset);
method public androidx.ui.engine.geometry.Rect getCursorRect(int offset);
method public boolean getDidExceedMaxLines();
method public float getFirstBaseline();
@@ -180,6 +228,7 @@
method public float getLastBaseline();
method public float getLineBottom(int lineIndex);
method public int getLineCount();
+ method public int getLineForOffset(int offset);
method public float getLineHeight(int lineIndex);
method public float getLineLeft(int lineIndex);
method public float getLineRight(int lineIndex);
diff --git a/ui/ui-text/api/public_plus_experimental_0.1.0-dev03.txt b/ui/ui-text/api/public_plus_experimental_0.1.0-dev03.txt
index f17691f..4150384 100644
--- a/ui/ui-text/api/public_plus_experimental_0.1.0-dev03.txt
+++ b/ui/ui-text/api/public_plus_experimental_0.1.0-dev03.txt
@@ -166,12 +166,60 @@
property public final androidx.ui.text.LocaleList current;
}
+ public final class MultiParagraph {
+ ctor public MultiParagraph(androidx.ui.text.MultiParagraphIntrinsics intrinsics, Integer? maxLines, Boolean? ellipsis, androidx.ui.text.ParagraphConstraints constraints);
+ ctor public MultiParagraph(androidx.ui.text.AnnotatedString annotatedString, androidx.ui.text.TextStyle textStyle, androidx.ui.text.ParagraphStyle paragraphStyle, Integer? maxLines, Boolean? ellipsis, androidx.ui.text.ParagraphConstraints constraints, androidx.ui.core.Density density, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
+ method public androidx.ui.text.style.TextDirection getBidiRunDirection(int offset);
+ method public androidx.ui.engine.geometry.Rect getBoundingBox(int offset);
+ method public androidx.ui.engine.geometry.Rect getCursorRect(int offset);
+ method public boolean getDidExceedMaxLines();
+ method public float getFirstBaseline();
+ method public float getHeight();
+ method public float getHorizontalPosition(int offset, boolean usePrimaryDirection);
+ method public androidx.ui.text.MultiParagraphIntrinsics getIntrinsics();
+ method public float getLastBaseline();
+ method public float getLineBottom(int lineIndex);
+ method public int getLineCount();
+ method public int getLineForOffset(int offset);
+ method public float getLineHeight(int lineIndex);
+ method public float getLineLeft(int lineIndex);
+ method public float getLineRight(int lineIndex);
+ method public float getLineWidth(int lineIndex);
+ method public float getMaxIntrinsicWidth();
+ method public Integer? getMaxLines();
+ method public float getMinIntrinsicWidth();
+ method public int getOffsetForPosition(androidx.ui.core.PxPosition position);
+ method public androidx.ui.text.style.TextDirection getParagraphDirection(int offset);
+ method public androidx.ui.graphics.Path getPathForRange(int start, int end);
+ method public float getWidth();
+ method public androidx.ui.text.TextRange getWordBoundary(int offset);
+ method public void paint(androidx.ui.graphics.Canvas canvas);
+ property public final boolean didExceedMaxLines;
+ property public final float firstBaseline;
+ property public final float height;
+ property public final float lastBaseline;
+ property public final int lineCount;
+ property public final float maxIntrinsicWidth;
+ property public final float minIntrinsicWidth;
+ property public final float width;
+ }
+
+ public final class MultiParagraphIntrinsics implements androidx.ui.text.ParagraphIntrinsics {
+ ctor public MultiParagraphIntrinsics(androidx.ui.text.AnnotatedString annotatedString, androidx.ui.text.TextStyle textStyle, androidx.ui.text.ParagraphStyle paragraphStyle, androidx.ui.core.Density density, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
+ method public androidx.ui.text.AnnotatedString getAnnotatedString();
+ method public float getMaxIntrinsicWidth();
+ method public float getMinIntrinsicWidth();
+ property public float maxIntrinsicWidth;
+ property public float minIntrinsicWidth;
+ }
+
public final class MultiParagraphKt {
ctor public MultiParagraphKt();
}
public interface Paragraph {
method public androidx.ui.text.style.TextDirection getBidiRunDirection(int offset);
+ method public androidx.ui.engine.geometry.Rect getBoundingBox(int offset);
method public androidx.ui.engine.geometry.Rect getCursorRect(int offset);
method public boolean getDidExceedMaxLines();
method public float getFirstBaseline();
@@ -180,6 +228,7 @@
method public float getLastBaseline();
method public float getLineBottom(int lineIndex);
method public int getLineCount();
+ method public int getLineForOffset(int offset);
method public float getLineHeight(int lineIndex);
method public float getLineLeft(int lineIndex);
method public float getLineRight(int lineIndex);
diff --git a/ui/ui-text/api/public_plus_experimental_current.txt b/ui/ui-text/api/public_plus_experimental_current.txt
index f17691f..4150384 100644
--- a/ui/ui-text/api/public_plus_experimental_current.txt
+++ b/ui/ui-text/api/public_plus_experimental_current.txt
@@ -166,12 +166,60 @@
property public final androidx.ui.text.LocaleList current;
}
+ public final class MultiParagraph {
+ ctor public MultiParagraph(androidx.ui.text.MultiParagraphIntrinsics intrinsics, Integer? maxLines, Boolean? ellipsis, androidx.ui.text.ParagraphConstraints constraints);
+ ctor public MultiParagraph(androidx.ui.text.AnnotatedString annotatedString, androidx.ui.text.TextStyle textStyle, androidx.ui.text.ParagraphStyle paragraphStyle, Integer? maxLines, Boolean? ellipsis, androidx.ui.text.ParagraphConstraints constraints, androidx.ui.core.Density density, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
+ method public androidx.ui.text.style.TextDirection getBidiRunDirection(int offset);
+ method public androidx.ui.engine.geometry.Rect getBoundingBox(int offset);
+ method public androidx.ui.engine.geometry.Rect getCursorRect(int offset);
+ method public boolean getDidExceedMaxLines();
+ method public float getFirstBaseline();
+ method public float getHeight();
+ method public float getHorizontalPosition(int offset, boolean usePrimaryDirection);
+ method public androidx.ui.text.MultiParagraphIntrinsics getIntrinsics();
+ method public float getLastBaseline();
+ method public float getLineBottom(int lineIndex);
+ method public int getLineCount();
+ method public int getLineForOffset(int offset);
+ method public float getLineHeight(int lineIndex);
+ method public float getLineLeft(int lineIndex);
+ method public float getLineRight(int lineIndex);
+ method public float getLineWidth(int lineIndex);
+ method public float getMaxIntrinsicWidth();
+ method public Integer? getMaxLines();
+ method public float getMinIntrinsicWidth();
+ method public int getOffsetForPosition(androidx.ui.core.PxPosition position);
+ method public androidx.ui.text.style.TextDirection getParagraphDirection(int offset);
+ method public androidx.ui.graphics.Path getPathForRange(int start, int end);
+ method public float getWidth();
+ method public androidx.ui.text.TextRange getWordBoundary(int offset);
+ method public void paint(androidx.ui.graphics.Canvas canvas);
+ property public final boolean didExceedMaxLines;
+ property public final float firstBaseline;
+ property public final float height;
+ property public final float lastBaseline;
+ property public final int lineCount;
+ property public final float maxIntrinsicWidth;
+ property public final float minIntrinsicWidth;
+ property public final float width;
+ }
+
+ public final class MultiParagraphIntrinsics implements androidx.ui.text.ParagraphIntrinsics {
+ ctor public MultiParagraphIntrinsics(androidx.ui.text.AnnotatedString annotatedString, androidx.ui.text.TextStyle textStyle, androidx.ui.text.ParagraphStyle paragraphStyle, androidx.ui.core.Density density, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
+ method public androidx.ui.text.AnnotatedString getAnnotatedString();
+ method public float getMaxIntrinsicWidth();
+ method public float getMinIntrinsicWidth();
+ property public float maxIntrinsicWidth;
+ property public float minIntrinsicWidth;
+ }
+
public final class MultiParagraphKt {
ctor public MultiParagraphKt();
}
public interface Paragraph {
method public androidx.ui.text.style.TextDirection getBidiRunDirection(int offset);
+ method public androidx.ui.engine.geometry.Rect getBoundingBox(int offset);
method public androidx.ui.engine.geometry.Rect getCursorRect(int offset);
method public boolean getDidExceedMaxLines();
method public float getFirstBaseline();
@@ -180,6 +228,7 @@
method public float getLastBaseline();
method public float getLineBottom(int lineIndex);
method public int getLineCount();
+ method public int getLineForOffset(int offset);
method public float getLineHeight(int lineIndex);
method public float getLineLeft(int lineIndex);
method public float getLineRight(int lineIndex);
diff --git a/ui/ui-text/api/restricted_0.1.0-dev03.txt b/ui/ui-text/api/restricted_0.1.0-dev03.txt
index 6cbe3be..8899d8b 100644
--- a/ui/ui-text/api/restricted_0.1.0-dev03.txt
+++ b/ui/ui-text/api/restricted_0.1.0-dev03.txt
@@ -183,7 +183,45 @@
property public final androidx.ui.text.LocaleList current;
}
- @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class MultiParagraphIntrinsics implements androidx.ui.text.ParagraphIntrinsics {
+ public final class MultiParagraph {
+ ctor public MultiParagraph(androidx.ui.text.MultiParagraphIntrinsics intrinsics, Integer? maxLines, Boolean? ellipsis, androidx.ui.text.ParagraphConstraints constraints);
+ ctor public MultiParagraph(androidx.ui.text.AnnotatedString annotatedString, androidx.ui.text.TextStyle textStyle, androidx.ui.text.ParagraphStyle paragraphStyle, Integer? maxLines, Boolean? ellipsis, androidx.ui.text.ParagraphConstraints constraints, androidx.ui.core.Density density, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
+ method public androidx.ui.text.style.TextDirection getBidiRunDirection(int offset);
+ method public androidx.ui.engine.geometry.Rect getBoundingBox(int offset);
+ method public androidx.ui.engine.geometry.Rect getCursorRect(int offset);
+ method public boolean getDidExceedMaxLines();
+ method public float getFirstBaseline();
+ method public float getHeight();
+ method public float getHorizontalPosition(int offset, boolean usePrimaryDirection);
+ method public androidx.ui.text.MultiParagraphIntrinsics getIntrinsics();
+ method public float getLastBaseline();
+ method public float getLineBottom(int lineIndex);
+ method public int getLineCount();
+ method public int getLineForOffset(int offset);
+ method public float getLineHeight(int lineIndex);
+ method public float getLineLeft(int lineIndex);
+ method public float getLineRight(int lineIndex);
+ method public float getLineWidth(int lineIndex);
+ method public float getMaxIntrinsicWidth();
+ method public Integer? getMaxLines();
+ method public float getMinIntrinsicWidth();
+ method public int getOffsetForPosition(androidx.ui.core.PxPosition position);
+ method public androidx.ui.text.style.TextDirection getParagraphDirection(int offset);
+ method public androidx.ui.graphics.Path getPathForRange(int start, int end);
+ method public float getWidth();
+ method public androidx.ui.text.TextRange getWordBoundary(int offset);
+ method public void paint(androidx.ui.graphics.Canvas canvas);
+ property public final boolean didExceedMaxLines;
+ property public final float firstBaseline;
+ property public final float height;
+ property public final float lastBaseline;
+ property public final int lineCount;
+ property public final float maxIntrinsicWidth;
+ property public final float minIntrinsicWidth;
+ property public final float width;
+ }
+
+ public final class MultiParagraphIntrinsics implements androidx.ui.text.ParagraphIntrinsics {
ctor public MultiParagraphIntrinsics(androidx.ui.text.AnnotatedString annotatedString, androidx.ui.text.TextStyle textStyle, androidx.ui.text.ParagraphStyle paragraphStyle, androidx.ui.core.Density density, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
method public androidx.ui.text.AnnotatedString getAnnotatedString();
method public float getMaxIntrinsicWidth();
@@ -198,6 +236,7 @@
public interface Paragraph {
method public androidx.ui.text.style.TextDirection getBidiRunDirection(int offset);
+ method public androidx.ui.engine.geometry.Rect getBoundingBox(int offset);
method public androidx.ui.engine.geometry.Rect getCursorRect(int offset);
method public boolean getDidExceedMaxLines();
method public float getFirstBaseline();
@@ -206,6 +245,7 @@
method public float getLastBaseline();
method public float getLineBottom(int lineIndex);
method public int getLineCount();
+ method public int getLineForOffset(int offset);
method public float getLineHeight(int lineIndex);
method public float getLineLeft(int lineIndex);
method public float getLineRight(int lineIndex);
diff --git a/ui/ui-text/api/restricted_current.txt b/ui/ui-text/api/restricted_current.txt
index 6cbe3be..8899d8b 100644
--- a/ui/ui-text/api/restricted_current.txt
+++ b/ui/ui-text/api/restricted_current.txt
@@ -183,7 +183,45 @@
property public final androidx.ui.text.LocaleList current;
}
- @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class MultiParagraphIntrinsics implements androidx.ui.text.ParagraphIntrinsics {
+ public final class MultiParagraph {
+ ctor public MultiParagraph(androidx.ui.text.MultiParagraphIntrinsics intrinsics, Integer? maxLines, Boolean? ellipsis, androidx.ui.text.ParagraphConstraints constraints);
+ ctor public MultiParagraph(androidx.ui.text.AnnotatedString annotatedString, androidx.ui.text.TextStyle textStyle, androidx.ui.text.ParagraphStyle paragraphStyle, Integer? maxLines, Boolean? ellipsis, androidx.ui.text.ParagraphConstraints constraints, androidx.ui.core.Density density, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
+ method public androidx.ui.text.style.TextDirection getBidiRunDirection(int offset);
+ method public androidx.ui.engine.geometry.Rect getBoundingBox(int offset);
+ method public androidx.ui.engine.geometry.Rect getCursorRect(int offset);
+ method public boolean getDidExceedMaxLines();
+ method public float getFirstBaseline();
+ method public float getHeight();
+ method public float getHorizontalPosition(int offset, boolean usePrimaryDirection);
+ method public androidx.ui.text.MultiParagraphIntrinsics getIntrinsics();
+ method public float getLastBaseline();
+ method public float getLineBottom(int lineIndex);
+ method public int getLineCount();
+ method public int getLineForOffset(int offset);
+ method public float getLineHeight(int lineIndex);
+ method public float getLineLeft(int lineIndex);
+ method public float getLineRight(int lineIndex);
+ method public float getLineWidth(int lineIndex);
+ method public float getMaxIntrinsicWidth();
+ method public Integer? getMaxLines();
+ method public float getMinIntrinsicWidth();
+ method public int getOffsetForPosition(androidx.ui.core.PxPosition position);
+ method public androidx.ui.text.style.TextDirection getParagraphDirection(int offset);
+ method public androidx.ui.graphics.Path getPathForRange(int start, int end);
+ method public float getWidth();
+ method public androidx.ui.text.TextRange getWordBoundary(int offset);
+ method public void paint(androidx.ui.graphics.Canvas canvas);
+ property public final boolean didExceedMaxLines;
+ property public final float firstBaseline;
+ property public final float height;
+ property public final float lastBaseline;
+ property public final int lineCount;
+ property public final float maxIntrinsicWidth;
+ property public final float minIntrinsicWidth;
+ property public final float width;
+ }
+
+ public final class MultiParagraphIntrinsics implements androidx.ui.text.ParagraphIntrinsics {
ctor public MultiParagraphIntrinsics(androidx.ui.text.AnnotatedString annotatedString, androidx.ui.text.TextStyle textStyle, androidx.ui.text.ParagraphStyle paragraphStyle, androidx.ui.core.Density density, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
method public androidx.ui.text.AnnotatedString getAnnotatedString();
method public float getMaxIntrinsicWidth();
@@ -198,6 +236,7 @@
public interface Paragraph {
method public androidx.ui.text.style.TextDirection getBidiRunDirection(int offset);
+ method public androidx.ui.engine.geometry.Rect getBoundingBox(int offset);
method public androidx.ui.engine.geometry.Rect getCursorRect(int offset);
method public boolean getDidExceedMaxLines();
method public float getFirstBaseline();
@@ -206,6 +245,7 @@
method public float getLastBaseline();
method public float getLineBottom(int lineIndex);
method public int getLineCount();
+ method public int getLineForOffset(int offset);
method public float getLineHeight(int lineIndex);
method public float getLineLeft(int lineIndex);
method public float getLineRight(int lineIndex);
diff --git a/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeText.kt b/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeText.kt
index f4298b7..d4eefde 100644
--- a/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeText.kt
+++ b/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeText.kt
@@ -497,7 +497,8 @@
@Composable
fun TextDemoComposableTextSpan() {
- Text(text = "This is a ", style = TextStyle(fontSize = fontSize8)) {
+ Text(style = TextStyle(fontSize = fontSize8)) {
+ Span(text = "This is a ")
Span(text = "composable ", style = TextStyle(fontStyle = FontStyle.Italic))
val color1 = Color(0xFFEF50AD)
val color2 = Color(0xFF10AF52)
diff --git a/ui/ui-text/src/androidTest/java/androidx/ui/text/MultiParagraphIntegrationTest.kt b/ui/ui-text/src/androidTest/java/androidx/ui/text/MultiParagraphIntegrationTest.kt
index 63fcc0b..aff478e 100644
--- a/ui/ui-text/src/androidTest/java/androidx/ui/text/MultiParagraphIntegrationTest.kt
+++ b/ui/ui-text/src/androidTest/java/androidx/ui/text/MultiParagraphIntegrationTest.kt
@@ -29,9 +29,7 @@
import androidx.ui.graphics.Path
import androidx.ui.graphics.PathOperation
import androidx.ui.text.FontTestData.Companion.BASIC_MEASURE_FONT
-import androidx.ui.text.font.FontFamily
import androidx.ui.text.font.asFontFamily
-import androidx.ui.text.matchers.isZero
import androidx.ui.text.style.TextAlign
import androidx.ui.text.style.TextDirection
import androidx.ui.text.style.TextDirectionAlgorithm
@@ -51,1891 +49,104 @@
private val cursorWidth = 4f
@Test
- fun empty_string() {
- withDensity(defaultDensity) {
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val text = ""
+ fun didExceedMaxLines_withLineFeed() {
+ // The text should be rendered with 3 lines:
+ // a
+ // b
+ // c
+ val text = createAnnotatedString("a\nb", "c")
+ // maxLines be 1 or 2, smaller than the line count 3
+ for (i in 1..2) {
val paragraph = simpleMultiParagraph(
text = text,
- fontSize = fontSize,
- constraints = ParagraphConstraints(width = 100.0f)
+ maxLines = i
)
+ assertWithMessage("text has 3 lines, maxLines = $i")
+ .that(paragraph.didExceedMaxLines).isTrue()
+ }
- assertThat(paragraph.width).isEqualTo(100.0f)
-
- assertThat(paragraph.height).isEqualTo(fontSizeInPx)
- // defined in sample_font
- assertThat(paragraph.firstBaseline).isEqualTo(fontSizeInPx * 0.8f)
- assertThat(paragraph.lastBaseline).isEqualTo(fontSizeInPx * 0.8f)
- assertThat(paragraph.maxIntrinsicWidth).isZero()
- assertThat(paragraph.minIntrinsicWidth).isZero()
+ // maxLines be 3, 4, 5 larger than the line count 3
+ for (i in 3..5) {
+ val paragraph = simpleMultiParagraph(
+ text = text,
+ maxLines = i
+ )
+ assertWithMessage("text has 3 lines, maxLines = $i")
+ .that(paragraph.didExceedMaxLines).isFalse()
}
}
@Test
- fun single_line_default_values() {
+ fun didExceedMaxLines_withLineWrap() {
withDensity(defaultDensity) {
val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
+ // Each line has the space only for 1 character
+ val width = fontSize.toPx().value
+ // The text should be rendered with 3 lines:
+ // a
+ // b
+ // c
+ val text = createAnnotatedString("ab", "c")
- for (text in arrayOf("xyz", "\u05D0\u05D1\u05D2")) {
+ for (i in 1..2) {
val paragraph = simpleMultiParagraph(
text = text,
fontSize = fontSize,
- // width greater than text width - 150
- constraints = ParagraphConstraints(width = 200.0f)
+ maxLines = i,
+ width = width
)
-
- assertWithMessage(text).that(paragraph.width).isEqualTo(200.0f)
- assertWithMessage(text).that(paragraph.height).isEqualTo(fontSizeInPx)
- // defined in sample_font
- assertWithMessage(text).that(paragraph.firstBaseline).isEqualTo(fontSizeInPx * 0.8f)
- assertWithMessage(text).that(paragraph.lastBaseline).isEqualTo(fontSizeInPx * 0.8f)
- assertWithMessage(text).that(paragraph.maxIntrinsicWidth)
- .isEqualTo(fontSizeInPx * text.length)
- assertWithMessage(text).that(paragraph.minIntrinsicWidth)
- .isEqualTo(text.length * fontSizeInPx)
+ assertWithMessage("text has 3 lines, maxLines = $i")
+ .that(paragraph.didExceedMaxLines).isTrue()
}
- }
- }
- @Test
- fun line_break_default_values() {
- withDensity(defaultDensity) {
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
-
- for (text in arrayOf("abcdef", "\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5")) {
+ for (i in 3..5) {
val paragraph = simpleMultiParagraph(
text = text,
fontSize = fontSize,
- // 3 chars width
- constraints = ParagraphConstraints(width = 3 * fontSizeInPx)
+ maxLines = i
)
-
- // 3 chars
- assertWithMessage(text).that(paragraph.width)
- .isEqualTo(3 * fontSizeInPx)
- // 2 lines, 1 line gap
- assertWithMessage(text).that(paragraph.height)
- .isEqualTo(2 * fontSizeInPx + fontSizeInPx / 5.0f)
- // defined in sample_font
- assertWithMessage(text).that(paragraph.firstBaseline)
- .isEqualTo(fontSizeInPx * 0.8f)
- assertWithMessage(text).that(paragraph.lastBaseline)
- .isEqualTo(fontSizeInPx + fontSizeInPx / 5.0f + fontSizeInPx * 0.8f)
- assertWithMessage(text).that(paragraph.maxIntrinsicWidth)
- .isEqualTo(fontSizeInPx * text.length)
- assertWithMessage(text).that(paragraph.minIntrinsicWidth)
- .isEqualTo(text.length * fontSizeInPx)
+ assertWithMessage("text has 3 lines, maxLines = $i")
+ .that(paragraph.didExceedMaxLines).isFalse()
}
}
}
@Test
- fun didExceedMaxLines_withMaxLinesSmallerThanTextLines_returnsTrue() {
- val text = "aaa\naa"
- val maxLines = text.lines().size - 1
- val paragraph = simpleMultiParagraph(
- text = text,
- maxLines = maxLines
- )
-
- assertThat(paragraph.didExceedMaxLines).isTrue()
- }
-
- @Test
- fun didExceedMaxLines_withMaxLinesEqualToTextLines_returnsFalse() {
- val text = "aaa\naa"
- val maxLines = text.lines().size
- val paragraph = simpleMultiParagraph(
- text = text,
- maxLines = maxLines
- )
-
- assertThat(paragraph.didExceedMaxLines).isFalse()
- }
-
- @Test
- fun didExceedMaxLines_withMaxLinesGreaterThanTextLines_returnsFalse() {
- val text = "aaa\naa"
- val maxLines = text.lines().size + 1
- val paragraph = simpleMultiParagraph(
- text = text,
- maxLines = maxLines
- )
-
- assertThat(paragraph.didExceedMaxLines).isFalse()
- }
-
- @Test
- fun didExceedMaxLines_withMaxLinesSmallerThanTextLines_withLineWrap_returnsTrue() {
+ fun getPathForRange() {
withDensity(defaultDensity) {
- val text = "aa"
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val maxLines = 1
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- maxLines = maxLines,
- // One line can only contain 1 character
- constraints = ParagraphConstraints(width = fontSizeInPx)
- )
-
- assertThat(paragraph.didExceedMaxLines).isTrue()
- }
- }
-
- @Test
- fun didExceedMaxLines_withMaxLinesEqualToTextLines_withLineWrap_returnsFalse() {
- val text = "a"
- val maxLines = text.lines().size
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = 50.sp,
- maxLines = maxLines
- )
-
- assertThat(paragraph.didExceedMaxLines).isFalse()
- }
-
- @Test
- fun didExceedMaxLines_withMaxLinesGreaterThanTextLines_withLineWrap_returnsFalse() {
- withDensity(defaultDensity) {
- val text = "aa"
- val maxLines = 3
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- maxLines = maxLines,
- // One line can only contain 1 character
- constraints = ParagraphConstraints(width = fontSizeInPx)
- )
-
- assertThat(paragraph.didExceedMaxLines).isFalse()
- }
- }
-
- @Test
- fun getOffsetForPosition_ltr() {
- withDensity(defaultDensity) {
- val text = "abc"
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- constraints = ParagraphConstraints(width = text.length * fontSizeInPx)
- )
-
- // test positions that are 1, fontSize+1, 2fontSize+1 which maps to chars 0, 1, 2 ...
- for (i in 0..text.length) {
- val position = PxPosition((i * fontSizeInPx + 1).px, (fontSizeInPx / 2).px)
- val offset = paragraph.getOffsetForPosition(position)
- assertWithMessage("offset at index $i, position $position does not match")
- .that(offset).isEqualTo(i)
- }
- }
- }
-
- @Test
- fun getOffsetForPosition_rtl() {
- withDensity(defaultDensity) {
- val text = "\u05D0\u05D1\u05D2"
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- constraints = ParagraphConstraints(width = text.length * fontSizeInPx)
- )
-
- // test positions that are 1, fontSize+1, 2fontSize+1 which maps to chars .., 2, 1, 0
- for (i in 0..text.length) {
- val position = PxPosition((i * fontSizeInPx + 1).px, (fontSizeInPx / 2).px)
- val offset = paragraph.getOffsetForPosition(position)
- assertWithMessage("offset at index $i, position $position does not match")
- .that(offset).isEqualTo(text.length - i)
- }
- }
- }
-
- @Test
- fun getOffsetForPosition_ltr_multiline() {
- withDensity(defaultDensity) {
- val firstLine = "abc"
- val secondLine = "def"
- val text = firstLine + secondLine
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- constraints = ParagraphConstraints(width = firstLine.length * fontSizeInPx)
- )
-
- // test positions are 1, fontSize+1, 2fontSize+1 and always on the second line
- // which maps to chars 3, 4, 5
- for (i in 0..secondLine.length) {
- val position = PxPosition((i * fontSizeInPx + 1).px, (fontSizeInPx * 1.5f).px)
- val offset = paragraph.getOffsetForPosition(position)
- assertWithMessage(
- "offset at index $i, position $position, second line does not match"
- ).that(offset).isEqualTo(i + firstLine.length)
- }
- }
- }
-
- @Test
- fun getOffsetForPosition_rtl_multiline() {
- withDensity(defaultDensity) {
- val firstLine = "\u05D0\u05D1\u05D2"
- val secondLine = "\u05D3\u05D4\u05D5"
- val text = firstLine + secondLine
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- constraints = ParagraphConstraints(width = firstLine.length * fontSizeInPx)
- )
-
- // test positions are 1, fontSize+1, 2fontSize+1 and always on the second line
- // which maps to chars 5, 4, 3
- for (i in 0..secondLine.length) {
- val position = PxPosition((i * fontSizeInPx + 1).px, (fontSizeInPx * 1.5f).px)
- val offset = paragraph.getOffsetForPosition(position)
- assertWithMessage(
- "offset at index $i, position $position, second line does not match"
- ).that(offset).isEqualTo(text.length - i)
- }
- }
- }
-
- @Test
- fun getOffsetForPosition_ltr_width_outOfBounds() {
- withDensity(defaultDensity) {
- val text = "abc"
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- constraints = ParagraphConstraints(width = text.length * fontSizeInPx)
- )
-
- // greater than width
- var position = PxPosition((fontSizeInPx * text.length * 2).px, (fontSizeInPx / 2).px)
- var offset = paragraph.getOffsetForPosition(position)
- assertThat(offset).isEqualTo(text.length)
-
- // negative
- position = PxPosition((-1 * fontSizeInPx).px, (fontSizeInPx / 2).px)
- offset = paragraph.getOffsetForPosition(position)
- assertThat(offset).isZero()
- }
- }
-
- @Test
- fun getOffsetForPosition_ltr_height_outOfBounds() {
- withDensity(defaultDensity) {
- val text = "abc"
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- constraints = ParagraphConstraints(width = text.length * fontSizeInPx)
- )
-
- // greater than height
- var position = PxPosition((fontSizeInPx / 2).px, (fontSizeInPx * text.length * 2).px)
- var offset = paragraph.getOffsetForPosition(position)
- assertThat(offset).isZero()
-
- // negative
- position = PxPosition((fontSizeInPx / 2).px, (-1 * fontSizeInPx).px)
- offset = paragraph.getOffsetForPosition(position)
- assertThat(offset).isZero()
- }
- }
-
- @Test
- fun getOffsetForPosition_lineBreak() {
- withDensity(defaultDensity) {
- val text = "abc\n"
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- constraints = ParagraphConstraints(width = text.length * fontSizeInPx)
- )
-
- assertThat(paragraph.getOffsetForPosition(PxPosition((3 * fontSizeInPx).px, 0.px)))
- .isEqualTo(3)
-
- assertThat(paragraph.getOffsetForPosition(PxPosition(0.px, (fontSizeInPx * 1.5f).px)))
- .isEqualTo(4)
- }
- }
-
- @Test
- fun getOffsetForPosition_multiple_paragraph() {
- withDensity(defaultDensity) {
- val text = "abcdef"
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- paragraphStyles = listOf(
- AnnotatedString.Item(
- style = ParagraphStyle(
- textDirectionAlgorithm = TextDirectionAlgorithm.ContentOrLtr
- ),
- start = 0,
- end = 3
- )
- ),
- constraints = ParagraphConstraints(width = text.length * fontSizeInPx)
- )
-
- for (i in 0 until 3) {
- assertThat(paragraph.getOffsetForPosition(PxPosition((i * fontSizeInPx).px, 0.px)))
- .isEqualTo(i)
- }
-
- for (i in 3 until 6) {
- assertThat(
- paragraph.getOffsetForPosition(
- PxPosition(((i - 3) * fontSizeInPx).px, fontSizeInPx.px)
- )
- ).isEqualTo(i)
- }
- }
- }
-
- @Test
- fun getBoundingBox_ltr_singleLine() {
- withDensity(defaultDensity) {
- val text = "abc"
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- constraints = ParagraphConstraints(width = text.length * fontSizeInPx)
- )
-
- for (i in text.indices) {
- val box = paragraph.getBoundingBox(i)
- assertThat(box.left).isEqualTo(i * fontSizeInPx)
- assertThat(box.right).isEqualTo((i + 1) * fontSizeInPx)
- assertThat(box.top).isZero()
- assertThat(box.bottom).isEqualTo(fontSizeInPx)
- }
- }
- }
-
- @Test
- fun getBoundingBox_ltr_multiLines() {
- withDensity(defaultDensity) {
- val firstLine = "abc"
- val secondLine = "def"
- val text = firstLine + secondLine
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- constraints = ParagraphConstraints(width = firstLine.length * fontSizeInPx)
- )
-
- // test positions are 3, 4, 5 and always on the second line
- // which maps to chars 3, 4, 5
- for (i in secondLine.indices) {
- val textPosition = i + firstLine.length
- val box = paragraph.getBoundingBox(textPosition)
- assertThat(box.left).isEqualTo(i * fontSizeInPx)
- assertThat(box.right).isEqualTo((i + 1) * fontSizeInPx)
- assertThat(box.top).isEqualTo(fontSizeInPx)
- assertThat(box.bottom).isEqualTo((2f + 1 / 5f) * fontSizeInPx)
- }
- }
- }
-
- @Test(expected = java.lang.IllegalArgumentException::class)
- fun getBoundingBox_ltr_textPosition_negative() {
- withDensity(defaultDensity) {
- val text = "abc"
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- constraints = ParagraphConstraints(width = text.length * fontSizeInPx)
- )
-
- paragraph.getBoundingBox(-1)
- }
- }
-
- @Suppress
- @Test(expected = java.lang.IllegalArgumentException::class)
- fun getBoundingBox_ltr_textPosition_larger_than_length_throw_exception() {
- withDensity(defaultDensity) {
- val text = "abc"
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- constraints = ParagraphConstraints(width = text.length * fontSizeInPx)
- )
-
- val textPosition = text.length + 1
- paragraph.getBoundingBox(textPosition)
- }
- }
-
- @Test(expected = java.lang.IllegalArgumentException::class)
- fun getCursorRect_larger_than_length_throw_exception() {
- withDensity(defaultDensity) {
- val text = "abc"
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val paragraph = simpleMultiParagraph(
- text = text, fontSize = fontSize,
- constraints = ParagraphConstraints(width = text.length * fontSizeInPx)
- )
-
- paragraph.getCursorRect(text.length + 1)
- }
- }
-
- @Test(expected = java.lang.IllegalArgumentException::class)
- fun getCursorRect_negative_throw_exception() {
- withDensity(defaultDensity) {
- val text = "abc"
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- constraints = ParagraphConstraints(width = text.length * fontSizeInPx)
- )
-
- paragraph.getCursorRect(-1)
- }
- }
-
- @Test
- fun getCursorRect_ltr_singleLine() {
- withDensity(defaultDensity) {
- val text = "abc"
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- constraints = ParagraphConstraints(width = text.length * fontSizeInPx)
- )
-
- for (i in text.indices) {
- val cursorRect = paragraph.getCursorRect(i)
- val cursorXOffset = i * fontSizeInPx
- assertThat(cursorRect).isEqualTo(
- Rect(
- left = cursorXOffset - cursorWidth / 2,
- top = 0f,
- right = cursorXOffset + cursorWidth / 2,
- bottom = fontSizeInPx
- )
- )
- }
- }
- }
-
- @Test
- fun getCursorRect_ltr_multiLines() {
- withDensity(defaultDensity) {
- val text = "abcdef"
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val charsPerLine = 3
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- constraints = ParagraphConstraints(width = charsPerLine * fontSizeInPx)
- )
-
- for (i in 0 until charsPerLine) {
- val cursorXOffset = i * fontSizeInPx
- assertThat(paragraph.getCursorRect(i)).isEqualTo(
- Rect(
- left = cursorXOffset - cursorWidth / 2,
- top = 0f,
- right = cursorXOffset + cursorWidth / 2,
- bottom = fontSizeInPx
- )
- )
- }
-
- for (i in charsPerLine until text.length) {
- val cursorXOffset = (i % charsPerLine) * fontSizeInPx
- assertThat(paragraph.getCursorRect(i)).isEqualTo(
- Rect(
- left = cursorXOffset - cursorWidth / 2,
- top = fontSizeInPx,
- right = cursorXOffset + cursorWidth / 2,
- bottom = fontSizeInPx * 2.2f
- )
- )
- }
- }
- }
-
- @Test
- fun getCursorRect_rtl_singleLine() {
- withDensity(defaultDensity) {
- val text = "\u05D0\u05D1\u05D2"
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- constraints = ParagraphConstraints(width = text.length * fontSizeInPx)
- )
-
- for (i in text.indices) {
- val cursorXOffset = (text.length - i) * fontSizeInPx
- assertThat(paragraph.getCursorRect(i)).isEqualTo(
- Rect(
- left = cursorXOffset - cursorWidth / 2,
- top = 0f,
- right = cursorXOffset + cursorWidth / 2,
- bottom = fontSizeInPx
- )
- )
- }
- }
- }
-
- @Test
- fun getCursorRect_rtl_multiLines() {
- withDensity(defaultDensity) {
- val text = "\u05D0\u05D1\u05D2\u05D0\u05D1\u05D2"
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val charsPerLine = 3
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- constraints = ParagraphConstraints(width = charsPerLine * fontSizeInPx)
- )
-
- for (i in 0 until charsPerLine) {
- val cursorXOffset = (charsPerLine - i) * fontSizeInPx
- assertThat(paragraph.getCursorRect(i)).isEqualTo(
- Rect(
- left = cursorXOffset - cursorWidth / 2,
- top = 0f,
- right = cursorXOffset + cursorWidth / 2,
- bottom = fontSizeInPx
- )
- )
- }
-
- for (i in charsPerLine until text.length) {
- val cursorXOffset = (charsPerLine - i % charsPerLine) * fontSizeInPx
- assertThat(paragraph.getCursorRect(i)).isEqualTo(
- Rect(
- left = cursorXOffset - cursorWidth / 2,
- top = fontSizeInPx,
- right = cursorXOffset + cursorWidth / 2,
- bottom = fontSizeInPx * 2.2f
- )
- )
- }
- }
- }
-
- @Test
- fun getHorizontalPosition_primary_ltr_singleLine_textDirectionDefault() {
- withDensity(defaultDensity) {
- val text = "abc"
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- constraints = ParagraphConstraints(width = text.length * fontSizeInPx)
- )
-
- for (i in 0..text.length) {
- assertThat(paragraph.getHorizontalPosition(i, true))
- .isEqualTo(fontSizeInPx * i)
- }
- }
- }
-
- @Test
- fun getHorizontalPosition_primary_rtl_singleLine_textDirectionDefault() {
- withDensity(defaultDensity) {
- val text = "\u05D0\u05D1\u05D2"
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val width = text.length * fontSizeInPx
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- constraints = ParagraphConstraints(width)
- )
-
- for (i in 0..text.length) {
- assertThat(paragraph.getHorizontalPosition(i, true))
- .isEqualTo(width - fontSizeInPx * i)
- }
- }
- }
-
- @Test
- fun getHorizontalPosition_primary_Bidi_singleLine_textDirectionDefault() {
- withDensity(defaultDensity) {
- val ltrText = "abc"
- val rtlText = "\u05D0\u05D1\u05D2"
- val text = ltrText + rtlText
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val width = text.length * fontSizeInPx
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- constraints = ParagraphConstraints(width)
- )
-
- for (i in 0..ltrText.length) {
- assertThat(paragraph.getHorizontalPosition(i, true))
- .isEqualTo(fontSizeInPx * i)
- }
-
- for (i in 1 until rtlText.length) {
- assertThat(paragraph.getHorizontalPosition(i + ltrText.length, true))
- .isEqualTo(width - fontSizeInPx * i)
- }
-
- assertThat(paragraph.getHorizontalPosition(text.length, true))
- .isEqualTo(width)
- }
- }
-
- @Test
- fun getHorizontalPosition_primary_ltr_singleLine_textDirectionRtl() {
- withDensity(defaultDensity) {
- val text = "abc"
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val width = text.length * fontSizeInPx
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- textDirectionAlgorithm = TextDirectionAlgorithm.ForceRtl,
- constraints = ParagraphConstraints(width)
- )
-
- assertThat(paragraph.getHorizontalPosition(0, true)).isEqualTo(width)
-
- for (i in 1 until text.length) {
- assertThat(paragraph.getHorizontalPosition(i, true))
- .isEqualTo(fontSizeInPx * i)
- }
-
- assertThat(paragraph.getHorizontalPosition(text.length, true)).isZero()
- }
- }
-
- @Test
- fun getHorizontalPosition_primary_rtl_singleLine_textDirectionLtr() {
- withDensity(defaultDensity) {
- val text = "\u05D0\u05D1\u05D2"
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val width = text.length * fontSizeInPx
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- textDirectionAlgorithm = TextDirectionAlgorithm.ForceLtr,
- constraints = ParagraphConstraints(width)
- )
-
- assertThat(paragraph.getHorizontalPosition(0, true)).isZero()
-
- for (i in 1 until text.length) {
- assertThat(paragraph.getHorizontalPosition(i, true))
- .isEqualTo(width - fontSizeInPx * i)
- }
-
- assertThat(paragraph.getHorizontalPosition(text.length, true)).isEqualTo(width)
- }
- }
-
- @Test
- fun getHorizontalPosition_primary_Bidi_singleLine_textDirectionLtr() {
- withDensity(defaultDensity) {
- val ltrText = "abc"
- val rtlText = "\u05D0\u05D1\u05D2"
- val text = ltrText + rtlText
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val width = text.length * fontSizeInPx
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- textDirectionAlgorithm = TextDirectionAlgorithm.ForceLtr,
- constraints = ParagraphConstraints(width)
- )
-
- for (i in 0..ltrText.length) {
- assertThat(paragraph.getHorizontalPosition(i, true))
- .isEqualTo(fontSizeInPx * i)
- }
-
- for (i in 1 until rtlText.length) {
- assertThat(paragraph.getHorizontalPosition(i + ltrText.length, true))
- .isEqualTo(width - fontSizeInPx * i)
- }
-
- assertThat(paragraph.getHorizontalPosition(text.length, true)).isEqualTo(width)
- }
- }
-
- @Test
- fun getHorizontalPosition_primary_Bidi_singleLine_textDirectionRtl() {
- withDensity(defaultDensity) {
- val ltrText = "abc"
- val rtlText = "\u05D0\u05D1\u05D2"
- val text = ltrText + rtlText
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val width = text.length * fontSizeInPx
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- textDirectionAlgorithm = TextDirectionAlgorithm.ForceRtl,
- constraints = ParagraphConstraints(width)
- )
-
- assertThat(paragraph.getHorizontalPosition(0, true)).isEqualTo(width)
- // Notice that abc is
- for (i in 1 until ltrText.length) {
- assertThat(paragraph.getHorizontalPosition(i, true))
- .isEqualTo(rtlText.length * fontSizeInPx + i * fontSizeInPx)
- }
-
- for (i in 0..rtlText.length) {
- assertThat(paragraph.getHorizontalPosition(i + ltrText.length, true))
- .isEqualTo(rtlText.length * fontSizeInPx - i * fontSizeInPx)
- }
- }
- }
-
- @Test
- fun getHorizontalPosition_primary_ltr_newLine_textDirectionDefault() {
- withDensity(defaultDensity) {
- val text = "abc\n"
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val width = text.length * fontSizeInPx
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- constraints = ParagraphConstraints(width)
- )
-
- assertThat(paragraph.getHorizontalPosition(text.length, true)).isZero()
- }
- }
-
- @Test
- @SdkSuppress(minSdkVersion = 23)
- // The behavior of getPrimaryHorizontal on API 19 to API 22 was wrong. Suppress this test.
- fun getHorizontalPosition_primary_rtl_newLine_textDirectionDefault() {
- withDensity(defaultDensity) {
- val text = "\u05D0\u05D1\u05D2\n"
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val width = text.length * fontSizeInPx
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- constraints = ParagraphConstraints(width)
- )
-
- assertThat(paragraph.getHorizontalPosition(text.length, true)).isZero()
- }
- }
-
- @Test
- fun getHorizontalPosition_primary_ltr_newLine_textDirectionRtl() {
- withDensity(defaultDensity) {
- val text = "abc\n"
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val width = text.length * fontSizeInPx
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- textDirectionAlgorithm = TextDirectionAlgorithm.ForceRtl,
- constraints = ParagraphConstraints(width)
- )
-
- assertThat(paragraph.getHorizontalPosition(text.length, true)).isEqualTo(width)
- }
- }
-
- @Test
- fun getHorizontalPosition_primary_rtl_newLine_textDirectionLtr() {
- withDensity(defaultDensity) {
- val text = "\u05D0\u05D1\u05D2\n"
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val width = text.length * fontSizeInPx
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- textDirectionAlgorithm = TextDirectionAlgorithm.ForceLtr,
- constraints = ParagraphConstraints(width)
- )
-
- assertThat(paragraph.getHorizontalPosition(text.length, true)).isZero()
- }
- }
-
- @Test
- fun getHorizontalPosition_notPrimary_ltr_singleLine_textDirectionDefault() {
- withDensity(defaultDensity) {
- val text = "abc"
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- constraints = ParagraphConstraints(width = text.length * fontSizeInPx)
- )
-
- for (i in 0..text.length) {
- assertThat(paragraph.getHorizontalPosition(i, false))
- .isEqualTo(fontSizeInPx * i)
- }
- }
- }
-
- @Test
- fun getHorizontalPosition_notPrimary_rtl_singleLine_textDirectionDefault() {
- withDensity(defaultDensity) {
- val text = "\u05D0\u05D1\u05D2"
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val width = text.length * fontSizeInPx
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- constraints = ParagraphConstraints(width)
- )
-
- for (i in 0..text.length) {
- assertThat(paragraph.getHorizontalPosition(i, false))
- .isEqualTo(width - fontSizeInPx * i)
- }
- }
- }
-
- @Test
- fun getHorizontalPosition_notPrimary_Bidi_singleLine_textDirectionDefault() {
- withDensity(defaultDensity) {
- val ltrText = "abc"
- val rtlText = "\u05D0\u05D1\u05D2"
- val text = ltrText + rtlText
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val width = text.length * fontSizeInPx
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- constraints = ParagraphConstraints(width)
- )
-
- for (i in ltrText.indices) {
- assertThat(paragraph.getHorizontalPosition(i, false))
- .isEqualTo(fontSizeInPx * i)
- }
-
- for (i in 0..rtlText.length) {
- assertThat(paragraph.getHorizontalPosition(i + ltrText.length, false))
- .isEqualTo(width - fontSizeInPx * i)
- }
- }
- }
-
- @Test
- fun getHorizontalPosition_notPrimary_ltr_singleLine_textDirectionRtl() {
- withDensity(defaultDensity) {
- val text = "abc"
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val width = text.length * fontSizeInPx
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- textDirectionAlgorithm = TextDirectionAlgorithm.ForceRtl,
- constraints = ParagraphConstraints(width)
- )
-
- assertThat(paragraph.getHorizontalPosition(0, false)).isZero()
-
- for (i in 1 until text.length) {
- assertThat(paragraph.getHorizontalPosition(i, false))
- .isEqualTo(fontSizeInPx * i)
- }
-
- assertThat(paragraph.getHorizontalPosition(text.length, false))
- .isEqualTo(width)
- }
- }
-
- @Test
- fun getHorizontalPosition_notPrimary_rtl_singleLine_textDirectionLtr() {
- withDensity(defaultDensity) {
- val text = "\u05D0\u05D1\u05D2"
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val width = text.length * fontSizeInPx
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- textDirectionAlgorithm = TextDirectionAlgorithm.ForceLtr,
- constraints = ParagraphConstraints(width)
- )
-
- assertThat(paragraph.getHorizontalPosition(0, false)).isEqualTo(width)
-
- for (i in 1 until text.length) {
- assertThat(paragraph.getHorizontalPosition(i, false))
- .isEqualTo(width - fontSizeInPx * i)
- }
-
- assertThat(paragraph.getHorizontalPosition(text.length, false)).isZero()
- }
- }
-
- @Test
- fun getHorizontalPosition_notPrimary_Bidi_singleLine_textDirectionLtr() {
- withDensity(defaultDensity) {
- val ltrText = "abc"
- val rtlText = "\u05D0\u05D1\u05D2"
- val text = ltrText + rtlText
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val width = text.length * fontSizeInPx
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- textDirectionAlgorithm = TextDirectionAlgorithm.ForceLtr,
- constraints = ParagraphConstraints(width)
- )
-
- for (i in ltrText.indices) {
- assertThat(paragraph.getHorizontalPosition(i, false))
- .isEqualTo(fontSizeInPx * i)
- }
-
- for (i in rtlText.indices) {
- assertThat(paragraph.getHorizontalPosition(i + ltrText.length, false))
- .isEqualTo(width - fontSizeInPx * i)
- }
-
- assertThat(paragraph.getHorizontalPosition(text.length, false))
- .isEqualTo(width - rtlText.length * fontSizeInPx)
- }
- }
-
- @Test
- fun getHorizontalPosition_notPrimary_Bidi_singleLine_textDirectionRtl() {
- withDensity(defaultDensity) {
- val ltrText = "abc"
- val rtlText = "\u05D0\u05D1\u05D2"
- val text = ltrText + rtlText
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val width = text.length * fontSizeInPx
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- textDirectionAlgorithm = TextDirectionAlgorithm.ForceRtl,
- constraints = ParagraphConstraints(width)
- )
-
- assertThat(paragraph.getHorizontalPosition(0, false))
- .isEqualTo(width - ltrText.length * fontSizeInPx)
-
- for (i in 1..ltrText.length) {
- assertThat(paragraph.getHorizontalPosition(i, false))
- .isEqualTo(rtlText.length * fontSizeInPx + i * fontSizeInPx)
- }
-
- for (i in 1..rtlText.length) {
- assertThat(paragraph.getHorizontalPosition(i + ltrText.length, false))
- .isEqualTo(rtlText.length * fontSizeInPx - i * fontSizeInPx)
- }
- }
- }
-
- @Test
- fun getHorizontalPosition_notPrimary_ltr_newLine_textDirectionDefault() {
- withDensity(defaultDensity) {
- val text = "abc\n"
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val width = text.length * fontSizeInPx
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- constraints = ParagraphConstraints(width)
- )
-
- assertThat(paragraph.getHorizontalPosition(text.length, false)).isZero()
- }
- }
-
- @Test
- @SdkSuppress(minSdkVersion = 23)
- // The behavior of getSecondaryHorizontal on API 19 to API 22 was wrong. Suppress this test.
- fun getHorizontalPosition_notPrimary_rtl_newLine_textDirectionDefault() {
- withDensity(defaultDensity) {
- val text = "\u05D0\u05D1\u05D2\n"
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val width = text.length * fontSizeInPx
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- constraints = ParagraphConstraints(width)
- )
-
- assertThat(paragraph.getHorizontalPosition(text.length, false)).isZero()
- }
- }
-
- @Test
- fun getHorizontalPosition_notPrimary_ltr_newLine_textDirectionRtl() {
- withDensity(defaultDensity) {
- val text = "abc\n"
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val width = text.length * fontSizeInPx
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- textDirectionAlgorithm = TextDirectionAlgorithm.ForceRtl,
- constraints = ParagraphConstraints(width)
- )
-
- assertThat(paragraph.getHorizontalPosition(text.length, false))
- .isEqualTo(width)
- }
- }
-
- @Test
- fun getHorizontalPosition_notPrimary_rtl_newLine_textDirectionLtr() {
- withDensity(defaultDensity) {
- val text = "\u05D0\u05D1\u05D2\n"
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val width = text.length * fontSizeInPx
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- textDirectionAlgorithm = TextDirectionAlgorithm.ForceLtr,
- constraints = ParagraphConstraints(width)
- )
-
- assertThat(paragraph.getHorizontalPosition(text.length, false)).isZero()
- }
- }
-
- @Test
- fun getParagraphDirection_ltr_singleLine_textDirectionDefault() {
- withDensity(defaultDensity) {
- val text = "abc"
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val width = text.length * fontSizeInPx
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- constraints = ParagraphConstraints(width)
- )
-
- for (i in text.indices) {
- assertThat(paragraph.getParagraphDirection(i)).isEqualTo(TextDirection.Ltr)
- }
- }
- }
-
- @Test
- fun getParagraphDirection_ltr_singleLine_textDirectionRtl() {
- withDensity(defaultDensity) {
- val text = "abc"
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val width = text.length * fontSizeInPx
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- textDirectionAlgorithm = TextDirectionAlgorithm.ForceRtl,
- constraints = ParagraphConstraints(width)
- )
-
- for (i in text.indices) {
- assertThat(paragraph.getParagraphDirection(i)).isEqualTo(TextDirection.Rtl)
- }
- }
- }
-
- @Test
- fun getParagraphDirection_rtl_singleLine_textDirectionDefault() {
- withDensity(defaultDensity) {
- val text = "\u05D0\u05D1\u05D2\n"
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val width = text.length * fontSizeInPx
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- constraints = ParagraphConstraints(width)
- )
-
- for (i in text.indices) {
- assertThat(paragraph.getParagraphDirection(i)).isEqualTo(TextDirection.Rtl)
- }
- }
- }
-
- @Test
- fun getParagraphDirection_rtl_singleLine_textDirectionLtr() {
- withDensity(defaultDensity) {
- val text = "abc"
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val width = text.length * fontSizeInPx
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- textDirectionAlgorithm = TextDirectionAlgorithm.ForceLtr,
- constraints = ParagraphConstraints(width)
- )
-
- for (i in text.indices) {
- assertThat(paragraph.getParagraphDirection(i)).isEqualTo(TextDirection.Ltr)
- }
- }
- }
-
- @Test
- fun getParagraphDirection_Bidi_singleLine_textDirectionDefault() {
- withDensity(defaultDensity) {
- val ltrText = "abc"
- val rtlText = "\u05D0\u05D1\u05D2"
- val text = ltrText + rtlText
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val width = text.length * fontSizeInPx
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- constraints = ParagraphConstraints(width)
- )
-
- for (i in text.indices) {
- assertThat(paragraph.getParagraphDirection(i)).isEqualTo(TextDirection.Ltr)
- }
- }
- }
-
- @Test
- fun getParagraphDirection_Bidi_singleLine_textDirectionLtr() {
- withDensity(defaultDensity) {
- val ltrText = "abc"
- val rtlText = "\u05D0\u05D1\u05D2"
- val text = ltrText + rtlText
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val width = text.length * fontSizeInPx
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- textDirectionAlgorithm = TextDirectionAlgorithm.ForceLtr,
- constraints = ParagraphConstraints(width)
- )
-
- for (i in text.indices) {
- assertThat(paragraph.getParagraphDirection(i)).isEqualTo(TextDirection.Ltr)
- }
- }
- }
-
- @Test
- fun getParagraphDirection_Bidi_singleLine_textDirectionRtl() {
- withDensity(defaultDensity) {
- val ltrText = "abc"
- val rtlText = "\u05D0\u05D1\u05D2"
- val text = ltrText + rtlText
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val width = text.length * fontSizeInPx
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- textDirectionAlgorithm = TextDirectionAlgorithm.ForceRtl,
- constraints = ParagraphConstraints(width)
- )
-
- for (i in text.indices) {
- assertThat(paragraph.getParagraphDirection(i)).isEqualTo(TextDirection.Rtl)
- }
- }
- }
-
- @Test
- fun getBidiRunDirection_ltr_singleLine_textDirectionDefault() {
- withDensity(defaultDensity) {
- val text = "abc"
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val width = text.length * fontSizeInPx
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- constraints = ParagraphConstraints(width)
- )
-
- for (i in text.indices) {
- assertThat(paragraph.getBidiRunDirection(i)).isEqualTo(TextDirection.Ltr)
- }
- }
- }
-
- @Test
- fun getBidiRunDirection_ltr_singleLine_textDirectionRtl() {
- withDensity(defaultDensity) {
- val text = "abc"
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val width = text.length * fontSizeInPx
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- textDirectionAlgorithm = TextDirectionAlgorithm.ForceRtl,
- constraints = ParagraphConstraints(width)
- )
-
- for (i in text.indices) {
- assertThat(paragraph.getBidiRunDirection(i)).isEqualTo(TextDirection.Ltr)
- }
- }
- }
-
- @Test
- fun getBidiRunDirection_rtl_singleLine_textDirectionDefault() {
- withDensity(defaultDensity) {
- val text = "\u05D0\u05D1\u05D2\n"
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val width = text.length * fontSizeInPx
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- constraints = ParagraphConstraints(width)
- )
-
- for (i in text.indices) {
- assertThat(paragraph.getBidiRunDirection(i)).isEqualTo(TextDirection.Rtl)
- }
- }
- }
-
- @Test
- fun getBidiRunDirection_rtl_singleLine_textDirectionLtr() {
- withDensity(defaultDensity) {
- val text = "\u05D0\u05D1\u05D2\n"
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val width = text.length * fontSizeInPx
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- textDirectionAlgorithm = TextDirectionAlgorithm.ForceLtr,
- constraints = ParagraphConstraints(width)
- )
-
- for (i in 0 until text.length - 1) {
- assertThat(paragraph.getBidiRunDirection(i)).isEqualTo(TextDirection.Rtl)
- }
- assertThat(paragraph.getBidiRunDirection(text.length - 1)).isEqualTo(TextDirection.Ltr)
- }
- }
-
- @Test
- fun getBidiRunDirection_Bidi_singleLine_textDirectionDefault() {
- withDensity(defaultDensity) {
- val ltrText = "abc"
- val rtlText = "\u05D0\u05D1\u05D2"
- val text = ltrText + rtlText
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val width = text.length * fontSizeInPx
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- constraints = ParagraphConstraints(width)
- )
-
- for (i in ltrText.indices) {
- assertThat(paragraph.getBidiRunDirection(i)).isEqualTo(TextDirection.Ltr)
- }
-
- for (i in ltrText.length until text.length) {
- assertThat(paragraph.getBidiRunDirection(i)).isEqualTo(TextDirection.Rtl)
- }
- }
- }
-
- @Test
-
- fun getBidiRunDirection_Bidi_singleLine_textDirectionLtr() {
- withDensity(defaultDensity) {
- val ltrText = "abc"
- val rtlText = "\u05D0\u05D1\u05D2"
- val text = ltrText + rtlText
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val width = text.length * fontSizeInPx
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- textDirectionAlgorithm = TextDirectionAlgorithm.ForceLtr,
- constraints = ParagraphConstraints(width)
- )
-
- for (i in ltrText.indices) {
- assertThat(paragraph.getBidiRunDirection(i)).isEqualTo(TextDirection.Ltr)
- }
-
- for (i in ltrText.length until text.length) {
- assertThat(paragraph.getBidiRunDirection(i)).isEqualTo(TextDirection.Rtl)
- }
- }
- }
-
- @Test
- fun getBidiRunDirection_Bidi_singleLine_textDirectionRtl() {
- withDensity(defaultDensity) {
- val ltrText = "abc"
- val rtlText = "\u05D0\u05D1\u05D2"
- val text = ltrText + rtlText
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val width = text.length * fontSizeInPx
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- textDirectionAlgorithm = TextDirectionAlgorithm.ForceRtl,
- constraints = ParagraphConstraints(width)
- )
-
- for (i in ltrText.indices) {
- assertThat(paragraph.getBidiRunDirection(i)).isEqualTo(TextDirection.Ltr)
- }
-
- for (i in ltrText.length until text.length) {
- assertThat(paragraph.getBidiRunDirection(i)).isEqualTo(TextDirection.Rtl)
- }
- }
- }
-
- @Test
- fun getLineForOffset_singleLine() {
- withDensity(defaultDensity) {
- val text = "abc"
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val width = text.length * fontSizeInPx
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- constraints = ParagraphConstraints(width)
- )
-
- for (i in 0..text.lastIndex) {
- assertThat(paragraph.getLineForOffset(i)).isZero()
- }
- }
- }
-
- @Test
- fun getLineForOffset_multiLines() {
- withDensity(defaultDensity) {
- val text = "a\nb\nc"
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val width = text.length * fontSizeInPx
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- constraints = ParagraphConstraints(width)
- )
-
- for (i in 0..text.lastIndex) {
- assertThat(paragraph.getLineForOffset(i)).isEqualTo(i / 2)
- }
- }
- }
-
- @Test
- fun getLineForOffset_multiParagraph() {
- withDensity(defaultDensity) {
- val text = "abcd"
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val width = text.length * fontSizeInPx
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- paragraphStyles = listOf(
- AnnotatedString.Item(
- style = ParagraphStyle(
- textDirectionAlgorithm = TextDirectionAlgorithm.ContentOrLtr
- ),
- start = 0,
- end = 2
- )
- ),
- constraints = ParagraphConstraints(width)
- )
-
- assertThat(paragraph.getLineForOffset(0)).isZero()
- assertThat(paragraph.getLineForOffset(1)).isZero()
- assertThat(paragraph.getLineForOffset(2)).isEqualTo(1)
- assertThat(paragraph.getLineForOffset(3)).isEqualTo(1)
- }
- }
-
- @Test
- fun getLineForOffset_emptyParagraph() {
- withDensity(defaultDensity) {
- val text = "abcd"
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val width = text.length * fontSizeInPx
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- paragraphStyles = listOf(
- AnnotatedString.Item(
- style = ParagraphStyle(
- textDirectionAlgorithm = TextDirectionAlgorithm.ContentOrLtr
- ),
- start = 2,
- end = 2
- )
- ),
- constraints = ParagraphConstraints(width)
- )
-
- assertThat(paragraph.getLineForOffset(0)).isZero()
- assertThat(paragraph.getLineForOffset(1)).isZero()
- // The empty paragraph takes one line
- assertThat(paragraph.getLineForOffset(2)).isEqualTo(2)
- assertThat(paragraph.getLineForOffset(3)).isEqualTo(2)
- }
- }
-
- @Test(expected = java.lang.IllegalArgumentException::class)
- fun getLineForOffset_negativeOffset() {
- withDensity(defaultDensity) {
- val text = "abc"
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val width = text.length * fontSizeInPx
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- constraints = ParagraphConstraints(width)
- )
-
- paragraph.getLineForOffset(-1)
- }
- }
-
- @Test(expected = java.lang.IllegalArgumentException::class)
- fun getLineForOffset_outOfBoundary() {
- withDensity(defaultDensity) {
- val text = "abc"
- val fontSize = 50.sp
- val fontSizeInPx = fontSize.toPx().value
- val width = text.length * fontSizeInPx
- val paragraph = simpleMultiParagraph(
- text = text,
- fontSize = fontSize,
- constraints = ParagraphConstraints(width)
- )
-
- paragraph.getLineForOffset(text.length)
- }
- }
-
- @Test
- fun testGetPathForRange_singleLine() {
- withDensity(defaultDensity) {
- val text = "abc"
+ val text = createAnnotatedString("ab", "c", "de")
val fontSize = 20.sp
val fontSizeInPx = fontSize.toPx().value
val paragraph = simpleMultiParagraph(
text = text,
- fontFamily = fontFamilyMeasureFont,
fontSize = fontSize
)
+ // Select "bcd"
+ val actualPath = paragraph.getPathForRange(1, 4)
+
val expectedPath = Path()
- val lineLeft = paragraph.getLineLeft(0)
- val lineRight = paragraph.getLineRight(0)
+ // path covering "b"
expectedPath.addRect(
- Rect(
- lineLeft,
- 0f,
- lineRight - fontSizeInPx,
- fontSizeInPx
- )
+ Rect(fontSizeInPx, 0f, fontSizeInPx * 2, fontSizeInPx)
)
-
- // Select "ab"
- val actualPath = paragraph.getPathForRange(0, 2)
-
- val diff = Path.combine(PathOperation.difference, expectedPath, actualPath).getBounds()
- assertThat(diff).isEqualTo(Rect.zero)
- }
- }
-
- @Test
- fun testGetPathForRange_multiLines() {
- withDensity(defaultDensity) {
- val text = "abc\nabc"
- val fontSize = 20.sp
- val fontSizeInPx = fontSize.toPx().value
- val paragraph = simpleMultiParagraph(
- text = text,
- fontFamily = fontFamilyMeasureFont,
- fontSize = fontSize
- )
-
- val expectedPath = Path()
- val firstLineLeft = paragraph.getLineLeft(0)
- val secondLineLeft = paragraph.getLineLeft(1)
- val firstLineRight = paragraph.getLineRight(0)
- val secondLineRight = paragraph.getLineRight(1)
+ // path covering "c"
expectedPath.addRect(
- Rect(
- firstLineLeft + fontSizeInPx,
- 0f,
- firstLineRight,
- fontSizeInPx
- )
+ Rect(0f, fontSizeInPx, fontSizeInPx, fontSizeInPx * 2)
)
+ // path covering "d"
expectedPath.addRect(
- Rect(
- secondLineLeft,
- fontSizeInPx,
- secondLineRight - fontSizeInPx,
- paragraph.height
- )
+ Rect(0f, fontSizeInPx * 2, fontSizeInPx, fontSizeInPx * 3)
)
- // Select "bc\nab"
- val actualPath = paragraph.getPathForRange(1, 6)
-
val diff = Path.combine(PathOperation.difference, expectedPath, actualPath).getBounds()
assertThat(diff).isEqualTo(Rect.zero)
}
}
- @Test
- fun testGetPathForRange_Bidi() {
- withDensity(defaultDensity) {
- val textLTR = "Hello"
- val textRTL = "שלום"
- val text = textLTR + textRTL
- val selectionLTRStart = 2
- val selectionRTLEnd = 2
- val fontSize = 20.sp
- val fontSizeInPx = fontSize.toPx().value
- val paragraph = simpleMultiParagraph(
- text = text,
- fontFamily = fontFamilyMeasureFont,
- fontSize = fontSize
- )
-
- val expectedPath = Path()
- val lineLeft = paragraph.getLineLeft(0)
- val lineRight = paragraph.getLineRight(0)
- expectedPath.addRect(
- Rect(
- lineLeft + selectionLTRStart * fontSizeInPx,
- 0f,
- lineLeft + textLTR.length * fontSizeInPx,
- fontSizeInPx
- )
- )
- expectedPath.addRect(
- Rect(
- lineRight - selectionRTLEnd * fontSizeInPx,
- 0f,
- lineRight,
- fontSizeInPx
- )
- )
-
- // Select "llo..של"
- val actualPath =
- paragraph.getPathForRange(selectionLTRStart, textLTR.length + selectionRTLEnd)
-
- val diff = Path.combine(PathOperation.difference, expectedPath, actualPath).getBounds()
- assertThat(diff).isEqualTo(Rect.zero)
- }
- }
-
- @Test
- fun testGetPathForRange_Start_Equals_End_Returns_Empty_Path() {
- val text = "abc"
- val paragraph = simpleMultiParagraph(
- text = text,
- fontFamily = fontFamilyMeasureFont,
- fontSize = 20.sp
- )
-
- val actualPath = paragraph.getPathForRange(1, 1)
-
- assertThat(actualPath.getBounds()).isEqualTo(Rect.zero)
- }
-
- @Test
- fun testGetPathForRange_Empty_Text() {
- val text = ""
- val paragraph = simpleMultiParagraph(
- text = text,
- fontFamily = fontFamilyMeasureFont,
- fontSize = 20.sp
- )
-
- val actualPath = paragraph.getPathForRange(0, 0)
-
- assertThat(actualPath.getBounds()).isEqualTo(Rect.zero)
- }
-
- @Test
- fun testGetPathForRange_Surrogate_Pair_Start_Middle_Second_Character_Selected() {
- withDensity(defaultDensity) {
- val text = "\uD834\uDD1E\uD834\uDD1F"
- val fontSize = 20.sp
- val fontSizeInPx = fontSize.toPx().value
- val paragraph = simpleMultiParagraph(
- text = text,
- fontFamily = fontFamilyMeasureFont,
- fontSize = fontSize
- )
-
- val expectedPath = Path()
- val lineRight = paragraph.getLineRight(0)
- expectedPath.addRect(Rect(lineRight / 2, 0f, lineRight, fontSizeInPx))
-
- // Try to select "\uDD1E\uD834\uDD1F", only "\uD834\uDD1F" is selected.
- val actualPath = paragraph.getPathForRange(1, text.length)
-
- val diff = Path.combine(PathOperation.difference, expectedPath, actualPath).getBounds()
- assertThat(diff).isEqualTo(Rect.zero)
- }
- }
-
- @Test
- fun testGetPathForRange_Surrogate_Pair_End_Middle_Second_Character_Selected() {
- withDensity(defaultDensity) {
- val text = "\uD834\uDD1E\uD834\uDD1F"
- val fontSize = 20.sp
- val fontSizeInPx = fontSize.toPx().value
- val paragraph = simpleMultiParagraph(
- text = text,
- fontFamily = fontFamilyMeasureFont,
- fontSize = fontSize
- )
-
- val expectedPath = Path()
- val lineRight = paragraph.getLineRight(0)
- expectedPath.addRect(Rect(lineRight / 2, 0f, lineRight, fontSizeInPx))
-
- // Try to select "\uDD1E\uD834", actually "\uD834\uDD1F" is selected.
- val actualPath = paragraph.getPathForRange(1, text.length - 1)
-
- val diff = Path.combine(PathOperation.difference, expectedPath, actualPath).getBounds()
- assertThat(diff).isEqualTo(Rect.zero)
- }
- }
-
- @Test
- fun testGetPathForRange_Surrogate_Pair_Start_Middle_End_Same_Character_Returns_Line_Segment() {
- withDensity(defaultDensity) {
- val text = "\uD834\uDD1E\uD834\uDD1F"
- val fontSize = 20.sp
- val fontSizeInPx = fontSize.toPx().value
- val paragraph = simpleMultiParagraph(
- text = text,
- fontFamily = fontFamilyMeasureFont,
- fontSize = fontSize
- )
-
- val expectedPath = Path()
- val lineRight = paragraph.getLineRight(0)
- expectedPath.addRect(Rect(lineRight / 2, 0f, lineRight / 2, fontSizeInPx))
-
- // Try to select "\uDD1E", get vertical line segment after this character.
- val actualPath = paragraph.getPathForRange(1, 2)
-
- val diff = Path.combine(PathOperation.difference, expectedPath, actualPath).getBounds()
- assertThat(diff).isEqualTo(Rect.zero)
- }
- }
-
- @Test
- fun testGetPathForRange_Emoji_Sequence() {
- withDensity(defaultDensity) {
- val text = "\u1F600\u1F603\u1F604\u1F606"
- val fontSize = 20.sp
- val fontSizeInPx = fontSize.toPx().value
- val paragraph = simpleMultiParagraph(
- text = text,
- fontFamily = fontFamilyMeasureFont,
- fontSize = fontSize
- )
-
- val expectedPath = Path()
- val lineLeft = paragraph.getLineLeft(0)
- val lineRight = paragraph.getLineRight(0)
- expectedPath.addRect(
- Rect(
- lineLeft + fontSizeInPx,
- 0f,
- lineRight - fontSizeInPx,
- fontSizeInPx
- )
- )
-
- // Select "\u1F603\u1F604"
- val actualPath = paragraph.getPathForRange(1, text.length - 1)
-
- val diff = Path.combine(PathOperation.difference, expectedPath, actualPath).getBounds()
- assertThat(diff).isEqualTo(Rect.zero)
- }
- }
-
- @Test
- fun testGetPathForRange_Unicode_200D_Return_Line_Segment() {
- withDensity(defaultDensity) {
- val text = "\u200D"
- val fontSize = 20.sp
- val fontSizeInPx = fontSize.toPx().value
- val paragraph = simpleMultiParagraph(
- text = text,
- fontFamily = fontFamilyMeasureFont,
- fontSize = fontSize
- )
-
- val expectedPath = Path()
- val lineLeft = paragraph.getLineLeft(0)
- val lineRight = paragraph.getLineRight(0)
- expectedPath.addRect(Rect(lineLeft, 0f, lineRight, fontSizeInPx))
-
- val actualPath = paragraph.getPathForRange(0, 1)
-
- assertThat(lineLeft).isEqualTo(lineRight)
- val diff = Path.combine(PathOperation.difference, expectedPath, actualPath).getBounds()
- assertThat(diff).isEqualTo(Rect.zero)
- }
- }
-
- @Test
- fun testGetPathForRange_Unicode_2066_Return_Line_Segment() {
- withDensity(defaultDensity) {
- val text = "\u2066"
- val fontSize = 20f.sp
- val fontSizeInPx = fontSize.toPx().value
- val paragraph = simpleMultiParagraph(
- text = text,
- fontFamily = fontFamilyMeasureFont,
- fontSize = fontSize
- )
-
- val expectedPath = Path()
- val lineLeft = paragraph.getLineLeft(0)
- val lineRight = paragraph.getLineRight(0)
- expectedPath.addRect(Rect(lineLeft, 0f, lineRight, fontSizeInPx))
-
- val actualPath = paragraph.getPathForRange(0, 1)
-
- assertThat(lineLeft).isEqualTo(lineRight)
- val diff = Path.combine(PathOperation.difference, expectedPath, actualPath).getBounds()
- assertThat(diff).isEqualTo(Rect.zero)
- }
- }
-
- @Test
- fun testGetWordBoundary() {
- val text = "abc def"
- val paragraph = simpleMultiParagraph(
- text = text,
- fontFamily = fontFamilyMeasureFont,
- fontSize = 20.sp
- )
-
- val result = paragraph.getWordBoundary(text.indexOf('a'))
-
- assertThat(result.start).isEqualTo(text.indexOf('a'))
- assertThat(result.end).isEqualTo(text.indexOf(' '))
- }
-
- @Test
- fun testGetWordBoundary_Bidi() {
- val text = "abc \u05d0\u05d1\u05d2 def"
- val paragraph = simpleMultiParagraph(
- text = text,
- fontFamily = fontFamilyMeasureFont,
- fontSize = 20.sp
- )
-
- val resultEnglish = paragraph.getWordBoundary(text.indexOf('a'))
- val resultHebrew = paragraph.getWordBoundary(text.indexOf('\u05d1'))
-
- assertThat(resultEnglish.start).isEqualTo(text.indexOf('a'))
- assertThat(resultEnglish.end).isEqualTo(text.indexOf(' '))
- assertThat(resultHebrew.start).isEqualTo(text.indexOf('\u05d0'))
- assertThat(resultHebrew.end).isEqualTo(text.indexOf('\u05d2') + 1)
- }
-
@Test(expected = IllegalArgumentException::class)
fun getPathForRange_throws_exception_if_start_larger_than_end() {
- val text = "ab"
+ val text = "abc"
val textStart = 0
val textEnd = text.length
val paragraph = simpleMultiParagraph(text = text)
@@ -1945,7 +156,7 @@
@Test(expected = IllegalArgumentException::class)
fun getPathForRange_throws_exception_if_start_is_smaller_than_zero() {
- val text = "ab"
+ val text = "abc"
val textStart = 0
val textEnd = text.length
val paragraph = simpleMultiParagraph(text = text)
@@ -1955,7 +166,7 @@
@Test(expected = IllegalArgumentException::class)
fun getPathForRange_throws_exception_if_end_is_larger_than_text_length() {
- val text = "ab"
+ val text = "abc"
val textStart = 0
val textEnd = text.length
val paragraph = simpleMultiParagraph(text = text)
@@ -1964,423 +175,994 @@
}
@Test
+ fun getOffsetForPosition() {
+ withDensity(defaultDensity) {
+ val lineLength = 2
+ val text = createAnnotatedString(List(3) { "a".repeat(lineLength) })
+
+ val fontSize = 50.sp
+ val fontSizeInPx = fontSize.toIntPx().value
+ // each line contains 2 character
+ val width = 2 * fontSizeInPx
+
+ val paragraph = simpleMultiParagraph(
+ text = text,
+ fontSize = fontSize,
+ width = width.toFloat()
+ )
+ // The text should be rendered as:
+ // aa
+ // aa
+ // aa
+ for (i in 0 until text.length) {
+ val row = i / lineLength
+ val y = fontSizeInPx / 2 + fontSizeInPx * row
+ val col = i % lineLength
+ val x = fontSizeInPx * col
+
+ val actualOffset = paragraph.getOffsetForPosition(PxPosition(x.px, y.px))
+ assertWithMessage("getOffsetForPosition($x, $y) failed")
+ .that(actualOffset).isEqualTo(i)
+ }
+ }
+ }
+
+ @Test
+ fun getBoundingBox() {
+ withDensity(defaultDensity) {
+ val lineLength = 2
+ val text = createAnnotatedString(List(3) { "a".repeat(lineLength) })
+
+ val fontSize = 50.sp
+ val fontSizeInPx = fontSize.toPx().value
+ val paragraph = simpleMultiParagraph(
+ text = text,
+ fontSize = fontSize,
+ width = text.length * fontSizeInPx
+ )
+ // The text should be rendered as:
+ // aa
+ // aa
+ // aa
+ for (i in 0 until text.length) {
+ val row = i / lineLength
+ val col = i % lineLength
+
+ val expectedBox = Rect(
+ left = col * fontSizeInPx,
+ right = (col + 1) * fontSizeInPx,
+ top = row * fontSizeInPx,
+ bottom = (row + 1) * fontSizeInPx
+ )
+ val actualBox = paragraph.getBoundingBox(i)
+
+ assertWithMessage("getBoundingBox($i) failed")
+ .that(actualBox).isEqualTo(expectedBox)
+ }
+ }
+ }
+
+ @Test(expected = java.lang.IllegalArgumentException::class)
+ fun getBoundingBox_offset_negative() {
+ val text = "abc"
+ val paragraph = simpleMultiParagraph(text = text)
+ paragraph.getBoundingBox(-1)
+ }
+
+ @Suppress
+ @Test(expected = java.lang.IllegalArgumentException::class)
+ fun getBoundingBox_offset_larger_than_length_throw_exception() {
+ val text = "abc"
+ val paragraph = simpleMultiParagraph(text = text)
+ paragraph.getBoundingBox(text.length + 1)
+ }
+
+ @Test
+ fun getHorizontalPosition() {
+ withDensity(defaultDensity) {
+ val paragraphCount = 3
+ val lineLength = 2
+ val text = createAnnotatedString(List(paragraphCount) { "a".repeat(lineLength) })
+
+ val fontSize = 50.sp
+ val fontSizeInPx = fontSize.toPx().value
+ val paragraph = simpleMultiParagraph(
+ text = text,
+ fontSize = fontSize
+ )
+
+ for (i in 0 until text.length) {
+ val col = i % lineLength
+ val expectPos = fontSizeInPx * col
+ val actualPos = paragraph.getHorizontalPosition(i, true)
+ assertWithMessage("getHorizontalPosition($i) failed")
+ .that(actualPos).isEqualTo(expectPos)
+ }
+
+ val expectPos = fontSizeInPx * lineLength
+ val actualPos = paragraph.getHorizontalPosition(text.length, true)
+ assertWithMessage("getHorizontalPosition(${text.length}) failed")
+ .that(actualPos).isEqualTo(expectPos)
+ }
+ }
+
+ @Test(expected = java.lang.IllegalArgumentException::class)
+ fun getHorizontalPosition_negative_throw_exception() {
+ val text = "abc"
+ val paragraph = simpleMultiParagraph(text = text)
+
+ paragraph.getHorizontalPosition(-1, true)
+ }
+
+ @Test(expected = java.lang.IllegalArgumentException::class)
+ fun getHorizontalPosition_larger_than_length_throw_exception() {
+ val text = "abc"
+ val paragraph = simpleMultiParagraph(text = text)
+
+ paragraph.getHorizontalPosition(text.length + 1, true)
+ }
+
+ @Test
+ fun getParagraphDirection_textDirection_Default() {
+ val text = createAnnotatedString("a", "\u05D0", " ")
+ val paragraph = simpleMultiParagraph(text = text)
+
+ assertThat(paragraph.getParagraphDirection(0)).isEqualTo(TextDirection.Ltr)
+ assertThat(paragraph.getParagraphDirection(1)).isEqualTo(TextDirection.Rtl)
+ assertThat(paragraph.getParagraphDirection(2)).isEqualTo(TextDirection.Ltr)
+ }
+
+ @Test
+ fun getParagraphDirection_textDirection_ContentOrLtr() {
+ val text = createAnnotatedString("a", "\u05D0", " ")
+ val paragraph = simpleMultiParagraph(
+ text = text,
+ paragraphStyle = ParagraphStyle(
+ textDirectionAlgorithm = TextDirectionAlgorithm.ContentOrLtr
+ )
+ )
+ assertThat(paragraph.getParagraphDirection(0)).isEqualTo(TextDirection.Ltr)
+ assertThat(paragraph.getParagraphDirection(1)).isEqualTo(TextDirection.Rtl)
+ assertThat(paragraph.getParagraphDirection(2)).isEqualTo(TextDirection.Ltr)
+ }
+
+ @Test
+ fun getParagraphDirection_textDirection_ContentOrRtl() {
+ val text = createAnnotatedString("a", "\u05D0", " ")
+ val paragraph = simpleMultiParagraph(
+ text = text,
+ paragraphStyle = ParagraphStyle(
+ textDirectionAlgorithm = TextDirectionAlgorithm.ContentOrRtl
+ )
+ )
+ assertThat(paragraph.getParagraphDirection(0)).isEqualTo(TextDirection.Ltr)
+ assertThat(paragraph.getParagraphDirection(1)).isEqualTo(TextDirection.Rtl)
+ assertThat(paragraph.getParagraphDirection(2)).isEqualTo(TextDirection.Rtl)
+ }
+
+ @Test
+ fun getParagraphDirection_textDirection_ForceLtr() {
+ val text = createAnnotatedString("a", "\u05D0", " ")
+ val paragraph = simpleMultiParagraph(
+ text = text,
+ paragraphStyle = ParagraphStyle(
+ textDirectionAlgorithm = TextDirectionAlgorithm.ForceLtr
+ )
+ )
+
+ for (i in 0 until text.length) {
+ assertWithMessage("getParagraphDirection($i) failed")
+ .that(paragraph.getParagraphDirection(i)).isEqualTo(TextDirection.Ltr)
+ }
+ }
+
+ @Test
+ fun getParagraphDirection_textDirection_ForceRtl() {
+ val text = createAnnotatedString("a", "\u05D0", " ")
+ val paragraph = simpleMultiParagraph(
+ text = text,
+ paragraphStyle = ParagraphStyle(
+ textDirectionAlgorithm = TextDirectionAlgorithm.ForceRtl
+ )
+ )
+
+ for (i in 0 until text.length) {
+ assertWithMessage("getParagraphDirection($i) failed")
+ .that(paragraph.getParagraphDirection(i)).isEqualTo(TextDirection.Rtl)
+ }
+ }
+
+ @Test(expected = java.lang.IllegalArgumentException::class)
+ fun getParagraphDirection_negative_throw_exception() {
+ val text = "abc"
+ val paragraph = simpleMultiParagraph(text = text)
+
+ paragraph.getParagraphDirection(-1)
+ }
+
+ @Test(expected = java.lang.IllegalArgumentException::class)
+ fun getParagraphDirection_larger_than_length_throw_exception() {
+ val text = "abc"
+ val paragraph = simpleMultiParagraph(text = text)
+
+ paragraph.getParagraphDirection(text.length + 1)
+ }
+
+ @Test
+ fun getBidiRunDirection() {
+ withDensity(defaultDensity) {
+ val text = createAnnotatedString("a\u05D0", "\u05D0a")
+ val paragraph = simpleMultiParagraph(text = text)
+
+ assertThat(paragraph.getBidiRunDirection(0)).isEqualTo(TextDirection.Ltr)
+ assertThat(paragraph.getBidiRunDirection(1)).isEqualTo(TextDirection.Rtl)
+
+ assertThat(paragraph.getBidiRunDirection(2)).isEqualTo(TextDirection.Rtl)
+ assertThat(paragraph.getBidiRunDirection(3)).isEqualTo(TextDirection.Ltr)
+ }
+ }
+
+ @Test(expected = java.lang.IllegalArgumentException::class)
+ fun getBidiRunDirection_negative_throw_exception() {
+ val text = "abc"
+ val paragraph = simpleMultiParagraph(text = text)
+
+ paragraph.getBidiRunDirection(-1)
+ }
+
+ @Test(expected = java.lang.IllegalArgumentException::class)
+ fun getBidiRunDirection_larger_than_length_throw_exception() {
+ val text = "abc"
+ val paragraph = simpleMultiParagraph(text = text)
+
+ paragraph.getBidiRunDirection(text.length + 1)
+ }
+
+ @Test
+ fun getWordBoundary() {
+ val text = createAnnotatedString("ab cd", "e f")
+ val paragraph = simpleMultiParagraph(text = text)
+
+ val textString = text.text
+ assertThat(paragraph.getWordBoundary(textString.indexOf('a')))
+ .isEqualTo(
+ TextRange(
+ textString.indexOf('a'),
+ textString.indexOf('b') + 1
+ )
+ )
+
+ assertThat(paragraph.getWordBoundary(textString.indexOf('d')))
+ .isEqualTo(
+ TextRange(
+ textString.indexOf('c'),
+ textString.indexOf('d') + 1
+ )
+ )
+
+ assertThat(paragraph.getWordBoundary(textString.indexOf('e')))
+ .isEqualTo(
+ TextRange(
+ textString.indexOf('e'),
+ textString.indexOf('e') + 1
+ )
+ )
+
+ assertThat(paragraph.getWordBoundary(textString.indexOf('f')))
+ .isEqualTo(
+ TextRange(
+ textString.indexOf('f'),
+ textString.indexOf('f') + 1
+ )
+ )
+ }
+
+ @Test(expected = java.lang.IllegalArgumentException::class)
+ fun getWordBoundary_negative_throw_exception() {
+ val text = "abc"
+ val paragraph = simpleMultiParagraph(text = text)
+
+ paragraph.getWordBoundary(-1)
+ }
+
+ @Test(expected = java.lang.IllegalArgumentException::class)
+ fun getWordBoundary_larger_than_length_throw_exception() {
+ val text = "abc"
+ val paragraph = simpleMultiParagraph(text = text)
+
+ paragraph.getWordBoundary(text.length + 1)
+ }
+
+ @Test
+ fun getCursorRect() {
+ withDensity(defaultDensity) {
+ val paragraphCount = 3
+ val lineLength = 2
+ // A text with 3 lines and each line has 2 characters.
+ val text = createAnnotatedString(List(paragraphCount) { "a".repeat(lineLength) })
+
+ val fontSize = 10.sp
+ val fontSizeInPx = fontSize.toPx().value
+ val width = 2 * fontSizeInPx
+ val paragraph = simpleMultiParagraph(
+ text = text,
+ fontSize = fontSize,
+ width = width
+ )
+
+ for (i in 0 until text.length) {
+ val row = i / lineLength
+ val col = i % lineLength
+ val top = row * fontSizeInPx
+ val cursorXOffset = col * fontSizeInPx
+
+ val expectRect = Rect(
+ left = cursorXOffset - cursorWidth / 2,
+ top = top,
+ right = cursorXOffset + cursorWidth / 2,
+ bottom = top + fontSizeInPx
+ )
+ val actualRect = paragraph.getCursorRect(i)
+
+ assertWithMessage("getCursorRect($i) failed")
+ .that(actualRect).isEqualTo(expectRect)
+ }
+
+ // Last cursor position is the end of the last line.
+ val row = paragraph.lineCount - 1
+ val col = lineLength
+ val top = row * fontSizeInPx
+ val cursorXOffset = col * fontSizeInPx
+
+ val expectRect = Rect(
+ left = cursorXOffset - cursorWidth / 2,
+ top = top,
+ right = cursorXOffset + cursorWidth / 2,
+ bottom = top + fontSizeInPx
+ )
+ val actualRect = paragraph.getCursorRect(text.length)
+ assertWithMessage("getCursorRect(${text.length}) failed")
+ .that(actualRect).isEqualTo(expectRect)
+ }
+ }
+
+ @Test(expected = java.lang.IllegalArgumentException::class)
+ fun getCursorRect_negative_throw_exception() {
+ val text = "abc"
+ val paragraph = simpleMultiParagraph(text = text)
+
+ paragraph.getCursorRect(-1)
+ }
+
+ @Test(expected = java.lang.IllegalArgumentException::class)
+ fun getCursorRect_larger_than_length_throw_exception() {
+ val text = "abc"
+ val paragraph = simpleMultiParagraph(text = text)
+
+ paragraph.getCursorRect(text.length + 1)
+ }
+
+ @Test
+ fun getLineForOffset() {
+ val text = createAnnotatedString("a", "a\na")
+ val paragraph = simpleMultiParagraph(text = text)
+
+ assertThat(paragraph.getLineForOffset(0)).isEqualTo(0)
+ assertThat(paragraph.getLineForOffset(1)).isEqualTo(1)
+ // '\n' is not checked because it's Paragraph's implementation
+ assertThat(paragraph.getLineForOffset(3)).isEqualTo(2)
+ }
+
+ @Test(expected = java.lang.IllegalArgumentException::class)
+ fun getLineForOffset_negative_throw_exception() {
+ val text = "abc"
+ val paragraph = simpleMultiParagraph(text = text)
+
+ paragraph.getLineForOffset(-1)
+ }
+
+ @Test(expected = java.lang.IllegalArgumentException::class)
+ fun getLineForOffset_larger_than_length_throw_exception() {
+ val text = "abc"
+ val paragraph = simpleMultiParagraph(text = text)
+
+ paragraph.getLineForOffset(text.length + 1)
+ }
+
+ @Test
+ fun getLineLeft() {
+ withDensity(defaultDensity) {
+ val text = createAnnotatedString("aa", "\u05D0\u05D0")
+
+ val fontSize = 50.sp
+ val fontSizeInPx = fontSize.toPx().value
+
+ val width = simpleMultiParagraphIntrinsics(text, fontSize).maxIntrinsicWidth * 2
+
+ val paragraph = simpleMultiParagraph(
+ text = text,
+ fontSize = fontSize,
+ width = width
+ )
+
+ assertThat(paragraph.getLineLeft(0)).isEqualTo(0)
+ assertThat(paragraph.getLineLeft(1)).isEqualTo(width - 2 * fontSizeInPx)
+ }
+ }
+
+ @Test(expected = java.lang.IllegalArgumentException::class)
+ fun getLineLeft_negative_throw_exception() {
+ val text = "abc"
+ val paragraph = simpleMultiParagraph(text = text)
+
+ paragraph.getLineLeft(-1)
+ }
+
+ @Test(expected = java.lang.IllegalArgumentException::class)
+ fun getLineLeft_greaterThanOrEqual_lineCount_throw_exception() {
+ val text = "abc"
+ val paragraph = simpleMultiParagraph(text = text)
+
+ paragraph.getLineLeft(paragraph.lineCount)
+ }
+
+ @Test
+ fun getLineRight() {
+ withDensity(defaultDensity) {
+ val text = createAnnotatedString("aa", "\u05D0\u05D0")
+
+ val fontSize = 50.sp
+ val fontSizeInPx = fontSize.toPx().value
+
+ val width = simpleMultiParagraphIntrinsics(text, fontSize).maxIntrinsicWidth * 2
+
+ val paragraph = simpleMultiParagraph(
+ text = text,
+ fontSize = fontSize,
+ width = width
+ )
+
+ assertThat(paragraph.getLineRight(0)).isEqualTo(2 * fontSizeInPx)
+ assertThat(paragraph.getLineRight(1)).isEqualTo(width)
+ }
+ }
+
+ @Test(expected = java.lang.IllegalArgumentException::class)
+ fun getLineRight_negative_throw_exception() {
+ val text = "abc"
+ val paragraph = simpleMultiParagraph(text = text)
+
+ paragraph.getLineRight(-1)
+ }
+
+ @Test(expected = java.lang.IllegalArgumentException::class)
+ fun getLineRight_greaterThanOrEqual_lineCount_throw_exception() {
+ val text = "abc"
+ val paragraph = simpleMultiParagraph(text = text)
+
+ paragraph.getLineRight(paragraph.lineCount)
+ }
+
+ @Test
+ fun getLineBottom() {
+ withDensity(defaultDensity) {
+ val text = createAnnotatedString("a", "a", "a")
+
+ val fontSize = 50.sp
+ val fontSizeInPx = fontSize.toPx().value
+
+ val paragraph = simpleMultiParagraph(
+ text = text,
+ fontSize = fontSize
+ )
+
+ for (i in 0 until paragraph.lineCount) {
+ assertWithMessage("bottom of line $i doesn't match")
+ .that(paragraph.getLineBottom(i))
+ .isEqualTo(fontSizeInPx * (i + 1))
+ }
+ }
+ }
+
+ @Test(expected = java.lang.IllegalArgumentException::class)
+ fun getLineBottom_negative_throw_exception() {
+ val text = "abc"
+ val paragraph = simpleMultiParagraph(text = text)
+
+ paragraph.getLineBottom(-1)
+ }
+
+ @Test(expected = java.lang.IllegalArgumentException::class)
+ fun getLineBottom_greaterThanOrEqual_lineCount_throw_exception() {
+ val text = "abc"
+ val paragraph = simpleMultiParagraph(text = text)
+
+ paragraph.getLineBottom(paragraph.lineCount)
+ }
+
+ @Test
+ fun getLineHeight() {
+ withDensity(defaultDensity) {
+ val text = createAnnotatedString("a", "a", "a")
+
+ val fontSize = 50.sp
+ val fontSizeInPx = fontSize.toPx().value
+
+ val paragraph = simpleMultiParagraph(
+ text = text,
+ fontSize = fontSize
+ )
+
+ for (i in 0 until paragraph.lineCount) {
+ assertWithMessage("getLineHeight($i) failed")
+ .that(paragraph.getLineHeight(i)).isEqualTo(fontSizeInPx)
+ }
+ }
+ }
+
+ @Test(expected = java.lang.IllegalArgumentException::class)
+ fun getLineHeight_negative_throw_exception() {
+ val text = "abc"
+ val paragraph = simpleMultiParagraph(text = text)
+
+ paragraph.getLineHeight(-1)
+ }
+
+ @Test(expected = java.lang.IllegalArgumentException::class)
+ fun getLineHeight_greaterThanOrEqual_lineCount_throw_exception() {
+ val text = "abc"
+ val paragraph = simpleMultiParagraph(text = text)
+
+ paragraph.getLineHeight(paragraph.lineCount)
+ }
+
+ @Test
fun textAlign_defaultValue_alignsStart() {
- withDensity(defaultDensity) {
- val textLTR = "aa"
- val textRTL = "\u05D0\u05D0"
- val fontSize = 20.sp
- val fontSizeInPx = fontSize.toPx().value
+ val textLtr = "aa"
+ val textRtl = "\u05D0\u05D0"
+ val text = createAnnotatedString(textLtr, textRtl)
- val layoutLTRWidth = (textLTR.length + 2) * fontSizeInPx
- val paragraphLTR = simpleMultiParagraph(
- text = textLTR,
- fontSize = fontSize,
- constraints = ParagraphConstraints(width = layoutLTRWidth)
- )
+ // Width should be sufficient to make each paragraph one line.
+ val width = 2 * simpleMultiParagraphIntrinsics(text).maxIntrinsicWidth
- val layoutRTLWidth = (textRTL.length + 2) * fontSizeInPx
- val paragraphRTL = simpleMultiParagraph(
- text = textRTL,
- fontSize = fontSize,
- constraints = ParagraphConstraints(width = layoutRTLWidth)
- )
-
- // When textAlign is TextAlign.start, LTR aligns to left, RTL aligns to right.
- assertThat(paragraphLTR.getLineLeft(0)).isZero()
- assertThat(paragraphRTL.getLineRight(0)).isEqualTo(layoutRTLWidth)
- }
+ val paragraph = simpleMultiParagraph(text = text, width = width)
+ // When text align to start, Ltr text aligns to left, line left should be 0.
+ assertThat(paragraph.getLineLeft(0)).isZero()
+ // When text align to start, Rtl text aligns to right, line right should be width.
+ assertThat(paragraph.getLineRight(1)).isEqualTo(width)
}
@Test
- fun textAlign_whenAlignLeft_returnsZeroForGetLineLeft() {
- withDensity(defaultDensity) {
- val texts = listOf("aa", "\u05D0\u05D0")
- val fontSize = 20.sp
- val fontSizeInPx = fontSize.toPx().value
+ fun textAlign_left_returnsZeroForGetLineLeft() {
+ val textLtr = "aa"
+ val textRtl = "\u05D0\u05D0"
+ val text = createAnnotatedString(textLtr, textRtl)
- texts.map { text ->
- val layoutWidth = (text.length + 2) * fontSizeInPx
- val paragraph = simpleMultiParagraph(
- text = text,
- textAlign = TextAlign.Left,
- fontSize = fontSize,
- constraints = ParagraphConstraints(width = layoutWidth)
- )
+ // Width should be sufficient to make each paragraph one line.
+ val width = 2 * simpleMultiParagraphIntrinsics(text).maxIntrinsicWidth
- assertThat(paragraph.getLineLeft(0)).isZero()
- }
- }
+ val paragraph = simpleMultiParagraph(
+ text = text,
+ width = width,
+ paragraphStyle = ParagraphStyle(textAlign = TextAlign.Left)
+ )
+
+ // When text align to left, line left should be 0 for both Ltr and Rtl text.
+ assertThat(paragraph.getLineLeft(0)).isZero()
+ assertThat(paragraph.getLineLeft(1)).isZero()
}
@Test
- fun textAlign_whenAlignRight_returnsLayoutWidthForGetLineRight() {
- withDensity(defaultDensity) {
- val texts = listOf("aa", "\u05D0\u05D0")
- val fontSize = 20.sp
- val fontSizeInPx = fontSize.toPx().value
+ fun textAlign_right_returnsWidthForGetLineRight() {
+ val textLtr = "aa"
+ val textRtl = "\u05D0\u05D0"
+ val text = createAnnotatedString(textLtr, textRtl)
- texts.map { text ->
- val layoutWidth = (text.length + 2) * fontSizeInPx
- val paragraph = simpleMultiParagraph(
- text = text,
- textAlign = TextAlign.Right,
- fontSize = fontSize,
- constraints = ParagraphConstraints(width = layoutWidth)
- )
+ // Width should be sufficient to make each paragraph one line.
+ val width = 2 * simpleMultiParagraphIntrinsics(text).maxIntrinsicWidth
- assertThat(paragraph.getLineRight(0)).isEqualTo(layoutWidth)
- }
- }
+ val paragraph = simpleMultiParagraph(
+ text = text,
+ width = width,
+ paragraphStyle = ParagraphStyle(textAlign = TextAlign.Right)
+ )
+
+ // When text align to right, line right should be width for both Ltr and Rtl text.
+ assertThat(paragraph.getLineRight(0)).isEqualTo(width)
+ assertThat(paragraph.getLineRight(1)).isEqualTo(width)
}
@Test
- fun textAlign_whenAlignCenter_textIsCentered() {
+ fun textAlign_center_textIsCentered() {
withDensity(defaultDensity) {
- val texts = listOf("aa", "\u05D0\u05D0")
- val fontSize = 20.sp
+ val textLtr = "aa"
+ val textRtl = "\u05D0\u05D0"
+ val text = createAnnotatedString(textLtr, textRtl)
+
+ val fontSize = 50.sp
val fontSizeInPx = fontSize.toPx().value
- texts.map { text ->
- val layoutWidth = (text.length + 2) * fontSizeInPx
- val paragraph = simpleMultiParagraph(
- text = text,
- textAlign = TextAlign.Center,
- fontSize = fontSize,
- constraints = ParagraphConstraints(width = layoutWidth)
- )
-
- val textWidth = text.length * fontSizeInPx
- assertThat(paragraph.getLineLeft(0)).isEqualTo(layoutWidth / 2 - textWidth / 2)
- assertThat(paragraph.getLineRight(0)).isEqualTo(layoutWidth / 2 + textWidth / 2)
- }
- }
- }
-
- @Test
- fun textAlign_whenAlignStart_withLTR_returnsZeroForGetLineLeft() {
- withDensity(defaultDensity) {
- val text = "aa"
- val fontSize = 20.sp
- val fontSizeInPx = fontSize.toPx().value
- val layoutWidth = (text.length + 2) * fontSizeInPx
+ // Width should be sufficient to make each paragraph one line.
+ val width = 2 * simpleMultiParagraphIntrinsics(text, fontSize).maxIntrinsicWidth
val paragraph = simpleMultiParagraph(
text = text,
- textAlign = TextAlign.Start,
fontSize = fontSize,
- constraints = ParagraphConstraints(width = layoutWidth)
+ width = width,
+ paragraphStyle = ParagraphStyle(textAlign = TextAlign.Center)
)
- assertThat(paragraph.getLineLeft(0)).isZero()
- }
- }
+ val expectedLineLeft = width / 2 - (fontSizeInPx * textLtr.length) / 2
+ val expectedLineRight = width / 2 + (fontSizeInPx * textLtr.length) / 2
- @Test
- fun textAlign_whenAlignEnd_withLTR_returnsLayoutWidthForGetLineRight() {
- withDensity(defaultDensity) {
- val text = "aa"
- val fontSize = 20.sp
- val fontSizeInPx = fontSize.toPx().value
- val layoutWidth = (text.length + 2) * fontSizeInPx
-
- val paragraph = simpleMultiParagraph(
- text = text,
- textAlign = TextAlign.End,
- fontSize = fontSize,
- constraints = ParagraphConstraints(width = layoutWidth)
- )
-
- assertThat(paragraph.getLineRight(0)).isEqualTo(layoutWidth)
- }
- }
-
- @Test
- fun textAlign_whenAlignStart_withRTL_returnsLayoutWidthForGetLineRight() {
- withDensity(defaultDensity) {
- val text = "\u05D0\u05D0"
- val fontSize = 20.sp
- val fontSizeInPx = fontSize.toPx().value
- val layoutWidth = (text.length + 2) * fontSizeInPx
-
- val paragraph = simpleMultiParagraph(
- text = text,
- textAlign = TextAlign.Start,
- fontSize = fontSize,
- constraints = ParagraphConstraints(width = layoutWidth)
- )
-
- assertThat(paragraph.getLineRight(0)).isEqualTo(layoutWidth)
- }
- }
-
- @Test
- fun textAlign_whenAlignEnd_withRTL_returnsZeroForGetLineLeft() {
- withDensity(defaultDensity) {
- val text = "\u05D0\u05D0"
- val fontSize = 20.sp
- val fontSizeInPx = fontSize.toPx().value
- val layoutWidth = (text.length + 2) * fontSizeInPx
-
- val paragraph = simpleMultiParagraph(
- text = text,
- textAlign = TextAlign.End,
- fontSize = fontSize,
- constraints = ParagraphConstraints(width = layoutWidth)
- )
-
- assertThat(paragraph.getLineLeft(0)).isZero()
+ assertThat(paragraph.getLineLeft(0)).isEqualTo(expectedLineLeft)
+ assertThat(paragraph.getLineRight(0)).isEqualTo(expectedLineRight)
+ assertThat(paragraph.getLineLeft(1)).isEqualTo(expectedLineLeft)
+ assertThat(paragraph.getLineRight(1)).isEqualTo(expectedLineRight)
}
}
@Test
@SdkSuppress(minSdkVersion = 28)
- // We have to test justification above API 28 because of this bug b/68009059, where devices
- // before API 28 may have an extra space at the end of line.
- fun textAlign_whenAlignJustify_justifies() {
+ // We have to test strict justification above API 28 because of this bug b/68009059, where
+ // devices before API 28 may have an extra space at the end of line.
+ fun textAlign_justify_justifies() {
+ val textLtr = "a a a"
+ val textRtl = "\u05D0 \u05D0 \u05D0"
+ val text = createAnnotatedString(textLtr, textRtl)
+
+ // Justify only works for soft wrapped lines, so width is made insufficient.
+ val width = simpleMultiParagraphIntrinsics(text).maxIntrinsicWidth - 1f
+
+ val paragraph = simpleMultiParagraph(
+ text = text,
+ paragraphStyle = ParagraphStyle(textAlign = TextAlign.Justify),
+ width = width
+ )
+
+ // When text is justified, line left is 0 while line right is width
+ assertThat(paragraph.getLineLeft(0)).isZero()
+ assertThat(paragraph.getLineRight(0)).isEqualTo(width)
+ assertThat(paragraph.getLineLeft(2)).isZero()
+ assertThat(paragraph.getLineRight(2)).isEqualTo(width)
+ }
+
+ @Test
+ @SdkSuppress(maxSdkVersion = 27, minSdkVersion = 26)
+ fun textAlign_justify_justifies_underApi28() {
withDensity(defaultDensity) {
- val text = "a a a"
- val fontSize = 20.sp
+ val textLtr = "a a a"
+ val textRtl = "\u05D0 \u05D0 \u05D0"
+ val text = createAnnotatedString(textLtr, textRtl)
+
+ val fontSize = 50.sp
val fontSizeInPx = fontSize.toPx().value
- val layoutWidth = ("a a".length + 1) * fontSizeInPx
+
+ // Justify only works for soft wrapped lines, so width is made insufficient.
+ val width = simpleMultiParagraphIntrinsics(text, fontSize).maxIntrinsicWidth - 1f
val paragraph = simpleMultiParagraph(
text = text,
- textAlign = TextAlign.Justify,
fontSize = fontSize,
- constraints = ParagraphConstraints(width = layoutWidth)
+ paragraphStyle = ParagraphStyle(textAlign = TextAlign.Justify),
+ width = width
)
+ // When Ltr text is justified, line left is 0.
assertThat(paragraph.getLineLeft(0)).isZero()
- assertThat(paragraph.getLineRight(0)).isEqualTo(layoutWidth)
- // Last line should align start
- assertThat(paragraph.getLineLeft(1)).isZero()
+ // When Ltr text is justified, line right is greater than when it's align left. We
+ // can only assert a weaker condition due to bug b/68009059, where extra space is
+ // added at the end of the line.
+ assertThat(paragraph.getLineRight(0))
+ .isGreaterThan("a a".length * fontSizeInPx)
+ // When Rtl text is justified, line right is width.
+ assertThat(paragraph.getLineRight(2)).isEqualTo(width)
+ // Similar to Ltr text, when Rtl text is justified, line left is less than when it's
+ // align right.
+ assertThat(paragraph.getLineLeft(2))
+ .isLessThan(width - "\u05D0 \u05D0".length * fontSizeInPx)
}
}
@Test
- fun textDirection_whenLTR_dotIsOnRight() {
+ fun textAlign_start_alignsStart() {
+ val textLtr = "aa"
+ val textRtl = "\u05D0\u05D0"
+ val text = createAnnotatedString(textLtr, textRtl)
+
+ // Width should be sufficient to make each paragraph one line.
+ val width = 2 * simpleMultiParagraphIntrinsics(text).maxIntrinsicWidth
+
+ val paragraph = simpleMultiParagraph(
+ text = text,
+ paragraphStyle = ParagraphStyle(textAlign = TextAlign.Start),
+ width = width
+ )
+ // When text align to start, Ltr text aligns to left, line left should be 0.
+ assertThat(paragraph.getLineLeft(0)).isZero()
+ // When text align to start, Rtl text aligns to right, line right should be width.
+ assertThat(paragraph.getLineRight(1)).isEqualTo(width)
+ }
+
+ @Test
+ fun textAlign_end_alignsEnd() {
+ val textLtr = "aa"
+ val textRtl = "\u05D0\u05D0"
+ val text = createAnnotatedString(textLtr, textRtl)
+
+ // Width should be sufficient to make each paragraph one line.
+ val width = 2 * simpleMultiParagraphIntrinsics(text).maxIntrinsicWidth
+
+ val paragraph = simpleMultiParagraph(
+ text = text,
+ paragraphStyle = ParagraphStyle(textAlign = TextAlign.End),
+ width = width
+ )
+ // When text align to start, Ltr text aligns to right, line right should be width.
+ assertThat(paragraph.getLineRight(0)).isEqualTo(width)
+ // When text align to start, Rtl text aligns to left, line left should 0.
+ assertThat(paragraph.getLineLeft(1)).isZero()
+ }
+
+ @Test
+ fun textDirectionAlgorithm_defaultValue() {
withDensity(defaultDensity) {
- val text = "a.."
- val fontSize = 20.sp
+ val textLtr = "a ."
+ val textRtl = "\u05D0 ."
+ val textNeutral = " ."
+ val text = createAnnotatedString(textLtr, textRtl, textNeutral)
+
+ val fontSize = 50.sp
val fontSizeInPx = fontSize.toPx().value
- val layoutWidth = text.length * fontSizeInPx
+
+ val width = simpleMultiParagraphIntrinsics(text, fontSize).maxIntrinsicWidth
val paragraph = simpleMultiParagraph(
text = text,
- textDirectionAlgorithm = TextDirectionAlgorithm.ForceLtr,
fontSize = fontSize,
- constraints = ParagraphConstraints(width = layoutWidth)
+ width = width
)
- // The position of the last character in display order.
- val position = PxPosition(("a.".length * fontSizeInPx + 1).px, (fontSizeInPx / 2).px)
- val charIndex = paragraph.getOffsetForPosition(position)
- assertThat(charIndex).isEqualTo(2)
+ // First paragraph should be rendered as: "a .", dot is visually after "a ".
+ assertThat(paragraph.getHorizontalPosition(2, true))
+ .isEqualTo("a ".length * fontSizeInPx)
+ // Second paragraph should be rendered as: ". א", dot is visually before " א".
+ assertThat(paragraph.getHorizontalPosition(5, true))
+ .isEqualTo(width - "\u05D0 ".length * fontSizeInPx)
+ // Third paragraph should be rendered as: " .", dot is visually after " ".
+ assertThat(paragraph.getHorizontalPosition(8, true))
+ .isEqualTo(" ".length * fontSizeInPx)
}
}
@Test
- fun textDirection_whenRTL_dotIsOnLeft() {
+ fun textDirectionAlgorithm_contentOrLtr() {
withDensity(defaultDensity) {
- val text = "a.."
- val fontSize = 20.sp
+ val textLtr = "a ."
+ val textRtl = "\u05D0 ."
+ val textNeutral = " ."
+ val text = createAnnotatedString(textLtr, textRtl, textNeutral)
+
+ val fontSize = 50.sp
val fontSizeInPx = fontSize.toPx().value
- val layoutWidth = text.length * fontSizeInPx
+
+ val width = simpleMultiParagraphIntrinsics(text, fontSize).maxIntrinsicWidth
val paragraph = simpleMultiParagraph(
text = text,
- textDirectionAlgorithm = TextDirectionAlgorithm.ForceRtl,
fontSize = fontSize,
- constraints = ParagraphConstraints(width = layoutWidth)
+ paragraphStyle = ParagraphStyle(
+ textDirectionAlgorithm = TextDirectionAlgorithm.ContentOrLtr
+ ),
+ width = width
)
- // The position of the first character in display order.
- val position = PxPosition((fontSizeInPx / 2 + 1).px, (fontSizeInPx / 2).px)
- val charIndex = paragraph.getOffsetForPosition(position)
- assertThat(charIndex).isEqualTo(2)
+ // First paragraph should be rendered as: "a .", dot is visually after "a ".
+ assertThat(paragraph.getHorizontalPosition(2, true))
+ .isEqualTo("a ".length * fontSizeInPx)
+ // Second paragraph should be rendered as: ". א", dot is visually before " א".
+ assertThat(paragraph.getHorizontalPosition(5, true))
+ .isEqualTo(width - "\u05D0 ".length * fontSizeInPx)
+ // Third paragraph should be rendered as: " .", dot is visually after " ".
+ assertThat(paragraph.getHorizontalPosition(8, true))
+ .isEqualTo(" ".length * fontSizeInPx)
}
}
@Test
- fun textDirection_whenDefault_withoutStrongChar_directionIsLTR() {
+ fun textDirectionAlgorithm_contentOrRtl() {
withDensity(defaultDensity) {
- val text = "..."
- val fontSize = 20.sp
+ val textLtr = "a ."
+ val textRtl = "\u05D0 ."
+ val textNeutral = " ."
+ val text = createAnnotatedString(textLtr, textRtl, textNeutral)
+
+ val fontSize = 50.sp
val fontSizeInPx = fontSize.toPx().value
- val layoutWidth = text.length * fontSizeInPx
+
+ val width = simpleMultiParagraphIntrinsics(text, fontSize).maxIntrinsicWidth
val paragraph = simpleMultiParagraph(
text = text,
fontSize = fontSize,
- constraints = ParagraphConstraints(width = layoutWidth)
+ paragraphStyle = ParagraphStyle(
+ textDirectionAlgorithm = TextDirectionAlgorithm.ContentOrRtl
+ ),
+ width = width
)
- for (i in 0..text.length) {
- // The position of the i-th character in display order.
- val position = PxPosition((i * fontSizeInPx + 1).px, (fontSizeInPx / 2).px)
- val charIndex = paragraph.getOffsetForPosition(position)
- assertThat(charIndex).isEqualTo(i)
- }
+ // First paragraph should be rendered as: "a .", dot is visually after "a ".
+ assertThat(paragraph.getHorizontalPosition(2, true))
+ .isEqualTo("a ".length * fontSizeInPx)
+ // Second paragraph should be rendered as: ". א", dot is visually before " א".
+ assertThat(paragraph.getHorizontalPosition(5, true))
+ .isEqualTo(width - "\u05D0 ".length * fontSizeInPx)
+ // Third paragraph should be rendered as: ". ", dot is visually before " ".
+ assertThat(paragraph.getHorizontalPosition(8, true))
+ .isEqualTo(width - " ".length * fontSizeInPx)
}
}
@Test
- fun textDirection_whenDefault_withFirstStrongCharLTR_directionIsLTR() {
+ fun textDirectionAlgorithm_forceLtr() {
withDensity(defaultDensity) {
- val text = "a\u05D0."
- val fontSize = 20.sp
+ val textLtr = "a ."
+ val textRtl = "\u05D0 ."
+ val textNeutral = " ."
+ val text = createAnnotatedString(textLtr, textRtl, textNeutral)
+
+ val fontSize = 50.sp
val fontSizeInPx = fontSize.toPx().value
- val layoutWidth = text.length * fontSizeInPx
+
+ val width = simpleMultiParagraphIntrinsics(text, fontSize).maxIntrinsicWidth
val paragraph = simpleMultiParagraph(
text = text,
fontSize = fontSize,
- constraints = ParagraphConstraints(width = layoutWidth)
+ paragraphStyle = ParagraphStyle(
+ textDirectionAlgorithm = TextDirectionAlgorithm.ForceLtr
+ ),
+ width = width
)
- for (i in text.indices) {
- // The position of the i-th character in display order.
- val position = PxPosition((i * fontSizeInPx + 1).px, (fontSizeInPx / 2).px)
- val charIndex = paragraph.getOffsetForPosition(position)
- assertThat(charIndex).isEqualTo(i)
- }
+ // First paragraph should be rendered as: "a .", dot is visually after "a ".
+ assertThat(paragraph.getHorizontalPosition(2, true))
+ .isEqualTo("a ".length * fontSizeInPx)
+ // Second paragraph should be rendered as: "א .", dot is visually after "א ".
+ assertThat(paragraph.getHorizontalPosition(5, true))
+ .isEqualTo("\u05D0 ".length * fontSizeInPx)
+ // Third paragraph should be rendered as: " .", dot is visually after " ".
+ assertThat(paragraph.getHorizontalPosition(8, true))
+ .isEqualTo(" ".length * fontSizeInPx)
}
}
@Test
- fun textDirection_whenDefault_withFirstStrongCharRTL_directionIsRTL() {
+ fun textDirectionAlgorithm_forceRtl() {
withDensity(defaultDensity) {
- val text = "\u05D0a."
- val fontSize = 20.sp
+ val textLtr = "a ."
+ val textRtl = "\u05D0 ."
+ val textNeutral = " ."
+ val text = createAnnotatedString(textLtr, textRtl, textNeutral)
+
+ val fontSize = 50.sp
val fontSizeInPx = fontSize.toPx().value
- val layoutWidth = text.length * fontSizeInPx
+
+ val width = simpleMultiParagraphIntrinsics(text, fontSize).maxIntrinsicWidth
val paragraph = simpleMultiParagraph(
text = text,
fontSize = fontSize,
- constraints = ParagraphConstraints(width = layoutWidth)
+ paragraphStyle = ParagraphStyle(
+ textDirectionAlgorithm = TextDirectionAlgorithm.ForceRtl
+ ),
+ width = width
)
- // The first character in display order should be '.'
- val position = PxPosition((fontSizeInPx / 2 + 1).px, (fontSizeInPx / 2).px)
- val index = paragraph.getOffsetForPosition(position)
- assertThat(index).isEqualTo(2)
+ // First paragraph should be rendered as: ". a", dot is visually before " a".
+ assertThat(paragraph.getHorizontalPosition(2, true))
+ .isEqualTo(width - "a ".length * fontSizeInPx)
+ // Second paragraph should be rendered as: ". א", dot is visually before " א".
+ assertThat(paragraph.getHorizontalPosition(5, true))
+ .isEqualTo(width - "\u05D0 ".length * fontSizeInPx)
+ // Third paragraph should be rendered as: ". ", dot is visually before " ".
+ assertThat(paragraph.getHorizontalPosition(8, true))
+ .isEqualTo(width - " ".length * fontSizeInPx)
}
}
@Test
fun lineHeight_returnsSameAsGiven() {
withDensity(defaultDensity) {
- val text = "abcdefgh"
- val fontSize = 20.sp
- val fontSizeInPx = fontSize.toPx().value
- // Make the layout 4 lines
- val layoutWidth = text.length * fontSizeInPx / 4
- val lineHeight = 30.sp
+ val text = createAnnotatedString("a\na\na", "a\na\na")
+ // Need to specify font size in case the asserted line height happens to be the default
+ // line height corresponding to the font size.
+ val fontSize = 50.sp
+
+ val lineHeight = 80.sp
+ val lineHeightInPx = lineHeight.toPx().value
val paragraph = simpleMultiParagraph(
text = text,
fontSize = fontSize,
- lineHeight = lineHeight,
- constraints = ParagraphConstraints(width = layoutWidth)
+ paragraphStyle = ParagraphStyle(lineHeight = lineHeight)
)
- assertThat(paragraph.lineCount).isEqualTo(4)
- // The first and last line will be different because of includePadding.
- for (i in 1 until paragraph.lineCount - 1) {
- val actualHeight = paragraph.getLineHeight(i)
- // In the sample_font.ttf, the height of the line should be
- // fontSize + 0.2f * fontSize(line gap)
- assertWithMessage("line number $i").that(actualHeight)
- .isEqualTo(lineHeight.toPx().value)
- }
- }
- }
-
- @Test
- fun textIndent_onSingleLine() {
- withDensity(defaultDensity) {
- val text = "abc"
- val fontSize = 20.sp
- val fontSizeInPx = fontSize.toPx().value
- val indent = 20.sp
- val indentInPx = indent.toPx().value
-
- val paragraph = simpleMultiParagraph(
- text = text,
- textIndent = TextIndent(firstLine = indent),
- fontSize = fontSize,
- fontFamily = fontFamilyMeasureFont
- )
-
- // This position should point to the first character 'a' if indent is applied.
- // Otherwise this position will point to the second character 'b'.
- val position = PxPosition((indentInPx + 1).px, (fontSizeInPx / 2).px)
- // The offset corresponding to the position should be the first char 'a'.
- assertThat(paragraph.getOffsetForPosition(position)).isZero()
+ // Height of first and last line in each paragraph is influenced by includePadding.
+ // So we only assert the inner paragraph lines' height.
+ assertThat(paragraph.getLineHeight(1)).isEqualTo(lineHeightInPx)
+ assertThat(paragraph.getLineHeight(4)).isEqualTo(lineHeightInPx)
}
}
@Test
fun textIndent_onFirstLine() {
withDensity(defaultDensity) {
- val text = "abcdef"
- val fontSize = 20.sp
- val fontSizeInPx = fontSize.toPx().value
+ val text = createAnnotatedString("aaa", "\u05D0\u05D0\u05D0")
val indent = 20.sp
val indentInPx = indent.toPx().value
- val paragraphWidth = "abcd".length * fontSizeInPx
+ val fontSize = 50.sp
+ val fontSizeInPx = fontSize.toPx().value
+
+ // Width is the space needed by 2 characters
+ val width = 2 * fontSizeInPx
val paragraph = simpleMultiParagraph(
text = text,
- textIndent = TextIndent(firstLine = indent),
fontSize = fontSize,
- fontFamily = fontFamilyMeasureFont,
- constraints = ParagraphConstraints(width = paragraphWidth)
+ paragraphStyle = ParagraphStyle(
+ textIndent = TextIndent(firstLine = indent)
+ ),
+ width = width
)
-
- assertThat(paragraph.lineCount).isEqualTo(2)
- // This position should point to the first character of the first line if indent is
- // applied. Otherwise this position will point to the second character of the second line.
- val position = PxPosition((indentInPx + 1).px, (fontSizeInPx / 2).px)
- // The offset corresponding to the position should be the first char 'a'.
- assertThat(paragraph.getOffsetForPosition(position)).isZero()
+ // The paragraph should be rendered as:
+ // a
+ // aa
+ // א
+ // אא
+ assertThat(paragraph.getHorizontalPosition(0, true)).isEqualTo(indentInPx)
+ assertThat(paragraph.getHorizontalPosition(1, true)).isZero()
+ assertThat(paragraph.getHorizontalPosition(3, true)).isEqualTo(width - indentInPx)
+ assertThat(paragraph.getHorizontalPosition(4, true)).isEqualTo(width)
}
}
@Test
fun textIndent_onRestLine() {
withDensity(defaultDensity) {
- val text = "abcde"
- val fontSize = 20.sp
- val fontSizeInPx = fontSize.toPx().value
+ val text = createAnnotatedString("aaa", "\u05D0\u05D0\u05D0")
val indent = 20.sp
val indentInPx = indent.toPx().value
- val paragraphWidth = "abc".length * fontSizeInPx
+ val fontSize = 50.sp
+ val fontSizeInPx = fontSize.toPx().value
+
+ // Width is the space needed by 2 characters
+ val width = 2 * fontSizeInPx
val paragraph = simpleMultiParagraph(
text = text,
- textIndent = TextIndent(
- firstLine = 0.sp,
- restLine = indent
- ),
fontSize = fontSize,
- fontFamily = fontFamilyMeasureFont,
- constraints = ParagraphConstraints(width = paragraphWidth)
+ paragraphStyle = ParagraphStyle(
+ textIndent = TextIndent(restLine = indent)
+ ),
+ width = width
)
-
- // This position should point to the first character of the second line if indent is
- // applied. Otherwise this position will point to the second character of the second line.
- val position = PxPosition((indentInPx + 1).px, (fontSizeInPx / 2 + fontSizeInPx).px)
- // The offset corresponding to the position should be the 'd' in the second line.
- assertThat(paragraph.getOffsetForPosition(position)).isEqualTo("abcd".length - 1)
+ // The paragraph should be rendered as:
+ // aa
+ // a
+ // אא
+ // א
+ assertThat(paragraph.getHorizontalPosition(0, true)).isZero()
+ assertThat(paragraph.getHorizontalPosition(2, true)).isEqualTo(indentInPx)
+ assertThat(paragraph.getHorizontalPosition(3, true)).isEqualTo(width)
+ assertThat(paragraph.getHorizontalPosition(5, true)).isEqualTo(width - indentInPx)
}
}
@Test(expected = IllegalArgumentException::class)
- fun testConstructor_throwsException_ifTextDirectionAlgorithmIsNotSet() {
+ fun constructor_throwsException_ifTextDirectionAlgorithmIsNotSet() {
MultiParagraph(
- annotatedString = AnnotatedString(""),
+ annotatedString = createAnnotatedString(""),
textStyle = TextStyle(),
paragraphStyle = ParagraphStyle(),
constraints = ParagraphConstraints(Float.MAX_VALUE),
@@ -2390,7 +1172,7 @@
}
@Test
- fun test_whenAnnotatedString_haveParagraphStyle_withoutTextDirection() {
+ fun annotatedString_haveParagraphStyle_withoutTextDirection() {
val textDirectionAlgorithm = TextDirectionAlgorithm.ForceRtl
// Provide an LTR text
val text = AnnotatedString(
@@ -2429,42 +1211,87 @@
assertThat(paragraph.getParagraphDirection(1)).isEqualTo(TextDirection.Rtl)
}
+ /**
+ * Helper function which creates an AnnotatedString where each input string becomes a paragraph.
+ */
+ private fun createAnnotatedString(vararg paragraphs: String) =
+ createAnnotatedString(paragraphs.toList())
+
+ /**
+ * Helper function which creates an AnnotatedString where each input string becomes a paragraph.
+ */
+ private fun createAnnotatedString(paragraphs: List<String>): AnnotatedString {
+ return AnnotatedString {
+ for (paragraph in paragraphs) {
+ pushStyle(ParagraphStyle())
+ append(paragraph)
+ popStyle()
+ }
+ }
+ }
+
+ private fun simpleMultiParagraphIntrinsics(
+ text: AnnotatedString,
+ fontSize: Sp? = null
+ ): MultiParagraphIntrinsics {
+ return MultiParagraphIntrinsics(
+ text,
+ textStyle = TextStyle(
+ fontFamily = fontFamilyMeasureFont,
+ fontSize = fontSize
+ ),
+ paragraphStyle = ParagraphStyle(
+ textDirectionAlgorithm = TextDirectionAlgorithm.ContentOrLtr
+ ),
+ density = defaultDensity,
+ resourceLoader = TestFontResourceLoader(context)
+ )
+ }
+
private fun simpleMultiParagraph(
- text: String = "",
- textIndent: TextIndent? = null,
- textAlign: TextAlign? = null,
+ text: String,
fontSize: Sp? = null,
+ paragraphStyle: ParagraphStyle = ParagraphStyle(),
maxLines: Int? = null,
- lineHeight: Sp? = null,
- textStyles: List<AnnotatedString.Item<TextStyle>> = listOf(),
- paragraphStyles: List<AnnotatedString.Item<ParagraphStyle>> = listOf(),
- fontFamily: FontFamily = fontFamilyMeasureFont,
- localeList: LocaleList? = null,
- textStyle: TextStyle? = null,
- constraints: ParagraphConstraints = ParagraphConstraints(width = Float.MAX_VALUE),
- density: Density? = null,
- textDirectionAlgorithm: TextDirectionAlgorithm? = TextDirectionAlgorithm.ContentOrLtr
+ width: Float = Float.MAX_VALUE
): MultiParagraph {
return MultiParagraph(
- annotatedString = AnnotatedString(
- text = text,
- textStyles = textStyles,
- paragraphStyles = paragraphStyles
- ),
+ annotatedString = createAnnotatedString(text),
textStyle = TextStyle(
- fontFamily = fontFamily,
- fontSize = fontSize,
- localeList = localeList
- ).merge(textStyle),
- paragraphStyle = ParagraphStyle(
- textIndent = textIndent,
- textDirectionAlgorithm = textDirectionAlgorithm,
- textAlign = textAlign,
- lineHeight = lineHeight
+ fontFamily = fontFamilyMeasureFont,
+ fontSize = fontSize
),
+ paragraphStyle = paragraphStyle.textDirectionAlgorithm?.let { paragraphStyle }
+ ?: paragraphStyle.copy(
+ textDirectionAlgorithm = TextDirectionAlgorithm.ContentOrLtr
+ ),
maxLines = maxLines,
- constraints = constraints,
- density = density ?: defaultDensity,
+ constraints = ParagraphConstraints(width),
+ density = defaultDensity,
+ resourceLoader = TestFontResourceLoader(context)
+ )
+ }
+
+ private fun simpleMultiParagraph(
+ text: AnnotatedString,
+ fontSize: Sp? = null,
+ paragraphStyle: ParagraphStyle = ParagraphStyle(),
+ maxLines: Int? = null,
+ width: Float = Float.MAX_VALUE
+ ): MultiParagraph {
+ return MultiParagraph(
+ annotatedString = text,
+ textStyle = TextStyle(
+ fontFamily = fontFamilyMeasureFont,
+ fontSize = fontSize
+ ),
+ paragraphStyle = paragraphStyle.textDirectionAlgorithm?.let { paragraphStyle }
+ ?: paragraphStyle.copy(
+ textDirectionAlgorithm = TextDirectionAlgorithm.ContentOrLtr
+ ),
+ maxLines = maxLines,
+ constraints = ParagraphConstraints(width),
+ density = defaultDensity,
resourceLoader = TestFontResourceLoader(context)
)
}
diff --git a/ui/ui-text/src/main/java/androidx/ui/text/MultiParagraph.kt b/ui/ui-text/src/main/java/androidx/ui/text/MultiParagraph.kt
index 9f4ec25..dce606d 100644
--- a/ui/ui-text/src/main/java/androidx/ui/text/MultiParagraph.kt
+++ b/ui/ui-text/src/main/java/androidx/ui/text/MultiParagraph.kt
@@ -36,7 +36,7 @@
* @param maxLines the maximum number of lines that the text can have
* @param ellipsis whether to ellipsize text, applied only when [maxLines] is set
*/
-internal class MultiParagraph(
+class MultiParagraph(
val intrinsics: MultiParagraphIntrinsics,
val maxLines: Int? = null,
ellipsis: Boolean? = null,
@@ -424,7 +424,7 @@
val paragraphIndex = findParagraphByLineIndex(paragraphInfoList, lineIndex)
return with(paragraphInfoList[paragraphIndex]) {
- paragraph.getLineBottom(lineIndex.toLocalLineIndex())
+ paragraph.getLineBottom(lineIndex.toLocalLineIndex()).toGlobalYPosition()
}
}
@@ -479,7 +479,7 @@
* [0, text.length)
* @return The index of the target [ParagraphInfo] in [paragraphInfoList].
*/
-private fun findParagraphByIndex(paragraphInfoList: List<ParagraphInfo>, index: Int): Int {
+internal fun findParagraphByIndex(paragraphInfoList: List<ParagraphInfo>, index: Int): Int {
return paragraphInfoList.binarySearch { paragraphInfo ->
when {
paragraphInfo.startIndex > index -> 1
@@ -499,7 +499,7 @@
* of [0, [MultiParagraph.height]].
* @return The index of the target [ParagraphInfo] in [paragraphInfoList].
*/
-private fun findParagraphByY(paragraphInfoList: List<ParagraphInfo>, y: Px): Int {
+internal fun findParagraphByY(paragraphInfoList: List<ParagraphInfo>, y: Px): Int {
return paragraphInfoList.binarySearch { paragraphInfo ->
when {
paragraphInfo.top > y -> 1
@@ -519,7 +519,7 @@
* [0, [MultiParagraph.lineCount])
* @return The index of the target [ParagraphInfo] in [paragraphInfoList].
*/
-private fun findParagraphByLineIndex(paragraphInfoList: List<ParagraphInfo>, lineIndex: Int): Int {
+internal fun findParagraphByLineIndex(paragraphInfoList: List<ParagraphInfo>, lineIndex: Int): Int {
return paragraphInfoList.binarySearch { paragraphInfo ->
when {
paragraphInfo.startLineIndex > lineIndex -> 1
@@ -592,6 +592,14 @@
}
/**
+ * Convert a local y position relative to [paragraph] to the globla y postiion relative to the
+ * parent [MultiParagraph].
+ */
+ fun Float.toGlobalYPosition(): Float {
+ return this + top.value
+ }
+
+ /**
* Convert a [PxPosition] relative to the parent [MultiParagraph] to the local [PxPosition]
* relative to the [paragraph].
*/
diff --git a/ui/ui-text/src/main/java/androidx/ui/text/MultiParagraphIntrinsics.kt b/ui/ui-text/src/main/java/androidx/ui/text/MultiParagraphIntrinsics.kt
index 5de06a0..487adde 100644
--- a/ui/ui-text/src/main/java/androidx/ui/text/MultiParagraphIntrinsics.kt
+++ b/ui/ui-text/src/main/java/androidx/ui/text/MultiParagraphIntrinsics.kt
@@ -16,7 +16,6 @@
package androidx.ui.text
-import androidx.annotation.RestrictTo
import androidx.ui.core.Density
import androidx.ui.text.font.Font
import androidx.ui.text.style.TextDirectionAlgorithm
@@ -28,9 +27,7 @@
*
* @throws IllegalArgumentException if [ParagraphStyle.textDirectionAlgorithm] is not set
*
- * @hide
*/
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
class MultiParagraphIntrinsics(
val annotatedString: AnnotatedString,
textStyle: TextStyle,
diff --git a/ui/ui-text/src/main/java/androidx/ui/text/Paragraph.kt b/ui/ui-text/src/main/java/androidx/ui/text/Paragraph.kt
index 2ea30f2..40d7466 100644
--- a/ui/ui-text/src/main/java/androidx/ui/text/Paragraph.kt
+++ b/ui/ui-text/src/main/java/androidx/ui/text/Paragraph.kt
@@ -15,7 +15,6 @@
*/
package androidx.ui.text
-import androidx.annotation.RestrictTo
import androidx.ui.core.Density
import androidx.ui.core.PxPosition
import androidx.ui.engine.geometry.Rect
@@ -121,10 +120,7 @@
* Returns the line number on which the specified text offset appears.
* If you ask for a position before 0, you get 0; if you ask for a position
* beyond the end of the text, you get the last line.
- *
- * @hide
*/
- @RestrictTo(RestrictTo.Scope.LIBRARY)
fun getLineForOffset(offset: Int): Int
/**
@@ -187,10 +183,7 @@
/**
* Returns the bounding box as Rect of the character for given character offset. Rect
* includes the top, bottom, left and right of a character.
- *
- * @hide
*/
- @RestrictTo(RestrictTo.Scope.LIBRARY)
fun getBoundingBox(offset: Int): Rect
/**
diff --git a/ui/ui-text/src/test/java/androidx/ui/text/MultiParagraphTest.kt b/ui/ui-text/src/test/java/androidx/ui/text/MultiParagraphTest.kt
new file mode 100644
index 0000000..46da9dc
--- /dev/null
+++ b/ui/ui-text/src/test/java/androidx/ui/text/MultiParagraphTest.kt
@@ -0,0 +1,79 @@
+/*
+ * 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.ui.text
+
+import androidx.ui.core.px
+import com.google.common.truth.Truth.assertThat
+import com.nhaarman.mockitokotlin2.mock
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+@RunWith(JUnit4::class)
+class MultiParagraphTest {
+ @Test
+ fun findParagraphByIndex() {
+ val paragraphNumber = 5
+ val paragraphLength = 10
+ var start = 0
+ val paragraphInfoList = List(paragraphNumber) {
+ val end = start + paragraphLength
+ ParagraphInfo(mock(), start, end).also { start = end }
+ }
+
+ for (i in 0 until paragraphNumber * paragraphLength) {
+ assertThat(findParagraphByIndex(paragraphInfoList, i))
+ .isEqualTo(i / paragraphLength)
+ }
+ }
+
+ @Test
+ fun findParagraphByLineIndex() {
+ val paragraphNumber = 5
+ val paragraphLineCount = 10
+ var startLine = 0
+ val paragraphInfoList = List(paragraphNumber) {
+ val endLine = startLine + paragraphLineCount
+ // StartIndex and endIndex doesn't matter in this test
+ ParagraphInfo(mock(), 0, 0, startLine, endLine)
+ .also { startLine = endLine }
+ }
+
+ for (i in 0 until paragraphNumber * paragraphLineCount) {
+ assertThat(findParagraphByLineIndex(paragraphInfoList, i))
+ .isEqualTo(i / paragraphLineCount)
+ }
+ }
+
+ @Test
+ fun findParagraphByYPosition() {
+ val paragraphNumber = 5
+ val paragraphHeight = 10
+ var top = 0
+ val paragraphInfoList = List(paragraphNumber) {
+ val bottom = top + paragraphHeight
+ // StartIndex and endIndex doesn't matter in this test
+ ParagraphInfo(mock(), 0, 0, top = top.px, bottom = bottom.px)
+ .also { top = bottom }
+ }
+
+ for (i in 0 until paragraphNumber * paragraphHeight) {
+ assertThat(findParagraphByY(paragraphInfoList, i.px))
+ .isEqualTo(i / paragraphHeight)
+ }
+ }
+}
\ No newline at end of file
diff --git a/webkit/integration-tests/testapp/src/main/AndroidManifest.xml b/webkit/integration-tests/testapp/src/main/AndroidManifest.xml
index c5a2fbc..a31db81 100644
--- a/webkit/integration-tests/testapp/src/main/AndroidManifest.xml
+++ b/webkit/integration-tests/testapp/src/main/AndroidManifest.xml
@@ -99,5 +99,8 @@
<activity
android:name=".RendererTerminationActivity"
android:exported="true" />
+ <activity
+ android:name=".FullscreenActivity"
+ android:exported="true" />
</application>
</manifest>
diff --git a/webkit/integration-tests/testapp/src/main/java/com/example/androidx/webkit/FullscreenActivity.java b/webkit/integration-tests/testapp/src/main/java/com/example/androidx/webkit/FullscreenActivity.java
new file mode 100644
index 0000000..f7904eb
--- /dev/null
+++ b/webkit/integration-tests/testapp/src/main/java/com/example/androidx/webkit/FullscreenActivity.java
@@ -0,0 +1,123 @@
+/*
+ * 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 com.example.androidx.webkit;
+
+import android.annotation.SuppressLint;
+import android.os.Bundle;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.Window;
+import android.view.WindowManager;
+import android.webkit.WebChromeClient;
+import android.webkit.WebView;
+import android.webkit.WebViewClient;
+import android.widget.FrameLayout;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+/**
+ * An Activity to demonstrate how to properly display fullscreen web content with WebView.
+ */
+public class FullscreenActivity extends AppCompatActivity {
+
+ // Use YouTube as an example website, but any site with a video player should sufice to
+ // demonstrate fullscreen usage.
+ private static final String EXAMPLE_SITE_WITH_VIDEO_PLAYER = "https://m.youtube.com/";
+
+ private WebView mWebView;
+ private FullScreenWebChromeClient mWebChromeClient;
+
+ /**
+ * An example {@link WebChromeClient} implementation which supports showing web content in
+ * fullscreen.
+ */
+ private static class FullScreenWebChromeClient extends WebChromeClient {
+ private Window mWindow;
+
+ // Store the View passed from onShowCustomView in a member variable, because we need to
+ // access this again during onHideCustomView().
+ private View mFullScreenView;
+
+ // Optional: store the CustomViewCallback in a member variable in case the app needs to
+ // force WebView to exit fullscreen mode.
+ private CustomViewCallback mCustomViewCallback;
+
+ /* package */ FullScreenWebChromeClient(Window window) {
+ mWindow = window;
+ }
+
+ @Override
+ public void onShowCustomView(View view, CustomViewCallback callback) {
+ // At this point, the WebView is no longer drawing the content. We should cover it up
+ // with the new View.
+ mFullScreenView = view;
+ mWindow.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ mWindow.addContentView(mFullScreenView,
+ new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.MATCH_PARENT));
+ mCustomViewCallback = callback;
+ }
+
+ @Override
+ public void onHideCustomView() {
+ // At this point, mFullScreenView is no longer drawing content. Remove this from the
+ // layout to show the underlying WebView, and remove the reference to the View so it can
+ // be GC'ed.
+ mWindow.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ ((ViewGroup) mFullScreenView.getParent()).removeView(mFullScreenView);
+ mFullScreenView = null;
+ mCustomViewCallback = null;
+ }
+
+ /* package */ void exitFullScreen() {
+ if (mCustomViewCallback == null) return;
+ mCustomViewCallback.onCustomViewHidden();
+ }
+
+ /* package */ boolean inFullScreenMode() {
+ return mFullScreenView != null;
+ }
+ }
+
+ @SuppressLint("SetJavaScriptEnabled")
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_fullscreen);
+ setTitle(R.string.fullscreen_activity_title);
+ WebkitHelpers.appendWebViewVersionToTitle(this);
+ mWebView = findViewById(R.id.webview_supports_fullscreen);
+ mWebView.getSettings().setJavaScriptEnabled(true);
+
+ mWebView.setWebViewClient(new WebViewClient()); // Open links in this WebView.
+ mWebChromeClient = new FullScreenWebChromeClient(getWindow());
+ mWebView.setWebChromeClient(mWebChromeClient);
+
+ mWebView.loadUrl(EXAMPLE_SITE_WITH_VIDEO_PLAYER);
+ }
+
+ @Override
+ public void onBackPressed() {
+ if (mWebChromeClient.inFullScreenMode()) {
+ mWebChromeClient.exitFullScreen();
+ } else if (mWebView.canGoBack()) {
+ mWebView.goBack();
+ } else {
+ super.onBackPressed();
+ }
+ }
+}
diff --git a/webkit/integration-tests/testapp/src/main/java/com/example/androidx/webkit/MainActivity.java b/webkit/integration-tests/testapp/src/main/java/com/example/androidx/webkit/MainActivity.java
index 92efe0d..7c55bc6 100644
--- a/webkit/integration-tests/testapp/src/main/java/com/example/androidx/webkit/MainActivity.java
+++ b/webkit/integration-tests/testapp/src/main/java/com/example/androidx/webkit/MainActivity.java
@@ -63,6 +63,9 @@
new MenuListView.MenuItem(
getResources().getString(R.string.renderer_termination_activity_title),
new Intent(activityContext, RendererTerminationActivity.class)),
+ new MenuListView.MenuItem(
+ getResources().getString(R.string.fullscreen_activity_title),
+ new Intent(activityContext, FullscreenActivity.class)),
};
listView.setItems(menuItems);
}
diff --git a/webkit/integration-tests/testapp/src/main/res/layout/activity_fullscreen.xml b/webkit/integration-tests/testapp/src/main/res/layout/activity_fullscreen.xml
new file mode 100644
index 0000000..18706c4
--- /dev/null
+++ b/webkit/integration-tests/testapp/src/main/res/layout/activity_fullscreen.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright 2019 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<WebView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/webview_supports_fullscreen"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" />
\ No newline at end of file
diff --git a/webkit/integration-tests/testapp/src/main/res/values/strings.xml b/webkit/integration-tests/testapp/src/main/res/values/strings.xml
index 919bd99..7ac3fe6 100644
--- a/webkit/integration-tests/testapp/src/main/res/values/strings.xml
+++ b/webkit/integration-tests/testapp/src/main/res/values/strings.xml
@@ -69,4 +69,5 @@
<string name="renderer_termination_button_unblock_text">Unblock</string>
<string name="renderer_terminated_description">WebView renderer was terminated.</string>
<string name="renderer_unresponsive_description">WebView renderer has become unresponsive.</string>
+ <string name="fullscreen_activity_title">Fullscreen web contents Demo</string>
</resources>
diff --git a/webkit/src/androidTest/java/androidx/webkit/WebSettingsCompatForceDarkTest.java b/webkit/src/androidTest/java/androidx/webkit/WebSettingsCompatForceDarkTest.java
index 0feb365..ae4bcfb 100644
--- a/webkit/src/androidTest/java/androidx/webkit/WebSettingsCompatForceDarkTest.java
+++ b/webkit/src/androidTest/java/androidx/webkit/WebSettingsCompatForceDarkTest.java
@@ -26,7 +26,7 @@
import android.webkit.WebView;
import androidx.test.ext.junit.runners.AndroidJUnit4;
-import androidx.test.filters.SmallTest;
+import androidx.test.filters.MediumTest;
import androidx.test.rule.ActivityTestRule;
import org.junit.After;
@@ -39,6 +39,7 @@
import java.util.HashMap;
import java.util.Map;
+@MediumTest
@RunWith(AndroidJUnit4.class)
public class WebSettingsCompatForceDarkTest {
private final String mNoDarkThemeSupport = Base64.encodeToString((
@@ -89,7 +90,6 @@
* be reflected in that test as necessary. See http://go/modifying-webview-cts.
*/
@Test
- @SmallTest
public void testForceDark_default() throws Throwable {
WebkitUtils.checkFeature(WebViewFeature.FORCE_DARK);
@@ -104,7 +104,6 @@
* should be reflected in that test as necessary. See http://go/modifying-webview-cts.
*/
@Test
- @SmallTest
public void testForceDark_rendersDark() throws Throwable {
WebkitUtils.checkFeature(WebViewFeature.FORCE_DARK);
setWebViewSize(64, 64);
@@ -136,7 +135,6 @@
* i.e. web contents are always darkened by a user agent.
*/
@Test
- @SmallTest
public void testForceDark_userAgentDarkeningOnly() {
WebkitUtils.checkFeature(WebViewFeature.FORCE_DARK);
WebkitUtils.checkFeature(WebViewFeature.FORCE_DARK_STRATEGY);
@@ -162,7 +160,6 @@
*/
// TODO(amalova): Enable test when meta-tag is supported by WV
@Test
- @SmallTest
@Ignore
public void testForceDark_webThemeDarkeningOnly() {
WebkitUtils.checkFeature(WebViewFeature.FORCE_DARK);
@@ -191,7 +188,6 @@
*/
// TODO(amalova): Enable test when meta-tag is supported by WV
@Test
- @SmallTest
@Ignore
public void testForceDark_preferWebThemeOverUADarkening() {
WebkitUtils.checkFeature(WebViewFeature.FORCE_DARK);
diff --git a/work/integration-tests/testapp/build.gradle b/work/integration-tests/testapp/build.gradle
index 696c664..cb9fbee 100644
--- a/work/integration-tests/testapp/build.gradle
+++ b/work/integration-tests/testapp/build.gradle
@@ -59,8 +59,8 @@
annotationProcessor(project(":room:room-compiler"))
implementation(project(":room:room-runtime"))
} else {
- annotationProcessor("androidx.room:room-compiler:2.2.0")
- implementation("androidx.room:room-runtime:2.2.0")
+ annotationProcessor("androidx.room:room-compiler:2.2.1")
+ implementation("androidx.room:room-runtime:2.2.1")
}
implementation(CONSTRAINT_LAYOUT, { transitive = true })
diff --git a/work/workmanager-gcm/api/2.3.0-alpha04.txt b/work/workmanager-gcm/api/2.3.0-alpha04.txt
new file mode 100644
index 0000000..da4f6cc
--- /dev/null
+++ b/work/workmanager-gcm/api/2.3.0-alpha04.txt
@@ -0,0 +1 @@
+// Signature format: 3.0
diff --git a/work/workmanager-gcm/api/public_plus_experimental_2.3.0-alpha04.txt b/work/workmanager-gcm/api/public_plus_experimental_2.3.0-alpha04.txt
new file mode 100644
index 0000000..da4f6cc
--- /dev/null
+++ b/work/workmanager-gcm/api/public_plus_experimental_2.3.0-alpha04.txt
@@ -0,0 +1 @@
+// Signature format: 3.0
diff --git a/work/workmanager-gcm/api/res-2.3.0-alpha04.txt b/work/workmanager-gcm/api/res-2.3.0-alpha04.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/work/workmanager-gcm/api/res-2.3.0-alpha04.txt
diff --git a/work/workmanager-gcm/api/restricted_2.3.0-alpha04.txt b/work/workmanager-gcm/api/restricted_2.3.0-alpha04.txt
new file mode 100644
index 0000000..da4f6cc
--- /dev/null
+++ b/work/workmanager-gcm/api/restricted_2.3.0-alpha04.txt
@@ -0,0 +1 @@
+// Signature format: 3.0
diff --git a/work/workmanager-ktx/api/2.3.0-alpha04.txt b/work/workmanager-ktx/api/2.3.0-alpha04.txt
new file mode 100644
index 0000000..5873b39
--- /dev/null
+++ b/work/workmanager-ktx/api/2.3.0-alpha04.txt
@@ -0,0 +1,45 @@
+// Signature format: 3.0
+package androidx.work {
+
+ public abstract class CoroutineWorker extends androidx.work.ListenableWorker {
+ ctor public CoroutineWorker(android.content.Context appContext, androidx.work.WorkerParameters params);
+ method public abstract suspend Object doWork(kotlin.coroutines.Continuation<? super androidx.work.ListenableWorker.Result> p);
+ method @Deprecated public kotlinx.coroutines.CoroutineDispatcher getCoroutineContext();
+ method public final void onStopped();
+ method public final suspend Object! setForeground(androidx.work.ForegroundInfo foregroundInfo, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
+ method public final suspend Object! setProgress(androidx.work.Data data, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
+ method public final com.google.common.util.concurrent.ListenableFuture<androidx.work.ListenableWorker.Result> startWork();
+ property @Deprecated public kotlinx.coroutines.CoroutineDispatcher coroutineContext;
+ }
+
+ public final class DataKt {
+ ctor public DataKt();
+ method public static inline <reified T> boolean hasKeyWithValueOfType(androidx.work.Data, String key);
+ method public static inline androidx.work.Data workDataOf(kotlin.Pair<java.lang.String,?>... pairs);
+ }
+
+ public final class ListenableFutureKt {
+ ctor public ListenableFutureKt();
+ }
+
+ public final class OneTimeWorkRequestKt {
+ ctor public OneTimeWorkRequestKt();
+ method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.OneTimeWorkRequest.Builder OneTimeWorkRequestBuilder();
+ method public static inline androidx.work.OneTimeWorkRequest.Builder setInputMerger(androidx.work.OneTimeWorkRequest.Builder, kotlin.reflect.KClass<? extends androidx.work.InputMerger> inputMerger);
+ }
+
+ public final class OperationKt {
+ ctor public OperationKt();
+ method public static suspend inline Object! await(androidx.work.Operation, kotlin.coroutines.Continuation<? super androidx.work.Operation.State.SUCCESS> p);
+ }
+
+ public final class PeriodicWorkRequestKt {
+ ctor public PeriodicWorkRequestKt();
+ method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.PeriodicWorkRequest.Builder PeriodicWorkRequestBuilder(long repeatInterval, java.util.concurrent.TimeUnit repeatIntervalTimeUnit);
+ method @RequiresApi(26) public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.PeriodicWorkRequest.Builder PeriodicWorkRequestBuilder(java.time.Duration repeatInterval);
+ method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.PeriodicWorkRequest.Builder PeriodicWorkRequestBuilder(long repeatInterval, java.util.concurrent.TimeUnit repeatIntervalTimeUnit, long flexTimeInterval, java.util.concurrent.TimeUnit flexTimeIntervalUnit);
+ method @RequiresApi(26) public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.PeriodicWorkRequest.Builder PeriodicWorkRequestBuilder(java.time.Duration repeatInterval, java.time.Duration flexTimeInterval);
+ }
+
+}
+
diff --git a/work/workmanager-ktx/api/public_plus_experimental_2.3.0-alpha04.txt b/work/workmanager-ktx/api/public_plus_experimental_2.3.0-alpha04.txt
new file mode 100644
index 0000000..5873b39
--- /dev/null
+++ b/work/workmanager-ktx/api/public_plus_experimental_2.3.0-alpha04.txt
@@ -0,0 +1,45 @@
+// Signature format: 3.0
+package androidx.work {
+
+ public abstract class CoroutineWorker extends androidx.work.ListenableWorker {
+ ctor public CoroutineWorker(android.content.Context appContext, androidx.work.WorkerParameters params);
+ method public abstract suspend Object doWork(kotlin.coroutines.Continuation<? super androidx.work.ListenableWorker.Result> p);
+ method @Deprecated public kotlinx.coroutines.CoroutineDispatcher getCoroutineContext();
+ method public final void onStopped();
+ method public final suspend Object! setForeground(androidx.work.ForegroundInfo foregroundInfo, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
+ method public final suspend Object! setProgress(androidx.work.Data data, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
+ method public final com.google.common.util.concurrent.ListenableFuture<androidx.work.ListenableWorker.Result> startWork();
+ property @Deprecated public kotlinx.coroutines.CoroutineDispatcher coroutineContext;
+ }
+
+ public final class DataKt {
+ ctor public DataKt();
+ method public static inline <reified T> boolean hasKeyWithValueOfType(androidx.work.Data, String key);
+ method public static inline androidx.work.Data workDataOf(kotlin.Pair<java.lang.String,?>... pairs);
+ }
+
+ public final class ListenableFutureKt {
+ ctor public ListenableFutureKt();
+ }
+
+ public final class OneTimeWorkRequestKt {
+ ctor public OneTimeWorkRequestKt();
+ method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.OneTimeWorkRequest.Builder OneTimeWorkRequestBuilder();
+ method public static inline androidx.work.OneTimeWorkRequest.Builder setInputMerger(androidx.work.OneTimeWorkRequest.Builder, kotlin.reflect.KClass<? extends androidx.work.InputMerger> inputMerger);
+ }
+
+ public final class OperationKt {
+ ctor public OperationKt();
+ method public static suspend inline Object! await(androidx.work.Operation, kotlin.coroutines.Continuation<? super androidx.work.Operation.State.SUCCESS> p);
+ }
+
+ public final class PeriodicWorkRequestKt {
+ ctor public PeriodicWorkRequestKt();
+ method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.PeriodicWorkRequest.Builder PeriodicWorkRequestBuilder(long repeatInterval, java.util.concurrent.TimeUnit repeatIntervalTimeUnit);
+ method @RequiresApi(26) public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.PeriodicWorkRequest.Builder PeriodicWorkRequestBuilder(java.time.Duration repeatInterval);
+ method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.PeriodicWorkRequest.Builder PeriodicWorkRequestBuilder(long repeatInterval, java.util.concurrent.TimeUnit repeatIntervalTimeUnit, long flexTimeInterval, java.util.concurrent.TimeUnit flexTimeIntervalUnit);
+ method @RequiresApi(26) public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.PeriodicWorkRequest.Builder PeriodicWorkRequestBuilder(java.time.Duration repeatInterval, java.time.Duration flexTimeInterval);
+ }
+
+}
+
diff --git a/work/workmanager-ktx/api/res-2.3.0-alpha04.txt b/work/workmanager-ktx/api/res-2.3.0-alpha04.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/work/workmanager-ktx/api/res-2.3.0-alpha04.txt
diff --git a/work/workmanager-ktx/api/restricted_2.3.0-alpha04.txt b/work/workmanager-ktx/api/restricted_2.3.0-alpha04.txt
new file mode 100644
index 0000000..075851a
--- /dev/null
+++ b/work/workmanager-ktx/api/restricted_2.3.0-alpha04.txt
@@ -0,0 +1,51 @@
+// Signature format: 3.0
+package androidx.work {
+
+ public abstract class CoroutineWorker extends androidx.work.ListenableWorker {
+ ctor public CoroutineWorker(android.content.Context appContext, androidx.work.WorkerParameters params);
+ method public abstract suspend Object doWork(kotlin.coroutines.Continuation<? super androidx.work.ListenableWorker.Result> p);
+ method @Deprecated public kotlinx.coroutines.CoroutineDispatcher getCoroutineContext();
+ method public final void onStopped();
+ method public final suspend Object! setForeground(androidx.work.ForegroundInfo foregroundInfo, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
+ method public final suspend Object! setProgress(androidx.work.Data data, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
+ method public final com.google.common.util.concurrent.ListenableFuture<androidx.work.ListenableWorker.Result> startWork();
+ property @Deprecated public kotlinx.coroutines.CoroutineDispatcher coroutineContext;
+ }
+
+ public final class DataKt {
+ ctor public DataKt();
+ method public static inline <reified T> boolean hasKeyWithValueOfType(androidx.work.Data, String key);
+ method public static inline androidx.work.Data workDataOf(kotlin.Pair<java.lang.String,?>... pairs);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public enum DirectExecutor implements java.util.concurrent.Executor {
+ method public void execute(Runnable command);
+ enum_constant public static final androidx.work.DirectExecutor INSTANCE;
+ }
+
+ public final class ListenableFutureKt {
+ ctor public ListenableFutureKt();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static suspend inline <R> Object! await(com.google.common.util.concurrent.ListenableFuture<R>, kotlin.coroutines.Continuation<? super R> p);
+ }
+
+ public final class OneTimeWorkRequestKt {
+ ctor public OneTimeWorkRequestKt();
+ method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.OneTimeWorkRequest.Builder OneTimeWorkRequestBuilder();
+ method public static inline androidx.work.OneTimeWorkRequest.Builder setInputMerger(androidx.work.OneTimeWorkRequest.Builder, kotlin.reflect.KClass<? extends androidx.work.InputMerger> inputMerger);
+ }
+
+ public final class OperationKt {
+ ctor public OperationKt();
+ method public static suspend inline Object! await(androidx.work.Operation, kotlin.coroutines.Continuation<? super androidx.work.Operation.State.SUCCESS> p);
+ }
+
+ public final class PeriodicWorkRequestKt {
+ ctor public PeriodicWorkRequestKt();
+ method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.PeriodicWorkRequest.Builder PeriodicWorkRequestBuilder(long repeatInterval, java.util.concurrent.TimeUnit repeatIntervalTimeUnit);
+ method @RequiresApi(26) public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.PeriodicWorkRequest.Builder PeriodicWorkRequestBuilder(java.time.Duration repeatInterval);
+ method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.PeriodicWorkRequest.Builder PeriodicWorkRequestBuilder(long repeatInterval, java.util.concurrent.TimeUnit repeatIntervalTimeUnit, long flexTimeInterval, java.util.concurrent.TimeUnit flexTimeIntervalUnit);
+ method @RequiresApi(26) public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.PeriodicWorkRequest.Builder PeriodicWorkRequestBuilder(java.time.Duration repeatInterval, java.time.Duration flexTimeInterval);
+ }
+
+}
+
diff --git a/work/workmanager-ktx/build.gradle b/work/workmanager-ktx/build.gradle
index 17a3ab3..2a279bb 100644
--- a/work/workmanager-ktx/build.gradle
+++ b/work/workmanager-ktx/build.gradle
@@ -53,7 +53,7 @@
androidTestImplementation(ESPRESSO_CORE)
androidTestImplementation(MOCKITO_CORE, libs.exclude_bytebuddy) // DexMaker has its own MockMaker
androidTestImplementation(DEXMAKER_MOCKITO, libs.exclude_bytebuddy) // DexMaker has its own MockMaker
- androidTestImplementation("androidx.room:room-testing:2.2.0")
+ androidTestImplementation("androidx.room:room-testing:2.2.1")
testImplementation(JUNIT)
}
diff --git a/work/workmanager-rxjava2/api/2.3.0-alpha04.txt b/work/workmanager-rxjava2/api/2.3.0-alpha04.txt
new file mode 100644
index 0000000..757ca4c
--- /dev/null
+++ b/work/workmanager-rxjava2/api/2.3.0-alpha04.txt
@@ -0,0 +1,13 @@
+// Signature format: 3.0
+package androidx.work {
+
+ public abstract class RxWorker extends androidx.work.ListenableWorker {
+ ctor public RxWorker(android.content.Context, androidx.work.WorkerParameters);
+ method @MainThread public abstract io.reactivex.Single<androidx.work.ListenableWorker.Result!> createWork();
+ method protected io.reactivex.Scheduler getBackgroundScheduler();
+ method public final io.reactivex.Single<java.lang.Void!> setProgress(androidx.work.Data);
+ method public com.google.common.util.concurrent.ListenableFuture<androidx.work.ListenableWorker.Result!> startWork();
+ }
+
+}
+
diff --git a/work/workmanager-rxjava2/api/public_plus_experimental_2.3.0-alpha04.txt b/work/workmanager-rxjava2/api/public_plus_experimental_2.3.0-alpha04.txt
new file mode 100644
index 0000000..757ca4c
--- /dev/null
+++ b/work/workmanager-rxjava2/api/public_plus_experimental_2.3.0-alpha04.txt
@@ -0,0 +1,13 @@
+// Signature format: 3.0
+package androidx.work {
+
+ public abstract class RxWorker extends androidx.work.ListenableWorker {
+ ctor public RxWorker(android.content.Context, androidx.work.WorkerParameters);
+ method @MainThread public abstract io.reactivex.Single<androidx.work.ListenableWorker.Result!> createWork();
+ method protected io.reactivex.Scheduler getBackgroundScheduler();
+ method public final io.reactivex.Single<java.lang.Void!> setProgress(androidx.work.Data);
+ method public com.google.common.util.concurrent.ListenableFuture<androidx.work.ListenableWorker.Result!> startWork();
+ }
+
+}
+
diff --git a/work/workmanager-rxjava2/api/res-2.3.0-alpha04.txt b/work/workmanager-rxjava2/api/res-2.3.0-alpha04.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/work/workmanager-rxjava2/api/res-2.3.0-alpha04.txt
diff --git a/work/workmanager-rxjava2/api/restricted_2.3.0-alpha04.txt b/work/workmanager-rxjava2/api/restricted_2.3.0-alpha04.txt
new file mode 100644
index 0000000..757ca4c
--- /dev/null
+++ b/work/workmanager-rxjava2/api/restricted_2.3.0-alpha04.txt
@@ -0,0 +1,13 @@
+// Signature format: 3.0
+package androidx.work {
+
+ public abstract class RxWorker extends androidx.work.ListenableWorker {
+ ctor public RxWorker(android.content.Context, androidx.work.WorkerParameters);
+ method @MainThread public abstract io.reactivex.Single<androidx.work.ListenableWorker.Result!> createWork();
+ method protected io.reactivex.Scheduler getBackgroundScheduler();
+ method public final io.reactivex.Single<java.lang.Void!> setProgress(androidx.work.Data);
+ method public com.google.common.util.concurrent.ListenableFuture<androidx.work.ListenableWorker.Result!> startWork();
+ }
+
+}
+
diff --git a/work/workmanager-testing/api/2.3.0-alpha04.txt b/work/workmanager-testing/api/2.3.0-alpha04.txt
new file mode 100644
index 0000000..2f8dc82
--- /dev/null
+++ b/work/workmanager-testing/api/2.3.0-alpha04.txt
@@ -0,0 +1,54 @@
+// Signature format: 3.0
+package androidx.work.testing {
+
+ public class SynchronousExecutor implements java.util.concurrent.Executor {
+ ctor public SynchronousExecutor();
+ method public void execute(Runnable);
+ }
+
+ public interface TestDriver {
+ method public void setAllConstraintsMet(java.util.UUID);
+ method public void setInitialDelayMet(java.util.UUID);
+ method public void setPeriodDelayMet(java.util.UUID);
+ }
+
+ public class TestListenableWorkerBuilder<W extends androidx.work.ListenableWorker> {
+ method public W build();
+ method public static androidx.work.testing.TestListenableWorkerBuilder from(android.content.Context, androidx.work.WorkRequest);
+ method public static <W extends androidx.work.ListenableWorker> androidx.work.testing.TestListenableWorkerBuilder<W!> from(android.content.Context, Class<W!>);
+ method public androidx.work.testing.TestListenableWorkerBuilder setForegroundUpdater(androidx.work.ForegroundUpdater);
+ method public androidx.work.testing.TestListenableWorkerBuilder setId(java.util.UUID);
+ method public androidx.work.testing.TestListenableWorkerBuilder setInputData(androidx.work.Data);
+ method @RequiresApi(28) public androidx.work.testing.TestListenableWorkerBuilder setNetwork(android.net.Network);
+ method public androidx.work.testing.TestListenableWorkerBuilder setProgressUpdater(androidx.work.ProgressUpdater);
+ method public androidx.work.testing.TestListenableWorkerBuilder setRunAttemptCount(int);
+ method public androidx.work.testing.TestListenableWorkerBuilder setTags(java.util.List<java.lang.String!>);
+ method @RequiresApi(24) public androidx.work.testing.TestListenableWorkerBuilder setTriggeredContentAuthorities(java.util.List<java.lang.String!>);
+ method @RequiresApi(24) public androidx.work.testing.TestListenableWorkerBuilder setTriggeredContentUris(java.util.List<android.net.Uri!>);
+ method public androidx.work.testing.TestListenableWorkerBuilder setWorkerFactory(androidx.work.WorkerFactory);
+ }
+
+ public final class TestListenableWorkerBuilderKt {
+ ctor public TestListenableWorkerBuilderKt();
+ method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.testing.TestListenableWorkerBuilder<W> TestListenableWorkerBuilder(android.content.Context context, androidx.work.Data inputData = androidx.work.Data.EMPTY, java.util.List<java.lang.String> tags = emptyList(), int runAttemptCount = 1, java.util.List<? extends android.net.Uri> triggeredContentUris = emptyList(), java.util.List<java.lang.String> triggeredContentAuthorities = emptyList());
+ }
+
+ public class TestWorkerBuilder<W extends androidx.work.Worker> extends androidx.work.testing.TestListenableWorkerBuilder<W> {
+ method public static androidx.work.testing.TestWorkerBuilder<? extends androidx.work.Worker> from(android.content.Context, androidx.work.WorkRequest, java.util.concurrent.Executor);
+ method public static <W extends androidx.work.Worker> androidx.work.testing.TestWorkerBuilder<W!> from(android.content.Context, Class<W!>, java.util.concurrent.Executor);
+ }
+
+ public final class TestWorkerBuilderKt {
+ ctor public TestWorkerBuilderKt();
+ method public static inline <reified W extends androidx.work.Worker> androidx.work.testing.TestWorkerBuilder<W> TestWorkerBuilder(android.content.Context context, java.util.concurrent.Executor executor, androidx.work.Data inputData = androidx.work.Data.EMPTY, java.util.List<java.lang.String> tags = emptyList(), int runAttemptCount = 1, java.util.List<? extends android.net.Uri> triggeredContentUris = emptyList(), java.util.List<java.lang.String> triggeredContentAuthorities = emptyList());
+ }
+
+ public final class WorkManagerTestInitHelper {
+ method @Deprecated public static androidx.work.testing.TestDriver? getTestDriver();
+ method public static androidx.work.testing.TestDriver? getTestDriver(android.content.Context);
+ method public static void initializeTestWorkManager(android.content.Context);
+ method public static void initializeTestWorkManager(android.content.Context, androidx.work.Configuration);
+ }
+
+}
+
diff --git a/work/workmanager-testing/api/public_plus_experimental_2.3.0-alpha04.txt b/work/workmanager-testing/api/public_plus_experimental_2.3.0-alpha04.txt
new file mode 100644
index 0000000..2f8dc82
--- /dev/null
+++ b/work/workmanager-testing/api/public_plus_experimental_2.3.0-alpha04.txt
@@ -0,0 +1,54 @@
+// Signature format: 3.0
+package androidx.work.testing {
+
+ public class SynchronousExecutor implements java.util.concurrent.Executor {
+ ctor public SynchronousExecutor();
+ method public void execute(Runnable);
+ }
+
+ public interface TestDriver {
+ method public void setAllConstraintsMet(java.util.UUID);
+ method public void setInitialDelayMet(java.util.UUID);
+ method public void setPeriodDelayMet(java.util.UUID);
+ }
+
+ public class TestListenableWorkerBuilder<W extends androidx.work.ListenableWorker> {
+ method public W build();
+ method public static androidx.work.testing.TestListenableWorkerBuilder from(android.content.Context, androidx.work.WorkRequest);
+ method public static <W extends androidx.work.ListenableWorker> androidx.work.testing.TestListenableWorkerBuilder<W!> from(android.content.Context, Class<W!>);
+ method public androidx.work.testing.TestListenableWorkerBuilder setForegroundUpdater(androidx.work.ForegroundUpdater);
+ method public androidx.work.testing.TestListenableWorkerBuilder setId(java.util.UUID);
+ method public androidx.work.testing.TestListenableWorkerBuilder setInputData(androidx.work.Data);
+ method @RequiresApi(28) public androidx.work.testing.TestListenableWorkerBuilder setNetwork(android.net.Network);
+ method public androidx.work.testing.TestListenableWorkerBuilder setProgressUpdater(androidx.work.ProgressUpdater);
+ method public androidx.work.testing.TestListenableWorkerBuilder setRunAttemptCount(int);
+ method public androidx.work.testing.TestListenableWorkerBuilder setTags(java.util.List<java.lang.String!>);
+ method @RequiresApi(24) public androidx.work.testing.TestListenableWorkerBuilder setTriggeredContentAuthorities(java.util.List<java.lang.String!>);
+ method @RequiresApi(24) public androidx.work.testing.TestListenableWorkerBuilder setTriggeredContentUris(java.util.List<android.net.Uri!>);
+ method public androidx.work.testing.TestListenableWorkerBuilder setWorkerFactory(androidx.work.WorkerFactory);
+ }
+
+ public final class TestListenableWorkerBuilderKt {
+ ctor public TestListenableWorkerBuilderKt();
+ method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.testing.TestListenableWorkerBuilder<W> TestListenableWorkerBuilder(android.content.Context context, androidx.work.Data inputData = androidx.work.Data.EMPTY, java.util.List<java.lang.String> tags = emptyList(), int runAttemptCount = 1, java.util.List<? extends android.net.Uri> triggeredContentUris = emptyList(), java.util.List<java.lang.String> triggeredContentAuthorities = emptyList());
+ }
+
+ public class TestWorkerBuilder<W extends androidx.work.Worker> extends androidx.work.testing.TestListenableWorkerBuilder<W> {
+ method public static androidx.work.testing.TestWorkerBuilder<? extends androidx.work.Worker> from(android.content.Context, androidx.work.WorkRequest, java.util.concurrent.Executor);
+ method public static <W extends androidx.work.Worker> androidx.work.testing.TestWorkerBuilder<W!> from(android.content.Context, Class<W!>, java.util.concurrent.Executor);
+ }
+
+ public final class TestWorkerBuilderKt {
+ ctor public TestWorkerBuilderKt();
+ method public static inline <reified W extends androidx.work.Worker> androidx.work.testing.TestWorkerBuilder<W> TestWorkerBuilder(android.content.Context context, java.util.concurrent.Executor executor, androidx.work.Data inputData = androidx.work.Data.EMPTY, java.util.List<java.lang.String> tags = emptyList(), int runAttemptCount = 1, java.util.List<? extends android.net.Uri> triggeredContentUris = emptyList(), java.util.List<java.lang.String> triggeredContentAuthorities = emptyList());
+ }
+
+ public final class WorkManagerTestInitHelper {
+ method @Deprecated public static androidx.work.testing.TestDriver? getTestDriver();
+ method public static androidx.work.testing.TestDriver? getTestDriver(android.content.Context);
+ method public static void initializeTestWorkManager(android.content.Context);
+ method public static void initializeTestWorkManager(android.content.Context, androidx.work.Configuration);
+ }
+
+}
+
diff --git a/work/workmanager-testing/api/res-2.3.0-alpha04.txt b/work/workmanager-testing/api/res-2.3.0-alpha04.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/work/workmanager-testing/api/res-2.3.0-alpha04.txt
diff --git a/work/workmanager-testing/api/restricted_2.3.0-alpha04.txt b/work/workmanager-testing/api/restricted_2.3.0-alpha04.txt
new file mode 100644
index 0000000..c866b6a
--- /dev/null
+++ b/work/workmanager-testing/api/restricted_2.3.0-alpha04.txt
@@ -0,0 +1,64 @@
+// Signature format: 3.0
+package androidx.work.testing {
+
+ public class SynchronousExecutor implements java.util.concurrent.Executor {
+ ctor public SynchronousExecutor();
+ method public void execute(Runnable);
+ }
+
+ public interface TestDriver {
+ method public void setAllConstraintsMet(java.util.UUID);
+ method public void setInitialDelayMet(java.util.UUID);
+ method public void setPeriodDelayMet(java.util.UUID);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public class TestForegroundUpdater implements androidx.work.ForegroundUpdater {
+ ctor public TestForegroundUpdater();
+ method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setForegroundAsync(android.content.Context, java.util.UUID, androidx.work.ForegroundInfo);
+ }
+
+ public class TestListenableWorkerBuilder<W extends androidx.work.ListenableWorker> {
+ method public W build();
+ method public static androidx.work.testing.TestListenableWorkerBuilder from(android.content.Context, androidx.work.WorkRequest);
+ method public static <W extends androidx.work.ListenableWorker> androidx.work.testing.TestListenableWorkerBuilder<W!> from(android.content.Context, Class<W!>);
+ method public androidx.work.testing.TestListenableWorkerBuilder setForegroundUpdater(androidx.work.ForegroundUpdater);
+ method public androidx.work.testing.TestListenableWorkerBuilder setId(java.util.UUID);
+ method public androidx.work.testing.TestListenableWorkerBuilder setInputData(androidx.work.Data);
+ method @RequiresApi(28) public androidx.work.testing.TestListenableWorkerBuilder setNetwork(android.net.Network);
+ method public androidx.work.testing.TestListenableWorkerBuilder setProgressUpdater(androidx.work.ProgressUpdater);
+ method public androidx.work.testing.TestListenableWorkerBuilder setRunAttemptCount(int);
+ method public androidx.work.testing.TestListenableWorkerBuilder setTags(java.util.List<java.lang.String!>);
+ method @RequiresApi(24) public androidx.work.testing.TestListenableWorkerBuilder setTriggeredContentAuthorities(java.util.List<java.lang.String!>);
+ method @RequiresApi(24) public androidx.work.testing.TestListenableWorkerBuilder setTriggeredContentUris(java.util.List<android.net.Uri!>);
+ method public androidx.work.testing.TestListenableWorkerBuilder setWorkerFactory(androidx.work.WorkerFactory);
+ }
+
+ public final class TestListenableWorkerBuilderKt {
+ ctor public TestListenableWorkerBuilderKt();
+ method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.testing.TestListenableWorkerBuilder<W> TestListenableWorkerBuilder(android.content.Context context, androidx.work.Data inputData = androidx.work.Data.EMPTY, java.util.List<java.lang.String> tags = emptyList(), int runAttemptCount = 1, java.util.List<? extends android.net.Uri> triggeredContentUris = emptyList(), java.util.List<java.lang.String> triggeredContentAuthorities = emptyList());
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public class TestProgressUpdater implements androidx.work.ProgressUpdater {
+ ctor public TestProgressUpdater();
+ method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> updateProgress(android.content.Context, java.util.UUID, androidx.work.Data);
+ }
+
+ public class TestWorkerBuilder<W extends androidx.work.Worker> extends androidx.work.testing.TestListenableWorkerBuilder<W> {
+ method public static androidx.work.testing.TestWorkerBuilder<? extends androidx.work.Worker> from(android.content.Context, androidx.work.WorkRequest, java.util.concurrent.Executor);
+ method public static <W extends androidx.work.Worker> androidx.work.testing.TestWorkerBuilder<W!> from(android.content.Context, Class<W!>, java.util.concurrent.Executor);
+ }
+
+ public final class TestWorkerBuilderKt {
+ ctor public TestWorkerBuilderKt();
+ method public static inline <reified W extends androidx.work.Worker> androidx.work.testing.TestWorkerBuilder<W> TestWorkerBuilder(android.content.Context context, java.util.concurrent.Executor executor, androidx.work.Data inputData = androidx.work.Data.EMPTY, java.util.List<java.lang.String> tags = emptyList(), int runAttemptCount = 1, java.util.List<? extends android.net.Uri> triggeredContentUris = emptyList(), java.util.List<java.lang.String> triggeredContentAuthorities = emptyList());
+ }
+
+ public final class WorkManagerTestInitHelper {
+ method @Deprecated public static androidx.work.testing.TestDriver? getTestDriver();
+ method public static androidx.work.testing.TestDriver? getTestDriver(android.content.Context);
+ method public static void initializeTestWorkManager(android.content.Context);
+ method public static void initializeTestWorkManager(android.content.Context, androidx.work.Configuration);
+ }
+
+}
+
diff --git a/work/workmanager-testing/build.gradle b/work/workmanager-testing/build.gradle
index 1241a81..281b68b 100644
--- a/work/workmanager-testing/build.gradle
+++ b/work/workmanager-testing/build.gradle
@@ -38,7 +38,7 @@
dependencies {
implementation(project(':work:work-runtime-ktx'))
implementation("androidx.lifecycle:lifecycle-livedata-core:2.1.0")
- implementation("androidx.room:room-runtime:2.2.0")
+ implementation("androidx.room:room-runtime:2.2.1")
androidTestImplementation("androidx.arch.core:core-testing:2.1.0")
androidTestImplementation(ANDROIDX_TEST_EXT_JUNIT)
diff --git a/work/workmanager/api/2.3.0-alpha04.ignore b/work/workmanager/api/2.3.0-alpha04.ignore
new file mode 100644
index 0000000..59678f1
--- /dev/null
+++ b/work/workmanager/api/2.3.0-alpha04.ignore
@@ -0,0 +1,3 @@
+// Baseline format: 1.0
+AddedAbstractMethod: androidx.work.WorkManager#createCancelPendingIntent(java.util.UUID):
+ Added method androidx.work.WorkManager.createCancelPendingIntent(java.util.UUID)
diff --git a/work/workmanager/api/2.3.0-alpha04.txt b/work/workmanager/api/2.3.0-alpha04.txt
new file mode 100644
index 0000000..46dc320
--- /dev/null
+++ b/work/workmanager/api/2.3.0-alpha04.txt
@@ -0,0 +1,331 @@
+// Signature format: 3.0
+package androidx.work {
+
+ public final class ArrayCreatingInputMerger extends androidx.work.InputMerger {
+ ctor public ArrayCreatingInputMerger();
+ method public androidx.work.Data merge(java.util.List<androidx.work.Data!>);
+ }
+
+ public enum BackoffPolicy {
+ enum_constant public static final androidx.work.BackoffPolicy EXPONENTIAL;
+ enum_constant public static final androidx.work.BackoffPolicy LINEAR;
+ }
+
+ public final class Configuration {
+ method public java.util.concurrent.Executor getExecutor();
+ method public androidx.work.InputMergerFactory getInputMergerFactory();
+ method public int getMaxJobSchedulerId();
+ method public int getMinJobSchedulerId();
+ method public java.util.concurrent.Executor getTaskExecutor();
+ method public androidx.work.WorkerFactory getWorkerFactory();
+ field public static final int MIN_SCHEDULER_LIMIT = 20; // 0x14
+ }
+
+ public static final class Configuration.Builder {
+ ctor public Configuration.Builder();
+ method public androidx.work.Configuration build();
+ method public androidx.work.Configuration.Builder setExecutor(java.util.concurrent.Executor);
+ method public androidx.work.Configuration.Builder setInputMergerFactory(androidx.work.InputMergerFactory);
+ method public androidx.work.Configuration.Builder setJobSchedulerJobIdRange(int, int);
+ method public androidx.work.Configuration.Builder setMaxSchedulerLimit(int);
+ method public androidx.work.Configuration.Builder setMinimumLoggingLevel(int);
+ method public androidx.work.Configuration.Builder setTaskExecutor(java.util.concurrent.Executor);
+ method public androidx.work.Configuration.Builder setWorkerFactory(androidx.work.WorkerFactory);
+ }
+
+ public static interface Configuration.Provider {
+ method public androidx.work.Configuration getWorkManagerConfiguration();
+ }
+
+ public final class Constraints {
+ ctor public Constraints(androidx.work.Constraints);
+ method public androidx.work.NetworkType getRequiredNetworkType();
+ method public boolean requiresBatteryNotLow();
+ method public boolean requiresCharging();
+ method @RequiresApi(23) public boolean requiresDeviceIdle();
+ method public boolean requiresStorageNotLow();
+ field public static final androidx.work.Constraints! NONE;
+ }
+
+ public static final class Constraints.Builder {
+ ctor public Constraints.Builder();
+ method @RequiresApi(24) public androidx.work.Constraints.Builder addContentUriTrigger(android.net.Uri, boolean);
+ method public androidx.work.Constraints build();
+ method public androidx.work.Constraints.Builder setRequiredNetworkType(androidx.work.NetworkType);
+ method public androidx.work.Constraints.Builder setRequiresBatteryNotLow(boolean);
+ method public androidx.work.Constraints.Builder setRequiresCharging(boolean);
+ method @RequiresApi(23) public androidx.work.Constraints.Builder setRequiresDeviceIdle(boolean);
+ method public androidx.work.Constraints.Builder setRequiresStorageNotLow(boolean);
+ method @RequiresApi(24) public androidx.work.Constraints.Builder setTriggerContentMaxDelay(long, java.util.concurrent.TimeUnit);
+ method @RequiresApi(26) public androidx.work.Constraints.Builder setTriggerContentMaxDelay(java.time.Duration!);
+ method @RequiresApi(24) public androidx.work.Constraints.Builder setTriggerContentUpdateDelay(long, java.util.concurrent.TimeUnit);
+ method @RequiresApi(26) public androidx.work.Constraints.Builder setTriggerContentUpdateDelay(java.time.Duration!);
+ }
+
+ public final class Data {
+ ctor public Data(androidx.work.Data);
+ method public static androidx.work.Data fromByteArray(byte[]);
+ method public boolean getBoolean(String, boolean);
+ method public boolean[]? getBooleanArray(String);
+ method public byte getByte(String, byte);
+ method public byte[]? getByteArray(String);
+ method public double getDouble(String, double);
+ method public double[]? getDoubleArray(String);
+ method public float getFloat(String, float);
+ method public float[]? getFloatArray(String);
+ method public int getInt(String, int);
+ method public int[]? getIntArray(String);
+ method public java.util.Map<java.lang.String!,java.lang.Object!> getKeyValueMap();
+ method public long getLong(String, long);
+ method public long[]? getLongArray(String);
+ method public String? getString(String);
+ method public String![]? getStringArray(String);
+ method public <T> boolean hasKeyWithValueOfType(String, Class<T!>);
+ method public byte[] toByteArray();
+ field public static final androidx.work.Data! EMPTY;
+ field public static final int MAX_DATA_BYTES = 10240; // 0x2800
+ }
+
+ public static final class Data.Builder {
+ ctor public Data.Builder();
+ method public androidx.work.Data build();
+ method public androidx.work.Data.Builder putAll(androidx.work.Data);
+ method public androidx.work.Data.Builder putAll(java.util.Map<java.lang.String!,java.lang.Object!>);
+ method public androidx.work.Data.Builder putBoolean(String, boolean);
+ method public androidx.work.Data.Builder putBooleanArray(String, boolean[]);
+ method public androidx.work.Data.Builder putByte(String, byte);
+ method public androidx.work.Data.Builder putByteArray(String, byte[]);
+ method public androidx.work.Data.Builder putDouble(String, double);
+ method public androidx.work.Data.Builder putDoubleArray(String, double[]);
+ method public androidx.work.Data.Builder putFloat(String, float);
+ method public androidx.work.Data.Builder putFloatArray(String, float[]);
+ method public androidx.work.Data.Builder putInt(String, int);
+ method public androidx.work.Data.Builder putIntArray(String, int[]);
+ method public androidx.work.Data.Builder putLong(String, long);
+ method public androidx.work.Data.Builder putLongArray(String, long[]);
+ method public androidx.work.Data.Builder putString(String, String?);
+ method public androidx.work.Data.Builder putStringArray(String, String![]);
+ }
+
+ public class DelegatingWorkerFactory extends androidx.work.WorkerFactory {
+ ctor public DelegatingWorkerFactory();
+ method public final void addFactory(androidx.work.WorkerFactory);
+ method public final androidx.work.ListenableWorker? createWorker(android.content.Context, String, androidx.work.WorkerParameters);
+ }
+
+ public enum ExistingPeriodicWorkPolicy {
+ enum_constant public static final androidx.work.ExistingPeriodicWorkPolicy KEEP;
+ enum_constant public static final androidx.work.ExistingPeriodicWorkPolicy REPLACE;
+ }
+
+ public enum ExistingWorkPolicy {
+ enum_constant public static final androidx.work.ExistingWorkPolicy APPEND;
+ enum_constant public static final androidx.work.ExistingWorkPolicy KEEP;
+ enum_constant public static final androidx.work.ExistingWorkPolicy REPLACE;
+ }
+
+ public final class ForegroundInfo {
+ ctor public ForegroundInfo(android.app.Notification);
+ ctor public ForegroundInfo(android.app.Notification, int);
+ method public int getForegroundServiceType();
+ method public android.app.Notification getNotification();
+ }
+
+ public interface ForegroundUpdater {
+ method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setForegroundAsync(android.content.Context, java.util.UUID, androidx.work.ForegroundInfo);
+ }
+
+ public abstract class InputMerger {
+ ctor public InputMerger();
+ method public abstract androidx.work.Data merge(java.util.List<androidx.work.Data!>);
+ }
+
+ public abstract class InputMergerFactory {
+ ctor public InputMergerFactory();
+ method public abstract androidx.work.InputMerger? createInputMerger(String);
+ }
+
+ public abstract class ListenableWorker {
+ ctor @Keep public ListenableWorker(android.content.Context, androidx.work.WorkerParameters);
+ method public final android.content.Context getApplicationContext();
+ method public final java.util.UUID getId();
+ method public final androidx.work.Data getInputData();
+ method @RequiresApi(28) public final android.net.Network? getNetwork();
+ method @IntRange(from=0) public final int getRunAttemptCount();
+ method public final java.util.Set<java.lang.String!> getTags();
+ method @RequiresApi(24) public final java.util.List<java.lang.String!> getTriggeredContentAuthorities();
+ method @RequiresApi(24) public final java.util.List<android.net.Uri!> getTriggeredContentUris();
+ method public final boolean isStopped();
+ method public void onStopped();
+ method public final com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setForegroundAsync(androidx.work.ForegroundInfo);
+ method public final com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setProgressAsync(androidx.work.Data);
+ method @MainThread public abstract com.google.common.util.concurrent.ListenableFuture<androidx.work.ListenableWorker.Result!> startWork();
+ }
+
+ public abstract static class ListenableWorker.Result {
+ method public static androidx.work.ListenableWorker.Result failure();
+ method public static androidx.work.ListenableWorker.Result failure(androidx.work.Data);
+ method public static androidx.work.ListenableWorker.Result retry();
+ method public static androidx.work.ListenableWorker.Result success();
+ method public static androidx.work.ListenableWorker.Result success(androidx.work.Data);
+ }
+
+ public enum NetworkType {
+ enum_constant public static final androidx.work.NetworkType CONNECTED;
+ enum_constant public static final androidx.work.NetworkType METERED;
+ enum_constant public static final androidx.work.NetworkType NOT_REQUIRED;
+ enum_constant public static final androidx.work.NetworkType NOT_ROAMING;
+ enum_constant public static final androidx.work.NetworkType UNMETERED;
+ }
+
+ public final class OneTimeWorkRequest extends androidx.work.WorkRequest {
+ method public static androidx.work.OneTimeWorkRequest from(Class<? extends androidx.work.ListenableWorker>);
+ method public static java.util.List<androidx.work.OneTimeWorkRequest!> from(java.util.List<java.lang.Class<? extends androidx.work.ListenableWorker>!>);
+ }
+
+ public static final class OneTimeWorkRequest.Builder extends androidx.work.WorkRequest.Builder<androidx.work.OneTimeWorkRequest.Builder,androidx.work.OneTimeWorkRequest> {
+ ctor public OneTimeWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker>);
+ method public androidx.work.OneTimeWorkRequest.Builder setInputMerger(Class<? extends androidx.work.InputMerger>);
+ }
+
+ public interface Operation {
+ method public com.google.common.util.concurrent.ListenableFuture<androidx.work.Operation.State.SUCCESS!> getResult();
+ method public androidx.lifecycle.LiveData<androidx.work.Operation.State!> getState();
+ }
+
+ public abstract static class Operation.State {
+ }
+
+ public static final class Operation.State.FAILURE extends androidx.work.Operation.State {
+ ctor public Operation.State.FAILURE(Throwable);
+ method public Throwable getThrowable();
+ }
+
+ public static final class Operation.State.IN_PROGRESS extends androidx.work.Operation.State {
+ }
+
+ public static final class Operation.State.SUCCESS extends androidx.work.Operation.State {
+ }
+
+ public final class OverwritingInputMerger extends androidx.work.InputMerger {
+ ctor public OverwritingInputMerger();
+ method public androidx.work.Data merge(java.util.List<androidx.work.Data!>);
+ }
+
+ public final class PeriodicWorkRequest extends androidx.work.WorkRequest {
+ field public static final long MIN_PERIODIC_FLEX_MILLIS = 300000L; // 0x493e0L
+ field public static final long MIN_PERIODIC_INTERVAL_MILLIS = 900000L; // 0xdbba0L
+ }
+
+ public static final class PeriodicWorkRequest.Builder extends androidx.work.WorkRequest.Builder<androidx.work.PeriodicWorkRequest.Builder,androidx.work.PeriodicWorkRequest> {
+ ctor public PeriodicWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker>, long, java.util.concurrent.TimeUnit);
+ ctor @RequiresApi(26) public PeriodicWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker>, java.time.Duration);
+ ctor public PeriodicWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker>, long, java.util.concurrent.TimeUnit, long, java.util.concurrent.TimeUnit);
+ ctor @RequiresApi(26) public PeriodicWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker>, java.time.Duration, java.time.Duration);
+ }
+
+ public interface ProgressUpdater {
+ method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> updateProgress(android.content.Context, java.util.UUID, androidx.work.Data);
+ }
+
+ public abstract class WorkContinuation {
+ ctor public WorkContinuation();
+ method public static androidx.work.WorkContinuation combine(java.util.List<androidx.work.WorkContinuation!>);
+ method public abstract androidx.work.Operation enqueue();
+ method public abstract com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.work.WorkInfo!>!> getWorkInfos();
+ method public abstract androidx.lifecycle.LiveData<java.util.List<androidx.work.WorkInfo!>!> getWorkInfosLiveData();
+ method public final androidx.work.WorkContinuation then(androidx.work.OneTimeWorkRequest);
+ method public abstract androidx.work.WorkContinuation then(java.util.List<androidx.work.OneTimeWorkRequest!>);
+ }
+
+ public final class WorkInfo {
+ method public java.util.UUID getId();
+ method public androidx.work.Data getOutputData();
+ method public androidx.work.Data getProgress();
+ method @IntRange(from=0) public int getRunAttemptCount();
+ method public androidx.work.WorkInfo.State getState();
+ method public java.util.Set<java.lang.String!> getTags();
+ }
+
+ public enum WorkInfo.State {
+ method public boolean isFinished();
+ enum_constant public static final androidx.work.WorkInfo.State BLOCKED;
+ enum_constant public static final androidx.work.WorkInfo.State CANCELLED;
+ enum_constant public static final androidx.work.WorkInfo.State ENQUEUED;
+ enum_constant public static final androidx.work.WorkInfo.State FAILED;
+ enum_constant public static final androidx.work.WorkInfo.State RUNNING;
+ enum_constant public static final androidx.work.WorkInfo.State SUCCEEDED;
+ }
+
+ public abstract class WorkManager {
+ method public final androidx.work.WorkContinuation beginUniqueWork(String, androidx.work.ExistingWorkPolicy, androidx.work.OneTimeWorkRequest);
+ method public abstract androidx.work.WorkContinuation beginUniqueWork(String, androidx.work.ExistingWorkPolicy, java.util.List<androidx.work.OneTimeWorkRequest!>);
+ method public final androidx.work.WorkContinuation beginWith(androidx.work.OneTimeWorkRequest);
+ method public abstract androidx.work.WorkContinuation beginWith(java.util.List<androidx.work.OneTimeWorkRequest!>);
+ method public abstract androidx.work.Operation cancelAllWork();
+ method public abstract androidx.work.Operation cancelAllWorkByTag(String);
+ method public abstract androidx.work.Operation cancelUniqueWork(String);
+ method public abstract androidx.work.Operation cancelWorkById(java.util.UUID);
+ method public abstract android.app.PendingIntent createCancelPendingIntent(java.util.UUID);
+ method public final androidx.work.Operation enqueue(androidx.work.WorkRequest);
+ method public abstract androidx.work.Operation enqueue(java.util.List<? extends androidx.work.WorkRequest>);
+ method public abstract androidx.work.Operation enqueueUniquePeriodicWork(String, androidx.work.ExistingPeriodicWorkPolicy, androidx.work.PeriodicWorkRequest);
+ method public androidx.work.Operation enqueueUniqueWork(String, androidx.work.ExistingWorkPolicy, androidx.work.OneTimeWorkRequest);
+ method public abstract androidx.work.Operation enqueueUniqueWork(String, androidx.work.ExistingWorkPolicy, java.util.List<androidx.work.OneTimeWorkRequest!>);
+ method @Deprecated public static androidx.work.WorkManager getInstance();
+ method public static androidx.work.WorkManager getInstance(android.content.Context);
+ method public abstract com.google.common.util.concurrent.ListenableFuture<java.lang.Long!> getLastCancelAllTimeMillis();
+ method public abstract androidx.lifecycle.LiveData<java.lang.Long!> getLastCancelAllTimeMillisLiveData();
+ method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.work.WorkInfo!> getWorkInfoById(java.util.UUID);
+ method public abstract androidx.lifecycle.LiveData<androidx.work.WorkInfo!> getWorkInfoByIdLiveData(java.util.UUID);
+ method public abstract com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.work.WorkInfo!>!> getWorkInfosByTag(String);
+ method public abstract androidx.lifecycle.LiveData<java.util.List<androidx.work.WorkInfo!>!> getWorkInfosByTagLiveData(String);
+ method public abstract com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.work.WorkInfo!>!> getWorkInfosForUniqueWork(String);
+ method public abstract androidx.lifecycle.LiveData<java.util.List<androidx.work.WorkInfo!>!> getWorkInfosForUniqueWorkLiveData(String);
+ method public static void initialize(android.content.Context, androidx.work.Configuration);
+ method public abstract androidx.work.Operation pruneWork();
+ }
+
+ public abstract class WorkRequest {
+ method public java.util.UUID getId();
+ field public static final long DEFAULT_BACKOFF_DELAY_MILLIS = 30000L; // 0x7530L
+ field public static final long MAX_BACKOFF_MILLIS = 18000000L; // 0x112a880L
+ field public static final long MIN_BACKOFF_MILLIS = 10000L; // 0x2710L
+ }
+
+ public abstract static class WorkRequest.Builder<B extends androidx.work.WorkRequest.Builder<?, ?>, W extends androidx.work.WorkRequest> {
+ method public final B addTag(String);
+ method public final W build();
+ method public final B keepResultsForAtLeast(long, java.util.concurrent.TimeUnit);
+ method @RequiresApi(26) public final B keepResultsForAtLeast(java.time.Duration);
+ method public final B setBackoffCriteria(androidx.work.BackoffPolicy, long, java.util.concurrent.TimeUnit);
+ method @RequiresApi(26) public final B setBackoffCriteria(androidx.work.BackoffPolicy, java.time.Duration);
+ method public final B setConstraints(androidx.work.Constraints);
+ method public B setInitialDelay(long, java.util.concurrent.TimeUnit);
+ method @RequiresApi(26) public B setInitialDelay(java.time.Duration);
+ method public final B setInputData(androidx.work.Data);
+ }
+
+ public abstract class Worker extends androidx.work.ListenableWorker {
+ ctor @Keep public Worker(android.content.Context, androidx.work.WorkerParameters);
+ method @WorkerThread public abstract androidx.work.ListenableWorker.Result doWork();
+ method public final com.google.common.util.concurrent.ListenableFuture<androidx.work.ListenableWorker.Result!> startWork();
+ }
+
+ public abstract class WorkerFactory {
+ ctor public WorkerFactory();
+ method public abstract androidx.work.ListenableWorker? createWorker(android.content.Context, String, androidx.work.WorkerParameters);
+ }
+
+ public final class WorkerParameters {
+ method public java.util.UUID getId();
+ method public androidx.work.Data getInputData();
+ method @RequiresApi(28) public android.net.Network? getNetwork();
+ method @IntRange(from=0) public int getRunAttemptCount();
+ method public java.util.Set<java.lang.String!> getTags();
+ method @RequiresApi(24) public java.util.List<java.lang.String!> getTriggeredContentAuthorities();
+ method @RequiresApi(24) public java.util.List<android.net.Uri!> getTriggeredContentUris();
+ }
+
+}
+
diff --git a/work/workmanager/api/public_plus_experimental_2.3.0-alpha04.txt b/work/workmanager/api/public_plus_experimental_2.3.0-alpha04.txt
new file mode 100644
index 0000000..46dc320
--- /dev/null
+++ b/work/workmanager/api/public_plus_experimental_2.3.0-alpha04.txt
@@ -0,0 +1,331 @@
+// Signature format: 3.0
+package androidx.work {
+
+ public final class ArrayCreatingInputMerger extends androidx.work.InputMerger {
+ ctor public ArrayCreatingInputMerger();
+ method public androidx.work.Data merge(java.util.List<androidx.work.Data!>);
+ }
+
+ public enum BackoffPolicy {
+ enum_constant public static final androidx.work.BackoffPolicy EXPONENTIAL;
+ enum_constant public static final androidx.work.BackoffPolicy LINEAR;
+ }
+
+ public final class Configuration {
+ method public java.util.concurrent.Executor getExecutor();
+ method public androidx.work.InputMergerFactory getInputMergerFactory();
+ method public int getMaxJobSchedulerId();
+ method public int getMinJobSchedulerId();
+ method public java.util.concurrent.Executor getTaskExecutor();
+ method public androidx.work.WorkerFactory getWorkerFactory();
+ field public static final int MIN_SCHEDULER_LIMIT = 20; // 0x14
+ }
+
+ public static final class Configuration.Builder {
+ ctor public Configuration.Builder();
+ method public androidx.work.Configuration build();
+ method public androidx.work.Configuration.Builder setExecutor(java.util.concurrent.Executor);
+ method public androidx.work.Configuration.Builder setInputMergerFactory(androidx.work.InputMergerFactory);
+ method public androidx.work.Configuration.Builder setJobSchedulerJobIdRange(int, int);
+ method public androidx.work.Configuration.Builder setMaxSchedulerLimit(int);
+ method public androidx.work.Configuration.Builder setMinimumLoggingLevel(int);
+ method public androidx.work.Configuration.Builder setTaskExecutor(java.util.concurrent.Executor);
+ method public androidx.work.Configuration.Builder setWorkerFactory(androidx.work.WorkerFactory);
+ }
+
+ public static interface Configuration.Provider {
+ method public androidx.work.Configuration getWorkManagerConfiguration();
+ }
+
+ public final class Constraints {
+ ctor public Constraints(androidx.work.Constraints);
+ method public androidx.work.NetworkType getRequiredNetworkType();
+ method public boolean requiresBatteryNotLow();
+ method public boolean requiresCharging();
+ method @RequiresApi(23) public boolean requiresDeviceIdle();
+ method public boolean requiresStorageNotLow();
+ field public static final androidx.work.Constraints! NONE;
+ }
+
+ public static final class Constraints.Builder {
+ ctor public Constraints.Builder();
+ method @RequiresApi(24) public androidx.work.Constraints.Builder addContentUriTrigger(android.net.Uri, boolean);
+ method public androidx.work.Constraints build();
+ method public androidx.work.Constraints.Builder setRequiredNetworkType(androidx.work.NetworkType);
+ method public androidx.work.Constraints.Builder setRequiresBatteryNotLow(boolean);
+ method public androidx.work.Constraints.Builder setRequiresCharging(boolean);
+ method @RequiresApi(23) public androidx.work.Constraints.Builder setRequiresDeviceIdle(boolean);
+ method public androidx.work.Constraints.Builder setRequiresStorageNotLow(boolean);
+ method @RequiresApi(24) public androidx.work.Constraints.Builder setTriggerContentMaxDelay(long, java.util.concurrent.TimeUnit);
+ method @RequiresApi(26) public androidx.work.Constraints.Builder setTriggerContentMaxDelay(java.time.Duration!);
+ method @RequiresApi(24) public androidx.work.Constraints.Builder setTriggerContentUpdateDelay(long, java.util.concurrent.TimeUnit);
+ method @RequiresApi(26) public androidx.work.Constraints.Builder setTriggerContentUpdateDelay(java.time.Duration!);
+ }
+
+ public final class Data {
+ ctor public Data(androidx.work.Data);
+ method public static androidx.work.Data fromByteArray(byte[]);
+ method public boolean getBoolean(String, boolean);
+ method public boolean[]? getBooleanArray(String);
+ method public byte getByte(String, byte);
+ method public byte[]? getByteArray(String);
+ method public double getDouble(String, double);
+ method public double[]? getDoubleArray(String);
+ method public float getFloat(String, float);
+ method public float[]? getFloatArray(String);
+ method public int getInt(String, int);
+ method public int[]? getIntArray(String);
+ method public java.util.Map<java.lang.String!,java.lang.Object!> getKeyValueMap();
+ method public long getLong(String, long);
+ method public long[]? getLongArray(String);
+ method public String? getString(String);
+ method public String![]? getStringArray(String);
+ method public <T> boolean hasKeyWithValueOfType(String, Class<T!>);
+ method public byte[] toByteArray();
+ field public static final androidx.work.Data! EMPTY;
+ field public static final int MAX_DATA_BYTES = 10240; // 0x2800
+ }
+
+ public static final class Data.Builder {
+ ctor public Data.Builder();
+ method public androidx.work.Data build();
+ method public androidx.work.Data.Builder putAll(androidx.work.Data);
+ method public androidx.work.Data.Builder putAll(java.util.Map<java.lang.String!,java.lang.Object!>);
+ method public androidx.work.Data.Builder putBoolean(String, boolean);
+ method public androidx.work.Data.Builder putBooleanArray(String, boolean[]);
+ method public androidx.work.Data.Builder putByte(String, byte);
+ method public androidx.work.Data.Builder putByteArray(String, byte[]);
+ method public androidx.work.Data.Builder putDouble(String, double);
+ method public androidx.work.Data.Builder putDoubleArray(String, double[]);
+ method public androidx.work.Data.Builder putFloat(String, float);
+ method public androidx.work.Data.Builder putFloatArray(String, float[]);
+ method public androidx.work.Data.Builder putInt(String, int);
+ method public androidx.work.Data.Builder putIntArray(String, int[]);
+ method public androidx.work.Data.Builder putLong(String, long);
+ method public androidx.work.Data.Builder putLongArray(String, long[]);
+ method public androidx.work.Data.Builder putString(String, String?);
+ method public androidx.work.Data.Builder putStringArray(String, String![]);
+ }
+
+ public class DelegatingWorkerFactory extends androidx.work.WorkerFactory {
+ ctor public DelegatingWorkerFactory();
+ method public final void addFactory(androidx.work.WorkerFactory);
+ method public final androidx.work.ListenableWorker? createWorker(android.content.Context, String, androidx.work.WorkerParameters);
+ }
+
+ public enum ExistingPeriodicWorkPolicy {
+ enum_constant public static final androidx.work.ExistingPeriodicWorkPolicy KEEP;
+ enum_constant public static final androidx.work.ExistingPeriodicWorkPolicy REPLACE;
+ }
+
+ public enum ExistingWorkPolicy {
+ enum_constant public static final androidx.work.ExistingWorkPolicy APPEND;
+ enum_constant public static final androidx.work.ExistingWorkPolicy KEEP;
+ enum_constant public static final androidx.work.ExistingWorkPolicy REPLACE;
+ }
+
+ public final class ForegroundInfo {
+ ctor public ForegroundInfo(android.app.Notification);
+ ctor public ForegroundInfo(android.app.Notification, int);
+ method public int getForegroundServiceType();
+ method public android.app.Notification getNotification();
+ }
+
+ public interface ForegroundUpdater {
+ method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setForegroundAsync(android.content.Context, java.util.UUID, androidx.work.ForegroundInfo);
+ }
+
+ public abstract class InputMerger {
+ ctor public InputMerger();
+ method public abstract androidx.work.Data merge(java.util.List<androidx.work.Data!>);
+ }
+
+ public abstract class InputMergerFactory {
+ ctor public InputMergerFactory();
+ method public abstract androidx.work.InputMerger? createInputMerger(String);
+ }
+
+ public abstract class ListenableWorker {
+ ctor @Keep public ListenableWorker(android.content.Context, androidx.work.WorkerParameters);
+ method public final android.content.Context getApplicationContext();
+ method public final java.util.UUID getId();
+ method public final androidx.work.Data getInputData();
+ method @RequiresApi(28) public final android.net.Network? getNetwork();
+ method @IntRange(from=0) public final int getRunAttemptCount();
+ method public final java.util.Set<java.lang.String!> getTags();
+ method @RequiresApi(24) public final java.util.List<java.lang.String!> getTriggeredContentAuthorities();
+ method @RequiresApi(24) public final java.util.List<android.net.Uri!> getTriggeredContentUris();
+ method public final boolean isStopped();
+ method public void onStopped();
+ method public final com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setForegroundAsync(androidx.work.ForegroundInfo);
+ method public final com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setProgressAsync(androidx.work.Data);
+ method @MainThread public abstract com.google.common.util.concurrent.ListenableFuture<androidx.work.ListenableWorker.Result!> startWork();
+ }
+
+ public abstract static class ListenableWorker.Result {
+ method public static androidx.work.ListenableWorker.Result failure();
+ method public static androidx.work.ListenableWorker.Result failure(androidx.work.Data);
+ method public static androidx.work.ListenableWorker.Result retry();
+ method public static androidx.work.ListenableWorker.Result success();
+ method public static androidx.work.ListenableWorker.Result success(androidx.work.Data);
+ }
+
+ public enum NetworkType {
+ enum_constant public static final androidx.work.NetworkType CONNECTED;
+ enum_constant public static final androidx.work.NetworkType METERED;
+ enum_constant public static final androidx.work.NetworkType NOT_REQUIRED;
+ enum_constant public static final androidx.work.NetworkType NOT_ROAMING;
+ enum_constant public static final androidx.work.NetworkType UNMETERED;
+ }
+
+ public final class OneTimeWorkRequest extends androidx.work.WorkRequest {
+ method public static androidx.work.OneTimeWorkRequest from(Class<? extends androidx.work.ListenableWorker>);
+ method public static java.util.List<androidx.work.OneTimeWorkRequest!> from(java.util.List<java.lang.Class<? extends androidx.work.ListenableWorker>!>);
+ }
+
+ public static final class OneTimeWorkRequest.Builder extends androidx.work.WorkRequest.Builder<androidx.work.OneTimeWorkRequest.Builder,androidx.work.OneTimeWorkRequest> {
+ ctor public OneTimeWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker>);
+ method public androidx.work.OneTimeWorkRequest.Builder setInputMerger(Class<? extends androidx.work.InputMerger>);
+ }
+
+ public interface Operation {
+ method public com.google.common.util.concurrent.ListenableFuture<androidx.work.Operation.State.SUCCESS!> getResult();
+ method public androidx.lifecycle.LiveData<androidx.work.Operation.State!> getState();
+ }
+
+ public abstract static class Operation.State {
+ }
+
+ public static final class Operation.State.FAILURE extends androidx.work.Operation.State {
+ ctor public Operation.State.FAILURE(Throwable);
+ method public Throwable getThrowable();
+ }
+
+ public static final class Operation.State.IN_PROGRESS extends androidx.work.Operation.State {
+ }
+
+ public static final class Operation.State.SUCCESS extends androidx.work.Operation.State {
+ }
+
+ public final class OverwritingInputMerger extends androidx.work.InputMerger {
+ ctor public OverwritingInputMerger();
+ method public androidx.work.Data merge(java.util.List<androidx.work.Data!>);
+ }
+
+ public final class PeriodicWorkRequest extends androidx.work.WorkRequest {
+ field public static final long MIN_PERIODIC_FLEX_MILLIS = 300000L; // 0x493e0L
+ field public static final long MIN_PERIODIC_INTERVAL_MILLIS = 900000L; // 0xdbba0L
+ }
+
+ public static final class PeriodicWorkRequest.Builder extends androidx.work.WorkRequest.Builder<androidx.work.PeriodicWorkRequest.Builder,androidx.work.PeriodicWorkRequest> {
+ ctor public PeriodicWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker>, long, java.util.concurrent.TimeUnit);
+ ctor @RequiresApi(26) public PeriodicWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker>, java.time.Duration);
+ ctor public PeriodicWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker>, long, java.util.concurrent.TimeUnit, long, java.util.concurrent.TimeUnit);
+ ctor @RequiresApi(26) public PeriodicWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker>, java.time.Duration, java.time.Duration);
+ }
+
+ public interface ProgressUpdater {
+ method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> updateProgress(android.content.Context, java.util.UUID, androidx.work.Data);
+ }
+
+ public abstract class WorkContinuation {
+ ctor public WorkContinuation();
+ method public static androidx.work.WorkContinuation combine(java.util.List<androidx.work.WorkContinuation!>);
+ method public abstract androidx.work.Operation enqueue();
+ method public abstract com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.work.WorkInfo!>!> getWorkInfos();
+ method public abstract androidx.lifecycle.LiveData<java.util.List<androidx.work.WorkInfo!>!> getWorkInfosLiveData();
+ method public final androidx.work.WorkContinuation then(androidx.work.OneTimeWorkRequest);
+ method public abstract androidx.work.WorkContinuation then(java.util.List<androidx.work.OneTimeWorkRequest!>);
+ }
+
+ public final class WorkInfo {
+ method public java.util.UUID getId();
+ method public androidx.work.Data getOutputData();
+ method public androidx.work.Data getProgress();
+ method @IntRange(from=0) public int getRunAttemptCount();
+ method public androidx.work.WorkInfo.State getState();
+ method public java.util.Set<java.lang.String!> getTags();
+ }
+
+ public enum WorkInfo.State {
+ method public boolean isFinished();
+ enum_constant public static final androidx.work.WorkInfo.State BLOCKED;
+ enum_constant public static final androidx.work.WorkInfo.State CANCELLED;
+ enum_constant public static final androidx.work.WorkInfo.State ENQUEUED;
+ enum_constant public static final androidx.work.WorkInfo.State FAILED;
+ enum_constant public static final androidx.work.WorkInfo.State RUNNING;
+ enum_constant public static final androidx.work.WorkInfo.State SUCCEEDED;
+ }
+
+ public abstract class WorkManager {
+ method public final androidx.work.WorkContinuation beginUniqueWork(String, androidx.work.ExistingWorkPolicy, androidx.work.OneTimeWorkRequest);
+ method public abstract androidx.work.WorkContinuation beginUniqueWork(String, androidx.work.ExistingWorkPolicy, java.util.List<androidx.work.OneTimeWorkRequest!>);
+ method public final androidx.work.WorkContinuation beginWith(androidx.work.OneTimeWorkRequest);
+ method public abstract androidx.work.WorkContinuation beginWith(java.util.List<androidx.work.OneTimeWorkRequest!>);
+ method public abstract androidx.work.Operation cancelAllWork();
+ method public abstract androidx.work.Operation cancelAllWorkByTag(String);
+ method public abstract androidx.work.Operation cancelUniqueWork(String);
+ method public abstract androidx.work.Operation cancelWorkById(java.util.UUID);
+ method public abstract android.app.PendingIntent createCancelPendingIntent(java.util.UUID);
+ method public final androidx.work.Operation enqueue(androidx.work.WorkRequest);
+ method public abstract androidx.work.Operation enqueue(java.util.List<? extends androidx.work.WorkRequest>);
+ method public abstract androidx.work.Operation enqueueUniquePeriodicWork(String, androidx.work.ExistingPeriodicWorkPolicy, androidx.work.PeriodicWorkRequest);
+ method public androidx.work.Operation enqueueUniqueWork(String, androidx.work.ExistingWorkPolicy, androidx.work.OneTimeWorkRequest);
+ method public abstract androidx.work.Operation enqueueUniqueWork(String, androidx.work.ExistingWorkPolicy, java.util.List<androidx.work.OneTimeWorkRequest!>);
+ method @Deprecated public static androidx.work.WorkManager getInstance();
+ method public static androidx.work.WorkManager getInstance(android.content.Context);
+ method public abstract com.google.common.util.concurrent.ListenableFuture<java.lang.Long!> getLastCancelAllTimeMillis();
+ method public abstract androidx.lifecycle.LiveData<java.lang.Long!> getLastCancelAllTimeMillisLiveData();
+ method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.work.WorkInfo!> getWorkInfoById(java.util.UUID);
+ method public abstract androidx.lifecycle.LiveData<androidx.work.WorkInfo!> getWorkInfoByIdLiveData(java.util.UUID);
+ method public abstract com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.work.WorkInfo!>!> getWorkInfosByTag(String);
+ method public abstract androidx.lifecycle.LiveData<java.util.List<androidx.work.WorkInfo!>!> getWorkInfosByTagLiveData(String);
+ method public abstract com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.work.WorkInfo!>!> getWorkInfosForUniqueWork(String);
+ method public abstract androidx.lifecycle.LiveData<java.util.List<androidx.work.WorkInfo!>!> getWorkInfosForUniqueWorkLiveData(String);
+ method public static void initialize(android.content.Context, androidx.work.Configuration);
+ method public abstract androidx.work.Operation pruneWork();
+ }
+
+ public abstract class WorkRequest {
+ method public java.util.UUID getId();
+ field public static final long DEFAULT_BACKOFF_DELAY_MILLIS = 30000L; // 0x7530L
+ field public static final long MAX_BACKOFF_MILLIS = 18000000L; // 0x112a880L
+ field public static final long MIN_BACKOFF_MILLIS = 10000L; // 0x2710L
+ }
+
+ public abstract static class WorkRequest.Builder<B extends androidx.work.WorkRequest.Builder<?, ?>, W extends androidx.work.WorkRequest> {
+ method public final B addTag(String);
+ method public final W build();
+ method public final B keepResultsForAtLeast(long, java.util.concurrent.TimeUnit);
+ method @RequiresApi(26) public final B keepResultsForAtLeast(java.time.Duration);
+ method public final B setBackoffCriteria(androidx.work.BackoffPolicy, long, java.util.concurrent.TimeUnit);
+ method @RequiresApi(26) public final B setBackoffCriteria(androidx.work.BackoffPolicy, java.time.Duration);
+ method public final B setConstraints(androidx.work.Constraints);
+ method public B setInitialDelay(long, java.util.concurrent.TimeUnit);
+ method @RequiresApi(26) public B setInitialDelay(java.time.Duration);
+ method public final B setInputData(androidx.work.Data);
+ }
+
+ public abstract class Worker extends androidx.work.ListenableWorker {
+ ctor @Keep public Worker(android.content.Context, androidx.work.WorkerParameters);
+ method @WorkerThread public abstract androidx.work.ListenableWorker.Result doWork();
+ method public final com.google.common.util.concurrent.ListenableFuture<androidx.work.ListenableWorker.Result!> startWork();
+ }
+
+ public abstract class WorkerFactory {
+ ctor public WorkerFactory();
+ method public abstract androidx.work.ListenableWorker? createWorker(android.content.Context, String, androidx.work.WorkerParameters);
+ }
+
+ public final class WorkerParameters {
+ method public java.util.UUID getId();
+ method public androidx.work.Data getInputData();
+ method @RequiresApi(28) public android.net.Network? getNetwork();
+ method @IntRange(from=0) public int getRunAttemptCount();
+ method public java.util.Set<java.lang.String!> getTags();
+ method @RequiresApi(24) public java.util.List<java.lang.String!> getTriggeredContentAuthorities();
+ method @RequiresApi(24) public java.util.List<android.net.Uri!> getTriggeredContentUris();
+ }
+
+}
+
diff --git a/work/workmanager/api/res-2.3.0-alpha04.txt b/work/workmanager/api/res-2.3.0-alpha04.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/work/workmanager/api/res-2.3.0-alpha04.txt
diff --git a/work/workmanager/build.gradle b/work/workmanager/build.gradle
index ad584f9..ea60d21 100644
--- a/work/workmanager/build.gradle
+++ b/work/workmanager/build.gradle
@@ -62,9 +62,9 @@
}
dependencies {
- annotationProcessor("androidx.room:room-compiler:2.2.0")
- implementation("androidx.room:room-runtime:2.2.0")
- androidTestImplementation("androidx.room:room-testing:2.2.0")
+ annotationProcessor("androidx.room:room-compiler:2.2.1")
+ implementation("androidx.room:room-runtime:2.2.1")
+ androidTestImplementation("androidx.room:room-testing:2.2.1")
api(GUAVA_LISTENABLE_FUTURE)
api("androidx.lifecycle:lifecycle-livedata:2.1.0")
implementation("androidx.core:core:1.1.0")
diff --git a/work/workmanager/src/main/java/androidx/work/ForegroundInfo.java b/work/workmanager/src/main/java/androidx/work/ForegroundInfo.java
index d6c9e6a..86da39b 100644
--- a/work/workmanager/src/main/java/androidx/work/ForegroundInfo.java
+++ b/work/workmanager/src/main/java/androidx/work/ForegroundInfo.java
@@ -48,7 +48,7 @@
* Creates an instance of {@link ForegroundInfo} with a {@link Notification} and foreground
* {@link android.app.Service} type.
*
- * Fore more information look at {@code android.app.Service#startForeground(int,
+ * For more information look at {@code android.app.Service#startForeground(int,
* Notification, int)}.
*
* @param notification The {@link Notification}