Merge "ui-desktop: get rid of android.graphics/android.text emulation" into androidx-master-dev
diff --git a/autofill/autofill/api/1.1.0-alpha02.txt b/autofill/autofill/api/1.1.0-alpha02.txt
index d6f51b3..98cfd23 100644
--- a/autofill/autofill/api/1.1.0-alpha02.txt
+++ b/autofill/autofill/api/1.1.0-alpha02.txt
@@ -47,18 +47,18 @@
package androidx.autofill.inline {
- @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public final class Renderer {
+ @RequiresApi(api=android.os.Build.VERSION_CODES.R) public final class Renderer {
method public static android.app.PendingIntent? getAttributionIntent(android.app.slice.Slice);
method public static android.os.Bundle getSupportedInlineUiVersionsAsBundle();
method public static android.view.View? render(android.content.Context, android.app.slice.Slice, android.os.Bundle);
}
- @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public final class SuggestionHintConstants {
+ @RequiresApi(api=android.os.Build.VERSION_CODES.R) public final class SuggestionHintConstants {
field public static final String SUGGESTION_HINT_CLIPBOARD_CONTENT = "clipboardContent";
field public static final String SUGGESTION_HINT_SMART_REPLY = "smartReply";
}
- @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public final class UiVersions {
+ @RequiresApi(api=android.os.Build.VERSION_CODES.R) public final class UiVersions {
method public static java.util.List<java.lang.String!> getVersions(android.os.Bundle);
method public static androidx.autofill.inline.UiVersions.StylesBuilder newStylesBuilder();
field public static final String INLINE_UI_VERSION_1 = "androidx.autofill.inline.ui.version:v1";
@@ -80,7 +80,7 @@
package androidx.autofill.inline.common {
- @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public final class ImageViewStyle extends androidx.autofill.inline.common.ViewStyle {
+ @RequiresApi(api=android.os.Build.VERSION_CODES.R) public final class ImageViewStyle extends androidx.autofill.inline.common.ViewStyle {
}
public static final class ImageViewStyle.Builder {
@@ -96,7 +96,7 @@
method public androidx.autofill.inline.common.ImageViewStyle.Builder setTintList(android.content.res.ColorStateList);
}
- @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public final class TextViewStyle extends androidx.autofill.inline.common.ViewStyle {
+ @RequiresApi(api=android.os.Build.VERSION_CODES.R) public final class TextViewStyle extends androidx.autofill.inline.common.ViewStyle {
}
public static final class TextViewStyle.Builder {
@@ -112,7 +112,7 @@
method public androidx.autofill.inline.common.TextViewStyle.Builder setTypeface(String, int);
}
- @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public class ViewStyle {
+ @RequiresApi(api=android.os.Build.VERSION_CODES.R) public class ViewStyle {
}
public static final class ViewStyle.Builder {
@@ -128,7 +128,7 @@
package androidx.autofill.inline.v1 {
- @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public final class InlineSuggestionUi {
+ @RequiresApi(api=android.os.Build.VERSION_CODES.R) public final class InlineSuggestionUi {
method public static androidx.autofill.inline.v1.InlineSuggestionUi.Content.Builder newContentBuilder(android.app.PendingIntent);
method public static androidx.autofill.inline.v1.InlineSuggestionUi.Style.Builder newStyleBuilder();
}
diff --git a/autofill/autofill/api/current.txt b/autofill/autofill/api/current.txt
index d6f51b3..98cfd23 100644
--- a/autofill/autofill/api/current.txt
+++ b/autofill/autofill/api/current.txt
@@ -47,18 +47,18 @@
package androidx.autofill.inline {
- @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public final class Renderer {
+ @RequiresApi(api=android.os.Build.VERSION_CODES.R) public final class Renderer {
method public static android.app.PendingIntent? getAttributionIntent(android.app.slice.Slice);
method public static android.os.Bundle getSupportedInlineUiVersionsAsBundle();
method public static android.view.View? render(android.content.Context, android.app.slice.Slice, android.os.Bundle);
}
- @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public final class SuggestionHintConstants {
+ @RequiresApi(api=android.os.Build.VERSION_CODES.R) public final class SuggestionHintConstants {
field public static final String SUGGESTION_HINT_CLIPBOARD_CONTENT = "clipboardContent";
field public static final String SUGGESTION_HINT_SMART_REPLY = "smartReply";
}
- @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public final class UiVersions {
+ @RequiresApi(api=android.os.Build.VERSION_CODES.R) public final class UiVersions {
method public static java.util.List<java.lang.String!> getVersions(android.os.Bundle);
method public static androidx.autofill.inline.UiVersions.StylesBuilder newStylesBuilder();
field public static final String INLINE_UI_VERSION_1 = "androidx.autofill.inline.ui.version:v1";
@@ -80,7 +80,7 @@
package androidx.autofill.inline.common {
- @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public final class ImageViewStyle extends androidx.autofill.inline.common.ViewStyle {
+ @RequiresApi(api=android.os.Build.VERSION_CODES.R) public final class ImageViewStyle extends androidx.autofill.inline.common.ViewStyle {
}
public static final class ImageViewStyle.Builder {
@@ -96,7 +96,7 @@
method public androidx.autofill.inline.common.ImageViewStyle.Builder setTintList(android.content.res.ColorStateList);
}
- @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public final class TextViewStyle extends androidx.autofill.inline.common.ViewStyle {
+ @RequiresApi(api=android.os.Build.VERSION_CODES.R) public final class TextViewStyle extends androidx.autofill.inline.common.ViewStyle {
}
public static final class TextViewStyle.Builder {
@@ -112,7 +112,7 @@
method public androidx.autofill.inline.common.TextViewStyle.Builder setTypeface(String, int);
}
- @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public class ViewStyle {
+ @RequiresApi(api=android.os.Build.VERSION_CODES.R) public class ViewStyle {
}
public static final class ViewStyle.Builder {
@@ -128,7 +128,7 @@
package androidx.autofill.inline.v1 {
- @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public final class InlineSuggestionUi {
+ @RequiresApi(api=android.os.Build.VERSION_CODES.R) public final class InlineSuggestionUi {
method public static androidx.autofill.inline.v1.InlineSuggestionUi.Content.Builder newContentBuilder(android.app.PendingIntent);
method public static androidx.autofill.inline.v1.InlineSuggestionUi.Style.Builder newStyleBuilder();
}
diff --git a/autofill/autofill/api/public_plus_experimental_1.1.0-alpha02.txt b/autofill/autofill/api/public_plus_experimental_1.1.0-alpha02.txt
index d6f51b3..98cfd23 100644
--- a/autofill/autofill/api/public_plus_experimental_1.1.0-alpha02.txt
+++ b/autofill/autofill/api/public_plus_experimental_1.1.0-alpha02.txt
@@ -47,18 +47,18 @@
package androidx.autofill.inline {
- @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public final class Renderer {
+ @RequiresApi(api=android.os.Build.VERSION_CODES.R) public final class Renderer {
method public static android.app.PendingIntent? getAttributionIntent(android.app.slice.Slice);
method public static android.os.Bundle getSupportedInlineUiVersionsAsBundle();
method public static android.view.View? render(android.content.Context, android.app.slice.Slice, android.os.Bundle);
}
- @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public final class SuggestionHintConstants {
+ @RequiresApi(api=android.os.Build.VERSION_CODES.R) public final class SuggestionHintConstants {
field public static final String SUGGESTION_HINT_CLIPBOARD_CONTENT = "clipboardContent";
field public static final String SUGGESTION_HINT_SMART_REPLY = "smartReply";
}
- @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public final class UiVersions {
+ @RequiresApi(api=android.os.Build.VERSION_CODES.R) public final class UiVersions {
method public static java.util.List<java.lang.String!> getVersions(android.os.Bundle);
method public static androidx.autofill.inline.UiVersions.StylesBuilder newStylesBuilder();
field public static final String INLINE_UI_VERSION_1 = "androidx.autofill.inline.ui.version:v1";
@@ -80,7 +80,7 @@
package androidx.autofill.inline.common {
- @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public final class ImageViewStyle extends androidx.autofill.inline.common.ViewStyle {
+ @RequiresApi(api=android.os.Build.VERSION_CODES.R) public final class ImageViewStyle extends androidx.autofill.inline.common.ViewStyle {
}
public static final class ImageViewStyle.Builder {
@@ -96,7 +96,7 @@
method public androidx.autofill.inline.common.ImageViewStyle.Builder setTintList(android.content.res.ColorStateList);
}
- @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public final class TextViewStyle extends androidx.autofill.inline.common.ViewStyle {
+ @RequiresApi(api=android.os.Build.VERSION_CODES.R) public final class TextViewStyle extends androidx.autofill.inline.common.ViewStyle {
}
public static final class TextViewStyle.Builder {
@@ -112,7 +112,7 @@
method public androidx.autofill.inline.common.TextViewStyle.Builder setTypeface(String, int);
}
- @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public class ViewStyle {
+ @RequiresApi(api=android.os.Build.VERSION_CODES.R) public class ViewStyle {
}
public static final class ViewStyle.Builder {
@@ -128,7 +128,7 @@
package androidx.autofill.inline.v1 {
- @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public final class InlineSuggestionUi {
+ @RequiresApi(api=android.os.Build.VERSION_CODES.R) public final class InlineSuggestionUi {
method public static androidx.autofill.inline.v1.InlineSuggestionUi.Content.Builder newContentBuilder(android.app.PendingIntent);
method public static androidx.autofill.inline.v1.InlineSuggestionUi.Style.Builder newStyleBuilder();
}
diff --git a/autofill/autofill/api/public_plus_experimental_current.txt b/autofill/autofill/api/public_plus_experimental_current.txt
index d6f51b3..98cfd23 100644
--- a/autofill/autofill/api/public_plus_experimental_current.txt
+++ b/autofill/autofill/api/public_plus_experimental_current.txt
@@ -47,18 +47,18 @@
package androidx.autofill.inline {
- @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public final class Renderer {
+ @RequiresApi(api=android.os.Build.VERSION_CODES.R) public final class Renderer {
method public static android.app.PendingIntent? getAttributionIntent(android.app.slice.Slice);
method public static android.os.Bundle getSupportedInlineUiVersionsAsBundle();
method public static android.view.View? render(android.content.Context, android.app.slice.Slice, android.os.Bundle);
}
- @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public final class SuggestionHintConstants {
+ @RequiresApi(api=android.os.Build.VERSION_CODES.R) public final class SuggestionHintConstants {
field public static final String SUGGESTION_HINT_CLIPBOARD_CONTENT = "clipboardContent";
field public static final String SUGGESTION_HINT_SMART_REPLY = "smartReply";
}
- @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public final class UiVersions {
+ @RequiresApi(api=android.os.Build.VERSION_CODES.R) public final class UiVersions {
method public static java.util.List<java.lang.String!> getVersions(android.os.Bundle);
method public static androidx.autofill.inline.UiVersions.StylesBuilder newStylesBuilder();
field public static final String INLINE_UI_VERSION_1 = "androidx.autofill.inline.ui.version:v1";
@@ -80,7 +80,7 @@
package androidx.autofill.inline.common {
- @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public final class ImageViewStyle extends androidx.autofill.inline.common.ViewStyle {
+ @RequiresApi(api=android.os.Build.VERSION_CODES.R) public final class ImageViewStyle extends androidx.autofill.inline.common.ViewStyle {
}
public static final class ImageViewStyle.Builder {
@@ -96,7 +96,7 @@
method public androidx.autofill.inline.common.ImageViewStyle.Builder setTintList(android.content.res.ColorStateList);
}
- @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public final class TextViewStyle extends androidx.autofill.inline.common.ViewStyle {
+ @RequiresApi(api=android.os.Build.VERSION_CODES.R) public final class TextViewStyle extends androidx.autofill.inline.common.ViewStyle {
}
public static final class TextViewStyle.Builder {
@@ -112,7 +112,7 @@
method public androidx.autofill.inline.common.TextViewStyle.Builder setTypeface(String, int);
}
- @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public class ViewStyle {
+ @RequiresApi(api=android.os.Build.VERSION_CODES.R) public class ViewStyle {
}
public static final class ViewStyle.Builder {
@@ -128,7 +128,7 @@
package androidx.autofill.inline.v1 {
- @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public final class InlineSuggestionUi {
+ @RequiresApi(api=android.os.Build.VERSION_CODES.R) public final class InlineSuggestionUi {
method public static androidx.autofill.inline.v1.InlineSuggestionUi.Content.Builder newContentBuilder(android.app.PendingIntent);
method public static androidx.autofill.inline.v1.InlineSuggestionUi.Style.Builder newStyleBuilder();
}
diff --git a/autofill/autofill/api/restricted_1.1.0-alpha02.txt b/autofill/autofill/api/restricted_1.1.0-alpha02.txt
index 78c7008..852dd23 100644
--- a/autofill/autofill/api/restricted_1.1.0-alpha02.txt
+++ b/autofill/autofill/api/restricted_1.1.0-alpha02.txt
@@ -47,18 +47,18 @@
package androidx.autofill.inline {
- @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public final class Renderer {
+ @RequiresApi(api=android.os.Build.VERSION_CODES.R) public final class Renderer {
method public static android.app.PendingIntent? getAttributionIntent(android.app.slice.Slice);
method public static android.os.Bundle getSupportedInlineUiVersionsAsBundle();
method public static android.view.View? render(android.content.Context, android.app.slice.Slice, android.os.Bundle);
}
- @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public final class SuggestionHintConstants {
+ @RequiresApi(api=android.os.Build.VERSION_CODES.R) public final class SuggestionHintConstants {
field public static final String SUGGESTION_HINT_CLIPBOARD_CONTENT = "clipboardContent";
field public static final String SUGGESTION_HINT_SMART_REPLY = "smartReply";
}
- @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public final class UiVersions {
+ @RequiresApi(api=android.os.Build.VERSION_CODES.R) public final class UiVersions {
method public static java.util.List<java.lang.String!> getVersions(android.os.Bundle);
method public static androidx.autofill.inline.UiVersions.StylesBuilder newStylesBuilder();
field public static final String INLINE_UI_VERSION_1 = "androidx.autofill.inline.ui.version:v1";
@@ -83,7 +83,7 @@
package androidx.autofill.inline.common {
- @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public final class ImageViewStyle extends androidx.autofill.inline.common.ViewStyle {
+ @RequiresApi(api=android.os.Build.VERSION_CODES.R) public final class ImageViewStyle extends androidx.autofill.inline.common.ViewStyle {
}
public static final class ImageViewStyle.Builder {
@@ -99,7 +99,7 @@
method public androidx.autofill.inline.common.ImageViewStyle.Builder setTintList(android.content.res.ColorStateList);
}
- @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public final class TextViewStyle extends androidx.autofill.inline.common.ViewStyle {
+ @RequiresApi(api=android.os.Build.VERSION_CODES.R) public final class TextViewStyle extends androidx.autofill.inline.common.ViewStyle {
}
public static final class TextViewStyle.Builder {
@@ -115,7 +115,7 @@
method public androidx.autofill.inline.common.TextViewStyle.Builder setTypeface(String, int);
}
- @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public class ViewStyle {
+ @RequiresApi(api=android.os.Build.VERSION_CODES.R) public class ViewStyle {
}
public static final class ViewStyle.Builder {
@@ -131,7 +131,7 @@
package androidx.autofill.inline.v1 {
- @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public final class InlineSuggestionUi {
+ @RequiresApi(api=android.os.Build.VERSION_CODES.R) public final class InlineSuggestionUi {
method public static androidx.autofill.inline.v1.InlineSuggestionUi.Content.Builder newContentBuilder(android.app.PendingIntent);
method public static androidx.autofill.inline.v1.InlineSuggestionUi.Style.Builder newStyleBuilder();
}
diff --git a/autofill/autofill/api/restricted_current.txt b/autofill/autofill/api/restricted_current.txt
index 78c7008..852dd23 100644
--- a/autofill/autofill/api/restricted_current.txt
+++ b/autofill/autofill/api/restricted_current.txt
@@ -47,18 +47,18 @@
package androidx.autofill.inline {
- @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public final class Renderer {
+ @RequiresApi(api=android.os.Build.VERSION_CODES.R) public final class Renderer {
method public static android.app.PendingIntent? getAttributionIntent(android.app.slice.Slice);
method public static android.os.Bundle getSupportedInlineUiVersionsAsBundle();
method public static android.view.View? render(android.content.Context, android.app.slice.Slice, android.os.Bundle);
}
- @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public final class SuggestionHintConstants {
+ @RequiresApi(api=android.os.Build.VERSION_CODES.R) public final class SuggestionHintConstants {
field public static final String SUGGESTION_HINT_CLIPBOARD_CONTENT = "clipboardContent";
field public static final String SUGGESTION_HINT_SMART_REPLY = "smartReply";
}
- @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public final class UiVersions {
+ @RequiresApi(api=android.os.Build.VERSION_CODES.R) public final class UiVersions {
method public static java.util.List<java.lang.String!> getVersions(android.os.Bundle);
method public static androidx.autofill.inline.UiVersions.StylesBuilder newStylesBuilder();
field public static final String INLINE_UI_VERSION_1 = "androidx.autofill.inline.ui.version:v1";
@@ -83,7 +83,7 @@
package androidx.autofill.inline.common {
- @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public final class ImageViewStyle extends androidx.autofill.inline.common.ViewStyle {
+ @RequiresApi(api=android.os.Build.VERSION_CODES.R) public final class ImageViewStyle extends androidx.autofill.inline.common.ViewStyle {
}
public static final class ImageViewStyle.Builder {
@@ -99,7 +99,7 @@
method public androidx.autofill.inline.common.ImageViewStyle.Builder setTintList(android.content.res.ColorStateList);
}
- @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public final class TextViewStyle extends androidx.autofill.inline.common.ViewStyle {
+ @RequiresApi(api=android.os.Build.VERSION_CODES.R) public final class TextViewStyle extends androidx.autofill.inline.common.ViewStyle {
}
public static final class TextViewStyle.Builder {
@@ -115,7 +115,7 @@
method public androidx.autofill.inline.common.TextViewStyle.Builder setTypeface(String, int);
}
- @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public class ViewStyle {
+ @RequiresApi(api=android.os.Build.VERSION_CODES.R) public class ViewStyle {
}
public static final class ViewStyle.Builder {
@@ -131,7 +131,7 @@
package androidx.autofill.inline.v1 {
- @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public final class InlineSuggestionUi {
+ @RequiresApi(api=android.os.Build.VERSION_CODES.R) public final class InlineSuggestionUi {
method public static androidx.autofill.inline.v1.InlineSuggestionUi.Content.Builder newContentBuilder(android.app.PendingIntent);
method public static androidx.autofill.inline.v1.InlineSuggestionUi.Style.Builder newStyleBuilder();
}
diff --git a/autofill/autofill/src/androidTest/java/androidx/autofill/inline/RendererTest.java b/autofill/autofill/src/androidTest/java/androidx/autofill/inline/RendererTest.java
index 5917d76..c186e75 100644
--- a/autofill/autofill/src/androidTest/java/androidx/autofill/inline/RendererTest.java
+++ b/autofill/autofill/src/androidTest/java/androidx/autofill/inline/RendererTest.java
@@ -53,7 +53,7 @@
@SmallTest
@RunWith(AndroidJUnit4.class)
-@SdkSuppress(minSdkVersion = 29) // Needed only on 29 and above
+@SdkSuppress(minSdkVersion = 30) // Needed only on 30 and above
public class RendererTest {
@Rule
diff --git a/autofill/autofill/src/androidTest/java/androidx/autofill/inline/UiVersionsTest.java b/autofill/autofill/src/androidTest/java/androidx/autofill/inline/UiVersionsTest.java
index 64069bf..67c3d12 100644
--- a/autofill/autofill/src/androidTest/java/androidx/autofill/inline/UiVersionsTest.java
+++ b/autofill/autofill/src/androidTest/java/androidx/autofill/inline/UiVersionsTest.java
@@ -33,7 +33,7 @@
@SmallTest
@RunWith(AndroidJUnit4.class)
-@SdkSuppress(minSdkVersion = 29) // Needed only on 29 and above
+@SdkSuppress(minSdkVersion = 30) // Needed only on 30 and above
public class UiVersionsTest {
@Test
diff --git a/autofill/autofill/src/androidTest/java/androidx/autofill/inline/common/ImageViewStyleTest.java b/autofill/autofill/src/androidTest/java/androidx/autofill/inline/common/ImageViewStyleTest.java
index 1946c73..6fd19fb 100644
--- a/autofill/autofill/src/androidTest/java/androidx/autofill/inline/common/ImageViewStyleTest.java
+++ b/autofill/autofill/src/androidTest/java/androidx/autofill/inline/common/ImageViewStyleTest.java
@@ -34,7 +34,7 @@
@SmallTest
@RunWith(AndroidJUnit4.class)
-@SdkSuppress(minSdkVersion = 29) // Needed only on 29 and above
+@SdkSuppress(minSdkVersion = 30) // Needed only on 30 and above
public class ImageViewStyleTest {
private Context mContext;
diff --git a/autofill/autofill/src/androidTest/java/androidx/autofill/inline/common/TextViewStyleTest.java b/autofill/autofill/src/androidTest/java/androidx/autofill/inline/common/TextViewStyleTest.java
index 95aad04..b6a1fcf 100644
--- a/autofill/autofill/src/androidTest/java/androidx/autofill/inline/common/TextViewStyleTest.java
+++ b/autofill/autofill/src/androidTest/java/androidx/autofill/inline/common/TextViewStyleTest.java
@@ -34,7 +34,7 @@
@SmallTest
@RunWith(AndroidJUnit4.class)
-@SdkSuppress(minSdkVersion = 29) // Needed only on 29 and above
+@SdkSuppress(minSdkVersion = 30) // Needed only on 30 and above
public class TextViewStyleTest {
private Context mContext;
diff --git a/autofill/autofill/src/androidTest/java/androidx/autofill/inline/common/ViewStyleTest.java b/autofill/autofill/src/androidTest/java/androidx/autofill/inline/common/ViewStyleTest.java
index 7f8df02..dbd2222 100644
--- a/autofill/autofill/src/androidTest/java/androidx/autofill/inline/common/ViewStyleTest.java
+++ b/autofill/autofill/src/androidTest/java/androidx/autofill/inline/common/ViewStyleTest.java
@@ -35,7 +35,7 @@
@SmallTest
@RunWith(AndroidJUnit4.class)
-@SdkSuppress(minSdkVersion = 29) // Needed only on 29 and above
+@SdkSuppress(minSdkVersion = 30) // Needed only on 30 and above
public class ViewStyleTest {
private Context mContext;
diff --git a/autofill/autofill/src/androidTest/java/androidx/autofill/inline/v1/InlineSuggestionUiTest.java b/autofill/autofill/src/androidTest/java/androidx/autofill/inline/v1/InlineSuggestionUiTest.java
index 78a2d4f..e26e5af 100644
--- a/autofill/autofill/src/androidTest/java/androidx/autofill/inline/v1/InlineSuggestionUiTest.java
+++ b/autofill/autofill/src/androidTest/java/androidx/autofill/inline/v1/InlineSuggestionUiTest.java
@@ -65,7 +65,7 @@
@SmallTest
@RunWith(AndroidJUnit4.class)
-@SdkSuppress(minSdkVersion = 29) // Needed only on 29 and above
+@SdkSuppress(minSdkVersion = 30) // Needed only on 30 and above
public class InlineSuggestionUiTest {
private static final String TITLE = "Hello world!";
diff --git a/autofill/autofill/src/main/java/androidx/autofill/inline/Renderer.java b/autofill/autofill/src/main/java/androidx/autofill/inline/Renderer.java
index 72d11ab..0adb5cb 100644
--- a/autofill/autofill/src/main/java/androidx/autofill/inline/Renderer.java
+++ b/autofill/autofill/src/main/java/androidx/autofill/inline/Renderer.java
@@ -33,7 +33,7 @@
/**
* Renderer class responsible for rendering the inline suggestion UI.
*/
-@RequiresApi(api = Build.VERSION_CODES.Q) //TODO(b/147116534): Update to R.
+@RequiresApi(api = Build.VERSION_CODES.R)
public final class Renderer {
private static final String TAG = "Renderer";
diff --git a/autofill/autofill/src/main/java/androidx/autofill/inline/SuggestionHintConstants.java b/autofill/autofill/src/main/java/androidx/autofill/inline/SuggestionHintConstants.java
index 8894732..f5bbb00 100644
--- a/autofill/autofill/src/main/java/androidx/autofill/inline/SuggestionHintConstants.java
+++ b/autofill/autofill/src/main/java/androidx/autofill/inline/SuggestionHintConstants.java
@@ -32,7 +32,7 @@
* associated hints to help rank and evaluate the quality of the suggestion based on user action
* on them.
*/
-@RequiresApi(api = Build.VERSION_CODES.Q) //TODO(b/147116534): Update to R.
+@RequiresApi(api = Build.VERSION_CODES.R)
public final class SuggestionHintConstants {
private SuggestionHintConstants() {}
diff --git a/autofill/autofill/src/main/java/androidx/autofill/inline/UiVersions.java b/autofill/autofill/src/main/java/androidx/autofill/inline/UiVersions.java
index 6b0083d..d98a858 100644
--- a/autofill/autofill/src/main/java/androidx/autofill/inline/UiVersions.java
+++ b/autofill/autofill/src/main/java/androidx/autofill/inline/UiVersions.java
@@ -37,7 +37,7 @@
/**
* Defines the inline suggestion UI version constants.
*/
-@RequiresApi(api = Build.VERSION_CODES.Q) //TODO(b/147116534): Update to R.
+@RequiresApi(api = Build.VERSION_CODES.R)
public final class UiVersions {
/** @hide */
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
diff --git a/autofill/autofill/src/main/java/androidx/autofill/inline/VersionUtils.java b/autofill/autofill/src/main/java/androidx/autofill/inline/VersionUtils.java
index fb35f9c..4c53b2e 100644
--- a/autofill/autofill/src/main/java/androidx/autofill/inline/VersionUtils.java
+++ b/autofill/autofill/src/main/java/androidx/autofill/inline/VersionUtils.java
@@ -35,7 +35,7 @@
* @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
-@RequiresApi(api = Build.VERSION_CODES.Q) //TODO(b/147116534): Update to R.
+@RequiresApi(api = Build.VERSION_CODES.R)
public final class VersionUtils {
/**
* Bundle key pointing to a list representing UI versions.
diff --git a/autofill/autofill/src/main/java/androidx/autofill/inline/common/BundledStyle.java b/autofill/autofill/src/main/java/androidx/autofill/inline/common/BundledStyle.java
index b5e0523..57b36c8 100644
--- a/autofill/autofill/src/main/java/androidx/autofill/inline/common/BundledStyle.java
+++ b/autofill/autofill/src/main/java/androidx/autofill/inline/common/BundledStyle.java
@@ -32,7 +32,7 @@
* @hide
*/
@RestrictTo(LIBRARY)
-@RequiresApi(api = Build.VERSION_CODES.Q) //TODO(b/147116534): Update to R.
+@RequiresApi(api = Build.VERSION_CODES.R)
public abstract class BundledStyle {
@NonNull
diff --git a/autofill/autofill/src/main/java/androidx/autofill/inline/common/ImageViewStyle.java b/autofill/autofill/src/main/java/androidx/autofill/inline/common/ImageViewStyle.java
index c571052..20d1a11 100644
--- a/autofill/autofill/src/main/java/androidx/autofill/inline/common/ImageViewStyle.java
+++ b/autofill/autofill/src/main/java/androidx/autofill/inline/common/ImageViewStyle.java
@@ -30,7 +30,7 @@
/**
* Specifies the style for an {@link ImageView}.
*/
-@RequiresApi(api = Build.VERSION_CODES.Q) //TODO(b/147116534): Update to R.
+@RequiresApi(api = Build.VERSION_CODES.R)
public final class ImageViewStyle extends ViewStyle {
private static final String TAG = "ImageViewStyle";
diff --git a/autofill/autofill/src/main/java/androidx/autofill/inline/common/SlicedContent.java b/autofill/autofill/src/main/java/androidx/autofill/inline/common/SlicedContent.java
index a29f98f..ce9f062 100644
--- a/autofill/autofill/src/main/java/androidx/autofill/inline/common/SlicedContent.java
+++ b/autofill/autofill/src/main/java/androidx/autofill/inline/common/SlicedContent.java
@@ -35,7 +35,7 @@
* @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY)
-@RequiresApi(api = Build.VERSION_CODES.Q) //TODO(b/147116534): Update to R.
+@RequiresApi(api = Build.VERSION_CODES.R)
public abstract class SlicedContent implements UiVersions.Content {
static final Uri INLINE_SLICE_URI = Uri.parse("inline.slice");
diff --git a/autofill/autofill/src/main/java/androidx/autofill/inline/common/TextViewStyle.java b/autofill/autofill/src/main/java/androidx/autofill/inline/common/TextViewStyle.java
index a7d0293..97ac43e 100644
--- a/autofill/autofill/src/main/java/androidx/autofill/inline/common/TextViewStyle.java
+++ b/autofill/autofill/src/main/java/androidx/autofill/inline/common/TextViewStyle.java
@@ -32,7 +32,7 @@
/**
* Specifies the style for a {@link TextView}.
*/
-@RequiresApi(api = Build.VERSION_CODES.Q) //TODO(b/147116534): Update to R.
+@RequiresApi(api = Build.VERSION_CODES.R)
public final class TextViewStyle extends ViewStyle {
private static final String KEY_TEXT_VIEW_STYLE = "text_view_style";
diff --git a/autofill/autofill/src/main/java/androidx/autofill/inline/common/ViewStyle.java b/autofill/autofill/src/main/java/androidx/autofill/inline/common/ViewStyle.java
index a47c354..b3698b3 100644
--- a/autofill/autofill/src/main/java/androidx/autofill/inline/common/ViewStyle.java
+++ b/autofill/autofill/src/main/java/androidx/autofill/inline/common/ViewStyle.java
@@ -32,7 +32,7 @@
/**
* Specifies the style for a {@link View} or a {@link android.view.ViewGroup}.
*/
-@RequiresApi(api = Build.VERSION_CODES.Q) //TODO(b/147116534): Update to R.
+@RequiresApi(api = Build.VERSION_CODES.R)
public class ViewStyle extends BundledStyle {
private static final String KEY_VIEW_STYLE = "view_style";
diff --git a/autofill/autofill/src/main/java/androidx/autofill/inline/v1/InlineSuggestionUi.java b/autofill/autofill/src/main/java/androidx/autofill/inline/v1/InlineSuggestionUi.java
index 2b5037a..156fb78 100644
--- a/autofill/autofill/src/main/java/androidx/autofill/inline/v1/InlineSuggestionUi.java
+++ b/autofill/autofill/src/main/java/androidx/autofill/inline/v1/InlineSuggestionUi.java
@@ -64,7 +64,7 @@
* <p>A default theme will be applied on the UI. The client can use {@link Style} to customize
* the style for individual widgets as well as the overall UI background.
*/
-@RequiresApi(api = Build.VERSION_CODES.Q) //TODO(b/147116534): Update to R.
+@RequiresApi(api = Build.VERSION_CODES.R)
public final class InlineSuggestionUi {
private static final String TAG = "InlineSuggestionUi";
diff --git a/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt b/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt
index 9ba1497..c1ac1ed 100644
--- a/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt
@@ -79,7 +79,7 @@
val MEDIA2 = Version("1.1.0-alpha02")
val MEDIAROUTER = Version("1.2.0-alpha02")
val NAVIGATION = Version("2.4.0-alpha01")
- val PAGING = Version("3.0.0-alpha03")
+ val PAGING = Version("3.0.0-alpha04")
val PALETTE = Version("1.1.0-alpha01")
val PRINT = Version("1.1.0-alpha01")
val PERCENTLAYOUT = Version("1.1.0-alpha01")
diff --git a/buildSrc/src/main/kotlin/androidx/build/studio/StudioTask.kt b/buildSrc/src/main/kotlin/androidx/build/studio/StudioTask.kt
index 55a4340..f07253d 100644
--- a/buildSrc/src/main/kotlin/androidx/build/studio/StudioTask.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/studio/StudioTask.kt
@@ -94,6 +94,12 @@
protected abstract val ideaProperties: File
/**
+ * The studio.vmoptions file that we want to start Studio with
+ */
+ @get:Internal
+ open val vmOptions = File(project.getSupportRootFolder(), "development/studio/studio.vmoptions")
+
+ /**
* [StudioArchiveCreator] that will ensure that an archive is present at [studioArchivePath]
*/
@get:Internal
@@ -128,8 +134,6 @@
}
private fun launchStudio() {
- val vmOptions = File(project.getSupportRootFolder(), "development/studio/studio.vmoptions")
-
ProcessBuilder().apply {
inheritIO()
with(platformUtilities) { command(launchCommandArguments) }
@@ -226,5 +230,7 @@
* Task for launching studio in a playground project
*/
open class PlaygroundStudioTask : RootStudioTask() {
- override val installParentDir get() = project.rootProject.projectDir.resolve("..")
+ override val installParentDir get() = projectRoot.resolve("..")
+ override val ideaProperties get() = projectRoot.resolve("../playground-common/idea.properties")
+ override val vmOptions get() = projectRoot.resolve("../playground-common/studio.vmoptions")
}
diff --git a/camera/camera-core/src/androidTest/java/androidx/camera/core/ProcessingImageReaderDeviceTest.kt b/camera/camera-core/src/androidTest/java/androidx/camera/core/ProcessingImageReaderDeviceTest.kt
index 33cf679..bfa7b2f 100644
--- a/camera/camera-core/src/androidTest/java/androidx/camera/core/ProcessingImageReaderDeviceTest.kt
+++ b/camera/camera-core/src/androidTest/java/androidx/camera/core/ProcessingImageReaderDeviceTest.kt
@@ -99,7 +99,7 @@
)
processingImageReader.setCaptureBundle(mCaptureBundle)
- val imageWriter = ImageWriter.newInstance(processingImageReader.surface, 2)
+ val imageWriter = ImageWriter.newInstance(processingImageReader.surface!!, 2)
val callback = processingImageReader.cameraCaptureCallback!!
// Trigger the bundle of images required for processing to occur
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/AndroidImageReaderProxy.java b/camera/camera-core/src/main/java/androidx/camera/core/AndroidImageReaderProxy.java
index 7acea606..a2ac50e 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/AndroidImageReaderProxy.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/AndroidImageReaderProxy.java
@@ -123,7 +123,7 @@
return mImageReader.getMaxImages();
}
- @NonNull
+ @Nullable
@Override
public synchronized Surface getSurface() {
return mImageReader.getSurface();
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 da19d29..4db48a4 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
@@ -18,6 +18,7 @@
import android.app.Application;
import android.content.Context;
+import android.content.ContextWrapper;
import android.content.res.Resources;
import android.os.Handler;
import android.os.HandlerThread;
@@ -96,7 +97,9 @@
private CameraFactory mCameraFactory;
private CameraDeviceSurfaceManager mSurfaceManager;
private UseCaseConfigFactory mDefaultConfigFactory;
- private Application mApplication;
+ // TODO(b/161302102): Remove the stored context. Only make use of the context within the
+ // called method.
+ private Context mAppContext;
@GuardedBy("mInitializeLock")
private InternalInitState mInitState = InternalInitState.UNINITIALIZED;
@@ -371,14 +374,15 @@
/**
* Returns the context used for CameraX.
- *
+ * @deprecated This method will be removed. New code should not rely on it. See b/161302102.
* @hide
*/
@RestrictTo(Scope.LIBRARY_GROUP)
@NonNull
+ @Deprecated
public static Context getContext() {
CameraX cameraX = checkInitialized();
- return cameraX.mApplication;
+ return cameraX.mAppContext;
}
/**
@@ -453,10 +457,9 @@
}
if (instanceFuture == null) {
- Application app = (Application) context.getApplicationContext();
if (!isConfigured) {
// Attempt initialization through Application or Resources
- CameraXConfig.Provider configProvider = getConfigProvider(app);
+ CameraXConfig.Provider configProvider = getConfigProvider(context);
if (configProvider == null) {
throw new IllegalStateException("CameraX is not configured properly. "
+ "The most likely cause is you did not include a default "
@@ -466,7 +469,7 @@
configureInstanceLocked(configProvider);
}
- initializeInstanceLocked(app);
+ initializeInstanceLocked(context);
instanceFuture = getInstanceLocked();
}
@@ -475,15 +478,16 @@
}
@Nullable
- private static CameraXConfig.Provider getConfigProvider(@NonNull Application app) {
+ private static CameraXConfig.Provider getConfigProvider(@NonNull Context context) {
CameraXConfig.Provider configProvider = null;
- if (app instanceof CameraXConfig.Provider) {
+ Application application = getApplicationFromContext(context);
+ if (application instanceof CameraXConfig.Provider) {
// Application is a CameraXConfig.Provider, use this directly
- configProvider = (CameraXConfig.Provider) app;
+ configProvider = (CameraXConfig.Provider) application;
} else {
// Try to retrieve the CameraXConfig.Provider through the application's resources
try {
- Resources resources = app.getResources();
+ Resources resources = context.getApplicationContext().getResources();
String defaultProviderClassName =
resources.getString(
R.string.androidx_camera_default_config_provider);
@@ -497,7 +501,8 @@
| InstantiationException
| InvocationTargetException
| NoSuchMethodException
- | IllegalAccessException e) {
+ | IllegalAccessException
+ | NullPointerException e) {
Log.e(TAG, "Failed to retrieve default CameraXConfig.Provider from "
+ "resources", e);
}
@@ -506,6 +511,30 @@
return configProvider;
}
+ /**
+ * Attempts to retrieve an {@link Application} object from the provided {@link Context}.
+ *
+ * <p>Because the contract does not specify that {@code Context.getApplicationContext()} must
+ * return an {@code Application} object, this method will attempt to retrieve the
+ * {@code Application} by unwrapping the context via {@link ContextWrapper#getBaseContext()} if
+ * {@code Context.getApplicationContext()}} does not succeed.
+ */
+ @Nullable
+ private static Application getApplicationFromContext(@NonNull Context context) {
+ Application application = null;
+ Context appContext = context.getApplicationContext();
+ while (appContext instanceof ContextWrapper) {
+ if (appContext instanceof Application) {
+ application = (Application) appContext;
+ break;
+ } else {
+ appContext = ((ContextWrapper) appContext).getBaseContext();
+ }
+ }
+
+ return application;
+ }
+
@NonNull
private static ListenableFuture<CameraX> getInstance() {
synchronized (INSTANCE_LOCK) {
@@ -590,7 +619,12 @@
cameraExecutor.execute(() -> {
InitializationException initException = null;
try {
- mApplication = (Application) context.getApplicationContext();
+ // TODO(b/161302102): Remove the stored context. Only make use of
+ // the context within the called method.
+ mAppContext = getApplicationFromContext(context);
+ if (mAppContext == null) {
+ mAppContext = context.getApplicationContext();
+ }
CameraFactory.Provider cameraFactoryProvider =
mCameraXConfig.getCameraFactoryProvider(null);
if (cameraFactoryProvider == null) {
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/MetadataImageReader.java b/camera/camera-core/src/main/java/androidx/camera/core/MetadataImageReader.java
index 7b5fa93..0b601ab 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/MetadataImageReader.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/MetadataImageReader.java
@@ -228,7 +228,7 @@
}
}
- @NonNull
+ @Nullable
@Override
public Surface getSurface() {
synchronized (mLock) {
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/ProcessingImageReader.java b/camera/camera-core/src/main/java/androidx/camera/core/ProcessingImageReader.java
index 636a9c4..00047f0 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/ProcessingImageReader.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/ProcessingImageReader.java
@@ -242,7 +242,7 @@
}
}
- @NonNull
+ @Nullable
@Override
public Surface getSurface() {
synchronized (mLock) {
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/SafeCloseImageReaderProxy.java b/camera/camera-core/src/main/java/androidx/camera/core/SafeCloseImageReaderProxy.java
index 4aac531..f4dae65 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/SafeCloseImageReaderProxy.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/SafeCloseImageReaderProxy.java
@@ -42,7 +42,7 @@
@GuardedBy("mLock")
private final ImageReaderProxy mImageReaderProxy;
- @NonNull
+ @Nullable
private final Surface mSurface;
// Called after images are closed to check if the ImageReaderProxy should be closed
@@ -87,7 +87,9 @@
@Override
public void close() {
synchronized (mLock) {
- mSurface.release();
+ if (mSurface != null) {
+ mSurface.release();
+ }
mImageReaderProxy.close();
}
}
@@ -155,7 +157,7 @@
}
}
- @NonNull
+ @Nullable
@Override
public Surface getSurface() {
synchronized (mLock) {
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/impl/ImageReaderProxy.java b/camera/camera-core/src/main/java/androidx/camera/core/impl/ImageReaderProxy.java
index d72c89a..4b2d253 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/impl/ImageReaderProxy.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/impl/ImageReaderProxy.java
@@ -92,7 +92,7 @@
*
* <p>@see {@link ImageReader#getSurface()}.
*/
- @NonNull
+ @Nullable
Surface getSurface();
/**
diff --git a/camera/camera-extensions/src/main/java/androidx/camera/extensions/CameraUtil.java b/camera/camera-extensions/src/main/java/androidx/camera/extensions/CameraUtil.java
index 71862dd..fc577e0 100644
--- a/camera/camera-extensions/src/main/java/androidx/camera/extensions/CameraUtil.java
+++ b/camera/camera-extensions/src/main/java/androidx/camera/extensions/CameraUtil.java
@@ -56,6 +56,8 @@
static CameraCharacteristics getCameraCharacteristics(String cameraId) {
Preconditions.checkNotNull(cameraId, "Invalid camera id.");
+ // TODO(b/161302102): Remove usage of deprecated CameraX.getContext()
+ @SuppressWarnings("deprecation")
Context context = CameraX.getContext();
CameraManagerCompat cameraManager = CameraManagerCompat.from(context);
CameraCharacteristics cameraCharacteristics = null;
diff --git a/camera/camera-extensions/src/main/java/androidx/camera/extensions/ExtensionsManager.java b/camera/camera-extensions/src/main/java/androidx/camera/extensions/ExtensionsManager.java
index dca706a..a82f15b 100644
--- a/camera/camera-extensions/src/main/java/androidx/camera/extensions/ExtensionsManager.java
+++ b/camera/camera-extensions/src/main/java/androidx/camera/extensions/ExtensionsManager.java
@@ -15,6 +15,7 @@
*/
package androidx.camera.extensions;
+import android.content.Context;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
@@ -113,8 +114,10 @@
return CallbackToFutureAdapter.getFuture(completer -> {
try {
- InitializerImpl.init(VersionName.getCurrentVersion().toVersionString(),
- CameraX.getContext(),
+ // TODO(b/161302102): Remove usage of deprecated CameraX.getContext()
+ @SuppressWarnings("deprecation")
+ Context context = CameraX.getContext();
+ InitializerImpl.init(VersionName.getCurrentVersion().toVersionString(), context,
new InitializerImpl.OnExtensionsInitializedCallback() {
@Override
public void onSuccess() {
diff --git a/camera/camera-extensions/src/main/java/androidx/camera/extensions/ImageCaptureExtender.java b/camera/camera-extensions/src/main/java/androidx/camera/extensions/ImageCaptureExtender.java
index 527b3e2..a7b7030 100644
--- a/camera/camera-extensions/src/main/java/androidx/camera/extensions/ImageCaptureExtender.java
+++ b/camera/camera-extensions/src/main/java/androidx/camera/extensions/ImageCaptureExtender.java
@@ -16,6 +16,7 @@
package androidx.camera.extensions;
+import android.content.Context;
import android.hardware.camera2.CameraCharacteristics;
import android.util.Log;
import android.util.Pair;
@@ -221,7 +222,10 @@
if (mActive.get()) {
CameraCharacteristics cameraCharacteristics = CameraUtil.getCameraCharacteristics(
cameraId);
- mImpl.onInit(cameraId, cameraCharacteristics, CameraX.getContext());
+ // TODO(b/161302102): Remove usage of deprecated CameraX.getContext()
+ @SuppressWarnings("deprecation")
+ Context context = CameraX.getContext();
+ mImpl.onInit(cameraId, cameraCharacteristics, context);
}
}
diff --git a/camera/camera-extensions/src/main/java/androidx/camera/extensions/PreviewExtender.java b/camera/camera-extensions/src/main/java/androidx/camera/extensions/PreviewExtender.java
index 39e461a..6f28ce4 100644
--- a/camera/camera-extensions/src/main/java/androidx/camera/extensions/PreviewExtender.java
+++ b/camera/camera-extensions/src/main/java/androidx/camera/extensions/PreviewExtender.java
@@ -16,6 +16,7 @@
package androidx.camera.extensions;
+import android.content.Context;
import android.hardware.camera2.CameraCharacteristics;
import android.util.Log;
import android.util.Pair;
@@ -236,7 +237,10 @@
if (mActive) {
CameraCharacteristics cameraCharacteristics =
CameraUtil.getCameraCharacteristics(cameraId);
- mImpl.onInit(cameraId, cameraCharacteristics, CameraX.getContext());
+ // TODO(b/161302102): Remove usage of deprecated CameraX.getContext()
+ @SuppressWarnings("deprecation")
+ Context context = CameraX.getContext();
+ mImpl.onInit(cameraId, cameraCharacteristics, context);
}
}
}
diff --git a/camera/camera-lifecycle/build.gradle b/camera/camera-lifecycle/build.gradle
index 17cf0959..57fe2aa 100644
--- a/camera/camera-lifecycle/build.gradle
+++ b/camera/camera-lifecycle/build.gradle
@@ -44,6 +44,7 @@
androidTestImplementation(project(":annotation:annotation-experimental"))
androidTestImplementation(project(":concurrent:concurrent-futures-ktx"))
androidTestImplementation(project(":internal-testutils-truth"))
+ androidTestImplementation("org.jetbrains.kotlinx:atomicfu:0.13.1")
}
android {
diff --git a/camera/camera-lifecycle/src/androidTest/java/androidx/camera/lifecycle/ProcessCameraProviderTest.kt b/camera/camera-lifecycle/src/androidTest/java/androidx/camera/lifecycle/ProcessCameraProviderTest.kt
index 436dbf3..72fe277 100644
--- a/camera/camera-lifecycle/src/androidTest/java/androidx/camera/lifecycle/ProcessCameraProviderTest.kt
+++ b/camera/camera-lifecycle/src/androidTest/java/androidx/camera/lifecycle/ProcessCameraProviderTest.kt
@@ -16,7 +16,10 @@
package androidx.camera.lifecycle
+import android.app.Application
import android.content.Context
+import android.content.ContextWrapper
+import android.content.res.Resources
import androidx.annotation.experimental.UseExperimental
import androidx.camera.core.CameraSelector
import androidx.camera.core.CameraXConfig
@@ -35,6 +38,7 @@
import androidx.test.filters.SmallTest
import androidx.testutils.assertThrows
import com.google.common.truth.Truth.assertThat
+import kotlinx.atomicfu.atomic
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.asExecutor
@@ -45,7 +49,7 @@
@SmallTest
class ProcessCameraProviderTest {
- private val context = ApplicationProvider.getApplicationContext() as android.content.Context
+ private val context = ApplicationProvider.getApplicationContext() as Context
private val lifecycleOwner0 = FakeLifecycleOwner()
private val lifecycleOwner1 = FakeLifecycleOwner()
@@ -72,6 +76,55 @@
}
}
+ @Test
+ fun canGetInstance_fromResources() = runBlocking {
+ // Wrap the context with a TestAppContextWrapper. This returns customized resources which
+ // will provide a CameraXConfig.Provider.
+ val contextWrapper = TestAppContextWrapper(context)
+ provider = ProcessCameraProvider.getInstance(contextWrapper).await()
+ assertThat(provider).isNotNull()
+ assertThat(contextWrapper.testResources.defaultProviderRetrieved).isTrue()
+ }
+
+ @UseExperimental(ExperimentalCameraProviderConfiguration::class)
+ @Test
+ fun configuredGetInstance_doesNotUseResources() {
+ ProcessCameraProvider.configureInstance(FakeAppConfig.create())
+ runBlocking {
+ // Wrap the context with a TestAppContextWrapper. This returns customized resources
+ // which we can check whether a default config provider was provided.
+ val contextWrapper = TestAppContextWrapper(context)
+ provider = ProcessCameraProvider.getInstance(contextWrapper).await()
+ assertThat(provider).isNotNull()
+ assertThat(contextWrapper.testResources.defaultProviderRetrieved).isFalse()
+ }
+ }
+
+ @UseExperimental(ExperimentalCameraProviderConfiguration::class)
+ @Test
+ fun configuredGetInstance_doesNotUseApplication() {
+ ProcessCameraProvider.configureInstance(FakeAppConfig.create())
+ runBlocking {
+ // Wrap the context with a TestAppContextWrapper and provide a context with an
+ // Application that implements CameraXConfig.Provider. Because the
+ // ProcessCameraProvider is already configured, this Application should not be used.
+ val testApp = TestApplication()
+ val contextWrapper = TestAppContextWrapper(context, testApp)
+ provider = ProcessCameraProvider.getInstance(contextWrapper).await()
+ assertThat(provider).isNotNull()
+ assertThat(testApp.providerUsed).isFalse()
+ }
+ }
+
+ @Test
+ fun unconfiguredGetInstance_usesApplicationProvider() = runBlocking {
+ val testApp = TestApplication()
+ val contextWrapper = TestAppContextWrapper(context, testApp)
+ provider = ProcessCameraProvider.getInstance(contextWrapper).await()
+ assertThat(provider).isNotNull()
+ assertThat(testApp.providerUsed).isTrue()
+ }
+
@UseExperimental(ExperimentalCameraProviderConfiguration::class)
@Test
fun multipleConfigureInstance_throwsISE() {
@@ -470,3 +523,47 @@
}
}
}
+
+private class TestAppContextWrapper(base: Context, val app: Application? = null) : ContextWrapper
+ (base) {
+
+ val testResources = TestResources(base.resources)
+
+ override fun getApplicationContext(): Context? {
+ return app ?: this
+ }
+
+ override fun getResources(): Resources {
+ return testResources
+ }
+}
+
+private class TestApplication : Application(), CameraXConfig.Provider {
+ private val used = atomic(false)
+ val providerUsed: Boolean
+ get() = used.value
+
+ override fun getCameraXConfig(): CameraXConfig {
+ used.value = true
+ return FakeAppConfig.create()
+ }
+}
+
+@Suppress("DEPRECATION")
+private class TestResources(base: Resources) : Resources(
+ base.assets, base.displayMetrics, base
+ .configuration
+) {
+
+ private val retrieved = atomic(false)
+ val defaultProviderRetrieved: Boolean
+ get() = retrieved.value
+
+ override fun getString(id: Int): String {
+ if (id == androidx.camera.core.R.string.androidx_camera_default_config_provider) {
+ retrieved.value = true
+ return FakeAppConfig.DefaultProvider::class.java.name
+ }
+ return super.getString(id)
+ }
+}
diff --git a/camera/camera-testing/src/main/java/androidx/camera/testing/activity/CameraXTestActivity.java b/camera/camera-testing/src/main/java/androidx/camera/testing/activity/CameraXTestActivity.java
index 16cbb4b..70ef57d 100644
--- a/camera/camera-testing/src/main/java/androidx/camera/testing/activity/CameraXTestActivity.java
+++ b/camera/camera-testing/src/main/java/androidx/camera/testing/activity/CameraXTestActivity.java
@@ -129,7 +129,7 @@
new CameraSelector.Builder().requireLensFacing(mLensFacing).build();
try {
- CameraX cameraX = CameraX.getOrCreateInstance(CameraX.getContext()).get();
+ CameraX cameraX = CameraX.getOrCreateInstance(this).get();
LinkedHashSet<CameraInternal> cameras =
cameraSelector.filter(cameraX.getCameraRepository().getCameras());
mCameraUseCaseAdapter = new CameraUseCaseAdapter(cameras.iterator().next(), cameras,
diff --git a/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeAppConfig.java b/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeAppConfig.java
index 96be3b1f..db7b8d8 100644
--- a/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeAppConfig.java
+++ b/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeAppConfig.java
@@ -17,6 +17,7 @@
package androidx.camera.testing.fakes;
import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
import androidx.camera.core.CameraSelector;
import androidx.camera.core.CameraXConfig;
import androidx.camera.core.impl.CameraDeviceSurfaceManager;
@@ -63,4 +64,15 @@
return appConfigBuilder.build();
}
+
+ /** @hide */
+ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+ public static final class DefaultProvider implements CameraXConfig.Provider {
+
+ @NonNull
+ @Override
+ public CameraXConfig getCameraXConfig() {
+ return create();
+ }
+ }
}
diff --git a/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeImageReaderProxy.java b/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeImageReaderProxy.java
index 5e30252..7e70b84 100644
--- a/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeImageReaderProxy.java
+++ b/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeImageReaderProxy.java
@@ -17,7 +17,6 @@
package androidx.camera.testing.fakes;
import android.graphics.ImageFormat;
-import android.graphics.SurfaceTexture;
import android.view.Surface;
import androidx.annotation.NonNull;
@@ -158,14 +157,9 @@
return mMaxImages;
}
- @NonNull
+ @Nullable
@Override
public Surface getSurface() {
- // Create a Surface using a SurfaceTexture since getSurface() requires a non-null value.
- // However, this Surface shouldn't really be used since it isn't hooked up to anything
- if (mSurface == null) {
- mSurface = new Surface(new SurfaceTexture(0));
- }
return mSurface;
}
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 dd25b6e..b692e83 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
@@ -58,6 +58,19 @@
* <p> This class manages the Surface lifecycle, as well as the preview aspect ratio and
* orientation. Internally, it uses either a {@link android.view.TextureView} or
* {@link android.view.SurfaceView} to display the camera feed.
+ *
+ * <p> If {@link PreviewView} uses a {@link android.view.SurfaceView} to display the preview
+ * stream, be careful when overlapping a {@link View} that's initially not visible (either
+ * {@link View#INVISIBLE} or {@link View#GONE}) on top of it. When the
+ * {@link android.view.SurfaceView} is attached to the display window, it calls
+ * {@link android.view.ViewParent#requestTransparentRegion(View)} which requests a computation of
+ * the transparent regions on the display. At this point, the {@link View} isn't visible, causing
+ * the overlapped region between the {@link android.view.SurfaceView} and the {@link View} to be
+ * considered transparent. Later if the {@link View} becomes {@linkplain View#VISIBLE visible}, it
+ * will not be displayed on top of {@link android.view.SurfaceView}. A way around this is to call
+ * {@link android.view.ViewParent#requestTransparentRegion(View)} right after making the
+ * {@link View} visible, or initially hiding the {@link View} by setting its
+ * {@linkplain View#setAlpha(float) opacity} to 0, then setting it to 1.0F to show it.
*/
public class PreviewView extends FrameLayout {
diff --git a/camera/integration-tests/camerapipetestapp/build.gradle b/camera/integration-tests/camerapipetestapp/build.gradle
index 62e57cb..9a95fa2 100644
--- a/camera/integration-tests/camerapipetestapp/build.gradle
+++ b/camera/integration-tests/camerapipetestapp/build.gradle
@@ -58,6 +58,7 @@
// Testing framework
testImplementation(JUNIT)
+ testImplementation(TRUTH)
androidTestImplementation(ANDROIDX_TEST_EXT_JUNIT)
androidTestImplementation(ANDROIDX_TEST_CORE)
androidTestImplementation(ANDROIDX_TEST_RUNNER)
diff --git a/camera/integration-tests/camerapipetestapp/src/main/java/androidx/camera/integration/camera2/pipe/mappings/CameraMetadataKey.kt b/camera/integration-tests/camerapipetestapp/src/main/java/androidx/camera/integration/camera2/pipe/mappings/CameraMetadataKey.kt
new file mode 100644
index 0000000..8d0297b
--- /dev/null
+++ b/camera/integration-tests/camerapipetestapp/src/main/java/androidx/camera/integration/camera2/pipe/mappings/CameraMetadataKey.kt
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.camera.integration.camera2.pipe.mappings
+
+enum class CameraMetadataKey {
+ LENS_FOCUS_DISTANCE,
+ LENS_FOCAL_LENGTH,
+ CONTROL_AE_MODE,
+ STATISTICS_FACES
+}
\ No newline at end of file
diff --git a/camera/integration-tests/camerapipetestapp/src/main/java/androidx/camera/integration/camera2/pipe/mappings/DataTransformations1D.kt b/camera/integration-tests/camerapipetestapp/src/main/java/androidx/camera/integration/camera2/pipe/mappings/DataTransformations1D.kt
new file mode 100644
index 0000000..e2be233
--- /dev/null
+++ b/camera/integration-tests/camerapipetestapp/src/main/java/androidx/camera/integration/camera2/pipe/mappings/DataTransformations1D.kt
@@ -0,0 +1,117 @@
+/*
+ * Copyright 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.camera.integration.camera2.pipe.mappings
+
+import android.hardware.camera2.params.Face
+import androidx.camera.integration.camera2.pipe.mappings.CameraMetadataKey.CONTROL_AE_MODE
+import androidx.camera.integration.camera2.pipe.mappings.CameraMetadataKey.LENS_FOCUS_DISTANCE
+import androidx.camera.integration.camera2.pipe.mappings.CameraMetadataKey.STATISTICS_FACES
+
+/**
+ * Transforms camera metadata into numbers to be visualized as 1D graphics
+ */
+object DataTransformations1D {
+
+ /**
+ * Tries to apply a specific transformation. If one exists, the resulting Number is returned.
+ * If none exist, we try to apply a type based transformation. If one exists, the resulting
+ * Number is returned. Otherwise, an error expressing the transformation is not supported is
+ * thrown.
+ */
+ fun convert(key: CameraMetadataKey, keyData: Any?): Number? {
+
+ specificTransformationMap[key]?.let {
+ return it(keyData)
+ }
+
+ return typeTransformation(key, keyData)
+ }
+
+ /**
+ * When converting data, this is the first transformation we will try to apply. It maps specific
+ * keys to a lambda function that can transform the corresponding data into a number
+ */
+ private val specificTransformationMap: HashMap<CameraMetadataKey, (Any?) -> Number?> =
+ hashMapOf(
+ /**
+ * LENS_FOCUS_DISTANCE has a specific transformation that maps Float inputs to their
+ * reciprocals, maps null input to null, and throws an IllegalArgumentException if the input
+ * is not of the expected type Float?
+ */
+ LENS_FOCUS_DISTANCE to { keyData: Any? ->
+ when (keyData) {
+ is Float -> 1 / keyData
+ else -> nullOrInvalid(LENS_FOCUS_DISTANCE, keyData)
+ }
+ },
+
+ /**
+ * CONTROL_AE_MODE has a specific transformation that upon an Int input returns that input
+ * as is since each Int corresponds to a mode (The strings describing these modes will be
+ * passed as a map into the data source for the visualization directly). Upon a null input,
+ * null will be returned, and upon any other input, an exception will be thrown
+ */
+ CONTROL_AE_MODE to { keyData: Any? ->
+ when (keyData) {
+ is Int -> keyData
+ else -> nullOrInvalid(CONTROL_AE_MODE, keyData)
+ }
+ },
+
+ /**
+ * STATISTICS_FACES has a specific transformation that maps Array<Face> inputs to array
+ * size of that input, maps null input to null, and throws an IllegalArgumentException if
+ * the input is not an Array, or is an Array of the wrong type
+ */
+ STATISTICS_FACES to { keyData: Any? ->
+ when (keyData) {
+ is Array<*> -> {
+ if (keyData.isArrayOf<Face>()) {
+ keyData.size
+ } else {
+ throw IllegalArgumentException("keyData for $STATISTICS_FACES expected " +
+ "to be Array<Face>, but was ${keyData::class.simpleName}")
+ }
+ }
+ else -> nullOrInvalid(STATISTICS_FACES, keyData)
+ }
+ }
+ )
+
+ /**
+ * When converting data, this function will be called only if the camera metadata key has no
+ * specific transformation defined in the specificTransformationMap above. This function
+ * converts keyData based on its type, and throws an exception if the type is not supported
+ */
+ private fun typeTransformation(key: CameraMetadataKey, keyData: Any?): Number? {
+ return when (keyData) {
+ is Number -> keyData
+ else -> nullOrInvalid(key, keyData)
+ }
+ }
+
+ /**
+ * This function is called when keyData doesn't match any valid type. If keyData is null,
+ * null is returned, but if keyData is some other type, we throw an Illegal Argument
+ * Exception explaining transformation is not supported for the keyData's type
+ */
+ private fun nullOrInvalid(key: CameraMetadataKey, keyData: Any?): Number? {
+ if (keyData == null) return null
+ throw IllegalArgumentException("keyData of type ${keyData::class.simpleName} for $key is" +
+ " not supported")
+ }
+}
\ No newline at end of file
diff --git a/camera/integration-tests/camerapipetestapp/src/test/java/androidx/camera/integration/camera2/pipe/DataTransformations1DTests.kt b/camera/integration-tests/camerapipetestapp/src/test/java/androidx/camera/integration/camera2/pipe/DataTransformations1DTests.kt
new file mode 100644
index 0000000..8bb90b7
--- /dev/null
+++ b/camera/integration-tests/camerapipetestapp/src/test/java/androidx/camera/integration/camera2/pipe/DataTransformations1DTests.kt
@@ -0,0 +1,132 @@
+/*
+ * Copyright 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.camera.integration.camera2.pipe
+
+import androidx.camera.integration.camera2.pipe.mappings.CameraMetadataKey.CONTROL_AE_MODE
+import androidx.camera.integration.camera2.pipe.mappings.CameraMetadataKey.LENS_FOCAL_LENGTH
+import androidx.camera.integration.camera2.pipe.mappings.CameraMetadataKey.LENS_FOCUS_DISTANCE
+import androidx.camera.integration.camera2.pipe.mappings.CameraMetadataKey.STATISTICS_FACES
+import androidx.camera.integration.camera2.pipe.mappings.DataTransformations1D
+import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+
+class DataTransformations1DTests {
+
+ /**
+ * LENS_FOCUS_DISTANCE tests
+ */
+ @Test
+ fun lensFocusDistance_nullTest() {
+ assertThat(DataTransformations1D.convert(LENS_FOCUS_DISTANCE, null)).isNull()
+ }
+
+ @Test
+ fun lensFocusDistance_floatTest() {
+ val nums: MutableList<Float> = mutableListOf(1f, 32f, 64f, 1024f)
+ val transformedNums: MutableList<Float> = mutableListOf(1 / 1f, 1 / 32f, 1 / 64f, 1 / 1024f)
+
+ (0 until nums.size).forEach {
+ val transformedData = DataTransformations1D.convert(LENS_FOCUS_DISTANCE, nums[it])
+ assertThat(transformedData is Float).isTrue()
+ assertThat(transformedData as Float)
+ .isWithin(0.0001f)
+ .of(transformedNums[it])
+ }
+ }
+
+ @Test(expected = IllegalArgumentException::class)
+ fun lensFocusDistance_intTest() {
+ DataTransformations1D.convert(LENS_FOCUS_DISTANCE, 1)
+ }
+
+ @Test(expected = IllegalArgumentException::class)
+ fun lensFocusDistance_booleanTest() {
+ DataTransformations1D.convert(LENS_FOCUS_DISTANCE, true)
+ }
+
+ @Test(expected = IllegalArgumentException::class)
+ fun lensFocusDistance_arrayTest() {
+ DataTransformations1D.convert(LENS_FOCUS_DISTANCE, arrayListOf(1, 2))
+ }
+
+ /**
+ * CONTROL_AE_MODE tests
+ */
+ @Test
+ fun controlAEMode_nullTest() {
+ assertThat(DataTransformations1D.convert(CONTROL_AE_MODE, null)).isNull()
+ }
+
+ @Test
+ fun controlAEMode_arrayOfIntTest() {
+ val keyData = 4
+ val transformedData = DataTransformations1D.convert(CONTROL_AE_MODE, keyData)
+ assertThat(transformedData).isEqualTo(keyData)
+ }
+
+ @Test(expected = IllegalArgumentException::class)
+ fun controlAEMode_floatTest() {
+ DataTransformations1D.convert(CONTROL_AE_MODE, 18F)
+ }
+
+ /**
+ * STATISTICS_FACES tests
+ */
+ @Test
+ fun statisticsFaces_nullTest() {
+ assertThat(DataTransformations1D.convert(STATISTICS_FACES, null)).isNull()
+ }
+
+ @Test(expected = IllegalArgumentException::class)
+ fun statisticsFaces_arrayOfIntTest() {
+ val faces: Array<Int> = arrayOf()
+ DataTransformations1D.convert(STATISTICS_FACES, faces)
+ }
+
+ @Test(expected = IllegalArgumentException::class)
+ fun statisticsFaces_nonArrayTest() {
+ DataTransformations1D.convert(STATISTICS_FACES, 18L)
+ }
+
+ /**
+ * Tests for keys with no specific transformation e.g. LENS_FOCAL_LENGTH
+ */
+ @Test
+ fun lensFocalLength_nullTest() {
+ assertThat(DataTransformations1D.convert(LENS_FOCAL_LENGTH, null)).isNull()
+ }
+
+ @Test
+ fun lensFocalLength_numberTest() {
+ val keyDataFloat = 29.9f
+ val transformedDataFloat = DataTransformations1D.convert(LENS_FOCAL_LENGTH, keyDataFloat)
+ assertThat(transformedDataFloat is Float).isTrue()
+ assertThat(keyDataFloat)
+ .isWithin(0.0001f)
+ .of(transformedDataFloat as Float)
+
+ val keyDataInt = 29
+ val transformedDataInt = DataTransformations1D.convert(LENS_FOCAL_LENGTH, keyDataInt)
+ assertThat(transformedDataInt is Int).isTrue()
+ assertThat(keyDataInt).isEqualTo(transformedDataInt)
+ }
+
+ @Test(expected = IllegalArgumentException::class)
+ fun lensFocalLength_booleanTest() {
+ DataTransformations1D.convert(LENS_FOCAL_LENGTH, true)
+ }
+}
\ No newline at end of file
diff --git a/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/CameraXActivityTestExtensions.kt b/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/CameraXActivityTestExtensions.kt
index 3a465b5..7f594e7 100644
--- a/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/CameraXActivityTestExtensions.kt
+++ b/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/CameraXActivityTestExtensions.kt
@@ -19,6 +19,7 @@
import androidx.test.core.app.ActivityScenario
import androidx.test.espresso.Espresso
import androidx.test.espresso.IdlingRegistry
+import androidx.test.espresso.action.ViewActions.click
import androidx.test.espresso.assertion.ViewAssertions
import androidx.test.espresso.matcher.ViewMatchers
import androidx.testutils.withActivity
@@ -36,4 +37,19 @@
} finally { // Always release the idling resource, in case of timeout exceptions.
IdlingRegistry.getInstance().unregister(idlingResource)
}
+}
+
+/**
+ * Waits until an image has been saved and its idling resource has become idle.
+ */
+internal fun ActivityScenario<CameraXActivity>.takePictureAndWaitForImageSavedIdle() {
+ val idlingResource = withActivity { imageSavedIdlingResource }
+ try {
+ IdlingRegistry.getInstance().register(idlingResource)
+ // Perform click to take a picture.
+ Espresso.onView(ViewMatchers.withId(R.id.Picture)).perform(click())
+ } finally { // Always release the idling resource, in case of timeout exceptions.
+ IdlingRegistry.getInstance().unregister(idlingResource)
+ withActivity { deleteSessionImages() }
+ }
}
\ No newline at end of file
diff --git a/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/TakePictureTest.kt b/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/TakePictureTest.kt
index f2fe15d6..6158773 100644
--- a/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/TakePictureTest.kt
+++ b/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/TakePictureTest.kt
@@ -16,15 +16,13 @@
package androidx.camera.integration.core
+import android.Manifest
import androidx.camera.testing.CameraUtil
import androidx.camera.testing.CoreAppTestUtil
import androidx.camera.testing.CoreAppTestUtil.clearDeviceUI
import androidx.test.core.app.ActivityScenario
import androidx.test.espresso.Espresso.onView
-import androidx.test.espresso.IdlingRegistry
import androidx.test.espresso.action.ViewActions.click
-import androidx.test.espresso.assertion.ViewAssertions
-import androidx.test.espresso.matcher.ViewMatchers
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
@@ -40,13 +38,12 @@
@RunWith(AndroidJUnit4::class)
class TakePictureTest {
@get:Rule
- var mCameraPermissionRule = GrantPermissionRule.grant(android.Manifest.permission.CAMERA)
- @get:Rule
- var mStoragePermissionRule =
- GrantPermissionRule.grant(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
- @get:Rule
- var mRecordAudioRule =
- GrantPermissionRule.grant(android.Manifest.permission.RECORD_AUDIO)
+ val mPermissionRule: GrantPermissionRule =
+ GrantPermissionRule.grant(
+ Manifest.permission.CAMERA,
+ Manifest.permission.WRITE_EXTERNAL_STORAGE,
+ Manifest.permission.RECORD_AUDIO
+ )
@Before
fun setUp() {
@@ -60,17 +57,10 @@
// Take a photo, wait for callback via imageSavedIdlingResource resource.
@Test
fun testPictureButton() {
- ActivityScenario.launch(CameraXActivity::class.java).use {
- it?.onActivity { activity ->
- IdlingRegistry.getInstance().register(activity.viewIdlingResource)
- IdlingRegistry.getInstance().register(activity.imageSavedIdlingResource)
- }
- onView(withId(R.id.Picture)).perform(click())
- onView(withId(R.id.viewFinder))
- it?.onActivity { activity ->
- IdlingRegistry.getInstance().unregister(activity.viewIdlingResource)
- IdlingRegistry.getInstance().unregister(activity.imageSavedIdlingResource)
- activity.deleteSessionImages()
+ with(ActivityScenario.launch(CameraXActivity::class.java)) {
+ use { // Ensure ActivityScenario is cleaned up properly.
+ waitForViewfinderIdle()
+ takePictureAndWaitForImageSavedIdle()
}
}
}
@@ -79,26 +69,15 @@
// onError path.
@Test
fun testTakePictureAndRestartWhileCapturing() { // Launch activity check for view idle.
- ActivityScenario.launch(CameraXActivity::class.java).use {
- checkForViewIdle(it)
- onView(withId(R.id.Picture)).perform(click())
- // Immediately .recreate() this allows the test to reach the onError callback path.
- // Note, moveToState(DESTROYED) doesn't trigger the same code path.
- checkForViewIdle(it!!.recreate())
+ with(ActivityScenario.launch(CameraXActivity::class.java)) {
+ use { // Ensure ActivityScenario is cleaned up properly.
+ waitForViewfinderIdle()
+ onView(withId(R.id.Picture)).perform(click())
+ // Immediately .recreate() this allows the test to reach the onError callback path.
+ // Note, moveToState(DESTROYED) doesn't trigger the same code path.
+ it!!.recreate()
+ waitForViewfinderIdle()
+ }
}
}
-
- private fun checkForViewIdle(activityScenario: ActivityScenario<CameraXActivity>):
- ActivityScenario<CameraXActivity>? {
- activityScenario.onActivity { activity ->
- IdlingRegistry.getInstance().register(activity.viewIdlingResource)
- }
- // Check the activity launched and Preview displays frames.
- onView(withId(R.id.viewFinder))
- .check(ViewAssertions.matches(ViewMatchers.isDisplayed()))
- activityScenario.onActivity { activity ->
- IdlingRegistry.getInstance().unregister(activity.viewIdlingResource)
- }
- return activityScenario
- }
}
diff --git a/camera/integration-tests/coretestapp/src/main/cpp/opengl_renderer_jni.cpp b/camera/integration-tests/coretestapp/src/main/cpp/opengl_renderer_jni.cpp
index 319cc71..ce1894b2 100644
--- a/camera/integration-tests/coretestapp/src/main/cpp/opengl_renderer_jni.cpp
+++ b/camera/integration-tests/coretestapp/src/main/cpp/opengl_renderer_jni.cpp
@@ -141,12 +141,13 @@
namespace {
constexpr char VERTEX_SHADER_SRC[] = R"SRC(
attribute vec4 position;
- varying vec2 texCoord;
- uniform mat4 vertTransform;
+ attribute vec4 texCoords;
+ uniform mat4 mvpTransform;
+ uniform mat4 texTransform;
+ varying vec2 fragCoord;
void main() {
- texCoord = ((vertTransform * vec4(position.xy, 0, 1.0)).xy
- + vec2(1.0, 1.0)) * 0.5;
- gl_Position = position;
+ fragCoord = (texTransform * texCoords).xy;
+ gl_Position = mvpTransform * position;
}
)SRC";
@@ -154,11 +155,9 @@
#extension GL_OES_EGL_image_external : require
precision mediump float;
uniform samplerExternalOES sampler;
- uniform mat4 texTransform;
- varying vec2 texCoord;
+ varying vec2 fragCoord;
void main() {
- vec2 transTexCoord = (texTransform * vec4(texCoord, 0, 1.0)).xy;
- gl_FragColor = texture2D(sampler, transTexCoord);
+ gl_FragColor = texture2D(sampler, fragCoord);
}
)SRC";
@@ -170,8 +169,9 @@
EGLSurface pbufferSurface;
GLuint program;
GLint positionHandle;
+ GLint texCoordsHandle;
GLint samplerHandle;
- GLint vertTransformHandle;
+ GLint mvpTransformHandle;
GLint texTransformHandle;
GLuint textureId;
@@ -185,8 +185,9 @@
pbufferSurface(pbufferSurface),
program(0),
positionHandle(-1),
+ texCoordsHandle(1),
samplerHandle(-1),
- vertTransformHandle(-1),
+ mvpTransformHandle(-1),
texTransformHandle(-1),
textureId(0) {}
};
@@ -364,13 +365,17 @@
CHECK_GL(glGetAttribLocation(nativeContext->program, "position"));
assert(nativeContext->positionHandle != -1);
+ nativeContext->texCoordsHandle =
+ CHECK_GL(glGetAttribLocation(nativeContext->program, "texCoords"));
+ assert(nativeContext->texCoordsHandle != -1);
+
nativeContext->samplerHandle =
CHECK_GL(glGetUniformLocation(nativeContext->program, "sampler"));
assert(nativeContext->samplerHandle != -1);
- nativeContext->vertTransformHandle =
- CHECK_GL(glGetUniformLocation(nativeContext->program, "vertTransform"));
- assert(nativeContext->vertTransformHandle != -1);
+ nativeContext->mvpTransformHandle =
+ CHECK_GL(glGetUniformLocation(nativeContext->program, "mvpTransform"));
+ assert(nativeContext->mvpTransformHandle != -1);
nativeContext->texTransformHandle =
CHECK_GL(glGetUniformLocation(nativeContext->program, "texTransform"));
@@ -429,25 +434,35 @@
JNIEXPORT jboolean JNICALL
Java_androidx_camera_integration_core_OpenGLRenderer_renderTexture(
JNIEnv *env, jclass clazz, jlong context, jlong timestampNs,
- jfloatArray jvertTransformArray, jfloatArray jtexTransformArray) {
+ jfloatArray jmvpTransformArray, jboolean mvpDirty,jfloatArray jtexTransformArray) {
auto *nativeContext = reinterpret_cast<NativeContext *>(context);
- // We use a single triangle with the viewport inscribed within for our
- // vertices. This could also be done with a quad or two triangles.
- // ^
- // |
- // (-1,3)
- // +_
- // | \_
- // | \_
- // (-1,1) \(1,1)
- // +-------+_
- // | | \_
- // | + | \_
- // | | \_
- // +-------+-------+-->
- // (-1,-1) (1,-1) (3,-1)
- constexpr GLfloat vertices[] = {-1.0f, -1.0f, 3.0f, -1.0f, -1.0f, 3.0f};
+ // We use two triangles drawn with GL_TRIANGLE_STRIP to create the surface which will be
+ // textured with the camera frame. This could also be done with a quad (GL_QUADS) on a
+ // different version of OpenGL or with a scaled single triangle in which we would inscribe
+ // the camera texture.
+ //
+ // (-1,-1) (1,-1)
+ // +---------------+
+ // | \_ |
+ // | \_ |
+ // | + |
+ // | \_ |
+ // | \_ |
+ // +---------------+
+ // (-1,1) (1,1)
+ constexpr GLfloat vertices[] = {
+ -1.0f, 1.0f, // Lower-left
+ 1.0f, 1.0f, // Lower-right
+ -1.0f, -1.0f, // Upper-left (notice order here. We're drawing triangles, not a quad.)
+ 1.0f, -1.0f // Upper-right
+ };
+ constexpr GLfloat texCoords[] = {
+ 0.0f, 0.0f, // Lower-left
+ 1.0f, 0.0f, // Lower-right
+ 0.0f, 1.0f, // Upper-left (order must match the vertices)
+ 1.0f, 1.0f // Upper-right
+ };
GLint vertexComponents = 2;
GLenum vertexType = GL_FLOAT;
@@ -457,16 +472,25 @@
vertexComponents, vertexType, normalized,
vertexStride, vertices));
CHECK_GL(glEnableVertexAttribArray(nativeContext->positionHandle));
+
+ CHECK_GL(glVertexAttribPointer(nativeContext->texCoordsHandle,
+ vertexComponents, vertexType, normalized,
+ vertexStride, texCoords));
+ CHECK_GL(glEnableVertexAttribArray(nativeContext->texCoordsHandle));
+
CHECK_GL(glUseProgram(nativeContext->program));
GLsizei numMatrices = 1;
GLboolean transpose = GL_FALSE;
- GLfloat *vertTransformArray =
- env->GetFloatArrayElements(jvertTransformArray, nullptr);
- CHECK_GL(glUniformMatrix4fv(nativeContext->vertTransformHandle, numMatrices,
- transpose, vertTransformArray));
- env->ReleaseFloatArrayElements(jvertTransformArray, vertTransformArray,
- JNI_ABORT);
+ // Only re-upload MVP to GPU if it is dirty
+ if (mvpDirty) {
+ GLfloat *mvpTransformArray =
+ env->GetFloatArrayElements(jmvpTransformArray, nullptr);
+ CHECK_GL(glUniformMatrix4fv(nativeContext->mvpTransformHandle, numMatrices,
+ transpose, mvpTransformArray));
+ env->ReleaseFloatArrayElements(jmvpTransformArray, mvpTransformArray,
+ JNI_ABORT);
+ }
CHECK_GL(glUniform1i(nativeContext->samplerHandle, 0));
@@ -481,9 +505,19 @@
CHECK_GL(glBindTexture(GL_TEXTURE_EXTERNAL_OES, nativeContext->textureId));
+ // Required to use a left-handed coordinate system in order to match our world-space
+ //
+ // ________+x
+ // /|
+ // / |
+ // +z/ |
+ // | +y
+ //
+ glFrontFace(GL_CW);
+
// This will typically fail if the EGL surface has been detached abnormally. In that case we
// will return JNI_FALSE below.
- glDrawArrays(GL_TRIANGLES, 0, 3);
+ glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
// Check that all GL operations completed successfully. If not, log an error and return.
GLenum glError = glGetError();
diff --git a/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/OpenGLRenderer.java b/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/OpenGLRenderer.java
index 8382a86..f3b1911 100644
--- a/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/OpenGLRenderer.java
+++ b/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/OpenGLRenderer.java
@@ -17,9 +17,11 @@
package androidx.camera.integration.core;
import android.graphics.Rect;
+import android.graphics.RectF;
import android.graphics.SurfaceTexture;
import android.opengl.Matrix;
import android.os.Process;
+import android.util.Log;
import android.util.Size;
import android.view.Surface;
@@ -37,12 +39,14 @@
import com.google.common.util.concurrent.ListenableFuture;
import java.util.Locale;
+import java.util.Objects;
import java.util.concurrent.Executor;
import java.util.concurrent.RejectedExecutionException;
import java.util.concurrent.atomic.AtomicInteger;
final class OpenGLRenderer {
-
+ private static final String TAG = "OpenGLRenderer";
+ private static final boolean DEBUG = false;
static {
System.loadLibrary("opengl_renderer_jni");
}
@@ -53,23 +57,36 @@
String.format(Locale.US, "GLRenderer-%03d", RENDERER_COUNT.incrementAndGet()),
Process.THREAD_PRIORITY_DEFAULT); // Use UI thread priority (DEFAULT)
- private Size mPreviewResolution;
private SurfaceTexture mPreviewTexture;
- private final float[] mPreviewTransform = new float[16];
- private float mNaturalPreviewWidth = 0;
- private float mNaturalPreviewHeight = 0;
+ private RectF mPreviewCropRect;
+ private Size mPreviewSize;
+ private int mTextureRotationDegrees;
+ // Transform retrieved by SurfaceTexture.getTransformMatrix
+ private final float[] mTextureTransform = new float[16];
+
+ // The Model represent the surface we are drawing on. In 3D, it is a flat rectangle.
+ private final float[] mModelTransform = new float[16];
+
+ private final float[] mViewTransform = new float[16];
+
+ private final float[] mProjectionTransform = new float[16];
+
+ // A combination of the model, view and projection transform matrices.
+ private final float[] mMvpTransform = new float[16];
+ private boolean mMvpDirty = true;
private Size mSurfaceSize = null;
private int mSurfaceRotationDegrees = 0;
- private final float[] mSurfaceTransform = new float[16];
- private final float[] mTempVec = new float[8];
-
- private Rect mPreviewCropRect;
-
- private final float[] mCropRectTransform = new float[16];
-
- private final float[] mFragmentShaderTransform = new float[16];
+ // Vectors defining the 'up' direction for the 4 angles we're interested in. These are based
+ // off our world-space coordinate system (sensor coordinates), where the origin (0, 0) is in
+ // the upper left of the image, and rotations are clockwise (left-handed coordinates).
+ private static final float[] DIRECTION_UP_ROT_0 = {0f, -1f, 0f, 0f};
+ private static final float[] DIRECTION_UP_ROT_90 = {1f, 0f, 0f, 0f};
+ private static final float[] DIRECTION_UP_ROT_180 = {0f, 1f, 0f, 0f};
+ private static final float[] DIRECTION_UP_ROT_270 = {-1f, 0f, 0f, 0f};
+ private float[] mTempVec = new float[4];
+ private float[] mTempMatrix = new float[32]; // 2 concatenated matrices for calculations
private long mNativeContext = 0;
@@ -78,6 +95,11 @@
private Pair<Executor, Consumer<Long>> mFrameUpdateListener;
+ OpenGLRenderer() {
+ // Initialize the GL context on the GL thread
+ mExecutor.execute(() -> mNativeContext = initContext());
+ }
+
@UseExperimental(markerClass = ExperimentalUseCaseGroup.class)
@MainThread
void attachInputPreview(@NonNull Preview preview) {
@@ -89,15 +111,18 @@
return;
}
- if (mNativeContext == 0) {
- mNativeContext = initContext();
- }
-
SurfaceTexture surfaceTexture = resetPreviewTexture(
surfaceRequest.getResolution());
Surface inputSurface = new Surface(surfaceTexture);
mNumOutstandingSurfaces++;
- mPreviewCropRect = surfaceRequest.getCropRect();
+ Rect requestCropRect = surfaceRequest.getCropRect();
+ if (!isCropRectFullTexture(requestCropRect)) {
+ // Crop rect is pre-calculated. Use it directly.
+ mPreviewCropRect = new RectF(requestCropRect);
+ } else {
+ // Crop rect needs to be calculated before drawing.
+ mPreviewCropRect = null;
+ }
surfaceRequest.provideSurface(
inputSurface,
mExecutor,
@@ -108,7 +133,7 @@
mPreviewTexture = null;
}
mNumOutstandingSurfaces--;
- doShutdownIfNeeded();
+ doShutdownExecutorIfNeeded();
});
});
}
@@ -122,15 +147,15 @@
return;
}
- if (mNativeContext == 0) {
- mNativeContext = initContext();
- }
-
if (setWindowSurface(mNativeContext, surface)) {
- this.mSurfaceRotationDegrees = surfaceRotationDegrees;
- this.mSurfaceSize = surfaceSize;
+ if (surfaceRotationDegrees != mSurfaceRotationDegrees
+ || !Objects.equals(surfaceSize, mSurfaceSize)) {
+ mMvpDirty = true;
+ }
+ mSurfaceRotationDegrees = surfaceRotationDegrees;
+ mSurfaceSize = surfaceSize;
} else {
- this.mSurfaceSize = null;
+ mSurfaceSize = null;
}
});
@@ -150,9 +175,7 @@
*/
void setFrameUpdateListener(@NonNull Executor executor, @NonNull Consumer<Long> listener) {
try {
- mExecutor.execute(() -> {
- mFrameUpdateListener = new Pair<>(executor, listener);
- });
+ mExecutor.execute(() -> mFrameUpdateListener = new Pair<>(executor, listener));
} catch (RejectedExecutionException e) {
// Renderer is shutting down. Ignore.
}
@@ -162,8 +185,11 @@
try {
mExecutor.execute(
() -> {
- this.mSurfaceRotationDegrees = surfaceRotationDegrees;
- if (mPreviewTexture != null && mNativeContext != 0) {
+ if (surfaceRotationDegrees != mSurfaceRotationDegrees) {
+ mMvpDirty = true;
+ }
+ mSurfaceRotationDegrees = surfaceRotationDegrees;
+ if (mPreviewTexture != null && !mIsShutdown) {
renderLatest();
}
});
@@ -185,7 +211,7 @@
try {
mExecutor.execute(
() -> {
- if (mNativeContext != 0) {
+ if (!mIsShutdown) {
setWindowSurface(mNativeContext, null);
mSurfaceSize = null;
}
@@ -203,12 +229,12 @@
try {
mExecutor.execute(
() -> {
- mIsShutdown = true;
- if (mNativeContext != 0) {
+ if (!mIsShutdown) {
closeContext(mNativeContext);
mNativeContext = 0;
+ mIsShutdown = true;
}
- doShutdownIfNeeded();
+ doShutdownExecutorIfNeeded();
});
} catch (RejectedExecutionException e) {
// Renderer already shutting down. Ignore.
@@ -216,7 +242,7 @@
}
@WorkerThread
- private void doShutdownIfNeeded() {
+ private void doShutdownExecutorIfNeeded() {
if (mIsShutdown && mNumOutstandingSurfaces == 0) {
mFrameUpdateListener = null;
mExecutor.shutdown();
@@ -234,13 +260,16 @@
mPreviewTexture.setDefaultBufferSize(size.getWidth(), size.getHeight());
mPreviewTexture.setOnFrameAvailableListener(
surfaceTexture -> {
- if (surfaceTexture == mPreviewTexture && mNativeContext != 0) {
+ if (surfaceTexture == mPreviewTexture && !mIsShutdown) {
surfaceTexture.updateTexImage();
renderLatest();
}
},
mExecutor.getHandler());
- mPreviewResolution = size;
+ if (!Objects.equals(size, mPreviewSize)) {
+ mMvpDirty = true;
+ }
+ mPreviewSize = size;
return mPreviewTexture;
}
@@ -251,27 +280,25 @@
// Get texture transform from surface texture (transform to natural orientation).
// This will be used to transform texture coordinates in the fragment shader.
- mPreviewTexture.getTransformMatrix(mPreviewTransform);
-
+ mPreviewTexture.getTransformMatrix(mTextureTransform);
+ // Check whether the texture's rotation has changed so we can update the MVP matrix.
+ int textureRotationDegrees = getTextureRotationDegrees();
+ if (textureRotationDegrees != mTextureRotationDegrees) {
+ mMvpDirty = true;
+ }
+ mTextureRotationDegrees = textureRotationDegrees;
if (mSurfaceSize != null) {
- // If the crop rect matches the preview surface, it means either the viewport is not
- // set, or it's set but the crop rect happens to be the same as the preview surface.
- // Either way, use the entire surface for sampling and do additional custom
- // transformation if necessary.
- if (isCropRectMatchPreview()) {
- calculateCustomTransformation();
- } else {
- calculateViewportTransformation();
+ if (mMvpDirty) {
+ updateMvpTransform();
}
- boolean success = renderTexture(mNativeContext, timestampNs, mSurfaceTransform,
- mFragmentShaderTransform);
+ boolean success = renderTexture(mNativeContext, timestampNs, mMvpTransform, mMvpDirty,
+ mTextureTransform);
+ mMvpDirty = false;
if (success && mFrameUpdateListener != null) {
- Executor executor = mFrameUpdateListener.first;
- Consumer<Long> listener = mFrameUpdateListener.second;
+ Executor executor = Objects.requireNonNull(mFrameUpdateListener.first);
+ Consumer<Long> listener = Objects.requireNonNull(mFrameUpdateListener.second);
try {
- executor.execute(() -> {
- listener.accept(timestampNs);
- });
+ executor.execute(() -> listener.accept(timestampNs));
} catch (RejectedExecutionException e) {
// Unable to send frame update. Ignore.
}
@@ -280,27 +307,26 @@
}
/**
- * Calculates the dimensions of the source texture after it has been transformed from the raw
- * sensor texture to an image which is in the device's 'natural' orientation.
+ * Calculates the rotation of the source texture between the sensor coordinate space and
+ * the device's 'natural' orientation.
*
- * <p>The required transform is passed along with each texture update and is retrieved from
- * {@link
- * SurfaceTexture#getTransformMatrix(float[])}.
+ * <p>A required transform matrix is passed along with each texture update and is retrieved by
+ * {@link SurfaceTexture#getTransformMatrix(float[])}.
*
* <pre>{@code
* TEXTURE FROM SENSOR:
* ^
- * |
- * | .###########
- * | ***********
- * | ....############## ####. / Sensor may be rotated relative
- * | ################### #( )#. to the device's 'natural'
- * | ############## ###### orientation.
- * | ################### #( )#*
- * | ****############## ####* \
- * | ...........
- * | *###########
- * |
+ * | +-----------+
+ * | .#######|### |
+ * | *******|*** |
+ * | ....###########|## ####. / | Sensor may be rotated relative
+ * | ################|## #( )#. | to the device's 'natural'
+ * | ###########|## ###### | orientation.
+ * | ################|## #( )#* |
+ * | ****###########|## ####* \ |
+ * | .......|... |
+ * | *#######|### |
+ * | +-----------+
* +-------------------------------->
* TRANSFORMED IMAGE:
* | | ^
@@ -318,205 +344,303 @@
* }</pre>
*
* <p>The transform matrix is a 4x4 affine transform matrix that operates on standard normalized
- * texture coordinates which are in the range of [0,1] for both s and t dimensions. Once the
- * transform is applied, we scale by the width and height of the source texture.
+ * texture coordinates which are in the range of [0,1] for both s and t dimensions. Before
+ * the transform is applied, the texture may have dimensions that are larger than the
+ * dimensions of the SurfaceTexture we provided in order to accommodate hardware limitations.
+ *
+ * <p>For this method we are only interested in the rotation component of the transform
+ * matrix, so the calculations avoid the scaling and translation components.
*/
@WorkerThread
- private void calculateInputDimensions() {
-
- // Although the transform is normally used to rotate, it can also handle scale and
- // translation.
- // In order to accommodate for this, we use test vectors representing the boundaries of the
- // input, and run them through the transform to find the boundaries of the output.
+ private int getTextureRotationDegrees() {
+ // The final output image should have the requested dimensions AFTER applying the
+ // transform matrix, but width and height may be swapped. We know that the transform
+ // matrix from SurfaceTexture#getTransformMatrix() is an affine transform matrix that
+ // will only rotate in 90 degree increments, so we only need to worry about the rotation
+ // component.
//
- // Top Bound (Vt): Right Bound (Vr):
- //
- // ^ (0.5,1) ^
- // | ^ |
- // | | |
- // | | | (1,0.5)
- // Texture | + | +---->
- // Coordinates: | |
- // ^ | |
- // | +-----------> +----------->
- // (0,1) (1,1)
- // +---------+ Bottom Bound (Vb): Left Bound (Vl):
- // | |
- // | | ^ ^
- // | + | | |
- // |(0.5,0.5)| | |
- // | | | (0,0.5)
- // +------------> | + <----+
- // (0,0) (1,0) | | |
- // | | |
- // +----v------> +----------->
- // (0.5,0)
- //
- // Using the above test vectors, we can calculate the transformed height using transform
- // matrix M as:
- //
- // Voh = |M x (Vt * h) - M x (Vb * h)| = |M x (Vt - Vb) * h| = |M x Vih| = |M x [0 h 0 0]|
- // where:
- // Vih = input, pre-transform height vector,
- // Voh = output transformed height vector,
- // h = pre-transform texture height,
- // || denotes element-wise absolute value,
- // x denotes matrix-vector multiplication, and
- // * denotes element-wise multiplication.
- //
- // Similarly, the transformed width will be calculated as:
- //
- // Vow = |M x (Vr * w) - M x (Vl * w)| = |M x (Vr - Vl) * w| = |M x Viw| = |M x [w 0 0 0]|
- // where:
- // Vow = output transformed width vector, and w = pre-transform texture width
- //
- // Since the transform matrix can potentially swap width and height, we must hold on to both
- // elements of each output vector. However, since we assume rotations in multiples of 90
- // degrees, and the vectors are orthogonal, we can calculate the final transformed vector
- // as:
- //
- // Vo = |M x Vih| + |M x Viw|
+ // We can test this by using an test vector of [s, t, p, q] = [0, 1, 0, 0]. Using 'q = 0'
+ // will ignore the translation component of the matrix. We will only need to check if the
+ // 's' component becomes a scaled version of the 't' component and the 't' component
+ // becomes 0.
+ Matrix.multiplyMV(mTempVec, 0, mTextureTransform, 0, DIRECTION_UP_ROT_0, 0);
- // Initialize the components we care about for the output vector. This will be
- // accumulated from
- // Voh and Vow.
- mNaturalPreviewWidth = 0;
- mNaturalPreviewHeight = 0;
-
- // Calculate Voh. We use our allocated temporary vector to avoid excessive allocations since
- // this is done per-frame.
- float[] vih = mTempVec;
- vih[0] = 0;
- vih[1] = mPreviewResolution.getHeight();
- vih[2] = 0;
- vih[3] = 0;
-
- // Apply the transform. Second half of the array is the result vector Voh.
- Matrix.multiplyMV(
- /*resultVec=*/ mTempVec, /*resultVecOffset=*/ 4,
- /*lhsMat=*/ mPreviewTransform, /*lhsMatOffset=*/ 0,
- /*rhsVec=*/ vih, /*rhsVecOffset=*/ 0);
-
- // Accumulate output from Voh.
- mNaturalPreviewWidth += Math.abs(mTempVec[4]);
- mNaturalPreviewHeight += Math.abs(mTempVec[5]);
-
- // Calculate Vow.
- float[] voh = mTempVec;
- voh[0] = mPreviewResolution.getWidth();
- voh[1] = 0;
- voh[2] = 0;
- voh[3] = 0;
-
- // Apply the transform. Second half of the array is the result vector Vow.
- Matrix.multiplyMV(
- /*resultVec=*/ mTempVec,
- /*resultVecOffset=*/ 4,
- /*lhsMat=*/ mPreviewTransform,
- /*lhsMatOffset=*/ 0,
- /*rhsVec=*/ voh,
- /*rhsVecOffset=*/ 0);
-
- // Accumulate output from Vow. This now represents the fully transformed coordinates.
- mNaturalPreviewWidth += Math.abs(mTempVec[4]);
- mNaturalPreviewHeight += Math.abs(mTempVec[5]);
- }
-
-
- /**
- * Returns true if the crop rect matches the preview surface.
- */
- private boolean isCropRectMatchPreview() {
- // If the crop rect is the same size as the preview, do custom transformation for fragment
- // shader to sample the whole surface.
- return mPreviewCropRect != null && mPreviewCropRect.left == 0 && mPreviewCropRect.top == 0
- && mPreviewCropRect.width() == mPreviewResolution.getWidth()
- && mPreviewCropRect.height() == mPreviewResolution.getHeight();
- }
-
- /**
- * Calculates the vertex shader transform matrix needed to transform the output from device
- * 'natural' orientation coordinates to a "center-crop" view of the camera viewport.
- *
- * <p>A device's 'natural' orientation is the orientation where the Display rotation is
- * Surface.ROTATION_0. For most phones, this will be a portrait orientation, whereas some
- * tablets may use landscape as their natural orientation. The Surface rotation is always
- * provided relative to the device's 'natural' orientation.
- *
- * <p>Because the camera sensor (or crop of the camera sensor) may have a different aspect ratio
- * than the Surface that is meant to display it, we also want to fit the image from the
- * camera so the entire Surface is filled. This generally requires scaling the input texture
- * and cropping pixels from either the width or height. We call this transform "center-crop"
- * and is equivalent to the ScaleType with the same name in ImageView.
- */
- @WorkerThread
- private void calculateCustomTransformation() {
- // Calculate the dimensions of the source texture in the 'natural' orientation of the
- // device.
- calculateInputDimensions();
-
- // Transform surface width and height to natural orientation
- Matrix.setRotateM(mSurfaceTransform, 0, -mSurfaceRotationDegrees, 0, 0, 1.0f);
-
- // Since rotation is a linear transform, we don't need to worry about the affine component
- mTempVec[0] = mSurfaceSize.getWidth();
- mTempVec[1] = mSurfaceSize.getHeight();
-
- // Apply the transform to surface dimensions
- Matrix.multiplyMV(mTempVec, 4, mSurfaceTransform, 0, mTempVec, 0);
-
- float naturalSurfaceWidth = Math.abs(mTempVec[4]);
- float naturalSurfaceHeight = Math.abs(mTempVec[5]);
-
- // Now that both preview and surface are in the same coordinate system, calculate the ratio
- // of width/height between preview/surface to determine which dimension to scale
- float heightRatio = mNaturalPreviewHeight / naturalSurfaceHeight;
- float widthRatio = mNaturalPreviewWidth / naturalSurfaceWidth;
-
- // Now that we have calculated scale, we must apply rotation and scale in the correct order
- // such that it will apply to the vertex shader's vertices consistently.
- Matrix.setIdentityM(mSurfaceTransform, 0);
-
- // Apply the scale depending on whether the width or the height needs to be scaled to match
- // a "center crop" scale type. Because vertex coordinates are already normalized, we must
- // remove
- // the implicit scaling (through division) before scaling by the opposite dimension.
- if (mNaturalPreviewWidth * naturalSurfaceHeight
- > mNaturalPreviewHeight * naturalSurfaceWidth) {
- Matrix.scaleM(mSurfaceTransform, 0, heightRatio / widthRatio, 1.0f, 1.0f);
- } else {
- Matrix.scaleM(mSurfaceTransform, 0, 1.0f, widthRatio / heightRatio, 1.0f);
+ // Calculate the normalized vector and round to integers so we can do integer comparison.
+ // Normalizing the vector removes the effects of the scaling component of the
+ // transform matrix. Once normalized, we can round and do integer comparison.
+ float length = Matrix.length(mTempVec[0], mTempVec[1], 0);
+ int s = Math.round(mTempVec[0] / length);
+ int t = Math.round(mTempVec[1] / length);
+ if (s == 0 && t == 1) {
+ // (0,1) (0,1)
+ // +----^----+ 0 deg +----^----+
+ // | | | Rotation | | |
+ // | + | +-----> | + |
+ // | (0,0) | | (0,0) |
+ // +---------+ +---------+
+ return 0;
+ } else if (s == 1 && t == 0) {
+ // (0,1)
+ // +----^----+ 90 deg +---------+
+ // | | | Rotation | |
+ // | + | +-----> | +---->(1,0)
+ // | (0,0) | | (0,0) |
+ // +---------+ +---------+
+ return 90;
+ } else if (s == 0 && t == -1) {
+ // (0,1)
+ // +----^----+ 180 deg +---------+
+ // | | | Rotation | (0,0) |
+ // | + | +-----> | + |
+ // | (0,0) | | | |
+ // +---------+ +----v----+
+ // (0,-1)
+ return 180;
+ } else if (s == -1 && t == 0) {
+ // (0,1)
+ // +----^----+ 270 deg +---------+
+ // | | | Rotation | |
+ // | + | +-----> (-1,0)<----+ |
+ // | (0,0) | | (0,0) |
+ // +---------+ +---------+
+ return 270;
}
- // Finally add in rotation. This will be applied to vertices first.
- Matrix.rotateM(mSurfaceTransform, 0, -mSurfaceRotationDegrees, 0, 0, 1.0f);
+ throw new RuntimeException(String.format("Unexpected texture transform matrix. Expected "
+ + "test vector [0, 1] to rotate to [0,1], [1, 0], [0, -1] or [-1, 0], but instead "
+ + "was [%d, %d].", s, t));
+ }
- // For custom transformation, the fragment shader uses the SurfaceTexture transformation
- // directly.
- System.arraycopy(mPreviewTransform, 0, mFragmentShaderTransform, 0,
- mFragmentShaderTransform.length);
+
+ /**
+ * Returns true if the crop rect dimensions match the entire texture dimensions.
+ */
+ @WorkerThread
+ private boolean isCropRectFullTexture(@NonNull Rect cropRect) {
+ return cropRect.left == 0 && cropRect.top == 0
+ && cropRect.width() == mPreviewSize.getWidth()
+ && cropRect.height() == mPreviewSize.getHeight();
}
/**
- * Calculates the transformation based on viewport crop rect.
+ * Derives the model crop rect from the texture and output surface dimensions, applying a
+ * 'center-crop' transform.
+ *
+ * <p>Because the camera sensor (or crop of the camera sensor) may have a different
+ * aspect ratio than the ViewPort that is meant to display it, we want to fit the image
+ * from the camera so the entire ViewPort is filled. This generally requires scaling the input
+ * texture and cropping pixels from either the width or height. We call this transform
+ * 'center-crop' and is equivalent to {@link android.widget.ImageView.ScaleType#CENTER_CROP}.
*/
- private void calculateViewportTransformation() {
- // Append the transformations so that only the area within the crop rect is sampled.
- Matrix.setIdentityM(mCropRectTransform, 0);
- float translateX = (float) mPreviewCropRect.left / mPreviewResolution.getWidth();
- float translateY = (float) mPreviewCropRect.top / mPreviewResolution.getHeight();
- Matrix.translateM(mCropRectTransform, 0, translateX, translateY, 0f);
+ @WorkerThread
+ private void extractPreviewCropFromPreviewSizeAndSurface() {
+ // Swap the dimensions of the surface we are drawing the texture onto if rotating the
+ // texture to the surface orientation requires a 90 degree or 270 degree rotation.
+ int viewPortRotation = getViewPortRotation();
+ if (viewPortRotation == 90 || viewPortRotation == 270) {
+ // Width and height swapped
+ mPreviewCropRect = new RectF(0, 0, mSurfaceSize.getHeight(), mSurfaceSize.getWidth());
+ } else {
+ mPreviewCropRect = new RectF(0, 0, mSurfaceSize.getWidth(), mSurfaceSize.getHeight());
+ }
- float scaleX = (float) mPreviewCropRect.width() / mPreviewResolution.getWidth();
- float scaleY = (float) mPreviewCropRect.height() / mPreviewResolution.getHeight();
- Matrix.scaleM(mCropRectTransform, 0, scaleX, scaleY, 1f);
+ android.graphics.Matrix centerCropMatrix = new android.graphics.Matrix();
+ RectF previewSize = new RectF(0, 0, mPreviewSize.getWidth(), mPreviewSize.getHeight());
+ centerCropMatrix.setRectToRect(mPreviewCropRect, previewSize,
+ android.graphics.Matrix.ScaleToFit.CENTER);
+ centerCropMatrix.mapRect(mPreviewCropRect);
+ }
- Matrix.multiplyMM(mFragmentShaderTransform, 0, mCropRectTransform, 0,
- mPreviewTransform, 0);
+ /**
+ * Returns the relative rotation between the sensor coordinates and the ViewPort in
+ * world-space coordinates.
+ *
+ * <p>This is the angle the sensor needs to be rotated, clockwise, in order to be upright in
+ * the viewport coordinates.
+ */
+ @WorkerThread
+ private int getViewPortRotation() {
+ // Note that since the rotation defined by Surface#ROTATION_*** are positive when the
+ // device is rotated in a counter-clockwise direction and our world-space coordinates
+ // define positive angles in the clockwise direction, we add the two together to get the
+ // total angle required.
+ return (mTextureRotationDegrees + mSurfaceRotationDegrees) % 360;
+ }
- // Correct for display rotation.
- Matrix.setIdentityM(mSurfaceTransform, 0);
- Matrix.rotateM(mSurfaceTransform, 0, -mSurfaceRotationDegrees, 0, 0, 1.0f);
+ /**
+ * Updates the matrix used to transform the model into the correct dimensions within the
+ * world-space.
+ *
+ * <p>In order to draw the camera frames to screen, we use a flat rectangle in our
+ * world-coordinate space. The world coordinates match the preview buffer coordinates with
+ * the origin (0,0) in the upper left corner of the image. Defining the world space in this
+ * way allows subsequent models to be positioned according to buffer coordinates.
+ * Note this different than standard OpenGL coordinates; this is a left-handed coordinate
+ * system, and requires using glFrontFace(GL_CW) before drawing.
+ * <pre>{@code
+ * Standard coordinates: Our coordinate system:
+ *
+ * | +y ________+x
+ * | /|
+ * | / |
+ * |________+x +z/ |
+ * / | +y
+ * /
+ * /+z
+ * }</pre>
+ * <p>Our model is initially a square with vertices in the range (-1,-1 - 1,1). It is
+ * rotated, scaled and translated to match the dimensions of preview with the origin in the
+ * upper left corner.
+ *
+ * <p>Example for a preview with dimensions 1920x1080:
+ * <pre>{@code
+ * (-1,-1) (1,-1)
+ * +---------+ Model
+ * | | Transform (0,0) (1920,0)
+ * Unscaled Model -> | + | ---\ +----------------+
+ * | | ---/ | | Scaled/
+ * +---------+ | | <-- Translated
+ * (-1,1) (1,1) | | Model
+ * +----------------+
+ * (0,1080) (1920,1080)
+ * }</pre>
+ */
+ @WorkerThread
+ private void updateModelTransform() {
+ // Remove the rotation to the device 'natural' orientation so our world space will be in
+ // sensor coordinates.
+ Matrix.setRotateM(mTempMatrix, 0, -mTextureRotationDegrees, 0.0f, 0.0f, 1.0f);
+
+ Matrix.setIdentityM(mTempMatrix, 16);
+ // Translate to the upper left corner of the quad so we are in buffer space
+ Matrix.translateM(mTempMatrix, 16, mPreviewSize.getWidth() / 2f,
+ mPreviewSize.getHeight() / 2f, 0);
+ // Scale the vertices so that our world space units are pixels equal in size to the
+ // pixels of the buffer sent from the camera.
+ Matrix.scaleM(mTempMatrix, 16, mPreviewSize.getWidth() / 2f, mPreviewSize.getHeight() / 2f,
+ 1f);
+ Matrix.multiplyMM(mModelTransform, 0, mTempMatrix, 16, mTempMatrix, 0);
+ if (DEBUG) {
+ printMatrix("ModelTransform", mModelTransform, 0);
+ }
+ }
+
+ /**
+ * The view transform defines the position and orientation of the camera within our world-space.
+ *
+ * <p>This brings us from world-space coordinates to view (camera) space.
+ *
+ * <p>This matrix is defined by a camera position, a gaze point, and a vector that represents
+ * the "up" direction. Because we are using an orthogonal projection, we always place the
+ * camera directly in front of the gaze point and 1 unit away on the z-axis for convenience.
+ * We have defined our world coordinates in a way where we will be looking at the front of
+ * the model rectangle if our camera is placed on the positive z-axis and we gaze towards
+ * the negative z-axis.
+ */
+ @WorkerThread
+ private void updateViewTransform() {
+ // Apply the rotation of the ViewPort and look at the center of the image
+ float[] upVec = DIRECTION_UP_ROT_0;
+ switch (getViewPortRotation()) {
+ case 0:
+ upVec = DIRECTION_UP_ROT_0;
+ break;
+ case 90:
+ upVec = DIRECTION_UP_ROT_90;
+ break;
+ case 180:
+ upVec = DIRECTION_UP_ROT_180;
+ break;
+ case 270:
+ upVec = DIRECTION_UP_ROT_270;
+ break;
+ }
+ Matrix.setLookAtM(mViewTransform, 0,
+ mPreviewCropRect.centerX(), mPreviewCropRect.centerY(), 1, // Camera position
+ mPreviewCropRect.centerX(), mPreviewCropRect.centerY(), 0, // Point to look at
+ upVec[0], upVec[1], upVec[2] // Up direction
+ );
+ if (DEBUG) {
+ printMatrix("ViewTransform", mViewTransform, 0);
+ }
+ }
+
+ /**
+ * The projection matrix will map from the view space to normalized device coordinates (NDC)
+ * which OpenGL is expecting.
+ *
+ * <p>Our view is meant to only show the pixels defined by the model crop rect, so our
+ * orthogonal projection matrix will depend on the preview crop rect dimensions.
+ *
+ * <p>The projection matrix can be thought of as a cube which has sides that align with the
+ * edges of the ViewPort and the near/far sides can be adjusted as needed. In our case, we
+ * set the near side to match the camera position and the far side to match the model's
+ * position on the z-axis, 1 unit away.
+ */
+ @WorkerThread
+ private void updateProjectionTransform() {
+ float viewPortWidth = mPreviewCropRect.width();
+ float viewPortHeight = mPreviewCropRect.height();
+ // Since projection occurs after rotation of the camera, in order to map directly to model
+ // coordinates we need to take into account the surface rotation.
+ int viewPortRotation = getViewPortRotation();
+ if (viewPortRotation == 90 || viewPortRotation == 270) {
+ viewPortWidth = mPreviewCropRect.height();
+ viewPortHeight = mPreviewCropRect.width();
+ }
+
+ Matrix.orthoM(mProjectionTransform, 0,
+ /*left=*/-viewPortWidth / 2f, /*right=*/viewPortWidth / 2f,
+ /*bottom=*/viewPortHeight / 2f, /*top=*/-viewPortHeight / 2f,
+ /*near=*/0, /*far=*/1);
+ if (DEBUG) {
+ printMatrix("ProjectionTransform", mProjectionTransform, 0);
+ }
+ }
+
+ /**
+ * The MVP is the combination of model, view and projection transforms that take us from the
+ * world space to normalized device coordinates (NDC) which OpenGL uses to display images
+ * with the correct dimensions on an EGL surface.
+ */
+ @WorkerThread
+ private void updateMvpTransform() {
+ if (mPreviewCropRect == null) {
+ extractPreviewCropFromPreviewSizeAndSurface();
+ }
+
+ if (DEBUG) {
+ Log.d(TAG, String.format("Model dimensions: %s, Crop rect: %s", mPreviewSize,
+ mPreviewCropRect));
+ }
+
+ updateModelTransform();
+ updateViewTransform();
+ updateProjectionTransform();
+
+ Matrix.multiplyMM(mTempMatrix, 0, mViewTransform, 0, mModelTransform, 0);
+
+ if (DEBUG) {
+ // Print the model-view matrix (without projection)
+ printMatrix("MVTransform", mTempMatrix, 0);
+ }
+
+ Matrix.multiplyMM(mMvpTransform, 0, mProjectionTransform, 0, mTempMatrix, 0);
+ if (DEBUG) {
+ printMatrix("MVPTransform", mMvpTransform, 0);
+ }
+ }
+
+ private static void printMatrix(String label, float[] matrix, int offset) {
+ Log.d(TAG, String.format("%s:\n"
+ + "%.4f %.4f %.4f %.4f\n"
+ + "%.4f %.4f %.4f %.4f\n"
+ + "%.4f %.4f %.4f %.4f\n"
+ + "%.4f %.4f %.4f %.4f\n", label,
+ matrix[offset], matrix[offset + 4], matrix[offset + 8], matrix[offset + 12],
+ matrix[offset + 1], matrix[offset + 5], matrix[offset + 9], matrix[offset + 13],
+ matrix[offset + 2], matrix[offset + 6], matrix[offset + 10], matrix[offset + 14],
+ matrix[offset + 3], matrix[offset + 7], matrix[offset + 11], matrix[offset + 15]));
}
@WorkerThread
@@ -532,7 +656,8 @@
private static native boolean renderTexture(
long nativeContext,
long timestampNs,
- @NonNull float[] vertexTransform,
+ @NonNull float[] mvpTransform,
+ boolean mvpDirty,
@NonNull float[] textureTransform);
@WorkerThread
diff --git a/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/ModelSamples.kt b/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/ModelSamples.kt
index b3147d0..9eaff4b 100644
--- a/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/ModelSamples.kt
+++ b/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/ModelSamples.kt
@@ -21,10 +21,10 @@
import androidx.compose.getValue
import androidx.compose.setValue
import androidx.compose.state
-import androidx.ui.foundation.TextField
import androidx.ui.foundation.Text
import androidx.ui.input.TextFieldValue
import androidx.ui.material.Button
+import androidx.ui.text.CoreTextField
@Composable
@Sampled
@@ -36,11 +36,11 @@
fun login() = Api.login(username.text, password.text)
- TextField(
+ CoreTextField(
value = username,
username = it }
)
- TextField(
+ CoreTextField(
value = password,
password = it }
)
diff --git a/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/MutableStateListSamples.kt b/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/MutableStateListSamples.kt
index 2067a8b..c31242e 100644
--- a/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/MutableStateListSamples.kt
+++ b/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/MutableStateListSamples.kt
@@ -23,11 +23,11 @@
import androidx.compose.mutableStateListOf
import androidx.compose.state
import androidx.ui.foundation.Text
-import androidx.ui.foundation.TextField
import androidx.ui.input.TextFieldValue
import androidx.ui.layout.Column
import androidx.ui.layout.Row
import androidx.ui.material.Button
+import androidx.ui.text.CoreTextField
@Composable
@Sampled
@@ -39,7 +39,7 @@
Column {
Row {
- TextField(
+ CoreTextField(
value = name,
name = it }
)
diff --git a/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/MutableStateMapSample.kt b/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/MutableStateMapSample.kt
index 7767044..5417e79 100644
--- a/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/MutableStateMapSample.kt
+++ b/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/MutableStateMapSample.kt
@@ -23,11 +23,11 @@
import androidx.compose.mutableStateMapOf
import androidx.compose.state
import androidx.ui.foundation.Text
-import androidx.ui.foundation.TextField
import androidx.ui.input.TextFieldValue
import androidx.ui.layout.Column
import androidx.ui.layout.Row
import androidx.ui.material.Button
+import androidx.ui.text.CoreTextField
@Composable
@Sampled
@@ -44,11 +44,11 @@
Column {
Row {
- TextField(
+ CoreTextField(
value = name,
name = it }
)
- TextField(
+ CoreTextField(
value = saying,
saying = it }
)
diff --git a/core/core/api/1.5.0-alpha01.txt b/core/core/api/1.5.0-alpha01.txt
index 34eec64..ba78e54 100644
--- a/core/core/api/1.5.0-alpha01.txt
+++ b/core/core/api/1.5.0-alpha01.txt
@@ -240,6 +240,7 @@
method @RequiresApi(21) public static java.util.List<androidx.core.app.NotificationCompat.Action!> getInvisibleActions(android.app.Notification);
method public static boolean getLocalOnly(android.app.Notification);
method public static androidx.core.content.LocusIdCompat? getLocusId(android.app.Notification);
+ method public static CharSequence? getSettingsText(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);
@@ -271,10 +272,13 @@
field public static final String EXTRA_AUDIO_CONTENTS_URI = "android.audioContents";
field public static final String EXTRA_BACKGROUND_IMAGE_URI = "android.backgroundImageUri";
field public static final String EXTRA_BIG_TEXT = "android.bigText";
+ field public static final String EXTRA_CHANNEL_GROUP_ID = "android.intent.extra.CHANNEL_GROUP_ID";
+ field public static final String EXTRA_CHANNEL_ID = "android.intent.extra.CHANNEL_ID";
field public static final String EXTRA_CHRONOMETER_COUNT_DOWN = "android.chronometerCountDown";
field public static final String EXTRA_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_HISTORIC_MESSAGES = "android.messages.historic";
field public static final String EXTRA_INFO_TEXT = "android.infoText";
field public static final String EXTRA_IS_GROUP_CONVERSATION = "android.isGroupConversation";
field public static final String EXTRA_LARGE_ICON = "android.largeIcon";
@@ -282,6 +286,8 @@
field public static final String EXTRA_MEDIA_SESSION = "android.mediaSession";
field public static final String EXTRA_MESSAGES = "android.messages";
field public static final String EXTRA_MESSAGING_STYLE_USER = "android.messagingStyleUser";
+ field public static final String EXTRA_NOTIFICATION_ID = "android.intent.extra.NOTIFICATION_ID";
+ field public static final String EXTRA_NOTIFICATION_TAG = "android.intent.extra.NOTIFICATION_TAG";
field 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";
@@ -314,6 +320,7 @@
field public static final int GROUP_ALERT_CHILDREN = 2; // 0x2
field public static final int GROUP_ALERT_SUMMARY = 1; // 0x1
field public static final String GROUP_KEY_SILENT = "silent";
+ field public static final String INTENT_CATEGORY_NOTIFICATION_PREFERENCES = "android.intent.category.NOTIFICATION_PREFERENCES";
field public static final int PRIORITY_DEFAULT = 0; // 0x0
field public static final int PRIORITY_HIGH = 1; // 0x1
field public static final int PRIORITY_LOW = -1; // 0xffffffff
@@ -488,6 +495,7 @@
method public androidx.core.app.NotificationCompat.Builder setProgress(int, int, boolean);
method public androidx.core.app.NotificationCompat.Builder setPublicVersion(android.app.Notification?);
method public androidx.core.app.NotificationCompat.Builder setRemoteInputHistory(CharSequence![]?);
+ method public androidx.core.app.NotificationCompat.Builder setSettingsText(CharSequence?);
method public androidx.core.app.NotificationCompat.Builder setShortcutId(String?);
method public androidx.core.app.NotificationCompat.Builder setShortcutInfo(androidx.core.content.pm.ShortcutInfoCompat?);
method public androidx.core.app.NotificationCompat.Builder setShowWhen(boolean);
@@ -560,11 +568,13 @@
ctor @Deprecated public NotificationCompat.MessagingStyle(CharSequence);
ctor public NotificationCompat.MessagingStyle(androidx.core.app.Person);
method public void addCompatExtras(android.os.Bundle);
+ method public androidx.core.app.NotificationCompat.MessagingStyle addHistoricMessage(androidx.core.app.NotificationCompat.MessagingStyle.Message);
method @Deprecated public androidx.core.app.NotificationCompat.MessagingStyle addMessage(CharSequence?, long, CharSequence?);
method public androidx.core.app.NotificationCompat.MessagingStyle addMessage(CharSequence?, long, androidx.core.app.Person?);
method public androidx.core.app.NotificationCompat.MessagingStyle addMessage(androidx.core.app.NotificationCompat.MessagingStyle.Message);
method public static androidx.core.app.NotificationCompat.MessagingStyle? extractMessagingStyleFromNotification(android.app.Notification);
method public CharSequence? getConversationTitle();
+ method public java.util.List<androidx.core.app.NotificationCompat.MessagingStyle.Message!> getHistoricMessages();
method public java.util.List<androidx.core.app.NotificationCompat.MessagingStyle.Message!> getMessages();
method public androidx.core.app.Person getUser();
method @Deprecated public CharSequence? getUserDisplayName();
@@ -1419,7 +1429,7 @@
field public static final int RESTRICT_BACKGROUND_STATUS_WHITELISTED = 2; // 0x2
}
- public class MailTo {
+ public final class MailTo {
method public String? getBcc();
method public String? getBody();
method public String? getCc();
diff --git a/core/core/api/api_lint.ignore b/core/core/api/api_lint.ignore
index b6158f8d..e70fc14 100644
--- a/core/core/api/api_lint.ignore
+++ b/core/core/api/api_lint.ignore
@@ -23,68 +23,6 @@
Inconsistent extra value; expected `androidx.core.app.extra.USAGE_TIME_REPORT`, was `android.activity.usage_time`
ActionValue: androidx.core.app.ActivityOptionsCompat#EXTRA_USAGE_TIME_REPORT_PACKAGES:
Inconsistent extra value; expected `androidx.core.app.extra.USAGE_TIME_REPORT_PACKAGES`, was `android.usage_time_packages`
-ActionValue: androidx.core.app.NotificationCompat#EXTRA_AUDIO_CONTENTS_URI:
- Inconsistent extra value; expected `androidx.core.app.extra.AUDIO_CONTENTS_URI`, was `android.audioContents`
-ActionValue: androidx.core.app.NotificationCompat#EXTRA_BACKGROUND_IMAGE_URI:
- Inconsistent extra value; expected `androidx.core.app.extra.BACKGROUND_IMAGE_URI`, was `android.backgroundImageUri`
-ActionValue: androidx.core.app.NotificationCompat#EXTRA_BIG_TEXT:
- Inconsistent extra value; expected `androidx.core.app.extra.BIG_TEXT`, was `android.bigText`
-ActionValue: androidx.core.app.NotificationCompat#EXTRA_CHRONOMETER_COUNT_DOWN:
- Inconsistent extra value; expected `androidx.core.app.extra.CHRONOMETER_COUNT_DOWN`, was `android.chronometerCountDown`
-ActionValue: androidx.core.app.NotificationCompat#EXTRA_COMPACT_ACTIONS:
- Inconsistent extra value; expected `androidx.core.app.extra.COMPACT_ACTIONS`, was `android.compactActions`
-ActionValue: androidx.core.app.NotificationCompat#EXTRA_CONVERSATION_TITLE:
- Inconsistent extra value; expected `androidx.core.app.extra.CONVERSATION_TITLE`, was `android.conversationTitle`
-ActionValue: androidx.core.app.NotificationCompat#EXTRA_HIDDEN_CONVERSATION_TITLE:
- Inconsistent extra value; expected `androidx.core.app.extra.HIDDEN_CONVERSATION_TITLE`, was `android.hiddenConversationTitle`
-ActionValue: androidx.core.app.NotificationCompat#EXTRA_INFO_TEXT:
- Inconsistent extra value; expected `androidx.core.app.extra.INFO_TEXT`, was `android.infoText`
-ActionValue: androidx.core.app.NotificationCompat#EXTRA_IS_GROUP_CONVERSATION:
- Inconsistent extra value; expected `androidx.core.app.extra.IS_GROUP_CONVERSATION`, was `android.isGroupConversation`
-ActionValue: androidx.core.app.NotificationCompat#EXTRA_LARGE_ICON:
- Inconsistent extra value; expected `androidx.core.app.extra.LARGE_ICON`, was `android.largeIcon`
-ActionValue: androidx.core.app.NotificationCompat#EXTRA_LARGE_ICON_BIG:
- Inconsistent extra value; expected `androidx.core.app.extra.LARGE_ICON_BIG`, was `android.largeIcon.big`
-ActionValue: androidx.core.app.NotificationCompat#EXTRA_MEDIA_SESSION:
- Inconsistent extra value; expected `androidx.core.app.extra.MEDIA_SESSION`, was `android.mediaSession`
-ActionValue: androidx.core.app.NotificationCompat#EXTRA_MESSAGES:
- Inconsistent extra value; expected `androidx.core.app.extra.MESSAGES`, was `android.messages`
-ActionValue: androidx.core.app.NotificationCompat#EXTRA_MESSAGING_STYLE_USER:
- Inconsistent extra value; expected `androidx.core.app.extra.MESSAGING_STYLE_USER`, was `android.messagingStyleUser`
-ActionValue: androidx.core.app.NotificationCompat#EXTRA_PEOPLE:
- Inconsistent extra value; expected `androidx.core.app.extra.PEOPLE`, was `android.people`
-ActionValue: androidx.core.app.NotificationCompat#EXTRA_PICTURE:
- Inconsistent extra value; expected `androidx.core.app.extra.PICTURE`, was `android.picture`
-ActionValue: androidx.core.app.NotificationCompat#EXTRA_PROGRESS:
- Inconsistent extra value; expected `androidx.core.app.extra.PROGRESS`, was `android.progress`
-ActionValue: androidx.core.app.NotificationCompat#EXTRA_PROGRESS_INDETERMINATE:
- Inconsistent extra value; expected `androidx.core.app.extra.PROGRESS_INDETERMINATE`, was `android.progressIndeterminate`
-ActionValue: androidx.core.app.NotificationCompat#EXTRA_PROGRESS_MAX:
- Inconsistent extra value; expected `androidx.core.app.extra.PROGRESS_MAX`, was `android.progressMax`
-ActionValue: androidx.core.app.NotificationCompat#EXTRA_REMOTE_INPUT_HISTORY:
- Inconsistent extra value; expected `androidx.core.app.extra.REMOTE_INPUT_HISTORY`, was `android.remoteInputHistory`
-ActionValue: androidx.core.app.NotificationCompat#EXTRA_SELF_DISPLAY_NAME:
- Inconsistent extra value; expected `androidx.core.app.extra.SELF_DISPLAY_NAME`, was `android.selfDisplayName`
-ActionValue: androidx.core.app.NotificationCompat#EXTRA_SHOW_CHRONOMETER:
- Inconsistent extra value; expected `androidx.core.app.extra.SHOW_CHRONOMETER`, was `android.showChronometer`
-ActionValue: androidx.core.app.NotificationCompat#EXTRA_SHOW_WHEN:
- Inconsistent extra value; expected `androidx.core.app.extra.SHOW_WHEN`, was `android.showWhen`
-ActionValue: androidx.core.app.NotificationCompat#EXTRA_SMALL_ICON:
- Inconsistent extra value; expected `androidx.core.app.extra.SMALL_ICON`, was `android.icon`
-ActionValue: androidx.core.app.NotificationCompat#EXTRA_SUB_TEXT:
- Inconsistent extra value; expected `androidx.core.app.extra.SUB_TEXT`, was `android.subText`
-ActionValue: androidx.core.app.NotificationCompat#EXTRA_SUMMARY_TEXT:
- Inconsistent extra value; expected `androidx.core.app.extra.SUMMARY_TEXT`, was `android.summaryText`
-ActionValue: androidx.core.app.NotificationCompat#EXTRA_TEMPLATE:
- Inconsistent extra value; expected `androidx.core.app.extra.TEMPLATE`, was `android.template`
-ActionValue: androidx.core.app.NotificationCompat#EXTRA_TEXT:
- Inconsistent extra value; expected `androidx.core.app.extra.TEXT`, was `android.text`
-ActionValue: androidx.core.app.NotificationCompat#EXTRA_TEXT_LINES:
- Inconsistent extra value; expected `androidx.core.app.extra.TEXT_LINES`, was `android.textLines`
-ActionValue: androidx.core.app.NotificationCompat#EXTRA_TITLE:
- Inconsistent extra value; expected `androidx.core.app.extra.TITLE`, was `android.title`
-ActionValue: androidx.core.app.NotificationCompat#EXTRA_TITLE_BIG:
- Inconsistent extra value; expected `androidx.core.app.extra.TITLE_BIG`, was `android.title.big`
ActionValue: androidx.core.app.NotificationCompatExtras#EXTRA_ACTION_EXTRAS:
Inconsistent extra value; expected `androidx.core.app.extra.ACTION_EXTRAS`, was `android.support.actionExtras`
ActionValue: androidx.core.app.NotificationCompatExtras#EXTRA_GROUP_KEY:
@@ -273,498 +211,10 @@
Missing nullability on parameter `sharedElements` in method `makeSceneTransitionAnimation`
MissingNullability: androidx.core.app.JobIntentService#onBind(android.content.Intent):
Missing nullability on method `onBind` return
-MissingNullability: androidx.core.app.NotificationCompat#getAction(android.app.Notification, int):
- Missing nullability on method `getAction` return
-MissingNullability: androidx.core.app.NotificationCompat#getAction(android.app.Notification, int) parameter #0:
- Missing nullability on parameter `notification` in method `getAction`
-MissingNullability: androidx.core.app.NotificationCompat#getActionCount(android.app.Notification) parameter #0:
- Missing nullability on parameter `notification` in method `getActionCount`
-MissingNullability: androidx.core.app.NotificationCompat#getAllowSystemGeneratedContextualActions(android.app.Notification) parameter #0:
- Missing nullability on parameter `notification` in method `getAllowSystemGeneratedContextualActions`
-MissingNullability: androidx.core.app.NotificationCompat#getBadgeIconType(android.app.Notification) parameter #0:
- Missing nullability on parameter `notification` in method `getBadgeIconType`
-MissingNullability: androidx.core.app.NotificationCompat#getCategory(android.app.Notification):
- Missing nullability on method `getCategory` return
-MissingNullability: androidx.core.app.NotificationCompat#getCategory(android.app.Notification) parameter #0:
- Missing nullability on parameter `notification` in method `getCategory`
-MissingNullability: androidx.core.app.NotificationCompat#getChannelId(android.app.Notification):
- Missing nullability on method `getChannelId` return
-MissingNullability: androidx.core.app.NotificationCompat#getChannelId(android.app.Notification) parameter #0:
- Missing nullability on parameter `notification` in method `getChannelId`
-MissingNullability: androidx.core.app.NotificationCompat#getContentTitle(android.app.Notification):
- Missing nullability on method `getContentTitle` return
-MissingNullability: androidx.core.app.NotificationCompat#getContentTitle(android.app.Notification) parameter #0:
- Missing nullability on parameter `notification` in method `getContentTitle`
-MissingNullability: androidx.core.app.NotificationCompat#getExtras(android.app.Notification) parameter #0:
- Missing nullability on parameter `notification` in method `getExtras`
-MissingNullability: androidx.core.app.NotificationCompat#getGroup(android.app.Notification):
- Missing nullability on method `getGroup` return
-MissingNullability: androidx.core.app.NotificationCompat#getGroup(android.app.Notification) parameter #0:
- Missing nullability on parameter `notification` in method `getGroup`
-MissingNullability: androidx.core.app.NotificationCompat#getGroupAlertBehavior(android.app.Notification) parameter #0:
- Missing nullability on parameter `notification` in method `getGroupAlertBehavior`
-MissingNullability: androidx.core.app.NotificationCompat#getInvisibleActions(android.app.Notification):
- Missing nullability on method `getInvisibleActions` return
-MissingNullability: androidx.core.app.NotificationCompat#getInvisibleActions(android.app.Notification) parameter #0:
- Missing nullability on parameter `notification` in method `getInvisibleActions`
-MissingNullability: androidx.core.app.NotificationCompat#getLocalOnly(android.app.Notification) parameter #0:
- Missing nullability on parameter `notification` in method `getLocalOnly`
-MissingNullability: androidx.core.app.NotificationCompat#getShortcutId(android.app.Notification):
- Missing nullability on method `getShortcutId` return
-MissingNullability: androidx.core.app.NotificationCompat#getShortcutId(android.app.Notification) parameter #0:
- Missing nullability on parameter `notification` in method `getShortcutId`
-MissingNullability: androidx.core.app.NotificationCompat#getSortKey(android.app.Notification):
- Missing nullability on method `getSortKey` return
-MissingNullability: androidx.core.app.NotificationCompat#getSortKey(android.app.Notification) parameter #0:
- Missing nullability on parameter `notification` in method `getSortKey`
-MissingNullability: androidx.core.app.NotificationCompat#getTimeoutAfter(android.app.Notification) parameter #0:
- Missing nullability on parameter `notification` in method `getTimeoutAfter`
-MissingNullability: androidx.core.app.NotificationCompat#isGroupSummary(android.app.Notification) parameter #0:
- Missing nullability on parameter `notification` in method `isGroupSummary`
-MissingNullability: androidx.core.app.NotificationCompat.Action#Action(int, CharSequence, android.app.PendingIntent) parameter #1:
- Missing nullability on parameter `title` in method `Action`
-MissingNullability: androidx.core.app.NotificationCompat.Action#Action(int, CharSequence, android.app.PendingIntent) parameter #2:
- Missing nullability on parameter `intent` in method `Action`
MissingNullability: androidx.core.app.NotificationCompat.Action#actionIntent:
Missing nullability on field `actionIntent` in class `class androidx.core.app.NotificationCompat.Action`
-MissingNullability: androidx.core.app.NotificationCompat.Action#getActionIntent():
- Missing nullability on method `getActionIntent` return
-MissingNullability: androidx.core.app.NotificationCompat.Action#getDataOnlyRemoteInputs():
- Missing nullability on method `getDataOnlyRemoteInputs` return
-MissingNullability: androidx.core.app.NotificationCompat.Action#getExtras():
- Missing nullability on method `getExtras` return
-MissingNullability: androidx.core.app.NotificationCompat.Action#getRemoteInputs():
- Missing nullability on method `getRemoteInputs` return
-MissingNullability: androidx.core.app.NotificationCompat.Action#getTitle():
- Missing nullability on method `getTitle` return
MissingNullability: androidx.core.app.NotificationCompat.Action#title:
Missing nullability on field `title` in class `class androidx.core.app.NotificationCompat.Action`
-MissingNullability: androidx.core.app.NotificationCompat.Action.Builder#Builder(androidx.core.app.NotificationCompat.Action) parameter #0:
- Missing nullability on parameter `action` in method `Builder`
-MissingNullability: androidx.core.app.NotificationCompat.Action.Builder#Builder(int, CharSequence, android.app.PendingIntent) parameter #1:
- Missing nullability on parameter `title` in method `Builder`
-MissingNullability: androidx.core.app.NotificationCompat.Action.Builder#Builder(int, CharSequence, android.app.PendingIntent) parameter #2:
- Missing nullability on parameter `intent` in method `Builder`
-MissingNullability: androidx.core.app.NotificationCompat.Action.Builder#addExtras(android.os.Bundle):
- Missing nullability on method `addExtras` return
-MissingNullability: androidx.core.app.NotificationCompat.Action.Builder#addExtras(android.os.Bundle) parameter #0:
- Missing nullability on parameter `extras` in method `addExtras`
-MissingNullability: androidx.core.app.NotificationCompat.Action.Builder#addRemoteInput(androidx.core.app.RemoteInput):
- Missing nullability on method `addRemoteInput` return
-MissingNullability: androidx.core.app.NotificationCompat.Action.Builder#addRemoteInput(androidx.core.app.RemoteInput) parameter #0:
- Missing nullability on parameter `remoteInput` in method `addRemoteInput`
-MissingNullability: androidx.core.app.NotificationCompat.Action.Builder#build():
- Missing nullability on method `build` return
-MissingNullability: androidx.core.app.NotificationCompat.Action.Builder#extend(androidx.core.app.NotificationCompat.Action.Extender):
- Missing nullability on method `extend` return
-MissingNullability: androidx.core.app.NotificationCompat.Action.Builder#extend(androidx.core.app.NotificationCompat.Action.Extender) parameter #0:
- Missing nullability on parameter `extender` in method `extend`
-MissingNullability: androidx.core.app.NotificationCompat.Action.Builder#getExtras():
- Missing nullability on method `getExtras` return
-MissingNullability: androidx.core.app.NotificationCompat.Action.Builder#setAllowGeneratedReplies(boolean):
- Missing nullability on method `setAllowGeneratedReplies` return
-MissingNullability: androidx.core.app.NotificationCompat.Action.Builder#setSemanticAction(int):
- Missing nullability on method `setSemanticAction` return
-MissingNullability: androidx.core.app.NotificationCompat.Action.Builder#setShowsUserInterface(boolean):
- Missing nullability on method `setShowsUserInterface` return
-MissingNullability: androidx.core.app.NotificationCompat.Action.Extender#extend(androidx.core.app.NotificationCompat.Action.Builder):
- Missing nullability on method `extend` return
-MissingNullability: androidx.core.app.NotificationCompat.Action.Extender#extend(androidx.core.app.NotificationCompat.Action.Builder) parameter #0:
- Missing nullability on parameter `builder` in method `extend`
-MissingNullability: androidx.core.app.NotificationCompat.Action.WearableExtender#WearableExtender(androidx.core.app.NotificationCompat.Action) parameter #0:
- Missing nullability on parameter `action` in method `WearableExtender`
-MissingNullability: androidx.core.app.NotificationCompat.Action.WearableExtender#clone():
- Missing nullability on method `clone` return
-MissingNullability: androidx.core.app.NotificationCompat.Action.WearableExtender#extend(androidx.core.app.NotificationCompat.Action.Builder):
- Missing nullability on method `extend` return
-MissingNullability: androidx.core.app.NotificationCompat.Action.WearableExtender#extend(androidx.core.app.NotificationCompat.Action.Builder) parameter #0:
- Missing nullability on parameter `builder` in method `extend`
-MissingNullability: androidx.core.app.NotificationCompat.Action.WearableExtender#setAvailableOffline(boolean):
- Missing nullability on method `setAvailableOffline` return
-MissingNullability: androidx.core.app.NotificationCompat.Action.WearableExtender#setCancelLabel(CharSequence) parameter #0:
- Missing nullability on parameter `label` in method `setCancelLabel`
-MissingNullability: androidx.core.app.NotificationCompat.Action.WearableExtender#setConfirmLabel(CharSequence) parameter #0:
- Missing nullability on parameter `label` in method `setConfirmLabel`
-MissingNullability: androidx.core.app.NotificationCompat.Action.WearableExtender#setHintDisplayActionInline(boolean):
- Missing nullability on method `setHintDisplayActionInline` return
-MissingNullability: androidx.core.app.NotificationCompat.Action.WearableExtender#setHintLaunchesActivity(boolean):
- Missing nullability on method `setHintLaunchesActivity` return
-MissingNullability: androidx.core.app.NotificationCompat.Action.WearableExtender#setInProgressLabel(CharSequence) parameter #0:
- Missing nullability on parameter `label` in method `setInProgressLabel`
-MissingNullability: androidx.core.app.NotificationCompat.BigPictureStyle#BigPictureStyle(androidx.core.app.NotificationCompat.Builder) parameter #0:
- Missing nullability on parameter `builder` in method `BigPictureStyle`
-MissingNullability: androidx.core.app.NotificationCompat.BigPictureStyle#bigLargeIcon(android.graphics.Bitmap):
- Missing nullability on method `bigLargeIcon` return
-MissingNullability: androidx.core.app.NotificationCompat.BigPictureStyle#bigLargeIcon(android.graphics.Bitmap) parameter #0:
- Missing nullability on parameter `b` in method `bigLargeIcon`
-MissingNullability: androidx.core.app.NotificationCompat.BigPictureStyle#bigPicture(android.graphics.Bitmap):
- Missing nullability on method `bigPicture` return
-MissingNullability: androidx.core.app.NotificationCompat.BigPictureStyle#bigPicture(android.graphics.Bitmap) parameter #0:
- Missing nullability on parameter `b` in method `bigPicture`
-MissingNullability: androidx.core.app.NotificationCompat.BigPictureStyle#setBigContentTitle(CharSequence):
- Missing nullability on method `setBigContentTitle` return
-MissingNullability: androidx.core.app.NotificationCompat.BigPictureStyle#setBigContentTitle(CharSequence) parameter #0:
- Missing nullability on parameter `title` in method `setBigContentTitle`
-MissingNullability: androidx.core.app.NotificationCompat.BigPictureStyle#setSummaryText(CharSequence):
- Missing nullability on method `setSummaryText` return
-MissingNullability: androidx.core.app.NotificationCompat.BigPictureStyle#setSummaryText(CharSequence) parameter #0:
- Missing nullability on parameter `cs` in method `setSummaryText`
-MissingNullability: androidx.core.app.NotificationCompat.BigTextStyle#BigTextStyle(androidx.core.app.NotificationCompat.Builder) parameter #0:
- Missing nullability on parameter `builder` in method `BigTextStyle`
-MissingNullability: androidx.core.app.NotificationCompat.BigTextStyle#bigText(CharSequence):
- Missing nullability on method `bigText` return
-MissingNullability: androidx.core.app.NotificationCompat.BigTextStyle#bigText(CharSequence) parameter #0:
- Missing nullability on parameter `cs` in method `bigText`
-MissingNullability: androidx.core.app.NotificationCompat.BigTextStyle#setBigContentTitle(CharSequence):
- Missing nullability on method `setBigContentTitle` return
-MissingNullability: androidx.core.app.NotificationCompat.BigTextStyle#setBigContentTitle(CharSequence) parameter #0:
- Missing nullability on parameter `title` in method `setBigContentTitle`
-MissingNullability: androidx.core.app.NotificationCompat.BigTextStyle#setSummaryText(CharSequence):
- Missing nullability on method `setSummaryText` return
-MissingNullability: androidx.core.app.NotificationCompat.BigTextStyle#setSummaryText(CharSequence) parameter #0:
- Missing nullability on parameter `cs` in method `setSummaryText`
-MissingNullability: androidx.core.app.NotificationCompat.Builder#Builder(android.content.Context) parameter #0:
- Missing nullability on parameter `context` in method `Builder`
-MissingNullability: androidx.core.app.NotificationCompat.Builder#addAction(androidx.core.app.NotificationCompat.Action):
- Missing nullability on method `addAction` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#addAction(androidx.core.app.NotificationCompat.Action) parameter #0:
- Missing nullability on parameter `action` in method `addAction`
-MissingNullability: androidx.core.app.NotificationCompat.Builder#addAction(int, CharSequence, android.app.PendingIntent):
- Missing nullability on method `addAction` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#addAction(int, CharSequence, android.app.PendingIntent) parameter #1:
- Missing nullability on parameter `title` in method `addAction`
-MissingNullability: androidx.core.app.NotificationCompat.Builder#addAction(int, CharSequence, android.app.PendingIntent) parameter #2:
- Missing nullability on parameter `intent` in method `addAction`
-MissingNullability: androidx.core.app.NotificationCompat.Builder#addExtras(android.os.Bundle):
- Missing nullability on method `addExtras` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#addExtras(android.os.Bundle) parameter #0:
- Missing nullability on parameter `extras` in method `addExtras`
-MissingNullability: androidx.core.app.NotificationCompat.Builder#addInvisibleAction(androidx.core.app.NotificationCompat.Action):
- Missing nullability on method `addInvisibleAction` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#addInvisibleAction(androidx.core.app.NotificationCompat.Action) parameter #0:
- Missing nullability on parameter `action` in method `addInvisibleAction`
-MissingNullability: androidx.core.app.NotificationCompat.Builder#addInvisibleAction(int, CharSequence, android.app.PendingIntent):
- Missing nullability on method `addInvisibleAction` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#addInvisibleAction(int, CharSequence, android.app.PendingIntent) parameter #1:
- Missing nullability on parameter `title` in method `addInvisibleAction`
-MissingNullability: androidx.core.app.NotificationCompat.Builder#addInvisibleAction(int, CharSequence, android.app.PendingIntent) parameter #2:
- Missing nullability on parameter `intent` in method `addInvisibleAction`
-MissingNullability: androidx.core.app.NotificationCompat.Builder#addPerson(String) parameter #0:
- Missing nullability on parameter `uri` in method `addPerson`
-MissingNullability: androidx.core.app.NotificationCompat.Builder#build():
- Missing nullability on method `build` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#extend(androidx.core.app.NotificationCompat.Extender):
- Missing nullability on method `extend` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#extend(androidx.core.app.NotificationCompat.Extender) parameter #0:
- Missing nullability on parameter `extender` in method `extend`
-MissingNullability: androidx.core.app.NotificationCompat.Builder#getExtras():
- Missing nullability on method `getExtras` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#limitCharSequenceLength(CharSequence):
- Missing nullability on method `limitCharSequenceLength` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#limitCharSequenceLength(CharSequence) parameter #0:
- Missing nullability on parameter `cs` in method `limitCharSequenceLength`
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setAutoCancel(boolean):
- Missing nullability on method `setAutoCancel` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setBadgeIconType(int):
- Missing nullability on method `setBadgeIconType` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setCategory(String):
- Missing nullability on method `setCategory` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setCategory(String) parameter #0:
- Missing nullability on parameter `category` in method `setCategory`
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setChannelId(String):
- Missing nullability on method `setChannelId` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setColor(int):
- Missing nullability on method `setColor` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setColorized(boolean):
- Missing nullability on method `setColorized` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setContent(android.widget.RemoteViews):
- Missing nullability on method `setContent` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setContent(android.widget.RemoteViews) parameter #0:
- Missing nullability on parameter `views` in method `setContent`
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setContentInfo(CharSequence):
- Missing nullability on method `setContentInfo` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setContentInfo(CharSequence) parameter #0:
- Missing nullability on parameter `info` in method `setContentInfo`
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setContentIntent(android.app.PendingIntent):
- Missing nullability on method `setContentIntent` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setContentIntent(android.app.PendingIntent) parameter #0:
- Missing nullability on parameter `intent` in method `setContentIntent`
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setContentText(CharSequence):
- Missing nullability on method `setContentText` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setContentText(CharSequence) parameter #0:
- Missing nullability on parameter `text` in method `setContentText`
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setContentTitle(CharSequence):
- Missing nullability on method `setContentTitle` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setContentTitle(CharSequence) parameter #0:
- Missing nullability on parameter `title` in method `setContentTitle`
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setCustomBigContentView(android.widget.RemoteViews):
- Missing nullability on method `setCustomBigContentView` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setCustomBigContentView(android.widget.RemoteViews) parameter #0:
- Missing nullability on parameter `contentView` in method `setCustomBigContentView`
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setCustomContentView(android.widget.RemoteViews):
- Missing nullability on method `setCustomContentView` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setCustomContentView(android.widget.RemoteViews) parameter #0:
- Missing nullability on parameter `contentView` in method `setCustomContentView`
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setCustomHeadsUpContentView(android.widget.RemoteViews):
- Missing nullability on method `setCustomHeadsUpContentView` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setCustomHeadsUpContentView(android.widget.RemoteViews) parameter #0:
- Missing nullability on parameter `contentView` in method `setCustomHeadsUpContentView`
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setDefaults(int):
- Missing nullability on method `setDefaults` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setDeleteIntent(android.app.PendingIntent):
- Missing nullability on method `setDeleteIntent` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setDeleteIntent(android.app.PendingIntent) parameter #0:
- Missing nullability on parameter `intent` in method `setDeleteIntent`
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setExtras(android.os.Bundle):
- Missing nullability on method `setExtras` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setExtras(android.os.Bundle) parameter #0:
- Missing nullability on parameter `extras` in method `setExtras`
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setFullScreenIntent(android.app.PendingIntent, boolean):
- Missing nullability on method `setFullScreenIntent` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setFullScreenIntent(android.app.PendingIntent, boolean) parameter #0:
- Missing nullability on parameter `intent` in method `setFullScreenIntent`
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setGroup(String):
- Missing nullability on method `setGroup` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setGroup(String) parameter #0:
- Missing nullability on parameter `groupKey` in method `setGroup`
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setGroupAlertBehavior(int):
- Missing nullability on method `setGroupAlertBehavior` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setGroupSummary(boolean):
- Missing nullability on method `setGroupSummary` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setLargeIcon(android.graphics.Bitmap):
- Missing nullability on method `setLargeIcon` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setLargeIcon(android.graphics.Bitmap) parameter #0:
- Missing nullability on parameter `icon` in method `setLargeIcon`
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setLights(int, int, int):
- Missing nullability on method `setLights` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setLocalOnly(boolean):
- Missing nullability on method `setLocalOnly` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setNumber(int):
- Missing nullability on method `setNumber` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setOngoing(boolean):
- Missing nullability on method `setOngoing` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setOnlyAlertOnce(boolean):
- Missing nullability on method `setOnlyAlertOnce` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setPriority(int):
- Missing nullability on method `setPriority` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setProgress(int, int, boolean):
- Missing nullability on method `setProgress` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setPublicVersion(android.app.Notification):
- Missing nullability on method `setPublicVersion` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setPublicVersion(android.app.Notification) parameter #0:
- Missing nullability on parameter `n` in method `setPublicVersion`
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setRemoteInputHistory(CharSequence[]):
- Missing nullability on method `setRemoteInputHistory` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setRemoteInputHistory(CharSequence[]) parameter #0:
- Missing nullability on parameter `text` in method `setRemoteInputHistory`
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setShortcutId(String):
- Missing nullability on method `setShortcutId` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setShortcutId(String) parameter #0:
- Missing nullability on parameter `shortcutId` in method `setShortcutId`
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setShowWhen(boolean):
- Missing nullability on method `setShowWhen` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setSmallIcon(int):
- Missing nullability on method `setSmallIcon` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setSmallIcon(int, int):
- Missing nullability on method `setSmallIcon` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setSortKey(String):
- Missing nullability on method `setSortKey` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setSortKey(String) parameter #0:
- Missing nullability on parameter `sortKey` in method `setSortKey`
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setSound(android.net.Uri):
- Missing nullability on method `setSound` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setSound(android.net.Uri) parameter #0:
- Missing nullability on parameter `sound` in method `setSound`
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setSound(android.net.Uri, int):
- Missing nullability on method `setSound` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setSound(android.net.Uri, int) parameter #0:
- Missing nullability on parameter `sound` in method `setSound`
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setStyle(androidx.core.app.NotificationCompat.Style):
- Missing nullability on method `setStyle` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setStyle(androidx.core.app.NotificationCompat.Style) parameter #0:
- Missing nullability on parameter `style` in method `setStyle`
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setSubText(CharSequence):
- Missing nullability on method `setSubText` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setSubText(CharSequence) parameter #0:
- Missing nullability on parameter `text` in method `setSubText`
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setTicker(CharSequence):
- Missing nullability on method `setTicker` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setTicker(CharSequence) parameter #0:
- Missing nullability on parameter `tickerText` in method `setTicker`
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setTicker(CharSequence, android.widget.RemoteViews):
- Missing nullability on method `setTicker` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setTicker(CharSequence, android.widget.RemoteViews) parameter #0:
- Missing nullability on parameter `tickerText` in method `setTicker`
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setTicker(CharSequence, android.widget.RemoteViews) parameter #1:
- Missing nullability on parameter `views` in method `setTicker`
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setTimeoutAfter(long):
- Missing nullability on method `setTimeoutAfter` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setUsesChronometer(boolean):
- Missing nullability on method `setUsesChronometer` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setVibrate(long[]):
- Missing nullability on method `setVibrate` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setVibrate(long[]) parameter #0:
- Missing nullability on parameter `pattern` in method `setVibrate`
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setVisibility(int):
- Missing nullability on method `setVisibility` return
-MissingNullability: androidx.core.app.NotificationCompat.Builder#setWhen(long):
- Missing nullability on method `setWhen` return
-MissingNullability: androidx.core.app.NotificationCompat.CarExtender#CarExtender(android.app.Notification) parameter #0:
- Missing nullability on parameter `notification` in method `CarExtender`
-MissingNullability: androidx.core.app.NotificationCompat.CarExtender#extend(androidx.core.app.NotificationCompat.Builder):
- Missing nullability on method `extend` return
-MissingNullability: androidx.core.app.NotificationCompat.CarExtender#extend(androidx.core.app.NotificationCompat.Builder) parameter #0:
- Missing nullability on parameter `builder` in method `extend`
-MissingNullability: androidx.core.app.NotificationCompat.CarExtender#getLargeIcon():
- Missing nullability on method `getLargeIcon` return
-MissingNullability: androidx.core.app.NotificationCompat.CarExtender#setColor(int):
- Missing nullability on method `setColor` return
-MissingNullability: androidx.core.app.NotificationCompat.CarExtender#setLargeIcon(android.graphics.Bitmap):
- Missing nullability on method `setLargeIcon` return
-MissingNullability: androidx.core.app.NotificationCompat.CarExtender#setLargeIcon(android.graphics.Bitmap) parameter #0:
- Missing nullability on parameter `largeIcon` in method `setLargeIcon`
-MissingNullability: androidx.core.app.NotificationCompat.CarExtender#setUnreadConversation(androidx.core.app.NotificationCompat.CarExtender.UnreadConversation) parameter #0:
- Missing nullability on parameter `unreadConversation` in method `setUnreadConversation`
-MissingNullability: androidx.core.app.NotificationCompat.CarExtender.UnreadConversation#getMessages():
- Missing nullability on method `getMessages` return
-MissingNullability: androidx.core.app.NotificationCompat.CarExtender.UnreadConversation#getParticipant():
- Missing nullability on method `getParticipant` return
-MissingNullability: androidx.core.app.NotificationCompat.CarExtender.UnreadConversation#getParticipants():
- Missing nullability on method `getParticipants` return
-MissingNullability: androidx.core.app.NotificationCompat.CarExtender.UnreadConversation#getReadPendingIntent():
- Missing nullability on method `getReadPendingIntent` return
-MissingNullability: androidx.core.app.NotificationCompat.CarExtender.UnreadConversation#getRemoteInput():
- Missing nullability on method `getRemoteInput` return
-MissingNullability: androidx.core.app.NotificationCompat.CarExtender.UnreadConversation#getReplyPendingIntent():
- Missing nullability on method `getReplyPendingIntent` return
-MissingNullability: androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder#Builder(String) parameter #0:
- Missing nullability on parameter `name` in method `Builder`
-MissingNullability: androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder#addMessage(String):
- Missing nullability on method `addMessage` return
-MissingNullability: androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder#addMessage(String) parameter #0:
- Missing nullability on parameter `message` in method `addMessage`
-MissingNullability: androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder#build():
- Missing nullability on method `build` return
-MissingNullability: androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder#setLatestTimestamp(long):
- Missing nullability on method `setLatestTimestamp` return
-MissingNullability: androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder#setReadPendingIntent(android.app.PendingIntent):
- Missing nullability on method `setReadPendingIntent` return
-MissingNullability: androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder#setReadPendingIntent(android.app.PendingIntent) parameter #0:
- Missing nullability on parameter `pendingIntent` in method `setReadPendingIntent`
-MissingNullability: androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder#setReplyAction(android.app.PendingIntent, androidx.core.app.RemoteInput):
- Missing nullability on method `setReplyAction` return
-MissingNullability: androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder#setReplyAction(android.app.PendingIntent, androidx.core.app.RemoteInput) parameter #0:
- Missing nullability on parameter `pendingIntent` in method `setReplyAction`
-MissingNullability: androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder#setReplyAction(android.app.PendingIntent, androidx.core.app.RemoteInput) parameter #1:
- Missing nullability on parameter `remoteInput` in method `setReplyAction`
-MissingNullability: androidx.core.app.NotificationCompat.Extender#extend(androidx.core.app.NotificationCompat.Builder):
- Missing nullability on method `extend` return
-MissingNullability: androidx.core.app.NotificationCompat.Extender#extend(androidx.core.app.NotificationCompat.Builder) parameter #0:
- Missing nullability on parameter `builder` in method `extend`
-MissingNullability: androidx.core.app.NotificationCompat.InboxStyle#InboxStyle(androidx.core.app.NotificationCompat.Builder) parameter #0:
- Missing nullability on parameter `builder` in method `InboxStyle`
-MissingNullability: androidx.core.app.NotificationCompat.InboxStyle#addLine(CharSequence):
- Missing nullability on method `addLine` return
-MissingNullability: androidx.core.app.NotificationCompat.InboxStyle#addLine(CharSequence) parameter #0:
- Missing nullability on parameter `cs` in method `addLine`
-MissingNullability: androidx.core.app.NotificationCompat.InboxStyle#setBigContentTitle(CharSequence):
- Missing nullability on method `setBigContentTitle` return
-MissingNullability: androidx.core.app.NotificationCompat.InboxStyle#setBigContentTitle(CharSequence) parameter #0:
- Missing nullability on parameter `title` in method `setBigContentTitle`
-MissingNullability: androidx.core.app.NotificationCompat.InboxStyle#setSummaryText(CharSequence):
- Missing nullability on method `setSummaryText` return
-MissingNullability: androidx.core.app.NotificationCompat.InboxStyle#setSummaryText(CharSequence) parameter #0:
- Missing nullability on parameter `cs` in method `setSummaryText`
-MissingNullability: androidx.core.app.NotificationCompat.MessagingStyle#addCompatExtras(android.os.Bundle) parameter #0:
- Missing nullability on parameter `extras` in method `addCompatExtras`
-MissingNullability: androidx.core.app.NotificationCompat.MessagingStyle#addMessage(CharSequence, long, CharSequence) parameter #0:
- Missing nullability on parameter `text` in method `addMessage`
-MissingNullability: androidx.core.app.NotificationCompat.MessagingStyle#addMessage(CharSequence, long, CharSequence) parameter #2:
- Missing nullability on parameter `sender` in method `addMessage`
-MissingNullability: androidx.core.app.NotificationCompat.MessagingStyle#addMessage(CharSequence, long, androidx.core.app.Person):
- Missing nullability on method `addMessage` return
-MissingNullability: androidx.core.app.NotificationCompat.MessagingStyle#addMessage(CharSequence, long, androidx.core.app.Person) parameter #0:
- Missing nullability on parameter `text` in method `addMessage`
-MissingNullability: androidx.core.app.NotificationCompat.MessagingStyle#addMessage(CharSequence, long, androidx.core.app.Person) parameter #2:
- Missing nullability on parameter `person` in method `addMessage`
-MissingNullability: androidx.core.app.NotificationCompat.MessagingStyle#addMessage(androidx.core.app.NotificationCompat.MessagingStyle.Message):
- Missing nullability on method `addMessage` return
-MissingNullability: androidx.core.app.NotificationCompat.MessagingStyle#addMessage(androidx.core.app.NotificationCompat.MessagingStyle.Message) parameter #0:
- Missing nullability on parameter `message` in method `addMessage`
-MissingNullability: androidx.core.app.NotificationCompat.MessagingStyle#extractMessagingStyleFromNotification(android.app.Notification) parameter #0:
- Missing nullability on parameter `notification` in method `extractMessagingStyleFromNotification`
-MissingNullability: androidx.core.app.NotificationCompat.MessagingStyle#getMessages():
- Missing nullability on method `getMessages` return
-MissingNullability: androidx.core.app.NotificationCompat.MessagingStyle#getUser():
- Missing nullability on method `getUser` return
-MissingNullability: androidx.core.app.NotificationCompat.MessagingStyle#setConversationTitle(CharSequence):
- Missing nullability on method `setConversationTitle` return
-MissingNullability: androidx.core.app.NotificationCompat.MessagingStyle#setGroupConversation(boolean):
- Missing nullability on method `setGroupConversation` return
-MissingNullability: androidx.core.app.NotificationCompat.MessagingStyle.Message#Message(CharSequence, long, CharSequence) parameter #0:
- Missing nullability on parameter `text` in method `Message`
-MissingNullability: androidx.core.app.NotificationCompat.MessagingStyle.Message#Message(CharSequence, long, CharSequence) parameter #2:
- Missing nullability on parameter `sender` in method `Message`
-MissingNullability: androidx.core.app.NotificationCompat.MessagingStyle.Message#Message(CharSequence, long, androidx.core.app.Person) parameter #0:
- Missing nullability on parameter `text` in method `Message`
-MissingNullability: androidx.core.app.NotificationCompat.MessagingStyle.Message#setData(String, android.net.Uri):
- Missing nullability on method `setData` return
-MissingNullability: androidx.core.app.NotificationCompat.MessagingStyle.Message#setData(String, android.net.Uri) parameter #0:
- Missing nullability on parameter `dataMimeType` in method `setData`
-MissingNullability: androidx.core.app.NotificationCompat.MessagingStyle.Message#setData(String, android.net.Uri) parameter #1:
- Missing nullability on parameter `dataUri` in method `setData`
-MissingNullability: androidx.core.app.NotificationCompat.Style#build():
- Missing nullability on method `build` return
-MissingNullability: androidx.core.app.NotificationCompat.Style#setBuilder(androidx.core.app.NotificationCompat.Builder) parameter #0:
- Missing nullability on parameter `builder` in method `setBuilder`
-MissingNullability: androidx.core.app.NotificationCompat.WearableExtender#WearableExtender(android.app.Notification) parameter #0:
- Missing nullability on parameter `notification` in method `WearableExtender`
-MissingNullability: androidx.core.app.NotificationCompat.WearableExtender#addAction(androidx.core.app.NotificationCompat.Action):
- Missing nullability on method `addAction` return
-MissingNullability: androidx.core.app.NotificationCompat.WearableExtender#addAction(androidx.core.app.NotificationCompat.Action) parameter #0:
- Missing nullability on parameter `action` in method `addAction`
-MissingNullability: androidx.core.app.NotificationCompat.WearableExtender#addActions(java.util.List<androidx.core.app.NotificationCompat.Action>):
- Missing nullability on method `addActions` return
-MissingNullability: androidx.core.app.NotificationCompat.WearableExtender#addActions(java.util.List<androidx.core.app.NotificationCompat.Action>) parameter #0:
- Missing nullability on parameter `actions` in method `addActions`
-MissingNullability: androidx.core.app.NotificationCompat.WearableExtender#addPage(android.app.Notification) parameter #0:
- Missing nullability on parameter `page` in method `addPage`
-MissingNullability: androidx.core.app.NotificationCompat.WearableExtender#addPages(java.util.List<android.app.Notification>) parameter #0:
- Missing nullability on parameter `pages` in method `addPages`
-MissingNullability: androidx.core.app.NotificationCompat.WearableExtender#clearActions():
- Missing nullability on method `clearActions` return
-MissingNullability: androidx.core.app.NotificationCompat.WearableExtender#clone():
- Missing nullability on method `clone` return
-MissingNullability: androidx.core.app.NotificationCompat.WearableExtender#extend(androidx.core.app.NotificationCompat.Builder):
- Missing nullability on method `extend` return
-MissingNullability: androidx.core.app.NotificationCompat.WearableExtender#extend(androidx.core.app.NotificationCompat.Builder) parameter #0:
- Missing nullability on parameter `builder` in method `extend`
-MissingNullability: androidx.core.app.NotificationCompat.WearableExtender#getActions():
- Missing nullability on method `getActions` return
-MissingNullability: androidx.core.app.NotificationCompat.WearableExtender#getBridgeTag():
- Missing nullability on method `getBridgeTag` return
-MissingNullability: androidx.core.app.NotificationCompat.WearableExtender#getDismissalId():
- Missing nullability on method `getDismissalId` return
-MissingNullability: androidx.core.app.NotificationCompat.WearableExtender#setBackground(android.graphics.Bitmap) parameter #0:
- Missing nullability on parameter `background` in method `setBackground`
-MissingNullability: androidx.core.app.NotificationCompat.WearableExtender#setBridgeTag(String):
- Missing nullability on method `setBridgeTag` return
-MissingNullability: androidx.core.app.NotificationCompat.WearableExtender#setBridgeTag(String) parameter #0:
- Missing nullability on parameter `bridgeTag` in method `setBridgeTag`
-MissingNullability: androidx.core.app.NotificationCompat.WearableExtender#setContentAction(int):
- Missing nullability on method `setContentAction` return
-MissingNullability: androidx.core.app.NotificationCompat.WearableExtender#setContentIntentAvailableOffline(boolean):
- Missing nullability on method `setContentIntentAvailableOffline` return
-MissingNullability: androidx.core.app.NotificationCompat.WearableExtender#setDismissalId(String):
- Missing nullability on method `setDismissalId` return
-MissingNullability: androidx.core.app.NotificationCompat.WearableExtender#setDismissalId(String) parameter #0:
- Missing nullability on parameter `dismissalId` in method `setDismissalId`
-MissingNullability: androidx.core.app.NotificationCompat.WearableExtender#setDisplayIntent(android.app.PendingIntent) parameter #0:
- Missing nullability on parameter `intent` in method `setDisplayIntent`
-MissingNullability: androidx.core.app.NotificationCompat.WearableExtender#setHintContentIntentLaunchesActivity(boolean):
- Missing nullability on method `setHintContentIntentLaunchesActivity` return
-MissingNullability: androidx.core.app.NotificationCompat.WearableExtender#setStartScrollBottom(boolean):
- Missing nullability on method `setStartScrollBottom` return
MissingNullability: androidx.core.app.NotificationCompatSideChannelService#cancel(String, int, String) parameter #0:
Missing nullability on parameter `packageName` in method `cancel`
MissingNullability: androidx.core.app.NotificationCompatSideChannelService#cancel(String, int, String) parameter #2:
diff --git a/core/core/api/current.txt b/core/core/api/current.txt
index 34eec64..ba78e54 100644
--- a/core/core/api/current.txt
+++ b/core/core/api/current.txt
@@ -240,6 +240,7 @@
method @RequiresApi(21) public static java.util.List<androidx.core.app.NotificationCompat.Action!> getInvisibleActions(android.app.Notification);
method public static boolean getLocalOnly(android.app.Notification);
method public static androidx.core.content.LocusIdCompat? getLocusId(android.app.Notification);
+ method public static CharSequence? getSettingsText(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);
@@ -271,10 +272,13 @@
field public static final String EXTRA_AUDIO_CONTENTS_URI = "android.audioContents";
field public static final String EXTRA_BACKGROUND_IMAGE_URI = "android.backgroundImageUri";
field public static final String EXTRA_BIG_TEXT = "android.bigText";
+ field public static final String EXTRA_CHANNEL_GROUP_ID = "android.intent.extra.CHANNEL_GROUP_ID";
+ field public static final String EXTRA_CHANNEL_ID = "android.intent.extra.CHANNEL_ID";
field public static final String EXTRA_CHRONOMETER_COUNT_DOWN = "android.chronometerCountDown";
field public static final String EXTRA_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_HISTORIC_MESSAGES = "android.messages.historic";
field public static final String EXTRA_INFO_TEXT = "android.infoText";
field public static final String EXTRA_IS_GROUP_CONVERSATION = "android.isGroupConversation";
field public static final String EXTRA_LARGE_ICON = "android.largeIcon";
@@ -282,6 +286,8 @@
field public static final String EXTRA_MEDIA_SESSION = "android.mediaSession";
field public static final String EXTRA_MESSAGES = "android.messages";
field public static final String EXTRA_MESSAGING_STYLE_USER = "android.messagingStyleUser";
+ field public static final String EXTRA_NOTIFICATION_ID = "android.intent.extra.NOTIFICATION_ID";
+ field public static final String EXTRA_NOTIFICATION_TAG = "android.intent.extra.NOTIFICATION_TAG";
field 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";
@@ -314,6 +320,7 @@
field public static final int GROUP_ALERT_CHILDREN = 2; // 0x2
field public static final int GROUP_ALERT_SUMMARY = 1; // 0x1
field public static final String GROUP_KEY_SILENT = "silent";
+ field public static final String INTENT_CATEGORY_NOTIFICATION_PREFERENCES = "android.intent.category.NOTIFICATION_PREFERENCES";
field public static final int PRIORITY_DEFAULT = 0; // 0x0
field public static final int PRIORITY_HIGH = 1; // 0x1
field public static final int PRIORITY_LOW = -1; // 0xffffffff
@@ -488,6 +495,7 @@
method public androidx.core.app.NotificationCompat.Builder setProgress(int, int, boolean);
method public androidx.core.app.NotificationCompat.Builder setPublicVersion(android.app.Notification?);
method public androidx.core.app.NotificationCompat.Builder setRemoteInputHistory(CharSequence![]?);
+ method public androidx.core.app.NotificationCompat.Builder setSettingsText(CharSequence?);
method public androidx.core.app.NotificationCompat.Builder setShortcutId(String?);
method public androidx.core.app.NotificationCompat.Builder setShortcutInfo(androidx.core.content.pm.ShortcutInfoCompat?);
method public androidx.core.app.NotificationCompat.Builder setShowWhen(boolean);
@@ -560,11 +568,13 @@
ctor @Deprecated public NotificationCompat.MessagingStyle(CharSequence);
ctor public NotificationCompat.MessagingStyle(androidx.core.app.Person);
method public void addCompatExtras(android.os.Bundle);
+ method public androidx.core.app.NotificationCompat.MessagingStyle addHistoricMessage(androidx.core.app.NotificationCompat.MessagingStyle.Message);
method @Deprecated public androidx.core.app.NotificationCompat.MessagingStyle addMessage(CharSequence?, long, CharSequence?);
method public androidx.core.app.NotificationCompat.MessagingStyle addMessage(CharSequence?, long, androidx.core.app.Person?);
method public androidx.core.app.NotificationCompat.MessagingStyle addMessage(androidx.core.app.NotificationCompat.MessagingStyle.Message);
method public static androidx.core.app.NotificationCompat.MessagingStyle? extractMessagingStyleFromNotification(android.app.Notification);
method public CharSequence? getConversationTitle();
+ method public java.util.List<androidx.core.app.NotificationCompat.MessagingStyle.Message!> getHistoricMessages();
method public java.util.List<androidx.core.app.NotificationCompat.MessagingStyle.Message!> getMessages();
method public androidx.core.app.Person getUser();
method @Deprecated public CharSequence? getUserDisplayName();
@@ -1419,7 +1429,7 @@
field public static final int RESTRICT_BACKGROUND_STATUS_WHITELISTED = 2; // 0x2
}
- public class MailTo {
+ public final class MailTo {
method public String? getBcc();
method public String? getBody();
method public String? getCc();
diff --git a/core/core/api/public_plus_experimental_1.5.0-alpha01.txt b/core/core/api/public_plus_experimental_1.5.0-alpha01.txt
index 4b0337f..8e9c745 100644
--- a/core/core/api/public_plus_experimental_1.5.0-alpha01.txt
+++ b/core/core/api/public_plus_experimental_1.5.0-alpha01.txt
@@ -240,6 +240,7 @@
method @RequiresApi(21) public static java.util.List<androidx.core.app.NotificationCompat.Action!> getInvisibleActions(android.app.Notification);
method public static boolean getLocalOnly(android.app.Notification);
method public static androidx.core.content.LocusIdCompat? getLocusId(android.app.Notification);
+ method public static CharSequence? getSettingsText(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);
@@ -271,10 +272,13 @@
field public static final String EXTRA_AUDIO_CONTENTS_URI = "android.audioContents";
field public static final String EXTRA_BACKGROUND_IMAGE_URI = "android.backgroundImageUri";
field public static final String EXTRA_BIG_TEXT = "android.bigText";
+ field public static final String EXTRA_CHANNEL_GROUP_ID = "android.intent.extra.CHANNEL_GROUP_ID";
+ field public static final String EXTRA_CHANNEL_ID = "android.intent.extra.CHANNEL_ID";
field public static final String EXTRA_CHRONOMETER_COUNT_DOWN = "android.chronometerCountDown";
field public static final String EXTRA_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_HISTORIC_MESSAGES = "android.messages.historic";
field public static final String EXTRA_INFO_TEXT = "android.infoText";
field public static final String EXTRA_IS_GROUP_CONVERSATION = "android.isGroupConversation";
field public static final String EXTRA_LARGE_ICON = "android.largeIcon";
@@ -282,6 +286,8 @@
field public static final String EXTRA_MEDIA_SESSION = "android.mediaSession";
field public static final String EXTRA_MESSAGES = "android.messages";
field public static final String EXTRA_MESSAGING_STYLE_USER = "android.messagingStyleUser";
+ field public static final String EXTRA_NOTIFICATION_ID = "android.intent.extra.NOTIFICATION_ID";
+ field public static final String EXTRA_NOTIFICATION_TAG = "android.intent.extra.NOTIFICATION_TAG";
field 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";
@@ -314,6 +320,7 @@
field public static final int GROUP_ALERT_CHILDREN = 2; // 0x2
field public static final int GROUP_ALERT_SUMMARY = 1; // 0x1
field public static final String GROUP_KEY_SILENT = "silent";
+ field public static final String INTENT_CATEGORY_NOTIFICATION_PREFERENCES = "android.intent.category.NOTIFICATION_PREFERENCES";
field public static final int PRIORITY_DEFAULT = 0; // 0x0
field public static final int PRIORITY_HIGH = 1; // 0x1
field public static final int PRIORITY_LOW = -1; // 0xffffffff
@@ -488,6 +495,7 @@
method public androidx.core.app.NotificationCompat.Builder setProgress(int, int, boolean);
method public androidx.core.app.NotificationCompat.Builder setPublicVersion(android.app.Notification?);
method public androidx.core.app.NotificationCompat.Builder setRemoteInputHistory(CharSequence![]?);
+ method public androidx.core.app.NotificationCompat.Builder setSettingsText(CharSequence?);
method public androidx.core.app.NotificationCompat.Builder setShortcutId(String?);
method public androidx.core.app.NotificationCompat.Builder setShortcutInfo(androidx.core.content.pm.ShortcutInfoCompat?);
method public androidx.core.app.NotificationCompat.Builder setShowWhen(boolean);
@@ -560,11 +568,13 @@
ctor @Deprecated public NotificationCompat.MessagingStyle(CharSequence);
ctor public NotificationCompat.MessagingStyle(androidx.core.app.Person);
method public void addCompatExtras(android.os.Bundle);
+ method public androidx.core.app.NotificationCompat.MessagingStyle addHistoricMessage(androidx.core.app.NotificationCompat.MessagingStyle.Message);
method @Deprecated public androidx.core.app.NotificationCompat.MessagingStyle addMessage(CharSequence?, long, CharSequence?);
method public androidx.core.app.NotificationCompat.MessagingStyle addMessage(CharSequence?, long, androidx.core.app.Person?);
method public androidx.core.app.NotificationCompat.MessagingStyle addMessage(androidx.core.app.NotificationCompat.MessagingStyle.Message);
method public static androidx.core.app.NotificationCompat.MessagingStyle? extractMessagingStyleFromNotification(android.app.Notification);
method public CharSequence? getConversationTitle();
+ method public java.util.List<androidx.core.app.NotificationCompat.MessagingStyle.Message!> getHistoricMessages();
method public java.util.List<androidx.core.app.NotificationCompat.MessagingStyle.Message!> getMessages();
method public androidx.core.app.Person getUser();
method @Deprecated public CharSequence? getUserDisplayName();
@@ -1417,7 +1427,7 @@
field public static final int RESTRICT_BACKGROUND_STATUS_WHITELISTED = 2; // 0x2
}
- public class MailTo {
+ public final class MailTo {
method public String? getBcc();
method public String? getBody();
method public String? getCc();
diff --git a/core/core/api/public_plus_experimental_current.txt b/core/core/api/public_plus_experimental_current.txt
index 4b0337f..8e9c745 100644
--- a/core/core/api/public_plus_experimental_current.txt
+++ b/core/core/api/public_plus_experimental_current.txt
@@ -240,6 +240,7 @@
method @RequiresApi(21) public static java.util.List<androidx.core.app.NotificationCompat.Action!> getInvisibleActions(android.app.Notification);
method public static boolean getLocalOnly(android.app.Notification);
method public static androidx.core.content.LocusIdCompat? getLocusId(android.app.Notification);
+ method public static CharSequence? getSettingsText(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);
@@ -271,10 +272,13 @@
field public static final String EXTRA_AUDIO_CONTENTS_URI = "android.audioContents";
field public static final String EXTRA_BACKGROUND_IMAGE_URI = "android.backgroundImageUri";
field public static final String EXTRA_BIG_TEXT = "android.bigText";
+ field public static final String EXTRA_CHANNEL_GROUP_ID = "android.intent.extra.CHANNEL_GROUP_ID";
+ field public static final String EXTRA_CHANNEL_ID = "android.intent.extra.CHANNEL_ID";
field public static final String EXTRA_CHRONOMETER_COUNT_DOWN = "android.chronometerCountDown";
field public static final String EXTRA_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_HISTORIC_MESSAGES = "android.messages.historic";
field public static final String EXTRA_INFO_TEXT = "android.infoText";
field public static final String EXTRA_IS_GROUP_CONVERSATION = "android.isGroupConversation";
field public static final String EXTRA_LARGE_ICON = "android.largeIcon";
@@ -282,6 +286,8 @@
field public static final String EXTRA_MEDIA_SESSION = "android.mediaSession";
field public static final String EXTRA_MESSAGES = "android.messages";
field public static final String EXTRA_MESSAGING_STYLE_USER = "android.messagingStyleUser";
+ field public static final String EXTRA_NOTIFICATION_ID = "android.intent.extra.NOTIFICATION_ID";
+ field public static final String EXTRA_NOTIFICATION_TAG = "android.intent.extra.NOTIFICATION_TAG";
field 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";
@@ -314,6 +320,7 @@
field public static final int GROUP_ALERT_CHILDREN = 2; // 0x2
field public static final int GROUP_ALERT_SUMMARY = 1; // 0x1
field public static final String GROUP_KEY_SILENT = "silent";
+ field public static final String INTENT_CATEGORY_NOTIFICATION_PREFERENCES = "android.intent.category.NOTIFICATION_PREFERENCES";
field public static final int PRIORITY_DEFAULT = 0; // 0x0
field public static final int PRIORITY_HIGH = 1; // 0x1
field public static final int PRIORITY_LOW = -1; // 0xffffffff
@@ -488,6 +495,7 @@
method public androidx.core.app.NotificationCompat.Builder setProgress(int, int, boolean);
method public androidx.core.app.NotificationCompat.Builder setPublicVersion(android.app.Notification?);
method public androidx.core.app.NotificationCompat.Builder setRemoteInputHistory(CharSequence![]?);
+ method public androidx.core.app.NotificationCompat.Builder setSettingsText(CharSequence?);
method public androidx.core.app.NotificationCompat.Builder setShortcutId(String?);
method public androidx.core.app.NotificationCompat.Builder setShortcutInfo(androidx.core.content.pm.ShortcutInfoCompat?);
method public androidx.core.app.NotificationCompat.Builder setShowWhen(boolean);
@@ -560,11 +568,13 @@
ctor @Deprecated public NotificationCompat.MessagingStyle(CharSequence);
ctor public NotificationCompat.MessagingStyle(androidx.core.app.Person);
method public void addCompatExtras(android.os.Bundle);
+ method public androidx.core.app.NotificationCompat.MessagingStyle addHistoricMessage(androidx.core.app.NotificationCompat.MessagingStyle.Message);
method @Deprecated public androidx.core.app.NotificationCompat.MessagingStyle addMessage(CharSequence?, long, CharSequence?);
method public androidx.core.app.NotificationCompat.MessagingStyle addMessage(CharSequence?, long, androidx.core.app.Person?);
method public androidx.core.app.NotificationCompat.MessagingStyle addMessage(androidx.core.app.NotificationCompat.MessagingStyle.Message);
method public static androidx.core.app.NotificationCompat.MessagingStyle? extractMessagingStyleFromNotification(android.app.Notification);
method public CharSequence? getConversationTitle();
+ method public java.util.List<androidx.core.app.NotificationCompat.MessagingStyle.Message!> getHistoricMessages();
method public java.util.List<androidx.core.app.NotificationCompat.MessagingStyle.Message!> getMessages();
method public androidx.core.app.Person getUser();
method @Deprecated public CharSequence? getUserDisplayName();
@@ -1417,7 +1427,7 @@
field public static final int RESTRICT_BACKGROUND_STATUS_WHITELISTED = 2; // 0x2
}
- public class MailTo {
+ public final class MailTo {
method public String? getBcc();
method public String? getBody();
method public String? getCc();
diff --git a/core/core/api/restricted_1.5.0-alpha01.txt b/core/core/api/restricted_1.5.0-alpha01.txt
index 6e7096f..f892963 100644
--- a/core/core/api/restricted_1.5.0-alpha01.txt
+++ b/core/core/api/restricted_1.5.0-alpha01.txt
@@ -285,6 +285,7 @@
method @RequiresApi(21) public static java.util.List<androidx.core.app.NotificationCompat.Action!> getInvisibleActions(android.app.Notification);
method public static boolean getLocalOnly(android.app.Notification);
method public static androidx.core.content.LocusIdCompat? getLocusId(android.app.Notification);
+ method public static CharSequence? getSettingsText(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);
@@ -316,10 +317,13 @@
field public static final String EXTRA_AUDIO_CONTENTS_URI = "android.audioContents";
field public static final String EXTRA_BACKGROUND_IMAGE_URI = "android.backgroundImageUri";
field public static final String EXTRA_BIG_TEXT = "android.bigText";
+ field public static final String EXTRA_CHANNEL_GROUP_ID = "android.intent.extra.CHANNEL_GROUP_ID";
+ field public static final String EXTRA_CHANNEL_ID = "android.intent.extra.CHANNEL_ID";
field public static final String EXTRA_CHRONOMETER_COUNT_DOWN = "android.chronometerCountDown";
field public static final String EXTRA_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_HISTORIC_MESSAGES = "android.messages.historic";
field public static final String EXTRA_INFO_TEXT = "android.infoText";
field public static final String EXTRA_IS_GROUP_CONVERSATION = "android.isGroupConversation";
field public static final String EXTRA_LARGE_ICON = "android.largeIcon";
@@ -327,6 +331,8 @@
field public static final String EXTRA_MEDIA_SESSION = "android.mediaSession";
field public static final String EXTRA_MESSAGES = "android.messages";
field public static final String EXTRA_MESSAGING_STYLE_USER = "android.messagingStyleUser";
+ field public static final String EXTRA_NOTIFICATION_ID = "android.intent.extra.NOTIFICATION_ID";
+ field public static final String EXTRA_NOTIFICATION_TAG = "android.intent.extra.NOTIFICATION_TAG";
field 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";
@@ -359,6 +365,7 @@
field public static final int GROUP_ALERT_CHILDREN = 2; // 0x2
field public static final int GROUP_ALERT_SUMMARY = 1; // 0x1
field public static final String GROUP_KEY_SILENT = "silent";
+ field public static final String INTENT_CATEGORY_NOTIFICATION_PREFERENCES = "android.intent.category.NOTIFICATION_PREFERENCES";
field public static final int PRIORITY_DEFAULT = 0; // 0x0
field public static final int PRIORITY_HIGH = 1; // 0x1
field public static final int PRIORITY_LOW = -1; // 0xffffffff
@@ -543,6 +550,7 @@
method public androidx.core.app.NotificationCompat.Builder setProgress(int, int, boolean);
method public androidx.core.app.NotificationCompat.Builder setPublicVersion(android.app.Notification?);
method public androidx.core.app.NotificationCompat.Builder setRemoteInputHistory(CharSequence![]?);
+ method public androidx.core.app.NotificationCompat.Builder setSettingsText(CharSequence?);
method public androidx.core.app.NotificationCompat.Builder setShortcutId(String?);
method public androidx.core.app.NotificationCompat.Builder setShortcutInfo(androidx.core.content.pm.ShortcutInfoCompat?);
method public androidx.core.app.NotificationCompat.Builder setShowWhen(boolean);
@@ -620,11 +628,13 @@
public static class NotificationCompat.MessagingStyle extends androidx.core.app.NotificationCompat.Style {
ctor @Deprecated public NotificationCompat.MessagingStyle(CharSequence);
ctor public NotificationCompat.MessagingStyle(androidx.core.app.Person);
+ method public androidx.core.app.NotificationCompat.MessagingStyle addHistoricMessage(androidx.core.app.NotificationCompat.MessagingStyle.Message);
method @Deprecated public androidx.core.app.NotificationCompat.MessagingStyle addMessage(CharSequence?, long, CharSequence?);
method public androidx.core.app.NotificationCompat.MessagingStyle addMessage(CharSequence?, long, androidx.core.app.Person?);
method public androidx.core.app.NotificationCompat.MessagingStyle addMessage(androidx.core.app.NotificationCompat.MessagingStyle.Message);
method public static androidx.core.app.NotificationCompat.MessagingStyle? extractMessagingStyleFromNotification(android.app.Notification);
method public CharSequence? getConversationTitle();
+ method public java.util.List<androidx.core.app.NotificationCompat.MessagingStyle.Message!> getHistoricMessages();
method public java.util.List<androidx.core.app.NotificationCompat.MessagingStyle.Message!> getMessages();
method public androidx.core.app.Person getUser();
method @Deprecated public CharSequence? getUserDisplayName();
@@ -1722,7 +1732,7 @@
@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 class MailTo {
+ public final class MailTo {
method public String? getBcc();
method public String? getBody();
method public String? getCc();
diff --git a/core/core/api/restricted_current.txt b/core/core/api/restricted_current.txt
index 6e7096f..f892963 100644
--- a/core/core/api/restricted_current.txt
+++ b/core/core/api/restricted_current.txt
@@ -285,6 +285,7 @@
method @RequiresApi(21) public static java.util.List<androidx.core.app.NotificationCompat.Action!> getInvisibleActions(android.app.Notification);
method public static boolean getLocalOnly(android.app.Notification);
method public static androidx.core.content.LocusIdCompat? getLocusId(android.app.Notification);
+ method public static CharSequence? getSettingsText(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);
@@ -316,10 +317,13 @@
field public static final String EXTRA_AUDIO_CONTENTS_URI = "android.audioContents";
field public static final String EXTRA_BACKGROUND_IMAGE_URI = "android.backgroundImageUri";
field public static final String EXTRA_BIG_TEXT = "android.bigText";
+ field public static final String EXTRA_CHANNEL_GROUP_ID = "android.intent.extra.CHANNEL_GROUP_ID";
+ field public static final String EXTRA_CHANNEL_ID = "android.intent.extra.CHANNEL_ID";
field public static final String EXTRA_CHRONOMETER_COUNT_DOWN = "android.chronometerCountDown";
field public static final String EXTRA_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_HISTORIC_MESSAGES = "android.messages.historic";
field public static final String EXTRA_INFO_TEXT = "android.infoText";
field public static final String EXTRA_IS_GROUP_CONVERSATION = "android.isGroupConversation";
field public static final String EXTRA_LARGE_ICON = "android.largeIcon";
@@ -327,6 +331,8 @@
field public static final String EXTRA_MEDIA_SESSION = "android.mediaSession";
field public static final String EXTRA_MESSAGES = "android.messages";
field public static final String EXTRA_MESSAGING_STYLE_USER = "android.messagingStyleUser";
+ field public static final String EXTRA_NOTIFICATION_ID = "android.intent.extra.NOTIFICATION_ID";
+ field public static final String EXTRA_NOTIFICATION_TAG = "android.intent.extra.NOTIFICATION_TAG";
field 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";
@@ -359,6 +365,7 @@
field public static final int GROUP_ALERT_CHILDREN = 2; // 0x2
field public static final int GROUP_ALERT_SUMMARY = 1; // 0x1
field public static final String GROUP_KEY_SILENT = "silent";
+ field public static final String INTENT_CATEGORY_NOTIFICATION_PREFERENCES = "android.intent.category.NOTIFICATION_PREFERENCES";
field public static final int PRIORITY_DEFAULT = 0; // 0x0
field public static final int PRIORITY_HIGH = 1; // 0x1
field public static final int PRIORITY_LOW = -1; // 0xffffffff
@@ -543,6 +550,7 @@
method public androidx.core.app.NotificationCompat.Builder setProgress(int, int, boolean);
method public androidx.core.app.NotificationCompat.Builder setPublicVersion(android.app.Notification?);
method public androidx.core.app.NotificationCompat.Builder setRemoteInputHistory(CharSequence![]?);
+ method public androidx.core.app.NotificationCompat.Builder setSettingsText(CharSequence?);
method public androidx.core.app.NotificationCompat.Builder setShortcutId(String?);
method public androidx.core.app.NotificationCompat.Builder setShortcutInfo(androidx.core.content.pm.ShortcutInfoCompat?);
method public androidx.core.app.NotificationCompat.Builder setShowWhen(boolean);
@@ -620,11 +628,13 @@
public static class NotificationCompat.MessagingStyle extends androidx.core.app.NotificationCompat.Style {
ctor @Deprecated public NotificationCompat.MessagingStyle(CharSequence);
ctor public NotificationCompat.MessagingStyle(androidx.core.app.Person);
+ method public androidx.core.app.NotificationCompat.MessagingStyle addHistoricMessage(androidx.core.app.NotificationCompat.MessagingStyle.Message);
method @Deprecated public androidx.core.app.NotificationCompat.MessagingStyle addMessage(CharSequence?, long, CharSequence?);
method public androidx.core.app.NotificationCompat.MessagingStyle addMessage(CharSequence?, long, androidx.core.app.Person?);
method public androidx.core.app.NotificationCompat.MessagingStyle addMessage(androidx.core.app.NotificationCompat.MessagingStyle.Message);
method public static androidx.core.app.NotificationCompat.MessagingStyle? extractMessagingStyleFromNotification(android.app.Notification);
method public CharSequence? getConversationTitle();
+ method public java.util.List<androidx.core.app.NotificationCompat.MessagingStyle.Message!> getHistoricMessages();
method public java.util.List<androidx.core.app.NotificationCompat.MessagingStyle.Message!> getMessages();
method public androidx.core.app.Person getUser();
method @Deprecated public CharSequence? getUserDisplayName();
@@ -1722,7 +1732,7 @@
@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 class MailTo {
+ public final class MailTo {
method public String? getBcc();
method public String? getBody();
method public String? getCc();
diff --git a/core/core/src/androidTest/java/androidx/core/app/NotificationCompatTest.java b/core/core/src/androidTest/java/androidx/core/app/NotificationCompatTest.java
index 2442b67..0265c81 100644
--- a/core/core/src/androidTest/java/androidx/core/app/NotificationCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/app/NotificationCompatTest.java
@@ -164,6 +164,43 @@
}
@Test
+ public void testSettingsText() {
+ String settingsText = "testSettingsText";
+ Notification n = new NotificationCompat.Builder(mActivityTestRule.getActivity())
+ .setSettingsText(settingsText)
+ .build();
+ if (Build.VERSION.SDK_INT >= 26) {
+ assertEquals(settingsText, NotificationCompat.getSettingsText(n));
+ } else {
+ assertEquals(null, NotificationCompat.getSettingsText(n));
+ }
+ }
+
+ @Test
+ public void testShowWhen() {
+ // NOTE: It's very difficult to unit test the built notification on JellyBean because
+ // there was no extras field and the only affect is that the RemoteViews object has some
+ // different internal state. However, this unit test still validates that the
+ // notification is built successfully (without throwing an exception).
+ {
+ Notification n = new NotificationCompat.Builder(mActivityTestRule.getActivity())
+ .setShowWhen(true)
+ .build();
+ if (Build.VERSION.SDK_INT >= 19) {
+ assertTrue(n.extras.getBoolean(NotificationCompat.EXTRA_SHOW_WHEN));
+ }
+ }
+ {
+ Notification n = new NotificationCompat.Builder(mActivityTestRule.getActivity())
+ .setShowWhen(false)
+ .build();
+ if (Build.VERSION.SDK_INT >= 19) {
+ assertFalse(n.extras.getBoolean(NotificationCompat.EXTRA_SHOW_WHEN));
+ }
+ }
+ }
+
+ @Test
public void testNotificationChannel() throws Throwable {
String channelId = "new ID";
Notification n = new NotificationCompat.Builder(mActivityTestRule.getActivity())
@@ -838,6 +875,39 @@
assertTrue(result.get(1).getPerson().isImportant());
}
+ @SdkSuppress(minSdkVersion = 16)
+ @Test
+ public void testMessagingStyle_historicMessage() {
+ NotificationCompat.MessagingStyle messagingStyle =
+ new NotificationCompat.MessagingStyle("self name");
+ Person person = new Person.Builder().setName("test name").setKey("key").build();
+ Person person2 = new Person.Builder()
+ .setName("test name 2").setKey("key 2").setImportant(true).build();
+ messagingStyle.addHistoricMessage(new Message("text", 200, person));
+ messagingStyle.addHistoricMessage(new Message("text2", 300, person2));
+
+ Notification notification = new NotificationCompat.Builder(mContext, "test id")
+ .setSmallIcon(1)
+ .setContentTitle("test title")
+ .setStyle(messagingStyle)
+ .build();
+
+ List<Message> result = NotificationCompat.MessagingStyle
+ .extractMessagingStyleFromNotification(notification)
+ .getHistoricMessages();
+
+ assertEquals(2, result.size());
+ assertEquals("text", result.get(0).getText());
+ assertEquals(200, result.get(0).getTimestamp());
+ assertEquals("test name", result.get(0).getPerson().getName());
+ assertEquals("key", result.get(0).getPerson().getKey());
+ assertEquals("text2", result.get(1).getText());
+ assertEquals(300, result.get(1).getTimestamp());
+ assertEquals("test name 2", result.get(1).getPerson().getName());
+ assertEquals("key 2", result.get(1).getPerson().getKey());
+ assertTrue(result.get(1).getPerson().isImportant());
+ }
+
@Test
public void testMessagingStyle_requiresNonEmptyUserName() {
try {
diff --git a/core/core/src/androidTest/java/androidx/core/view/WindowInsetsCompatActivityTest.kt b/core/core/src/androidTest/java/androidx/core/view/WindowInsetsCompatActivityTest.kt
index 70780d3..e6e4edd 100644
--- a/core/core/src/androidTest/java/androidx/core/view/WindowInsetsCompatActivityTest.kt
+++ b/core/core/src/androidTest/java/androidx/core/view/WindowInsetsCompatActivityTest.kt
@@ -204,6 +204,7 @@
}
@SdkSuppress(minSdkVersion = 23)
+ @FlakyTest(detail = "IME tests are inherently flaky, but still useful for local testing.")
@Test
fun systemBars_rootInsets() {
// Test do not currently work on Cuttlefish
diff --git a/core/core/src/main/java/androidx/core/app/NotificationCompat.java b/core/core/src/main/java/androidx/core/app/NotificationCompat.java
index cb15b5e..35f094a 100644
--- a/core/core/src/main/java/androidx/core/app/NotificationCompat.java
+++ b/core/core/src/main/java/androidx/core/app/NotificationCompat.java
@@ -81,6 +81,48 @@
public class NotificationCompat {
/**
+ * An activity that provides a user interface for adjusting notification preferences for its
+ * containing application.
+ */
+ @SuppressLint("ActionValue") // Field & value copied from android.app.Notification
+ public static final String INTENT_CATEGORY_NOTIFICATION_PREFERENCES =
+ "android.intent.category.NOTIFICATION_PREFERENCES";
+
+ /**
+ * Optional extra for {@link #INTENT_CATEGORY_NOTIFICATION_PREFERENCES}. If provided, will
+ * contain a {@link NotificationChannelCompat#getId() channel id} that can be used to narrow
+ * down what settings should be shown in the target app.
+ */
+ @SuppressLint("ActionValue") // Field & value copied from android.app.Notification
+ public static final String EXTRA_CHANNEL_ID = "android.intent.extra.CHANNEL_ID";
+
+ /**
+ * Optional extra for {@link #INTENT_CATEGORY_NOTIFICATION_PREFERENCES}. If provided, will
+ * contain a {@link NotificationChannelGroupCompat#getId() group id} that can be used to narrow
+ * down what settings should be shown in the target app.
+ */
+ @SuppressLint("ActionValue") // Field & value copied from android.app.Notification
+ public static final String EXTRA_CHANNEL_GROUP_ID = "android.intent.extra.CHANNEL_GROUP_ID";
+
+ /**
+ * Optional extra for {@link #INTENT_CATEGORY_NOTIFICATION_PREFERENCES}. If provided, will
+ * contain the tag provided to
+ * {@link NotificationManagerCompat#notify(String, int, Notification)}
+ * that can be used to narrow down what settings should be shown in the target app.
+ */
+ @SuppressLint("ActionValue") // Field & value copied from android.app.Notification
+ public static final String EXTRA_NOTIFICATION_TAG = "android.intent.extra.NOTIFICATION_TAG";
+
+ /**
+ * Optional extra for {@link #INTENT_CATEGORY_NOTIFICATION_PREFERENCES}. If provided, will
+ * contain the id provided to
+ * {@link NotificationManagerCompat#notify(String, int, Notification)}
+ * that can be used to narrow down what settings should be shown in the target app.
+ */
+ @SuppressLint("ActionValue") // Field & value copied from android.app.Notification
+ public static final String EXTRA_NOTIFICATION_ID = "android.intent.extra.NOTIFICATION_ID";
+
+ /**
* Use all default values (where applicable).
*/
public static final int DEFAULT_ALL = ~0;
@@ -245,24 +287,28 @@
* {@link #getExtras extras} key: this is the title of the notification,
* as supplied to {@link Builder#setContentTitle(CharSequence)}.
*/
+ @SuppressLint("ActionValue") // Field & value copied from android.app.Notification
public static final String EXTRA_TITLE = "android.title";
/**
* {@link #getExtras extras} key: this is the title of the notification when shown in expanded
* form, e.g. as supplied to {@link BigTextStyle#setBigContentTitle(CharSequence)}.
*/
+ @SuppressLint("ActionValue") // Field & value copied from android.app.Notification
public static final String EXTRA_TITLE_BIG = EXTRA_TITLE + ".big";
/**
* {@link #getExtras extras} key: this is the main text payload, as supplied to
* {@link Builder#setContentText(CharSequence)}.
*/
+ @SuppressLint("ActionValue") // Field & value copied from android.app.Notification
public static final String EXTRA_TEXT = "android.text";
/**
* {@link #getExtras extras} key: this is a third line of text, as supplied to
* {@link Builder#setSubText(CharSequence)}.
*/
+ @SuppressLint("ActionValue") // Field & value copied from android.app.Notification
public static final String EXTRA_SUB_TEXT = "android.subText";
/**
@@ -279,12 +325,14 @@
*
* @see Builder#setRemoteInputHistory(CharSequence[])
*/
+ @SuppressLint("ActionValue") // Field & value copied from android.app.Notification
public static final String EXTRA_REMOTE_INPUT_HISTORY = "android.remoteInputHistory";
/**
* {@link #getExtras extras} key: this is a small piece of additional text as supplied to
* {@link Builder#setContentInfo(CharSequence)}.
*/
+ @SuppressLint("ActionValue") // Field & value copied from android.app.Notification
public static final String EXTRA_INFO_TEXT = "android.infoText";
/**
@@ -292,6 +340,7 @@
* alongside expanded notifications, as supplied to (e.g.)
* {@link BigTextStyle#setSummaryText(CharSequence)}.
*/
+ @SuppressLint("ActionValue") // Field & value copied from android.app.Notification
public static final String EXTRA_SUMMARY_TEXT = "android.summaryText";
/**
@@ -299,12 +348,14 @@
* {@link BigTextStyle} notification, as supplied to
* {@link BigTextStyle#bigText(CharSequence)}.
*/
+ @SuppressLint("ActionValue") // Field & value copied from android.app.Notification
public static final String EXTRA_BIG_TEXT = "android.bigText";
/**
* {@link #getExtras extras} key: this is the resource ID of the notification's main small icon,
* as supplied to {@link Builder#setSmallIcon(int)}.
*/
+ @SuppressLint("ActionValue") // Field & value copied from android.app.Notification
public static final String EXTRA_SMALL_ICON = "android.icon";
/**
@@ -312,6 +363,7 @@
* showing the notification payload, as
* supplied to {@link Builder#setLargeIcon(android.graphics.Bitmap)}.
*/
+ @SuppressLint("ActionValue") // Field & value copied from android.app.Notification
public static final String EXTRA_LARGE_ICON = "android.largeIcon";
/**
@@ -320,24 +372,28 @@
* shown in its expanded form, as supplied to
* {@link BigPictureStyle#bigLargeIcon(android.graphics.Bitmap)}.
*/
+ @SuppressLint("ActionValue") // Field & value copied from android.app.Notification
public static final String EXTRA_LARGE_ICON_BIG = EXTRA_LARGE_ICON + ".big";
/**
* {@link #getExtras extras} key: this is the progress value supplied to
* {@link Builder#setProgress(int, int, boolean)}.
*/
+ @SuppressLint("ActionValue") // Field & value copied from android.app.Notification
public static final String EXTRA_PROGRESS = "android.progress";
/**
* {@link #getExtras extras} key: this is the maximum value supplied to
* {@link Builder#setProgress(int, int, boolean)}.
*/
+ @SuppressLint("ActionValue") // Field & value copied from android.app.Notification
public static final String EXTRA_PROGRESS_MAX = "android.progressMax";
/**
* {@link #getExtras extras} key: whether the progress bar is indeterminate, supplied to
* {@link Builder#setProgress(int, int, boolean)}.
*/
+ @SuppressLint("ActionValue") // Field & value copied from android.app.Notification
public static final String EXTRA_PROGRESS_INDETERMINATE = "android.progressIndeterminate";
/**
@@ -345,6 +401,7 @@
* should be shown as a count-up timer (specifically a {@link android.widget.Chronometer})
* instead of a timestamp, as supplied to {@link Builder#setUsesChronometer(boolean)}.
*/
+ @SuppressLint("ActionValue") // Field & value copied from android.app.Notification
public static final String EXTRA_SHOW_CHRONOMETER = "android.showChronometer";
/**
@@ -352,12 +409,14 @@
* down instead of counting up. Is only relevant if key {@link #EXTRA_SHOW_CHRONOMETER} is
* present. This extra is a boolean. The default is (@code false).
*/
+ @SuppressLint("ActionValue") // Field & value copied from android.app.Notification
public static final String EXTRA_CHRONOMETER_COUNT_DOWN = "android.chronometerCountDown";
/**
* {@link #getExtras extras} key: whether the when field set using {@link Builder#setWhen}
* should be shown, as supplied to {@link Builder#setShowWhen(boolean)}.
*/
+ @SuppressLint("ActionValue") // Field & value copied from android.app.Notification
public static final String EXTRA_SHOW_WHEN = "android.showWhen";
/**
@@ -365,6 +424,7 @@
* expanded notifications, supplied to
* {@link BigPictureStyle#bigPicture(android.graphics.Bitmap)}.
*/
+ @SuppressLint("ActionValue") // Field & value copied from android.app.Notification
public static final String EXTRA_PICTURE = "android.picture";
/**
@@ -372,12 +432,14 @@
* expanded notifications, each of which was supplied to
* {@link InboxStyle#addLine(CharSequence)}.
*/
+ @SuppressLint("ActionValue") // Field & value copied from android.app.Notification
public static final String EXTRA_TEXT_LINES = "android.textLines";
/**
* {@link #getExtras extras} key: A string representing the name of the specific
* {@link android.app.Notification.Style} used to create this notification.
*/
+ @SuppressLint("ActionValue") // Field & value copied from android.app.Notification
public static final String EXTRA_TEMPLATE = "android.template";
/**
@@ -385,6 +447,7 @@
* notification relates to, each of which was supplied to
* {@link Builder#addPerson(String)}.
*/
+ @SuppressLint("ActionValue") // Field & value copied from android.app.Notification
public static final String EXTRA_PEOPLE = "android.people";
/**
@@ -396,6 +459,7 @@
* BitmapFactory.decodeStream}; all other content types will be ignored. The content provider
* URI used for this purpose must require no permissions to read the image data.
*/
+ @SuppressLint("ActionValue") // Field & value copied from android.app.Notification
public static final String EXTRA_BACKGROUND_IMAGE_URI = "android.backgroundImageUri";
/**
@@ -403,42 +467,58 @@
* {@link android.media.session.MediaSession.Token} associated with a
* {@link android.app.Notification.MediaStyle} notification.
*/
+ @SuppressLint("ActionValue") // Field & value copied from android.app.Notification
public static final String EXTRA_MEDIA_SESSION = "android.mediaSession";
/**
* {@link #getExtras extras} key: the indices of actions to be shown in the compact view,
* as supplied to (e.g.) {@link Notification.MediaStyle#setShowActionsInCompactView(int...)}.
*/
+ @SuppressLint("ActionValue") // Field & value copied from android.app.Notification
public static final String EXTRA_COMPACT_ACTIONS = "android.compactActions";
/**
- * Notification key: the username to be displayed for all messages sent by the user
- * including direct replies {@link MessagingStyle} notification.
+ * {@link #getExtras extras} key: the username to be displayed for all messages sent by the
+ * user including direct replies {@link MessagingStyle} notification.
*/
+ @SuppressLint("ActionValue") // Field & value copied from android.app.Notification
public static final String EXTRA_SELF_DISPLAY_NAME = "android.selfDisplayName";
/**
- * Notification key: the person to display for all messages sent by the user, including direct
- * replies to {@link MessagingStyle} notifications.
+ * {@link #getExtras extras} key: the person to display for all messages sent by the user,
+ * including direct replies to {@link MessagingStyle} notifications.
*/
+ @SuppressLint("ActionValue") // Field & value copied from android.app.Notification
public static final String EXTRA_MESSAGING_STYLE_USER = "android.messagingStyleUser";
/**
- * Notification key: a {@link String} to be displayed as the title to a conversation
- * represented by a {@link MessagingStyle}.
+ * {@link #getExtras extras} key: a {@link String} to be displayed as the title to a
+ * conversation represented by a {@link MessagingStyle}.
*/
+ @SuppressLint("ActionValue") // Field & value copied from android.app.Notification
public static final String EXTRA_CONVERSATION_TITLE = "android.conversationTitle";
/**
- * Notification key: an array of {@link Bundle} objects representing
- * {@link MessagingStyle.Message} objects for a {@link MessagingStyle} notification.
+ * {@link #getExtras extras} key: an array of {@link MessagingStyle.Message}
+ * bundles provided by a {@link android.app.Notification.MessagingStyle} notification.
+ * This extra is a parcelable array of {@link Bundle} objects.
*/
+ @SuppressLint("ActionValue") // Field & value copied from android.app.Notification
public static final String EXTRA_MESSAGES = "android.messages";
/**
- * Notification key: whether the {@link NotificationCompat.MessagingStyle} notification
- * represents a group conversation.
+ * {@link #getExtras extras} key: an array of {@link MessagingStyle#addHistoricMessage historic}
+ * {@link MessagingStyle.Message} bundles provided by a {@link MessagingStyle} notification.
+ * This extra is a parcelable array of {@link Bundle} objects.
*/
+ @SuppressLint("ActionValue") // Field & value copied from android.app.Notification
+ public static final String EXTRA_HISTORIC_MESSAGES = "android.messages.historic";
+
+ /**
+ * {@link #getExtras extras} key: whether the {@link NotificationCompat.MessagingStyle}
+ * notification represents a group conversation.
+ */
+ @SuppressLint("ActionValue") // Field & value copied from android.app.Notification
public static final String EXTRA_IS_GROUP_CONVERSATION = "android.isGroupConversation";
/**
@@ -446,6 +526,7 @@
* for conversation titles as SDK < P uses the title to denote group status. This hidden title
* doesn't appear in the notification shade.
*/
+ @SuppressLint("ActionValue") // Field & value copied from android.app.Notification
public static final String EXTRA_HIDDEN_CONVERSATION_TITLE = "android.hiddenConversationTitle";
/**
@@ -472,6 +553,7 @@
* }
* </pre>
*/
+ @SuppressLint("ActionValue") // Field & value copied from android.app.Notification
public static final String EXTRA_AUDIO_CONTENTS_URI = "android.audioContents";
/**
@@ -732,6 +814,7 @@
boolean mChronometerCountDown;
Style mStyle;
CharSequence mSubText;
+ CharSequence mSettingsText;
CharSequence[] mRemoteInputHistory;
int mProgressMax;
int mProgress;
@@ -805,6 +888,9 @@
/**
* Set the time that the event occurred. Notifications in the panel are
* sorted by this time.
+ *
+ * <p>For apps targeting {@link android.os.Build.VERSION_CODES#N} and above, this time is
+ * not shown anymore by default and must be opted into using {@link #setShowWhen(boolean)}
*/
public @NonNull Builder setWhen(long when) {
mNotification.when = when;
@@ -814,6 +900,9 @@
/**
* Control whether the timestamp set with {@link #setWhen(long) setWhen} is shown
* in the content view.
+ *
+ * <p>For apps targeting {@link android.os.Build.VERSION_CODES#N} and above, this
+ * defaults to {@code false}. For earlier apps, the default is {@code true}.
*/
public @NonNull Builder setShowWhen(boolean show) {
mShowWhen = show;
@@ -941,6 +1030,25 @@
}
/**
+ * Provides text that will appear as a link to your application's settings.
+ *
+ * <p>This text does not appear within notification {@link Style templates} but may
+ * appear when the user uses an affordance to learn more about the notification.
+ * Additionally, this text will not appear unless you provide a valid link target by
+ * handling {@link #INTENT_CATEGORY_NOTIFICATION_PREFERENCES}.
+ *
+ * <p>This text is meant to be concise description about what the user can customize
+ * when they click on this link. The recommended maximum length is 40 characters.
+ *
+ * <p>Prior to {@link Build.VERSION_CODES#O} this field has no effect.
+ */
+ @NonNull
+ public Builder setSettingsText(@Nullable CharSequence text) {
+ mSettingsText = limitCharSequenceLength(text);
+ return this;
+ }
+
+ /**
* Set the remote input history.
*
* This should be set to the most recent inputs that have been sent
@@ -2487,6 +2595,7 @@
public static final int MAXIMUM_RETAINED_MESSAGES = 25;
private final List<Message> mMessages = new ArrayList<>();
+ private final List<Message> mHistoricMessages = new ArrayList<>();
private Person mUser;
private @Nullable CharSequence mConversationTitle;
private @Nullable Boolean mIsGroupConversation;
@@ -2624,6 +2733,27 @@
}
/**
+ * Adds a {@link Message} for historic context in this notification.
+ *
+ * <p>Messages should be added as historic if they are not the main subject of the
+ * notification but may give context to a conversation. The system may choose to present
+ * them only when relevant, e.g. when replying to a message through a {@link RemoteInput}.
+ *
+ * <p>The messages should be added in chronologic order, i.e. the oldest first,
+ * the newest last.
+ *
+ * @param message The historic {@link Message} to be added
+ * @return this object for method chaining
+ */
+ public @NonNull MessagingStyle addHistoricMessage(@NonNull Message message) {
+ mHistoricMessages.add(message);
+ if (mHistoricMessages.size() > MAXIMUM_RETAINED_MESSAGES) {
+ mHistoricMessages.remove(0);
+ }
+ return this;
+ }
+
+ /**
* Gets the list of {@code Message} objects that represent the notification
*/
public @NonNull List<Message> getMessages() {
@@ -2631,6 +2761,13 @@
}
/**
+ * Gets the list of historic {@code Message}s in the notification.
+ */
+ public @NonNull List<Message> getHistoricMessages() {
+ return mHistoricMessages;
+ }
+
+ /**
* Sets whether this conversation notification represents a group.
* @param isGroupConversation {@code true} if the conversation represents a group,
* {@code false} otherwise.
@@ -2718,6 +2855,16 @@
frameworkStyle = new Notification.MessagingStyle(mUser.getName());
}
+ for (MessagingStyle.Message message : mMessages) {
+ frameworkStyle.addMessage(message.toAndroidMessage());
+ }
+
+ if (Build.VERSION.SDK_INT >= 26) {
+ for (MessagingStyle.Message historicMessage : mHistoricMessages) {
+ frameworkStyle.addHistoricMessage(historicMessage.toAndroidMessage());
+ }
+ }
+
// In SDK < 28, base Android will assume a MessagingStyle notification is a group
// chat if the conversation title is set. In compat, this isn't the case as we've
// introduced #setGroupConversation. When we apply these settings to base Android
@@ -2734,34 +2881,6 @@
if (Build.VERSION.SDK_INT >= 28) {
frameworkStyle.setGroupConversation(mIsGroupConversation);
}
-
- for (MessagingStyle.Message compatMessage : mMessages) {
- Notification.MessagingStyle.Message frameworkMessage;
-
- // Use Person for P and above
- if (Build.VERSION.SDK_INT >= 28) {
- Person compatMessagePerson = compatMessage.getPerson();
- frameworkMessage = new Notification.MessagingStyle.Message(
- compatMessage.getText(),
- compatMessage.getTimestamp(),
- compatMessagePerson == null
- ? null
- : compatMessagePerson.toAndroidPerson());
- } else {
- CharSequence name = null;
- if (compatMessage.getPerson() != null) {
- name = compatMessage.getPerson().getName();
- }
- frameworkMessage = new Notification.MessagingStyle.Message(
- compatMessage.getText(), compatMessage.getTimestamp(), name);
- }
-
- if (compatMessage.getDataMimeType() != null) {
- frameworkMessage.setData(
- compatMessage.getDataMimeType(), compatMessage.getDataUri());
- }
- frameworkStyle.addMessage(frameworkMessage);
- }
frameworkStyle.setBuilder(builder.getBuilder());
} else {
MessagingStyle.Message latestIncomingMessage = findLatestIncomingMessage();
@@ -2869,8 +2988,12 @@
extras.putCharSequence(EXTRA_CONVERSATION_TITLE, mConversationTitle);
}
if (!mMessages.isEmpty()) {
- extras.putParcelableArray(
- EXTRA_MESSAGES, Message.getBundleArrayForMessages(mMessages));
+ extras.putParcelableArray(EXTRA_MESSAGES,
+ Message.getBundleArrayForMessages(mMessages));
+ }
+ if (!mHistoricMessages.isEmpty()) {
+ extras.putParcelableArray(EXTRA_HISTORIC_MESSAGES,
+ Message.getBundleArrayForMessages(mHistoricMessages));
}
if (mIsGroupConversation != null) {
extras.putBoolean(EXTRA_IS_GROUP_CONVERSATION, mIsGroupConversation);
@@ -2899,9 +3022,13 @@
if (mConversationTitle == null) {
mConversationTitle = extras.getCharSequence(EXTRA_HIDDEN_CONVERSATION_TITLE);
}
- Parcelable[] parcelables = extras.getParcelableArray(EXTRA_MESSAGES);
- if (parcelables != null) {
- mMessages.addAll(Message.getMessagesFromBundleArray(parcelables));
+ Parcelable[] messages = extras.getParcelableArray(EXTRA_MESSAGES);
+ if (messages != null) {
+ mMessages.addAll(Message.getMessagesFromBundleArray(messages));
+ }
+ Parcelable[] historicMessages = extras.getParcelableArray(EXTRA_HISTORIC_MESSAGES);
+ if (historicMessages != null) {
+ mHistoricMessages.addAll(Message.getMessagesFromBundleArray(historicMessages));
}
if (extras.containsKey(EXTRA_IS_GROUP_CONVERSATION)) {
mIsGroupConversation = extras.getBoolean(EXTRA_IS_GROUP_CONVERSATION);
@@ -3144,6 +3271,34 @@
return null;
}
}
+
+ /**
+ * Converts this compat {@link Message} to the base Android framework
+ * {@link android.app.Notification.MessagingStyle.Message}.
+ * @hide
+ */
+ @RestrictTo(LIBRARY_GROUP_PREFIX)
+ @NonNull
+ @RequiresApi(24)
+ Notification.MessagingStyle.Message toAndroidMessage() {
+ Notification.MessagingStyle.Message frameworkMessage;
+ Person person = getPerson();
+ // Use Person for P and above
+ if (Build.VERSION.SDK_INT >= 28) {
+ frameworkMessage = new Notification.MessagingStyle.Message(
+ getText(), getTimestamp(),
+ person == null ? null : person.toAndroidPerson());
+ } else {
+ frameworkMessage = new Notification.MessagingStyle.Message(
+ getText(), getTimestamp(),
+ person == null ? null : person.getName());
+ }
+
+ if (getDataMimeType() != null) {
+ frameworkMessage.setData(getDataMimeType(), getDataUri());
+ }
+ return frameworkMessage;
+ }
}
}
@@ -6275,6 +6430,17 @@
}
/**
+ * Returns the settings text provided to {@link Builder#setSettingsText(CharSequence)}.
+ */
+ public static @Nullable CharSequence getSettingsText(@NonNull Notification notification) {
+ if (Build.VERSION.SDK_INT >= 26) {
+ return notification.getSettingsText();
+ } else {
+ return null;
+ }
+ }
+
+ /**
* Gets the {@link LocusIdCompat} associated with this notification.
*
* <p>Used by the Android system to correlate objects (such as
diff --git a/core/core/src/main/java/androidx/core/app/NotificationCompatBuilder.java b/core/core/src/main/java/androidx/core/app/NotificationCompatBuilder.java
index 35f062e..72c6190 100644
--- a/core/core/src/main/java/androidx/core/app/NotificationCompatBuilder.java
+++ b/core/core/src/main/java/androidx/core/app/NotificationCompatBuilder.java
@@ -126,9 +126,10 @@
mContentView = b.mContentView;
mBigContentView = b.mBigContentView;
}
- if (Build.VERSION.SDK_INT >= 19) {
+ if (Build.VERSION.SDK_INT >= 17) {
mBuilder.setShowWhen(b.mShowWhen);
-
+ }
+ if (Build.VERSION.SDK_INT >= 19) {
if (Build.VERSION.SDK_INT < 21) {
final List<String> people = combineLists(getPeople(b.mPersonList), b.mPeople);
if (people != null && !people.isEmpty()) {
@@ -210,6 +211,7 @@
}
if (Build.VERSION.SDK_INT >= 26) {
mBuilder.setBadgeIconType(b.mBadgeIcon)
+ .setSettingsText(b.mSettingsText)
.setShortcutId(b.mShortcutId)
.setTimeoutAfter(b.mTimeout)
.setGroupAlertBehavior(b.mGroupAlertBehavior);
diff --git a/core/core/src/main/java/androidx/core/net/MailTo.java b/core/core/src/main/java/androidx/core/net/MailTo.java
index c941f5d..758ba47 100644
--- a/core/core/src/main/java/androidx/core/net/MailTo.java
+++ b/core/core/src/main/java/androidx/core/net/MailTo.java
@@ -32,7 +32,7 @@
* <p>This class parses a mailto scheme URI and then can be queried for the parsed parameters.
* This implements RFC 6068.
*/
-public class MailTo {
+public final class MailTo {
public static final String MAILTO_SCHEME = "mailto:";
// Well known headers
diff --git a/hilt/hilt-common/api/1.0.0-alpha02.txt b/hilt/hilt-common/api/1.0.0-alpha02.txt
new file mode 100644
index 0000000..0cca321
--- /dev/null
+++ b/hilt/hilt-common/api/1.0.0-alpha02.txt
@@ -0,0 +1,22 @@
+// Signature format: 3.0
+package androidx.hilt {
+
+ @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target(java.lang.annotation.ElementType.PARAMETER) public @interface Assisted {
+ }
+
+}
+
+package androidx.hilt.lifecycle {
+
+ @dagger.hilt.GeneratesRootInput @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target(java.lang.annotation.ElementType.CONSTRUCTOR) public @interface ViewModelInject {
+ }
+
+}
+
+package androidx.hilt.work {
+
+ @dagger.hilt.GeneratesRootInput @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target(java.lang.annotation.ElementType.CONSTRUCTOR) public @interface WorkerInject {
+ }
+
+}
+
diff --git a/hilt/hilt-common/api/current.txt b/hilt/hilt-common/api/current.txt
new file mode 100644
index 0000000..0cca321
--- /dev/null
+++ b/hilt/hilt-common/api/current.txt
@@ -0,0 +1,22 @@
+// Signature format: 3.0
+package androidx.hilt {
+
+ @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target(java.lang.annotation.ElementType.PARAMETER) public @interface Assisted {
+ }
+
+}
+
+package androidx.hilt.lifecycle {
+
+ @dagger.hilt.GeneratesRootInput @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target(java.lang.annotation.ElementType.CONSTRUCTOR) public @interface ViewModelInject {
+ }
+
+}
+
+package androidx.hilt.work {
+
+ @dagger.hilt.GeneratesRootInput @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target(java.lang.annotation.ElementType.CONSTRUCTOR) public @interface WorkerInject {
+ }
+
+}
+
diff --git a/hilt/hilt-common/api/public_plus_experimental_1.0.0-alpha02.txt b/hilt/hilt-common/api/public_plus_experimental_1.0.0-alpha02.txt
new file mode 100644
index 0000000..0cca321
--- /dev/null
+++ b/hilt/hilt-common/api/public_plus_experimental_1.0.0-alpha02.txt
@@ -0,0 +1,22 @@
+// Signature format: 3.0
+package androidx.hilt {
+
+ @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target(java.lang.annotation.ElementType.PARAMETER) public @interface Assisted {
+ }
+
+}
+
+package androidx.hilt.lifecycle {
+
+ @dagger.hilt.GeneratesRootInput @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target(java.lang.annotation.ElementType.CONSTRUCTOR) public @interface ViewModelInject {
+ }
+
+}
+
+package androidx.hilt.work {
+
+ @dagger.hilt.GeneratesRootInput @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target(java.lang.annotation.ElementType.CONSTRUCTOR) public @interface WorkerInject {
+ }
+
+}
+
diff --git a/hilt/hilt-common/api/public_plus_experimental_current.txt b/hilt/hilt-common/api/public_plus_experimental_current.txt
new file mode 100644
index 0000000..0cca321
--- /dev/null
+++ b/hilt/hilt-common/api/public_plus_experimental_current.txt
@@ -0,0 +1,22 @@
+// Signature format: 3.0
+package androidx.hilt {
+
+ @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target(java.lang.annotation.ElementType.PARAMETER) public @interface Assisted {
+ }
+
+}
+
+package androidx.hilt.lifecycle {
+
+ @dagger.hilt.GeneratesRootInput @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target(java.lang.annotation.ElementType.CONSTRUCTOR) public @interface ViewModelInject {
+ }
+
+}
+
+package androidx.hilt.work {
+
+ @dagger.hilt.GeneratesRootInput @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target(java.lang.annotation.ElementType.CONSTRUCTOR) public @interface WorkerInject {
+ }
+
+}
+
diff --git a/hilt/hilt-common/api/res-1.0.0-alpha02.txt b/hilt/hilt-common/api/res-1.0.0-alpha02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hilt/hilt-common/api/res-1.0.0-alpha02.txt
diff --git a/hilt/hilt-common/api/res-current.txt b/hilt/hilt-common/api/res-current.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hilt/hilt-common/api/res-current.txt
diff --git a/hilt/hilt-common/api/restricted_1.0.0-alpha02.txt b/hilt/hilt-common/api/restricted_1.0.0-alpha02.txt
new file mode 100644
index 0000000..0cca321
--- /dev/null
+++ b/hilt/hilt-common/api/restricted_1.0.0-alpha02.txt
@@ -0,0 +1,22 @@
+// Signature format: 3.0
+package androidx.hilt {
+
+ @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target(java.lang.annotation.ElementType.PARAMETER) public @interface Assisted {
+ }
+
+}
+
+package androidx.hilt.lifecycle {
+
+ @dagger.hilt.GeneratesRootInput @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target(java.lang.annotation.ElementType.CONSTRUCTOR) public @interface ViewModelInject {
+ }
+
+}
+
+package androidx.hilt.work {
+
+ @dagger.hilt.GeneratesRootInput @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target(java.lang.annotation.ElementType.CONSTRUCTOR) public @interface WorkerInject {
+ }
+
+}
+
diff --git a/hilt/hilt-common/api/restricted_current.txt b/hilt/hilt-common/api/restricted_current.txt
new file mode 100644
index 0000000..0cca321
--- /dev/null
+++ b/hilt/hilt-common/api/restricted_current.txt
@@ -0,0 +1,22 @@
+// Signature format: 3.0
+package androidx.hilt {
+
+ @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target(java.lang.annotation.ElementType.PARAMETER) public @interface Assisted {
+ }
+
+}
+
+package androidx.hilt.lifecycle {
+
+ @dagger.hilt.GeneratesRootInput @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target(java.lang.annotation.ElementType.CONSTRUCTOR) public @interface ViewModelInject {
+ }
+
+}
+
+package androidx.hilt.work {
+
+ @dagger.hilt.GeneratesRootInput @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target(java.lang.annotation.ElementType.CONSTRUCTOR) public @interface WorkerInject {
+ }
+
+}
+
diff --git a/hilt/hilt-lifecycle-viewmodel/api/1.0.0-alpha02.txt b/hilt/hilt-lifecycle-viewmodel/api/1.0.0-alpha02.txt
new file mode 100644
index 0000000..3b419e4
--- /dev/null
+++ b/hilt/hilt-lifecycle-viewmodel/api/1.0.0-alpha02.txt
@@ -0,0 +1,9 @@
+// Signature format: 3.0
+package androidx.hilt.lifecycle {
+
+ public final class HiltViewModelFactory extends androidx.lifecycle.AbstractSavedStateViewModelFactory implements androidx.lifecycle.ViewModelProvider.Factory {
+ method protected <T extends androidx.lifecycle.ViewModel> T create(String, Class<T!>, androidx.lifecycle.SavedStateHandle);
+ }
+
+}
+
diff --git a/hilt/hilt-lifecycle-viewmodel/api/current.txt b/hilt/hilt-lifecycle-viewmodel/api/current.txt
new file mode 100644
index 0000000..3b419e4
--- /dev/null
+++ b/hilt/hilt-lifecycle-viewmodel/api/current.txt
@@ -0,0 +1,9 @@
+// Signature format: 3.0
+package androidx.hilt.lifecycle {
+
+ public final class HiltViewModelFactory extends androidx.lifecycle.AbstractSavedStateViewModelFactory implements androidx.lifecycle.ViewModelProvider.Factory {
+ method protected <T extends androidx.lifecycle.ViewModel> T create(String, Class<T!>, androidx.lifecycle.SavedStateHandle);
+ }
+
+}
+
diff --git a/hilt/hilt-lifecycle-viewmodel/api/public_plus_experimental_1.0.0-alpha02.txt b/hilt/hilt-lifecycle-viewmodel/api/public_plus_experimental_1.0.0-alpha02.txt
new file mode 100644
index 0000000..3b419e4
--- /dev/null
+++ b/hilt/hilt-lifecycle-viewmodel/api/public_plus_experimental_1.0.0-alpha02.txt
@@ -0,0 +1,9 @@
+// Signature format: 3.0
+package androidx.hilt.lifecycle {
+
+ public final class HiltViewModelFactory extends androidx.lifecycle.AbstractSavedStateViewModelFactory implements androidx.lifecycle.ViewModelProvider.Factory {
+ method protected <T extends androidx.lifecycle.ViewModel> T create(String, Class<T!>, androidx.lifecycle.SavedStateHandle);
+ }
+
+}
+
diff --git a/hilt/hilt-lifecycle-viewmodel/api/public_plus_experimental_current.txt b/hilt/hilt-lifecycle-viewmodel/api/public_plus_experimental_current.txt
new file mode 100644
index 0000000..3b419e4
--- /dev/null
+++ b/hilt/hilt-lifecycle-viewmodel/api/public_plus_experimental_current.txt
@@ -0,0 +1,9 @@
+// Signature format: 3.0
+package androidx.hilt.lifecycle {
+
+ public final class HiltViewModelFactory extends androidx.lifecycle.AbstractSavedStateViewModelFactory implements androidx.lifecycle.ViewModelProvider.Factory {
+ method protected <T extends androidx.lifecycle.ViewModel> T create(String, Class<T!>, androidx.lifecycle.SavedStateHandle);
+ }
+
+}
+
diff --git a/hilt/hilt-lifecycle-viewmodel/api/res-1.0.0-alpha02.txt b/hilt/hilt-lifecycle-viewmodel/api/res-1.0.0-alpha02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hilt/hilt-lifecycle-viewmodel/api/res-1.0.0-alpha02.txt
diff --git a/hilt/hilt-lifecycle-viewmodel/api/res-current.txt b/hilt/hilt-lifecycle-viewmodel/api/res-current.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hilt/hilt-lifecycle-viewmodel/api/res-current.txt
diff --git a/hilt/hilt-lifecycle-viewmodel/api/restricted_1.0.0-alpha02.txt b/hilt/hilt-lifecycle-viewmodel/api/restricted_1.0.0-alpha02.txt
new file mode 100644
index 0000000..560a3c0
--- /dev/null
+++ b/hilt/hilt-lifecycle-viewmodel/api/restricted_1.0.0-alpha02.txt
@@ -0,0 +1,23 @@
+// Signature format: 3.0
+package androidx.hilt.lifecycle {
+
+ public final class HiltViewModelFactory extends androidx.lifecycle.AbstractSavedStateViewModelFactory implements androidx.lifecycle.ViewModelProvider.Factory {
+ method protected <T extends androidx.lifecycle.ViewModel> T create(String, Class<T!>, androidx.lifecycle.SavedStateHandle);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface ViewModelAssistedFactory<T extends androidx.lifecycle.ViewModel> {
+ method public T create(androidx.lifecycle.SavedStateHandle);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class ViewModelFactoryModules {
+ }
+
+ @dagger.Module @dagger.hilt.InstallIn(ActivityComponent.class) public abstract static class ViewModelFactoryModules.ActivityModule {
+ ctor public ViewModelFactoryModules.ActivityModule();
+ }
+
+ @dagger.Module @dagger.hilt.InstallIn(FragmentComponent.class) public static final class ViewModelFactoryModules.FragmentModule {
+ }
+
+}
+
diff --git a/hilt/hilt-lifecycle-viewmodel/api/restricted_current.txt b/hilt/hilt-lifecycle-viewmodel/api/restricted_current.txt
new file mode 100644
index 0000000..560a3c0
--- /dev/null
+++ b/hilt/hilt-lifecycle-viewmodel/api/restricted_current.txt
@@ -0,0 +1,23 @@
+// Signature format: 3.0
+package androidx.hilt.lifecycle {
+
+ public final class HiltViewModelFactory extends androidx.lifecycle.AbstractSavedStateViewModelFactory implements androidx.lifecycle.ViewModelProvider.Factory {
+ method protected <T extends androidx.lifecycle.ViewModel> T create(String, Class<T!>, androidx.lifecycle.SavedStateHandle);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface ViewModelAssistedFactory<T extends androidx.lifecycle.ViewModel> {
+ method public T create(androidx.lifecycle.SavedStateHandle);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class ViewModelFactoryModules {
+ }
+
+ @dagger.Module @dagger.hilt.InstallIn(ActivityComponent.class) public abstract static class ViewModelFactoryModules.ActivityModule {
+ ctor public ViewModelFactoryModules.ActivityModule();
+ }
+
+ @dagger.Module @dagger.hilt.InstallIn(FragmentComponent.class) public static final class ViewModelFactoryModules.FragmentModule {
+ }
+
+}
+
diff --git a/hilt/hilt-lifecycle-viewmodel/src/main/java/androidx/hilt/lifecycle/HiltViewModelFactory.java b/hilt/hilt-lifecycle-viewmodel/src/main/java/androidx/hilt/lifecycle/HiltViewModelFactory.java
index 86398c0..2a266a3 100644
--- a/hilt/hilt-lifecycle-viewmodel/src/main/java/androidx/hilt/lifecycle/HiltViewModelFactory.java
+++ b/hilt/hilt-lifecycle-viewmodel/src/main/java/androidx/hilt/lifecycle/HiltViewModelFactory.java
@@ -20,6 +20,7 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
import androidx.lifecycle.AbstractSavedStateViewModelFactory;
import androidx.lifecycle.SavedStateHandle;
import androidx.lifecycle.SavedStateViewModelFactory;
@@ -47,6 +48,8 @@
private final Map<String,
Provider<ViewModelAssistedFactory<? extends ViewModel>>> mViewModelFactories;
+ /** @hide */
+ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
HiltViewModelFactory(
@NonNull SavedStateRegistryOwner owner,
@Nullable Bundle defaultArgs,
diff --git a/hilt/hilt-work/api/1.0.0-alpha02.txt b/hilt/hilt-work/api/1.0.0-alpha02.txt
new file mode 100644
index 0000000..9f9ddd8
--- /dev/null
+++ b/hilt/hilt-work/api/1.0.0-alpha02.txt
@@ -0,0 +1,9 @@
+// Signature format: 3.0
+package androidx.hilt.work {
+
+ public final class HiltWorkerFactory extends androidx.work.WorkerFactory {
+ method public androidx.work.ListenableWorker? createWorker(android.content.Context, String, androidx.work.WorkerParameters);
+ }
+
+}
+
diff --git a/hilt/hilt-work/api/current.txt b/hilt/hilt-work/api/current.txt
new file mode 100644
index 0000000..9f9ddd8
--- /dev/null
+++ b/hilt/hilt-work/api/current.txt
@@ -0,0 +1,9 @@
+// Signature format: 3.0
+package androidx.hilt.work {
+
+ public final class HiltWorkerFactory extends androidx.work.WorkerFactory {
+ method public androidx.work.ListenableWorker? createWorker(android.content.Context, String, androidx.work.WorkerParameters);
+ }
+
+}
+
diff --git a/hilt/hilt-work/api/public_plus_experimental_1.0.0-alpha02.txt b/hilt/hilt-work/api/public_plus_experimental_1.0.0-alpha02.txt
new file mode 100644
index 0000000..9f9ddd8
--- /dev/null
+++ b/hilt/hilt-work/api/public_plus_experimental_1.0.0-alpha02.txt
@@ -0,0 +1,9 @@
+// Signature format: 3.0
+package androidx.hilt.work {
+
+ public final class HiltWorkerFactory extends androidx.work.WorkerFactory {
+ method public androidx.work.ListenableWorker? createWorker(android.content.Context, String, androidx.work.WorkerParameters);
+ }
+
+}
+
diff --git a/hilt/hilt-work/api/public_plus_experimental_current.txt b/hilt/hilt-work/api/public_plus_experimental_current.txt
new file mode 100644
index 0000000..9f9ddd8
--- /dev/null
+++ b/hilt/hilt-work/api/public_plus_experimental_current.txt
@@ -0,0 +1,9 @@
+// Signature format: 3.0
+package androidx.hilt.work {
+
+ public final class HiltWorkerFactory extends androidx.work.WorkerFactory {
+ method public androidx.work.ListenableWorker? createWorker(android.content.Context, String, androidx.work.WorkerParameters);
+ }
+
+}
+
diff --git a/hilt/hilt-work/api/res-1.0.0-alpha02.txt b/hilt/hilt-work/api/res-1.0.0-alpha02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hilt/hilt-work/api/res-1.0.0-alpha02.txt
diff --git a/hilt/hilt-work/api/res-current.txt b/hilt/hilt-work/api/res-current.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hilt/hilt-work/api/res-current.txt
diff --git a/hilt/hilt-work/api/restricted_1.0.0-alpha02.txt b/hilt/hilt-work/api/restricted_1.0.0-alpha02.txt
new file mode 100644
index 0000000..7ae0e1f
--- /dev/null
+++ b/hilt/hilt-work/api/restricted_1.0.0-alpha02.txt
@@ -0,0 +1,17 @@
+// Signature format: 3.0
+package androidx.hilt.work {
+
+ public final class HiltWorkerFactory extends androidx.work.WorkerFactory {
+ method public androidx.work.ListenableWorker? createWorker(android.content.Context, String, androidx.work.WorkerParameters);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface WorkerAssistedFactory<T extends androidx.work.ListenableWorker> {
+ method public T create(android.content.Context, androidx.work.WorkerParameters);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @dagger.Module @dagger.hilt.InstallIn(ApplicationComponent.class) public abstract class WorkerFactoryModule {
+ ctor public WorkerFactoryModule();
+ }
+
+}
+
diff --git a/hilt/hilt-work/api/restricted_current.txt b/hilt/hilt-work/api/restricted_current.txt
new file mode 100644
index 0000000..7ae0e1f
--- /dev/null
+++ b/hilt/hilt-work/api/restricted_current.txt
@@ -0,0 +1,17 @@
+// Signature format: 3.0
+package androidx.hilt.work {
+
+ public final class HiltWorkerFactory extends androidx.work.WorkerFactory {
+ method public androidx.work.ListenableWorker? createWorker(android.content.Context, String, androidx.work.WorkerParameters);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface WorkerAssistedFactory<T extends androidx.work.ListenableWorker> {
+ method public T create(android.content.Context, androidx.work.WorkerParameters);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @dagger.Module @dagger.hilt.InstallIn(ApplicationComponent.class) public abstract class WorkerFactoryModule {
+ ctor public WorkerFactoryModule();
+ }
+
+}
+
diff --git a/hilt/hilt-work/src/main/java/androidx/hilt/work/HiltWorkerFactory.java b/hilt/hilt-work/src/main/java/androidx/hilt/work/HiltWorkerFactory.java
index 6df7b6d..732dbec 100644
--- a/hilt/hilt-work/src/main/java/androidx/hilt/work/HiltWorkerFactory.java
+++ b/hilt/hilt-work/src/main/java/androidx/hilt/work/HiltWorkerFactory.java
@@ -20,6 +20,7 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
import androidx.work.ListenableWorker;
import androidx.work.WorkerParameters;
@@ -38,7 +39,9 @@
private final Map<String,
Provider<WorkerAssistedFactory<? extends ListenableWorker>>> mWorkerFactories;
- public HiltWorkerFactory(@NonNull Map<String,
+ /** @hide */
+ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
+ HiltWorkerFactory(@NonNull Map<String,
Provider<WorkerAssistedFactory<? extends ListenableWorker>>> workerFactories) {
mWorkerFactories = workerFactories;
}
diff --git a/paging/common/api/3.0.0-alpha04.txt b/paging/common/api/3.0.0-alpha04.txt
new file mode 100644
index 0000000..80803ed
--- /dev/null
+++ b/paging/common/api/3.0.0-alpha04.txt
@@ -0,0 +1,452 @@
+// Signature format: 3.0
+package androidx.paging {
+
+ public final class CachedPagingDataKt {
+ method @CheckResult public static <T> kotlinx.coroutines.flow.Flow<androidx.paging.PagingData<T>> cachedIn(kotlinx.coroutines.flow.Flow<androidx.paging.PagingData<T>>, kotlinx.coroutines.CoroutineScope scope);
+ }
+
+ public final class CancelableChannelFlowKt {
+ }
+
+ public final class CombinedLoadStates {
+ ctor public CombinedLoadStates(androidx.paging.LoadStates source, androidx.paging.LoadStates? mediator);
+ method public androidx.paging.LoadStates component1();
+ method public androidx.paging.LoadStates? component2();
+ method public androidx.paging.CombinedLoadStates copy(androidx.paging.LoadStates source, androidx.paging.LoadStates? mediator);
+ method public androidx.paging.LoadState getAppend();
+ method public androidx.paging.LoadStates? getMediator();
+ method public androidx.paging.LoadState getPrepend();
+ method public androidx.paging.LoadState getRefresh();
+ method public androidx.paging.LoadStates getSource();
+ property public final androidx.paging.LoadState append;
+ property public final androidx.paging.LoadState prepend;
+ property public final androidx.paging.LoadState refresh;
+ }
+
+ public abstract class DataSource<Key, Value> {
+ method @AnyThread public void addInvalidatedCallback(androidx.paging.DataSource.InvalidatedCallback onInvalidatedCallback);
+ method @AnyThread public final void addInvalidatedCallback(kotlin.jvm.functions.Function0<kotlin.Unit> onInvalidatedCallback);
+ method @AnyThread public void invalidate();
+ method @WorkerThread public boolean isInvalid();
+ method public <ToValue> androidx.paging.DataSource<Key,ToValue> map(androidx.arch.core.util.Function<Value,ToValue> function);
+ method public <ToValue> androidx.paging.DataSource<Key,ToValue> mapByPage(androidx.arch.core.util.Function<java.util.List<Value>,java.util.List<ToValue>> function);
+ method @AnyThread public void removeInvalidatedCallback(androidx.paging.DataSource.InvalidatedCallback onInvalidatedCallback);
+ method @AnyThread public final void removeInvalidatedCallback(kotlin.jvm.functions.Function0<kotlin.Unit> onInvalidatedCallback);
+ property @WorkerThread public boolean isInvalid;
+ }
+
+ public abstract static class DataSource.Factory<Key, Value> {
+ ctor public DataSource.Factory();
+ method public final kotlin.jvm.functions.Function0<androidx.paging.PagingSource<Key,Value>> asPagingSourceFactory(kotlinx.coroutines.CoroutineDispatcher fetchDispatcher = Dispatchers.IO);
+ method public final kotlin.jvm.functions.Function0<androidx.paging.PagingSource<Key,Value>> asPagingSourceFactory();
+ method public abstract androidx.paging.DataSource<Key,Value> create();
+ method public <ToValue> androidx.paging.DataSource.Factory<Key,ToValue> map(androidx.arch.core.util.Function<Value,ToValue> function);
+ method public <ToValue> androidx.paging.DataSource.Factory<Key,ToValue> mapByPage(androidx.arch.core.util.Function<java.util.List<Value>,java.util.List<ToValue>> function);
+ }
+
+ public static interface DataSource.InvalidatedCallback {
+ method @AnyThread public void onInvalidated();
+ }
+
+ @kotlin.RequiresOptIn public @interface ExperimentalPagingApi {
+ }
+
+ @Deprecated public abstract class ItemKeyedDataSource<Key, Value> extends androidx.paging.DataSource<Key,Value> {
+ ctor @Deprecated public ItemKeyedDataSource();
+ method @Deprecated public abstract Key getKey(Value item);
+ method @Deprecated public abstract void loadAfter(androidx.paging.ItemKeyedDataSource.LoadParams<Key> params, androidx.paging.ItemKeyedDataSource.LoadCallback<Value> callback);
+ method @Deprecated public abstract void loadBefore(androidx.paging.ItemKeyedDataSource.LoadParams<Key> params, androidx.paging.ItemKeyedDataSource.LoadCallback<Value> callback);
+ method @Deprecated public abstract void loadInitial(androidx.paging.ItemKeyedDataSource.LoadInitialParams<Key> params, androidx.paging.ItemKeyedDataSource.LoadInitialCallback<Value> callback);
+ method @Deprecated public final <ToValue> androidx.paging.ItemKeyedDataSource<Key,ToValue> map(androidx.arch.core.util.Function<Value,ToValue> function);
+ method @Deprecated public final <ToValue> androidx.paging.ItemKeyedDataSource<Key,ToValue> map(kotlin.jvm.functions.Function1<? super Value,? extends ToValue> function);
+ method @Deprecated public final <ToValue> androidx.paging.ItemKeyedDataSource<Key,ToValue> mapByPage(androidx.arch.core.util.Function<java.util.List<Value>,java.util.List<ToValue>> function);
+ method @Deprecated public final <ToValue> androidx.paging.ItemKeyedDataSource<Key,ToValue> mapByPage(kotlin.jvm.functions.Function1<? super java.util.List<? extends Value>,? extends java.util.List<? extends ToValue>> function);
+ }
+
+ @Deprecated public abstract static class ItemKeyedDataSource.LoadCallback<Value> {
+ ctor @Deprecated public ItemKeyedDataSource.LoadCallback();
+ method @Deprecated public abstract void onResult(java.util.List<? extends Value> data);
+ }
+
+ @Deprecated public abstract static class ItemKeyedDataSource.LoadInitialCallback<Value> extends androidx.paging.ItemKeyedDataSource.LoadCallback<Value> {
+ ctor @Deprecated public ItemKeyedDataSource.LoadInitialCallback();
+ method @Deprecated public abstract void onResult(java.util.List<? extends Value> data, int position, int totalCount);
+ }
+
+ @Deprecated public static class ItemKeyedDataSource.LoadInitialParams<Key> {
+ ctor @Deprecated public ItemKeyedDataSource.LoadInitialParams(Key? requestedInitialKey, int requestedLoadSize, boolean placeholdersEnabled);
+ field @Deprecated public final boolean placeholdersEnabled;
+ field @Deprecated public final Key? requestedInitialKey;
+ field @Deprecated public final int requestedLoadSize;
+ }
+
+ @Deprecated public static class ItemKeyedDataSource.LoadParams<Key> {
+ ctor @Deprecated public ItemKeyedDataSource.LoadParams(Key key, int requestedLoadSize);
+ field @Deprecated public final Key key;
+ field @Deprecated public final int requestedLoadSize;
+ }
+
+ public abstract sealed class LoadState {
+ method public final boolean getEndOfPaginationReached();
+ }
+
+ public static final class LoadState.Error extends androidx.paging.LoadState {
+ ctor public LoadState.Error(Throwable error);
+ method public Throwable getError();
+ }
+
+ public static final class LoadState.Loading extends androidx.paging.LoadState {
+ field public static final androidx.paging.LoadState.Loading INSTANCE;
+ }
+
+ public static final class LoadState.NotLoading extends androidx.paging.LoadState {
+ ctor public LoadState.NotLoading(boolean endOfPaginationReached);
+ }
+
+ public final class LoadStates {
+ ctor public LoadStates(androidx.paging.LoadState refresh, androidx.paging.LoadState prepend, androidx.paging.LoadState append);
+ method public androidx.paging.LoadState component1();
+ method public androidx.paging.LoadState component2();
+ method public androidx.paging.LoadState component3();
+ method public androidx.paging.LoadStates copy(androidx.paging.LoadState refresh, androidx.paging.LoadState prepend, androidx.paging.LoadState append);
+ method public androidx.paging.LoadState getAppend();
+ method public androidx.paging.LoadState getPrepend();
+ method public androidx.paging.LoadState getRefresh();
+ }
+
+ public enum LoadType {
+ method public static androidx.paging.LoadType valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.paging.LoadType[] values();
+ enum_constant public static final androidx.paging.LoadType APPEND;
+ enum_constant public static final androidx.paging.LoadType PREPEND;
+ enum_constant public static final androidx.paging.LoadType REFRESH;
+ }
+
+ public final class PageEventKt {
+ }
+
+ @Deprecated public abstract class PageKeyedDataSource<Key, Value> extends androidx.paging.DataSource<Key,Value> {
+ ctor @Deprecated public PageKeyedDataSource();
+ method @Deprecated public abstract void loadAfter(androidx.paging.PageKeyedDataSource.LoadParams<Key> params, androidx.paging.PageKeyedDataSource.LoadCallback<Key,Value> callback);
+ method @Deprecated public abstract void loadBefore(androidx.paging.PageKeyedDataSource.LoadParams<Key> params, androidx.paging.PageKeyedDataSource.LoadCallback<Key,Value> callback);
+ method @Deprecated public abstract void loadInitial(androidx.paging.PageKeyedDataSource.LoadInitialParams<Key> params, androidx.paging.PageKeyedDataSource.LoadInitialCallback<Key,Value> callback);
+ method @Deprecated public final <ToValue> androidx.paging.PageKeyedDataSource<Key,ToValue> map(androidx.arch.core.util.Function<Value,ToValue> function);
+ method @Deprecated public final <ToValue> androidx.paging.PageKeyedDataSource<Key,ToValue> map(kotlin.jvm.functions.Function1<? super Value,? extends ToValue> function);
+ method @Deprecated public final <ToValue> androidx.paging.PageKeyedDataSource<Key,ToValue> mapByPage(androidx.arch.core.util.Function<java.util.List<Value>,java.util.List<ToValue>> function);
+ method @Deprecated public final <ToValue> androidx.paging.PageKeyedDataSource<Key,ToValue> mapByPage(kotlin.jvm.functions.Function1<? super java.util.List<? extends Value>,? extends java.util.List<? extends ToValue>> function);
+ }
+
+ @Deprecated public abstract static class PageKeyedDataSource.LoadCallback<Key, Value> {
+ ctor @Deprecated public PageKeyedDataSource.LoadCallback();
+ method @Deprecated public abstract void onResult(java.util.List<? extends Value> data, Key? adjacentPageKey);
+ }
+
+ @Deprecated public abstract static class PageKeyedDataSource.LoadInitialCallback<Key, Value> {
+ ctor @Deprecated public PageKeyedDataSource.LoadInitialCallback();
+ method @Deprecated public abstract void onResult(java.util.List<? extends Value> data, int position, int totalCount, Key? previousPageKey, Key? nextPageKey);
+ method @Deprecated public abstract void onResult(java.util.List<? extends Value> data, Key? previousPageKey, Key? nextPageKey);
+ }
+
+ @Deprecated public static class PageKeyedDataSource.LoadInitialParams<Key> {
+ ctor @Deprecated public PageKeyedDataSource.LoadInitialParams(int requestedLoadSize, boolean placeholdersEnabled);
+ field @Deprecated public final boolean placeholdersEnabled;
+ field @Deprecated public final int requestedLoadSize;
+ }
+
+ @Deprecated public static class PageKeyedDataSource.LoadParams<Key> {
+ ctor @Deprecated public PageKeyedDataSource.LoadParams(Key key, int requestedLoadSize);
+ field @Deprecated public final Key key;
+ field @Deprecated public final int requestedLoadSize;
+ }
+
+ @Deprecated public abstract class PagedList<T> extends java.util.AbstractList<T> {
+ method @Deprecated public final void addWeakCallback(java.util.List<? extends T>? previousSnapshot, androidx.paging.PagedList.Callback callback);
+ method @Deprecated public final void addWeakCallback(androidx.paging.PagedList.Callback callback);
+ method @Deprecated public final void addWeakLoadStateListener(kotlin.jvm.functions.Function2<? super androidx.paging.LoadType,? super androidx.paging.LoadState,kotlin.Unit> listener);
+ method @Deprecated public abstract void detach();
+ method @Deprecated public T? get(int index);
+ method @Deprecated public final androidx.paging.PagedList.Config getConfig();
+ method @Deprecated public final androidx.paging.DataSource<?,T> getDataSource();
+ method @Deprecated public abstract Object? getLastKey();
+ method @Deprecated public final int getLoadedCount();
+ method @Deprecated public final int getPositionOffset();
+ method @Deprecated public int getSize();
+ method @Deprecated public abstract boolean isDetached();
+ method @Deprecated public boolean isImmutable();
+ method @Deprecated public final void loadAround(int index);
+ method @Deprecated public final void removeWeakCallback(androidx.paging.PagedList.Callback callback);
+ method @Deprecated public final void removeWeakLoadStateListener(kotlin.jvm.functions.Function2<? super androidx.paging.LoadType,? super androidx.paging.LoadState,kotlin.Unit> listener);
+ method @Deprecated public void retry();
+ method @Deprecated public final java.util.List<T> snapshot();
+ property @Deprecated public final androidx.paging.DataSource<?,T> dataSource;
+ property public abstract boolean isDetached;
+ property public boolean isImmutable;
+ property public abstract Object? lastKey;
+ property public final int loadedCount;
+ property public final int positionOffset;
+ property public int size;
+ }
+
+ @Deprecated @MainThread public abstract static class PagedList.BoundaryCallback<T> {
+ ctor @Deprecated public PagedList.BoundaryCallback();
+ method @Deprecated public void onItemAtEndLoaded(T itemAtEnd);
+ method @Deprecated public void onItemAtFrontLoaded(T itemAtFront);
+ method @Deprecated public void onZeroItemsLoaded();
+ }
+
+ @Deprecated public static final class PagedList.Builder<Key, Value> {
+ ctor @Deprecated public PagedList.Builder(androidx.paging.DataSource<Key,Value> dataSource, androidx.paging.PagedList.Config config);
+ ctor @Deprecated public PagedList.Builder(androidx.paging.DataSource<Key,Value> dataSource, int pageSize);
+ ctor @Deprecated public PagedList.Builder(androidx.paging.PagingSource<Key,Value> pagingSource, androidx.paging.PagingSource.LoadResult.Page<Key,Value> initialPage, androidx.paging.PagedList.Config config);
+ ctor @Deprecated public PagedList.Builder(androidx.paging.PagingSource<Key,Value> pagingSource, androidx.paging.PagingSource.LoadResult.Page<Key,Value> initialPage, int pageSize);
+ method @Deprecated public androidx.paging.PagedList<Value> build();
+ method @Deprecated public androidx.paging.PagedList.Builder<Key,Value> setBoundaryCallback(androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback);
+ method @Deprecated public androidx.paging.PagedList.Builder<Key,Value> setCoroutineScope(kotlinx.coroutines.CoroutineScope coroutineScope);
+ method @Deprecated public androidx.paging.PagedList.Builder<Key,Value> setFetchDispatcher(kotlinx.coroutines.CoroutineDispatcher fetchDispatcher);
+ method @Deprecated public androidx.paging.PagedList.Builder<Key,Value> setFetchExecutor(java.util.concurrent.Executor fetchExecutor);
+ method @Deprecated public androidx.paging.PagedList.Builder<Key,Value> setInitialKey(Key? initialKey);
+ method @Deprecated public androidx.paging.PagedList.Builder<Key,Value> setNotifyDispatcher(kotlinx.coroutines.CoroutineDispatcher notifyDispatcher);
+ method @Deprecated public androidx.paging.PagedList.Builder<Key,Value> setNotifyExecutor(java.util.concurrent.Executor notifyExecutor);
+ }
+
+ @Deprecated public abstract static class PagedList.Callback {
+ ctor @Deprecated public PagedList.Callback();
+ method @Deprecated public abstract void onChanged(int position, int count);
+ method @Deprecated public abstract void onInserted(int position, int count);
+ method @Deprecated public abstract void onRemoved(int position, int count);
+ }
+
+ @Deprecated public static final class PagedList.Config {
+ field @Deprecated public static final int MAX_SIZE_UNBOUNDED = 2147483647; // 0x7fffffff
+ field @Deprecated public final boolean enablePlaceholders;
+ field @Deprecated public final int initialLoadSizeHint;
+ field @Deprecated public final int maxSize;
+ field @Deprecated public final int pageSize;
+ field @Deprecated public final int prefetchDistance;
+ }
+
+ @Deprecated public static final class PagedList.Config.Builder {
+ ctor @Deprecated public PagedList.Config.Builder();
+ method @Deprecated public androidx.paging.PagedList.Config build();
+ method @Deprecated public androidx.paging.PagedList.Config.Builder setEnablePlaceholders(boolean enablePlaceholders);
+ method @Deprecated public androidx.paging.PagedList.Config.Builder setInitialLoadSizeHint(@IntRange(from=1) int initialLoadSizeHint);
+ method @Deprecated public androidx.paging.PagedList.Config.Builder setMaxSize(@IntRange(from=2) int maxSize);
+ method @Deprecated public androidx.paging.PagedList.Config.Builder setPageSize(@IntRange(from=1) int pageSize);
+ method @Deprecated public androidx.paging.PagedList.Config.Builder setPrefetchDistance(@IntRange(from=0) int prefetchDistance);
+ }
+
+ public final class PagedListConfigKt {
+ }
+
+ public final class PagedListKt {
+ }
+
+ public final class Pager<Key, Value> {
+ ctor public Pager(androidx.paging.PagingConfig config, Key? initialKey, androidx.paging.RemoteMediator<Key,Value>? remoteMediator, kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory);
+ ctor public Pager(androidx.paging.PagingConfig config, Key? initialKey, kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory);
+ ctor public Pager(androidx.paging.PagingConfig config, kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory);
+ method public kotlinx.coroutines.flow.Flow<androidx.paging.PagingData<Value>> getFlow();
+ property public final kotlinx.coroutines.flow.Flow<androidx.paging.PagingData<Value>> flow;
+ }
+
+ public final class PagingConfig {
+ ctor public PagingConfig(int pageSize, @IntRange(from=null) int prefetchDistance, boolean enablePlaceholders, @IntRange(from=null) int initialLoadSize, @IntRange(from=null) int maxSize, int jumpThreshold);
+ ctor public PagingConfig(int pageSize, @IntRange(from=null) int prefetchDistance, boolean enablePlaceholders, @IntRange(from=null) int initialLoadSize, @IntRange(from=null) int maxSize);
+ ctor public PagingConfig(int pageSize, @IntRange(from=null) int prefetchDistance, boolean enablePlaceholders, @IntRange(from=null) int initialLoadSize);
+ ctor public PagingConfig(int pageSize, @IntRange(from=null) int prefetchDistance, boolean enablePlaceholders);
+ ctor public PagingConfig(int pageSize, @IntRange(from=null) int prefetchDistance);
+ ctor public PagingConfig(int pageSize);
+ field public static final androidx.paging.PagingConfig.Companion Companion;
+ field public static final int MAX_SIZE_UNBOUNDED = 2147483647; // 0x7fffffff
+ field public final boolean enablePlaceholders;
+ field public final int initialLoadSize;
+ field public final int jumpThreshold;
+ field public final int maxSize;
+ field public final int pageSize;
+ field public final int prefetchDistance;
+ }
+
+ public static final class PagingConfig.Companion {
+ }
+
+ public final class PagingData<T> {
+ method public static <T> androidx.paging.PagingData<T> empty();
+ method @CheckResult public androidx.paging.PagingData<T> filter(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
+ method @CheckResult public <R> androidx.paging.PagingData<R> flatMap(kotlin.jvm.functions.Function1<? super T,? extends java.lang.Iterable<? extends R>> transform);
+ method @CheckResult public androidx.paging.PagingData<T> insertFooterItem(T item);
+ method @CheckResult public androidx.paging.PagingData<T> insertHeaderItem(T item);
+ method @CheckResult public static <T extends R, R> androidx.paging.PagingData<R> insertSeparators(androidx.paging.PagingData<T> pagingData, kotlin.jvm.functions.Function2<? super T,? super T,? extends R> generator);
+ method @CheckResult public <R> androidx.paging.PagingData<R> map(kotlin.jvm.functions.Function1<? super T,? extends R> transform);
+ field public static final androidx.paging.PagingData.Companion Companion;
+ }
+
+ public static final class PagingData.Companion {
+ method public <T> androidx.paging.PagingData<T> empty();
+ method @CheckResult public <T extends R, R> androidx.paging.PagingData<R> insertSeparators(androidx.paging.PagingData<T> pagingData, kotlin.jvm.functions.Function2<? super T,? super T,? extends R> generator);
+ }
+
+ public final class PagingDataKt {
+ }
+
+ public abstract class PagingSource<Key, Value> {
+ ctor public PagingSource();
+ method public final boolean getInvalid();
+ method public boolean getJumpingSupported();
+ method public boolean getKeyReuseSupported();
+ method @androidx.paging.ExperimentalPagingApi public Key? getRefreshKey(androidx.paging.PagingState<Key,Value> state);
+ method public void invalidate();
+ method public abstract suspend Object? load(androidx.paging.PagingSource.LoadParams<Key> params, kotlin.coroutines.Continuation<? super androidx.paging.PagingSource.LoadResult<Key,Value>> p);
+ method public final void registerInvalidatedCallback(kotlin.jvm.functions.Function0<kotlin.Unit> onInvalidatedCallback);
+ method public final void unregisterInvalidatedCallback(kotlin.jvm.functions.Function0<kotlin.Unit> onInvalidatedCallback);
+ property public final boolean invalid;
+ property public boolean jumpingSupported;
+ property public boolean keyReuseSupported;
+ }
+
+ public abstract static sealed class PagingSource.LoadParams<Key> {
+ method public abstract Key? getKey();
+ method public final int getLoadSize();
+ method @Deprecated public final int getPageSize();
+ method public final boolean getPlaceholdersEnabled();
+ property public abstract Key? key;
+ }
+
+ public static final class PagingSource.LoadParams.Append<Key> extends androidx.paging.PagingSource.LoadParams<Key> {
+ ctor public PagingSource.LoadParams.Append(Key key, int loadSize, boolean placeholdersEnabled, int pageSize);
+ ctor public PagingSource.LoadParams.Append(Key key, int loadSize, boolean placeholdersEnabled);
+ method public Key getKey();
+ }
+
+ public static final class PagingSource.LoadParams.Prepend<Key> extends androidx.paging.PagingSource.LoadParams<Key> {
+ ctor public PagingSource.LoadParams.Prepend(Key key, int loadSize, boolean placeholdersEnabled, int pageSize);
+ ctor public PagingSource.LoadParams.Prepend(Key key, int loadSize, boolean placeholdersEnabled);
+ method public Key getKey();
+ }
+
+ public static final class PagingSource.LoadParams.Refresh<Key> extends androidx.paging.PagingSource.LoadParams<Key> {
+ ctor public PagingSource.LoadParams.Refresh(Key? key, int loadSize, boolean placeholdersEnabled, int pageSize);
+ ctor public PagingSource.LoadParams.Refresh(Key? key, int loadSize, boolean placeholdersEnabled);
+ method public Key? getKey();
+ }
+
+ public abstract static sealed class PagingSource.LoadResult<Key, Value> {
+ }
+
+ public static final class PagingSource.LoadResult.Error<Key, Value> extends androidx.paging.PagingSource.LoadResult<Key,Value> {
+ ctor public PagingSource.LoadResult.Error(Throwable throwable);
+ method public Throwable component1();
+ method public androidx.paging.PagingSource.LoadResult.Error<Key,Value> copy(Throwable throwable);
+ method public Throwable getThrowable();
+ }
+
+ public static final class PagingSource.LoadResult.Page<Key, Value> extends androidx.paging.PagingSource.LoadResult<Key,Value> {
+ ctor public PagingSource.LoadResult.Page(java.util.List<? extends Value> data, Key? prevKey, Key? nextKey, @IntRange(from=null) int itemsBefore, @IntRange(from=null) int itemsAfter);
+ ctor public PagingSource.LoadResult.Page(java.util.List<? extends Value> data, Key? prevKey, Key? nextKey);
+ method public java.util.List<Value> component1();
+ method public Key? component2();
+ method public Key? component3();
+ method public int component4();
+ method public int component5();
+ method public androidx.paging.PagingSource.LoadResult.Page<Key,Value> copy(java.util.List<? extends Value> data, Key? prevKey, Key? nextKey, int itemsBefore, int itemsAfter);
+ method public java.util.List<Value> getData();
+ method public int getItemsAfter();
+ method public int getItemsBefore();
+ method public Key? getNextKey();
+ method public Key? getPrevKey();
+ field public static final int COUNT_UNDEFINED = -2147483648; // 0x80000000
+ field public static final androidx.paging.PagingSource.LoadResult.Page.Companion Companion;
+ }
+
+ public static final class PagingSource.LoadResult.Page.Companion {
+ }
+
+ public final class PagingSourceKt {
+ }
+
+ public final class PagingState<Key, Value> {
+ ctor public PagingState(java.util.List<androidx.paging.PagingSource.LoadResult.Page<Key,Value>> pages, Integer? anchorPosition, androidx.paging.PagingConfig config, @IntRange(from=null) int leadingPlaceholderCount);
+ method public Value? closestItemToPosition(int anchorPosition);
+ method public androidx.paging.PagingSource.LoadResult.Page<Key,Value>? closestPageToPosition(int anchorPosition);
+ method public Value? firstItemOrNull();
+ method public Integer? getAnchorPosition();
+ method public androidx.paging.PagingConfig getConfig();
+ method public java.util.List<androidx.paging.PagingSource.LoadResult.Page<Key,Value>> getPages();
+ method public boolean isEmpty();
+ method public Value? lastItemOrNull();
+ }
+
+ @Deprecated public abstract class PositionalDataSource<T> extends androidx.paging.DataSource<java.lang.Integer,T> {
+ ctor @Deprecated public PositionalDataSource();
+ method @Deprecated public static final int computeInitialLoadPosition(androidx.paging.PositionalDataSource.LoadInitialParams params, int totalCount);
+ method @Deprecated public static final int computeInitialLoadSize(androidx.paging.PositionalDataSource.LoadInitialParams params, int initialLoadPosition, int totalCount);
+ method @Deprecated @WorkerThread public abstract void loadInitial(androidx.paging.PositionalDataSource.LoadInitialParams params, androidx.paging.PositionalDataSource.LoadInitialCallback<T> callback);
+ method @Deprecated @WorkerThread public abstract void loadRange(androidx.paging.PositionalDataSource.LoadRangeParams params, androidx.paging.PositionalDataSource.LoadRangeCallback<T> callback);
+ method @Deprecated public final <V> androidx.paging.PositionalDataSource<V> map(androidx.arch.core.util.Function<T,V> function);
+ method @Deprecated public final <V> androidx.paging.PositionalDataSource<V> map(kotlin.jvm.functions.Function1<? super T,? extends V> function);
+ method @Deprecated public final <V> androidx.paging.PositionalDataSource<V> mapByPage(androidx.arch.core.util.Function<java.util.List<T>,java.util.List<V>> function);
+ method @Deprecated public final <V> androidx.paging.PositionalDataSource<V> mapByPage(kotlin.jvm.functions.Function1<? super java.util.List<? extends T>,? extends java.util.List<? extends V>> function);
+ }
+
+ @Deprecated public abstract static class PositionalDataSource.LoadInitialCallback<T> {
+ ctor @Deprecated public PositionalDataSource.LoadInitialCallback();
+ method @Deprecated public abstract void onResult(java.util.List<? extends T> data, int position, int totalCount);
+ method @Deprecated public abstract void onResult(java.util.List<? extends T> data, int position);
+ }
+
+ @Deprecated public static class PositionalDataSource.LoadInitialParams {
+ ctor @Deprecated public PositionalDataSource.LoadInitialParams(int requestedStartPosition, int requestedLoadSize, int pageSize, boolean placeholdersEnabled);
+ field @Deprecated public final int pageSize;
+ field @Deprecated public final boolean placeholdersEnabled;
+ field @Deprecated public final int requestedLoadSize;
+ field @Deprecated public final int requestedStartPosition;
+ }
+
+ @Deprecated public abstract static class PositionalDataSource.LoadRangeCallback<T> {
+ ctor @Deprecated public PositionalDataSource.LoadRangeCallback();
+ method @Deprecated public abstract void onResult(java.util.List<? extends T> data);
+ }
+
+ @Deprecated public static class PositionalDataSource.LoadRangeParams {
+ ctor @Deprecated public PositionalDataSource.LoadRangeParams(int startPosition, int loadSize);
+ field @Deprecated public final int loadSize;
+ field @Deprecated public final int startPosition;
+ }
+
+ @androidx.paging.ExperimentalPagingApi public abstract class RemoteMediator<Key, Value> {
+ ctor public RemoteMediator();
+ method public suspend Object? initialize(kotlin.coroutines.Continuation<? super androidx.paging.RemoteMediator.InitializeAction> $completion);
+ method public abstract suspend Object? load(androidx.paging.LoadType loadType, androidx.paging.PagingState<Key,Value> state, kotlin.coroutines.Continuation<? super androidx.paging.RemoteMediator.MediatorResult> p);
+ }
+
+ public enum RemoteMediator.InitializeAction {
+ method public static androidx.paging.RemoteMediator.InitializeAction valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.paging.RemoteMediator.InitializeAction[] values();
+ enum_constant public static final androidx.paging.RemoteMediator.InitializeAction LAUNCH_INITIAL_REFRESH;
+ enum_constant public static final androidx.paging.RemoteMediator.InitializeAction SKIP_INITIAL_REFRESH;
+ }
+
+ public abstract static sealed class RemoteMediator.MediatorResult {
+ }
+
+ public static final class RemoteMediator.MediatorResult.Error extends androidx.paging.RemoteMediator.MediatorResult {
+ ctor public RemoteMediator.MediatorResult.Error(Throwable throwable);
+ method public Throwable getThrowable();
+ }
+
+ public static final class RemoteMediator.MediatorResult.Success extends androidx.paging.RemoteMediator.MediatorResult {
+ ctor public RemoteMediator.MediatorResult.Success(boolean endOfPaginationReached);
+ method public boolean endOfPaginationReached();
+ }
+
+ public final class SeparatorsKt {
+ }
+
+}
+
+package androidx.paging.multicast {
+
+ public final class ChannelManagerKt {
+ }
+
+}
+
diff --git a/paging/common/api/public_plus_experimental_3.0.0-alpha04.txt b/paging/common/api/public_plus_experimental_3.0.0-alpha04.txt
new file mode 100644
index 0000000..e6aeb78
--- /dev/null
+++ b/paging/common/api/public_plus_experimental_3.0.0-alpha04.txt
@@ -0,0 +1,454 @@
+// Signature format: 3.0
+package androidx.paging {
+
+ public final class CachedPagingDataKt {
+ method @CheckResult public static <T> kotlinx.coroutines.flow.Flow<androidx.paging.PagingData<T>> cachedIn(kotlinx.coroutines.flow.Flow<androidx.paging.PagingData<T>>, kotlinx.coroutines.CoroutineScope scope);
+ }
+
+ public final class CancelableChannelFlowKt {
+ }
+
+ public final class CombinedLoadStates {
+ ctor public CombinedLoadStates(androidx.paging.LoadStates source, androidx.paging.LoadStates? mediator);
+ method public androidx.paging.LoadStates component1();
+ method public androidx.paging.LoadStates? component2();
+ method public androidx.paging.CombinedLoadStates copy(androidx.paging.LoadStates source, androidx.paging.LoadStates? mediator);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public inline void forEach(kotlin.jvm.functions.Function3<? super androidx.paging.LoadType,? super java.lang.Boolean,? super androidx.paging.LoadState,kotlin.Unit> op);
+ method public androidx.paging.LoadState getAppend();
+ method public androidx.paging.LoadStates? getMediator();
+ method public androidx.paging.LoadState getPrepend();
+ method public androidx.paging.LoadState getRefresh();
+ method public androidx.paging.LoadStates getSource();
+ property public final androidx.paging.LoadState append;
+ property public final androidx.paging.LoadState prepend;
+ property public final androidx.paging.LoadState refresh;
+ }
+
+ public abstract class DataSource<Key, Value> {
+ method @AnyThread public void addInvalidatedCallback(androidx.paging.DataSource.InvalidatedCallback onInvalidatedCallback);
+ method @AnyThread public final void addInvalidatedCallback(kotlin.jvm.functions.Function0<kotlin.Unit> onInvalidatedCallback);
+ method @AnyThread public void invalidate();
+ method @WorkerThread public boolean isInvalid();
+ method public <ToValue> androidx.paging.DataSource<Key,ToValue> map(androidx.arch.core.util.Function<Value,ToValue> function);
+ method public <ToValue> androidx.paging.DataSource<Key,ToValue> mapByPage(androidx.arch.core.util.Function<java.util.List<Value>,java.util.List<ToValue>> function);
+ method @AnyThread public void removeInvalidatedCallback(androidx.paging.DataSource.InvalidatedCallback onInvalidatedCallback);
+ method @AnyThread public final void removeInvalidatedCallback(kotlin.jvm.functions.Function0<kotlin.Unit> onInvalidatedCallback);
+ property @WorkerThread public boolean isInvalid;
+ }
+
+ public abstract static class DataSource.Factory<Key, Value> {
+ ctor public DataSource.Factory();
+ method public final kotlin.jvm.functions.Function0<androidx.paging.PagingSource<Key,Value>> asPagingSourceFactory(kotlinx.coroutines.CoroutineDispatcher fetchDispatcher = Dispatchers.IO);
+ method public final kotlin.jvm.functions.Function0<androidx.paging.PagingSource<Key,Value>> asPagingSourceFactory();
+ method public abstract androidx.paging.DataSource<Key,Value> create();
+ method public <ToValue> androidx.paging.DataSource.Factory<Key,ToValue> map(androidx.arch.core.util.Function<Value,ToValue> function);
+ method public <ToValue> androidx.paging.DataSource.Factory<Key,ToValue> mapByPage(androidx.arch.core.util.Function<java.util.List<Value>,java.util.List<ToValue>> function);
+ }
+
+ public static interface DataSource.InvalidatedCallback {
+ method @AnyThread public void onInvalidated();
+ }
+
+ @kotlin.RequiresOptIn public @interface ExperimentalPagingApi {
+ }
+
+ @Deprecated public abstract class ItemKeyedDataSource<Key, Value> extends androidx.paging.DataSource<Key,Value> {
+ ctor @Deprecated public ItemKeyedDataSource();
+ method @Deprecated public abstract Key getKey(Value item);
+ method @Deprecated public abstract void loadAfter(androidx.paging.ItemKeyedDataSource.LoadParams<Key> params, androidx.paging.ItemKeyedDataSource.LoadCallback<Value> callback);
+ method @Deprecated public abstract void loadBefore(androidx.paging.ItemKeyedDataSource.LoadParams<Key> params, androidx.paging.ItemKeyedDataSource.LoadCallback<Value> callback);
+ method @Deprecated public abstract void loadInitial(androidx.paging.ItemKeyedDataSource.LoadInitialParams<Key> params, androidx.paging.ItemKeyedDataSource.LoadInitialCallback<Value> callback);
+ method @Deprecated public final <ToValue> androidx.paging.ItemKeyedDataSource<Key,ToValue> map(androidx.arch.core.util.Function<Value,ToValue> function);
+ method @Deprecated public final <ToValue> androidx.paging.ItemKeyedDataSource<Key,ToValue> map(kotlin.jvm.functions.Function1<? super Value,? extends ToValue> function);
+ method @Deprecated public final <ToValue> androidx.paging.ItemKeyedDataSource<Key,ToValue> mapByPage(androidx.arch.core.util.Function<java.util.List<Value>,java.util.List<ToValue>> function);
+ method @Deprecated public final <ToValue> androidx.paging.ItemKeyedDataSource<Key,ToValue> mapByPage(kotlin.jvm.functions.Function1<? super java.util.List<? extends Value>,? extends java.util.List<? extends ToValue>> function);
+ }
+
+ @Deprecated public abstract static class ItemKeyedDataSource.LoadCallback<Value> {
+ ctor @Deprecated public ItemKeyedDataSource.LoadCallback();
+ method @Deprecated public abstract void onResult(java.util.List<? extends Value> data);
+ }
+
+ @Deprecated public abstract static class ItemKeyedDataSource.LoadInitialCallback<Value> extends androidx.paging.ItemKeyedDataSource.LoadCallback<Value> {
+ ctor @Deprecated public ItemKeyedDataSource.LoadInitialCallback();
+ method @Deprecated public abstract void onResult(java.util.List<? extends Value> data, int position, int totalCount);
+ }
+
+ @Deprecated public static class ItemKeyedDataSource.LoadInitialParams<Key> {
+ ctor @Deprecated public ItemKeyedDataSource.LoadInitialParams(Key? requestedInitialKey, int requestedLoadSize, boolean placeholdersEnabled);
+ field @Deprecated public final boolean placeholdersEnabled;
+ field @Deprecated public final Key? requestedInitialKey;
+ field @Deprecated public final int requestedLoadSize;
+ }
+
+ @Deprecated public static class ItemKeyedDataSource.LoadParams<Key> {
+ ctor @Deprecated public ItemKeyedDataSource.LoadParams(Key key, int requestedLoadSize);
+ field @Deprecated public final Key key;
+ field @Deprecated public final int requestedLoadSize;
+ }
+
+ public abstract sealed class LoadState {
+ method public final boolean getEndOfPaginationReached();
+ }
+
+ public static final class LoadState.Error extends androidx.paging.LoadState {
+ ctor public LoadState.Error(Throwable error);
+ method public Throwable getError();
+ }
+
+ public static final class LoadState.Loading extends androidx.paging.LoadState {
+ field public static final androidx.paging.LoadState.Loading INSTANCE;
+ }
+
+ public static final class LoadState.NotLoading extends androidx.paging.LoadState {
+ ctor public LoadState.NotLoading(boolean endOfPaginationReached);
+ }
+
+ public final class LoadStates {
+ ctor public LoadStates(androidx.paging.LoadState refresh, androidx.paging.LoadState prepend, androidx.paging.LoadState append);
+ method public androidx.paging.LoadState component1();
+ method public androidx.paging.LoadState component2();
+ method public androidx.paging.LoadState component3();
+ method public androidx.paging.LoadStates copy(androidx.paging.LoadState refresh, androidx.paging.LoadState prepend, androidx.paging.LoadState append);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public inline void forEach(kotlin.jvm.functions.Function2<? super androidx.paging.LoadType,? super androidx.paging.LoadState,kotlin.Unit> op);
+ method public androidx.paging.LoadState getAppend();
+ method public androidx.paging.LoadState getPrepend();
+ method public androidx.paging.LoadState getRefresh();
+ }
+
+ public enum LoadType {
+ method public static androidx.paging.LoadType valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.paging.LoadType[] values();
+ enum_constant public static final androidx.paging.LoadType APPEND;
+ enum_constant public static final androidx.paging.LoadType PREPEND;
+ enum_constant public static final androidx.paging.LoadType REFRESH;
+ }
+
+ public final class PageEventKt {
+ }
+
+ @Deprecated public abstract class PageKeyedDataSource<Key, Value> extends androidx.paging.DataSource<Key,Value> {
+ ctor @Deprecated public PageKeyedDataSource();
+ method @Deprecated public abstract void loadAfter(androidx.paging.PageKeyedDataSource.LoadParams<Key> params, androidx.paging.PageKeyedDataSource.LoadCallback<Key,Value> callback);
+ method @Deprecated public abstract void loadBefore(androidx.paging.PageKeyedDataSource.LoadParams<Key> params, androidx.paging.PageKeyedDataSource.LoadCallback<Key,Value> callback);
+ method @Deprecated public abstract void loadInitial(androidx.paging.PageKeyedDataSource.LoadInitialParams<Key> params, androidx.paging.PageKeyedDataSource.LoadInitialCallback<Key,Value> callback);
+ method @Deprecated public final <ToValue> androidx.paging.PageKeyedDataSource<Key,ToValue> map(androidx.arch.core.util.Function<Value,ToValue> function);
+ method @Deprecated public final <ToValue> androidx.paging.PageKeyedDataSource<Key,ToValue> map(kotlin.jvm.functions.Function1<? super Value,? extends ToValue> function);
+ method @Deprecated public final <ToValue> androidx.paging.PageKeyedDataSource<Key,ToValue> mapByPage(androidx.arch.core.util.Function<java.util.List<Value>,java.util.List<ToValue>> function);
+ method @Deprecated public final <ToValue> androidx.paging.PageKeyedDataSource<Key,ToValue> mapByPage(kotlin.jvm.functions.Function1<? super java.util.List<? extends Value>,? extends java.util.List<? extends ToValue>> function);
+ }
+
+ @Deprecated public abstract static class PageKeyedDataSource.LoadCallback<Key, Value> {
+ ctor @Deprecated public PageKeyedDataSource.LoadCallback();
+ method @Deprecated public abstract void onResult(java.util.List<? extends Value> data, Key? adjacentPageKey);
+ }
+
+ @Deprecated public abstract static class PageKeyedDataSource.LoadInitialCallback<Key, Value> {
+ ctor @Deprecated public PageKeyedDataSource.LoadInitialCallback();
+ method @Deprecated public abstract void onResult(java.util.List<? extends Value> data, int position, int totalCount, Key? previousPageKey, Key? nextPageKey);
+ method @Deprecated public abstract void onResult(java.util.List<? extends Value> data, Key? previousPageKey, Key? nextPageKey);
+ }
+
+ @Deprecated public static class PageKeyedDataSource.LoadInitialParams<Key> {
+ ctor @Deprecated public PageKeyedDataSource.LoadInitialParams(int requestedLoadSize, boolean placeholdersEnabled);
+ field @Deprecated public final boolean placeholdersEnabled;
+ field @Deprecated public final int requestedLoadSize;
+ }
+
+ @Deprecated public static class PageKeyedDataSource.LoadParams<Key> {
+ ctor @Deprecated public PageKeyedDataSource.LoadParams(Key key, int requestedLoadSize);
+ field @Deprecated public final Key key;
+ field @Deprecated public final int requestedLoadSize;
+ }
+
+ @Deprecated public abstract class PagedList<T> extends java.util.AbstractList<T> {
+ method @Deprecated public final void addWeakCallback(java.util.List<? extends T>? previousSnapshot, androidx.paging.PagedList.Callback callback);
+ method @Deprecated public final void addWeakCallback(androidx.paging.PagedList.Callback callback);
+ method @Deprecated public final void addWeakLoadStateListener(kotlin.jvm.functions.Function2<? super androidx.paging.LoadType,? super androidx.paging.LoadState,kotlin.Unit> listener);
+ method @Deprecated public abstract void detach();
+ method @Deprecated public T? get(int index);
+ method @Deprecated public final androidx.paging.PagedList.Config getConfig();
+ method @Deprecated public final androidx.paging.DataSource<?,T> getDataSource();
+ method @Deprecated public abstract Object? getLastKey();
+ method @Deprecated public final int getLoadedCount();
+ method @Deprecated public final int getPositionOffset();
+ method @Deprecated public int getSize();
+ method @Deprecated public abstract boolean isDetached();
+ method @Deprecated public boolean isImmutable();
+ method @Deprecated public final void loadAround(int index);
+ method @Deprecated public final void removeWeakCallback(androidx.paging.PagedList.Callback callback);
+ method @Deprecated public final void removeWeakLoadStateListener(kotlin.jvm.functions.Function2<? super androidx.paging.LoadType,? super androidx.paging.LoadState,kotlin.Unit> listener);
+ method @Deprecated public void retry();
+ method @Deprecated public final java.util.List<T> snapshot();
+ property @Deprecated public final androidx.paging.DataSource<?,T> dataSource;
+ property public abstract boolean isDetached;
+ property public boolean isImmutable;
+ property public abstract Object? lastKey;
+ property public final int loadedCount;
+ property public final int positionOffset;
+ property public int size;
+ }
+
+ @Deprecated @MainThread public abstract static class PagedList.BoundaryCallback<T> {
+ ctor @Deprecated public PagedList.BoundaryCallback();
+ method @Deprecated public void onItemAtEndLoaded(T itemAtEnd);
+ method @Deprecated public void onItemAtFrontLoaded(T itemAtFront);
+ method @Deprecated public void onZeroItemsLoaded();
+ }
+
+ @Deprecated public static final class PagedList.Builder<Key, Value> {
+ ctor @Deprecated public PagedList.Builder(androidx.paging.DataSource<Key,Value> dataSource, androidx.paging.PagedList.Config config);
+ ctor @Deprecated public PagedList.Builder(androidx.paging.DataSource<Key,Value> dataSource, int pageSize);
+ ctor @Deprecated public PagedList.Builder(androidx.paging.PagingSource<Key,Value> pagingSource, androidx.paging.PagingSource.LoadResult.Page<Key,Value> initialPage, androidx.paging.PagedList.Config config);
+ ctor @Deprecated public PagedList.Builder(androidx.paging.PagingSource<Key,Value> pagingSource, androidx.paging.PagingSource.LoadResult.Page<Key,Value> initialPage, int pageSize);
+ method @Deprecated public androidx.paging.PagedList<Value> build();
+ method @Deprecated public androidx.paging.PagedList.Builder<Key,Value> setBoundaryCallback(androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback);
+ method @Deprecated public androidx.paging.PagedList.Builder<Key,Value> setCoroutineScope(kotlinx.coroutines.CoroutineScope coroutineScope);
+ method @Deprecated public androidx.paging.PagedList.Builder<Key,Value> setFetchDispatcher(kotlinx.coroutines.CoroutineDispatcher fetchDispatcher);
+ method @Deprecated public androidx.paging.PagedList.Builder<Key,Value> setFetchExecutor(java.util.concurrent.Executor fetchExecutor);
+ method @Deprecated public androidx.paging.PagedList.Builder<Key,Value> setInitialKey(Key? initialKey);
+ method @Deprecated public androidx.paging.PagedList.Builder<Key,Value> setNotifyDispatcher(kotlinx.coroutines.CoroutineDispatcher notifyDispatcher);
+ method @Deprecated public androidx.paging.PagedList.Builder<Key,Value> setNotifyExecutor(java.util.concurrent.Executor notifyExecutor);
+ }
+
+ @Deprecated public abstract static class PagedList.Callback {
+ ctor @Deprecated public PagedList.Callback();
+ method @Deprecated public abstract void onChanged(int position, int count);
+ method @Deprecated public abstract void onInserted(int position, int count);
+ method @Deprecated public abstract void onRemoved(int position, int count);
+ }
+
+ @Deprecated public static final class PagedList.Config {
+ field @Deprecated public static final int MAX_SIZE_UNBOUNDED = 2147483647; // 0x7fffffff
+ field @Deprecated public final boolean enablePlaceholders;
+ field @Deprecated public final int initialLoadSizeHint;
+ field @Deprecated public final int maxSize;
+ field @Deprecated public final int pageSize;
+ field @Deprecated public final int prefetchDistance;
+ }
+
+ @Deprecated public static final class PagedList.Config.Builder {
+ ctor @Deprecated public PagedList.Config.Builder();
+ method @Deprecated public androidx.paging.PagedList.Config build();
+ method @Deprecated public androidx.paging.PagedList.Config.Builder setEnablePlaceholders(boolean enablePlaceholders);
+ method @Deprecated public androidx.paging.PagedList.Config.Builder setInitialLoadSizeHint(@IntRange(from=1) int initialLoadSizeHint);
+ method @Deprecated public androidx.paging.PagedList.Config.Builder setMaxSize(@IntRange(from=2) int maxSize);
+ method @Deprecated public androidx.paging.PagedList.Config.Builder setPageSize(@IntRange(from=1) int pageSize);
+ method @Deprecated public androidx.paging.PagedList.Config.Builder setPrefetchDistance(@IntRange(from=0) int prefetchDistance);
+ }
+
+ public final class PagedListConfigKt {
+ }
+
+ public final class PagedListKt {
+ }
+
+ public final class Pager<Key, Value> {
+ ctor public Pager(androidx.paging.PagingConfig config, Key? initialKey, androidx.paging.RemoteMediator<Key,Value>? remoteMediator, kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory);
+ ctor public Pager(androidx.paging.PagingConfig config, Key? initialKey, kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory);
+ ctor public Pager(androidx.paging.PagingConfig config, kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory);
+ method public kotlinx.coroutines.flow.Flow<androidx.paging.PagingData<Value>> getFlow();
+ property public final kotlinx.coroutines.flow.Flow<androidx.paging.PagingData<Value>> flow;
+ }
+
+ public final class PagingConfig {
+ ctor public PagingConfig(int pageSize, @IntRange(from=null) int prefetchDistance, boolean enablePlaceholders, @IntRange(from=null) int initialLoadSize, @IntRange(from=null) int maxSize, int jumpThreshold);
+ ctor public PagingConfig(int pageSize, @IntRange(from=null) int prefetchDistance, boolean enablePlaceholders, @IntRange(from=null) int initialLoadSize, @IntRange(from=null) int maxSize);
+ ctor public PagingConfig(int pageSize, @IntRange(from=null) int prefetchDistance, boolean enablePlaceholders, @IntRange(from=null) int initialLoadSize);
+ ctor public PagingConfig(int pageSize, @IntRange(from=null) int prefetchDistance, boolean enablePlaceholders);
+ ctor public PagingConfig(int pageSize, @IntRange(from=null) int prefetchDistance);
+ ctor public PagingConfig(int pageSize);
+ field public static final androidx.paging.PagingConfig.Companion Companion;
+ field public static final int MAX_SIZE_UNBOUNDED = 2147483647; // 0x7fffffff
+ field public final boolean enablePlaceholders;
+ field public final int initialLoadSize;
+ field public final int jumpThreshold;
+ field public final int maxSize;
+ field public final int pageSize;
+ field public final int prefetchDistance;
+ }
+
+ public static final class PagingConfig.Companion {
+ }
+
+ public final class PagingData<T> {
+ method public static <T> androidx.paging.PagingData<T> empty();
+ method @CheckResult public androidx.paging.PagingData<T> filter(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
+ method @CheckResult public <R> androidx.paging.PagingData<R> flatMap(kotlin.jvm.functions.Function1<? super T,? extends java.lang.Iterable<? extends R>> transform);
+ method @CheckResult public androidx.paging.PagingData<T> insertFooterItem(T item);
+ method @CheckResult public androidx.paging.PagingData<T> insertHeaderItem(T item);
+ method @CheckResult public static <T extends R, R> androidx.paging.PagingData<R> insertSeparators(androidx.paging.PagingData<T> pagingData, kotlin.jvm.functions.Function2<? super T,? super T,? extends R> generator);
+ method @CheckResult public <R> androidx.paging.PagingData<R> map(kotlin.jvm.functions.Function1<? super T,? extends R> transform);
+ field public static final androidx.paging.PagingData.Companion Companion;
+ }
+
+ public static final class PagingData.Companion {
+ method public <T> androidx.paging.PagingData<T> empty();
+ method @CheckResult public <T extends R, R> androidx.paging.PagingData<R> insertSeparators(androidx.paging.PagingData<T> pagingData, kotlin.jvm.functions.Function2<? super T,? super T,? extends R> generator);
+ }
+
+ public final class PagingDataKt {
+ }
+
+ public abstract class PagingSource<Key, Value> {
+ ctor public PagingSource();
+ method public final boolean getInvalid();
+ method public boolean getJumpingSupported();
+ method public boolean getKeyReuseSupported();
+ method @androidx.paging.ExperimentalPagingApi public Key? getRefreshKey(androidx.paging.PagingState<Key,Value> state);
+ method public void invalidate();
+ method public abstract suspend Object? load(androidx.paging.PagingSource.LoadParams<Key> params, kotlin.coroutines.Continuation<? super androidx.paging.PagingSource.LoadResult<Key,Value>> p);
+ method public final void registerInvalidatedCallback(kotlin.jvm.functions.Function0<kotlin.Unit> onInvalidatedCallback);
+ method public final void unregisterInvalidatedCallback(kotlin.jvm.functions.Function0<kotlin.Unit> onInvalidatedCallback);
+ property public final boolean invalid;
+ property public boolean jumpingSupported;
+ property public boolean keyReuseSupported;
+ }
+
+ public abstract static sealed class PagingSource.LoadParams<Key> {
+ method public abstract Key? getKey();
+ method public final int getLoadSize();
+ method @Deprecated public final int getPageSize();
+ method public final boolean getPlaceholdersEnabled();
+ property public abstract Key? key;
+ }
+
+ public static final class PagingSource.LoadParams.Append<Key> extends androidx.paging.PagingSource.LoadParams<Key> {
+ ctor public PagingSource.LoadParams.Append(Key key, int loadSize, boolean placeholdersEnabled, int pageSize);
+ ctor public PagingSource.LoadParams.Append(Key key, int loadSize, boolean placeholdersEnabled);
+ method public Key getKey();
+ }
+
+ public static final class PagingSource.LoadParams.Prepend<Key> extends androidx.paging.PagingSource.LoadParams<Key> {
+ ctor public PagingSource.LoadParams.Prepend(Key key, int loadSize, boolean placeholdersEnabled, int pageSize);
+ ctor public PagingSource.LoadParams.Prepend(Key key, int loadSize, boolean placeholdersEnabled);
+ method public Key getKey();
+ }
+
+ public static final class PagingSource.LoadParams.Refresh<Key> extends androidx.paging.PagingSource.LoadParams<Key> {
+ ctor public PagingSource.LoadParams.Refresh(Key? key, int loadSize, boolean placeholdersEnabled, int pageSize);
+ ctor public PagingSource.LoadParams.Refresh(Key? key, int loadSize, boolean placeholdersEnabled);
+ method public Key? getKey();
+ }
+
+ public abstract static sealed class PagingSource.LoadResult<Key, Value> {
+ }
+
+ public static final class PagingSource.LoadResult.Error<Key, Value> extends androidx.paging.PagingSource.LoadResult<Key,Value> {
+ ctor public PagingSource.LoadResult.Error(Throwable throwable);
+ method public Throwable component1();
+ method public androidx.paging.PagingSource.LoadResult.Error<Key,Value> copy(Throwable throwable);
+ method public Throwable getThrowable();
+ }
+
+ public static final class PagingSource.LoadResult.Page<Key, Value> extends androidx.paging.PagingSource.LoadResult<Key,Value> {
+ ctor public PagingSource.LoadResult.Page(java.util.List<? extends Value> data, Key? prevKey, Key? nextKey, @IntRange(from=null) int itemsBefore, @IntRange(from=null) int itemsAfter);
+ ctor public PagingSource.LoadResult.Page(java.util.List<? extends Value> data, Key? prevKey, Key? nextKey);
+ method public java.util.List<Value> component1();
+ method public Key? component2();
+ method public Key? component3();
+ method public int component4();
+ method public int component5();
+ method public androidx.paging.PagingSource.LoadResult.Page<Key,Value> copy(java.util.List<? extends Value> data, Key? prevKey, Key? nextKey, int itemsBefore, int itemsAfter);
+ method public java.util.List<Value> getData();
+ method public int getItemsAfter();
+ method public int getItemsBefore();
+ method public Key? getNextKey();
+ method public Key? getPrevKey();
+ field public static final int COUNT_UNDEFINED = -2147483648; // 0x80000000
+ field public static final androidx.paging.PagingSource.LoadResult.Page.Companion Companion;
+ }
+
+ public static final class PagingSource.LoadResult.Page.Companion {
+ }
+
+ public final class PagingSourceKt {
+ }
+
+ public final class PagingState<Key, Value> {
+ ctor public PagingState(java.util.List<androidx.paging.PagingSource.LoadResult.Page<Key,Value>> pages, Integer? anchorPosition, androidx.paging.PagingConfig config, @IntRange(from=null) int leadingPlaceholderCount);
+ method public Value? closestItemToPosition(int anchorPosition);
+ method public androidx.paging.PagingSource.LoadResult.Page<Key,Value>? closestPageToPosition(int anchorPosition);
+ method public Value? firstItemOrNull();
+ method public Integer? getAnchorPosition();
+ method public androidx.paging.PagingConfig getConfig();
+ method public java.util.List<androidx.paging.PagingSource.LoadResult.Page<Key,Value>> getPages();
+ method public boolean isEmpty();
+ method public Value? lastItemOrNull();
+ }
+
+ @Deprecated public abstract class PositionalDataSource<T> extends androidx.paging.DataSource<java.lang.Integer,T> {
+ ctor @Deprecated public PositionalDataSource();
+ method @Deprecated public static final int computeInitialLoadPosition(androidx.paging.PositionalDataSource.LoadInitialParams params, int totalCount);
+ method @Deprecated public static final int computeInitialLoadSize(androidx.paging.PositionalDataSource.LoadInitialParams params, int initialLoadPosition, int totalCount);
+ method @Deprecated @WorkerThread public abstract void loadInitial(androidx.paging.PositionalDataSource.LoadInitialParams params, androidx.paging.PositionalDataSource.LoadInitialCallback<T> callback);
+ method @Deprecated @WorkerThread public abstract void loadRange(androidx.paging.PositionalDataSource.LoadRangeParams params, androidx.paging.PositionalDataSource.LoadRangeCallback<T> callback);
+ method @Deprecated public final <V> androidx.paging.PositionalDataSource<V> map(androidx.arch.core.util.Function<T,V> function);
+ method @Deprecated public final <V> androidx.paging.PositionalDataSource<V> map(kotlin.jvm.functions.Function1<? super T,? extends V> function);
+ method @Deprecated public final <V> androidx.paging.PositionalDataSource<V> mapByPage(androidx.arch.core.util.Function<java.util.List<T>,java.util.List<V>> function);
+ method @Deprecated public final <V> androidx.paging.PositionalDataSource<V> mapByPage(kotlin.jvm.functions.Function1<? super java.util.List<? extends T>,? extends java.util.List<? extends V>> function);
+ }
+
+ @Deprecated public abstract static class PositionalDataSource.LoadInitialCallback<T> {
+ ctor @Deprecated public PositionalDataSource.LoadInitialCallback();
+ method @Deprecated public abstract void onResult(java.util.List<? extends T> data, int position, int totalCount);
+ method @Deprecated public abstract void onResult(java.util.List<? extends T> data, int position);
+ }
+
+ @Deprecated public static class PositionalDataSource.LoadInitialParams {
+ ctor @Deprecated public PositionalDataSource.LoadInitialParams(int requestedStartPosition, int requestedLoadSize, int pageSize, boolean placeholdersEnabled);
+ field @Deprecated public final int pageSize;
+ field @Deprecated public final boolean placeholdersEnabled;
+ field @Deprecated public final int requestedLoadSize;
+ field @Deprecated public final int requestedStartPosition;
+ }
+
+ @Deprecated public abstract static class PositionalDataSource.LoadRangeCallback<T> {
+ ctor @Deprecated public PositionalDataSource.LoadRangeCallback();
+ method @Deprecated public abstract void onResult(java.util.List<? extends T> data);
+ }
+
+ @Deprecated public static class PositionalDataSource.LoadRangeParams {
+ ctor @Deprecated public PositionalDataSource.LoadRangeParams(int startPosition, int loadSize);
+ field @Deprecated public final int loadSize;
+ field @Deprecated public final int startPosition;
+ }
+
+ @androidx.paging.ExperimentalPagingApi public abstract class RemoteMediator<Key, Value> {
+ ctor public RemoteMediator();
+ method public suspend Object? initialize(kotlin.coroutines.Continuation<? super androidx.paging.RemoteMediator.InitializeAction> $completion);
+ method public abstract suspend Object? load(androidx.paging.LoadType loadType, androidx.paging.PagingState<Key,Value> state, kotlin.coroutines.Continuation<? super androidx.paging.RemoteMediator.MediatorResult> p);
+ }
+
+ public enum RemoteMediator.InitializeAction {
+ method public static androidx.paging.RemoteMediator.InitializeAction valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.paging.RemoteMediator.InitializeAction[] values();
+ enum_constant public static final androidx.paging.RemoteMediator.InitializeAction LAUNCH_INITIAL_REFRESH;
+ enum_constant public static final androidx.paging.RemoteMediator.InitializeAction SKIP_INITIAL_REFRESH;
+ }
+
+ public abstract static sealed class RemoteMediator.MediatorResult {
+ }
+
+ public static final class RemoteMediator.MediatorResult.Error extends androidx.paging.RemoteMediator.MediatorResult {
+ ctor public RemoteMediator.MediatorResult.Error(Throwable throwable);
+ method public Throwable getThrowable();
+ }
+
+ public static final class RemoteMediator.MediatorResult.Success extends androidx.paging.RemoteMediator.MediatorResult {
+ ctor public RemoteMediator.MediatorResult.Success(boolean endOfPaginationReached);
+ method public boolean endOfPaginationReached();
+ }
+
+ public final class SeparatorsKt {
+ }
+
+}
+
+package androidx.paging.multicast {
+
+ public final class ChannelManagerKt {
+ }
+
+}
+
diff --git a/paging/common/api/restricted_3.0.0-alpha04.txt b/paging/common/api/restricted_3.0.0-alpha04.txt
new file mode 100644
index 0000000..80803ed
--- /dev/null
+++ b/paging/common/api/restricted_3.0.0-alpha04.txt
@@ -0,0 +1,452 @@
+// Signature format: 3.0
+package androidx.paging {
+
+ public final class CachedPagingDataKt {
+ method @CheckResult public static <T> kotlinx.coroutines.flow.Flow<androidx.paging.PagingData<T>> cachedIn(kotlinx.coroutines.flow.Flow<androidx.paging.PagingData<T>>, kotlinx.coroutines.CoroutineScope scope);
+ }
+
+ public final class CancelableChannelFlowKt {
+ }
+
+ public final class CombinedLoadStates {
+ ctor public CombinedLoadStates(androidx.paging.LoadStates source, androidx.paging.LoadStates? mediator);
+ method public androidx.paging.LoadStates component1();
+ method public androidx.paging.LoadStates? component2();
+ method public androidx.paging.CombinedLoadStates copy(androidx.paging.LoadStates source, androidx.paging.LoadStates? mediator);
+ method public androidx.paging.LoadState getAppend();
+ method public androidx.paging.LoadStates? getMediator();
+ method public androidx.paging.LoadState getPrepend();
+ method public androidx.paging.LoadState getRefresh();
+ method public androidx.paging.LoadStates getSource();
+ property public final androidx.paging.LoadState append;
+ property public final androidx.paging.LoadState prepend;
+ property public final androidx.paging.LoadState refresh;
+ }
+
+ public abstract class DataSource<Key, Value> {
+ method @AnyThread public void addInvalidatedCallback(androidx.paging.DataSource.InvalidatedCallback onInvalidatedCallback);
+ method @AnyThread public final void addInvalidatedCallback(kotlin.jvm.functions.Function0<kotlin.Unit> onInvalidatedCallback);
+ method @AnyThread public void invalidate();
+ method @WorkerThread public boolean isInvalid();
+ method public <ToValue> androidx.paging.DataSource<Key,ToValue> map(androidx.arch.core.util.Function<Value,ToValue> function);
+ method public <ToValue> androidx.paging.DataSource<Key,ToValue> mapByPage(androidx.arch.core.util.Function<java.util.List<Value>,java.util.List<ToValue>> function);
+ method @AnyThread public void removeInvalidatedCallback(androidx.paging.DataSource.InvalidatedCallback onInvalidatedCallback);
+ method @AnyThread public final void removeInvalidatedCallback(kotlin.jvm.functions.Function0<kotlin.Unit> onInvalidatedCallback);
+ property @WorkerThread public boolean isInvalid;
+ }
+
+ public abstract static class DataSource.Factory<Key, Value> {
+ ctor public DataSource.Factory();
+ method public final kotlin.jvm.functions.Function0<androidx.paging.PagingSource<Key,Value>> asPagingSourceFactory(kotlinx.coroutines.CoroutineDispatcher fetchDispatcher = Dispatchers.IO);
+ method public final kotlin.jvm.functions.Function0<androidx.paging.PagingSource<Key,Value>> asPagingSourceFactory();
+ method public abstract androidx.paging.DataSource<Key,Value> create();
+ method public <ToValue> androidx.paging.DataSource.Factory<Key,ToValue> map(androidx.arch.core.util.Function<Value,ToValue> function);
+ method public <ToValue> androidx.paging.DataSource.Factory<Key,ToValue> mapByPage(androidx.arch.core.util.Function<java.util.List<Value>,java.util.List<ToValue>> function);
+ }
+
+ public static interface DataSource.InvalidatedCallback {
+ method @AnyThread public void onInvalidated();
+ }
+
+ @kotlin.RequiresOptIn public @interface ExperimentalPagingApi {
+ }
+
+ @Deprecated public abstract class ItemKeyedDataSource<Key, Value> extends androidx.paging.DataSource<Key,Value> {
+ ctor @Deprecated public ItemKeyedDataSource();
+ method @Deprecated public abstract Key getKey(Value item);
+ method @Deprecated public abstract void loadAfter(androidx.paging.ItemKeyedDataSource.LoadParams<Key> params, androidx.paging.ItemKeyedDataSource.LoadCallback<Value> callback);
+ method @Deprecated public abstract void loadBefore(androidx.paging.ItemKeyedDataSource.LoadParams<Key> params, androidx.paging.ItemKeyedDataSource.LoadCallback<Value> callback);
+ method @Deprecated public abstract void loadInitial(androidx.paging.ItemKeyedDataSource.LoadInitialParams<Key> params, androidx.paging.ItemKeyedDataSource.LoadInitialCallback<Value> callback);
+ method @Deprecated public final <ToValue> androidx.paging.ItemKeyedDataSource<Key,ToValue> map(androidx.arch.core.util.Function<Value,ToValue> function);
+ method @Deprecated public final <ToValue> androidx.paging.ItemKeyedDataSource<Key,ToValue> map(kotlin.jvm.functions.Function1<? super Value,? extends ToValue> function);
+ method @Deprecated public final <ToValue> androidx.paging.ItemKeyedDataSource<Key,ToValue> mapByPage(androidx.arch.core.util.Function<java.util.List<Value>,java.util.List<ToValue>> function);
+ method @Deprecated public final <ToValue> androidx.paging.ItemKeyedDataSource<Key,ToValue> mapByPage(kotlin.jvm.functions.Function1<? super java.util.List<? extends Value>,? extends java.util.List<? extends ToValue>> function);
+ }
+
+ @Deprecated public abstract static class ItemKeyedDataSource.LoadCallback<Value> {
+ ctor @Deprecated public ItemKeyedDataSource.LoadCallback();
+ method @Deprecated public abstract void onResult(java.util.List<? extends Value> data);
+ }
+
+ @Deprecated public abstract static class ItemKeyedDataSource.LoadInitialCallback<Value> extends androidx.paging.ItemKeyedDataSource.LoadCallback<Value> {
+ ctor @Deprecated public ItemKeyedDataSource.LoadInitialCallback();
+ method @Deprecated public abstract void onResult(java.util.List<? extends Value> data, int position, int totalCount);
+ }
+
+ @Deprecated public static class ItemKeyedDataSource.LoadInitialParams<Key> {
+ ctor @Deprecated public ItemKeyedDataSource.LoadInitialParams(Key? requestedInitialKey, int requestedLoadSize, boolean placeholdersEnabled);
+ field @Deprecated public final boolean placeholdersEnabled;
+ field @Deprecated public final Key? requestedInitialKey;
+ field @Deprecated public final int requestedLoadSize;
+ }
+
+ @Deprecated public static class ItemKeyedDataSource.LoadParams<Key> {
+ ctor @Deprecated public ItemKeyedDataSource.LoadParams(Key key, int requestedLoadSize);
+ field @Deprecated public final Key key;
+ field @Deprecated public final int requestedLoadSize;
+ }
+
+ public abstract sealed class LoadState {
+ method public final boolean getEndOfPaginationReached();
+ }
+
+ public static final class LoadState.Error extends androidx.paging.LoadState {
+ ctor public LoadState.Error(Throwable error);
+ method public Throwable getError();
+ }
+
+ public static final class LoadState.Loading extends androidx.paging.LoadState {
+ field public static final androidx.paging.LoadState.Loading INSTANCE;
+ }
+
+ public static final class LoadState.NotLoading extends androidx.paging.LoadState {
+ ctor public LoadState.NotLoading(boolean endOfPaginationReached);
+ }
+
+ public final class LoadStates {
+ ctor public LoadStates(androidx.paging.LoadState refresh, androidx.paging.LoadState prepend, androidx.paging.LoadState append);
+ method public androidx.paging.LoadState component1();
+ method public androidx.paging.LoadState component2();
+ method public androidx.paging.LoadState component3();
+ method public androidx.paging.LoadStates copy(androidx.paging.LoadState refresh, androidx.paging.LoadState prepend, androidx.paging.LoadState append);
+ method public androidx.paging.LoadState getAppend();
+ method public androidx.paging.LoadState getPrepend();
+ method public androidx.paging.LoadState getRefresh();
+ }
+
+ public enum LoadType {
+ method public static androidx.paging.LoadType valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.paging.LoadType[] values();
+ enum_constant public static final androidx.paging.LoadType APPEND;
+ enum_constant public static final androidx.paging.LoadType PREPEND;
+ enum_constant public static final androidx.paging.LoadType REFRESH;
+ }
+
+ public final class PageEventKt {
+ }
+
+ @Deprecated public abstract class PageKeyedDataSource<Key, Value> extends androidx.paging.DataSource<Key,Value> {
+ ctor @Deprecated public PageKeyedDataSource();
+ method @Deprecated public abstract void loadAfter(androidx.paging.PageKeyedDataSource.LoadParams<Key> params, androidx.paging.PageKeyedDataSource.LoadCallback<Key,Value> callback);
+ method @Deprecated public abstract void loadBefore(androidx.paging.PageKeyedDataSource.LoadParams<Key> params, androidx.paging.PageKeyedDataSource.LoadCallback<Key,Value> callback);
+ method @Deprecated public abstract void loadInitial(androidx.paging.PageKeyedDataSource.LoadInitialParams<Key> params, androidx.paging.PageKeyedDataSource.LoadInitialCallback<Key,Value> callback);
+ method @Deprecated public final <ToValue> androidx.paging.PageKeyedDataSource<Key,ToValue> map(androidx.arch.core.util.Function<Value,ToValue> function);
+ method @Deprecated public final <ToValue> androidx.paging.PageKeyedDataSource<Key,ToValue> map(kotlin.jvm.functions.Function1<? super Value,? extends ToValue> function);
+ method @Deprecated public final <ToValue> androidx.paging.PageKeyedDataSource<Key,ToValue> mapByPage(androidx.arch.core.util.Function<java.util.List<Value>,java.util.List<ToValue>> function);
+ method @Deprecated public final <ToValue> androidx.paging.PageKeyedDataSource<Key,ToValue> mapByPage(kotlin.jvm.functions.Function1<? super java.util.List<? extends Value>,? extends java.util.List<? extends ToValue>> function);
+ }
+
+ @Deprecated public abstract static class PageKeyedDataSource.LoadCallback<Key, Value> {
+ ctor @Deprecated public PageKeyedDataSource.LoadCallback();
+ method @Deprecated public abstract void onResult(java.util.List<? extends Value> data, Key? adjacentPageKey);
+ }
+
+ @Deprecated public abstract static class PageKeyedDataSource.LoadInitialCallback<Key, Value> {
+ ctor @Deprecated public PageKeyedDataSource.LoadInitialCallback();
+ method @Deprecated public abstract void onResult(java.util.List<? extends Value> data, int position, int totalCount, Key? previousPageKey, Key? nextPageKey);
+ method @Deprecated public abstract void onResult(java.util.List<? extends Value> data, Key? previousPageKey, Key? nextPageKey);
+ }
+
+ @Deprecated public static class PageKeyedDataSource.LoadInitialParams<Key> {
+ ctor @Deprecated public PageKeyedDataSource.LoadInitialParams(int requestedLoadSize, boolean placeholdersEnabled);
+ field @Deprecated public final boolean placeholdersEnabled;
+ field @Deprecated public final int requestedLoadSize;
+ }
+
+ @Deprecated public static class PageKeyedDataSource.LoadParams<Key> {
+ ctor @Deprecated public PageKeyedDataSource.LoadParams(Key key, int requestedLoadSize);
+ field @Deprecated public final Key key;
+ field @Deprecated public final int requestedLoadSize;
+ }
+
+ @Deprecated public abstract class PagedList<T> extends java.util.AbstractList<T> {
+ method @Deprecated public final void addWeakCallback(java.util.List<? extends T>? previousSnapshot, androidx.paging.PagedList.Callback callback);
+ method @Deprecated public final void addWeakCallback(androidx.paging.PagedList.Callback callback);
+ method @Deprecated public final void addWeakLoadStateListener(kotlin.jvm.functions.Function2<? super androidx.paging.LoadType,? super androidx.paging.LoadState,kotlin.Unit> listener);
+ method @Deprecated public abstract void detach();
+ method @Deprecated public T? get(int index);
+ method @Deprecated public final androidx.paging.PagedList.Config getConfig();
+ method @Deprecated public final androidx.paging.DataSource<?,T> getDataSource();
+ method @Deprecated public abstract Object? getLastKey();
+ method @Deprecated public final int getLoadedCount();
+ method @Deprecated public final int getPositionOffset();
+ method @Deprecated public int getSize();
+ method @Deprecated public abstract boolean isDetached();
+ method @Deprecated public boolean isImmutable();
+ method @Deprecated public final void loadAround(int index);
+ method @Deprecated public final void removeWeakCallback(androidx.paging.PagedList.Callback callback);
+ method @Deprecated public final void removeWeakLoadStateListener(kotlin.jvm.functions.Function2<? super androidx.paging.LoadType,? super androidx.paging.LoadState,kotlin.Unit> listener);
+ method @Deprecated public void retry();
+ method @Deprecated public final java.util.List<T> snapshot();
+ property @Deprecated public final androidx.paging.DataSource<?,T> dataSource;
+ property public abstract boolean isDetached;
+ property public boolean isImmutable;
+ property public abstract Object? lastKey;
+ property public final int loadedCount;
+ property public final int positionOffset;
+ property public int size;
+ }
+
+ @Deprecated @MainThread public abstract static class PagedList.BoundaryCallback<T> {
+ ctor @Deprecated public PagedList.BoundaryCallback();
+ method @Deprecated public void onItemAtEndLoaded(T itemAtEnd);
+ method @Deprecated public void onItemAtFrontLoaded(T itemAtFront);
+ method @Deprecated public void onZeroItemsLoaded();
+ }
+
+ @Deprecated public static final class PagedList.Builder<Key, Value> {
+ ctor @Deprecated public PagedList.Builder(androidx.paging.DataSource<Key,Value> dataSource, androidx.paging.PagedList.Config config);
+ ctor @Deprecated public PagedList.Builder(androidx.paging.DataSource<Key,Value> dataSource, int pageSize);
+ ctor @Deprecated public PagedList.Builder(androidx.paging.PagingSource<Key,Value> pagingSource, androidx.paging.PagingSource.LoadResult.Page<Key,Value> initialPage, androidx.paging.PagedList.Config config);
+ ctor @Deprecated public PagedList.Builder(androidx.paging.PagingSource<Key,Value> pagingSource, androidx.paging.PagingSource.LoadResult.Page<Key,Value> initialPage, int pageSize);
+ method @Deprecated public androidx.paging.PagedList<Value> build();
+ method @Deprecated public androidx.paging.PagedList.Builder<Key,Value> setBoundaryCallback(androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback);
+ method @Deprecated public androidx.paging.PagedList.Builder<Key,Value> setCoroutineScope(kotlinx.coroutines.CoroutineScope coroutineScope);
+ method @Deprecated public androidx.paging.PagedList.Builder<Key,Value> setFetchDispatcher(kotlinx.coroutines.CoroutineDispatcher fetchDispatcher);
+ method @Deprecated public androidx.paging.PagedList.Builder<Key,Value> setFetchExecutor(java.util.concurrent.Executor fetchExecutor);
+ method @Deprecated public androidx.paging.PagedList.Builder<Key,Value> setInitialKey(Key? initialKey);
+ method @Deprecated public androidx.paging.PagedList.Builder<Key,Value> setNotifyDispatcher(kotlinx.coroutines.CoroutineDispatcher notifyDispatcher);
+ method @Deprecated public androidx.paging.PagedList.Builder<Key,Value> setNotifyExecutor(java.util.concurrent.Executor notifyExecutor);
+ }
+
+ @Deprecated public abstract static class PagedList.Callback {
+ ctor @Deprecated public PagedList.Callback();
+ method @Deprecated public abstract void onChanged(int position, int count);
+ method @Deprecated public abstract void onInserted(int position, int count);
+ method @Deprecated public abstract void onRemoved(int position, int count);
+ }
+
+ @Deprecated public static final class PagedList.Config {
+ field @Deprecated public static final int MAX_SIZE_UNBOUNDED = 2147483647; // 0x7fffffff
+ field @Deprecated public final boolean enablePlaceholders;
+ field @Deprecated public final int initialLoadSizeHint;
+ field @Deprecated public final int maxSize;
+ field @Deprecated public final int pageSize;
+ field @Deprecated public final int prefetchDistance;
+ }
+
+ @Deprecated public static final class PagedList.Config.Builder {
+ ctor @Deprecated public PagedList.Config.Builder();
+ method @Deprecated public androidx.paging.PagedList.Config build();
+ method @Deprecated public androidx.paging.PagedList.Config.Builder setEnablePlaceholders(boolean enablePlaceholders);
+ method @Deprecated public androidx.paging.PagedList.Config.Builder setInitialLoadSizeHint(@IntRange(from=1) int initialLoadSizeHint);
+ method @Deprecated public androidx.paging.PagedList.Config.Builder setMaxSize(@IntRange(from=2) int maxSize);
+ method @Deprecated public androidx.paging.PagedList.Config.Builder setPageSize(@IntRange(from=1) int pageSize);
+ method @Deprecated public androidx.paging.PagedList.Config.Builder setPrefetchDistance(@IntRange(from=0) int prefetchDistance);
+ }
+
+ public final class PagedListConfigKt {
+ }
+
+ public final class PagedListKt {
+ }
+
+ public final class Pager<Key, Value> {
+ ctor public Pager(androidx.paging.PagingConfig config, Key? initialKey, androidx.paging.RemoteMediator<Key,Value>? remoteMediator, kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory);
+ ctor public Pager(androidx.paging.PagingConfig config, Key? initialKey, kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory);
+ ctor public Pager(androidx.paging.PagingConfig config, kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory);
+ method public kotlinx.coroutines.flow.Flow<androidx.paging.PagingData<Value>> getFlow();
+ property public final kotlinx.coroutines.flow.Flow<androidx.paging.PagingData<Value>> flow;
+ }
+
+ public final class PagingConfig {
+ ctor public PagingConfig(int pageSize, @IntRange(from=null) int prefetchDistance, boolean enablePlaceholders, @IntRange(from=null) int initialLoadSize, @IntRange(from=null) int maxSize, int jumpThreshold);
+ ctor public PagingConfig(int pageSize, @IntRange(from=null) int prefetchDistance, boolean enablePlaceholders, @IntRange(from=null) int initialLoadSize, @IntRange(from=null) int maxSize);
+ ctor public PagingConfig(int pageSize, @IntRange(from=null) int prefetchDistance, boolean enablePlaceholders, @IntRange(from=null) int initialLoadSize);
+ ctor public PagingConfig(int pageSize, @IntRange(from=null) int prefetchDistance, boolean enablePlaceholders);
+ ctor public PagingConfig(int pageSize, @IntRange(from=null) int prefetchDistance);
+ ctor public PagingConfig(int pageSize);
+ field public static final androidx.paging.PagingConfig.Companion Companion;
+ field public static final int MAX_SIZE_UNBOUNDED = 2147483647; // 0x7fffffff
+ field public final boolean enablePlaceholders;
+ field public final int initialLoadSize;
+ field public final int jumpThreshold;
+ field public final int maxSize;
+ field public final int pageSize;
+ field public final int prefetchDistance;
+ }
+
+ public static final class PagingConfig.Companion {
+ }
+
+ public final class PagingData<T> {
+ method public static <T> androidx.paging.PagingData<T> empty();
+ method @CheckResult public androidx.paging.PagingData<T> filter(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
+ method @CheckResult public <R> androidx.paging.PagingData<R> flatMap(kotlin.jvm.functions.Function1<? super T,? extends java.lang.Iterable<? extends R>> transform);
+ method @CheckResult public androidx.paging.PagingData<T> insertFooterItem(T item);
+ method @CheckResult public androidx.paging.PagingData<T> insertHeaderItem(T item);
+ method @CheckResult public static <T extends R, R> androidx.paging.PagingData<R> insertSeparators(androidx.paging.PagingData<T> pagingData, kotlin.jvm.functions.Function2<? super T,? super T,? extends R> generator);
+ method @CheckResult public <R> androidx.paging.PagingData<R> map(kotlin.jvm.functions.Function1<? super T,? extends R> transform);
+ field public static final androidx.paging.PagingData.Companion Companion;
+ }
+
+ public static final class PagingData.Companion {
+ method public <T> androidx.paging.PagingData<T> empty();
+ method @CheckResult public <T extends R, R> androidx.paging.PagingData<R> insertSeparators(androidx.paging.PagingData<T> pagingData, kotlin.jvm.functions.Function2<? super T,? super T,? extends R> generator);
+ }
+
+ public final class PagingDataKt {
+ }
+
+ public abstract class PagingSource<Key, Value> {
+ ctor public PagingSource();
+ method public final boolean getInvalid();
+ method public boolean getJumpingSupported();
+ method public boolean getKeyReuseSupported();
+ method @androidx.paging.ExperimentalPagingApi public Key? getRefreshKey(androidx.paging.PagingState<Key,Value> state);
+ method public void invalidate();
+ method public abstract suspend Object? load(androidx.paging.PagingSource.LoadParams<Key> params, kotlin.coroutines.Continuation<? super androidx.paging.PagingSource.LoadResult<Key,Value>> p);
+ method public final void registerInvalidatedCallback(kotlin.jvm.functions.Function0<kotlin.Unit> onInvalidatedCallback);
+ method public final void unregisterInvalidatedCallback(kotlin.jvm.functions.Function0<kotlin.Unit> onInvalidatedCallback);
+ property public final boolean invalid;
+ property public boolean jumpingSupported;
+ property public boolean keyReuseSupported;
+ }
+
+ public abstract static sealed class PagingSource.LoadParams<Key> {
+ method public abstract Key? getKey();
+ method public final int getLoadSize();
+ method @Deprecated public final int getPageSize();
+ method public final boolean getPlaceholdersEnabled();
+ property public abstract Key? key;
+ }
+
+ public static final class PagingSource.LoadParams.Append<Key> extends androidx.paging.PagingSource.LoadParams<Key> {
+ ctor public PagingSource.LoadParams.Append(Key key, int loadSize, boolean placeholdersEnabled, int pageSize);
+ ctor public PagingSource.LoadParams.Append(Key key, int loadSize, boolean placeholdersEnabled);
+ method public Key getKey();
+ }
+
+ public static final class PagingSource.LoadParams.Prepend<Key> extends androidx.paging.PagingSource.LoadParams<Key> {
+ ctor public PagingSource.LoadParams.Prepend(Key key, int loadSize, boolean placeholdersEnabled, int pageSize);
+ ctor public PagingSource.LoadParams.Prepend(Key key, int loadSize, boolean placeholdersEnabled);
+ method public Key getKey();
+ }
+
+ public static final class PagingSource.LoadParams.Refresh<Key> extends androidx.paging.PagingSource.LoadParams<Key> {
+ ctor public PagingSource.LoadParams.Refresh(Key? key, int loadSize, boolean placeholdersEnabled, int pageSize);
+ ctor public PagingSource.LoadParams.Refresh(Key? key, int loadSize, boolean placeholdersEnabled);
+ method public Key? getKey();
+ }
+
+ public abstract static sealed class PagingSource.LoadResult<Key, Value> {
+ }
+
+ public static final class PagingSource.LoadResult.Error<Key, Value> extends androidx.paging.PagingSource.LoadResult<Key,Value> {
+ ctor public PagingSource.LoadResult.Error(Throwable throwable);
+ method public Throwable component1();
+ method public androidx.paging.PagingSource.LoadResult.Error<Key,Value> copy(Throwable throwable);
+ method public Throwable getThrowable();
+ }
+
+ public static final class PagingSource.LoadResult.Page<Key, Value> extends androidx.paging.PagingSource.LoadResult<Key,Value> {
+ ctor public PagingSource.LoadResult.Page(java.util.List<? extends Value> data, Key? prevKey, Key? nextKey, @IntRange(from=null) int itemsBefore, @IntRange(from=null) int itemsAfter);
+ ctor public PagingSource.LoadResult.Page(java.util.List<? extends Value> data, Key? prevKey, Key? nextKey);
+ method public java.util.List<Value> component1();
+ method public Key? component2();
+ method public Key? component3();
+ method public int component4();
+ method public int component5();
+ method public androidx.paging.PagingSource.LoadResult.Page<Key,Value> copy(java.util.List<? extends Value> data, Key? prevKey, Key? nextKey, int itemsBefore, int itemsAfter);
+ method public java.util.List<Value> getData();
+ method public int getItemsAfter();
+ method public int getItemsBefore();
+ method public Key? getNextKey();
+ method public Key? getPrevKey();
+ field public static final int COUNT_UNDEFINED = -2147483648; // 0x80000000
+ field public static final androidx.paging.PagingSource.LoadResult.Page.Companion Companion;
+ }
+
+ public static final class PagingSource.LoadResult.Page.Companion {
+ }
+
+ public final class PagingSourceKt {
+ }
+
+ public final class PagingState<Key, Value> {
+ ctor public PagingState(java.util.List<androidx.paging.PagingSource.LoadResult.Page<Key,Value>> pages, Integer? anchorPosition, androidx.paging.PagingConfig config, @IntRange(from=null) int leadingPlaceholderCount);
+ method public Value? closestItemToPosition(int anchorPosition);
+ method public androidx.paging.PagingSource.LoadResult.Page<Key,Value>? closestPageToPosition(int anchorPosition);
+ method public Value? firstItemOrNull();
+ method public Integer? getAnchorPosition();
+ method public androidx.paging.PagingConfig getConfig();
+ method public java.util.List<androidx.paging.PagingSource.LoadResult.Page<Key,Value>> getPages();
+ method public boolean isEmpty();
+ method public Value? lastItemOrNull();
+ }
+
+ @Deprecated public abstract class PositionalDataSource<T> extends androidx.paging.DataSource<java.lang.Integer,T> {
+ ctor @Deprecated public PositionalDataSource();
+ method @Deprecated public static final int computeInitialLoadPosition(androidx.paging.PositionalDataSource.LoadInitialParams params, int totalCount);
+ method @Deprecated public static final int computeInitialLoadSize(androidx.paging.PositionalDataSource.LoadInitialParams params, int initialLoadPosition, int totalCount);
+ method @Deprecated @WorkerThread public abstract void loadInitial(androidx.paging.PositionalDataSource.LoadInitialParams params, androidx.paging.PositionalDataSource.LoadInitialCallback<T> callback);
+ method @Deprecated @WorkerThread public abstract void loadRange(androidx.paging.PositionalDataSource.LoadRangeParams params, androidx.paging.PositionalDataSource.LoadRangeCallback<T> callback);
+ method @Deprecated public final <V> androidx.paging.PositionalDataSource<V> map(androidx.arch.core.util.Function<T,V> function);
+ method @Deprecated public final <V> androidx.paging.PositionalDataSource<V> map(kotlin.jvm.functions.Function1<? super T,? extends V> function);
+ method @Deprecated public final <V> androidx.paging.PositionalDataSource<V> mapByPage(androidx.arch.core.util.Function<java.util.List<T>,java.util.List<V>> function);
+ method @Deprecated public final <V> androidx.paging.PositionalDataSource<V> mapByPage(kotlin.jvm.functions.Function1<? super java.util.List<? extends T>,? extends java.util.List<? extends V>> function);
+ }
+
+ @Deprecated public abstract static class PositionalDataSource.LoadInitialCallback<T> {
+ ctor @Deprecated public PositionalDataSource.LoadInitialCallback();
+ method @Deprecated public abstract void onResult(java.util.List<? extends T> data, int position, int totalCount);
+ method @Deprecated public abstract void onResult(java.util.List<? extends T> data, int position);
+ }
+
+ @Deprecated public static class PositionalDataSource.LoadInitialParams {
+ ctor @Deprecated public PositionalDataSource.LoadInitialParams(int requestedStartPosition, int requestedLoadSize, int pageSize, boolean placeholdersEnabled);
+ field @Deprecated public final int pageSize;
+ field @Deprecated public final boolean placeholdersEnabled;
+ field @Deprecated public final int requestedLoadSize;
+ field @Deprecated public final int requestedStartPosition;
+ }
+
+ @Deprecated public abstract static class PositionalDataSource.LoadRangeCallback<T> {
+ ctor @Deprecated public PositionalDataSource.LoadRangeCallback();
+ method @Deprecated public abstract void onResult(java.util.List<? extends T> data);
+ }
+
+ @Deprecated public static class PositionalDataSource.LoadRangeParams {
+ ctor @Deprecated public PositionalDataSource.LoadRangeParams(int startPosition, int loadSize);
+ field @Deprecated public final int loadSize;
+ field @Deprecated public final int startPosition;
+ }
+
+ @androidx.paging.ExperimentalPagingApi public abstract class RemoteMediator<Key, Value> {
+ ctor public RemoteMediator();
+ method public suspend Object? initialize(kotlin.coroutines.Continuation<? super androidx.paging.RemoteMediator.InitializeAction> $completion);
+ method public abstract suspend Object? load(androidx.paging.LoadType loadType, androidx.paging.PagingState<Key,Value> state, kotlin.coroutines.Continuation<? super androidx.paging.RemoteMediator.MediatorResult> p);
+ }
+
+ public enum RemoteMediator.InitializeAction {
+ method public static androidx.paging.RemoteMediator.InitializeAction valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.paging.RemoteMediator.InitializeAction[] values();
+ enum_constant public static final androidx.paging.RemoteMediator.InitializeAction LAUNCH_INITIAL_REFRESH;
+ enum_constant public static final androidx.paging.RemoteMediator.InitializeAction SKIP_INITIAL_REFRESH;
+ }
+
+ public abstract static sealed class RemoteMediator.MediatorResult {
+ }
+
+ public static final class RemoteMediator.MediatorResult.Error extends androidx.paging.RemoteMediator.MediatorResult {
+ ctor public RemoteMediator.MediatorResult.Error(Throwable throwable);
+ method public Throwable getThrowable();
+ }
+
+ public static final class RemoteMediator.MediatorResult.Success extends androidx.paging.RemoteMediator.MediatorResult {
+ ctor public RemoteMediator.MediatorResult.Success(boolean endOfPaginationReached);
+ method public boolean endOfPaginationReached();
+ }
+
+ public final class SeparatorsKt {
+ }
+
+}
+
+package androidx.paging.multicast {
+
+ public final class ChannelManagerKt {
+ }
+
+}
+
diff --git a/paging/common/ktx/api/3.0.0-alpha04.txt b/paging/common/ktx/api/3.0.0-alpha04.txt
new file mode 100644
index 0000000..da4f6cc
--- /dev/null
+++ b/paging/common/ktx/api/3.0.0-alpha04.txt
@@ -0,0 +1 @@
+// Signature format: 3.0
diff --git a/paging/common/ktx/api/public_plus_experimental_3.0.0-alpha04.txt b/paging/common/ktx/api/public_plus_experimental_3.0.0-alpha04.txt
new file mode 100644
index 0000000..da4f6cc
--- /dev/null
+++ b/paging/common/ktx/api/public_plus_experimental_3.0.0-alpha04.txt
@@ -0,0 +1 @@
+// Signature format: 3.0
diff --git a/paging/common/ktx/api/restricted_3.0.0-alpha04.txt b/paging/common/ktx/api/restricted_3.0.0-alpha04.txt
new file mode 100644
index 0000000..da4f6cc
--- /dev/null
+++ b/paging/common/ktx/api/restricted_3.0.0-alpha04.txt
@@ -0,0 +1 @@
+// Signature format: 3.0
diff --git a/paging/guava/api/3.0.0-alpha04.txt b/paging/guava/api/3.0.0-alpha04.txt
new file mode 100644
index 0000000..a440d78
--- /dev/null
+++ b/paging/guava/api/3.0.0-alpha04.txt
@@ -0,0 +1,19 @@
+// Signature format: 3.0
+package androidx.paging {
+
+ public abstract class ListenableFuturePagingSource<Key, Value> extends androidx.paging.PagingSource<Key,Value> {
+ ctor public ListenableFuturePagingSource();
+ method public suspend Object? load(androidx.paging.PagingSource.LoadParams<Key> p, kotlin.coroutines.Continuation<? super androidx.paging.PagingSource.LoadResult<Key,Value>> $completion);
+ method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.paging.PagingSource.LoadResult<Key,Value>> loadFuture(androidx.paging.PagingSource.LoadParams<Key> params);
+ }
+
+ @androidx.paging.ExperimentalPagingApi public abstract class ListenableFutureRemoteMediator<Key, Value> extends androidx.paging.RemoteMediator<Key,Value> {
+ ctor public ListenableFutureRemoteMediator();
+ method public final suspend Object? initialize(kotlin.coroutines.Continuation<? super androidx.paging.RemoteMediator.InitializeAction> p);
+ method public com.google.common.util.concurrent.ListenableFuture<androidx.paging.RemoteMediator.InitializeAction> initializeFuture();
+ method public final suspend Object? load(androidx.paging.LoadType loadType, androidx.paging.PagingState<Key,Value> state, kotlin.coroutines.Continuation<? super androidx.paging.RemoteMediator.MediatorResult> p);
+ method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.paging.RemoteMediator.MediatorResult> loadFuture(androidx.paging.LoadType loadType, androidx.paging.PagingState<Key,Value> state);
+ }
+
+}
+
diff --git a/paging/guava/api/public_plus_experimental_3.0.0-alpha04.txt b/paging/guava/api/public_plus_experimental_3.0.0-alpha04.txt
new file mode 100644
index 0000000..a440d78
--- /dev/null
+++ b/paging/guava/api/public_plus_experimental_3.0.0-alpha04.txt
@@ -0,0 +1,19 @@
+// Signature format: 3.0
+package androidx.paging {
+
+ public abstract class ListenableFuturePagingSource<Key, Value> extends androidx.paging.PagingSource<Key,Value> {
+ ctor public ListenableFuturePagingSource();
+ method public suspend Object? load(androidx.paging.PagingSource.LoadParams<Key> p, kotlin.coroutines.Continuation<? super androidx.paging.PagingSource.LoadResult<Key,Value>> $completion);
+ method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.paging.PagingSource.LoadResult<Key,Value>> loadFuture(androidx.paging.PagingSource.LoadParams<Key> params);
+ }
+
+ @androidx.paging.ExperimentalPagingApi public abstract class ListenableFutureRemoteMediator<Key, Value> extends androidx.paging.RemoteMediator<Key,Value> {
+ ctor public ListenableFutureRemoteMediator();
+ method public final suspend Object? initialize(kotlin.coroutines.Continuation<? super androidx.paging.RemoteMediator.InitializeAction> p);
+ method public com.google.common.util.concurrent.ListenableFuture<androidx.paging.RemoteMediator.InitializeAction> initializeFuture();
+ method public final suspend Object? load(androidx.paging.LoadType loadType, androidx.paging.PagingState<Key,Value> state, kotlin.coroutines.Continuation<? super androidx.paging.RemoteMediator.MediatorResult> p);
+ method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.paging.RemoteMediator.MediatorResult> loadFuture(androidx.paging.LoadType loadType, androidx.paging.PagingState<Key,Value> state);
+ }
+
+}
+
diff --git a/paging/guava/api/res-3.0.0-alpha04.txt b/paging/guava/api/res-3.0.0-alpha04.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/paging/guava/api/res-3.0.0-alpha04.txt
diff --git a/paging/guava/api/restricted_3.0.0-alpha04.txt b/paging/guava/api/restricted_3.0.0-alpha04.txt
new file mode 100644
index 0000000..a440d78
--- /dev/null
+++ b/paging/guava/api/restricted_3.0.0-alpha04.txt
@@ -0,0 +1,19 @@
+// Signature format: 3.0
+package androidx.paging {
+
+ public abstract class ListenableFuturePagingSource<Key, Value> extends androidx.paging.PagingSource<Key,Value> {
+ ctor public ListenableFuturePagingSource();
+ method public suspend Object? load(androidx.paging.PagingSource.LoadParams<Key> p, kotlin.coroutines.Continuation<? super androidx.paging.PagingSource.LoadResult<Key,Value>> $completion);
+ method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.paging.PagingSource.LoadResult<Key,Value>> loadFuture(androidx.paging.PagingSource.LoadParams<Key> params);
+ }
+
+ @androidx.paging.ExperimentalPagingApi public abstract class ListenableFutureRemoteMediator<Key, Value> extends androidx.paging.RemoteMediator<Key,Value> {
+ ctor public ListenableFutureRemoteMediator();
+ method public final suspend Object? initialize(kotlin.coroutines.Continuation<? super androidx.paging.RemoteMediator.InitializeAction> p);
+ method public com.google.common.util.concurrent.ListenableFuture<androidx.paging.RemoteMediator.InitializeAction> initializeFuture();
+ method public final suspend Object? load(androidx.paging.LoadType loadType, androidx.paging.PagingState<Key,Value> state, kotlin.coroutines.Continuation<? super androidx.paging.RemoteMediator.MediatorResult> p);
+ method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.paging.RemoteMediator.MediatorResult> loadFuture(androidx.paging.LoadType loadType, androidx.paging.PagingState<Key,Value> state);
+ }
+
+}
+
diff --git a/paging/runtime/api/3.0.0-alpha04.txt b/paging/runtime/api/3.0.0-alpha04.txt
new file mode 100644
index 0000000..072f3457
--- /dev/null
+++ b/paging/runtime/api/3.0.0-alpha04.txt
@@ -0,0 +1,133 @@
+// Signature format: 3.0
+package androidx.paging {
+
+ @Deprecated public class AsyncPagedListDiffer<T> {
+ ctor @Deprecated public AsyncPagedListDiffer(androidx.recyclerview.widget.RecyclerView.Adapter<?> adapter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
+ ctor @Deprecated public AsyncPagedListDiffer(androidx.recyclerview.widget.ListUpdateCallback listUpdateCallback, androidx.recyclerview.widget.AsyncDifferConfig<T> config);
+ method @Deprecated public void addLoadStateListener(kotlin.jvm.functions.Function2<? super androidx.paging.LoadType,? super androidx.paging.LoadState,kotlin.Unit> listener);
+ method @Deprecated public void addPagedListListener(androidx.paging.AsyncPagedListDiffer.PagedListListener<T> listener);
+ method @Deprecated public final void addPagedListListener(kotlin.jvm.functions.Function2<? super androidx.paging.PagedList<T>,? super androidx.paging.PagedList<T>,kotlin.Unit> callback);
+ method @Deprecated public androidx.paging.PagedList<T>? getCurrentList();
+ method @Deprecated public T? getItem(int index);
+ method @Deprecated public int getItemCount();
+ method @Deprecated public void removeLoadStateListener(kotlin.jvm.functions.Function2<? super androidx.paging.LoadType,? super androidx.paging.LoadState,kotlin.Unit> listener);
+ method @Deprecated public void removePagedListListener(androidx.paging.AsyncPagedListDiffer.PagedListListener<T> listener);
+ method @Deprecated public final void removePagedListListener(kotlin.jvm.functions.Function2<? super androidx.paging.PagedList<T>,? super androidx.paging.PagedList<T>,kotlin.Unit> callback);
+ method @Deprecated public void submitList(androidx.paging.PagedList<T>? pagedList);
+ method @Deprecated public void submitList(androidx.paging.PagedList<T>? pagedList, Runnable? commitCallback);
+ property public androidx.paging.PagedList<T>? currentList;
+ property public int itemCount;
+ }
+
+ @Deprecated public static interface AsyncPagedListDiffer.PagedListListener<T> {
+ method @Deprecated public void onCurrentListChanged(androidx.paging.PagedList<T>? previousList, androidx.paging.PagedList<T>? currentList);
+ }
+
+ public final class AsyncPagingDataDiffer<T> {
+ ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher, kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
+ ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+ ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback);
+ method @androidx.paging.ExperimentalPagingApi public void addDataRefreshListener(kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> listener);
+ method public void addLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
+ method public kotlinx.coroutines.flow.Flow<java.lang.Boolean> getDataRefreshFlow();
+ method public T? getItem(int index);
+ method public int getItemCount();
+ method public kotlinx.coroutines.flow.Flow<androidx.paging.CombinedLoadStates> getLoadStateFlow();
+ method public void refresh();
+ method @androidx.paging.ExperimentalPagingApi public void removeDataRefreshListener(kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> listener);
+ method public void removeLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
+ method public void retry();
+ method public suspend Object? submitData(androidx.paging.PagingData<T> pagingData, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
+ method public void submitData(androidx.lifecycle.Lifecycle lifecycle, androidx.paging.PagingData<T> pagingData);
+ property public final kotlinx.coroutines.flow.Flow<java.lang.Boolean> dataRefreshFlow;
+ property public final int itemCount;
+ property public final kotlinx.coroutines.flow.Flow<androidx.paging.CombinedLoadStates> loadStateFlow;
+ }
+
+ @Deprecated public final class LivePagedListBuilder<Key, Value> {
+ ctor @Deprecated public LivePagedListBuilder(androidx.paging.DataSource.Factory<Key,Value> dataSourceFactory, androidx.paging.PagedList.Config config);
+ ctor @Deprecated public LivePagedListBuilder(androidx.paging.DataSource.Factory<Key,Value> dataSourceFactory, int pageSize);
+ ctor @Deprecated public LivePagedListBuilder(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory, androidx.paging.PagedList.Config config);
+ ctor @Deprecated public LivePagedListBuilder(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory, int pageSize);
+ method @Deprecated public androidx.lifecycle.LiveData<androidx.paging.PagedList<Value>> build();
+ method @Deprecated public androidx.paging.LivePagedListBuilder<Key,Value> setBoundaryCallback(androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback);
+ method @Deprecated public androidx.paging.LivePagedListBuilder<Key,Value> setCoroutineScope(kotlinx.coroutines.CoroutineScope coroutineScope);
+ method @Deprecated public androidx.paging.LivePagedListBuilder<Key,Value> setFetchExecutor(java.util.concurrent.Executor fetchExecutor);
+ method @Deprecated public androidx.paging.LivePagedListBuilder<Key,Value> setInitialLoadKey(Key? key);
+ }
+
+ public final class LivePagedListKt {
+ method @Deprecated public static <Key, Value> androidx.lifecycle.LiveData<androidx.paging.PagedList<Value>> toLiveData(androidx.paging.DataSource.Factory<Key,Value>, androidx.paging.PagedList.Config config, Key? initialLoadKey = null, androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback = null, java.util.concurrent.Executor fetchExecutor = ArchTaskExecutor.getIOThreadExecutor());
+ method @Deprecated public static <Key, Value> androidx.lifecycle.LiveData<androidx.paging.PagedList<Value>> toLiveData(androidx.paging.DataSource.Factory<Key,Value>, int pageSize, Key? initialLoadKey = null, androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback = null, java.util.concurrent.Executor fetchExecutor = ArchTaskExecutor.getIOThreadExecutor());
+ method @Deprecated public static <Key, Value> androidx.lifecycle.LiveData<androidx.paging.PagedList<Value>> toLiveData(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>>, androidx.paging.PagedList.Config config, Key? initialLoadKey = null, androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback = null, kotlinx.coroutines.CoroutineScope coroutineScope = GlobalScope, kotlinx.coroutines.CoroutineDispatcher fetchDispatcher = ArchTaskExecutor.getIOThreadExecutor().asCoroutineDispatcher());
+ method @Deprecated public static <Key, Value> androidx.lifecycle.LiveData<androidx.paging.PagedList<Value>> toLiveData(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>>, int pageSize, Key? initialLoadKey = null, androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback = null, kotlinx.coroutines.CoroutineScope coroutineScope = GlobalScope, kotlinx.coroutines.CoroutineDispatcher fetchDispatcher = ArchTaskExecutor.getIOThreadExecutor().asCoroutineDispatcher());
+ }
+
+ public abstract class LoadStateAdapter<VH extends androidx.recyclerview.widget.RecyclerView.ViewHolder> extends androidx.recyclerview.widget.RecyclerView.Adapter<VH> {
+ ctor public LoadStateAdapter();
+ method public boolean displayLoadStateAsItem(androidx.paging.LoadState loadState);
+ method public final int getItemCount();
+ method public final int getItemViewType(int position);
+ method public final androidx.paging.LoadState getLoadState();
+ method public int getStateViewType(androidx.paging.LoadState loadState);
+ method public final void onBindViewHolder(VH holder, int position);
+ method public abstract void onBindViewHolder(VH holder, androidx.paging.LoadState loadState);
+ method public final VH onCreateViewHolder(android.view.ViewGroup parent, int viewType);
+ method public abstract VH onCreateViewHolder(android.view.ViewGroup parent, androidx.paging.LoadState loadState);
+ method public final void setLoadState(androidx.paging.LoadState loadState);
+ property public final androidx.paging.LoadState loadState;
+ }
+
+ public final class NullPaddedListDiffHelperKt {
+ }
+
+ @Deprecated public abstract class PagedListAdapter<T, VH extends androidx.recyclerview.widget.RecyclerView.ViewHolder> extends androidx.recyclerview.widget.RecyclerView.Adapter<VH> {
+ ctor @Deprecated protected PagedListAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
+ ctor @Deprecated protected PagedListAdapter(androidx.recyclerview.widget.AsyncDifferConfig<T> config);
+ method @Deprecated public void addLoadStateListener(kotlin.jvm.functions.Function2<? super androidx.paging.LoadType,? super androidx.paging.LoadState,kotlin.Unit> listener);
+ method @Deprecated public androidx.paging.PagedList<T>? getCurrentList();
+ method @Deprecated protected T? getItem(int position);
+ method @Deprecated public int getItemCount();
+ method @Deprecated public void onCurrentListChanged(androidx.paging.PagedList<T>? currentList);
+ method @Deprecated public void onCurrentListChanged(androidx.paging.PagedList<T>? previousList, androidx.paging.PagedList<T>? currentList);
+ method @Deprecated public void removeLoadStateListener(kotlin.jvm.functions.Function2<? super androidx.paging.LoadType,? super androidx.paging.LoadState,kotlin.Unit> listener);
+ method @Deprecated public void submitList(androidx.paging.PagedList<T>? pagedList);
+ method @Deprecated public void submitList(androidx.paging.PagedList<T>? pagedList, Runnable? commitCallback);
+ method @Deprecated public final androidx.recyclerview.widget.ConcatAdapter withLoadStateFooter(androidx.paging.LoadStateAdapter<?> footer);
+ method @Deprecated public final androidx.recyclerview.widget.ConcatAdapter withLoadStateHeader(androidx.paging.LoadStateAdapter<?> header);
+ method @Deprecated public final androidx.recyclerview.widget.ConcatAdapter withLoadStateHeaderAndFooter(androidx.paging.LoadStateAdapter<?> header, androidx.paging.LoadStateAdapter<?> footer);
+ property public androidx.paging.PagedList<T>? currentList;
+ }
+
+ public abstract class PagingDataAdapter<T, VH extends androidx.recyclerview.widget.RecyclerView.ViewHolder> extends androidx.recyclerview.widget.RecyclerView.Adapter<VH> {
+ ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher, kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
+ ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+ ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
+ method @androidx.paging.ExperimentalPagingApi public final void addDataRefreshListener(kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> listener);
+ method public final void addLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
+ method public final kotlinx.coroutines.flow.Flow<java.lang.Boolean> getDataRefreshFlow();
+ method protected final T? getItem(int position);
+ method public int getItemCount();
+ method public final long getItemId(int position);
+ method public final kotlinx.coroutines.flow.Flow<androidx.paging.CombinedLoadStates> getLoadStateFlow();
+ method public final void refresh();
+ method @androidx.paging.ExperimentalPagingApi public final void removeDataRefreshListener(kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> listener);
+ method public final void removeLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
+ method public final void retry();
+ method public final suspend Object? submitData(androidx.paging.PagingData<T> pagingData, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
+ method public final void submitData(androidx.lifecycle.Lifecycle lifecycle, androidx.paging.PagingData<T> pagingData);
+ method public final androidx.recyclerview.widget.ConcatAdapter withLoadStateFooter(androidx.paging.LoadStateAdapter<?> footer);
+ method public final androidx.recyclerview.widget.ConcatAdapter withLoadStateHeader(androidx.paging.LoadStateAdapter<?> header);
+ method public final androidx.recyclerview.widget.ConcatAdapter withLoadStateHeaderAndFooter(androidx.paging.LoadStateAdapter<?> header, androidx.paging.LoadStateAdapter<?> footer);
+ property public final kotlinx.coroutines.flow.Flow<java.lang.Boolean> dataRefreshFlow;
+ property public final kotlinx.coroutines.flow.Flow<androidx.paging.CombinedLoadStates> loadStateFlow;
+ }
+
+ public final class PagingLiveData {
+ method public static <T> androidx.lifecycle.LiveData<androidx.paging.PagingData<T>> cachedIn(androidx.lifecycle.LiveData<androidx.paging.PagingData<T>>, androidx.lifecycle.Lifecycle lifecycle);
+ method public static <T> androidx.lifecycle.LiveData<androidx.paging.PagingData<T>> cachedIn(androidx.lifecycle.LiveData<androidx.paging.PagingData<T>>, kotlinx.coroutines.CoroutineScope scope);
+ method public static <Key, Value> androidx.lifecycle.LiveData<androidx.paging.PagingData<Value>> getLiveData(androidx.paging.Pager<Key,Value>);
+ }
+
+}
+
diff --git a/paging/runtime/api/public_plus_experimental_3.0.0-alpha04.txt b/paging/runtime/api/public_plus_experimental_3.0.0-alpha04.txt
new file mode 100644
index 0000000..072f3457
--- /dev/null
+++ b/paging/runtime/api/public_plus_experimental_3.0.0-alpha04.txt
@@ -0,0 +1,133 @@
+// Signature format: 3.0
+package androidx.paging {
+
+ @Deprecated public class AsyncPagedListDiffer<T> {
+ ctor @Deprecated public AsyncPagedListDiffer(androidx.recyclerview.widget.RecyclerView.Adapter<?> adapter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
+ ctor @Deprecated public AsyncPagedListDiffer(androidx.recyclerview.widget.ListUpdateCallback listUpdateCallback, androidx.recyclerview.widget.AsyncDifferConfig<T> config);
+ method @Deprecated public void addLoadStateListener(kotlin.jvm.functions.Function2<? super androidx.paging.LoadType,? super androidx.paging.LoadState,kotlin.Unit> listener);
+ method @Deprecated public void addPagedListListener(androidx.paging.AsyncPagedListDiffer.PagedListListener<T> listener);
+ method @Deprecated public final void addPagedListListener(kotlin.jvm.functions.Function2<? super androidx.paging.PagedList<T>,? super androidx.paging.PagedList<T>,kotlin.Unit> callback);
+ method @Deprecated public androidx.paging.PagedList<T>? getCurrentList();
+ method @Deprecated public T? getItem(int index);
+ method @Deprecated public int getItemCount();
+ method @Deprecated public void removeLoadStateListener(kotlin.jvm.functions.Function2<? super androidx.paging.LoadType,? super androidx.paging.LoadState,kotlin.Unit> listener);
+ method @Deprecated public void removePagedListListener(androidx.paging.AsyncPagedListDiffer.PagedListListener<T> listener);
+ method @Deprecated public final void removePagedListListener(kotlin.jvm.functions.Function2<? super androidx.paging.PagedList<T>,? super androidx.paging.PagedList<T>,kotlin.Unit> callback);
+ method @Deprecated public void submitList(androidx.paging.PagedList<T>? pagedList);
+ method @Deprecated public void submitList(androidx.paging.PagedList<T>? pagedList, Runnable? commitCallback);
+ property public androidx.paging.PagedList<T>? currentList;
+ property public int itemCount;
+ }
+
+ @Deprecated public static interface AsyncPagedListDiffer.PagedListListener<T> {
+ method @Deprecated public void onCurrentListChanged(androidx.paging.PagedList<T>? previousList, androidx.paging.PagedList<T>? currentList);
+ }
+
+ public final class AsyncPagingDataDiffer<T> {
+ ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher, kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
+ ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+ ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback);
+ method @androidx.paging.ExperimentalPagingApi public void addDataRefreshListener(kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> listener);
+ method public void addLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
+ method public kotlinx.coroutines.flow.Flow<java.lang.Boolean> getDataRefreshFlow();
+ method public T? getItem(int index);
+ method public int getItemCount();
+ method public kotlinx.coroutines.flow.Flow<androidx.paging.CombinedLoadStates> getLoadStateFlow();
+ method public void refresh();
+ method @androidx.paging.ExperimentalPagingApi public void removeDataRefreshListener(kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> listener);
+ method public void removeLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
+ method public void retry();
+ method public suspend Object? submitData(androidx.paging.PagingData<T> pagingData, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
+ method public void submitData(androidx.lifecycle.Lifecycle lifecycle, androidx.paging.PagingData<T> pagingData);
+ property public final kotlinx.coroutines.flow.Flow<java.lang.Boolean> dataRefreshFlow;
+ property public final int itemCount;
+ property public final kotlinx.coroutines.flow.Flow<androidx.paging.CombinedLoadStates> loadStateFlow;
+ }
+
+ @Deprecated public final class LivePagedListBuilder<Key, Value> {
+ ctor @Deprecated public LivePagedListBuilder(androidx.paging.DataSource.Factory<Key,Value> dataSourceFactory, androidx.paging.PagedList.Config config);
+ ctor @Deprecated public LivePagedListBuilder(androidx.paging.DataSource.Factory<Key,Value> dataSourceFactory, int pageSize);
+ ctor @Deprecated public LivePagedListBuilder(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory, androidx.paging.PagedList.Config config);
+ ctor @Deprecated public LivePagedListBuilder(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory, int pageSize);
+ method @Deprecated public androidx.lifecycle.LiveData<androidx.paging.PagedList<Value>> build();
+ method @Deprecated public androidx.paging.LivePagedListBuilder<Key,Value> setBoundaryCallback(androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback);
+ method @Deprecated public androidx.paging.LivePagedListBuilder<Key,Value> setCoroutineScope(kotlinx.coroutines.CoroutineScope coroutineScope);
+ method @Deprecated public androidx.paging.LivePagedListBuilder<Key,Value> setFetchExecutor(java.util.concurrent.Executor fetchExecutor);
+ method @Deprecated public androidx.paging.LivePagedListBuilder<Key,Value> setInitialLoadKey(Key? key);
+ }
+
+ public final class LivePagedListKt {
+ method @Deprecated public static <Key, Value> androidx.lifecycle.LiveData<androidx.paging.PagedList<Value>> toLiveData(androidx.paging.DataSource.Factory<Key,Value>, androidx.paging.PagedList.Config config, Key? initialLoadKey = null, androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback = null, java.util.concurrent.Executor fetchExecutor = ArchTaskExecutor.getIOThreadExecutor());
+ method @Deprecated public static <Key, Value> androidx.lifecycle.LiveData<androidx.paging.PagedList<Value>> toLiveData(androidx.paging.DataSource.Factory<Key,Value>, int pageSize, Key? initialLoadKey = null, androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback = null, java.util.concurrent.Executor fetchExecutor = ArchTaskExecutor.getIOThreadExecutor());
+ method @Deprecated public static <Key, Value> androidx.lifecycle.LiveData<androidx.paging.PagedList<Value>> toLiveData(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>>, androidx.paging.PagedList.Config config, Key? initialLoadKey = null, androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback = null, kotlinx.coroutines.CoroutineScope coroutineScope = GlobalScope, kotlinx.coroutines.CoroutineDispatcher fetchDispatcher = ArchTaskExecutor.getIOThreadExecutor().asCoroutineDispatcher());
+ method @Deprecated public static <Key, Value> androidx.lifecycle.LiveData<androidx.paging.PagedList<Value>> toLiveData(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>>, int pageSize, Key? initialLoadKey = null, androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback = null, kotlinx.coroutines.CoroutineScope coroutineScope = GlobalScope, kotlinx.coroutines.CoroutineDispatcher fetchDispatcher = ArchTaskExecutor.getIOThreadExecutor().asCoroutineDispatcher());
+ }
+
+ public abstract class LoadStateAdapter<VH extends androidx.recyclerview.widget.RecyclerView.ViewHolder> extends androidx.recyclerview.widget.RecyclerView.Adapter<VH> {
+ ctor public LoadStateAdapter();
+ method public boolean displayLoadStateAsItem(androidx.paging.LoadState loadState);
+ method public final int getItemCount();
+ method public final int getItemViewType(int position);
+ method public final androidx.paging.LoadState getLoadState();
+ method public int getStateViewType(androidx.paging.LoadState loadState);
+ method public final void onBindViewHolder(VH holder, int position);
+ method public abstract void onBindViewHolder(VH holder, androidx.paging.LoadState loadState);
+ method public final VH onCreateViewHolder(android.view.ViewGroup parent, int viewType);
+ method public abstract VH onCreateViewHolder(android.view.ViewGroup parent, androidx.paging.LoadState loadState);
+ method public final void setLoadState(androidx.paging.LoadState loadState);
+ property public final androidx.paging.LoadState loadState;
+ }
+
+ public final class NullPaddedListDiffHelperKt {
+ }
+
+ @Deprecated public abstract class PagedListAdapter<T, VH extends androidx.recyclerview.widget.RecyclerView.ViewHolder> extends androidx.recyclerview.widget.RecyclerView.Adapter<VH> {
+ ctor @Deprecated protected PagedListAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
+ ctor @Deprecated protected PagedListAdapter(androidx.recyclerview.widget.AsyncDifferConfig<T> config);
+ method @Deprecated public void addLoadStateListener(kotlin.jvm.functions.Function2<? super androidx.paging.LoadType,? super androidx.paging.LoadState,kotlin.Unit> listener);
+ method @Deprecated public androidx.paging.PagedList<T>? getCurrentList();
+ method @Deprecated protected T? getItem(int position);
+ method @Deprecated public int getItemCount();
+ method @Deprecated public void onCurrentListChanged(androidx.paging.PagedList<T>? currentList);
+ method @Deprecated public void onCurrentListChanged(androidx.paging.PagedList<T>? previousList, androidx.paging.PagedList<T>? currentList);
+ method @Deprecated public void removeLoadStateListener(kotlin.jvm.functions.Function2<? super androidx.paging.LoadType,? super androidx.paging.LoadState,kotlin.Unit> listener);
+ method @Deprecated public void submitList(androidx.paging.PagedList<T>? pagedList);
+ method @Deprecated public void submitList(androidx.paging.PagedList<T>? pagedList, Runnable? commitCallback);
+ method @Deprecated public final androidx.recyclerview.widget.ConcatAdapter withLoadStateFooter(androidx.paging.LoadStateAdapter<?> footer);
+ method @Deprecated public final androidx.recyclerview.widget.ConcatAdapter withLoadStateHeader(androidx.paging.LoadStateAdapter<?> header);
+ method @Deprecated public final androidx.recyclerview.widget.ConcatAdapter withLoadStateHeaderAndFooter(androidx.paging.LoadStateAdapter<?> header, androidx.paging.LoadStateAdapter<?> footer);
+ property public androidx.paging.PagedList<T>? currentList;
+ }
+
+ public abstract class PagingDataAdapter<T, VH extends androidx.recyclerview.widget.RecyclerView.ViewHolder> extends androidx.recyclerview.widget.RecyclerView.Adapter<VH> {
+ ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher, kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
+ ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+ ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
+ method @androidx.paging.ExperimentalPagingApi public final void addDataRefreshListener(kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> listener);
+ method public final void addLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
+ method public final kotlinx.coroutines.flow.Flow<java.lang.Boolean> getDataRefreshFlow();
+ method protected final T? getItem(int position);
+ method public int getItemCount();
+ method public final long getItemId(int position);
+ method public final kotlinx.coroutines.flow.Flow<androidx.paging.CombinedLoadStates> getLoadStateFlow();
+ method public final void refresh();
+ method @androidx.paging.ExperimentalPagingApi public final void removeDataRefreshListener(kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> listener);
+ method public final void removeLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
+ method public final void retry();
+ method public final suspend Object? submitData(androidx.paging.PagingData<T> pagingData, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
+ method public final void submitData(androidx.lifecycle.Lifecycle lifecycle, androidx.paging.PagingData<T> pagingData);
+ method public final androidx.recyclerview.widget.ConcatAdapter withLoadStateFooter(androidx.paging.LoadStateAdapter<?> footer);
+ method public final androidx.recyclerview.widget.ConcatAdapter withLoadStateHeader(androidx.paging.LoadStateAdapter<?> header);
+ method public final androidx.recyclerview.widget.ConcatAdapter withLoadStateHeaderAndFooter(androidx.paging.LoadStateAdapter<?> header, androidx.paging.LoadStateAdapter<?> footer);
+ property public final kotlinx.coroutines.flow.Flow<java.lang.Boolean> dataRefreshFlow;
+ property public final kotlinx.coroutines.flow.Flow<androidx.paging.CombinedLoadStates> loadStateFlow;
+ }
+
+ public final class PagingLiveData {
+ method public static <T> androidx.lifecycle.LiveData<androidx.paging.PagingData<T>> cachedIn(androidx.lifecycle.LiveData<androidx.paging.PagingData<T>>, androidx.lifecycle.Lifecycle lifecycle);
+ method public static <T> androidx.lifecycle.LiveData<androidx.paging.PagingData<T>> cachedIn(androidx.lifecycle.LiveData<androidx.paging.PagingData<T>>, kotlinx.coroutines.CoroutineScope scope);
+ method public static <Key, Value> androidx.lifecycle.LiveData<androidx.paging.PagingData<Value>> getLiveData(androidx.paging.Pager<Key,Value>);
+ }
+
+}
+
diff --git a/paging/runtime/api/res-3.0.0-alpha04.txt b/paging/runtime/api/res-3.0.0-alpha04.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/paging/runtime/api/res-3.0.0-alpha04.txt
diff --git a/paging/runtime/api/restricted_3.0.0-alpha04.txt b/paging/runtime/api/restricted_3.0.0-alpha04.txt
new file mode 100644
index 0000000..072f3457
--- /dev/null
+++ b/paging/runtime/api/restricted_3.0.0-alpha04.txt
@@ -0,0 +1,133 @@
+// Signature format: 3.0
+package androidx.paging {
+
+ @Deprecated public class AsyncPagedListDiffer<T> {
+ ctor @Deprecated public AsyncPagedListDiffer(androidx.recyclerview.widget.RecyclerView.Adapter<?> adapter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
+ ctor @Deprecated public AsyncPagedListDiffer(androidx.recyclerview.widget.ListUpdateCallback listUpdateCallback, androidx.recyclerview.widget.AsyncDifferConfig<T> config);
+ method @Deprecated public void addLoadStateListener(kotlin.jvm.functions.Function2<? super androidx.paging.LoadType,? super androidx.paging.LoadState,kotlin.Unit> listener);
+ method @Deprecated public void addPagedListListener(androidx.paging.AsyncPagedListDiffer.PagedListListener<T> listener);
+ method @Deprecated public final void addPagedListListener(kotlin.jvm.functions.Function2<? super androidx.paging.PagedList<T>,? super androidx.paging.PagedList<T>,kotlin.Unit> callback);
+ method @Deprecated public androidx.paging.PagedList<T>? getCurrentList();
+ method @Deprecated public T? getItem(int index);
+ method @Deprecated public int getItemCount();
+ method @Deprecated public void removeLoadStateListener(kotlin.jvm.functions.Function2<? super androidx.paging.LoadType,? super androidx.paging.LoadState,kotlin.Unit> listener);
+ method @Deprecated public void removePagedListListener(androidx.paging.AsyncPagedListDiffer.PagedListListener<T> listener);
+ method @Deprecated public final void removePagedListListener(kotlin.jvm.functions.Function2<? super androidx.paging.PagedList<T>,? super androidx.paging.PagedList<T>,kotlin.Unit> callback);
+ method @Deprecated public void submitList(androidx.paging.PagedList<T>? pagedList);
+ method @Deprecated public void submitList(androidx.paging.PagedList<T>? pagedList, Runnable? commitCallback);
+ property public androidx.paging.PagedList<T>? currentList;
+ property public int itemCount;
+ }
+
+ @Deprecated public static interface AsyncPagedListDiffer.PagedListListener<T> {
+ method @Deprecated public void onCurrentListChanged(androidx.paging.PagedList<T>? previousList, androidx.paging.PagedList<T>? currentList);
+ }
+
+ public final class AsyncPagingDataDiffer<T> {
+ ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher, kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
+ ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+ ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback);
+ method @androidx.paging.ExperimentalPagingApi public void addDataRefreshListener(kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> listener);
+ method public void addLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
+ method public kotlinx.coroutines.flow.Flow<java.lang.Boolean> getDataRefreshFlow();
+ method public T? getItem(int index);
+ method public int getItemCount();
+ method public kotlinx.coroutines.flow.Flow<androidx.paging.CombinedLoadStates> getLoadStateFlow();
+ method public void refresh();
+ method @androidx.paging.ExperimentalPagingApi public void removeDataRefreshListener(kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> listener);
+ method public void removeLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
+ method public void retry();
+ method public suspend Object? submitData(androidx.paging.PagingData<T> pagingData, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
+ method public void submitData(androidx.lifecycle.Lifecycle lifecycle, androidx.paging.PagingData<T> pagingData);
+ property public final kotlinx.coroutines.flow.Flow<java.lang.Boolean> dataRefreshFlow;
+ property public final int itemCount;
+ property public final kotlinx.coroutines.flow.Flow<androidx.paging.CombinedLoadStates> loadStateFlow;
+ }
+
+ @Deprecated public final class LivePagedListBuilder<Key, Value> {
+ ctor @Deprecated public LivePagedListBuilder(androidx.paging.DataSource.Factory<Key,Value> dataSourceFactory, androidx.paging.PagedList.Config config);
+ ctor @Deprecated public LivePagedListBuilder(androidx.paging.DataSource.Factory<Key,Value> dataSourceFactory, int pageSize);
+ ctor @Deprecated public LivePagedListBuilder(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory, androidx.paging.PagedList.Config config);
+ ctor @Deprecated public LivePagedListBuilder(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory, int pageSize);
+ method @Deprecated public androidx.lifecycle.LiveData<androidx.paging.PagedList<Value>> build();
+ method @Deprecated public androidx.paging.LivePagedListBuilder<Key,Value> setBoundaryCallback(androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback);
+ method @Deprecated public androidx.paging.LivePagedListBuilder<Key,Value> setCoroutineScope(kotlinx.coroutines.CoroutineScope coroutineScope);
+ method @Deprecated public androidx.paging.LivePagedListBuilder<Key,Value> setFetchExecutor(java.util.concurrent.Executor fetchExecutor);
+ method @Deprecated public androidx.paging.LivePagedListBuilder<Key,Value> setInitialLoadKey(Key? key);
+ }
+
+ public final class LivePagedListKt {
+ method @Deprecated public static <Key, Value> androidx.lifecycle.LiveData<androidx.paging.PagedList<Value>> toLiveData(androidx.paging.DataSource.Factory<Key,Value>, androidx.paging.PagedList.Config config, Key? initialLoadKey = null, androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback = null, java.util.concurrent.Executor fetchExecutor = ArchTaskExecutor.getIOThreadExecutor());
+ method @Deprecated public static <Key, Value> androidx.lifecycle.LiveData<androidx.paging.PagedList<Value>> toLiveData(androidx.paging.DataSource.Factory<Key,Value>, int pageSize, Key? initialLoadKey = null, androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback = null, java.util.concurrent.Executor fetchExecutor = ArchTaskExecutor.getIOThreadExecutor());
+ method @Deprecated public static <Key, Value> androidx.lifecycle.LiveData<androidx.paging.PagedList<Value>> toLiveData(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>>, androidx.paging.PagedList.Config config, Key? initialLoadKey = null, androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback = null, kotlinx.coroutines.CoroutineScope coroutineScope = GlobalScope, kotlinx.coroutines.CoroutineDispatcher fetchDispatcher = ArchTaskExecutor.getIOThreadExecutor().asCoroutineDispatcher());
+ method @Deprecated public static <Key, Value> androidx.lifecycle.LiveData<androidx.paging.PagedList<Value>> toLiveData(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>>, int pageSize, Key? initialLoadKey = null, androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback = null, kotlinx.coroutines.CoroutineScope coroutineScope = GlobalScope, kotlinx.coroutines.CoroutineDispatcher fetchDispatcher = ArchTaskExecutor.getIOThreadExecutor().asCoroutineDispatcher());
+ }
+
+ public abstract class LoadStateAdapter<VH extends androidx.recyclerview.widget.RecyclerView.ViewHolder> extends androidx.recyclerview.widget.RecyclerView.Adapter<VH> {
+ ctor public LoadStateAdapter();
+ method public boolean displayLoadStateAsItem(androidx.paging.LoadState loadState);
+ method public final int getItemCount();
+ method public final int getItemViewType(int position);
+ method public final androidx.paging.LoadState getLoadState();
+ method public int getStateViewType(androidx.paging.LoadState loadState);
+ method public final void onBindViewHolder(VH holder, int position);
+ method public abstract void onBindViewHolder(VH holder, androidx.paging.LoadState loadState);
+ method public final VH onCreateViewHolder(android.view.ViewGroup parent, int viewType);
+ method public abstract VH onCreateViewHolder(android.view.ViewGroup parent, androidx.paging.LoadState loadState);
+ method public final void setLoadState(androidx.paging.LoadState loadState);
+ property public final androidx.paging.LoadState loadState;
+ }
+
+ public final class NullPaddedListDiffHelperKt {
+ }
+
+ @Deprecated public abstract class PagedListAdapter<T, VH extends androidx.recyclerview.widget.RecyclerView.ViewHolder> extends androidx.recyclerview.widget.RecyclerView.Adapter<VH> {
+ ctor @Deprecated protected PagedListAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
+ ctor @Deprecated protected PagedListAdapter(androidx.recyclerview.widget.AsyncDifferConfig<T> config);
+ method @Deprecated public void addLoadStateListener(kotlin.jvm.functions.Function2<? super androidx.paging.LoadType,? super androidx.paging.LoadState,kotlin.Unit> listener);
+ method @Deprecated public androidx.paging.PagedList<T>? getCurrentList();
+ method @Deprecated protected T? getItem(int position);
+ method @Deprecated public int getItemCount();
+ method @Deprecated public void onCurrentListChanged(androidx.paging.PagedList<T>? currentList);
+ method @Deprecated public void onCurrentListChanged(androidx.paging.PagedList<T>? previousList, androidx.paging.PagedList<T>? currentList);
+ method @Deprecated public void removeLoadStateListener(kotlin.jvm.functions.Function2<? super androidx.paging.LoadType,? super androidx.paging.LoadState,kotlin.Unit> listener);
+ method @Deprecated public void submitList(androidx.paging.PagedList<T>? pagedList);
+ method @Deprecated public void submitList(androidx.paging.PagedList<T>? pagedList, Runnable? commitCallback);
+ method @Deprecated public final androidx.recyclerview.widget.ConcatAdapter withLoadStateFooter(androidx.paging.LoadStateAdapter<?> footer);
+ method @Deprecated public final androidx.recyclerview.widget.ConcatAdapter withLoadStateHeader(androidx.paging.LoadStateAdapter<?> header);
+ method @Deprecated public final androidx.recyclerview.widget.ConcatAdapter withLoadStateHeaderAndFooter(androidx.paging.LoadStateAdapter<?> header, androidx.paging.LoadStateAdapter<?> footer);
+ property public androidx.paging.PagedList<T>? currentList;
+ }
+
+ public abstract class PagingDataAdapter<T, VH extends androidx.recyclerview.widget.RecyclerView.ViewHolder> extends androidx.recyclerview.widget.RecyclerView.Adapter<VH> {
+ ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher, kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
+ ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+ ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
+ method @androidx.paging.ExperimentalPagingApi public final void addDataRefreshListener(kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> listener);
+ method public final void addLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
+ method public final kotlinx.coroutines.flow.Flow<java.lang.Boolean> getDataRefreshFlow();
+ method protected final T? getItem(int position);
+ method public int getItemCount();
+ method public final long getItemId(int position);
+ method public final kotlinx.coroutines.flow.Flow<androidx.paging.CombinedLoadStates> getLoadStateFlow();
+ method public final void refresh();
+ method @androidx.paging.ExperimentalPagingApi public final void removeDataRefreshListener(kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> listener);
+ method public final void removeLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
+ method public final void retry();
+ method public final suspend Object? submitData(androidx.paging.PagingData<T> pagingData, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
+ method public final void submitData(androidx.lifecycle.Lifecycle lifecycle, androidx.paging.PagingData<T> pagingData);
+ method public final androidx.recyclerview.widget.ConcatAdapter withLoadStateFooter(androidx.paging.LoadStateAdapter<?> footer);
+ method public final androidx.recyclerview.widget.ConcatAdapter withLoadStateHeader(androidx.paging.LoadStateAdapter<?> header);
+ method public final androidx.recyclerview.widget.ConcatAdapter withLoadStateHeaderAndFooter(androidx.paging.LoadStateAdapter<?> header, androidx.paging.LoadStateAdapter<?> footer);
+ property public final kotlinx.coroutines.flow.Flow<java.lang.Boolean> dataRefreshFlow;
+ property public final kotlinx.coroutines.flow.Flow<androidx.paging.CombinedLoadStates> loadStateFlow;
+ }
+
+ public final class PagingLiveData {
+ method public static <T> androidx.lifecycle.LiveData<androidx.paging.PagingData<T>> cachedIn(androidx.lifecycle.LiveData<androidx.paging.PagingData<T>>, androidx.lifecycle.Lifecycle lifecycle);
+ method public static <T> androidx.lifecycle.LiveData<androidx.paging.PagingData<T>> cachedIn(androidx.lifecycle.LiveData<androidx.paging.PagingData<T>>, kotlinx.coroutines.CoroutineScope scope);
+ method public static <Key, Value> androidx.lifecycle.LiveData<androidx.paging.PagingData<Value>> getLiveData(androidx.paging.Pager<Key,Value>);
+ }
+
+}
+
diff --git a/paging/runtime/ktx/api/3.0.0-alpha04.txt b/paging/runtime/ktx/api/3.0.0-alpha04.txt
new file mode 100644
index 0000000..da4f6cc
--- /dev/null
+++ b/paging/runtime/ktx/api/3.0.0-alpha04.txt
@@ -0,0 +1 @@
+// Signature format: 3.0
diff --git a/paging/runtime/ktx/api/public_plus_experimental_3.0.0-alpha04.txt b/paging/runtime/ktx/api/public_plus_experimental_3.0.0-alpha04.txt
new file mode 100644
index 0000000..da4f6cc
--- /dev/null
+++ b/paging/runtime/ktx/api/public_plus_experimental_3.0.0-alpha04.txt
@@ -0,0 +1 @@
+// Signature format: 3.0
diff --git a/paging/runtime/ktx/api/res-3.0.0-alpha04.txt b/paging/runtime/ktx/api/res-3.0.0-alpha04.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/paging/runtime/ktx/api/res-3.0.0-alpha04.txt
diff --git a/paging/runtime/ktx/api/restricted_3.0.0-alpha04.txt b/paging/runtime/ktx/api/restricted_3.0.0-alpha04.txt
new file mode 100644
index 0000000..da4f6cc
--- /dev/null
+++ b/paging/runtime/ktx/api/restricted_3.0.0-alpha04.txt
@@ -0,0 +1 @@
+// Signature format: 3.0
diff --git a/paging/rxjava2/api/3.0.0-alpha04.txt b/paging/rxjava2/api/3.0.0-alpha04.txt
new file mode 100644
index 0000000..4923f87
--- /dev/null
+++ b/paging/rxjava2/api/3.0.0-alpha04.txt
@@ -0,0 +1,54 @@
+// Signature format: 3.0
+package androidx.paging {
+
+ @Deprecated public final class RxPagedListBuilder<Key, Value> {
+ ctor @Deprecated public RxPagedListBuilder(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory, androidx.paging.PagedList.Config config);
+ ctor @Deprecated public RxPagedListBuilder(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory, int pageSize);
+ ctor @Deprecated public RxPagedListBuilder(androidx.paging.DataSource.Factory<Key,Value> dataSourceFactory, androidx.paging.PagedList.Config config);
+ ctor @Deprecated public RxPagedListBuilder(androidx.paging.DataSource.Factory<Key,Value> dataSourceFactory, int pageSize);
+ method @Deprecated public io.reactivex.Flowable<androidx.paging.PagedList<Value>> buildFlowable(io.reactivex.BackpressureStrategy backpressureStrategy);
+ method @Deprecated public io.reactivex.Observable<androidx.paging.PagedList<Value>> buildObservable();
+ method @Deprecated public androidx.paging.RxPagedListBuilder<Key,Value> setBoundaryCallback(androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback);
+ method @Deprecated public androidx.paging.RxPagedListBuilder<Key,Value> setFetchScheduler(io.reactivex.Scheduler scheduler);
+ method @Deprecated public androidx.paging.RxPagedListBuilder<Key,Value> setInitialLoadKey(Key? key);
+ method @Deprecated public androidx.paging.RxPagedListBuilder<Key,Value> setNotifyScheduler(io.reactivex.Scheduler scheduler);
+ }
+
+ public final class RxPagedListKt {
+ method @Deprecated public static <Key, Value> io.reactivex.Flowable<androidx.paging.PagedList<Value>> toFlowable(androidx.paging.DataSource.Factory<Key,Value>, androidx.paging.PagedList.Config config, Key? initialLoadKey = null, androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback = null, io.reactivex.Scheduler? fetchScheduler = null, io.reactivex.Scheduler? notifyScheduler = null, io.reactivex.BackpressureStrategy backpressureStrategy = io.reactivex.BackpressureStrategy.LATEST);
+ method @Deprecated public static <Key, Value> io.reactivex.Flowable<androidx.paging.PagedList<Value>> toFlowable(androidx.paging.DataSource.Factory<Key,Value>, int pageSize, Key? initialLoadKey = null, androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback = null, io.reactivex.Scheduler? fetchScheduler = null, io.reactivex.Scheduler? notifyScheduler = null, io.reactivex.BackpressureStrategy backpressureStrategy = io.reactivex.BackpressureStrategy.LATEST);
+ method @Deprecated public static <Key, Value> io.reactivex.Flowable<androidx.paging.PagedList<Value>> toFlowable(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>>, androidx.paging.PagedList.Config config, Key? initialLoadKey = null, androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback = null, io.reactivex.Scheduler? fetchScheduler = null, io.reactivex.Scheduler? notifyScheduler = null, io.reactivex.BackpressureStrategy backpressureStrategy = io.reactivex.BackpressureStrategy.LATEST);
+ method @Deprecated public static <Key, Value> io.reactivex.Flowable<androidx.paging.PagedList<Value>> toFlowable(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>>, int pageSize, Key? initialLoadKey = null, androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback = null, io.reactivex.Scheduler? fetchScheduler = null, io.reactivex.Scheduler? notifyScheduler = null, io.reactivex.BackpressureStrategy backpressureStrategy = io.reactivex.BackpressureStrategy.LATEST);
+ method @Deprecated public static <Key, Value> io.reactivex.Observable<androidx.paging.PagedList<Value>> toObservable(androidx.paging.DataSource.Factory<Key,Value>, androidx.paging.PagedList.Config config, Key? initialLoadKey = null, androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback = null, io.reactivex.Scheduler? fetchScheduler = null, io.reactivex.Scheduler? notifyScheduler = null);
+ method @Deprecated public static <Key, Value> io.reactivex.Observable<androidx.paging.PagedList<Value>> toObservable(androidx.paging.DataSource.Factory<Key,Value>, int pageSize, Key? initialLoadKey = null, androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback = null, io.reactivex.Scheduler? fetchScheduler = null, io.reactivex.Scheduler? notifyScheduler = null);
+ method @Deprecated public static <Key, Value> io.reactivex.Observable<androidx.paging.PagedList<Value>> toObservable(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>>, androidx.paging.PagedList.Config config, Key? initialLoadKey = null, androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback = null, io.reactivex.Scheduler? fetchScheduler = null, io.reactivex.Scheduler? notifyScheduler = null);
+ method @Deprecated public static <Key, Value> io.reactivex.Observable<androidx.paging.PagedList<Value>> toObservable(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>>, int pageSize, Key? initialLoadKey = null, androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback = null, io.reactivex.Scheduler? fetchScheduler = null, io.reactivex.Scheduler? notifyScheduler = null);
+ }
+
+}
+
+package androidx.paging.rxjava2 {
+
+ public final class PagingRx {
+ method public static <T> io.reactivex.Observable<androidx.paging.PagingData<T>> cachedIn(io.reactivex.Observable<androidx.paging.PagingData<T>>, kotlinx.coroutines.CoroutineScope scope);
+ method public static <T> io.reactivex.Flowable<androidx.paging.PagingData<T>> cachedIn(io.reactivex.Flowable<androidx.paging.PagingData<T>>, kotlinx.coroutines.CoroutineScope scope);
+ method public static <Key, Value> io.reactivex.Flowable<androidx.paging.PagingData<Value>> getFlowable(androidx.paging.Pager<Key,Value>);
+ method public static <Key, Value> io.reactivex.Observable<androidx.paging.PagingData<Value>> getObservable(androidx.paging.Pager<Key,Value>);
+ }
+
+ public abstract class RxPagingSource<Key, Value> extends androidx.paging.PagingSource<Key,Value> {
+ ctor public RxPagingSource();
+ method public final suspend Object? load(androidx.paging.PagingSource.LoadParams<Key> params, kotlin.coroutines.Continuation<? super androidx.paging.PagingSource.LoadResult<Key,Value>> p);
+ method public abstract io.reactivex.Single<androidx.paging.PagingSource.LoadResult<Key,Value>> loadSingle(androidx.paging.PagingSource.LoadParams<Key> params);
+ }
+
+ @androidx.paging.ExperimentalPagingApi public abstract class RxRemoteMediator<Key, Value> extends androidx.paging.RemoteMediator<Key,Value> {
+ ctor public RxRemoteMediator();
+ method public final suspend Object? initialize(kotlin.coroutines.Continuation<? super androidx.paging.RemoteMediator.InitializeAction> p);
+ method public io.reactivex.Single<androidx.paging.RemoteMediator.InitializeAction> initializeSingle();
+ method public final suspend Object? load(androidx.paging.LoadType loadType, androidx.paging.PagingState<Key,Value> state, kotlin.coroutines.Continuation<? super androidx.paging.RemoteMediator.MediatorResult> p);
+ method public abstract io.reactivex.Single<androidx.paging.RemoteMediator.MediatorResult> loadSingle(androidx.paging.LoadType loadType, androidx.paging.PagingState<Key,Value> state);
+ }
+
+}
+
diff --git a/paging/rxjava2/api/public_plus_experimental_3.0.0-alpha04.txt b/paging/rxjava2/api/public_plus_experimental_3.0.0-alpha04.txt
new file mode 100644
index 0000000..4923f87
--- /dev/null
+++ b/paging/rxjava2/api/public_plus_experimental_3.0.0-alpha04.txt
@@ -0,0 +1,54 @@
+// Signature format: 3.0
+package androidx.paging {
+
+ @Deprecated public final class RxPagedListBuilder<Key, Value> {
+ ctor @Deprecated public RxPagedListBuilder(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory, androidx.paging.PagedList.Config config);
+ ctor @Deprecated public RxPagedListBuilder(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory, int pageSize);
+ ctor @Deprecated public RxPagedListBuilder(androidx.paging.DataSource.Factory<Key,Value> dataSourceFactory, androidx.paging.PagedList.Config config);
+ ctor @Deprecated public RxPagedListBuilder(androidx.paging.DataSource.Factory<Key,Value> dataSourceFactory, int pageSize);
+ method @Deprecated public io.reactivex.Flowable<androidx.paging.PagedList<Value>> buildFlowable(io.reactivex.BackpressureStrategy backpressureStrategy);
+ method @Deprecated public io.reactivex.Observable<androidx.paging.PagedList<Value>> buildObservable();
+ method @Deprecated public androidx.paging.RxPagedListBuilder<Key,Value> setBoundaryCallback(androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback);
+ method @Deprecated public androidx.paging.RxPagedListBuilder<Key,Value> setFetchScheduler(io.reactivex.Scheduler scheduler);
+ method @Deprecated public androidx.paging.RxPagedListBuilder<Key,Value> setInitialLoadKey(Key? key);
+ method @Deprecated public androidx.paging.RxPagedListBuilder<Key,Value> setNotifyScheduler(io.reactivex.Scheduler scheduler);
+ }
+
+ public final class RxPagedListKt {
+ method @Deprecated public static <Key, Value> io.reactivex.Flowable<androidx.paging.PagedList<Value>> toFlowable(androidx.paging.DataSource.Factory<Key,Value>, androidx.paging.PagedList.Config config, Key? initialLoadKey = null, androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback = null, io.reactivex.Scheduler? fetchScheduler = null, io.reactivex.Scheduler? notifyScheduler = null, io.reactivex.BackpressureStrategy backpressureStrategy = io.reactivex.BackpressureStrategy.LATEST);
+ method @Deprecated public static <Key, Value> io.reactivex.Flowable<androidx.paging.PagedList<Value>> toFlowable(androidx.paging.DataSource.Factory<Key,Value>, int pageSize, Key? initialLoadKey = null, androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback = null, io.reactivex.Scheduler? fetchScheduler = null, io.reactivex.Scheduler? notifyScheduler = null, io.reactivex.BackpressureStrategy backpressureStrategy = io.reactivex.BackpressureStrategy.LATEST);
+ method @Deprecated public static <Key, Value> io.reactivex.Flowable<androidx.paging.PagedList<Value>> toFlowable(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>>, androidx.paging.PagedList.Config config, Key? initialLoadKey = null, androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback = null, io.reactivex.Scheduler? fetchScheduler = null, io.reactivex.Scheduler? notifyScheduler = null, io.reactivex.BackpressureStrategy backpressureStrategy = io.reactivex.BackpressureStrategy.LATEST);
+ method @Deprecated public static <Key, Value> io.reactivex.Flowable<androidx.paging.PagedList<Value>> toFlowable(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>>, int pageSize, Key? initialLoadKey = null, androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback = null, io.reactivex.Scheduler? fetchScheduler = null, io.reactivex.Scheduler? notifyScheduler = null, io.reactivex.BackpressureStrategy backpressureStrategy = io.reactivex.BackpressureStrategy.LATEST);
+ method @Deprecated public static <Key, Value> io.reactivex.Observable<androidx.paging.PagedList<Value>> toObservable(androidx.paging.DataSource.Factory<Key,Value>, androidx.paging.PagedList.Config config, Key? initialLoadKey = null, androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback = null, io.reactivex.Scheduler? fetchScheduler = null, io.reactivex.Scheduler? notifyScheduler = null);
+ method @Deprecated public static <Key, Value> io.reactivex.Observable<androidx.paging.PagedList<Value>> toObservable(androidx.paging.DataSource.Factory<Key,Value>, int pageSize, Key? initialLoadKey = null, androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback = null, io.reactivex.Scheduler? fetchScheduler = null, io.reactivex.Scheduler? notifyScheduler = null);
+ method @Deprecated public static <Key, Value> io.reactivex.Observable<androidx.paging.PagedList<Value>> toObservable(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>>, androidx.paging.PagedList.Config config, Key? initialLoadKey = null, androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback = null, io.reactivex.Scheduler? fetchScheduler = null, io.reactivex.Scheduler? notifyScheduler = null);
+ method @Deprecated public static <Key, Value> io.reactivex.Observable<androidx.paging.PagedList<Value>> toObservable(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>>, int pageSize, Key? initialLoadKey = null, androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback = null, io.reactivex.Scheduler? fetchScheduler = null, io.reactivex.Scheduler? notifyScheduler = null);
+ }
+
+}
+
+package androidx.paging.rxjava2 {
+
+ public final class PagingRx {
+ method public static <T> io.reactivex.Observable<androidx.paging.PagingData<T>> cachedIn(io.reactivex.Observable<androidx.paging.PagingData<T>>, kotlinx.coroutines.CoroutineScope scope);
+ method public static <T> io.reactivex.Flowable<androidx.paging.PagingData<T>> cachedIn(io.reactivex.Flowable<androidx.paging.PagingData<T>>, kotlinx.coroutines.CoroutineScope scope);
+ method public static <Key, Value> io.reactivex.Flowable<androidx.paging.PagingData<Value>> getFlowable(androidx.paging.Pager<Key,Value>);
+ method public static <Key, Value> io.reactivex.Observable<androidx.paging.PagingData<Value>> getObservable(androidx.paging.Pager<Key,Value>);
+ }
+
+ public abstract class RxPagingSource<Key, Value> extends androidx.paging.PagingSource<Key,Value> {
+ ctor public RxPagingSource();
+ method public final suspend Object? load(androidx.paging.PagingSource.LoadParams<Key> params, kotlin.coroutines.Continuation<? super androidx.paging.PagingSource.LoadResult<Key,Value>> p);
+ method public abstract io.reactivex.Single<androidx.paging.PagingSource.LoadResult<Key,Value>> loadSingle(androidx.paging.PagingSource.LoadParams<Key> params);
+ }
+
+ @androidx.paging.ExperimentalPagingApi public abstract class RxRemoteMediator<Key, Value> extends androidx.paging.RemoteMediator<Key,Value> {
+ ctor public RxRemoteMediator();
+ method public final suspend Object? initialize(kotlin.coroutines.Continuation<? super androidx.paging.RemoteMediator.InitializeAction> p);
+ method public io.reactivex.Single<androidx.paging.RemoteMediator.InitializeAction> initializeSingle();
+ method public final suspend Object? load(androidx.paging.LoadType loadType, androidx.paging.PagingState<Key,Value> state, kotlin.coroutines.Continuation<? super androidx.paging.RemoteMediator.MediatorResult> p);
+ method public abstract io.reactivex.Single<androidx.paging.RemoteMediator.MediatorResult> loadSingle(androidx.paging.LoadType loadType, androidx.paging.PagingState<Key,Value> state);
+ }
+
+}
+
diff --git a/paging/rxjava2/api/res-3.0.0-alpha04.txt b/paging/rxjava2/api/res-3.0.0-alpha04.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/paging/rxjava2/api/res-3.0.0-alpha04.txt
diff --git a/paging/rxjava2/api/restricted_3.0.0-alpha04.txt b/paging/rxjava2/api/restricted_3.0.0-alpha04.txt
new file mode 100644
index 0000000..4923f87
--- /dev/null
+++ b/paging/rxjava2/api/restricted_3.0.0-alpha04.txt
@@ -0,0 +1,54 @@
+// Signature format: 3.0
+package androidx.paging {
+
+ @Deprecated public final class RxPagedListBuilder<Key, Value> {
+ ctor @Deprecated public RxPagedListBuilder(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory, androidx.paging.PagedList.Config config);
+ ctor @Deprecated public RxPagedListBuilder(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory, int pageSize);
+ ctor @Deprecated public RxPagedListBuilder(androidx.paging.DataSource.Factory<Key,Value> dataSourceFactory, androidx.paging.PagedList.Config config);
+ ctor @Deprecated public RxPagedListBuilder(androidx.paging.DataSource.Factory<Key,Value> dataSourceFactory, int pageSize);
+ method @Deprecated public io.reactivex.Flowable<androidx.paging.PagedList<Value>> buildFlowable(io.reactivex.BackpressureStrategy backpressureStrategy);
+ method @Deprecated public io.reactivex.Observable<androidx.paging.PagedList<Value>> buildObservable();
+ method @Deprecated public androidx.paging.RxPagedListBuilder<Key,Value> setBoundaryCallback(androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback);
+ method @Deprecated public androidx.paging.RxPagedListBuilder<Key,Value> setFetchScheduler(io.reactivex.Scheduler scheduler);
+ method @Deprecated public androidx.paging.RxPagedListBuilder<Key,Value> setInitialLoadKey(Key? key);
+ method @Deprecated public androidx.paging.RxPagedListBuilder<Key,Value> setNotifyScheduler(io.reactivex.Scheduler scheduler);
+ }
+
+ public final class RxPagedListKt {
+ method @Deprecated public static <Key, Value> io.reactivex.Flowable<androidx.paging.PagedList<Value>> toFlowable(androidx.paging.DataSource.Factory<Key,Value>, androidx.paging.PagedList.Config config, Key? initialLoadKey = null, androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback = null, io.reactivex.Scheduler? fetchScheduler = null, io.reactivex.Scheduler? notifyScheduler = null, io.reactivex.BackpressureStrategy backpressureStrategy = io.reactivex.BackpressureStrategy.LATEST);
+ method @Deprecated public static <Key, Value> io.reactivex.Flowable<androidx.paging.PagedList<Value>> toFlowable(androidx.paging.DataSource.Factory<Key,Value>, int pageSize, Key? initialLoadKey = null, androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback = null, io.reactivex.Scheduler? fetchScheduler = null, io.reactivex.Scheduler? notifyScheduler = null, io.reactivex.BackpressureStrategy backpressureStrategy = io.reactivex.BackpressureStrategy.LATEST);
+ method @Deprecated public static <Key, Value> io.reactivex.Flowable<androidx.paging.PagedList<Value>> toFlowable(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>>, androidx.paging.PagedList.Config config, Key? initialLoadKey = null, androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback = null, io.reactivex.Scheduler? fetchScheduler = null, io.reactivex.Scheduler? notifyScheduler = null, io.reactivex.BackpressureStrategy backpressureStrategy = io.reactivex.BackpressureStrategy.LATEST);
+ method @Deprecated public static <Key, Value> io.reactivex.Flowable<androidx.paging.PagedList<Value>> toFlowable(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>>, int pageSize, Key? initialLoadKey = null, androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback = null, io.reactivex.Scheduler? fetchScheduler = null, io.reactivex.Scheduler? notifyScheduler = null, io.reactivex.BackpressureStrategy backpressureStrategy = io.reactivex.BackpressureStrategy.LATEST);
+ method @Deprecated public static <Key, Value> io.reactivex.Observable<androidx.paging.PagedList<Value>> toObservable(androidx.paging.DataSource.Factory<Key,Value>, androidx.paging.PagedList.Config config, Key? initialLoadKey = null, androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback = null, io.reactivex.Scheduler? fetchScheduler = null, io.reactivex.Scheduler? notifyScheduler = null);
+ method @Deprecated public static <Key, Value> io.reactivex.Observable<androidx.paging.PagedList<Value>> toObservable(androidx.paging.DataSource.Factory<Key,Value>, int pageSize, Key? initialLoadKey = null, androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback = null, io.reactivex.Scheduler? fetchScheduler = null, io.reactivex.Scheduler? notifyScheduler = null);
+ method @Deprecated public static <Key, Value> io.reactivex.Observable<androidx.paging.PagedList<Value>> toObservable(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>>, androidx.paging.PagedList.Config config, Key? initialLoadKey = null, androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback = null, io.reactivex.Scheduler? fetchScheduler = null, io.reactivex.Scheduler? notifyScheduler = null);
+ method @Deprecated public static <Key, Value> io.reactivex.Observable<androidx.paging.PagedList<Value>> toObservable(kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>>, int pageSize, Key? initialLoadKey = null, androidx.paging.PagedList.BoundaryCallback<Value>? boundaryCallback = null, io.reactivex.Scheduler? fetchScheduler = null, io.reactivex.Scheduler? notifyScheduler = null);
+ }
+
+}
+
+package androidx.paging.rxjava2 {
+
+ public final class PagingRx {
+ method public static <T> io.reactivex.Observable<androidx.paging.PagingData<T>> cachedIn(io.reactivex.Observable<androidx.paging.PagingData<T>>, kotlinx.coroutines.CoroutineScope scope);
+ method public static <T> io.reactivex.Flowable<androidx.paging.PagingData<T>> cachedIn(io.reactivex.Flowable<androidx.paging.PagingData<T>>, kotlinx.coroutines.CoroutineScope scope);
+ method public static <Key, Value> io.reactivex.Flowable<androidx.paging.PagingData<Value>> getFlowable(androidx.paging.Pager<Key,Value>);
+ method public static <Key, Value> io.reactivex.Observable<androidx.paging.PagingData<Value>> getObservable(androidx.paging.Pager<Key,Value>);
+ }
+
+ public abstract class RxPagingSource<Key, Value> extends androidx.paging.PagingSource<Key,Value> {
+ ctor public RxPagingSource();
+ method public final suspend Object? load(androidx.paging.PagingSource.LoadParams<Key> params, kotlin.coroutines.Continuation<? super androidx.paging.PagingSource.LoadResult<Key,Value>> p);
+ method public abstract io.reactivex.Single<androidx.paging.PagingSource.LoadResult<Key,Value>> loadSingle(androidx.paging.PagingSource.LoadParams<Key> params);
+ }
+
+ @androidx.paging.ExperimentalPagingApi public abstract class RxRemoteMediator<Key, Value> extends androidx.paging.RemoteMediator<Key,Value> {
+ ctor public RxRemoteMediator();
+ method public final suspend Object? initialize(kotlin.coroutines.Continuation<? super androidx.paging.RemoteMediator.InitializeAction> p);
+ method public io.reactivex.Single<androidx.paging.RemoteMediator.InitializeAction> initializeSingle();
+ method public final suspend Object? load(androidx.paging.LoadType loadType, androidx.paging.PagingState<Key,Value> state, kotlin.coroutines.Continuation<? super androidx.paging.RemoteMediator.MediatorResult> p);
+ method public abstract io.reactivex.Single<androidx.paging.RemoteMediator.MediatorResult> loadSingle(androidx.paging.LoadType loadType, androidx.paging.PagingState<Key,Value> state);
+ }
+
+}
+
diff --git a/paging/rxjava2/ktx/api/3.0.0-alpha04.txt b/paging/rxjava2/ktx/api/3.0.0-alpha04.txt
new file mode 100644
index 0000000..da4f6cc
--- /dev/null
+++ b/paging/rxjava2/ktx/api/3.0.0-alpha04.txt
@@ -0,0 +1 @@
+// Signature format: 3.0
diff --git a/paging/rxjava2/ktx/api/public_plus_experimental_3.0.0-alpha04.txt b/paging/rxjava2/ktx/api/public_plus_experimental_3.0.0-alpha04.txt
new file mode 100644
index 0000000..da4f6cc
--- /dev/null
+++ b/paging/rxjava2/ktx/api/public_plus_experimental_3.0.0-alpha04.txt
@@ -0,0 +1 @@
+// Signature format: 3.0
diff --git a/paging/rxjava2/ktx/api/res-3.0.0-alpha04.txt b/paging/rxjava2/ktx/api/res-3.0.0-alpha04.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/paging/rxjava2/ktx/api/res-3.0.0-alpha04.txt
diff --git a/paging/rxjava2/ktx/api/restricted_3.0.0-alpha04.txt b/paging/rxjava2/ktx/api/restricted_3.0.0-alpha04.txt
new file mode 100644
index 0000000..da4f6cc
--- /dev/null
+++ b/paging/rxjava2/ktx/api/restricted_3.0.0-alpha04.txt
@@ -0,0 +1 @@
+// Signature format: 3.0
diff --git a/playground-common/idea.properties b/playground-common/idea.properties
new file mode 100644
index 0000000..2e9bff1
--- /dev/null
+++ b/playground-common/idea.properties
@@ -0,0 +1,192 @@
+# Use ${idea.home.path} macro to specify location relative to IDE installation home.
+# Use ${xxx} where xxx is any Java property (including defined in previous lines of this file) to refer to its value.
+# Note for Windows users: please make sure you're using forward slashes (e.g. c:/idea/system).
+
+#---------------------------------------------------------------------
+# Uncomment this option if you want to customize path to IDE config folder. Make sure you're using forward slashes.
+#---------------------------------------------------------------------
+idea.config.path=${user.home}/.AndroidStudioAndroidXPlayground/config
+
+#---------------------------------------------------------------------
+# Uncomment this option if you want to customize path to IDE system folder. Make sure you're using forward slashes.
+#---------------------------------------------------------------------
+idea.system.path=${user.home}/.AndroidStudioAndroidXPlayground/system
+
+#---------------------------------------------------------------------
+# Uncomment this option if you want to customize path to user installed plugins folder. Make sure you're using forward slashes.
+#---------------------------------------------------------------------
+idea.plugins.path=${idea.config.path}/plugins
+
+#---------------------------------------------------------------------
+# Uncomment this option if you want to customize path to IDE logs folder. Make sure you're using forward slashes.
+#---------------------------------------------------------------------
+idea.log.path=${idea.system.path}/log
+
+#---------------------------------------------------------------------
+# Maximum file size (kilobytes) IDE should provide code assistance for.
+# The larger file is the slower its editor works and higher overall system memory requirements are
+# if code assistance is enabled. Remove this property or set to very large number if you need
+# code assistance for any files available regardless their size.
+#---------------------------------------------------------------------
+idea.max.intellisense.filesize=2500
+
+#---------------------------------------------------------------------
+# Maximum file size (kilobytes) IDE is able to open.
+#---------------------------------------------------------------------
+idea.max.content.load.filesize=20000
+
+#---------------------------------------------------------------------
+# This option controls console cyclic buffer: keeps the console output size not higher than the specified buffer size (Kb).
+# Older lines are deleted. In order to disable cycle buffer use idea.cycle.buffer.size=disabled
+#---------------------------------------------------------------------
+idea.cycle.buffer.size=1024
+
+#---------------------------------------------------------------------
+# Configure if a special launcher should be used when running processes from within IDE.
+# Using Launcher enables "soft exit" and "thread dump" features
+#---------------------------------------------------------------------
+idea.no.launcher=false
+
+#---------------------------------------------------------------------
+# To avoid too long classpath
+#---------------------------------------------------------------------
+idea.dynamic.classpath=false
+
+#---------------------------------------------------------------------
+# Uncomment this property to prevent IDE from throwing ProcessCanceledException when user activity
+# detected. This option is only useful for plugin developers, while debugging PSI related activities
+# performed in background error analysis thread.
+# DO NOT UNCOMMENT THIS UNLESS YOU'RE DEBUGGING IDE ITSELF. Significant slowdowns and lockups will happen otherwise.
+#---------------------------------------------------------------------
+#idea.ProcessCanceledException=disabled
+
+#---------------------------------------------------------------------
+# There are two possible values of idea.popup.weight property: "heavy" and "medium".
+# If you have WM configured as "Focus follows mouse with Auto Raise" then you have to
+# set this property to "medium". It prevents problems with popup menus on some
+# configurations.
+#---------------------------------------------------------------------
+idea.popup.weight=heavy
+
+#---------------------------------------------------------------------
+# Removing this property may lead to editor performance degradation under Windows.
+#---------------------------------------------------------------------
+sun.java2d.d3d=false
+
+#---------------------------------------------------------------------
+# Set swing.bufferPerWindow=false to workaround a slow scrolling in JDK6 (see IDEA-35883),
+# But this may lead to performance degradation in JDK8, because it disables a double buffering,
+# which is needed to eliminate tearing on blit-accelerated scrolling and to restore
+# a frame buffer content without the usual repainting, even when the EDT is blocked.
+#---------------------------------------------------------------------
+swing.bufferPerWindow=true
+
+#---------------------------------------------------------------------
+# Removing this property may lead to editor performance degradation under X Window.
+#---------------------------------------------------------------------
+sun.java2d.pmoffscreen=false
+
+#---------------------------------------------------------------------
+# Enables HiDPI support in JBRE
+#---------------------------------------------------------------------
+sun.java2d.uiScale.enabled=true
+
+#---------------------------------------------------------------------
+# Applicable to the Swing text components displaying HTML (except JEditorPane).
+# Rebases CSS size map depending on the component's font size to let relative
+# font size values (smaller, larger) scale properly. JBRE only.
+#---------------------------------------------------------------------
+javax.swing.rebaseCssSizeMap=true
+
+#---------------------------------------------------------------------
+# Workaround to avoid long hangs while accessing clipboard under Mac OS X.
+#---------------------------------------------------------------------
+#ide.mac.useNativeClipboard=True
+
+#---------------------------------------------------------------------
+# Maximum size (kilobytes) IDEA will load for showing past file contents -
+# in Show Diff or when calculating Digest Diff
+#---------------------------------------------------------------------
+#idea.max.vcs.loaded.size.kb=20480
+
+#---------------------------------------------------------------------
+# IDEA file chooser peeks inside directories to detect whether they contain a valid project
+# (to mark such directories with a corresponding icon).
+# Uncommenting the option prevents this behavior outside of user home directory.
+#---------------------------------------------------------------------
+#idea.chooser.lookup.for.project.dirs=false
+
+#-----------------------------------------------------------------------
+# Experimental option that does a number of things to make truly smooth scrolling possible:
+#
+# * Enables hardware-accelerated scrolling.
+# Blit-acceleration copies as much of the rendered area as possible and then repaints only newly exposed region.
+# This helps to improve scrolling performance and to reduce CPU usage (especially if drawing is compute-intensive).
+#
+# * Enables "true double buffering".
+# True double buffering is needed to eliminate tearing on blit-accelerated scrolling and to restore
+# frame buffer content without the usual repainting, even when the EDT is blocked.
+#
+# * Adds "idea.true.smooth.scrolling.debug" option.
+# Checks whether blit-accelerated scrolling is feasible, and if so, checks whether true double buffering is available.
+#
+# * Enables handling of high-precision mouse wheel events.
+# Although Java 7 introduced MouseWheelEven.getPreciseWheelRotation() method, JScrollPane doesn't use it so far.
+# Depends on the Editor / General / Smooth Scrolling setting, remote desktop detection and power save mode state.
+# Ideally, we need to patch the runtime (on Windows, Linux and Mac OS) to improve handling of the fine-grained input data.
+# This feature can be toggled via "idea.true.smooth.scrolling.high.precision" option.
+#
+# * Enables handling of pixel-perfect scrolling events.
+# Currently this mode is available only under Mac OS with JetBrains Runtime.
+# This feature can be toggled via "idea.true.smooth.scrolling.pixel.perfect" option.
+#
+# * Enables interpolation of scrolling input (scrollbar, mouse wheel, touchpad, keys, etc).
+# Smooths input which lacks both spatial and temporal resolution, performs the rendering asynchronously.
+# Depends on the Editor / General / Smooth Scrolling setting, remote desktop detection and power save mode state.
+# The feature can be tweaked using the following options:
+# "idea.true.smooth.scrolling.interpolation" - the main switch
+# "idea.true.smooth.scrolling.interpolation.scrollbar" - scrollbar interpolation
+# "idea.true.smooth.scrolling.interpolation.scrollbar.delay" - initial delay for scrollbar interpolation (ms)
+# "idea.true.smooth.scrolling.interpolation.mouse.wheel" - mouse wheel / touchpad interpolation
+# "idea.true.smooth.scrolling.interpolation.mouse.wheel.delay.min" - minimum initial delay for mouse wheel interpolation (ms)
+# "idea.true.smooth.scrolling.interpolation.mouse.wheel.delay.max" - maximum initial delay for mouse wheel interpolation (ms)
+# "idea.true.smooth.scrolling.interpolation.precision.touchpad" - precision touchpad interpolation
+# "idea.true.smooth.scrolling.interpolation.precision.touchpad.delay" - initial delay for precision touchpad interpolation (ms)
+# "idea.true.smooth.scrolling.interpolation.other" - interpolation of other input sources
+# "idea.true.smooth.scrolling.interpolation.other.delay" - initial delay for other input source interpolation (ms)
+#
+# * Adds on-demand horizontal scrollbar in editor.
+# The horizontal scrollbar is shown only when it's actually needed for currently visible content.
+# This helps to save editor space and to prevent occasional horizontal "jitter" on vertical touchpad scrolling.
+# This feature can be toggled via "idea.true.smooth.scrolling.dynamic.scrollbars" option.
+#-----------------------------------------------------------------------
+#idea.true.smooth.scrolling=true
+
+#---------------------------------------------------------------------
+# IDEA can copy library .jar files to prevent their locking.
+# By default this behavior is enabled on Windows and disabled on other platforms.
+# Uncomment this property to override.
+#---------------------------------------------------------------------
+# idea.jars.nocopy=false
+
+#---------------------------------------------------------------------
+# The VM option value to be used to start a JVM in debug mode.
+# Some JREs define it in a different way (-XXdebug in Oracle VM)
+#---------------------------------------------------------------------
+idea.xdebug.key=-Xdebug
+
+#-----------------------------------------------------------------------
+# Change to 'disabled' if you don't want to receive instant visual notifications
+# about fatal errors that happen to an IDE or plugins installed.
+#-----------------------------------------------------------------------
+idea.fatal.error.notification=enabled
+
+#-----------------------------------------------------------------------
+# Enable internal actions menu
+#-----------------------------------------------------------------------
+idea.is.internal=false
+
+#-----------------------------------------------------------------------
+# Disable automatic update checks
+#-----------------------------------------------------------------------
+ide.no.platform.update=true
diff --git a/playground-common/playground-include-settings.gradle b/playground-common/playground-include-settings.gradle
index 82e0cf3..b8ec5d7 100644
--- a/playground-common/playground-include-settings.gradle
+++ b/playground-common/playground-include-settings.gradle
@@ -100,3 +100,21 @@
ext.includeProject = this.&includeProject
ext.selectProjectsFromAndroidX = this.&selectProjectsFromAndroidX
ext.setupPlayground = this.&setupPlayground
+
+// validate JVM version to print an understandable error if it is not set to the
+// required value (11)
+def jvmVersion = System.getProperty("java.vm.specification.version")
+if (jvmVersion != "11") {
+ def guidance;
+ if (startParameter.projectProperties.containsKey('android.injected.invoked.from.ide')) {
+ guidance = "Make sure to set the gradle JDK to JDK 11 in the project settings." +
+ "(File -> Project Structure)"
+ } else {
+ guidance = "Make sure your JAVA_HOME environment variable points to Java 11 JDK."
+ }
+ throw new IllegalStateException("""
+ AndroidX build must be invoked with JDK 11.
+ $guidance
+ Current version: $jvmVersion
+ Current JAVA HOME: ${System.getProperty("java.home")}""".stripIndent());
+}
diff --git a/playground-common/studio.vmoptions b/playground-common/studio.vmoptions
new file mode 100644
index 0000000..1b3bd90
--- /dev/null
+++ b/playground-common/studio.vmoptions
@@ -0,0 +1 @@
+-Xmx4g
diff --git a/ui/integration-tests/demos/src/main/java/androidx/ui/demos/DemoFilter.kt b/ui/integration-tests/demos/src/main/java/androidx/ui/demos/DemoFilter.kt
index 94dbd3e..d74b490 100644
--- a/ui/integration-tests/demos/src/main/java/androidx/ui/demos/DemoFilter.kt
+++ b/ui/integration-tests/demos/src/main/java/androidx/ui/demos/DemoFilter.kt
@@ -26,7 +26,8 @@
import androidx.ui.foundation.Icon
import androidx.ui.foundation.ScrollableColumn
import androidx.ui.foundation.Text
-import androidx.ui.foundation.TextField
+import androidx.ui.foundation.BaseTextField
+import androidx.ui.foundation.ExperimentalFoundationApi
import androidx.ui.graphics.compositeOver
import androidx.ui.input.TextFieldValue
import androidx.ui.layout.fillMaxWidth
@@ -94,9 +95,10 @@
}
/**
- * [TextField] that edits the current [filterText], providing [onFilter] when edited.
+ * [BaseTextField] that edits the current [filterText], providing [onFilter] when edited.
*/
@Composable
+@OptIn(ExperimentalFoundationApi::class)
private fun FilterField(
filterText: TextFieldValue,
onFilter: (TextFieldValue) -> Unit,
@@ -106,7 +108,7 @@
@Suppress("DEPRECATION")
val focusModifier = FocusModifier()
// TODO: replace with Material text field when available
- TextField(
+ BaseTextField(
modifier = modifier + focusModifier,
value = filterText,
>
diff --git a/ui/ui-core/api/0.1.0-dev16.txt b/ui/ui-core/api/0.1.0-dev16.txt
index 6e7a200..2798289 100644
--- a/ui/ui-core/api/0.1.0-dev16.txt
+++ b/ui/ui-core/api/0.1.0-dev16.txt
@@ -2331,6 +2331,7 @@
public final class SemanticsActions {
method public androidx.ui.semantics.SemanticsPropertyKey<java.util.List<androidx.ui.semantics.CustomAccessibilityAction>> getCustomActions();
+ method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.util.List<androidx.ui.text.TextLayoutResult>,java.lang.Boolean>>> getGetTextLayoutResult();
method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getOnClick();
method @Deprecated public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getScrollBackward();
method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function2<java.lang.Float,java.lang.Float,java.lang.Boolean>>> getScrollBy();
@@ -2339,6 +2340,7 @@
method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function3<java.lang.Integer,java.lang.Integer,java.lang.Boolean,java.lang.Boolean>>> getSetSelection();
method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<androidx.ui.text.AnnotatedString,java.lang.Boolean>>> getSetText();
property public final androidx.ui.semantics.SemanticsPropertyKey<java.util.List<androidx.ui.semantics.CustomAccessibilityAction>> CustomActions;
+ property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.util.List<androidx.ui.text.TextLayoutResult>,java.lang.Boolean>>> GetTextLayoutResult;
property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> OnClick;
property @Deprecated public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> ScrollBackward;
property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function2<java.lang.Float,java.lang.Float,java.lang.Boolean>>> ScrollBy;
@@ -2382,6 +2384,7 @@
method public static boolean getFocused(androidx.ui.semantics.SemanticsPropertyReceiver);
method public static String getTestTag(androidx.ui.semantics.SemanticsPropertyReceiver);
method public static androidx.ui.text.AnnotatedString getText(androidx.ui.semantics.SemanticsPropertyReceiver);
+ method public static void getTextLayoutResult(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function1<? super java.util.List<androidx.ui.text.TextLayoutResult>,java.lang.Boolean> action);
method public static androidx.ui.text.TextRange getTextSelectionRange(androidx.ui.semantics.SemanticsPropertyReceiver);
method public static void hidden(androidx.ui.semantics.SemanticsPropertyReceiver);
method public static void onClick(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function0<java.lang.Boolean> action);
diff --git a/ui/ui-core/api/current.txt b/ui/ui-core/api/current.txt
index 6e7a200..2798289 100644
--- a/ui/ui-core/api/current.txt
+++ b/ui/ui-core/api/current.txt
@@ -2331,6 +2331,7 @@
public final class SemanticsActions {
method public androidx.ui.semantics.SemanticsPropertyKey<java.util.List<androidx.ui.semantics.CustomAccessibilityAction>> getCustomActions();
+ method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.util.List<androidx.ui.text.TextLayoutResult>,java.lang.Boolean>>> getGetTextLayoutResult();
method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getOnClick();
method @Deprecated public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getScrollBackward();
method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function2<java.lang.Float,java.lang.Float,java.lang.Boolean>>> getScrollBy();
@@ -2339,6 +2340,7 @@
method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function3<java.lang.Integer,java.lang.Integer,java.lang.Boolean,java.lang.Boolean>>> getSetSelection();
method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<androidx.ui.text.AnnotatedString,java.lang.Boolean>>> getSetText();
property public final androidx.ui.semantics.SemanticsPropertyKey<java.util.List<androidx.ui.semantics.CustomAccessibilityAction>> CustomActions;
+ property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.util.List<androidx.ui.text.TextLayoutResult>,java.lang.Boolean>>> GetTextLayoutResult;
property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> OnClick;
property @Deprecated public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> ScrollBackward;
property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function2<java.lang.Float,java.lang.Float,java.lang.Boolean>>> ScrollBy;
@@ -2382,6 +2384,7 @@
method public static boolean getFocused(androidx.ui.semantics.SemanticsPropertyReceiver);
method public static String getTestTag(androidx.ui.semantics.SemanticsPropertyReceiver);
method public static androidx.ui.text.AnnotatedString getText(androidx.ui.semantics.SemanticsPropertyReceiver);
+ method public static void getTextLayoutResult(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function1<? super java.util.List<androidx.ui.text.TextLayoutResult>,java.lang.Boolean> action);
method public static androidx.ui.text.TextRange getTextSelectionRange(androidx.ui.semantics.SemanticsPropertyReceiver);
method public static void hidden(androidx.ui.semantics.SemanticsPropertyReceiver);
method public static void onClick(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function0<java.lang.Boolean> action);
diff --git a/ui/ui-core/api/public_plus_experimental_0.1.0-dev16.txt b/ui/ui-core/api/public_plus_experimental_0.1.0-dev16.txt
index 6e7a200..2798289 100644
--- a/ui/ui-core/api/public_plus_experimental_0.1.0-dev16.txt
+++ b/ui/ui-core/api/public_plus_experimental_0.1.0-dev16.txt
@@ -2331,6 +2331,7 @@
public final class SemanticsActions {
method public androidx.ui.semantics.SemanticsPropertyKey<java.util.List<androidx.ui.semantics.CustomAccessibilityAction>> getCustomActions();
+ method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.util.List<androidx.ui.text.TextLayoutResult>,java.lang.Boolean>>> getGetTextLayoutResult();
method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getOnClick();
method @Deprecated public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getScrollBackward();
method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function2<java.lang.Float,java.lang.Float,java.lang.Boolean>>> getScrollBy();
@@ -2339,6 +2340,7 @@
method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function3<java.lang.Integer,java.lang.Integer,java.lang.Boolean,java.lang.Boolean>>> getSetSelection();
method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<androidx.ui.text.AnnotatedString,java.lang.Boolean>>> getSetText();
property public final androidx.ui.semantics.SemanticsPropertyKey<java.util.List<androidx.ui.semantics.CustomAccessibilityAction>> CustomActions;
+ property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.util.List<androidx.ui.text.TextLayoutResult>,java.lang.Boolean>>> GetTextLayoutResult;
property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> OnClick;
property @Deprecated public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> ScrollBackward;
property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function2<java.lang.Float,java.lang.Float,java.lang.Boolean>>> ScrollBy;
@@ -2382,6 +2384,7 @@
method public static boolean getFocused(androidx.ui.semantics.SemanticsPropertyReceiver);
method public static String getTestTag(androidx.ui.semantics.SemanticsPropertyReceiver);
method public static androidx.ui.text.AnnotatedString getText(androidx.ui.semantics.SemanticsPropertyReceiver);
+ method public static void getTextLayoutResult(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function1<? super java.util.List<androidx.ui.text.TextLayoutResult>,java.lang.Boolean> action);
method public static androidx.ui.text.TextRange getTextSelectionRange(androidx.ui.semantics.SemanticsPropertyReceiver);
method public static void hidden(androidx.ui.semantics.SemanticsPropertyReceiver);
method public static void onClick(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function0<java.lang.Boolean> action);
diff --git a/ui/ui-core/api/public_plus_experimental_current.txt b/ui/ui-core/api/public_plus_experimental_current.txt
index 6e7a200..2798289 100644
--- a/ui/ui-core/api/public_plus_experimental_current.txt
+++ b/ui/ui-core/api/public_plus_experimental_current.txt
@@ -2331,6 +2331,7 @@
public final class SemanticsActions {
method public androidx.ui.semantics.SemanticsPropertyKey<java.util.List<androidx.ui.semantics.CustomAccessibilityAction>> getCustomActions();
+ method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.util.List<androidx.ui.text.TextLayoutResult>,java.lang.Boolean>>> getGetTextLayoutResult();
method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getOnClick();
method @Deprecated public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getScrollBackward();
method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function2<java.lang.Float,java.lang.Float,java.lang.Boolean>>> getScrollBy();
@@ -2339,6 +2340,7 @@
method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function3<java.lang.Integer,java.lang.Integer,java.lang.Boolean,java.lang.Boolean>>> getSetSelection();
method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<androidx.ui.text.AnnotatedString,java.lang.Boolean>>> getSetText();
property public final androidx.ui.semantics.SemanticsPropertyKey<java.util.List<androidx.ui.semantics.CustomAccessibilityAction>> CustomActions;
+ property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.util.List<androidx.ui.text.TextLayoutResult>,java.lang.Boolean>>> GetTextLayoutResult;
property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> OnClick;
property @Deprecated public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> ScrollBackward;
property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function2<java.lang.Float,java.lang.Float,java.lang.Boolean>>> ScrollBy;
@@ -2382,6 +2384,7 @@
method public static boolean getFocused(androidx.ui.semantics.SemanticsPropertyReceiver);
method public static String getTestTag(androidx.ui.semantics.SemanticsPropertyReceiver);
method public static androidx.ui.text.AnnotatedString getText(androidx.ui.semantics.SemanticsPropertyReceiver);
+ method public static void getTextLayoutResult(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function1<? super java.util.List<androidx.ui.text.TextLayoutResult>,java.lang.Boolean> action);
method public static androidx.ui.text.TextRange getTextSelectionRange(androidx.ui.semantics.SemanticsPropertyReceiver);
method public static void hidden(androidx.ui.semantics.SemanticsPropertyReceiver);
method public static void onClick(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function0<java.lang.Boolean> action);
diff --git a/ui/ui-core/api/restricted_0.1.0-dev16.txt b/ui/ui-core/api/restricted_0.1.0-dev16.txt
index f977cd7..2147144 100644
--- a/ui/ui-core/api/restricted_0.1.0-dev16.txt
+++ b/ui/ui-core/api/restricted_0.1.0-dev16.txt
@@ -2392,6 +2392,7 @@
public final class SemanticsActions {
method public androidx.ui.semantics.SemanticsPropertyKey<java.util.List<androidx.ui.semantics.CustomAccessibilityAction>> getCustomActions();
+ method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.util.List<androidx.ui.text.TextLayoutResult>,java.lang.Boolean>>> getGetTextLayoutResult();
method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getOnClick();
method @Deprecated public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getScrollBackward();
method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function2<java.lang.Float,java.lang.Float,java.lang.Boolean>>> getScrollBy();
@@ -2400,6 +2401,7 @@
method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function3<java.lang.Integer,java.lang.Integer,java.lang.Boolean,java.lang.Boolean>>> getSetSelection();
method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<androidx.ui.text.AnnotatedString,java.lang.Boolean>>> getSetText();
property public final androidx.ui.semantics.SemanticsPropertyKey<java.util.List<androidx.ui.semantics.CustomAccessibilityAction>> CustomActions;
+ property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.util.List<androidx.ui.text.TextLayoutResult>,java.lang.Boolean>>> GetTextLayoutResult;
property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> OnClick;
property @Deprecated public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> ScrollBackward;
property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function2<java.lang.Float,java.lang.Float,java.lang.Boolean>>> ScrollBy;
@@ -2443,6 +2445,7 @@
method public static boolean getFocused(androidx.ui.semantics.SemanticsPropertyReceiver);
method public static String getTestTag(androidx.ui.semantics.SemanticsPropertyReceiver);
method public static androidx.ui.text.AnnotatedString getText(androidx.ui.semantics.SemanticsPropertyReceiver);
+ method public static void getTextLayoutResult(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function1<? super java.util.List<androidx.ui.text.TextLayoutResult>,java.lang.Boolean> action);
method public static androidx.ui.text.TextRange getTextSelectionRange(androidx.ui.semantics.SemanticsPropertyReceiver);
method public static void hidden(androidx.ui.semantics.SemanticsPropertyReceiver);
method public static void onClick(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function0<java.lang.Boolean> action);
diff --git a/ui/ui-core/api/restricted_current.txt b/ui/ui-core/api/restricted_current.txt
index f977cd7..2147144 100644
--- a/ui/ui-core/api/restricted_current.txt
+++ b/ui/ui-core/api/restricted_current.txt
@@ -2392,6 +2392,7 @@
public final class SemanticsActions {
method public androidx.ui.semantics.SemanticsPropertyKey<java.util.List<androidx.ui.semantics.CustomAccessibilityAction>> getCustomActions();
+ method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.util.List<androidx.ui.text.TextLayoutResult>,java.lang.Boolean>>> getGetTextLayoutResult();
method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getOnClick();
method @Deprecated public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getScrollBackward();
method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function2<java.lang.Float,java.lang.Float,java.lang.Boolean>>> getScrollBy();
@@ -2400,6 +2401,7 @@
method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function3<java.lang.Integer,java.lang.Integer,java.lang.Boolean,java.lang.Boolean>>> getSetSelection();
method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<androidx.ui.text.AnnotatedString,java.lang.Boolean>>> getSetText();
property public final androidx.ui.semantics.SemanticsPropertyKey<java.util.List<androidx.ui.semantics.CustomAccessibilityAction>> CustomActions;
+ property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.util.List<androidx.ui.text.TextLayoutResult>,java.lang.Boolean>>> GetTextLayoutResult;
property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> OnClick;
property @Deprecated public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> ScrollBackward;
property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function2<java.lang.Float,java.lang.Float,java.lang.Boolean>>> ScrollBy;
@@ -2443,6 +2445,7 @@
method public static boolean getFocused(androidx.ui.semantics.SemanticsPropertyReceiver);
method public static String getTestTag(androidx.ui.semantics.SemanticsPropertyReceiver);
method public static androidx.ui.text.AnnotatedString getText(androidx.ui.semantics.SemanticsPropertyReceiver);
+ method public static void getTextLayoutResult(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function1<? super java.util.List<androidx.ui.text.TextLayoutResult>,java.lang.Boolean> action);
method public static androidx.ui.text.TextRange getTextSelectionRange(androidx.ui.semantics.SemanticsPropertyReceiver);
method public static void hidden(androidx.ui.semantics.SemanticsPropertyReceiver);
method public static void onClick(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function0<java.lang.Boolean> action);
diff --git a/ui/ui-core/integration-tests/ui-core-demos/build.gradle b/ui/ui-core/integration-tests/ui-core-demos/build.gradle
index 96800fa..8aaadc2 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/build.gradle
+++ b/ui/ui-core/integration-tests/ui-core-demos/build.gradle
@@ -18,6 +18,7 @@
implementation project(":compose:integration-tests:demos:common")
implementation project(":compose:ui:ui")
implementation project(":compose:foundation:foundation-layout")
+ implementation project(":compose:foundation:foundation-text")
implementation project(":compose:ui:ui-text")
implementation project(":compose:animation:animation")
implementation project(":compose:foundation:foundation")
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/PopupDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/PopupDemo.kt
index f654f90..8922d4a 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/PopupDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/PopupDemo.kt
@@ -27,7 +27,6 @@
import androidx.ui.foundation.ContentGravity
import androidx.ui.foundation.ScrollableColumn
import androidx.ui.foundation.Text
-import androidx.ui.foundation.TextField
import androidx.ui.foundation.background
import androidx.ui.foundation.clickable
import androidx.ui.foundation.shape.corner.CircleShape
@@ -46,6 +45,7 @@
import androidx.ui.layout.preferredSize
import androidx.ui.layout.preferredWidth
import androidx.ui.text.style.TextAlign
+import androidx.ui.text.CoreTextField
import androidx.ui.unit.Dp
import androidx.ui.unit.dp
@@ -479,7 +479,7 @@
color: Color = Color.White
) {
val state = state { TextFieldValue(initialText) }
- TextField(
+ CoreTextField(
value = state.value,
modifier = modifier.background(color = color),
keyboardType = keyboardType,
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/autofill/ExplicitAutofillTypesDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/autofill/ExplicitAutofillTypesDemo.kt
index 972c57d..77fe9fc 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/autofill/ExplicitAutofillTypesDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/autofill/ExplicitAutofillTypesDemo.kt
@@ -29,15 +29,15 @@
import androidx.ui.core.toComposeRect
import androidx.ui.foundation.Box
import androidx.ui.foundation.Text
-import androidx.ui.foundation.TextField
+import androidx.ui.geometry.Offset
import androidx.ui.input.ImeAction
import androidx.ui.input.KeyboardType
+import androidx.ui.input.TextFieldValue
import androidx.ui.layout.Column
import androidx.ui.layout.Spacer
import androidx.ui.layout.preferredHeight
import androidx.ui.material.MaterialTheme
-import androidx.ui.geometry.Offset
-import androidx.ui.input.TextFieldValue
+import androidx.ui.text.CoreTextField
import androidx.ui.unit.dp
@Composable
@@ -54,7 +54,7 @@
autofillTypes = listOf(AutofillType.PersonFullName),
nameState.value = TextFieldValue(it) }
) { autofillNode ->
- TextField(
+ CoreTextField(
value = nameState.value,
keyboardType = KeyboardType.Text,
imeAction = ImeAction.Unspecified,
@@ -77,7 +77,7 @@
autofillTypes = listOf(AutofillType.EmailAddress),
emailState.value = TextFieldValue(it) }
) { autofillNode ->
- TextField(
+ CoreTextField(
value = emailState.value,
keyboardType = KeyboardType.Text,
imeAction = ImeAction.Unspecified,
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/gesture/LongPressDragGestureFilterTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/gesture/LongPressDragGestureFilterTest.kt
index d4816af..89ea6d5 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/gesture/LongPressDragGestureFilterTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/gesture/LongPressDragGestureFilterTest.kt
@@ -98,7 +98,8 @@
1,
0,
arrayOf(PointerProperties(0)),
- arrayOf(PointerCoords(50f, 50f))
+ arrayOf(PointerCoords(50f, 50f)),
+ view
)
val move = MotionEvent(
0,
@@ -106,7 +107,8 @@
1,
0,
arrayOf(PointerProperties(0)),
- arrayOf(PointerCoords(51f, 50f))
+ arrayOf(PointerCoords(51f, 50f)),
+ view
)
val up = MotionEvent(
0,
@@ -114,7 +116,8 @@
1,
0,
arrayOf(PointerProperties(0)),
- arrayOf(PointerCoords(51f, 50f))
+ arrayOf(PointerCoords(51f, 50f)),
+ view
)
activityTestRule.runOnUiThreadIR {
view.dispatchTouchEvent(down)
@@ -134,7 +137,8 @@
1,
0,
arrayOf(PointerProperties(0)),
- arrayOf(PointerCoords(50f, 50f))
+ arrayOf(PointerCoords(50f, 50f)),
+ view
)
val move = MotionEvent(
0,
@@ -142,7 +146,8 @@
1,
0,
arrayOf(PointerProperties(0)),
- arrayOf(PointerCoords(51f, 50f))
+ arrayOf(PointerCoords(51f, 50f)),
+ view
)
val cancel = MotionEvent(
0,
@@ -150,7 +155,8 @@
1,
0,
arrayOf(PointerProperties(0)),
- arrayOf(PointerCoords(51f, 50f))
+ arrayOf(PointerCoords(51f, 50f)),
+ view
)
activityTestRule.runOnUiThreadIR {
view.dispatchTouchEvent(down)
@@ -170,7 +176,8 @@
1,
0,
arrayOf(PointerProperties(0)),
- arrayOf(PointerCoords(50f, 50f))
+ arrayOf(PointerCoords(50f, 50f)),
+ view
)
waitForLongPress {
view.dispatchTouchEvent(down)
@@ -189,7 +196,8 @@
1,
0,
arrayOf(PointerProperties(0)),
- arrayOf(PointerCoords(50f, 50f))
+ arrayOf(PointerCoords(50f, 50f)),
+ view
)
waitForLongPress {
view.dispatchTouchEvent(down)
@@ -200,7 +208,8 @@
1,
0,
arrayOf(PointerProperties(0)),
- arrayOf(PointerCoords(51f, 50f))
+ arrayOf(PointerCoords(51f, 50f)),
+ view
)
view.dispatchTouchEvent(move)
@@ -222,7 +231,8 @@
1,
0,
arrayOf(PointerProperties(0)),
- arrayOf(PointerCoords(50f, 50f))
+ arrayOf(PointerCoords(50f, 50f)),
+ view
)
waitForLongPress {
view.dispatchTouchEvent(down)
@@ -233,7 +243,8 @@
1,
0,
arrayOf(PointerProperties(0)),
- arrayOf(PointerCoords(51f, 50f))
+ arrayOf(PointerCoords(51f, 50f)),
+ view
)
view.dispatchTouchEvent(up)
@@ -254,7 +265,8 @@
1,
0,
arrayOf(PointerProperties(0)),
- arrayOf(PointerCoords(50f, 50f))
+ arrayOf(PointerCoords(50f, 50f)),
+ view
)
waitForLongPress {
view.dispatchTouchEvent(down)
@@ -265,7 +277,8 @@
1,
0,
arrayOf(PointerProperties(0)),
- arrayOf(PointerCoords(51f, 50f))
+ arrayOf(PointerCoords(51f, 50f)),
+ view
)
view.dispatchTouchEvent(move)
val up = MotionEvent(
@@ -274,7 +287,8 @@
1,
0,
arrayOf(PointerProperties(0)),
- arrayOf(PointerCoords(51f, 50f))
+ arrayOf(PointerCoords(51f, 50f)),
+ view
)
view.dispatchTouchEvent(up)
@@ -297,7 +311,8 @@
1,
0,
arrayOf(PointerProperties(0)),
- arrayOf(PointerCoords(50f, 50f))
+ arrayOf(PointerCoords(50f, 50f)),
+ view
)
waitForLongPress {
view.dispatchTouchEvent(down)
@@ -308,7 +323,8 @@
1,
0,
arrayOf(PointerProperties(0)),
- arrayOf(PointerCoords(50f, 50f))
+ arrayOf(PointerCoords(50f, 50f)),
+ view
)
view.dispatchTouchEvent(cancel)
@@ -328,7 +344,8 @@
1,
0,
arrayOf(PointerProperties(0)),
- arrayOf(PointerCoords(50f, 50f))
+ arrayOf(PointerCoords(50f, 50f)),
+ view
)
waitForLongPress {
view.dispatchTouchEvent(down)
@@ -339,7 +356,8 @@
1,
0,
arrayOf(PointerProperties(0)),
- arrayOf(PointerCoords(51f, 50f))
+ arrayOf(PointerCoords(51f, 50f)),
+ view
)
view.dispatchTouchEvent(move)
val cancel = MotionEvent(
@@ -348,7 +366,8 @@
1,
0,
arrayOf(PointerProperties(0)),
- arrayOf(PointerCoords(51f, 50f))
+ arrayOf(PointerCoords(51f, 50f)),
+ view
)
view.dispatchTouchEvent(cancel)
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/gesture/ScaleGestureFilterTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/gesture/ScaleGestureFilterTest.kt
index a879adb..a45de17 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/gesture/ScaleGestureFilterTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/gesture/ScaleGestureFilterTest.kt
@@ -101,7 +101,8 @@
1,
0,
arrayOf(PointerProperties(0)),
- arrayOf(PointerCoords(touchSlop * 1, 50f))
+ arrayOf(PointerCoords(touchSlop * 1, 50f)),
+ view
)
val down2 = MotionEvent(
10,
@@ -112,7 +113,8 @@
arrayOf(
PointerCoords(touchSlop * 1, 50f),
PointerCoords(touchSlop * 3, 50f)
- )
+ ),
+ view
)
val move = MotionEvent(
20,
@@ -126,7 +128,8 @@
arrayOf(
PointerCoords(touchSlop * 0 + TinyNum, 50f),
PointerCoords(touchSlop * 4 - TinyNum, 50f)
- )
+ ),
+ view
)
val up = MotionEvent(
30,
@@ -140,7 +143,8 @@
arrayOf(
PointerCoords(touchSlop * 0 + TinyNum, 50f),
PointerCoords(touchSlop * 4 - TinyNum, 50f)
- )
+ ),
+ view
)
val up2 = MotionEvent(
40,
@@ -152,7 +156,8 @@
),
arrayOf(
PointerCoords(touchSlop * 4 - TinyNum, 50f)
- )
+ ),
+ view
)
activityTestRule.runOnUiThreadIR {
@@ -177,7 +182,8 @@
1,
0,
arrayOf(PointerProperties(0)),
- arrayOf(PointerCoords(touchSlop * 1, 50f))
+ arrayOf(PointerCoords(touchSlop * 1, 50f)),
+ view
)
val down2 = MotionEvent(
10,
@@ -188,7 +194,8 @@
arrayOf(
PointerCoords(touchSlop * 1, 50f),
PointerCoords(touchSlop * 3, 50f)
- )
+ ),
+ view
)
val move = MotionEvent(
20,
@@ -202,7 +209,8 @@
arrayOf(
PointerCoords(touchSlop * 0 - TinyNum, 50f),
PointerCoords(touchSlop * 4 + TinyNum, 50f)
- )
+ ),
+ view
)
val up = MotionEvent(
30,
@@ -216,7 +224,8 @@
arrayOf(
PointerCoords(touchSlop * 0 - TinyNum, 50f),
PointerCoords(touchSlop * 4 + TinyNum, 50f)
- )
+ ),
+ view
)
val up2 = MotionEvent(
40,
@@ -228,7 +237,8 @@
),
arrayOf(
PointerCoords(touchSlop * 4 + TinyNum, 50f)
- )
+ ),
+ view
)
activityTestRule.runOnUiThreadIR {
@@ -258,7 +268,8 @@
1,
0,
arrayOf(PointerProperties(0)),
- arrayOf(PointerCoords(touchSlop * 1, 50f))
+ arrayOf(PointerCoords(touchSlop * 1, 50f)),
+ view
)
val down2 = MotionEvent(
10,
@@ -269,7 +280,8 @@
arrayOf(
PointerCoords(touchSlop * 1, 50f),
PointerCoords(touchSlop * 3, 50f)
- )
+ ),
+ view
)
val move = MotionEvent(
20,
@@ -283,7 +295,8 @@
arrayOf(
PointerCoords(touchSlop * 0 - TinyNum, 50f),
PointerCoords(touchSlop * 4 + TinyNum, 50f)
- )
+ ),
+ view
)
val cancel = MotionEvent(
30,
@@ -297,7 +310,8 @@
arrayOf(
PointerCoords(touchSlop * 0 - TinyNum, 50f),
PointerCoords(touchSlop * 4 + TinyNum, 50f)
- )
+ ),
+ view
)
activityTestRule.runOnUiThreadIR {
@@ -326,7 +340,8 @@
1,
0,
arrayOf(PointerProperties(0)),
- arrayOf(PointerCoords(touchSlop * 1, 50f))
+ arrayOf(PointerCoords(touchSlop * 1, 50f)),
+ view
)
val down2 = MotionEvent(
10,
@@ -337,7 +352,8 @@
arrayOf(
PointerCoords(touchSlop * 1, 50f),
PointerCoords(touchSlop * 3, 50f)
- )
+ ),
+ view
)
val move = MotionEvent(
20,
@@ -351,7 +367,8 @@
arrayOf(
PointerCoords(touchSlop * -1, 50f),
PointerCoords(touchSlop * 5, 50f)
- )
+ ),
+ view
)
activityTestRule.runOnUiThreadIR {
@@ -374,7 +391,8 @@
1,
0,
arrayOf(PointerProperties(0)),
- arrayOf(PointerCoords(touchSlop * 1, 50f))
+ arrayOf(PointerCoords(touchSlop * 1, 50f)),
+ view
)
val down2 = MotionEvent(
10,
@@ -388,7 +406,8 @@
arrayOf(
PointerCoords(touchSlop * 1, 50f),
PointerCoords(touchSlop * 6, 50f)
- )
+ ),
+ view
)
val move = MotionEvent(
20,
@@ -402,7 +421,8 @@
arrayOf(
PointerCoords(touchSlop * 3, 50f),
PointerCoords(touchSlop * 4, 50f)
- )
+ ),
+ view
)
activityTestRule.runOnUiThreadIR {
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/gesture/TouchSlopDragGestureFilterTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/gesture/TouchSlopDragGestureFilterTest.kt
index 74f79cb..83919d5 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/gesture/TouchSlopDragGestureFilterTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/gesture/TouchSlopDragGestureFilterTest.kt
@@ -66,7 +66,8 @@
1,
0,
arrayOf(PointerProperties(0)),
- arrayOf(PointerCoords(50f, 50f))
+ arrayOf(PointerCoords(50f, 50f)),
+ view
)
val move = MotionEvent(
20,
@@ -74,7 +75,8 @@
1,
0,
arrayOf(PointerProperties(0)),
- arrayOf(PointerCoords(50f + touchSlop - TinyNum, 50f))
+ arrayOf(PointerCoords(50f + touchSlop - TinyNum, 50f)),
+ view
)
val up = MotionEvent(
30,
@@ -82,7 +84,8 @@
1,
0,
arrayOf(PointerProperties(0)),
- arrayOf(PointerCoords(50f + touchSlop - TinyNum, 50f))
+ arrayOf(PointerCoords(50f + touchSlop - TinyNum, 50f)),
+ view
)
activityTestRule.runOnUiThreadIR {
@@ -105,7 +108,8 @@
1,
0,
arrayOf(PointerProperties(0)),
- arrayOf(PointerCoords(50f, 50f))
+ arrayOf(PointerCoords(50f, 50f)),
+ view
)
val move = MotionEvent(
20,
@@ -113,7 +117,8 @@
1,
0,
arrayOf(PointerProperties(0)),
- arrayOf(PointerCoords(50f + touchSlop + TinyNum, 50f))
+ arrayOf(PointerCoords(50f + touchSlop + TinyNum, 50f)),
+ view
)
val up = MotionEvent(
30,
@@ -121,7 +126,8 @@
1,
0,
arrayOf(PointerProperties(0)),
- arrayOf(PointerCoords(50f + touchSlop + TinyNum, 50f))
+ arrayOf(PointerCoords(50f + touchSlop + TinyNum, 50f)),
+ view
)
activityTestRule.runOnUiThreadIR {
@@ -152,7 +158,8 @@
1,
0,
arrayOf(PointerProperties(0)),
- arrayOf(PointerCoords(50f, 50f))
+ arrayOf(PointerCoords(50f, 50f)),
+ view
)
val move = MotionEvent(
20,
@@ -160,7 +167,8 @@
1,
0,
arrayOf(PointerProperties(0)),
- arrayOf(PointerCoords(50f + touchSlop + TinyNum, 50f))
+ arrayOf(PointerCoords(50f + touchSlop + TinyNum, 50f)),
+ view
)
val cancel = MotionEvent(
30,
@@ -168,7 +176,8 @@
1,
0,
arrayOf(PointerProperties(0)),
- arrayOf(PointerCoords(50f + touchSlop, 50f))
+ arrayOf(PointerCoords(50f + touchSlop, 50f)),
+ view
)
activityTestRule.runOnUiThreadIR {
@@ -197,7 +206,8 @@
1,
0,
arrayOf(PointerProperties(0)),
- arrayOf(PointerCoords(50f, 50f))
+ arrayOf(PointerCoords(50f, 50f)),
+ view
)
activityTestRule.runOnUiThreadIR {
@@ -223,7 +233,8 @@
1,
0,
arrayOf(PointerProperties(0)),
- arrayOf(PointerCoords(50f, 50f))
+ arrayOf(PointerCoords(50f, 50f)),
+ view
)
val move = MotionEvent(
20,
@@ -231,7 +242,8 @@
1,
0,
arrayOf(PointerProperties(0)),
- arrayOf(PointerCoords(50f + movement, 50f))
+ arrayOf(PointerCoords(50f + movement, 50f)),
+ view
)
activityTestRule.runOnUiThreadIR {
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/gesture/utils.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/gesture/utils.kt
index d50e43b..c7fea86 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/gesture/utils.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/gesture/utils.kt
@@ -17,6 +17,7 @@
package androidx.ui.core.gesture
import android.view.MotionEvent
+import android.view.View
// We only need this because IR compiler doesn't like converting lambdas to Runnables
@Suppress("DEPRECATION")
@@ -29,29 +30,57 @@
runOnUiThread(runnable)
}
+/**
+ * Creates a simple [MotionEvent].
+ *
+ * @param dispatchTarget The [View] that the [MotionEvent] is going to be dispatched to. This
+ * guarantees that the MotionEvent is created correctly for both Compose (which relies on raw
+ * coordinates being correct) and Android (which requires that local coordinates are correct).
+ */
internal fun MotionEvent(
eventTime: Int,
action: Int,
numPointers: Int,
actionIndex: Int,
pointerProperties: Array<MotionEvent.PointerProperties>,
- pointerCoords: Array<MotionEvent.PointerCoords>
-) = MotionEvent.obtain(
- 0,
- eventTime.toLong(),
- action + (actionIndex shl MotionEvent.ACTION_POINTER_INDEX_SHIFT),
- numPointers,
- pointerProperties,
- pointerCoords,
- 0,
- 0,
- 0f,
- 0f,
- 0,
- 0,
- 0,
- 0
-)
+ pointerCoords: Array<MotionEvent.PointerCoords>,
+ dispatchTarget: View
+): MotionEvent {
+
+ val locationOnScreen = IntArray(2) { 0 }
+ dispatchTarget.getLocationOnScreen(locationOnScreen)
+
+ pointerCoords.forEach {
+ it.x += locationOnScreen[0]
+ it.y += locationOnScreen[1]
+ }
+
+ val motionEvent = MotionEvent.obtain(
+ 0,
+ eventTime.toLong(),
+ action + (actionIndex shl MotionEvent.ACTION_POINTER_INDEX_SHIFT),
+ numPointers,
+ pointerProperties,
+ pointerCoords,
+ 0,
+ 0,
+ 0f,
+ 0f,
+ 0,
+ 0,
+ 0,
+ 0
+ ).apply {
+ offsetLocation(-locationOnScreen[0].toFloat(), -locationOnScreen[1].toFloat())
+ }
+
+ pointerCoords.forEach {
+ it.x -= locationOnScreen[0]
+ it.y -= locationOnScreen[1]
+ }
+
+ return motionEvent
+}
@Suppress("RemoveRedundantQualifierName")
internal fun PointerProperties(id: Int) =
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/ClipPointerInputTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/ClipPointerInputTest.kt
index f897944..f2f687d 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/ClipPointerInputTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/ClipPointerInputTest.kt
@@ -79,13 +79,13 @@
* 4 . t . . t .
* ......... .........
*
- * 4 LayoutNodes with PointerInputModifiers that are positioned by their parent LayoutNode
- * and where pointer input is clipped by a modifier on the parent. 4 touches touch just inside
- * the parent LayoutNode and inside the child LayoutNodes. 8 touches touch just outside the
+ * 4 LayoutNodes with PointerInputModifiers that are positioned by offset modifiers and where
+ * pointer input is clipped by a modifier on the parent. 4 touches touch just inside the
+ * parent LayoutNode and inside the child LayoutNodes. 8 touches touch just outside the
* parent LayoutNode but inside the child LayoutNodes.
*
- * Because layout node bounds are not used to clip pointer input hit testing, all pointers
- * should hit.
+ * Because clipToBounds is being used on the parent LayoutNode, only the 4 touches inside the
+ * parent LayoutNode should hit.
*/
@Test
fun clipToBounds_childrenOffsetViaLayout_onlyCorrectPointersHit() {
@@ -169,7 +169,8 @@
1,
0,
arrayOf(PointerProperties(0)),
- arrayOf(PointerCoords(value.x, value.y))
+ arrayOf(PointerCoords(value.x, value.y)),
+ view
)
)
}
@@ -184,6 +185,9 @@
// Assert
assertThat(loggingPim1.log).isEqualTo(listOf(Offset(1f, 1f)))
+ assertThat(loggingPim2.log).isEqualTo(listOf(Offset(0f, 1f)))
+ assertThat(loggingPim3.log).isEqualTo(listOf(Offset(1f, 0f)))
+ assertThat(loggingPim4.log).isEqualTo(listOf(Offset(0f, 0f)))
}
/**
@@ -207,11 +211,11 @@
* parent LayoutNode and inside the child LayoutNodes. 8 touches touch just outside the
* parent LayoutNode but inside the child LayoutNodes.
*
- * Because layout node bounds are not used to clip pointer input hit testing, all pointers
- * should hit.
+ * Because clipToBounds is being used on the parent LayoutNode, only the 4 touches inside the
+ * parent LayoutNode should hit.
*/
@Test
- fun childrenOffsetViaModifier_onlyCorrectPointersHit() {
+ fun clipToBounds_childrenOffsetViaModifier_onlyCorrectPointersHit() {
val setupLatch = CountDownLatch(2)
@@ -292,7 +296,8 @@
1,
0,
arrayOf(PointerProperties(0)),
- arrayOf(PointerCoords(value.x, value.y))
+ arrayOf(PointerCoords(value.x, value.y)),
+ view
)
)
}
@@ -307,6 +312,9 @@
// Assert
assertThat(loggingPim1.log).isEqualTo(listOf(Offset(1f, 1f)))
+ assertThat(loggingPim2.log).isEqualTo(listOf(Offset(0f, 1f)))
+ assertThat(loggingPim3.log).isEqualTo(listOf(Offset(1f, 0f)))
+ assertThat(loggingPim4.log).isEqualTo(listOf(Offset(0f, 0f)))
}
@Composable
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidComposeViewAccessibilityDelegateCompat.kt b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidComposeViewAccessibilityDelegateCompat.kt
index 7f10611..f23f474 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidComposeViewAccessibilityDelegateCompat.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidComposeViewAccessibilityDelegateCompat.kt
@@ -17,14 +17,22 @@
package androidx.ui.core
import android.content.Context
+import android.graphics.RectF
+import android.os.Build
import android.os.Bundle
import android.os.Handler
import android.os.Looper
+import android.util.Log
import android.view.MotionEvent
import android.view.View
import android.view.ViewParent
import android.view.accessibility.AccessibilityEvent
import android.view.accessibility.AccessibilityManager
+import android.view.accessibility.AccessibilityNodeInfo
+import android.view.accessibility.AccessibilityNodeInfo.EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_LENGTH
+import android.view.accessibility.AccessibilityNodeInfo.EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_START_INDEX
+import android.view.accessibility.AccessibilityNodeInfo.EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY
+import android.view.accessibility.AccessibilityNodeProvider
import androidx.annotation.IntRange
import androidx.collection.SparseArrayCompat
import androidx.core.view.AccessibilityDelegateCompat
@@ -35,11 +43,15 @@
import androidx.ui.core.semantics.findChildById
import androidx.ui.core.semantics.getAllSemanticsNodesToMap
import androidx.ui.core.semantics.getOrNull
+import androidx.ui.geometry.Rect
import androidx.ui.semantics.CustomAccessibilityAction
import androidx.ui.semantics.SemanticsActions
import androidx.ui.semantics.SemanticsActions.CustomActions
import androidx.ui.semantics.SemanticsProperties
import androidx.ui.text.AnnotatedString
+import androidx.ui.text.TextLayoutResult
+import androidx.ui.text.length
+import androidx.ui.unit.toRect
import androidx.ui.util.fastForEach
internal class AndroidComposeViewAccessibilityDelegateCompat(val view: AndroidComposeView) :
@@ -48,6 +60,7 @@
/** Virtual node identifier value for invalid nodes. */
const val InvalidId = Integer.MIN_VALUE
const val ClassName = "android.view.View"
+ const val LogTag = "AccessibilityDelegate"
/**
* Intent size limitations prevent sending over a megabyte of data. Limit
* text length to 100K characters - 200KB.
@@ -97,7 +110,8 @@
private val accessibilityManager: AccessibilityManager =
view.context.getSystemService(Context.ACCESSIBILITY_SERVICE) as AccessibilityManager
private val handler = Handler(Looper.getMainLooper())
- private var nodeProvider: AccessibilityNodeProviderCompat = MyNodeProvider()
+ private var nodeProvider: AccessibilityNodeProviderCompat =
+ AccessibilityNodeProviderCompat(MyNodeProvider())
private var focusedVirtualViewId = InvalidId
// For actionIdToId and labelToActionId, the keys are the virtualViewIds. The value of
// actionIdToLabel holds assigned custom action id to custom action label mapping. The
@@ -133,8 +147,7 @@
})
}
- fun createNodeInfo(virtualViewId: Int):
- AccessibilityNodeInfoCompat {
+ private fun createNodeInfo(virtualViewId: Int): AccessibilityNodeInfo {
val info: AccessibilityNodeInfoCompat = AccessibilityNodeInfoCompat.obtain()
// the hidden property is often not there
info.isVisibleToUser = true
@@ -147,7 +160,7 @@
semanticsNode = view.semanticsOwner.rootSemanticsNode.findChildById(virtualViewId)
if (semanticsNode == null) {
// throw IllegalStateException("Semantics node $virtualViewId is not attached")
- return info
+ return info.unwrap()
}
info.setSource(view, semanticsNode.id)
// TODO(b/154023028): Semantics: Immediate children of the root node report parent ==
@@ -264,6 +277,10 @@
AccessibilityNodeInfoCompat.MOVEMENT_GRANULARITY_WORD or
AccessibilityNodeInfoCompat.MOVEMENT_GRANULARITY_PARAGRAPH
}
+ if (Build.VERSION.SDK_INT >= 26 && !info.text.isNullOrEmpty() &&
+ semanticsNode.config.contains(SemanticsActions.GetTextLayoutResult)) {
+ info.unwrap().availableExtraData = listOf(EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY)
+ }
val rangeInfo =
semanticsNode.config.getOrNull(SemanticsProperties.AccessibilityRangeInfo)
@@ -333,7 +350,7 @@
labelToActionId.put(virtualViewId, currentLabelToActionId)
}
- return info
+ return info.unwrap()
}
/**
@@ -490,18 +507,17 @@
return false
}
- fun performActionHelper(
+ private fun performActionHelper(
virtualViewId: Int,
action: Int,
arguments: Bundle?
): Boolean {
- val node: SemanticsNode
- if (virtualViewId == AccessibilityNodeProviderCompat.HOST_VIEW_ID) {
- node = view.semanticsOwner.rootSemanticsNode
- } else {
- node = view.semanticsOwner.rootSemanticsNode.findChildById(virtualViewId)
- ?: return false
- }
+ val node: SemanticsNode =
+ if (virtualViewId == AccessibilityNodeProviderCompat.HOST_VIEW_ID) {
+ view.semanticsOwner.rootSemanticsNode
+ } else {
+ view.semanticsOwner.rootSemanticsNode.findChildById(virtualViewId) ?: return false
+ }
when (action) {
AccessibilityNodeInfoCompat.ACTION_ACCESSIBILITY_FOCUS ->
return requestAccessibilityFocus(virtualViewId)
@@ -593,6 +609,91 @@
}
}
+ private fun addExtraDataToAccessibilityNodeInfoHelper(
+ virtualViewId: Int,
+ info: AccessibilityNodeInfo,
+ extraDataKey: String,
+ arguments: Bundle?
+ ) {
+ val node: SemanticsNode =
+ if (virtualViewId == AccessibilityNodeProviderCompat.HOST_VIEW_ID) {
+ view.semanticsOwner.rootSemanticsNode
+ } else {
+ view.semanticsOwner.rootSemanticsNode.findChildById(virtualViewId) ?: return
+ }
+ // TODO(b/157474582): This only works for single text/text field
+ if (node.config.contains(SemanticsProperties.Text) &&
+ node.config.contains(SemanticsActions.GetTextLayoutResult) &&
+ arguments != null && extraDataKey == EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY) {
+ val positionInfoStartIndex = arguments.getInt(
+ EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_START_INDEX, -1
+ )
+ val positionInfoLength = arguments.getInt(
+ EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_LENGTH, -1
+ )
+ if ((positionInfoLength <= 0) || (positionInfoStartIndex < 0) ||
+ (positionInfoStartIndex >= node.config[SemanticsProperties.Text].length)) {
+ Log.e(LogTag, "Invalid arguments for accessibility character locations")
+ return
+ }
+ val textLayoutResults = mutableListOf<TextLayoutResult>()
+ // Note now it only works for single Text/TextField until we fix the merging issue.
+ val textLayoutResult: TextLayoutResult
+ if (node.config[SemanticsActions.GetTextLayoutResult].action(textLayoutResults)) {
+ textLayoutResult = textLayoutResults[0]
+ } else {
+ return
+ }
+ val boundingRects = mutableListOf<RectF?>()
+ val textNode: SemanticsNode? = node.findNonEmptyTextChild()
+ for (i in 0 until positionInfoLength) {
+ val bounds = textLayoutResult.getBoundingBox(positionInfoStartIndex + i)
+ val screenBounds: Rect?
+ // Only the visible/partial visible locations are used.
+ if (textNode != null) {
+ screenBounds = toScreenCoords(textNode, bounds)
+ } else {
+ screenBounds = bounds
+ }
+ if (screenBounds == null) {
+ boundingRects.add(null)
+ } else {
+ boundingRects.add(
+ RectF(
+ screenBounds.left,
+ screenBounds.top,
+ screenBounds.right,
+ screenBounds.bottom
+ )
+ )
+ }
+ }
+ info.extras.putParcelableArray(extraDataKey, boundingRects.toTypedArray())
+ }
+ }
+
+ private fun toScreenCoords(textNode: SemanticsNode, bounds: Rect): Rect? {
+ val screenBounds = bounds.shift(textNode.globalPosition)
+ val globalBounds = textNode.globalBounds.toRect()
+ if (screenBounds.overlaps(globalBounds)) {
+ return screenBounds.intersect(globalBounds)
+ }
+ return null
+ }
+
+ // TODO: this only works for single text/text field.
+ private fun SemanticsNode.findNonEmptyTextChild(): SemanticsNode? {
+ if (this.unmergedConfig.contains(SemanticsProperties.Text) &&
+ this.unmergedConfig[SemanticsProperties.Text].length != 0) {
+ return this
+ }
+ unmergedChildren().fastForEach {
+ val result = it.findNonEmptyTextChild()
+ if (result != null) return result
+ }
+ return null
+ }
+
/**
* Dispatches hover {@link android.view.MotionEvent}s to the virtual view hierarchy when
* the Explore by Touch feature is enabled.
@@ -1049,9 +1150,10 @@
return null
}
- inner class MyNodeProvider : AccessibilityNodeProviderCompat() {
+ // TODO(b/160820721): use AccessibilityNodeProviderCompat instead of AccessibilityNodeProvider
+ inner class MyNodeProvider : AccessibilityNodeProvider() {
override fun createAccessibilityNodeInfo(virtualViewId: Int):
- AccessibilityNodeInfoCompat? {
+ AccessibilityNodeInfo? {
return createNodeInfo(virtualViewId)
}
@@ -1062,5 +1164,14 @@
): Boolean {
return performActionHelper(virtualViewId, action, arguments)
}
+
+ override fun addExtraDataToAccessibilityNodeInfo(
+ virtualViewId: Int,
+ info: AccessibilityNodeInfo,
+ extraDataKey: String,
+ arguments: Bundle?
+ ) {
+ addExtraDataToAccessibilityNodeInfoHelper(virtualViewId, info, extraDataKey, arguments)
+ }
}
}
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/semantics/SemanticsNode.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/semantics/SemanticsNode.kt
index 3bed72e..1f1817a 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/semantics/SemanticsNode.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/semantics/SemanticsNode.kt
@@ -138,7 +138,7 @@
private val isMergingSemanticsOfDescendants: Boolean
get() = mergingEnabled && unmergedConfig.isMergingSemanticsOfDescendants
- private fun unmergedChildren(): List<SemanticsNode> {
+ internal fun unmergedChildren(): List<SemanticsNode> {
val unmergedChildren: MutableList<SemanticsNode> = mutableListOf()
val semanticsChildren = componentNode.findOneLayerOfSemanticsWrappers()
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/semantics/SemanticsProperties.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/semantics/SemanticsProperties.kt
index 0b852e6..98c1c85 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/semantics/SemanticsProperties.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/semantics/SemanticsProperties.kt
@@ -17,6 +17,7 @@
package androidx.ui.semantics
import androidx.ui.text.AnnotatedString
+import androidx.ui.text.TextLayoutResult
import androidx.ui.text.TextRange
import kotlin.reflect.KProperty
@@ -110,6 +111,15 @@
*/
object SemanticsActions {
/**
+ * Action to get a Text/TextField node's [TextLayoutResult]. The result is the first element
+ * of layout(the argument of the AccessibilityAction).
+ *
+ * @see SemanticsPropertyReceiver.getTextLayoutResult
+ */
+ val GetTextLayoutResult = SemanticsPropertyKey<AccessibilityAction<
+ (MutableList<TextLayoutResult>) -> Boolean>>("GetTextLayoutResult")
+
+ /**
* Action to be performed when the node is clicked.
*
* @see SemanticsPropertyReceiver.onClick
@@ -329,6 +339,19 @@
var SemanticsPropertyReceiver.customActions by SemanticsActions.CustomActions
/**
+ * This function adds the [SemanticsActions.GetTextLayoutResult] to the [SemanticsPropertyReceiver].
+ *
+ * @param label Optional label for this action.
+ * @param action Action to be performed when the [SemanticsActions.GetTextLayoutResult] is called.
+ */
+fun SemanticsPropertyReceiver.getTextLayoutResult(
+ label: String? = null,
+ action: (MutableList<TextLayoutResult>) -> Boolean
+) {
+ this[SemanticsActions.GetTextLayoutResult] = AccessibilityAction(label, action)
+}
+
+/**
* This function adds the [SemanticsActions.OnClick] to the [SemanticsPropertyReceiver].
*
* @param label Optional label for this action.
diff --git a/ui/ui-foundation/api/0.1.0-dev16.txt b/ui/ui-foundation/api/0.1.0-dev16.txt
index 2bf2f26..68f2ab6 100644
--- a/ui/ui-foundation/api/0.1.0-dev16.txt
+++ b/ui/ui-foundation/api/0.1.0-dev16.txt
@@ -12,6 +12,10 @@
method @Deprecated public static androidx.ui.core.Modifier drawBackground-a_xWPtA(androidx.ui.core.Modifier, long color, androidx.ui.graphics.Shape shape = androidx.ui.graphics.RectangleShapeKt.RectangleShape, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DrawScope.DefaultBlendMode);
}
+ public final class BaseTextFieldKt {
+ method @androidx.compose.Composable @androidx.ui.foundation.ExperimentalFoundationApi public static void BaseTextField-63P0bO0(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, long textColor = Color.Unset, androidx.ui.text.TextStyle textStyle = currentTextStyle(), androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long cursorColor = contentColor());
+ }
+
@androidx.compose.Immutable public final class Border {
method public float component1();
method public androidx.ui.graphics.Brush component2();
@@ -71,6 +75,9 @@
method public static androidx.ui.core.Modifier drawBorder-vGsXmEw(androidx.ui.core.Modifier, float size, androidx.ui.graphics.Brush brush, androidx.ui.graphics.Shape shape);
}
+ @kotlin.RequiresOptIn(message="This foundation API is experimental and is likely to change or be removed in the " + "future.") public @interface ExperimentalFoundationApi {
+ }
+
public final class IconKt {
method @androidx.compose.Composable public static void Icon-A4lfJGc(androidx.ui.graphics.vector.VectorAsset asset, androidx.ui.core.Modifier modifier = Modifier, long tint = contentColor());
method @androidx.compose.Composable public static void Icon-RCipKA8(androidx.ui.graphics.painter.Painter painter, androidx.ui.core.Modifier modifier = Modifier, long tint = contentColor());
@@ -189,27 +196,6 @@
field public static final androidx.ui.foundation.Strings INSTANCE;
}
- public final class TextFieldKt {
- method @androidx.compose.Composable public static void TextField-63P0bO0(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, long textColor = Color.Unset, androidx.ui.text.TextStyle textStyle = currentTextStyle(), androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long cursorColor = contentColor());
- method @Deprecated @androidx.compose.Composable public static void TextField-DBcCkQs(androidx.ui.foundation.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.foundation.TextFieldValue,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, long textColor = Color.Unset, androidx.ui.text.TextStyle textStyle = currentTextStyle(), androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long cursorColor = contentColor());
- }
-
- @Deprecated @androidx.compose.Immutable public final class TextFieldValue {
- ctor @Deprecated public TextFieldValue(String text, androidx.ui.text.TextRange selection);
- ctor @Deprecated public TextFieldValue();
- method @Deprecated public String component1();
- method @Deprecated public androidx.ui.text.TextRange component2();
- method @Deprecated @androidx.compose.Immutable public androidx.ui.foundation.TextFieldValue copy(String text, androidx.ui.text.TextRange selection);
- method @Deprecated public androidx.ui.text.TextRange getSelection();
- method @Deprecated public String getText();
- field @Deprecated public static final androidx.ui.foundation.TextFieldValue.Companion Companion;
- }
-
- @Deprecated public static final class TextFieldValue.Companion {
- method @Deprecated public androidx.ui.savedinstancestate.Saver<androidx.ui.foundation.TextFieldValue,java.lang.Object> getSaver();
- property @Deprecated public final androidx.ui.savedinstancestate.Saver<androidx.ui.foundation.TextFieldValue,java.lang.Object> Saver;
- }
-
public final class TextKt {
method @androidx.compose.Composable public static void ProvideTextStyle(androidx.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
method @androidx.compose.Composable public static void Text-0VOI5ok(String text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.ui.text.font.FontStyle? fontStyle = null, androidx.ui.text.font.FontWeight? fontWeight = null, androidx.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.ui.text.style.TextDecoration? textDecoration = null, androidx.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.ui.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> androidx.ui.text.TextStyle style = currentTextStyle());
diff --git a/ui/ui-foundation/api/current.txt b/ui/ui-foundation/api/current.txt
index 2bf2f26..68f2ab6 100644
--- a/ui/ui-foundation/api/current.txt
+++ b/ui/ui-foundation/api/current.txt
@@ -12,6 +12,10 @@
method @Deprecated public static androidx.ui.core.Modifier drawBackground-a_xWPtA(androidx.ui.core.Modifier, long color, androidx.ui.graphics.Shape shape = androidx.ui.graphics.RectangleShapeKt.RectangleShape, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DrawScope.DefaultBlendMode);
}
+ public final class BaseTextFieldKt {
+ method @androidx.compose.Composable @androidx.ui.foundation.ExperimentalFoundationApi public static void BaseTextField-63P0bO0(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, long textColor = Color.Unset, androidx.ui.text.TextStyle textStyle = currentTextStyle(), androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long cursorColor = contentColor());
+ }
+
@androidx.compose.Immutable public final class Border {
method public float component1();
method public androidx.ui.graphics.Brush component2();
@@ -71,6 +75,9 @@
method public static androidx.ui.core.Modifier drawBorder-vGsXmEw(androidx.ui.core.Modifier, float size, androidx.ui.graphics.Brush brush, androidx.ui.graphics.Shape shape);
}
+ @kotlin.RequiresOptIn(message="This foundation API is experimental and is likely to change or be removed in the " + "future.") public @interface ExperimentalFoundationApi {
+ }
+
public final class IconKt {
method @androidx.compose.Composable public static void Icon-A4lfJGc(androidx.ui.graphics.vector.VectorAsset asset, androidx.ui.core.Modifier modifier = Modifier, long tint = contentColor());
method @androidx.compose.Composable public static void Icon-RCipKA8(androidx.ui.graphics.painter.Painter painter, androidx.ui.core.Modifier modifier = Modifier, long tint = contentColor());
@@ -189,27 +196,6 @@
field public static final androidx.ui.foundation.Strings INSTANCE;
}
- public final class TextFieldKt {
- method @androidx.compose.Composable public static void TextField-63P0bO0(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, long textColor = Color.Unset, androidx.ui.text.TextStyle textStyle = currentTextStyle(), androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long cursorColor = contentColor());
- method @Deprecated @androidx.compose.Composable public static void TextField-DBcCkQs(androidx.ui.foundation.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.foundation.TextFieldValue,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, long textColor = Color.Unset, androidx.ui.text.TextStyle textStyle = currentTextStyle(), androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long cursorColor = contentColor());
- }
-
- @Deprecated @androidx.compose.Immutable public final class TextFieldValue {
- ctor @Deprecated public TextFieldValue(String text, androidx.ui.text.TextRange selection);
- ctor @Deprecated public TextFieldValue();
- method @Deprecated public String component1();
- method @Deprecated public androidx.ui.text.TextRange component2();
- method @Deprecated @androidx.compose.Immutable public androidx.ui.foundation.TextFieldValue copy(String text, androidx.ui.text.TextRange selection);
- method @Deprecated public androidx.ui.text.TextRange getSelection();
- method @Deprecated public String getText();
- field @Deprecated public static final androidx.ui.foundation.TextFieldValue.Companion Companion;
- }
-
- @Deprecated public static final class TextFieldValue.Companion {
- method @Deprecated public androidx.ui.savedinstancestate.Saver<androidx.ui.foundation.TextFieldValue,java.lang.Object> getSaver();
- property @Deprecated public final androidx.ui.savedinstancestate.Saver<androidx.ui.foundation.TextFieldValue,java.lang.Object> Saver;
- }
-
public final class TextKt {
method @androidx.compose.Composable public static void ProvideTextStyle(androidx.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
method @androidx.compose.Composable public static void Text-0VOI5ok(String text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.ui.text.font.FontStyle? fontStyle = null, androidx.ui.text.font.FontWeight? fontWeight = null, androidx.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.ui.text.style.TextDecoration? textDecoration = null, androidx.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.ui.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> androidx.ui.text.TextStyle style = currentTextStyle());
diff --git a/ui/ui-foundation/api/public_plus_experimental_0.1.0-dev16.txt b/ui/ui-foundation/api/public_plus_experimental_0.1.0-dev16.txt
index 2bf2f26..68f2ab6 100644
--- a/ui/ui-foundation/api/public_plus_experimental_0.1.0-dev16.txt
+++ b/ui/ui-foundation/api/public_plus_experimental_0.1.0-dev16.txt
@@ -12,6 +12,10 @@
method @Deprecated public static androidx.ui.core.Modifier drawBackground-a_xWPtA(androidx.ui.core.Modifier, long color, androidx.ui.graphics.Shape shape = androidx.ui.graphics.RectangleShapeKt.RectangleShape, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DrawScope.DefaultBlendMode);
}
+ public final class BaseTextFieldKt {
+ method @androidx.compose.Composable @androidx.ui.foundation.ExperimentalFoundationApi public static void BaseTextField-63P0bO0(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, long textColor = Color.Unset, androidx.ui.text.TextStyle textStyle = currentTextStyle(), androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long cursorColor = contentColor());
+ }
+
@androidx.compose.Immutable public final class Border {
method public float component1();
method public androidx.ui.graphics.Brush component2();
@@ -71,6 +75,9 @@
method public static androidx.ui.core.Modifier drawBorder-vGsXmEw(androidx.ui.core.Modifier, float size, androidx.ui.graphics.Brush brush, androidx.ui.graphics.Shape shape);
}
+ @kotlin.RequiresOptIn(message="This foundation API is experimental and is likely to change or be removed in the " + "future.") public @interface ExperimentalFoundationApi {
+ }
+
public final class IconKt {
method @androidx.compose.Composable public static void Icon-A4lfJGc(androidx.ui.graphics.vector.VectorAsset asset, androidx.ui.core.Modifier modifier = Modifier, long tint = contentColor());
method @androidx.compose.Composable public static void Icon-RCipKA8(androidx.ui.graphics.painter.Painter painter, androidx.ui.core.Modifier modifier = Modifier, long tint = contentColor());
@@ -189,27 +196,6 @@
field public static final androidx.ui.foundation.Strings INSTANCE;
}
- public final class TextFieldKt {
- method @androidx.compose.Composable public static void TextField-63P0bO0(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, long textColor = Color.Unset, androidx.ui.text.TextStyle textStyle = currentTextStyle(), androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long cursorColor = contentColor());
- method @Deprecated @androidx.compose.Composable public static void TextField-DBcCkQs(androidx.ui.foundation.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.foundation.TextFieldValue,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, long textColor = Color.Unset, androidx.ui.text.TextStyle textStyle = currentTextStyle(), androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long cursorColor = contentColor());
- }
-
- @Deprecated @androidx.compose.Immutable public final class TextFieldValue {
- ctor @Deprecated public TextFieldValue(String text, androidx.ui.text.TextRange selection);
- ctor @Deprecated public TextFieldValue();
- method @Deprecated public String component1();
- method @Deprecated public androidx.ui.text.TextRange component2();
- method @Deprecated @androidx.compose.Immutable public androidx.ui.foundation.TextFieldValue copy(String text, androidx.ui.text.TextRange selection);
- method @Deprecated public androidx.ui.text.TextRange getSelection();
- method @Deprecated public String getText();
- field @Deprecated public static final androidx.ui.foundation.TextFieldValue.Companion Companion;
- }
-
- @Deprecated public static final class TextFieldValue.Companion {
- method @Deprecated public androidx.ui.savedinstancestate.Saver<androidx.ui.foundation.TextFieldValue,java.lang.Object> getSaver();
- property @Deprecated public final androidx.ui.savedinstancestate.Saver<androidx.ui.foundation.TextFieldValue,java.lang.Object> Saver;
- }
-
public final class TextKt {
method @androidx.compose.Composable public static void ProvideTextStyle(androidx.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
method @androidx.compose.Composable public static void Text-0VOI5ok(String text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.ui.text.font.FontStyle? fontStyle = null, androidx.ui.text.font.FontWeight? fontWeight = null, androidx.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.ui.text.style.TextDecoration? textDecoration = null, androidx.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.ui.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> androidx.ui.text.TextStyle style = currentTextStyle());
diff --git a/ui/ui-foundation/api/public_plus_experimental_current.txt b/ui/ui-foundation/api/public_plus_experimental_current.txt
index 2bf2f26..68f2ab6 100644
--- a/ui/ui-foundation/api/public_plus_experimental_current.txt
+++ b/ui/ui-foundation/api/public_plus_experimental_current.txt
@@ -12,6 +12,10 @@
method @Deprecated public static androidx.ui.core.Modifier drawBackground-a_xWPtA(androidx.ui.core.Modifier, long color, androidx.ui.graphics.Shape shape = androidx.ui.graphics.RectangleShapeKt.RectangleShape, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DrawScope.DefaultBlendMode);
}
+ public final class BaseTextFieldKt {
+ method @androidx.compose.Composable @androidx.ui.foundation.ExperimentalFoundationApi public static void BaseTextField-63P0bO0(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, long textColor = Color.Unset, androidx.ui.text.TextStyle textStyle = currentTextStyle(), androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long cursorColor = contentColor());
+ }
+
@androidx.compose.Immutable public final class Border {
method public float component1();
method public androidx.ui.graphics.Brush component2();
@@ -71,6 +75,9 @@
method public static androidx.ui.core.Modifier drawBorder-vGsXmEw(androidx.ui.core.Modifier, float size, androidx.ui.graphics.Brush brush, androidx.ui.graphics.Shape shape);
}
+ @kotlin.RequiresOptIn(message="This foundation API is experimental and is likely to change or be removed in the " + "future.") public @interface ExperimentalFoundationApi {
+ }
+
public final class IconKt {
method @androidx.compose.Composable public static void Icon-A4lfJGc(androidx.ui.graphics.vector.VectorAsset asset, androidx.ui.core.Modifier modifier = Modifier, long tint = contentColor());
method @androidx.compose.Composable public static void Icon-RCipKA8(androidx.ui.graphics.painter.Painter painter, androidx.ui.core.Modifier modifier = Modifier, long tint = contentColor());
@@ -189,27 +196,6 @@
field public static final androidx.ui.foundation.Strings INSTANCE;
}
- public final class TextFieldKt {
- method @androidx.compose.Composable public static void TextField-63P0bO0(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, long textColor = Color.Unset, androidx.ui.text.TextStyle textStyle = currentTextStyle(), androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long cursorColor = contentColor());
- method @Deprecated @androidx.compose.Composable public static void TextField-DBcCkQs(androidx.ui.foundation.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.foundation.TextFieldValue,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, long textColor = Color.Unset, androidx.ui.text.TextStyle textStyle = currentTextStyle(), androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long cursorColor = contentColor());
- }
-
- @Deprecated @androidx.compose.Immutable public final class TextFieldValue {
- ctor @Deprecated public TextFieldValue(String text, androidx.ui.text.TextRange selection);
- ctor @Deprecated public TextFieldValue();
- method @Deprecated public String component1();
- method @Deprecated public androidx.ui.text.TextRange component2();
- method @Deprecated @androidx.compose.Immutable public androidx.ui.foundation.TextFieldValue copy(String text, androidx.ui.text.TextRange selection);
- method @Deprecated public androidx.ui.text.TextRange getSelection();
- method @Deprecated public String getText();
- field @Deprecated public static final androidx.ui.foundation.TextFieldValue.Companion Companion;
- }
-
- @Deprecated public static final class TextFieldValue.Companion {
- method @Deprecated public androidx.ui.savedinstancestate.Saver<androidx.ui.foundation.TextFieldValue,java.lang.Object> getSaver();
- property @Deprecated public final androidx.ui.savedinstancestate.Saver<androidx.ui.foundation.TextFieldValue,java.lang.Object> Saver;
- }
-
public final class TextKt {
method @androidx.compose.Composable public static void ProvideTextStyle(androidx.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
method @androidx.compose.Composable public static void Text-0VOI5ok(String text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.ui.text.font.FontStyle? fontStyle = null, androidx.ui.text.font.FontWeight? fontWeight = null, androidx.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.ui.text.style.TextDecoration? textDecoration = null, androidx.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.ui.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> androidx.ui.text.TextStyle style = currentTextStyle());
diff --git a/ui/ui-foundation/api/restricted_0.1.0-dev16.txt b/ui/ui-foundation/api/restricted_0.1.0-dev16.txt
index 2bf2f26..68f2ab6 100644
--- a/ui/ui-foundation/api/restricted_0.1.0-dev16.txt
+++ b/ui/ui-foundation/api/restricted_0.1.0-dev16.txt
@@ -12,6 +12,10 @@
method @Deprecated public static androidx.ui.core.Modifier drawBackground-a_xWPtA(androidx.ui.core.Modifier, long color, androidx.ui.graphics.Shape shape = androidx.ui.graphics.RectangleShapeKt.RectangleShape, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DrawScope.DefaultBlendMode);
}
+ public final class BaseTextFieldKt {
+ method @androidx.compose.Composable @androidx.ui.foundation.ExperimentalFoundationApi public static void BaseTextField-63P0bO0(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, long textColor = Color.Unset, androidx.ui.text.TextStyle textStyle = currentTextStyle(), androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long cursorColor = contentColor());
+ }
+
@androidx.compose.Immutable public final class Border {
method public float component1();
method public androidx.ui.graphics.Brush component2();
@@ -71,6 +75,9 @@
method public static androidx.ui.core.Modifier drawBorder-vGsXmEw(androidx.ui.core.Modifier, float size, androidx.ui.graphics.Brush brush, androidx.ui.graphics.Shape shape);
}
+ @kotlin.RequiresOptIn(message="This foundation API is experimental and is likely to change or be removed in the " + "future.") public @interface ExperimentalFoundationApi {
+ }
+
public final class IconKt {
method @androidx.compose.Composable public static void Icon-A4lfJGc(androidx.ui.graphics.vector.VectorAsset asset, androidx.ui.core.Modifier modifier = Modifier, long tint = contentColor());
method @androidx.compose.Composable public static void Icon-RCipKA8(androidx.ui.graphics.painter.Painter painter, androidx.ui.core.Modifier modifier = Modifier, long tint = contentColor());
@@ -189,27 +196,6 @@
field public static final androidx.ui.foundation.Strings INSTANCE;
}
- public final class TextFieldKt {
- method @androidx.compose.Composable public static void TextField-63P0bO0(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, long textColor = Color.Unset, androidx.ui.text.TextStyle textStyle = currentTextStyle(), androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long cursorColor = contentColor());
- method @Deprecated @androidx.compose.Composable public static void TextField-DBcCkQs(androidx.ui.foundation.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.foundation.TextFieldValue,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, long textColor = Color.Unset, androidx.ui.text.TextStyle textStyle = currentTextStyle(), androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long cursorColor = contentColor());
- }
-
- @Deprecated @androidx.compose.Immutable public final class TextFieldValue {
- ctor @Deprecated public TextFieldValue(String text, androidx.ui.text.TextRange selection);
- ctor @Deprecated public TextFieldValue();
- method @Deprecated public String component1();
- method @Deprecated public androidx.ui.text.TextRange component2();
- method @Deprecated @androidx.compose.Immutable public androidx.ui.foundation.TextFieldValue copy(String text, androidx.ui.text.TextRange selection);
- method @Deprecated public androidx.ui.text.TextRange getSelection();
- method @Deprecated public String getText();
- field @Deprecated public static final androidx.ui.foundation.TextFieldValue.Companion Companion;
- }
-
- @Deprecated public static final class TextFieldValue.Companion {
- method @Deprecated public androidx.ui.savedinstancestate.Saver<androidx.ui.foundation.TextFieldValue,java.lang.Object> getSaver();
- property @Deprecated public final androidx.ui.savedinstancestate.Saver<androidx.ui.foundation.TextFieldValue,java.lang.Object> Saver;
- }
-
public final class TextKt {
method @androidx.compose.Composable public static void ProvideTextStyle(androidx.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
method @androidx.compose.Composable public static void Text-0VOI5ok(String text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.ui.text.font.FontStyle? fontStyle = null, androidx.ui.text.font.FontWeight? fontWeight = null, androidx.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.ui.text.style.TextDecoration? textDecoration = null, androidx.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.ui.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> androidx.ui.text.TextStyle style = currentTextStyle());
diff --git a/ui/ui-foundation/api/restricted_current.txt b/ui/ui-foundation/api/restricted_current.txt
index 2bf2f26..68f2ab6 100644
--- a/ui/ui-foundation/api/restricted_current.txt
+++ b/ui/ui-foundation/api/restricted_current.txt
@@ -12,6 +12,10 @@
method @Deprecated public static androidx.ui.core.Modifier drawBackground-a_xWPtA(androidx.ui.core.Modifier, long color, androidx.ui.graphics.Shape shape = androidx.ui.graphics.RectangleShapeKt.RectangleShape, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DrawScope.DefaultBlendMode);
}
+ public final class BaseTextFieldKt {
+ method @androidx.compose.Composable @androidx.ui.foundation.ExperimentalFoundationApi public static void BaseTextField-63P0bO0(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, long textColor = Color.Unset, androidx.ui.text.TextStyle textStyle = currentTextStyle(), androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long cursorColor = contentColor());
+ }
+
@androidx.compose.Immutable public final class Border {
method public float component1();
method public androidx.ui.graphics.Brush component2();
@@ -71,6 +75,9 @@
method public static androidx.ui.core.Modifier drawBorder-vGsXmEw(androidx.ui.core.Modifier, float size, androidx.ui.graphics.Brush brush, androidx.ui.graphics.Shape shape);
}
+ @kotlin.RequiresOptIn(message="This foundation API is experimental and is likely to change or be removed in the " + "future.") public @interface ExperimentalFoundationApi {
+ }
+
public final class IconKt {
method @androidx.compose.Composable public static void Icon-A4lfJGc(androidx.ui.graphics.vector.VectorAsset asset, androidx.ui.core.Modifier modifier = Modifier, long tint = contentColor());
method @androidx.compose.Composable public static void Icon-RCipKA8(androidx.ui.graphics.painter.Painter painter, androidx.ui.core.Modifier modifier = Modifier, long tint = contentColor());
@@ -189,27 +196,6 @@
field public static final androidx.ui.foundation.Strings INSTANCE;
}
- public final class TextFieldKt {
- method @androidx.compose.Composable public static void TextField-63P0bO0(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, long textColor = Color.Unset, androidx.ui.text.TextStyle textStyle = currentTextStyle(), androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long cursorColor = contentColor());
- method @Deprecated @androidx.compose.Composable public static void TextField-DBcCkQs(androidx.ui.foundation.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.foundation.TextFieldValue,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, long textColor = Color.Unset, androidx.ui.text.TextStyle textStyle = currentTextStyle(), androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long cursorColor = contentColor());
- }
-
- @Deprecated @androidx.compose.Immutable public final class TextFieldValue {
- ctor @Deprecated public TextFieldValue(String text, androidx.ui.text.TextRange selection);
- ctor @Deprecated public TextFieldValue();
- method @Deprecated public String component1();
- method @Deprecated public androidx.ui.text.TextRange component2();
- method @Deprecated @androidx.compose.Immutable public androidx.ui.foundation.TextFieldValue copy(String text, androidx.ui.text.TextRange selection);
- method @Deprecated public androidx.ui.text.TextRange getSelection();
- method @Deprecated public String getText();
- field @Deprecated public static final androidx.ui.foundation.TextFieldValue.Companion Companion;
- }
-
- @Deprecated public static final class TextFieldValue.Companion {
- method @Deprecated public androidx.ui.savedinstancestate.Saver<androidx.ui.foundation.TextFieldValue,java.lang.Object> getSaver();
- property @Deprecated public final androidx.ui.savedinstancestate.Saver<androidx.ui.foundation.TextFieldValue,java.lang.Object> Saver;
- }
-
public final class TextKt {
method @androidx.compose.Composable public static void ProvideTextStyle(androidx.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
method @androidx.compose.Composable public static void Text-0VOI5ok(String text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.ui.text.font.FontStyle? fontStyle = null, androidx.ui.text.font.FontWeight? fontWeight = null, androidx.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.ui.text.style.TextDecoration? textDecoration = null, androidx.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.ui.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> androidx.ui.text.TextStyle style = currentTextStyle());
diff --git a/ui/ui-foundation/samples/src/main/java/androidx/ui/foundation/samples/TextFieldSample.kt b/ui/ui-foundation/samples/src/main/java/androidx/ui/foundation/samples/TextFieldSample.kt
index 5775958..27aa324 100644
--- a/ui/ui-foundation/samples/src/main/java/androidx/ui/foundation/samples/TextFieldSample.kt
+++ b/ui/ui-foundation/samples/src/main/java/androidx/ui/foundation/samples/TextFieldSample.kt
@@ -20,16 +20,18 @@
import androidx.compose.Composable
import androidx.compose.getValue
import androidx.compose.setValue
-import androidx.ui.foundation.TextField
+import androidx.ui.foundation.BaseTextField
+import androidx.ui.foundation.ExperimentalFoundationApi
import androidx.ui.input.TextFieldValue
import androidx.ui.layout.Stack
import androidx.ui.savedinstancestate.savedInstanceState
@Sampled
@Composable
+@OptIn(ExperimentalFoundationApi::class)
fun TextFieldSample() {
var value by savedInstanceState(saver = TextFieldValue.Saver) { TextFieldValue() }
- TextField(
+ BaseTextField(
value = value,
value = it }
)
@@ -37,10 +39,11 @@
@Sampled
@Composable
+@OptIn(ExperimentalFoundationApi::class)
fun PlaceholderTextFieldSample() {
val state = savedInstanceState(saver = TextFieldValue.Saver) { TextFieldValue() }
Stack {
- TextField(
+ BaseTextField(
value = state.value,
state.value = it }
)
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/ui/foundation/SoftwareKeyboardTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/ui/foundation/SoftwareKeyboardTest.kt
index a635fa1..296db4d 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/ui/foundation/SoftwareKeyboardTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/ui/foundation/SoftwareKeyboardTest.kt
@@ -25,9 +25,9 @@
import androidx.ui.input.TextInputService
import androidx.ui.layout.fillMaxSize
import androidx.ui.test.createComposeRule
-import androidx.ui.test.performClick
-import androidx.ui.test.onNode
import androidx.ui.test.hasInputMethodsSupport
+import androidx.ui.test.onNode
+import androidx.ui.test.performClick
import androidx.ui.test.runOnIdle
import androidx.ui.text.SoftwareKeyboardController
import com.nhaarman.mockitokotlin2.any
@@ -42,6 +42,7 @@
@SmallTest
@RunWith(JUnit4::class)
+@OptIn(ExperimentalFoundationApi::class)
class SoftwareKeyboardTest {
@get:Rule
val composeTestRule = createComposeRule()
@@ -60,7 +61,7 @@
TextInputServiceAmbient provides textInputService
) {
val state = state { TextFieldValue("") }
- TextField(
+ BaseTextField(
value = state.value,
modifier = Modifier.fillMaxSize(),
>
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/ui/foundation/TextFieldCursorTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/ui/foundation/TextFieldCursorTest.kt
index 32f3433..f618206 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/ui/foundation/TextFieldCursorTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/ui/foundation/TextFieldCursorTest.kt
@@ -46,6 +46,7 @@
import kotlin.math.roundToInt
@LargeTest
+@OptIn(ExperimentalFoundationApi::class)
class TextFieldCursorTest {
@get:Rule
@@ -60,7 +61,7 @@
val height = 20.dp
val latch = CountDownLatch(1)
composeTestRule.setContent {
- TextField(
+ BaseTextField(
value = TextFieldValue(),
>
textStyle = TextStyle(color = Color.White, background = Color.White),
@@ -95,7 +96,7 @@
// the cursor to be next to the navigation bar which affects the red color to be a bit
// different - possibly anti-aliasing.
Box(Modifier.padding(10.dp)) {
- TextField(
+ BaseTextField(
value = TextFieldValue(),
>
textStyle = TextStyle(color = Color.White, background = Color.White),
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/ui/foundation/TextFieldOnValueChangeTextFieldValueTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/ui/foundation/TextFieldOnValueChangeTextFieldValueTest.kt
index d822a9e..32725ff 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/ui/foundation/TextFieldOnValueChangeTextFieldValueTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/ui/foundation/TextFieldOnValueChangeTextFieldValueTest.kt
@@ -54,6 +54,7 @@
@SmallTest
@RunWith(JUnit4::class)
+@OptIn(ExperimentalFoundationApi::class)
class TextFieldOnValueChangeTextFieldValueTest {
@get:Rule
val composeTestRule = createComposeRule()
@@ -80,7 +81,7 @@
TextRange.Zero
)
}
- TextField(
+ BaseTextField(
value = state.value,
>
state.value = it
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/ui/foundation/TextFieldTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/ui/foundation/TextFieldTest.kt
index 4bfad76..7892085 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/ui/foundation/TextFieldTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/ui/foundation/TextFieldTest.kt
@@ -74,6 +74,7 @@
@SmallTest
@RunWith(JUnit4::class)
+@OptIn(ExperimentalFoundationApi::class)
class TextFieldTest {
@get:Rule
val composeTestRule = createComposeRule()
@@ -94,7 +95,7 @@
) {
// TODO(b/161297615): Replace FocusModifier with Modifier.focus()
focusModifier = FocusModifier()
- TextField(
+ BaseTextField(
value = state.value,
modifier = Modifier.fillMaxSize() + focusModifier,
state.value = it }
@@ -112,7 +113,7 @@
@Composable
private fun TextFieldApp() {
val state = state { androidx.ui.input.TextFieldValue("") }
- TextField(
+ BaseTextField(
value = state.value,
modifier = Modifier.fillMaxSize(),
>
@@ -182,7 +183,7 @@
@Composable
private fun OnlyDigitsApp() {
val state = state { androidx.ui.input.TextFieldValue("") }
- TextField(
+ BaseTextField(
value = state.value,
modifier = Modifier.fillMaxSize(),
>
@@ -266,7 +267,7 @@
TextInputServiceAmbient provides textInputService
) {
val state = state { androidx.ui.input.TextFieldValue("") }
- TextField(
+ BaseTextField(
value = state.value,
modifier = Modifier.fillMaxSize(),
>
@@ -321,7 +322,7 @@
var size: Int? = null
composeTestRule.setContent {
Box {
- TextField(
+ BaseTextField(
value = androidx.ui.input.TextFieldValue(),
>
modifier = Modifier.onPositioned {
@@ -342,7 +343,7 @@
var size: Int? = null
composeTestRule.setContent {
Box {
- TextField(
+ BaseTextField(
value = androidx.ui.input.TextFieldValue(),
>
modifier = Modifier
@@ -367,7 +368,7 @@
composeTestRule.setContent {
Box(Modifier.preferredSize(parentSize)) {
Row {
- TextField(
+ BaseTextField(
value = androidx.ui.input.TextFieldValue(),
>
modifier = Modifier
@@ -417,7 +418,7 @@
@SdkSuppress(minSdkVersion = Build.VERSION_CODES.O)
fun textFieldNotFocused_cursorNotRendered() {
composeTestRule.setContent {
- TextField(
+ BaseTextField(
value = androidx.ui.input.TextFieldValue(),
>
textColor = Color.White,
@@ -440,7 +441,7 @@
@Test
fun defaultSemantics() {
composeTestRule.setContent {
- TextField(
+ BaseTextField(
modifier = Modifier.testTag("textField"),
value = androidx.ui.input.TextFieldValue(),
>
@@ -455,7 +456,7 @@
@Test
fun setImeAction_isReflectedInSemantics() {
composeTestRule.setContent {
- TextField(
+ BaseTextField(
value = androidx.ui.input.TextFieldValue(),
imeAction = ImeAction.Search,
>
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/ui/foundation/TextField.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/ui/foundation/BaseTextField.kt
similarity index 72%
rename from ui/ui-foundation/src/commonMain/kotlin/androidx/ui/foundation/TextField.kt
rename to ui/ui-foundation/src/commonMain/kotlin/androidx/ui/foundation/BaseTextField.kt
index 3fad560..cb238a5 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/ui/foundation/TextField.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/ui/foundation/BaseTextField.kt
@@ -21,8 +21,6 @@
import androidx.animation.keyframes
import androidx.animation.repeatable
import androidx.compose.Composable
-import androidx.compose.Immutable
-import androidx.compose.Stable
import androidx.compose.State
import androidx.compose.getValue
import androidx.compose.mutableStateOf
@@ -42,17 +40,15 @@
import androidx.ui.graphics.useOrElse
import androidx.ui.input.ImeAction
import androidx.ui.input.KeyboardType
+import androidx.ui.input.TextFieldValue
import androidx.ui.input.VisualTransformation
import androidx.ui.layout.defaultMinSizeConstraints
-import androidx.ui.savedinstancestate.Saver
-import androidx.ui.savedinstancestate.listSaver
import androidx.ui.text.AnnotatedString
import androidx.ui.text.CoreTextField
import androidx.ui.text.InternalTextApi
import androidx.ui.text.SoftwareKeyboardController
import androidx.ui.text.TextFieldDelegate
import androidx.ui.text.TextLayoutResult
-import androidx.ui.text.TextRange
import androidx.ui.text.TextStyle
import androidx.ui.text.constrain
import androidx.ui.unit.dp
@@ -64,115 +60,14 @@
set
/**
- * A class holding information about the editing state.
- *
- * The input service updates text selection or cursor as well as text. You can observe and
- * control the selection, cursor and text altogether.
- *
- * @param text the text will be rendered
- * @param selection the selection range. If the selection is collapsed, it represents cursor
- * location. Do not specify outside of the text buffer.
- */
-@Suppress("DEPRECATION")
-@Deprecated(
- "Please use androidx.ui.input.TextFieldValue instead",
- ReplaceWith("TextFieldValue", "androidx.ui.input.TextFieldValue")
-)
-@Immutable
-data class TextFieldValue(
- @Stable
- val text: String = "",
- @Stable
- val selection: TextRange = TextRange.Zero
-) {
- companion object {
- /**
- * The default [Saver] implementation for [TextFieldValue].
- */
- @Deprecated(
- "Please use androidx.ui.input.TextFieldValue.Saver instead",
- ReplaceWith(
- "androidx.ui.input.TextFieldValue.Saver",
- "androidx.ui.input.TextFieldValue.Companion.Saver"
- )
- )
- val Saver = listSaver<TextFieldValue, Any>(
- save = {
- listOf(it.text, it.selection.start, it.selection.end)
- },
- restore = {
- TextFieldValue(it[0] as String, TextRange(it[1] as Int, it[2] as Int))
- }
- )
- }
-}
-
-@Suppress("DEPRECATION")
-@Composable
-@Deprecated("Use the TextField with androidx.ui.input.TextFieldValue instead.")
-fun TextField(
- value: TextFieldValue,
- onValueChange: (TextFieldValue) -> Unit,
- modifier: Modifier = Modifier,
- textColor: Color = Color.Unset,
- textStyle: TextStyle = currentTextStyle(),
- keyboardType: KeyboardType = KeyboardType.Text,
- imeAction: ImeAction = ImeAction.Unspecified,
- onFocusChange: (Boolean) -> Unit = {},
- onImeActionPerformed: (ImeAction) -> Unit = {},
- visualTransformation: VisualTransformation = VisualTransformation.None,
- onTextLayout: (TextLayoutResult) -> Unit = {},
- onTextInputStarted: (SoftwareKeyboardController) -> Unit = {},
- cursorColor: Color = contentColor()
-) {
- val fullModel = state { androidx.ui.input.TextFieldValue() }
- if (fullModel.value.text != value.text || fullModel.value.selection != value.selection) {
- @OptIn(InternalTextApi::class)
- fullModel.value = androidx.ui.input.TextFieldValue(
- text = value.text,
- selection = value.selection.constrain(0, value.text.length)
- )
- }
-
- val onValueChangeWrapper: (androidx.ui.input.TextFieldValue) -> Unit = {
- val prevState = fullModel.value
- fullModel.value = it
- if (prevState.text != it.text || prevState.selection != it.selection) {
- onValueChange(
- TextFieldValue(
- it.text,
- it.selection
- )
- )
- }
- }
-
- TextField(
- value = fullModel.value,
- >
- modifier = modifier,
- textColor = textColor,
- textStyle = textStyle,
- keyboardType = keyboardType,
- imeAction = imeAction,
- >
- >
- visualTransformation = visualTransformation,
- >
- >
- cursorColor = cursorColor
- )
-}
-
-/**
* Composable that enables users to edit text via hardware or software keyboard.
*
* Whenever the user edits the text, [onValueChange] is called with the most up to date state
- * represented by [androidx.ui.input.TextFieldValue]. [androidx.ui.input.TextFieldValue] contains
+ * represented by [TextFieldValue]. [TextFieldValue] contains
* the text entered by user, as well as selection, cursor and text composition information.
* Please check [TextFieldValue] for the description of its contents.
*
- * It is crucial that the value provided in the [onValueChange] is fed back into [TextField] in
+ * It is crucial that the value provided in the [onValueChange] is fed back into [BaseTextField] in
* order to have the final state of the text being displayed. Example usage:
* @sample androidx.ui.foundation.samples.TextFieldSample
*
@@ -191,9 +86,9 @@
* For example, if you need to include a hint in your TextField you can write a composable as below:
* @sample androidx.ui.foundation.samples.PlaceholderTextFieldSample
*
- * @param value The [androidx.ui.input.TextFieldValue] to be shown in the [TextField].
+ * @param value The [TextFieldValue] to be shown in the [BaseTextField].
* @param onValueChange Called when the input service updates values in
- * [androidx.ui.input.TextFieldValue].
+ * [TextFieldValue].
* @param modifier optional [Modifier] for this text field.
* @param textColor [Color] to apply to the text. If [Color.Unset], and [textStyle] has no color
* set, this will be [contentColor].
@@ -227,9 +122,10 @@
* @see VisualTransformation
*/
@Composable
-fun TextField(
- value: androidx.ui.input.TextFieldValue,
- onValueChange: (androidx.ui.input.TextFieldValue) -> Unit,
+@ExperimentalFoundationApi
+fun BaseTextField(
+ value: TextFieldValue,
+ onValueChange: (TextFieldValue) -> Unit,
modifier: Modifier = Modifier,
textColor: Color = Color.Unset,
textStyle: TextStyle = currentTextStyle(),
@@ -242,10 +138,10 @@
onTextInputStarted: (SoftwareKeyboardController) -> Unit = {},
cursorColor: Color = contentColor()
) {
- val fullModel = state { androidx.ui.input.TextFieldValue() }
+ val fullModel = state { TextFieldValue() }
if (fullModel.value != value) {
@OptIn(InternalTextApi::class)
- fullModel.value = androidx.ui.input.TextFieldValue(
+ fullModel.value = TextFieldValue(
text = value.text,
selection = value.selection.constrain(0, value.text.length),
composition = value.composition?.constrain(0, value.text.length)
@@ -319,7 +215,7 @@
private fun Modifier.cursorModifier(
color: AnimatedValue<Color, *>,
cursorState: CursorState,
- textFieldValue: State<androidx.ui.input.TextFieldValue>,
+ textFieldValue: State<TextFieldValue>,
visualTransformation: VisualTransformation
): Modifier {
return if (cursorState.focused && textFieldValue.value.selection.collapsed) {
@@ -336,7 +232,7 @@
private data class CursorModifier(
val color: AnimatedValue<Color, *>,
val cursorState: CursorState,
- val textFieldValue: State<androidx.ui.input.TextFieldValue>,
+ val textFieldValue: State<TextFieldValue>,
val visualTransformation: VisualTransformation
) : DrawModifier {
override fun ContentDrawScope.draw() {
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/ui/foundation/ExperimentalFoundationApi.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/ui/foundation/ExperimentalFoundationApi.kt
new file mode 100644
index 0000000..e683bb4
--- /dev/null
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/ui/foundation/ExperimentalFoundationApi.kt
@@ -0,0 +1,21 @@
+/*
+ * Copyright 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.ui.foundation
+
+@RequiresOptIn("This foundation API is experimental and is likely to change or be removed in the " +
+ "future.")
+annotation class ExperimentalFoundationApi
\ No newline at end of file
diff --git a/ui/ui-material/api/0.1.0-dev16.txt b/ui/ui-material/api/0.1.0-dev16.txt
index 7da7a33..42eeefe 100644
--- a/ui/ui-material/api/0.1.0-dev16.txt
+++ b/ui/ui-material/api/0.1.0-dev16.txt
@@ -141,11 +141,6 @@
property public abstract androidx.ui.material.Emphasis medium;
}
- public final class FilledTextFieldKt {
- method @androidx.compose.Composable public static void FilledTextField-Vmoa5zc(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> _, _ -> }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
- method @androidx.compose.Composable public static void FilledTextField-o4GafH0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> _, _ -> }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
- }
-
public final class FloatingActionButtonKt {
method @androidx.compose.Composable public static void ExtendedFloatingActionButton-r9QhOOE(kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? icon = null, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(CornerSize(50)), long backgroundColor = MaterialTheme.colors.secondary, long contentColor = contentColorFor(backgroundColor), float elevation = 6.dp);
method @androidx.compose.Composable public static void FloatingActionButton-rf6Y9PE(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(CornerSize(50)), long backgroundColor = MaterialTheme.colors.secondary, long contentColor = contentColorFor(backgroundColor), float elevation = 6.dp, kotlin.jvm.functions.Function0<kotlin.Unit> icon);
@@ -317,6 +312,13 @@
public final class TextFieldImplKt {
}
+ public final class TextFieldKt {
+ method @Deprecated @androidx.compose.Composable public static void FilledTextField-Vmoa5zc(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> _, _ -> }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+ method @Deprecated @androidx.compose.Composable public static void FilledTextField-o4GafH0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> _, _ -> }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+ method @androidx.compose.Composable public static void TextField-Vmoa5zc(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> _, _ -> }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+ method @androidx.compose.Composable public static void TextField-o4GafH0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> _, _ -> }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+ }
+
@androidx.compose.Immutable public final class Typography {
ctor public Typography(androidx.ui.text.font.FontFamily defaultFontFamily, androidx.ui.text.TextStyle h1, androidx.ui.text.TextStyle h2, androidx.ui.text.TextStyle h3, androidx.ui.text.TextStyle h4, androidx.ui.text.TextStyle h5, androidx.ui.text.TextStyle h6, androidx.ui.text.TextStyle subtitle1, androidx.ui.text.TextStyle subtitle2, androidx.ui.text.TextStyle body1, androidx.ui.text.TextStyle body2, androidx.ui.text.TextStyle button, androidx.ui.text.TextStyle caption, androidx.ui.text.TextStyle overline);
method public androidx.ui.text.TextStyle component1();
diff --git a/ui/ui-material/api/current.txt b/ui/ui-material/api/current.txt
index 7da7a33..42eeefe 100644
--- a/ui/ui-material/api/current.txt
+++ b/ui/ui-material/api/current.txt
@@ -141,11 +141,6 @@
property public abstract androidx.ui.material.Emphasis medium;
}
- public final class FilledTextFieldKt {
- method @androidx.compose.Composable public static void FilledTextField-Vmoa5zc(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> _, _ -> }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
- method @androidx.compose.Composable public static void FilledTextField-o4GafH0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> _, _ -> }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
- }
-
public final class FloatingActionButtonKt {
method @androidx.compose.Composable public static void ExtendedFloatingActionButton-r9QhOOE(kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? icon = null, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(CornerSize(50)), long backgroundColor = MaterialTheme.colors.secondary, long contentColor = contentColorFor(backgroundColor), float elevation = 6.dp);
method @androidx.compose.Composable public static void FloatingActionButton-rf6Y9PE(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(CornerSize(50)), long backgroundColor = MaterialTheme.colors.secondary, long contentColor = contentColorFor(backgroundColor), float elevation = 6.dp, kotlin.jvm.functions.Function0<kotlin.Unit> icon);
@@ -317,6 +312,13 @@
public final class TextFieldImplKt {
}
+ public final class TextFieldKt {
+ method @Deprecated @androidx.compose.Composable public static void FilledTextField-Vmoa5zc(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> _, _ -> }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+ method @Deprecated @androidx.compose.Composable public static void FilledTextField-o4GafH0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> _, _ -> }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+ method @androidx.compose.Composable public static void TextField-Vmoa5zc(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> _, _ -> }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+ method @androidx.compose.Composable public static void TextField-o4GafH0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> _, _ -> }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+ }
+
@androidx.compose.Immutable public final class Typography {
ctor public Typography(androidx.ui.text.font.FontFamily defaultFontFamily, androidx.ui.text.TextStyle h1, androidx.ui.text.TextStyle h2, androidx.ui.text.TextStyle h3, androidx.ui.text.TextStyle h4, androidx.ui.text.TextStyle h5, androidx.ui.text.TextStyle h6, androidx.ui.text.TextStyle subtitle1, androidx.ui.text.TextStyle subtitle2, androidx.ui.text.TextStyle body1, androidx.ui.text.TextStyle body2, androidx.ui.text.TextStyle button, androidx.ui.text.TextStyle caption, androidx.ui.text.TextStyle overline);
method public androidx.ui.text.TextStyle component1();
diff --git a/ui/ui-material/api/public_plus_experimental_0.1.0-dev16.txt b/ui/ui-material/api/public_plus_experimental_0.1.0-dev16.txt
index 7da7a33..42eeefe 100644
--- a/ui/ui-material/api/public_plus_experimental_0.1.0-dev16.txt
+++ b/ui/ui-material/api/public_plus_experimental_0.1.0-dev16.txt
@@ -141,11 +141,6 @@
property public abstract androidx.ui.material.Emphasis medium;
}
- public final class FilledTextFieldKt {
- method @androidx.compose.Composable public static void FilledTextField-Vmoa5zc(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> _, _ -> }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
- method @androidx.compose.Composable public static void FilledTextField-o4GafH0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> _, _ -> }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
- }
-
public final class FloatingActionButtonKt {
method @androidx.compose.Composable public static void ExtendedFloatingActionButton-r9QhOOE(kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? icon = null, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(CornerSize(50)), long backgroundColor = MaterialTheme.colors.secondary, long contentColor = contentColorFor(backgroundColor), float elevation = 6.dp);
method @androidx.compose.Composable public static void FloatingActionButton-rf6Y9PE(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(CornerSize(50)), long backgroundColor = MaterialTheme.colors.secondary, long contentColor = contentColorFor(backgroundColor), float elevation = 6.dp, kotlin.jvm.functions.Function0<kotlin.Unit> icon);
@@ -317,6 +312,13 @@
public final class TextFieldImplKt {
}
+ public final class TextFieldKt {
+ method @Deprecated @androidx.compose.Composable public static void FilledTextField-Vmoa5zc(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> _, _ -> }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+ method @Deprecated @androidx.compose.Composable public static void FilledTextField-o4GafH0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> _, _ -> }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+ method @androidx.compose.Composable public static void TextField-Vmoa5zc(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> _, _ -> }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+ method @androidx.compose.Composable public static void TextField-o4GafH0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> _, _ -> }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+ }
+
@androidx.compose.Immutable public final class Typography {
ctor public Typography(androidx.ui.text.font.FontFamily defaultFontFamily, androidx.ui.text.TextStyle h1, androidx.ui.text.TextStyle h2, androidx.ui.text.TextStyle h3, androidx.ui.text.TextStyle h4, androidx.ui.text.TextStyle h5, androidx.ui.text.TextStyle h6, androidx.ui.text.TextStyle subtitle1, androidx.ui.text.TextStyle subtitle2, androidx.ui.text.TextStyle body1, androidx.ui.text.TextStyle body2, androidx.ui.text.TextStyle button, androidx.ui.text.TextStyle caption, androidx.ui.text.TextStyle overline);
method public androidx.ui.text.TextStyle component1();
diff --git a/ui/ui-material/api/public_plus_experimental_current.txt b/ui/ui-material/api/public_plus_experimental_current.txt
index 7da7a33..42eeefe 100644
--- a/ui/ui-material/api/public_plus_experimental_current.txt
+++ b/ui/ui-material/api/public_plus_experimental_current.txt
@@ -141,11 +141,6 @@
property public abstract androidx.ui.material.Emphasis medium;
}
- public final class FilledTextFieldKt {
- method @androidx.compose.Composable public static void FilledTextField-Vmoa5zc(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> _, _ -> }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
- method @androidx.compose.Composable public static void FilledTextField-o4GafH0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> _, _ -> }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
- }
-
public final class FloatingActionButtonKt {
method @androidx.compose.Composable public static void ExtendedFloatingActionButton-r9QhOOE(kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? icon = null, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(CornerSize(50)), long backgroundColor = MaterialTheme.colors.secondary, long contentColor = contentColorFor(backgroundColor), float elevation = 6.dp);
method @androidx.compose.Composable public static void FloatingActionButton-rf6Y9PE(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(CornerSize(50)), long backgroundColor = MaterialTheme.colors.secondary, long contentColor = contentColorFor(backgroundColor), float elevation = 6.dp, kotlin.jvm.functions.Function0<kotlin.Unit> icon);
@@ -317,6 +312,13 @@
public final class TextFieldImplKt {
}
+ public final class TextFieldKt {
+ method @Deprecated @androidx.compose.Composable public static void FilledTextField-Vmoa5zc(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> _, _ -> }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+ method @Deprecated @androidx.compose.Composable public static void FilledTextField-o4GafH0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> _, _ -> }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+ method @androidx.compose.Composable public static void TextField-Vmoa5zc(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> _, _ -> }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+ method @androidx.compose.Composable public static void TextField-o4GafH0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> _, _ -> }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+ }
+
@androidx.compose.Immutable public final class Typography {
ctor public Typography(androidx.ui.text.font.FontFamily defaultFontFamily, androidx.ui.text.TextStyle h1, androidx.ui.text.TextStyle h2, androidx.ui.text.TextStyle h3, androidx.ui.text.TextStyle h4, androidx.ui.text.TextStyle h5, androidx.ui.text.TextStyle h6, androidx.ui.text.TextStyle subtitle1, androidx.ui.text.TextStyle subtitle2, androidx.ui.text.TextStyle body1, androidx.ui.text.TextStyle body2, androidx.ui.text.TextStyle button, androidx.ui.text.TextStyle caption, androidx.ui.text.TextStyle overline);
method public androidx.ui.text.TextStyle component1();
diff --git a/ui/ui-material/api/restricted_0.1.0-dev16.txt b/ui/ui-material/api/restricted_0.1.0-dev16.txt
index c00c493..c0d1804 100644
--- a/ui/ui-material/api/restricted_0.1.0-dev16.txt
+++ b/ui/ui-material/api/restricted_0.1.0-dev16.txt
@@ -142,11 +142,6 @@
property public abstract androidx.ui.material.Emphasis medium;
}
- public final class FilledTextFieldKt {
- method @androidx.compose.Composable public static void FilledTextField-Vmoa5zc(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> _, _ -> }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
- method @androidx.compose.Composable public static void FilledTextField-o4GafH0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> _, _ -> }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
- }
-
public final class FloatingActionButtonKt {
method @androidx.compose.Composable public static void ExtendedFloatingActionButton-r9QhOOE(kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? icon = null, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(CornerSize(50)), long backgroundColor = MaterialTheme.colors.secondary, long contentColor = contentColorFor(backgroundColor), float elevation = 6.dp);
method @androidx.compose.Composable public static void FloatingActionButton-rf6Y9PE(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(CornerSize(50)), long backgroundColor = MaterialTheme.colors.secondary, long contentColor = contentColorFor(backgroundColor), float elevation = 6.dp, kotlin.jvm.functions.Function0<kotlin.Unit> icon);
@@ -318,6 +313,13 @@
public final class TextFieldImplKt {
}
+ public final class TextFieldKt {
+ method @Deprecated @androidx.compose.Composable public static void FilledTextField-Vmoa5zc(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> _, _ -> }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+ method @Deprecated @androidx.compose.Composable public static void FilledTextField-o4GafH0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> _, _ -> }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+ method @androidx.compose.Composable public static void TextField-Vmoa5zc(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> _, _ -> }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+ method @androidx.compose.Composable public static void TextField-o4GafH0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> _, _ -> }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+ }
+
@androidx.compose.Immutable public final class Typography {
ctor public Typography(androidx.ui.text.font.FontFamily defaultFontFamily, androidx.ui.text.TextStyle h1, androidx.ui.text.TextStyle h2, androidx.ui.text.TextStyle h3, androidx.ui.text.TextStyle h4, androidx.ui.text.TextStyle h5, androidx.ui.text.TextStyle h6, androidx.ui.text.TextStyle subtitle1, androidx.ui.text.TextStyle subtitle2, androidx.ui.text.TextStyle body1, androidx.ui.text.TextStyle body2, androidx.ui.text.TextStyle button, androidx.ui.text.TextStyle caption, androidx.ui.text.TextStyle overline);
method public androidx.ui.text.TextStyle component1();
diff --git a/ui/ui-material/api/restricted_current.txt b/ui/ui-material/api/restricted_current.txt
index c00c493..c0d1804 100644
--- a/ui/ui-material/api/restricted_current.txt
+++ b/ui/ui-material/api/restricted_current.txt
@@ -142,11 +142,6 @@
property public abstract androidx.ui.material.Emphasis medium;
}
- public final class FilledTextFieldKt {
- method @androidx.compose.Composable public static void FilledTextField-Vmoa5zc(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> _, _ -> }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
- method @androidx.compose.Composable public static void FilledTextField-o4GafH0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> _, _ -> }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
- }
-
public final class FloatingActionButtonKt {
method @androidx.compose.Composable public static void ExtendedFloatingActionButton-r9QhOOE(kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? icon = null, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(CornerSize(50)), long backgroundColor = MaterialTheme.colors.secondary, long contentColor = contentColorFor(backgroundColor), float elevation = 6.dp);
method @androidx.compose.Composable public static void FloatingActionButton-rf6Y9PE(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(CornerSize(50)), long backgroundColor = MaterialTheme.colors.secondary, long contentColor = contentColorFor(backgroundColor), float elevation = 6.dp, kotlin.jvm.functions.Function0<kotlin.Unit> icon);
@@ -318,6 +313,13 @@
public final class TextFieldImplKt {
}
+ public final class TextFieldKt {
+ method @Deprecated @androidx.compose.Composable public static void FilledTextField-Vmoa5zc(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> _, _ -> }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+ method @Deprecated @androidx.compose.Composable public static void FilledTextField-o4GafH0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> _, _ -> }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+ method @androidx.compose.Composable public static void TextField-Vmoa5zc(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> _, _ -> }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+ method @androidx.compose.Composable public static void TextField-o4GafH0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> _, _ -> }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+ }
+
@androidx.compose.Immutable public final class Typography {
ctor public Typography(androidx.ui.text.font.FontFamily defaultFontFamily, androidx.ui.text.TextStyle h1, androidx.ui.text.TextStyle h2, androidx.ui.text.TextStyle h3, androidx.ui.text.TextStyle h4, androidx.ui.text.TextStyle h5, androidx.ui.text.TextStyle h6, androidx.ui.text.TextStyle subtitle1, androidx.ui.text.TextStyle subtitle2, androidx.ui.text.TextStyle body1, androidx.ui.text.TextStyle body2, androidx.ui.text.TextStyle button, androidx.ui.text.TextStyle caption, androidx.ui.text.TextStyle overline);
method public androidx.ui.text.TextStyle component1();
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/MaterialTextField.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/MaterialTextField.kt
index df22042..b701611 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/MaterialTextField.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/MaterialTextField.kt
@@ -39,10 +39,10 @@
import androidx.ui.layout.preferredWidth
import androidx.ui.material.Checkbox
import androidx.ui.material.EmphasisAmbient
-import androidx.ui.material.FilledTextField
import androidx.ui.material.MaterialTheme
import androidx.ui.material.OutlinedTextField
import androidx.ui.material.RadioButton
+import androidx.ui.material.TextField
import androidx.ui.material.icons.Icons
import androidx.ui.material.icons.filled.Favorite
import androidx.ui.material.icons.filled.Info
@@ -95,7 +95,7 @@
val textField: @Composable () -> Unit = @Composable {
when (selectedTextField) {
TextFieldType.Filled ->
- FilledTextField(
+ TextField(
value = text,
text = it },
label = {
diff --git a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/TextFieldSamples.kt b/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/TextFieldSamples.kt
index c3f4da4..d048a62 100644
--- a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/TextFieldSamples.kt
+++ b/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/TextFieldSamples.kt
@@ -30,9 +30,9 @@
import androidx.ui.layout.Column
import androidx.ui.layout.padding
import androidx.ui.material.EmphasisAmbient
-import androidx.ui.material.FilledTextField
import androidx.ui.material.MaterialTheme
import androidx.ui.material.OutlinedTextField
+import androidx.ui.material.TextField
import androidx.ui.material.icons.Icons
import androidx.ui.material.icons.filled.Favorite
import androidx.ui.material.icons.filled.Info
@@ -45,8 +45,7 @@
fun SimpleFilledTextFieldSample() {
var text by savedInstanceState { "" }
- FilledTextField(
- value = text,
+ TextField(value = text,
text = it },
label = { Text("Label") }
)
@@ -69,8 +68,7 @@
fun FilledTextFieldWithIcons() {
var text by savedInstanceState { "" }
- FilledTextField(
- value = text,
+ TextField(value = text,
text = it },
label = { Text("Label") },
leadingIcon = { Icon(Icons.Filled.Favorite) },
@@ -83,8 +81,7 @@
fun FilledTextFieldWithPlaceholder() {
var text by savedInstanceState { "" }
- FilledTextField(
- value = text,
+ TextField(value = text,
text = it },
label = { Text("Email") },
placeholder = { Text("example@gmail.com") }
@@ -97,7 +94,7 @@
var text by savedInstanceState { "" }
val isValid = text.count() > 5 && '@' in text
- FilledTextField(
+ TextField(
value = text,
text = it },
label = {
@@ -115,7 +112,7 @@
val invalidInput = text.count() < 5 || '@' !in text
Column {
- FilledTextField(
+ TextField(
value = text,
text = it },
label = {
@@ -141,7 +138,7 @@
@Composable
fun PasswordFilledTextField() {
var password by savedInstanceState { "" }
- FilledTextField(
+ TextField(
value = password,
password = it },
label = { Text("Enter password") },
@@ -157,8 +154,7 @@
TextFieldValue("example", TextRange(0, 7))
}
- FilledTextField(
- value = text,
+ TextField(value = text,
text = it },
label = { Text("Label") }
)
@@ -183,8 +179,7 @@
fun TextFieldWithHideKeyboardOnImeAction() {
var text by savedInstanceState { "" }
- FilledTextField(
- value = text,
+ TextField(value = text,
text = it },
label = { Text("Label") },
imeAction = ImeAction.Done,
diff --git a/ui/ui-material/src/androidTest/java/androidx/ui/material/textfield/FilledTextFieldTest.kt b/ui/ui-material/src/androidTest/java/androidx/ui/material/textfield/FilledTextFieldTest.kt
index 6a71f16..27a4261 100644
--- a/ui/ui-material/src/androidTest/java/androidx/ui/material/textfield/FilledTextFieldTest.kt
+++ b/ui/ui-material/src/androidTest/java/androidx/ui/material/textfield/FilledTextFieldTest.kt
@@ -46,7 +46,7 @@
import androidx.ui.layout.height
import androidx.ui.layout.preferredHeight
import androidx.ui.layout.preferredSize
-import androidx.ui.material.FilledTextField
+import androidx.ui.material.TextField
import androidx.ui.material.MaterialTheme
import androidx.ui.material.runOnIdleWithDensity
import androidx.ui.material.setMaterialContent
@@ -99,7 +99,7 @@
@Test
fun testFilledTextField_minimumHeight() {
testRule.setMaterialContentForSizeAssertions {
- FilledTextField(
+ TextField(
value = "input",
>
label = {},
@@ -110,7 +110,7 @@
}
@Test
- fun testTextFields_singleFocus() {
+ fun testFilledTextFields_singleFocus() {
var textField1Focused = false
val textField1Tag = "TextField1"
@@ -119,14 +119,14 @@
testRule.setMaterialContent {
Column {
- FilledTextField(
+ TextField(
modifier = Modifier.testTag(textField1Tag),
value = "input1",
>
label = {},
textField1Focused = it }
)
- FilledTextField(
+ TextField(
modifier = Modifier.testTag(textField2Tag),
value = "input2",
>
@@ -156,7 +156,7 @@
var focused = false
testRule.setMaterialContent {
Box {
- FilledTextField(
+ TextField(
modifier = Modifier.testTag(TextfieldTag),
value = "input",
>
@@ -182,7 +182,7 @@
val labelPosition = Ref<Offset>()
testRule.setMaterialContent {
Box {
- FilledTextField(
+ TextField(
value = "",
>
label = {
@@ -224,7 +224,7 @@
val labelPosition = Ref<Offset>()
testRule.setMaterialContent {
Box {
- FilledTextField(
+ TextField(
value = "",
>
modifier = Modifier.preferredHeight(height),
@@ -260,7 +260,7 @@
val baseline = Ref<Float>()
testRule.setMaterialContent {
Box {
- FilledTextField(
+ TextField(
modifier = Modifier.testTag(TextfieldTag),
value = "",
>
@@ -300,7 +300,7 @@
val baseline = Ref<Float>()
testRule.setMaterialContent {
Box {
- FilledTextField(
+ TextField(
value = "input",
>
label = {
@@ -336,7 +336,7 @@
val placeholderPosition = Ref<Offset>()
testRule.setMaterialContent {
Box {
- FilledTextField(
+ TextField(
modifier = Modifier
.preferredHeight(60.dp)
.testTag(TextfieldTag),
@@ -379,7 +379,7 @@
val height = 60.dp
testRule.setMaterialContent {
Box {
- FilledTextField(
+ TextField(
modifier = Modifier.preferredHeight(height).testTag(TextfieldTag),
value = "",
>
@@ -419,7 +419,7 @@
val placeholderPosition = Ref<Offset>()
testRule.setMaterialContent {
Column {
- FilledTextField(
+ TextField(
modifier = Modifier.testTag(TextfieldTag),
value = "input",
>
@@ -446,7 +446,7 @@
@Test
fun testFilledTextField_placeholderColorAndTextStyle() {
testRule.setMaterialContent {
- FilledTextField(
+ TextField(
modifier = Modifier.testTag(TextfieldTag),
value = "",
>
@@ -479,7 +479,7 @@
val trailingSize = Ref<IntSize>()
testRule.setMaterialContent {
- FilledTextField(
+ TextField(
value = "text",
>
modifier = Modifier.preferredSize(textFieldWidth, textFieldHeight),
@@ -528,7 +528,7 @@
val labelPosition = Ref<Offset>()
testRule.setMaterialContent {
Box {
- FilledTextField(
+ TextField(
value = "",
>
modifier = Modifier.preferredHeight(height),
@@ -557,7 +557,7 @@
val labelPosition = Ref<Offset>()
testRule.setMaterialContent {
Box {
- FilledTextField(
+ TextField(
value = "",
>
modifier = Modifier.preferredHeight(height),
@@ -582,7 +582,7 @@
@Test
fun testFilledTextField_colorInLeadingTrailing_whenValidInput() {
testRule.setMaterialContent {
- FilledTextField(
+ TextField(
value = "",
>
label = {},
@@ -610,7 +610,7 @@
@Test
fun testFilledTextField_colorInLeadingTrailing_whenInvalidInput() {
testRule.setMaterialContent {
- FilledTextField(
+ TextField(
value = "",
>
label = {},
@@ -637,8 +637,8 @@
Providers(
TextInputServiceAmbient provides textInputService
) {
- var text = state { TextFieldValue("") }
- FilledTextField(
+ val text = state { TextFieldValue("") }
+ TextField(
modifier = Modifier.testTag(TextfieldTag),
value = text.value,
text.value = it },
@@ -666,7 +666,7 @@
@SdkSuppress(minSdkVersion = Build.VERSION_CODES.O)
fun testFilledTextField_visualTransformationPropagated() {
testRule.setMaterialContent {
- FilledTextField(
+ TextField(
modifier = Modifier.testTag(TextfieldTag),
value = "qwerty",
>
@@ -696,7 +696,7 @@
testRule.setMaterialContent {
Stack(Modifier.background(color = Color.White)) {
- FilledTextField(
+ TextField(
modifier = Modifier.testTag(TextfieldTag),
value = "",
>
@@ -745,7 +745,7 @@
var controller: SoftwareKeyboardController? = null
testRule.setMaterialContent {
- FilledTextField(
+ TextField(
modifier = Modifier.testTag(TextfieldTag),
value = "",
>
@@ -770,7 +770,7 @@
var controller: SoftwareKeyboardController? = null
testRule.setMaterialContent {
- FilledTextField(
+ TextField(
modifier = Modifier.testTag(TextfieldTag),
value = "",
>
diff --git a/ui/ui-material/src/androidTest/java/androidx/ui/material/textfield/TextFieldScreenshotTest.kt b/ui/ui-material/src/androidTest/java/androidx/ui/material/textfield/TextFieldScreenshotTest.kt
index 7389518..7995e22 100644
--- a/ui/ui-material/src/androidTest/java/androidx/ui/material/textfield/TextFieldScreenshotTest.kt
+++ b/ui/ui-material/src/androidTest/java/androidx/ui/material/textfield/TextFieldScreenshotTest.kt
@@ -27,9 +27,9 @@
import androidx.ui.foundation.Box
import androidx.ui.foundation.Text
import androidx.ui.layout.rtl
-import androidx.ui.material.FilledTextField
import androidx.ui.material.GOLDEN_MATERIAL
import androidx.ui.material.OutlinedTextField
+import androidx.ui.material.TextField
import androidx.ui.material.setMaterialContent
import androidx.ui.test.captureToBitmap
import androidx.ui.test.createComposeRule
@@ -123,8 +123,7 @@
fun filledTextField_withInput() {
composeTestRule.setMaterialContent {
Box(Modifier.semantics(mergeAllDescendants = true) {}.testTag(TextFieldTag)) {
- FilledTextField(
- value = "Text",
+ TextField(value = "Text",
>
label = { Text("Label") }
)
@@ -138,8 +137,7 @@
fun filledTextField_notFocused() {
composeTestRule.setMaterialContent {
Box(Modifier.semantics(mergeAllDescendants = true) {}.testTag(TextFieldTag)) {
- FilledTextField(
- value = "",
+ TextField(value = "",
>
label = { Text("Label") }
)
@@ -153,8 +151,7 @@
fun filledTextField_focused() {
composeTestRule.setMaterialContent {
Box(Modifier.semantics(mergeAllDescendants = true) {}.testTag(TextFieldTag)) {
- FilledTextField(
- value = "",
+ TextField(value = "",
>
label = { Text("Label") }
)
@@ -171,8 +168,7 @@
fun filledTextField_focused_rtl() {
composeTestRule.setMaterialContent {
Box(Modifier.semantics(mergeAllDescendants = true) {}.testTag(TextFieldTag).rtl) {
- FilledTextField(
- value = "",
+ TextField(value = "",
>
label = { Text("Label") }
)
diff --git a/ui/ui-material/src/androidTest/java/androidx/ui/material/textfield/TextFieldTest.kt b/ui/ui-material/src/androidTest/java/androidx/ui/material/textfield/TextFieldTest.kt
index 7795b03..cdd294f 100644
--- a/ui/ui-material/src/androidTest/java/androidx/ui/material/textfield/TextFieldTest.kt
+++ b/ui/ui-material/src/androidTest/java/androidx/ui/material/textfield/TextFieldTest.kt
@@ -22,7 +22,8 @@
import androidx.test.filters.SdkSuppress
import androidx.ui.core.Modifier
import androidx.ui.core.testTag
-import androidx.ui.foundation.TextField
+import androidx.ui.foundation.BaseTextField
+import androidx.ui.foundation.ExperimentalFoundationApi
import androidx.ui.foundation.background
import androidx.ui.graphics.Color
import androidx.ui.input.TextFieldValue
@@ -50,6 +51,7 @@
@MediumTest
@RunWith(JUnit4::class)
+@OptIn(ExperimentalFoundationApi::class)
class TextFieldTest {
private val TextfieldTag = "textField"
@@ -72,7 +74,7 @@
remember { scrollerPosition },
Modifier.preferredSize(width = 300.dp, height = 50.dp)
) {
- TextField(
+ BaseTextField(
value = TextFieldValue(LONG_TEXT),
>
)
@@ -96,7 +98,7 @@
remember { scrollerPosition },
Modifier.preferredSize(width = 300.dp, height = 50.dp)
) {
- TextField(
+ BaseTextField(
value = TextFieldValue(text),
>
)
@@ -129,7 +131,7 @@
remember { scrollerPosition },
Modifier.preferredSize(textFieldSize.toDp())
) {
- TextField(
+ BaseTextField(
value = TextFieldValue(LONG_TEXT),
>
)
@@ -157,7 +159,7 @@
remember { scrollerPosition },
Modifier.preferredSize(width = 300.dp, height = 50.dp).testTag(TextfieldTag)
) {
- TextField(
+ BaseTextField(
value = TextFieldValue(LONG_TEXT),
>
)
@@ -199,7 +201,7 @@
scrollerPosition,
Modifier.preferredSize(width = 300.dp, height = 50.dp).testTag(TextfieldTag)
) {
- TextField(
+ BaseTextField(
value = TextFieldValue(LONG_TEXT),
>
)
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/FilledTextField.kt b/ui/ui-material/src/main/java/androidx/ui/material/TextField.kt
similarity index 61%
rename from ui/ui-material/src/main/java/androidx/ui/material/FilledTextField.kt
rename to ui/ui-material/src/main/java/androidx/ui/material/TextField.kt
index 95c43ea..cfbc54d 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/FilledTextField.kt
+++ b/ui/ui-material/src/main/java/androidx/ui/material/TextField.kt
@@ -57,6 +57,8 @@
* Material Design implementation of a
* [Filled TextField](https://material.io/components/text-fields/#filled-text-field)
*
+ * If you are looking for an outlined version, see [OutlinedTextField].
+ *
* A simple example looks like:
*
* @sample androidx.ui.material.samples.SimpleFilledTextFieldSample
@@ -136,7 +138,7 @@
* @param shape the shape of the text field's container
*/
@Composable
-fun FilledTextField(
+fun TextField(
value: String,
onValueChange: (String) -> Unit,
label: @Composable () -> Unit,
@@ -202,6 +204,164 @@
* Material Design implementation of a
* [Filled TextField](https://material.io/components/text-fields/#filled-text-field)
*
+ * A simple example looks like:
+ *
+ * @sample androidx.ui.material.samples.SimpleFilledTextFieldSample
+ *
+ * You may provide a placeholder:
+ *
+ * @sample androidx.ui.material.samples.FilledTextFieldWithPlaceholder
+ *
+ * You can also provide leading and trailing icons:
+ *
+ * @sample androidx.ui.material.samples.FilledTextFieldWithIcons
+ *
+ * To handle the error input state, use [isErrorValue] parameter:
+ *
+ * @sample androidx.ui.material.samples.FilledTextFieldWithErrorState
+ *
+ * Additionally, you may provide additional message at the bottom:
+ *
+ * @sample androidx.ui.material.samples.TextFieldWithHelperMessage
+ *
+ * Password text field example:
+ *
+ * @sample androidx.ui.material.samples.PasswordFilledTextField
+ *
+ * Hiding a software keyboard on IME action performed:
+ *
+ * @sample androidx.ui.material.samples.TextFieldWithHideKeyboardOnImeAction
+ *
+ * If apart from input text change you also want to observe the cursor location, selection range,
+ * or IME composition use the FilledTextField overload with the [TextFieldValue] parameter instead.
+ *
+ * @param value the input text to be shown in the text field
+ * @param onValueChange the callback that is triggered when the input service updates the text. An
+ * updated text comes as a parameter of the callback
+ * @param label the label to be displayed inside the text field container. The default text style
+ * for internal [Text] is [Typography.caption] when the text field is in focus and
+ * [Typography.subtitle1] when the text field is not in focus
+ * @param modifier a [Modifier] for this text field
+ * @param textStyle the style to be applied to the input text. The default [textStyle] uses the
+ * [currentTextStyle] defined by the theme
+ * @param placeholder the optional placeholder to be displayed when the text field is in focus and
+ * the input text is empty. The default text style for internal [Text] is [Typography.subtitle1]
+ * @param leadingIcon the optional leading icon to be displayed at the beginning of the text field
+ * container
+ * @param trailingIcon the optional trailing icon to be displayed at the end of the text field
+ * container
+ * @param isErrorValue indicates if the text field's current value is in error. If set to true, the
+ * label, bottom indicator and trailing icon will be displayed in [errorColor] color
+ * @param visualTransformation transforms the visual representation of the input [value].
+ * For example, you can use [androidx.ui.input.PasswordVisualTransformation] to create a password
+ * text field. By default no visual transformation is applied
+ * @param keyboardType the keyboard type to be used with the text field.
+ * Note that the input type is not guaranteed. For example, an IME may send a non-ASCII character
+ * even if you set the keyboard type to [KeyboardType.Ascii]
+ * @param imeAction the IME action honored by the IME. The 'enter' key on the soft keyboard input
+ * will show a corresponding icon. For example, search icon may be shown if [ImeAction.Search] is
+ * selected. When a user taps on that 'enter' key, the [onImeActionPerformed] callback is called
+ * with the specified [ImeAction]
+ * @param onImeActionPerformed is triggered when the input service performs an [ImeAction].
+ * Note that the emitted IME action may be different from what you specified through the
+ * [imeAction] field. The callback also exposes a [SoftwareKeyboardController] instance as a
+ * parameter that can be used to request to hide the software keyboard
+ * @param onFocusChanged a callback to be invoked when the text field receives or loses focus
+ * If the boolean parameter value is `true`, it means the text field has focus, and vice versa
+ * @param onTextInputStarted a callback to be invoked when the connection with the platform's text
+ * input service (e.g. software keyboard on Android) has been established. Called with the
+ * [SoftwareKeyboardController] instance that can be used to request to show or hide the software
+ * keyboard
+ * @param activeColor the color of the label, bottom indicator and the cursor when the text field is
+ * in focus
+ * @param inactiveColor the color of either the input text or placeholder when the text field is in
+ * focus, and the color of the label and bottom indicator when the text field is not in focus
+ * @param errorColor the alternative color of the label, bottom indicator, cursor and trailing icon
+ * used when [isErrorValue] is set to true
+ * @param backgroundColor the background color of the text field's container. To the color provided
+ * here there will be applied a transparency alpha defined by Material Design specifications
+ * @param shape the shape of the text field's container
+ */
+@Deprecated(
+ "FilledTextField has been renamed to TextField for better discoverability. Use " +
+ "TextField instead", replaceWith = ReplaceWith(
+ "TextField(" +
+ "value = value," +
+ " +
+ " label = label," +
+ " modifier = modifier, " +
+ "textStyle = textStyle," +
+ " placeholder = placeholder," +
+ " leadingIcon = leadingIcon," +
+ " trailingIcon = trailingIcon," +
+ " isErrorValue = isErrorValue," +
+ " visualTransformation = visualTransformation, keyboardType = keyboardType," +
+ " imeAction = imeAction," +
+ " +
+ " +
+ " +
+ " activeColor = activeColor," +
+ " inactiveColor = inactiveColor," +
+ " errorColor = errorColor," +
+ " backgroundColor = backgroundColor," +
+ " shape = shape)",
+ "androidx.ui.material.TextField"
+ )
+)
+@Composable
+fun FilledTextField(
+ value: String,
+ onValueChange: (String) -> Unit,
+ label: @Composable () -> Unit,
+ modifier: Modifier = Modifier,
+ textStyle: TextStyle = currentTextStyle(),
+ placeholder: @Composable (() -> Unit)? = null,
+ leadingIcon: @Composable (() -> Unit)? = null,
+ trailingIcon: @Composable (() -> Unit)? = null,
+ isErrorValue: Boolean = false,
+ visualTransformation: VisualTransformation = VisualTransformation.None,
+ keyboardType: KeyboardType = KeyboardType.Text,
+ imeAction: ImeAction = ImeAction.Unspecified,
+ onImeActionPerformed: (ImeAction, SoftwareKeyboardController?) -> Unit = { _, _ -> },
+ onFocusChanged: (Boolean) -> Unit = {},
+ onTextInputStarted: (SoftwareKeyboardController) -> Unit = {},
+ activeColor: Color = MaterialTheme.colors.primary,
+ inactiveColor: Color = MaterialTheme.colors.onSurface,
+ errorColor: Color = MaterialTheme.colors.error,
+ backgroundColor: Color = MaterialTheme.colors.onSurface,
+ shape: Shape =
+ MaterialTheme.shapes.small.copy(bottomLeft = ZeroCornerSize, bottomRight = ZeroCornerSize)
+) {
+ TextField(
+ value = value,
+ >
+ label = label,
+ modifier = modifier,
+ textStyle = textStyle,
+ placeholder = placeholder,
+ leadingIcon = leadingIcon,
+ trailingIcon = trailingIcon,
+ isErrorValue = isErrorValue,
+ visualTransformation = visualTransformation,
+ keyboardType = keyboardType,
+ imeAction = imeAction,
+ >
+ >
+ >
+ activeColor = activeColor,
+ inactiveColor = inactiveColor,
+ errorColor = errorColor,
+ backgroundColor = backgroundColor,
+ shape = shape
+ )
+}
+
+/**
+ * Material Design implementation of a
+ * [Filled TextField](https://material.io/components/text-fields/#filled-text-field)
+ *
+ * If you are looking for an outlined version, see [OutlinedTextField].
+ *
* See example usage:
* @sample androidx.ui.material.samples.FilledTextFieldSample
*
@@ -257,7 +417,7 @@
* @param shape the shape of the text field's container
*/
@Composable
-fun FilledTextField(
+fun TextField(
value: TextFieldValue,
onValueChange: (TextFieldValue) -> Unit,
label: @Composable () -> Unit,
@@ -305,6 +465,138 @@
)
}
+/**
+ * Material Design implementation of a
+ * [Filled TextField](https://material.io/components/text-fields/#filled-text-field)
+ *
+ * See example usage:
+ * @sample androidx.ui.material.samples.FilledTextFieldSample
+ *
+ * This overload provides access to the input text, cursor position, selection range and
+ * IME composition. If you only want to observe an input text change, use the FilledTextField
+ * overload with the [String] parameter instead.
+ *
+ * @param value the input text to be shown in the text field
+ * @param onValueChange the callback that is triggered when the input service updates the text. An
+ * updated text comes as a parameter of the callback
+ * @param label the label to be displayed inside the text field container. The default text style
+ * for internal [Text] is [Typography.caption] when the text field is in focus and
+ * [Typography.subtitle1] when the text field is not in focus
+ * @param modifier a [Modifier] for this text field
+ * @param textStyle the style to be applied to the input text. The default [textStyle] uses the
+ * [currentTextStyle] defined by the theme
+ * @param placeholder the optional placeholder to be displayed when the text field is in focus and
+ * the input text is empty. The default text style for internal [Text] is [Typography.subtitle1]
+ * @param leadingIcon the optional leading icon to be displayed at the beginning of the text field
+ * container
+ * @param trailingIcon the optional trailing icon to be displayed at the end of the text field
+ * container
+ * @param isErrorValue indicates if the text field's current value is in error. If set to true, the
+ * label, bottom indicator and trailing icon will be displayed in [errorColor] color
+ * @param visualTransformation transforms the visual representation of the input [value].
+ * For example, you can use [androidx.ui.input.PasswordVisualTransformation] to create a password
+ * text field. By default no visual transformation is applied
+ * @param keyboardType the keyboard type to be used with the text field.
+ * Note that the input type is not guaranteed. For example, an IME may send a non-ASCII character
+ * even if you set the keyboard type to [KeyboardType.Ascii]
+ * @param imeAction the IME action honored by the IME. The 'enter' key on the soft keyboard input
+ * will show a corresponding icon. For example, search icon may be shown if [ImeAction.Search] is
+ * selected. When a user taps on that 'enter' key, the [onImeActionPerformed] callback is called
+ * with the specified [ImeAction]
+ * @param onImeActionPerformed is triggered when the input service performs an [ImeAction].
+ * Note that the emitted IME action may be different from what you specified through the
+ * [imeAction] field. The callback also exposes a [SoftwareKeyboardController] instance as a
+ * parameter that can be used to request to hide the software keyboard
+ * @param onFocusChanged a callback to be invoked when the text field receives or loses focus
+ * If the boolean parameter value is `true`, it means the text field has focus, and vice versa
+ * @param onTextInputStarted a callback to be invoked when the connection with the platform's text
+ * input service (e.g. software keyboard on Android) has been established. Called with the
+ * [SoftwareKeyboardController] instance that can be used to request to show or hide the software
+ * keyboard
+ * @param activeColor the color of the label, bottom indicator and the cursor when the text field is
+ * in focus
+ * @param inactiveColor the color of either the input text or placeholder when the text field is in
+ * focus, and the color of the label and bottom indicator when the text field is not in focus
+ * @param errorColor the alternative color of the label, bottom indicator, cursor and trailing icon
+ * used when [isErrorValue] is set to true
+ * @param backgroundColor the background color of the text field's container. To the color provided
+ * here there will be applied a transparency alpha defined by Material Design specifications
+ * @param shape the shape of the text field's container
+ */
+@Deprecated(
+ "FilledTextField has been renamed to TextField for better discoverability. Use " +
+ "TextField instead", replaceWith = ReplaceWith(
+ "TextField(" +
+ "value = value," +
+ " +
+ " label = label," +
+ " modifier = modifier, " +
+ "textStyle = textStyle," +
+ " placeholder = placeholder," +
+ " leadingIcon = leadingIcon," +
+ " trailingIcon = trailingIcon," +
+ " isErrorValue = isErrorValue," +
+ " visualTransformation = visualTransformation, keyboardType = keyboardType," +
+ " imeAction = imeAction," +
+ " +
+ " +
+ " +
+ " activeColor = activeColor," +
+ " inactiveColor = inactiveColor," +
+ " errorColor = errorColor," +
+ " backgroundColor = backgroundColor," +
+ " shape = shape)",
+ "androidx.ui.material.TextField"
+ )
+)
+@Composable
+fun FilledTextField(
+ value: TextFieldValue,
+ onValueChange: (TextFieldValue) -> Unit,
+ label: @Composable () -> Unit,
+ modifier: Modifier = Modifier,
+ textStyle: TextStyle = currentTextStyle(),
+ placeholder: @Composable (() -> Unit)? = null,
+ leadingIcon: @Composable (() -> Unit)? = null,
+ trailingIcon: @Composable (() -> Unit)? = null,
+ isErrorValue: Boolean = false,
+ visualTransformation: VisualTransformation = VisualTransformation.None,
+ keyboardType: KeyboardType = KeyboardType.Text,
+ imeAction: ImeAction = ImeAction.Unspecified,
+ onImeActionPerformed: (ImeAction, SoftwareKeyboardController?) -> Unit = { _, _ -> },
+ onFocusChanged: (Boolean) -> Unit = {},
+ onTextInputStarted: (SoftwareKeyboardController) -> Unit = {},
+ activeColor: Color = MaterialTheme.colors.primary,
+ inactiveColor: Color = MaterialTheme.colors.onSurface,
+ errorColor: Color = MaterialTheme.colors.error,
+ backgroundColor: Color = MaterialTheme.colors.onSurface,
+ shape: Shape =
+ MaterialTheme.shapes.small.copy(bottomLeft = ZeroCornerSize, bottomRight = ZeroCornerSize)
+) {
+ TextField(
+ value = value,
+ >
+ label = label,
+ modifier = modifier,
+ textStyle = textStyle,
+ placeholder = placeholder,
+ leadingIcon = leadingIcon,
+ trailingIcon = trailingIcon,
+ isErrorValue = isErrorValue,
+ visualTransformation = visualTransformation,
+ keyboardType = keyboardType,
+ imeAction = imeAction,
+ >
+ >
+ >
+ activeColor = activeColor,
+ inactiveColor = inactiveColor,
+ errorColor = errorColor,
+ backgroundColor = backgroundColor,
+ shape = shape
+ )
+}
+
@Composable
internal fun FilledTextFieldLayout(
textFieldModifier: Modifier = Modifier,
@@ -354,7 +646,7 @@
}
/**
- * Layout of the text field, label and placeholder part in [FilledTextField]
+ * Layout of the text field, label and placeholder part in [TextField]
*/
@Composable
private fun TextFieldWithLabelLayout(
@@ -430,7 +722,7 @@
}
/**
- * Layout of the leading and trailing icons and the text field part in [FilledTextField].
+ * Layout of the leading and trailing icons and the text field part in [TextField].
* It differs from the Row as it does not lose the minHeight constraint which is needed to
* correctly place the text field and label.
* Should be revisited if b/154202249 is fixed so that Row could be used instead
@@ -517,7 +809,7 @@
/**
* Places the provided text field, placeholder and label with respect to the baseline offsets in
- * [FilledTextField]
+ * [TextField]
*/
private fun Placeable.PlacementScope.placeLabelAndTextfield(
width: Int,
@@ -545,7 +837,7 @@
}
/**
- * Places the provided text field and placeholder center vertically in [FilledTextField]
+ * Places the provided text field and placeholder center vertically in [TextField]
*/
private fun Placeable.PlacementScope.placeTextfield(
height: Int,
@@ -563,7 +855,7 @@
}
/**
- * A draw modifier that draws a bottom indicator line in [FilledTextField]
+ * A draw modifier that draws a bottom indicator line in [TextField]
*/
private fun Modifier.drawIndicatorLine(lineWidth: Dp, color: Color): Modifier {
return drawBehind {
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/TextFieldImpl.kt b/ui/ui-material/src/main/java/androidx/ui/material/TextFieldImpl.kt
index 44581d7..d2373ef 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/TextFieldImpl.kt
+++ b/ui/ui-material/src/main/java/androidx/ui/material/TextFieldImpl.kt
@@ -54,7 +54,8 @@
import androidx.ui.core.offset
import androidx.ui.foundation.ContentColorAmbient
import androidx.ui.foundation.ProvideTextStyle
-import androidx.ui.foundation.TextField
+import androidx.ui.foundation.BaseTextField
+import androidx.ui.foundation.ExperimentalFoundationApi
import androidx.ui.foundation.clickable
import androidx.ui.foundation.gestures.rememberScrollableController
import androidx.ui.foundation.gestures.scrollable
@@ -82,9 +83,10 @@
}
/**
- * Implementation of the [FilledTextField] and [OutlinedTextField]
+ * Implementation of the [TextField] and [OutlinedTextField]
*/
@Composable
+@OptIn(ExperimentalFoundationApi::class)
internal fun TextFieldImpl(
type: TextFieldType,
value: TextFieldValue,
@@ -146,7 +148,7 @@
},
modifier = tagModifier
) {
- TextField(
+ BaseTextField(
value = value,
modifier = focusModifier,
textStyle = textStyle,
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/ErrorMessagesTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/ErrorMessagesTest.kt
index 4036a2a..1564f0f 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/ErrorMessagesTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/ErrorMessagesTest.kt
@@ -54,6 +54,8 @@
"Node #X at (X, X, X, X)px, Tag: 'MyButton'\n" +
"Disabled = 'kotlin.Unit'\n" +
"Text = 'Toggle'\n" +
+ "GetTextLayoutResult = 'AccessibilityAction(label=null, action=Function1<" +
+ "java.util.List<androidx.ui.text.TextLayoutResult>, java.lang.Boolean>)'\n" +
"MergeDescendants = 'true'\n" +
"Has 1 sibling\n" +
"Selector used: (TestTag = 'MyButton')"
@@ -229,6 +231,8 @@
"The node is no longer in the tree, last known semantics:\n" +
"Node #X at (X, X, X, X)px\n" +
"Text = 'Hello'\n" +
+ "GetTextLayoutResult = 'AccessibilityAction(label=null, action=Function1<" +
+ "java.util.List<androidx.ui.text.TextLayoutResult>, java.lang.Boolean>)'\n" +
"Has 1 sibling\n" +
"Original selector: Text = 'Hello' (ignoreCase: false)"
) {
@@ -254,6 +258,8 @@
"The node is no longer in the tree, last known semantics:\n" +
"Node #X at (X, X, X, X)px\n" +
"Text = 'Hello'\n" +
+ "GetTextLayoutResult = 'AccessibilityAction(label=null, action=Function1<" +
+ "java.util.List<androidx.ui.text.TextLayoutResult>, java.lang.Boolean>)'\n" +
"Has 1 sibling\n" +
"Original selector: Text = 'Hello' (ignoreCase: false)"
) {
@@ -279,6 +285,8 @@
"The node is no longer in the tree, last known semantics:\n" +
"Node #X at (X, X, X, X)px\n" +
"Text = 'Hello'\n" +
+ "GetTextLayoutResult = 'AccessibilityAction(label=null, action=Function1<" +
+ "java.util.List<androidx.ui.text.TextLayoutResult>, java.lang.Boolean>)'\n" +
"Has 1 sibling\n" +
"Original selector: Text = 'Hello' (ignoreCase: false)"
) {
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/PrintToStringTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/PrintToStringTest.kt
index afd122c..6da687b 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/PrintToStringTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/PrintToStringTest.kt
@@ -69,6 +69,8 @@
assertThat(obfuscateNodesInfo(result)).isEqualTo("" +
"Node #X at (X, X, X, X)px\n" +
"Text = 'Hello'\n" +
+ "GetTextLayoutResult = 'AccessibilityAction(label=null, action=Function1<java" +
+ ".util.List<androidx.ui.text.TextLayoutResult>, java.lang.Boolean>)'\n" +
"Has 1 sibling")
}
@@ -85,9 +87,13 @@
assertThat(obfuscateNodesInfo(result)).isEqualTo("" +
"1) Node #X at (X, X, X, X)px\n" +
"Text = 'Hello'\n" +
+ "GetTextLayoutResult = 'AccessibilityAction(label=null, action=Function1<java" +
+ ".util.List<androidx.ui.text.TextLayoutResult>, java.lang.Boolean>)'\n" +
"Has 1 sibling\n" +
"2) Node #X at (X, X, X, X)px\n" +
"Text = 'World'\n" +
+ "GetTextLayoutResult = 'AccessibilityAction(label=null, action=Function1<java" +
+ ".util.List<androidx.ui.text.TextLayoutResult>, java.lang.Boolean>)'\n" +
"Has 1 sibling")
}
@@ -117,9 +123,15 @@
" | \n" +
" | Text = 'Button'\n" +
+ " | GetTextLayoutResult = 'AccessibilityAction(label=null, " +
+ "action=Function1<java.util.List<androidx.ui.text.TextLayoutResult>, java.lang" +
+ ".Boolean>)'\n" +
" | MergeDescendants = 'true'\n" +
" |-Node #X at (X, X, X, X)px\n" +
- " Text = 'Hello'")
+ " Text = 'Hello'\n" +
+ " GetTextLayoutResult = 'AccessibilityAction(label=null, " +
+ "action=Function1<java.util.List<androidx.ui.text.TextLayoutResult>, java.lang" +
+ ".Boolean>)'")
}
@Test
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/TextActionsTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/TextActionsTest.kt
index c92a955..4dedfed 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/TextActionsTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/TextActionsTest.kt
@@ -21,7 +21,8 @@
import androidx.test.filters.MediumTest
import androidx.ui.core.Modifier
import androidx.ui.core.testTag
-import androidx.ui.foundation.TextField
+import androidx.ui.foundation.BaseTextField
+import androidx.ui.foundation.ExperimentalFoundationApi
import androidx.ui.input.ImeAction
import androidx.ui.input.TextFieldValue
import androidx.ui.test.util.BoundaryNode
@@ -43,13 +44,14 @@
val composeTestRule = createComposeRule()
@Composable
+ @OptIn(ExperimentalFoundationApi::class)
fun TextFieldUi(
imeAction: ImeAction = ImeAction.Unspecified,
onImeActionPerformed: (ImeAction) -> Unit = {},
textCallback: (String) -> Unit = {}
) {
val state = state { TextFieldValue("") }
- TextField(
+ BaseTextField(
modifier = Modifier.testTag(fieldTag),
value = state.value,
imeAction = imeAction,
diff --git a/ui/ui-text/integration-tests/ui-text-compose-demos/build.gradle b/ui/ui-text/integration-tests/ui-text-compose-demos/build.gradle
index fa9965d..ac9c41b 100644
--- a/ui/ui-text/integration-tests/ui-text-compose-demos/build.gradle
+++ b/ui/ui-text/integration-tests/ui-text-compose-demos/build.gradle
@@ -19,6 +19,7 @@
implementation project(":compose:ui:ui")
implementation project(":compose:foundation:foundation")
implementation project(":compose:foundation:foundation-layout")
+ implementation project(":compose:foundation:foundation-text")
implementation project(":compose:ui:ui-text")
implementation project(":compose:ui:ui-text:samples")
}
diff --git a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/ui/text/demos/ComposeInputField.kt b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/ui/text/demos/ComposeInputField.kt
index 3dd01e0..c705658 100644
--- a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/ui/text/demos/ComposeInputField.kt
+++ b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/ui/text/demos/ComposeInputField.kt
@@ -20,11 +20,11 @@
import androidx.compose.key
import androidx.compose.state
import androidx.ui.foundation.ScrollableColumn
-import androidx.ui.foundation.TextField
import androidx.ui.input.ImeAction
import androidx.ui.input.KeyboardType
import androidx.ui.input.TextFieldValue
import androidx.ui.savedinstancestate.savedInstanceState
+import androidx.ui.text.CoreTextField
import androidx.ui.text.SoftwareKeyboardController
import androidx.ui.text.TextStyle
@@ -82,7 +82,7 @@
) {
val controller = state<SoftwareKeyboardController?> { null }
val state = savedInstanceState(saver = TextFieldValue.Saver) { TextFieldValue() }
- TextField(
+ CoreTextField(
value = state.value,
keyboardType = keyboardType,
imeAction = imeAction,
diff --git a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/ui/text/demos/ComposeInputFieldFocusTransition.kt b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/ui/text/demos/ComposeInputFieldFocusTransition.kt
index e3140a6..d9dc8b4 100644
--- a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/ui/text/demos/ComposeInputFieldFocusTransition.kt
+++ b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/ui/text/demos/ComposeInputFieldFocusTransition.kt
@@ -20,11 +20,11 @@
import androidx.compose.state
import androidx.ui.core.focus.FocusModifier
import androidx.ui.foundation.ScrollableColumn
-import androidx.ui.foundation.TextField
import androidx.ui.graphics.Color
import androidx.ui.input.ImeAction
import androidx.ui.input.TextFieldValue
import androidx.ui.savedinstancestate.savedInstanceState
+import androidx.ui.text.CoreTextField
import androidx.ui.text.TextStyle
import androidx.ui.unit.sp
@@ -59,11 +59,10 @@
} else {
Color.Black
}
- TextField(
+ CoreTextField(
value = state.value,
modifier = focusModifier,
- textColor = color,
- textStyle = TextStyle(fontSize = 32.sp),
+ textStyle = TextStyle(color = color, fontSize = 32.sp),
>
state.value = it
},
diff --git a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/ui/text/demos/ComposeInputFieldTrickyUseCase.kt b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/ui/text/demos/ComposeInputFieldTrickyUseCase.kt
index 012c2ec..e12b0da 100644
--- a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/ui/text/demos/ComposeInputFieldTrickyUseCase.kt
+++ b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/ui/text/demos/ComposeInputFieldTrickyUseCase.kt
@@ -18,10 +18,10 @@
import androidx.compose.Composable
import androidx.ui.foundation.ScrollableColumn
-import androidx.ui.foundation.TextField
import androidx.ui.input.KeyboardType
import androidx.ui.input.TextFieldValue
import androidx.ui.savedinstancestate.savedInstanceState
+import androidx.ui.text.CoreTextField
import androidx.ui.text.TextStyle
import androidx.ui.unit.sp
@@ -39,7 +39,7 @@
@Composable
private fun RejectNonDigits() {
val state = savedInstanceState(saver = TextFieldValue.Saver) { TextFieldValue() }
- TextField(
+ CoreTextField(
value = state.value,
textStyle = TextStyle(fontSize = 32.sp),
>
@@ -54,7 +54,7 @@
@Composable
private fun RejectComposition() {
val state = savedInstanceState(saver = TextFieldValue.Saver) { TextFieldValue() }
- TextField(
+ CoreTextField(
value = state.value,
textStyle = TextStyle(fontSize = 32.sp),
>
diff --git a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/ui/text/demos/ComposeVariousInputField.kt b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/ui/text/demos/ComposeVariousInputField.kt
index 3fc0785..24c9c19 100644
--- a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/ui/text/demos/ComposeVariousInputField.kt
+++ b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/ui/text/demos/ComposeVariousInputField.kt
@@ -27,7 +27,6 @@
import androidx.ui.foundation.Box
import androidx.ui.foundation.ScrollableColumn
import androidx.ui.foundation.Text
-import androidx.ui.foundation.TextField
import androidx.ui.foundation.background
import androidx.ui.geometry.Rect
import androidx.ui.graphics.Color
@@ -41,6 +40,7 @@
import androidx.ui.intl.LocaleList
import androidx.ui.savedinstancestate.savedInstanceState
import androidx.ui.text.AnnotatedString
+import androidx.ui.text.CoreTextField
import androidx.ui.text.TextLayoutResult
import androidx.ui.text.TextRange
import androidx.ui.text.TextStyle
@@ -261,7 +261,7 @@
visualTransformation: VisualTransformation
) {
val state = savedInstanceState(saver = TextFieldValue.Saver) { TextFieldValue() }
- TextField(
+ CoreTextField(
value = state.value,
keyboardType = keyboardType,
imeAction = imeAction,
@@ -289,7 +289,7 @@
val state = savedInstanceState(saver = TextFieldValue.Saver) { TextFieldValue() }
val inputField = @Composable {
- TextField(
+ CoreTextField(
modifier = Modifier.layoutId("inputField"),
value = state.value,
state.value = it },
@@ -320,7 +320,7 @@
val state = savedInstanceState(saver = TextFieldValue.Saver) { TextFieldValue() }
val layoutResult = state<TextLayoutResult?> { null }
Layout({
- TextField(
+ CoreTextField(
modifier = Modifier.layoutId("inputField"),
value = state.value,
state.value = it },
@@ -348,7 +348,7 @@
)
// Place the custom cursor aligned with center of the original cursor.
val cursorX = (cursorRect.left + cursorRect.right) / 2 -
- (cursorPlacable.width / 2)
+ (cursorPlacable.width / 2)
cursorPlacable.place(cursorX.roundToInt(), cursorRect.top.roundToInt())
}
}
diff --git a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/ui/text/demos/TailFollowingTextField.kt b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/ui/text/demos/TailFollowingTextField.kt
index ff406da..c9fda8d 100644
--- a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/ui/text/demos/TailFollowingTextField.kt
+++ b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/ui/text/demos/TailFollowingTextField.kt
@@ -22,7 +22,6 @@
import androidx.ui.core.Modifier
import androidx.ui.core.clipToBounds
import androidx.ui.core.constrainWidth
-import androidx.ui.foundation.TextField
import androidx.ui.foundation.background
import androidx.ui.graphics.Color
import androidx.ui.input.TextFieldValue
@@ -31,6 +30,7 @@
import androidx.ui.layout.height
import androidx.ui.layout.padding
import androidx.ui.savedinstancestate.savedInstanceState
+import androidx.ui.text.CoreTextField
import androidx.ui.text.TextStyle
import androidx.ui.unit.dp
import androidx.ui.unit.min
@@ -77,7 +77,7 @@
) {
Layout(
children = @Composable {
- TextField(
+ CoreTextField(
value = value,
>
textStyle = textStyle
@@ -113,7 +113,7 @@
) {
Layout(
children = @Composable {
- TextField(
+ CoreTextField(
value = value,
>
textStyle = textStyle
diff --git a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/ui/text/demos/TextFieldWIthScroller.kt b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/ui/text/demos/TextFieldWIthScroller.kt
index ab7feb5..1cd7674 100644
--- a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/ui/text/demos/TextFieldWIthScroller.kt
+++ b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/ui/text/demos/TextFieldWIthScroller.kt
@@ -20,9 +20,9 @@
import androidx.compose.state
import androidx.ui.core.Modifier
import androidx.ui.foundation.ScrollableColumn
-import androidx.ui.foundation.TextField
import androidx.ui.input.TextFieldValue
import androidx.ui.layout.padding
+import androidx.ui.text.CoreTextField
import androidx.ui.unit.dp
@Composable
@@ -33,7 +33,7 @@
text = List(100) { "Line: $it" }.joinToString("\n")
)
}
- TextField(
+ CoreTextField(
value = state.value,
state.value = it },
modifier = Modifier
diff --git a/ui/ui-text/src/commonMain/kotlin/androidx/ui/text/CoreText.kt b/ui/ui-text/src/commonMain/kotlin/androidx/ui/text/CoreText.kt
index 31c9e93..97f1d54 100644
--- a/ui/ui-text/src/commonMain/kotlin/androidx/ui/text/CoreText.kt
+++ b/ui/ui-text/src/commonMain/kotlin/androidx/ui/text/CoreText.kt
@@ -35,10 +35,12 @@
import androidx.ui.core.onPositioned
import androidx.ui.core.selection.Selectable
import androidx.ui.core.selection.SelectionRegistrarAmbient
+import androidx.ui.core.semantics.semantics
import androidx.ui.geometry.Offset
import androidx.ui.graphics.Color
import androidx.ui.graphics.drawscope.drawCanvas
import androidx.ui.graphics.Paint
+import androidx.ui.semantics.getTextLayoutResult
import androidx.ui.text.font.Font
import androidx.ui.text.selection.MultiWidgetSelectionDelegate
import androidx.ui.text.style.TextAlign
@@ -151,6 +153,15 @@
}
state.previousGlobalPosition = newGlobalPosition
}
+ }.semantics {
+ getTextLayoutResult {
+ if (state.layoutResult != null) {
+ it.add(state.layoutResult!!)
+ true
+ } else {
+ false
+ }
+ }
},
minIntrinsicWidthMeasureBlock = { _, _ ->
state.textDelegate.layoutIntrinsics(layoutDirection)
diff --git a/ui/ui-text/src/commonMain/kotlin/androidx/ui/text/CoreTextField.kt b/ui/ui-text/src/commonMain/kotlin/androidx/ui/text/CoreTextField.kt
index 62ce6bd..f677d38 100644
--- a/ui/ui-text/src/commonMain/kotlin/androidx/ui/text/CoreTextField.kt
+++ b/ui/ui-text/src/commonMain/kotlin/androidx/ui/text/CoreTextField.kt
@@ -61,6 +61,7 @@
import androidx.ui.text.selection.TextFieldSelectionManager
import kotlin.math.max
import androidx.ui.semantics.focused
+import androidx.ui.semantics.getTextLayoutResult
import androidx.ui.semantics.setSelection
import androidx.ui.semantics.setText
import androidx.ui.semantics.text
@@ -342,7 +343,7 @@
}
val semanticsModifier = semanticsModifier(value, imeAction, focusModifier,
- onValueChangeWrapper)
+ state, onValueChangeWrapper)
onDispose { manager.hideSelectionToolbar() }
@@ -507,6 +508,7 @@
value: TextFieldValue,
imeAction: ImeAction,
focusModifier: FocusModifier,
+ state: TextFieldState,
onValueChange: (TextFieldValue) -> Unit
): Modifier {
return Modifier.semantics {
@@ -515,6 +517,14 @@
this.text = AnnotatedString(value.text)
this.textSelectionRange = value.selection
this.focused = focusModifier.focusState == FocusState.Focused
+ getTextLayoutResult {
+ if (state.layoutResult != null) {
+ it.add(state.layoutResult!!)
+ true
+ } else {
+ false
+ }
+ }
setText {
onValueChange(TextFieldValue(it.text, TextRange(it.text.length)))
true
diff --git a/work/workmanager-ktx/src/main/java/androidx/work/CoroutineWorker.kt b/work/workmanager-ktx/src/main/java/androidx/work/CoroutineWorker.kt
index fa05791..22f8775 100644
--- a/work/workmanager-ktx/src/main/java/androidx/work/CoroutineWorker.kt
+++ b/work/workmanager-ktx/src/main/java/androidx/work/CoroutineWorker.kt
@@ -100,7 +100,7 @@
/**
* Makes the [CoroutineWorker] run in the context of a foreground [android.app.Service]. This
- * is a suspending function unlike the [setProgressAsync] API which returns a
+ * is a suspending function unlike the [setForegroundAsync] API which returns a
* [ListenableFuture].
*
* @param foregroundInfo The [ForegroundInfo]