Merge "Update WorkManager to 2.3.0-beta01." into androidx-master-dev
diff --git a/activity/activity/src/main/java/androidx/activity/ComponentActivity.java b/activity/activity/src/main/java/androidx/activity/ComponentActivity.java
index cee2d27..56a1cc3 100644
--- a/activity/activity/src/main/java/androidx/activity/ComponentActivity.java
+++ b/activity/activity/src/main/java/androidx/activity/ComponentActivity.java
@@ -177,7 +177,9 @@
*/
@Override
@Nullable
+ @SuppressWarnings("deprecation")
public final Object onRetainNonConfigurationInstance() {
+ // Maintain backward compatibility.
Object custom = onRetainCustomNonConfigurationInstance();
ViewModelStore viewModelStore = mViewModelStore;
diff --git a/appcompat/src/main/java/androidx/appcompat/app/AppCompatActivity.java b/appcompat/src/main/java/androidx/appcompat/app/AppCompatActivity.java
index 8bd4720..2340c83 100644
--- a/appcompat/src/main/java/androidx/appcompat/app/AppCompatActivity.java
+++ b/appcompat/src/main/java/androidx/appcompat/app/AppCompatActivity.java
@@ -258,6 +258,7 @@
return getDelegate().requestWindowFeature(featureId);
}
+ @SuppressWarnings("deprecation")
@Override
public void supportInvalidateOptionsMenu() {
getDelegate().invalidateOptionsMenu();
@@ -487,6 +488,7 @@
NavUtils.navigateUpTo(this, upIntent);
}
+ @SuppressWarnings("deprecation")
@Override
public void onContentChanged() {
// Call onSupportContentChanged() for legacy reasons
diff --git a/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegate.java b/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegate.java
index 1353953..61a1936 100644
--- a/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegate.java
+++ b/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegate.java
@@ -118,6 +118,7 @@
/**
* @deprecated Use {@link AppCompatDelegate#MODE_NIGHT_AUTO_TIME} instead
*/
+ @SuppressWarnings("deprecation")
@Deprecated
public static final int MODE_NIGHT_AUTO = MODE_NIGHT_AUTO_TIME;
@@ -167,6 +168,7 @@
private static final Object sActiveDelegatesLock = new Object();
/** @hide */
+ @SuppressWarnings("deprecation")
@RestrictTo(LIBRARY_GROUP_PREFIX)
@IntDef({MODE_NIGHT_NO, MODE_NIGHT_YES, MODE_NIGHT_AUTO_TIME, MODE_NIGHT_FOLLOW_SYSTEM,
MODE_NIGHT_UNSPECIFIED, MODE_NIGHT_AUTO_BATTERY})
@@ -543,6 +545,7 @@
* @see #setLocalNightMode(int)
* @see #getDefaultNightMode()
*/
+ @SuppressWarnings("deprecation")
public static void setDefaultNightMode(@NightMode int mode) {
switch (mode) {
case MODE_NIGHT_NO:
diff --git a/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegateImpl.java b/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegateImpl.java
index 95b2cf3..bfa0f2b 100644
--- a/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegateImpl.java
+++ b/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegateImpl.java
@@ -2182,6 +2182,7 @@
return applyDayNight(true, null);
}
+ @SuppressWarnings("deprecation")
private boolean applyDayNight(final boolean allowRecreation,
@Nullable Configuration configOverlay) {
if (mIsDestroyed) {
@@ -2222,6 +2223,7 @@
return mLocalNightMode;
}
+ @SuppressWarnings("deprecation")
@ApplyableNightMode
int mapNightMode(@NightMode final int mode) {
switch (mode) {
diff --git a/biometric/api/restricted_1.1.0-alpha01.txt b/biometric/api/restricted_1.1.0-alpha01.txt
index cf9f995..7af17fe 100644
--- a/biometric/api/restricted_1.1.0-alpha01.txt
+++ b/biometric/api/restricted_1.1.0-alpha01.txt
@@ -63,6 +63,5 @@
-
}
diff --git a/biometric/api/restricted_current.txt b/biometric/api/restricted_current.txt
index cf9f995..7af17fe 100644
--- a/biometric/api/restricted_current.txt
+++ b/biometric/api/restricted_current.txt
@@ -63,6 +63,5 @@
-
}
diff --git a/biometric/res/values/devices.xml b/biometric/res/values/devices.xml
index 5ddac9e..fdc4460 100644
--- a/biometric/res/values/devices.xml
+++ b/biometric/res/values/devices.xml
@@ -45,9 +45,9 @@
</string-array>
<!--
- List of known device models for which FingerprintDialogFragment should always be dismissed
- instantly. This is intended to improve responsiveness on devices for which this dialog is
- needed as a workaround but which otherwise display a custom UI, such as an overlay.
+ List of known device models for which FingerprintDialogFragment should be hidden. This is
+ intended to improve the experience on devices for which this dialog is needed as a workaround
+ but which display a custom UI, such as an overlay, when FingerprintManager is invoked.
-->
<string-array name="hide_fingerprint_instantly_prefixes">
<item>SM-G97</item> <!-- Samsung Galaxy S10/S10+ -->
diff --git a/biometric/src/main/AndroidManifest.xml b/biometric/src/main/AndroidManifest.xml
index d61555c..c567445 100644
--- a/biometric/src/main/AndroidManifest.xml
+++ b/biometric/src/main/AndroidManifest.xml
@@ -18,6 +18,7 @@
<uses-permission android:name="android.permission.USE_BIOMETRIC" />
+ <!--suppress DeprecatedClassUsageInspection -->
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
<application>
diff --git a/biometric/src/main/java/androidx/biometric/BiometricPrompt.java b/biometric/src/main/java/androidx/biometric/BiometricPrompt.java
index 0ef8f70..6995406 100644
--- a/biometric/src/main/java/androidx/biometric/BiometricPrompt.java
+++ b/biometric/src/main/java/androidx/biometric/BiometricPrompt.java
@@ -323,10 +323,7 @@
* {@link DeviceCredentialHandlerActivity}. This lets us handle the result of {@link
* android.app.KeyguardManager#createConfirmDeviceCredentialIntent(CharSequence,
* CharSequence)} in order to allow device credentials for <= P.
- *
- * @hide
*/
- @RestrictTo(RestrictTo.Scope.LIBRARY)
@NonNull
Builder setHandlingDeviceCredentialResult(boolean isHandling) {
mBundle.putBoolean(KEY_HANDLING_DEVICE_CREDENTIAL_RESULT, isHandling);
@@ -750,11 +747,14 @@
mFingerprintDialogFragment.setNegativeButtonListener(mNegativeButtonListener);
mFingerprintDialogFragment.setBundle(bundle);
- if (fingerprintDialogFragment == null) {
- mFingerprintDialogFragment.show(fragmentManager, DIALOG_FRAGMENT_TAG);
- } else if (mFingerprintDialogFragment.isDetached()) {
- fragmentManager.beginTransaction().attach(mFingerprintDialogFragment)
- .commitAllowingStateLoss();
+
+ if (activity != null && !Utils.shouldHideFingerprintDialog(activity, Build.MODEL)) {
+ if (fingerprintDialogFragment == null) {
+ mFingerprintDialogFragment.show(fragmentManager, DIALOG_FRAGMENT_TAG);
+ } else if (mFingerprintDialogFragment.isDetached()) {
+ fragmentManager.beginTransaction().attach(mFingerprintDialogFragment)
+ .commitAllowingStateLoss();
+ }
}
// Create the connection to FingerprintManager
diff --git a/biometric/src/main/java/androidx/biometric/DeviceCredentialHandlerBridge.java b/biometric/src/main/java/androidx/biometric/DeviceCredentialHandlerBridge.java
index 821ad7a..0fd3735 100644
--- a/biometric/src/main/java/androidx/biometric/DeviceCredentialHandlerBridge.java
+++ b/biometric/src/main/java/androidx/biometric/DeviceCredentialHandlerBridge.java
@@ -23,7 +23,6 @@
import androidx.annotation.IntDef;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
-import androidx.annotation.RestrictTo;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -33,11 +32,8 @@
* Singleton class to facilitate communication between the {@link BiometricPrompt} for the client
* activity and the one attached to {@link DeviceCredentialHandlerActivity} when allowing device
* credential authentication prior to Q.
- *
- * @hide
*/
-@RestrictTo(RestrictTo.Scope.LIBRARY)
-public class DeviceCredentialHandlerBridge {
+class DeviceCredentialHandlerBridge {
@Nullable
private static DeviceCredentialHandlerBridge sInstance;
diff --git a/biometric/src/main/java/androidx/biometric/FingerprintDialogFragment.java b/biometric/src/main/java/androidx/biometric/FingerprintDialogFragment.java
index bf7dae2..00d4a78 100644
--- a/biometric/src/main/java/androidx/biometric/FingerprintDialogFragment.java
+++ b/biometric/src/main/java/androidx/biometric/FingerprintDialogFragment.java
@@ -119,7 +119,7 @@
case DISPLAYED_FOR_500_MS:
final Context context = getContext();
mDismissInstantly =
- context != null && Utils.shouldAlwaysHideFingerprintDialogInstantly(
+ context != null && Utils.shouldHideFingerprintDialog(
context, Build.MODEL);
break;
}
@@ -330,7 +330,7 @@
* the result of {@link Utils#shouldAlwaysHideFingerprintDialogInstantly(String)}.
*/
static int getHideDialogDelay(Context context) {
- return context != null && Utils.shouldAlwaysHideFingerprintDialogInstantly(
+ return context != null && Utils.shouldHideFingerprintDialog(
context, Build.MODEL) ? 0 : MESSAGE_DISPLAY_TIME_MS;
}
@@ -373,6 +373,11 @@
}
private void updateFingerprintIcon(int newState) {
+ // May be null if we're intentionally suppressing the dialog.
+ if (mFingerprintIcon == null) {
+ return;
+ }
+
// Devices older than this do not have FP support (and also do not support SVG), so it's
// fine for this to be a no-op. An error is returned immediately and the dialog is not
// shown.
@@ -398,8 +403,12 @@
private void handleShowHelp(CharSequence msg) {
updateFingerprintIcon(STATE_FINGERPRINT_ERROR);
mHandler.removeMessages(MSG_RESET_MESSAGE);
- mErrorText.setTextColor(mErrorColor);
- mErrorText.setText(msg);
+
+ // May be null if we're intentionally suppressing the dialog.
+ if (mErrorText != null) {
+ mErrorText.setTextColor(mErrorColor);
+ mErrorText.setText(msg);
+ }
// Reset the text after a delay
mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_RESET_MESSAGE),
@@ -409,8 +418,12 @@
private void handleShowError(CharSequence msg) {
updateFingerprintIcon(STATE_FINGERPRINT_ERROR);
mHandler.removeMessages(MSG_RESET_MESSAGE);
- mErrorText.setTextColor(mErrorColor);
- mErrorText.setText(msg);
+
+ // May be null if we're intentionally suppressing the dialog.
+ if (mErrorText != null) {
+ mErrorText.setTextColor(mErrorColor);
+ mErrorText.setText(msg);
+ }
// Dismiss the dialog after a delay
mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_DISMISS_DIALOG_ERROR),
@@ -418,11 +431,14 @@
}
private void dismissAfterDelay(CharSequence msg) {
- mErrorText.setTextColor(mErrorColor);
- if (msg != null) {
- mErrorText.setText(msg);
- } else {
- mErrorText.setText(R.string.fingerprint_error_lockout);
+ // May be null if we're intentionally suppressing the dialog.
+ if (mErrorText != null) {
+ mErrorText.setTextColor(mErrorColor);
+ if (msg != null) {
+ mErrorText.setText(msg);
+ } else {
+ mErrorText.setText(R.string.fingerprint_error_lockout);
+ }
}
mHandler.postDelayed(new Runnable() {
@@ -446,7 +462,11 @@
private void handleResetMessage() {
updateFingerprintIcon(STATE_FINGERPRINT);
- mErrorText.setTextColor(mTextColor);
- mErrorText.setText(mContext.getString(R.string.fingerprint_dialog_touch_sensor));
+
+ // May be null if we're intentionally suppressing the dialog.
+ if (mErrorText != null) {
+ mErrorText.setTextColor(mTextColor);
+ mErrorText.setText(mContext.getString(R.string.fingerprint_dialog_touch_sensor));
+ }
}
}
diff --git a/biometric/src/main/java/androidx/biometric/Utils.java b/biometric/src/main/java/androidx/biometric/Utils.java
index f285954..6375220 100644
--- a/biometric/src/main/java/androidx/biometric/Utils.java
+++ b/biometric/src/main/java/androidx/biometric/Utils.java
@@ -27,13 +27,8 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
-import androidx.annotation.RestrictTo;
import androidx.fragment.app.FragmentActivity;
-/**
- * @hide
- */
-@RestrictTo(RestrictTo.Scope.LIBRARY)
class Utils {
// Private constructor to prevent instantiation.
private Utils() {
@@ -185,8 +180,7 @@
* @return true if {@link FingerprintDialogFragment} should always be dismissed immediately, or
* false otherwise.
*/
- static boolean shouldAlwaysHideFingerprintDialogInstantly(@NonNull Context context,
- String model) {
+ static boolean shouldHideFingerprintDialog(@NonNull Context context, String model) {
if (Build.VERSION.SDK_INT != Build.VERSION_CODES.P) {
// This workaround is only needed for API 28.
return false;
diff --git a/browser/src/main/java/androidx/browser/browseractions/BrowserActionItem.java b/browser/src/main/java/androidx/browser/browseractions/BrowserActionItem.java
index 451aeb8..8b04a7e 100644
--- a/browser/src/main/java/androidx/browser/browseractions/BrowserActionItem.java
+++ b/browser/src/main/java/androidx/browser/browseractions/BrowserActionItem.java
@@ -33,6 +33,7 @@
*
* @deprecated Browser Actions are deprecated as of release 1.2.0.
*/
+@SuppressWarnings("deprecation")
@Deprecated
public class BrowserActionItem {
private final String mTitle;
diff --git a/browser/src/main/java/androidx/browser/browseractions/BrowserActionsIntent.java b/browser/src/main/java/androidx/browser/browseractions/BrowserActionsIntent.java
index 9ddd684..94e55c9 100644
--- a/browser/src/main/java/androidx/browser/browseractions/BrowserActionsIntent.java
+++ b/browser/src/main/java/androidx/browser/browseractions/BrowserActionsIntent.java
@@ -53,6 +53,7 @@
*
* @deprecated Browser Actions are deprecated as of release 1.2.0.
*/
+@SuppressWarnings("deprecation")
@Deprecated
public class BrowserActionsIntent {
private static final String TAG = "BrowserActions";
diff --git a/buildSrc/build_dependencies.gradle b/buildSrc/build_dependencies.gradle
index 8acd5ed..7d9e81a 100644
--- a/buildSrc/build_dependencies.gradle
+++ b/buildSrc/build_dependencies.gradle
@@ -25,8 +25,8 @@
build_versions.lint = "27.0.0-alpha01"
} else {
build_versions.kotlin = "1.3.41"
- build_versions.agp = "3.6.0-beta01"
- build_versions.lint = "26.6.0-beta01"
+ build_versions.agp = "3.6.0-beta02"
+ build_versions.lint = "26.6.0-beta02"
}
build_versions.dokka = '0.9.17-g002'
diff --git a/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt b/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt
index 34ad30a..1464818 100644
--- a/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt
@@ -64,7 +64,7 @@
val HEIFWRITER = Version("1.1.0-alpha01")
val INSPECTION = Version("1.0.0-alpha01")
val INTERPOLATOR = Version("1.1.0-alpha01")
- val JETIFIER = Version("1.0.0-beta08")
+ val JETIFIER = Version("1.0.0-beta09")
val LEANBACK = Version("1.1.0-alpha03")
val LEANBACK_PREFERENCE = Version("1.1.0-alpha03")
val LEGACY = Version("1.1.0-alpha01")
diff --git a/buildSrc/src/main/kotlin/androidx/build/PublishDocsRules.kt b/buildSrc/src/main/kotlin/androidx/build/PublishDocsRules.kt
index 5a76201..53274b2 100644
--- a/buildSrc/src/main/kotlin/androidx/build/PublishDocsRules.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/PublishDocsRules.kt
@@ -31,22 +31,22 @@
prebuilts(LibraryGroups.ACTIVITY, "1.1.0-rc02")
prebuilts(LibraryGroups.ADS, "1.0.0-alpha02")
prebuilts(LibraryGroups.ANNOTATION, "annotation", "1.1.0")
- prebuilts(LibraryGroups.ANNOTATION, "annotation-experimental", "1.0.0-rc01")
- prebuilts(LibraryGroups.ANNOTATION, "annotation-experimental-lint", "1.0.0-rc01")
+ prebuilts(LibraryGroups.ANNOTATION, "annotation-experimental", "1.0.0")
+ prebuilts(LibraryGroups.ANNOTATION, "annotation-experimental-lint", "1.0.0")
prebuilts(LibraryGroups.APPCOMPAT, "1.1.0")
prebuilts(LibraryGroups.ARCH_CORE, "2.1.0")
prebuilts(LibraryGroups.ASYNCLAYOUTINFLATER, "1.0.0")
prebuilts(LibraryGroups.AUTOFILL, "1.0.0-rc01")
ignore(LibraryGroups.BENCHMARK.group, "benchmark-gradle-plugin")
prebuilts(LibraryGroups.BENCHMARK, "1.0.0-rc01")
- prebuilts(LibraryGroups.BIOMETRIC, "biometric", "1.0.0-rc02")
+ prebuilts(LibraryGroups.BIOMETRIC, "biometric", "1.0.0")
prebuilts(LibraryGroups.BROWSER, "1.2.0-alpha09")
ignore(LibraryGroups.CAMERA.group, "camera-testing")
ignore(LibraryGroups.CAMERA.group, "camera-extensions-stub")
ignore(LibraryGroups.CAMERA.group, "camera-testlib-extensions")
- prebuilts(LibraryGroups.CAMERA, "camera-view", "1.0.0-alpha03")
- prebuilts(LibraryGroups.CAMERA, "camera-extensions", "1.0.0-alpha03")
- prebuilts(LibraryGroups.CAMERA, "1.0.0-alpha06")
+ prebuilts(LibraryGroups.CAMERA, "camera-view", "1.0.0-alpha04")
+ prebuilts(LibraryGroups.CAMERA, "camera-extensions", "1.0.0-alpha04")
+ prebuilts(LibraryGroups.CAMERA, "1.0.0-alpha07")
ignore(LibraryGroups.CAR.group, "car-moderator")
prebuilts(LibraryGroups.CAR, "car", "1.0.0-alpha7")
.addStubs("car/stubs/android.car.jar")
@@ -56,10 +56,11 @@
// branch. There is no reason to push a new release for docs only,
// so we build docs against the fake prebuilt. This prebuilt is identical
// to 1.0.0 release modulo changes in docs.
- prebuilts(LibraryGroups.CONCURRENT, "1.0.0-fixeddocs01")
+ prebuilts(LibraryGroups.CONCURRENT, "concurrent-futures", "1.0.0-fixeddocs01")
+ ignore(LibraryGroups.CONCURRENT.group, "concurrent-futures-ktx")
prebuilts(LibraryGroups.CONTENTPAGER, "1.0.0")
prebuilts(LibraryGroups.COORDINATORLAYOUT, "1.1.0-rc01")
- prebuilts(LibraryGroups.CORE, "core", "1.2.0-beta01")
+ prebuilts(LibraryGroups.CORE, "core", "1.2.0-beta02")
prebuilts(LibraryGroups.CORE, "core-ktx", "1.2.0-beta01")
prebuilts(LibraryGroups.CORE, "core-role", "1.0.0-alpha02")
prebuilts(LibraryGroups.CURSORADAPTER, "1.0.0")
@@ -100,7 +101,7 @@
ignore(LibraryGroups.NAVIGATION.group, "navigation-dynamic-features-fragment")
ignore(LibraryGroups.NAVIGATION.group, "navigation-safe-args-generator")
ignore(LibraryGroups.NAVIGATION.group, "navigation-safe-args-gradle-plugin")
- prebuilts(LibraryGroups.NAVIGATION, "2.2.0-rc01")
+ prebuilts(LibraryGroups.NAVIGATION, "2.2.0-rc02")
prebuilts(LibraryGroups.PAGING, "2.1.0")
prebuilts(LibraryGroups.PALETTE, "1.0.0")
prebuilts(LibraryGroups.PERCENTLAYOUT, "1.0.0")
@@ -116,7 +117,7 @@
// TODO: Remove this ignore once androidx.security:security-identity-credential:1.0.0-alpha01 is released
ignore(LibraryGroups.SECURITY.group, "security-identity-credential")
prebuilts(LibraryGroups.SECURITY, "1.0.0-alpha02")
- prebuilts(LibraryGroups.SHARETARGET, "1.0.0-beta01")
+ prebuilts(LibraryGroups.SHARETARGET, "1.0.0-beta02")
prebuilts(LibraryGroups.SLICE, "slice-builders", "1.1.0-alpha01")
prebuilts(LibraryGroups.SLICE, "slice-builders-ktx", "1.0.0-alpha07")
prebuilts(LibraryGroups.SLICE, "slice-core", "1.1.0-alpha01")
@@ -126,7 +127,7 @@
prebuilts(LibraryGroups.SLICE, "slice-view", "1.1.0-alpha01")
prebuilts(LibraryGroups.SLIDINGPANELAYOUT, "1.0.0")
ignore(LibraryGroups.SQLITE.group, "sqlite-inspection")
- prebuilts(LibraryGroups.SQLITE, "2.0.0")
+ prebuilts(LibraryGroups.SQLITE, "2.1.0-alpha01")
prebuilts(LibraryGroups.SWIPEREFRESHLAYOUT, "1.1.0-alpha03")
prebuilts(LibraryGroups.TEXTCLASSIFIER, "1.0.0-alpha02")
prebuilts(LibraryGroups.TRANSITION, "1.3.0-rc01")
@@ -138,7 +139,7 @@
prebuilts(LibraryGroups.VIEWPAGER2, "1.0.0-rc01")
prebuilts(LibraryGroups.WEAR, "1.0.0")
.addStubs("wear/wear_stubs/com.google.android.wearable-stubs.jar")
- prebuilts(LibraryGroups.WEBKIT, "1.1.0-rc01")
+ prebuilts(LibraryGroups.WEBKIT, "1.1.0")
ignore(LibraryGroups.WORK.group, "work-gcm")
ignore(LibraryGroups.WORK.group, "work-foreground")
prebuilts(LibraryGroups.WORK, "2.3.0-alpha03")
diff --git a/buildSrc/src/main/kotlin/androidx/build/studio/StudioVersions.kt b/buildSrc/src/main/kotlin/androidx/build/studio/StudioVersions.kt
index 6ca50ac..66b7805 100644
--- a/buildSrc/src/main/kotlin/androidx/build/studio/StudioVersions.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/studio/StudioVersions.kt
@@ -56,9 +56,9 @@
}
private object RootStudioVersions : StudioVersions() {
- override val studioVersion = "3.6.0.13"
+ override val studioVersion = "3.6.0.14"
override val ideaMajorVersion = "192"
- override val studioBuildNumber = "5916306"
+ override val studioBuildNumber = "5947919"
override val buildTxtOverride: String = ""
}
diff --git a/busytown/androidx_host_tests_max_dep_versions.sh b/busytown/androidx_host_tests_max_dep_versions.sh
new file mode 100755
index 0000000..0738b58
--- /dev/null
+++ b/busytown/androidx_host_tests_max_dep_versions.sh
@@ -0,0 +1,14 @@
+#!/bin/bash
+set -e
+
+SCRIPT_DIR="$(cd $(dirname $0) && pwd)"
+# TODO(b/141549086): move everything below into a common script once this script (androidx_host_tests_max_dep_versions.sh) is under presubmit testing
+if [ "$DIST_DIR" == "" ]; then
+ DIST_DIR="$SCRIPT_DIR/../../../out/dist"
+fi
+mkdir -p "$DIST_DIR"
+
+cd "$SCRIPT_DIR/../../.."
+
+OUT_DIR=out DIST_DIR=$DIST_DIR ANDROID_HOME=`pwd`/prebuilts/fullsdk-linux frameworks/support/gradlew -p frameworks/support --no-daemon test --info -PuseMaxDepVersions
+OUT_DIR=out/ui DIST_DIR=$DIST_DIR/ui ANDROID_HOME=`pwd`/prebuilts/fullsdk-linux frameworks/support/ui/gradlew -p frameworks/support/ui --no-daemon test --info -PuseMaxDepVersions
diff --git a/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/VideoCaptureTest.java b/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/VideoCaptureTest.java
index d5ca1b5..fa7fb1b 100644
--- a/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/VideoCaptureTest.java
+++ b/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/VideoCaptureTest.java
@@ -40,6 +40,7 @@
import androidx.test.InstrumentationRegistry;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.FlakyTest;
import androidx.test.filters.LargeTest;
import androidx.test.rule.GrantPermissionRule;
@@ -63,6 +64,7 @@
* <p>TODO(b/112325215): The VideoCapture will be more thoroughly tested via integration
* tests
*/
+@FlakyTest
@LargeTest
@RunWith(AndroidJUnit4.class)
public final class VideoCaptureTest {
diff --git a/camera/camera-camera2/src/main/java/androidx/camera/camera2/impl/Camera2CameraControl.java b/camera/camera-camera2/src/main/java/androidx/camera/camera2/impl/Camera2CameraControl.java
index 86f1dbd..83ce49f 100644
--- a/camera/camera-camera2/src/main/java/androidx/camera/camera2/impl/Camera2CameraControl.java
+++ b/camera/camera-camera2/src/main/java/androidx/camera/camera2/impl/Camera2CameraControl.java
@@ -38,6 +38,7 @@
import androidx.camera.core.FlashMode;
import androidx.camera.core.FocusMeteringAction;
import androidx.camera.core.SessionConfig;
+import androidx.camera.core.impl.utils.futures.Futures;
import androidx.core.util.Preconditions;
import com.google.common.util.concurrent.ListenableFuture;
@@ -176,12 +177,15 @@
/** {@inheritDoc} */
@Override
- public void enableTorch(final boolean torch) {
+ @NonNull
+ public ListenableFuture<Void> enableTorch(final boolean torch) {
// update isTorchOn immediately so that following isTorchOn() returns correct value.
mIsTorchOn = torch;
mExecutor.execute(() -> enableTorchInternal(torch));
+ // TODO(b/143514107): implement #enableTorch which returns ListenableFuture.
+ return Futures.immediateFuture(null);
}
/** {@inheritDoc} */
diff --git a/camera/camera-camera2/src/main/java/androidx/camera/camera2/impl/Camera2CameraInfo.java b/camera/camera-camera2/src/main/java/androidx/camera/camera2/impl/Camera2CameraInfo.java
index 4add629..19e3cdf8 100644
--- a/camera/camera-camera2/src/main/java/androidx/camera/camera2/impl/Camera2CameraInfo.java
+++ b/camera/camera-camera2/src/main/java/androidx/camera/camera2/impl/Camera2CameraInfo.java
@@ -29,6 +29,7 @@
import androidx.camera.core.CameraOrientationUtil;
import androidx.camera.core.ImageOutputConfig.RotationValue;
import androidx.camera.core.LensFacing;
+import androidx.camera.core.TorchState;
import androidx.core.util.Preconditions;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
@@ -44,7 +45,6 @@
private static final String TAG = "Camera2CameraInfo";
private MutableLiveData<Boolean> mFlashAvailability;
-
Camera2CameraInfo(@NonNull CameraManager cameraManager, @NonNull String cameraId,
@NonNull ZoomControl zoomControl)
throws CameraInfoUnavailableException {
@@ -164,6 +164,13 @@
@NonNull
@Override
+ public LiveData<TorchState> getTorchState() {
+ // TODO(b/143514107): implement #getTorchState and return a functional LiveData
+ throw new UnsupportedOperationException("Not implement");
+ }
+
+ @NonNull
+ @Override
public LiveData<Float> getZoomRatio() {
return mZoomControl.getZoomRatio();
}
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/CameraControl.java b/camera/camera-core/src/main/java/androidx/camera/core/CameraControl.java
index 85e4780..b0cd652 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/CameraControl.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/CameraControl.java
@@ -30,22 +30,53 @@
*/
public interface CameraControl {
/**
- * Starts a focus and metering action by the {@link FocusMeteringAction}.
+ * Enable the torch or disable the torch.
*
- * <p>The {@link FocusMeteringAction} contains the configuration of multiple 3A
- * {@link MeteringPoint}s, auto-cancel duration and{ @link OnAutoFocusListener} to receive the
- * auto-focus result. Check {@link FocusMeteringAction} for more details.
+ * <p>{@link CameraInfo#getTorchState()} can be used to query the torch state.
+ * If the camera doesn't have a flash unit or doesn't support torch (see
+ * {@link TorchState#UNAVAILABLE}), then the call will do nothing and the returned
+ * {@link ListenableFuture} will complete immediately with a failed result.
+ *
+ * <p>When the torch is enabled, the torch will remain enabled during photo capture regardless
+ * of {@link FlashMode} setting. When the torch is disabled, flash will function as
+ * {@link FlashMode} set by either {@link ImageCapture#setFlashMode(FlashMode)} or
+ * {@link ImageCaptureConfig.Builder#setFlashMode(FlashMode)}.
+ *
+ * @param torch true to open the torch, false to close it.
+ * @return A {@link ListenableFuture} which is successful when the torch was changed to the
+ * value specified. It fails when it is unable to change the torch state.
+ */
+ @NonNull
+ ListenableFuture<Void> enableTorch(boolean torch);
+
+ /**
+ * Starts a focus and metering action configured by the {@link FocusMeteringAction}.
+ *
+ * <p>It will trigger a auto focus action and enable AF/AE/AWB metering regions. The action
+ * is configured by a {@link FocusMeteringAction} which contains the configuration of
+ * multiple AF/AE/AWB {@link MeteringPoint}s, auto-cancel duration and
+ * {@link OnAutoFocusListener} to receive the auto focus result. Check
+ * {@link FocusMeteringAction}
+ * for more details.
+ *
+ * <p>Only one {@link FocusMeteringAction} is allowed to run at a time. If multiple
+ * {@link FocusMeteringAction} are executed in a row, only the latest one will work and
+ * other actions will be cancelled.
+ *
+ * <p>If the {@link FocusMeteringAction} specifies more AF/AE/AWB regions than what is
+ * supported on current device, only the first AF/AE/AWB regions which are supported on the
+ * device will be enabled.
*
* @param action the {@link FocusMeteringAction} to be executed.
*/
void startFocusAndMetering(@NonNull FocusMeteringAction action);
/**
- * Cancels current {@link FocusMeteringAction}.
+ * Cancels current {@link FocusMeteringAction} and clears AF/AE/AWB regions.
*
- * <p>It clears the 3A regions and update current AF mode to CONTINOUS AF (if supported).
- * If auto-focus does not complete, it will notify the {@link OnAutoFocusListener} with
- * isFocusLocked set to false.
+ * <p>Clear the AF/AE/AWB regions and update current AF mode to CONTINUOUS AF (if
+ * supported). If auto-focus does not complete, it will notify the
+ * {@link OnAutoFocusListener} with isFocusLocked set to false.
*/
void cancelFocusAndMetering();
@@ -59,10 +90,10 @@
* applications' duty to clamp the ratio.
*
* @return a {@link ListenableFuture} which is finished when current repeating request
- * result contains the requested zoom ratio. It fails with
- * {@link OperationCanceledException} if there is newer value being set or camera is closed.
- * If ratio is out of range, it fails with
- * {@link CameraControl.ArgumentOutOfRangeException}.
+ * result contains the requested zoom ratio. It fails with
+ * {@link OperationCanceledException} if there is newer value being set or camera is closed.
+ * If ratio is out of range, it fails with
+ * {@link CameraControl.ArgumentOutOfRangeException}.
*/
@NonNull
ListenableFuture<Void> setZoomRatio(float ratio);
@@ -78,10 +109,10 @@
* applications' duty to clamp the zoomPercentage within [0..1].
*
* @return a {@link ListenableFuture} which is finished when current repeating request
- * result contains the requested zoom percentage. It fails with
- * {@link OperationCanceledException} if there is newer value being set or camera is closed.
- * If percentage is out of range, it fails with
- * {@link CameraControl.ArgumentOutOfRangeException}.
+ * result contains the requested zoom percentage. It fails with
+ * {@link OperationCanceledException} if there is newer value being set or camera is closed.
+ * If percentage is out of range, it fails with
+ * {@link CameraControl.ArgumentOutOfRangeException}.
*/
@NonNull
ListenableFuture<Void> setZoomPercentage(@FloatRange(from = 0f, to = 1f) float percentage);
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/CameraControlInternal.java b/camera/camera-core/src/main/java/androidx/camera/core/CameraControlInternal.java
index e5e60ee..4718d9c 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/CameraControlInternal.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/CameraControlInternal.java
@@ -60,14 +60,8 @@
*/
void setFlashMode(@NonNull FlashMode flashMode);
- /**
- * Enable the torch or disable the torch
- *
- * @param torch true to open the torch, false to close it.
- */
- void enableTorch(boolean torch);
-
/** Returns if current torch is enabled or not. */
+ // TODO(b/143514107): remove this API when CameraInfo#getTorchState implementation is done.
boolean isTorchOn();
/** Performs a AF trigger. */
@@ -99,8 +93,10 @@
public void setFlashMode(@NonNull FlashMode flashMode) {
}
+ @NonNull
@Override
- public void enableTorch(boolean torch) {
+ public ListenableFuture<Void> enableTorch(boolean torch) {
+ return Futures.immediateFuture(null);
}
@Override
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/CameraInfo.java b/camera/camera-core/src/main/java/androidx/camera/core/CameraInfo.java
index 20d2990..55c81a4 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/CameraInfo.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/CameraInfo.java
@@ -57,6 +57,20 @@
LiveData<Boolean> isFlashAvailable();
/**
+ * Returns a {@link LiveData} of current {@link TorchState}.
+ *
+ * <p>The torch state can be enabled or disabled via
+ * {@link CameraControl#enableTorch(boolean)} which will trigger the change event to the
+ * returned {@link LiveData}. Apps can either get immediate value via
+ * {@link LiveData#getValue()} or observe it via
+ * {@link LiveData#observe(LifecycleOwner, Observer)} to update torch UI accordingly.
+ *
+ * @return a {@link LiveData} containing current torch state.
+ */
+ @NonNull
+ LiveData<TorchState> getTorchState();
+
+ /**
* Returns a {@link LiveData} of current zoom ratio.
*
* <p>Apps can either get immediate value via {@link LiveData#getValue()} (The value is never
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/CameraSelector.java b/camera/camera-core/src/main/java/androidx/camera/core/CameraSelector.java
index 4dd5977..2061eff 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/CameraSelector.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/CameraSelector.java
@@ -111,9 +111,10 @@
/** Builder for a {@link CameraSelector}. */
public static final class Builder {
- private LinkedHashSet<CameraIdFilter> mCameraFilterSet = new LinkedHashSet<>();
+ private final LinkedHashSet<CameraIdFilter> mCameraFilterSet;
public Builder() {
+ mCameraFilterSet = new LinkedHashSet<>();
}
private Builder(@NonNull LinkedHashSet<CameraIdFilter> cameraFilterSet) {
@@ -135,6 +136,17 @@
}
/**
+ * Appends a CameraIdFilter to the current set of filters.
+ * @hide
+ */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @NonNull
+ public Builder appendFilter(@NonNull CameraIdFilter cameraFilter) {
+ mCameraFilterSet.add(cameraFilter);
+ return this;
+ }
+
+ /**
* Generates a Builder from another CameraSelector object.
*
* @param cameraSelector An existing CameraSelector.
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/DisplayOrientedMeteringPointFactory.java b/camera/camera-core/src/main/java/androidx/camera/core/DisplayOrientedMeteringPointFactory.java
index 3850350..61e747a 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/DisplayOrientedMeteringPointFactory.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/DisplayOrientedMeteringPointFactory.java
@@ -19,21 +19,31 @@
import android.content.Context;
import android.graphics.PointF;
import android.view.Display;
+import android.view.View;
import android.view.WindowManager;
import androidx.annotation.NonNull;
/**
- * A {@link MeteringPointFactory} that can create {@link MeteringPoint} by display oriented x, y.
+ * A {@link MeteringPointFactory} that can convert a {@link View} (x, y) into a
+ * {@link MeteringPoint} which can then be used to construct a {@link FocusMeteringAction} to
+ * start a focus and metering action.
*
- * <p>This factory will consider the current display rotation and the lens facing to translate the
- * x/y correctly. Using this factory, apps do not need to handle the device rotation. They
- * can simply pass the x/y retrieved from their View. However if the camera preview is cropped,
- * scaled or rotated, it is apps' duty to transform the coordinates first.
+ * <p>For apps showing full camera preview in a View without any scaling, cropping or
+ * rotating applied, they can simply use view width and height to create the
+ * {@link DisplayOrientedMeteringPointFactory} and then pass {@link View} (x, y) to create a
+ * {@link MeteringPoint}. This factory will convert the (x, y) into the sensor (x, y) based on
+ * display rotation and {@link LensFacing}.
*
- * <p> The width/height of this factory is the logical width/height of the preview FoV and X/Y
- * is the logical XY inside the FOV. User can set the width and height to 1.0 which will make the
- * XY the normalized coordinates [0..1].
+ * <p>If camera preview is scaled, cropped or rotated in the {@link View}, it is applications'
+ * duty to transform the coordinates properly so that the width and height of this
+ * factory represents the full Preview FOV and also the (x,y) passed to create
+ * {@link MeteringPoint} needs to be adjusted by apps to the coordinates left-top (0,0) -
+ * right-bottom (width, height). For Example, if the preview is scaled to 2X from the center and
+ * is cropped in a {@link View}. Assuming that the dimension of View is (240, 320), then the
+ * width/height of this {@link DisplayOrientedMeteringPointFactory} should be (480, 640). And
+ * the (x, y) from the {@link View} should be converted to (x + (480-240)/2, y + (640 - 320)/2)
+ * first.
*/
public final class DisplayOrientedMeteringPointFactory extends MeteringPointFactory {
/** The logical width of FoV in current display orientation */
@@ -49,17 +59,22 @@
private final CameraInfo mCameraInfo;
/**
- * Creates the {@link MeteringPointFactory} with default display orientation.
+ * Creates a {@link DisplayOrientedMeteringPointFactory} for converting View (x, y) into a
+ * {@link MeteringPoint} based on default display's orientation and {@link LensFacing}.
*
- * <p>The width/height is the logical width/height of the preview FoV and X/Y is the logical
- * XY inside the FOV. User can set the width and height to 1.0 which will make the XY the
- * normalized coordinates [0..1]. Or user can set the width/height to the View width/height and
- * then X/Y becomes the X/Y in the view.
+ * <p>The width/height of this factory forms a coordinate left-top (0, 0) - right-bottom
+ * (width, height) which represents the full camera preview FOV in default display's
+ * orientation. The (x, y) passed to {@link MeteringPointFactory#convertPoint(float, float)}
+ * should be adjusted to this coordinate first. For apps showing full camera preview in a
+ * {@link View}, it is as simple as passing View's width/height and passing View (x, y)
+ * directly to create a {@link MeteringPoint}.
*
* @param context context to get the {@link WindowManager} for default display rotation.
* @param lensFacing current lens facing.
- * @param width the logical width of FoV in current display orientation.
- * @param height the logical height of FoV in current display orientation.
+ * @param width the width of the coordinate which are mapped to the full camera preview
+ * FOV in default display's orientation.
+ * @param height the height of the coordinate which are mapped to the full camera preview
+ * FOVin default display's orientation.
*/
public DisplayOrientedMeteringPointFactory(@NonNull Context context,
@NonNull LensFacing lensFacing, float width, float height) {
@@ -68,18 +83,23 @@
}
/**
- * Creates the {@link MeteringPointFactory} with custom display orientation. This is used
- * in multi-display situation.
+ * Creates a {@link DisplayOrientedMeteringPointFactory} for converting View (x, y) into a
+ * {@link MeteringPoint} based on custom display's rotation and {@link LensFacing}. This is
+ * used in multi-display situation.
*
- * <p>The width/height is the logical width/height of the preview FoV and X/Y is the logical
- * XY inside the FOV. User can set the width and height to 1.0 which will make the XY the
- * normalized coordinates [0..1]. Or user can set the width/height to the View width/height and
- * then X/Y becomes the X/Y in the view.
- * {@link Display} is used to dete
+ * <p>The width/height of this factory forms a coordinate left-top (0, 0) - right-bottom
+ * (width, height) which represents the full camera preview FOV in given display's
+ * orientation. The (x, y) passed to {@link MeteringPointFactory#convertPoint(float, float)}
+ * should be adjusted to this coordinate first. For apps showing full camera preview in a
+ * {@link View}, it is as simple as passing View's width/height and passing View (x, y)
+ * directly to create a {@link MeteringPoint}.
+ *
* @param display {@link Display} to get the orientation from.
* @param lensFacing current lens facing.
- * @param width the logical width of FoV in current display orientation.
- * @param height the logical height of FoV in current display orientation.
+ * @param width the width of the coordinate which are mapped to the full camera preview
+ * FOV in given display's orientation.
+ * @param height the height of the coordinate which are mapped to the full camera preview
+ * FOV in given display's orientation.
*/
public DisplayOrientedMeteringPointFactory(@NonNull Display display,
@NonNull LensFacing lensFacing, float width, float height) {
@@ -100,7 +120,7 @@
*/
@NonNull
@Override
- protected PointF translatePoint(float x, float y) {
+ protected PointF convertPoint(float x, float y) {
float width = mWidth;
float height = mHeight;
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/FlashMode.java b/camera/camera-core/src/main/java/androidx/camera/core/FlashMode.java
index 18822692..63e76b4 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/FlashMode.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/FlashMode.java
@@ -16,7 +16,14 @@
package androidx.camera.core;
-/** The flash mode options when taking a picture using ImageCapture. */
+/**
+ * The flash mode options when taking a picture using ImageCapture.
+ *
+ * <p>When the torch is enabled via {@link CameraControl#enableTorch(boolean)}, the torch
+ * will remain enabled during photo capture regardless of flash mode setting. When
+ * the torch is disabled, flash will function as specified by
+ * {@link ImageCapture#setFlashMode(FlashMode)}.
+ */
public enum FlashMode {
/**
* Auto flash. The flash will be used according to the camera system's determination when taking
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/ImageCapture.java b/camera/camera-core/src/main/java/androidx/camera/core/ImageCapture.java
index 9445a4b..c0ab509 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/ImageCapture.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/ImageCapture.java
@@ -353,6 +353,10 @@
/**
* Set the flash mode.
*
+ * <p>When the torch is enabled via {@link CameraControl#enableTorch(boolean)}, the torch
+ * will remain enabled during photo capture regardless of {@link FlashMode} setting. When
+ * the torch is disabled, flash will function as specified by {@link #setFlashMode(FlashMode)}.
+ *
* @param flashMode the {@link FlashMode}.
*/
public void setFlashMode(@NonNull FlashMode flashMode) {
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/ImageCaptureConfig.java b/camera/camera-core/src/main/java/androidx/camera/core/ImageCaptureConfig.java
index 75b34bb..0fd99ec 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/ImageCaptureConfig.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/ImageCaptureConfig.java
@@ -812,6 +812,11 @@
/**
* Sets the {@link FlashMode}.
*
+ * <p>When the torch is enabled via {@link CameraControl#enableTorch(boolean)}, the torch
+ * will remain enabled during photo capture regardless of {@link FlashMode} setting. When
+ * the torch is disabled, flash will function as specified by
+ * {@link #setFlashMode(FlashMode)}.
+ *
* @param flashMode The requested flash mode.
* @return The current Builder.
*/
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/MeteringPointFactory.java b/camera/camera-core/src/main/java/androidx/camera/core/MeteringPointFactory.java
index 4423169..2f4ae8c 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/MeteringPointFactory.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/MeteringPointFactory.java
@@ -51,7 +51,7 @@
* @return a {@link PointF} consisting of translated normalized crop region x/y,
*/
@NonNull
- protected abstract PointF translatePoint(float x, float y);
+ protected abstract PointF convertPoint(float x, float y);
/**
* Creates a {@link MeteringPoint} by x, y.
@@ -79,8 +79,8 @@
*/
@NonNull
public final MeteringPoint createPoint(float x, float y, float size, float weight) {
- PointF translatedXY = translatePoint(x, y);
- return new MeteringPoint(translatedXY.x, translatedXY.y, size, weight,
+ PointF convertedPoint = convertPoint(x, y);
+ return new MeteringPoint(convertedPoint.x, convertedPoint.y, size, weight,
mFovAspectRatio);
}
}
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/Preview.java b/camera/camera-core/src/main/java/androidx/camera/core/Preview.java
index 0c4bffe..14d5404 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/Preview.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/Preview.java
@@ -250,11 +250,13 @@
*
* @param torch True if turn on torch, otherwise false
*/
+ // TODO(b/143514107): remove this API when CameraControl#enableTorch implementation is done.
public void enableTorch(boolean torch) {
getCurrentCameraControl().enableTorch(torch);
}
/** True if the torch is on */
+ // TODO(b/143514107): remove this API when CameraInfo#getTorchState implementation is done.
public boolean isTorchOn() {
return getCurrentCameraControl().isTorchOn();
}
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/SensorOrientedMeteringPointFactory.java b/camera/camera-core/src/main/java/androidx/camera/core/SensorOrientedMeteringPointFactory.java
index 9f9fcef..63688e0 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/SensorOrientedMeteringPointFactory.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/SensorOrientedMeteringPointFactory.java
@@ -108,7 +108,7 @@
*/
@Override
@NonNull
- protected PointF translatePoint(float x, float y) {
+ protected PointF convertPoint(float x, float y) {
PointF pt = new PointF(x / mWidth, y / mHeight);
return pt;
}
diff --git a/ui/ui-text/src/main/java/androidx/ui/input/EditorStyle.kt b/camera/camera-core/src/main/java/androidx/camera/core/TorchState.java
similarity index 63%
rename from ui/ui-text/src/main/java/androidx/ui/input/EditorStyle.kt
rename to camera/camera-core/src/main/java/androidx/camera/core/TorchState.java
index 691ba92..69ddc83 100644
--- a/ui/ui-text/src/main/java/androidx/ui/input/EditorStyle.kt
+++ b/camera/camera-core/src/main/java/androidx/camera/core/TorchState.java
@@ -14,18 +14,14 @@
* limitations under the License.
*/
-package androidx.ui.input
+package androidx.camera.core;
-import androidx.ui.graphics.Color
-import androidx.ui.text.TextStyle
-
-/**
- * Data class holding text display attributes used for editors.
- */
-data class EditorStyle(
- /** The editor text style */
- val textStyle: TextStyle? = null,
-
- /**The selection background color */
- val selectionColor: Color? = null
-)
+/** The camera flash torch state. */
+public enum TorchState {
+ /** The camera device does not have flash unit or does not support torch mode. */
+ UNAVAILABLE,
+ /** Torch is on. */
+ ENABLED,
+ /** Torch is off. */
+ DISABLED
+}
diff --git a/camera/camera-core/src/test/java/androidx/camera/core/CameraSelectorTest.java b/camera/camera-core/src/test/java/androidx/camera/core/CameraSelectorTest.java
index 3e79f4a..1f21289 100644
--- a/camera/camera-core/src/test/java/androidx/camera/core/CameraSelectorTest.java
+++ b/camera/camera-core/src/test/java/androidx/camera/core/CameraSelectorTest.java
@@ -121,4 +121,19 @@
LensFacing.FRONT);
cameraSelectorBuilder.build().getLensFacing();
}
+
+ @Test
+ public void canAppendFilters() {
+ CameraIdFilter filter0 = mock(CameraIdFilter.class);
+ CameraIdFilter filter1 = mock(CameraIdFilter.class);
+ CameraIdFilter filter2 = mock(CameraIdFilter.class);
+
+ CameraSelector cameraSelector = new CameraSelector.Builder()
+ .appendFilter(filter0)
+ .appendFilter(filter1)
+ .appendFilter(filter2)
+ .build();
+
+ assertThat(cameraSelector.getCameraFilterSet()).containsAtLeast(filter0, filter1, filter2);
+ }
}
diff --git a/camera/camera-core/src/test/java/androidx/camera/core/ShadowCameraX.java b/camera/camera-core/src/test/java/androidx/camera/core/ShadowCameraX.java
index 0cbda8f..ec58235 100644
--- a/camera/camera-core/src/test/java/androidx/camera/core/ShadowCameraX.java
+++ b/camera/camera-core/src/test/java/androidx/camera/core/ShadowCameraX.java
@@ -43,6 +43,7 @@
private static final CameraInfo DEFAULT_CAMERA_INFO = new CameraInfoInternal() {
MutableLiveData<Boolean> mFlashAvailability = new MutableLiveData<>(Boolean.TRUE);
+ MutableLiveData<TorchState> mTorchState = new MutableLiveData<>(TorchState.DISABLED);
MutableLiveData<Float> mZoomRatio = new MutableLiveData<>(1.0f);
MutableLiveData<Float> mMaxZoomRatio = new MutableLiveData<>(4.0f);
MutableLiveData<Float> mMinZoomRatio = new MutableLiveData<>(1.0f);
@@ -71,6 +72,12 @@
@NonNull
@Override
+ public LiveData<TorchState> getTorchState() {
+ return mTorchState;
+ }
+
+ @NonNull
+ @Override
public LiveData<Float> getZoomRatio() {
return mZoomRatio;
}
diff --git a/camera/camera-core/src/test/java/androidx/camera/core/impl/utils/CameraSelectorUtilTest.java b/camera/camera-core/src/test/java/androidx/camera/core/impl/utils/CameraSelectorUtilTest.java
index bd8a81f..ee572be 100644
--- a/camera/camera-core/src/test/java/androidx/camera/core/impl/utils/CameraSelectorUtilTest.java
+++ b/camera/camera-core/src/test/java/androidx/camera/core/impl/utils/CameraSelectorUtilTest.java
@@ -18,9 +18,16 @@
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.atLeastOnce;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
import android.os.Build;
import androidx.camera.core.CameraDeviceConfig;
+import androidx.camera.core.CameraIdFilter;
import androidx.camera.core.CameraSelector;
import androidx.camera.core.LensFacing;
import androidx.test.filters.SmallTest;
@@ -31,12 +38,17 @@
import org.robolectric.annotation.Config;
import org.robolectric.annotation.internal.DoNotInstrument;
+import java.util.Collections;
+import java.util.Set;
+
@SmallTest
@RunWith(RobolectricTestRunner.class)
@DoNotInstrument
@Config(minSdk = Build.VERSION_CODES.LOLLIPOP)
public class CameraSelectorUtilTest {
+ private static final Set<String> SINGLE_ID_SET = Collections.singleton("0");
+
@Test
public void convertedCameraDeviceConfig_hasFrontLensFacing() {
CameraSelector cameraSelector =
@@ -65,4 +77,33 @@
convertedConfig.getCameraIdFilter();
}
+
+ public void convertedCameraDeviceConfig_containsAllFilters() {
+ CameraIdFilter filter0 = createPassThroughMockFilter();
+ CameraIdFilter filter1 = createPassThroughMockFilter();
+ CameraIdFilter filter2 = createPassThroughMockFilter();
+
+ CameraSelector cameraSelector = new CameraSelector.Builder()
+ .appendFilter(filter0)
+ .appendFilter(filter1)
+ .appendFilter(filter2)
+ .build();
+
+ CameraDeviceConfig convertedConfig =
+ CameraSelectorUtil.toCameraDeviceConfig(cameraSelector);
+
+ CameraIdFilter combinedFilter = convertedConfig.getCameraIdFilter();
+
+ combinedFilter.filter(SINGLE_ID_SET);
+
+ verify(filter0, atLeastOnce()).filter(any());
+ verify(filter1, atLeastOnce()).filter(any());
+ verify(filter2, atLeastOnce()).filter(any());
+ }
+
+ private CameraIdFilter createPassThroughMockFilter() {
+ CameraIdFilter mockFilter = mock(CameraIdFilter.class);
+ when(mockFilter.filter(any())).then(i -> i.getArguments()[0]);
+ return mockFilter;
+ }
}
diff --git a/camera/camera-testing/src/main/java/androidx/camera/testing/CameraUtil.java b/camera/camera-testing/src/main/java/androidx/camera/testing/CameraUtil.java
index e9c00f0..f18b2e8 100644
--- a/camera/camera-testing/src/main/java/androidx/camera/testing/CameraUtil.java
+++ b/camera/camera-testing/src/main/java/androidx/camera/testing/CameraUtil.java
@@ -264,6 +264,7 @@
*
* @return false if no camera
*/
+ @SuppressWarnings("deprecation")
public static boolean deviceHasCamera() {
// TODO Think about external camera case,
// especially no built in camera but there might be some external camera
diff --git a/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeCameraControl.java b/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeCameraControl.java
index d1dae01..823c6eb 100644
--- a/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeCameraControl.java
+++ b/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeCameraControl.java
@@ -107,9 +107,11 @@
}
@Override
- public void enableTorch(boolean torch) {
+ @NonNull
+ public ListenableFuture<Void> enableTorch(boolean torch) {
mIsTorchOn = torch;
Log.d(TAG, "enableTorch(" + torch + ")");
+ return Futures.immediateFuture(null);
}
@Override
diff --git a/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeCameraInfoInternal.java b/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeCameraInfoInternal.java
index 77fffb2..4b602fc 100644
--- a/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeCameraInfoInternal.java
+++ b/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeCameraInfoInternal.java
@@ -24,6 +24,7 @@
import androidx.camera.core.CameraOrientationUtil;
import androidx.camera.core.ImageOutputConfig.RotationValue;
import androidx.camera.core.LensFacing;
+import androidx.camera.core.TorchState;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
@@ -37,10 +38,11 @@
private final int mSensorRotation;
private final LensFacing mLensFacing;
private MutableLiveData<Boolean> mFlashAvailability = new MutableLiveData<>(Boolean.TRUE);
+ private MutableLiveData<TorchState> mTorchState = new MutableLiveData<>(TorchState.DISABLED);
private MutableLiveData<Float> mMaxZoom = new MutableLiveData<>(4.0f);
private MutableLiveData<Float> mMinZoom = new MutableLiveData<>(1.0f);
private MutableLiveData<Float> mZoomRatio = new MutableLiveData<>(1.0f);
- private MutableLiveData<Float> mZoomPerecentage = new MutableLiveData<>(0f);
+ private MutableLiveData<Float> mZoomPercentage = new MutableLiveData<>(0f);
@@ -86,6 +88,12 @@
@NonNull
@Override
+ public LiveData<TorchState> getTorchState() {
+ return mTorchState;
+ }
+
+ @NonNull
+ @Override
public LiveData<Float> getZoomRatio() {
return mZoomRatio;
}
@@ -105,6 +113,6 @@
@NonNull
@Override
public LiveData<Float> getZoomPercentage() {
- return mZoomPerecentage;
+ return mZoomPercentage;
}
}
diff --git a/camera/camera-view/src/main/java/androidx/camera/view/TextureViewMeteringPointFactory.java b/camera/camera-view/src/main/java/androidx/camera/view/TextureViewMeteringPointFactory.java
index dab8a31..55149f4 100644
--- a/camera/camera-view/src/main/java/androidx/camera/view/TextureViewMeteringPointFactory.java
+++ b/camera/camera-view/src/main/java/androidx/camera/view/TextureViewMeteringPointFactory.java
@@ -48,7 +48,7 @@
*/
@NonNull
@Override
- protected PointF translatePoint(float x, float y) {
+ protected PointF convertPoint(float x, float y) {
Matrix transform = new Matrix();
mTextureView.getTransform(transform);
diff --git a/camera/integration-tests/viewtestapp/src/main/java/androidx/camera/integration/view/CaptureViewOnTouchListener.java b/camera/integration-tests/viewtestapp/src/main/java/androidx/camera/integration/view/CaptureViewOnTouchListener.java
index 57223a2..f770e0b 100644
--- a/camera/integration-tests/viewtestapp/src/main/java/androidx/camera/integration/view/CaptureViewOnTouchListener.java
+++ b/camera/integration-tests/viewtestapp/src/main/java/androidx/camera/integration/view/CaptureViewOnTouchListener.java
@@ -222,6 +222,7 @@
private void broadcastPicture(File file) {
if (Build.VERSION.SDK_INT < 24) {
+ @SuppressWarnings("deprecation")
Intent intent = new Intent(Camera.ACTION_NEW_PICTURE);
intent.setData(Uri.fromFile(file));
mCameraView.getContext().sendBroadcast(intent);
@@ -234,6 +235,7 @@
private void broadcastVideo(File file) {
if (Build.VERSION.SDK_INT < 24) {
+ @SuppressWarnings("deprecation")
Intent intent = new Intent(Camera.ACTION_NEW_VIDEO);
intent.setData(Uri.fromFile(file));
mCameraView.getContext().sendBroadcast(intent);
diff --git a/concurrent/futures-ktx/api/1.1.0-alpha01.txt b/concurrent/futures-ktx/api/1.1.0-alpha01.txt
new file mode 100644
index 0000000..b0c8c4b
--- /dev/null
+++ b/concurrent/futures-ktx/api/1.1.0-alpha01.txt
@@ -0,0 +1,10 @@
+// Signature format: 3.0
+package androidx.concurrent.futures {
+
+ public final class ListenableFutureKt {
+ ctor public ListenableFutureKt();
+ method public static suspend <T> Object! await(com.google.common.util.concurrent.ListenableFuture<T>, kotlin.coroutines.Continuation<? super T> p);
+ }
+
+}
+
diff --git a/concurrent/futures-ktx/api/api_lint.ignore b/concurrent/futures-ktx/api/api_lint.ignore
new file mode 100644
index 0000000..0d817eb
--- /dev/null
+++ b/concurrent/futures-ktx/api/api_lint.ignore
@@ -0,0 +1,7 @@
+// Baseline format: 1.0
+DocumentExceptions: androidx.concurrent.futures.ListenableFutureKt#await(com.google.common.util.concurrent.ListenableFuture<T>, kotlin.coroutines.Continuation<? super T>):
+ Method ListenableFutureKt.await appears to be throwing java.lang.Throwable; this should be recorded with a @Throws annotation; see https://android.github.io/kotlin-guides/interop.html#document-exceptions
+
+
+MissingNullability: androidx.concurrent.futures.ListenableFutureKt#await(com.google.common.util.concurrent.ListenableFuture<T>, kotlin.coroutines.Continuation<? super T>):
+ Missing nullability on method `await` return
diff --git a/concurrent/futures-ktx/api/current.txt b/concurrent/futures-ktx/api/current.txt
new file mode 100644
index 0000000..b0c8c4b
--- /dev/null
+++ b/concurrent/futures-ktx/api/current.txt
@@ -0,0 +1,10 @@
+// Signature format: 3.0
+package androidx.concurrent.futures {
+
+ public final class ListenableFutureKt {
+ ctor public ListenableFutureKt();
+ method public static suspend <T> Object! await(com.google.common.util.concurrent.ListenableFuture<T>, kotlin.coroutines.Continuation<? super T> p);
+ }
+
+}
+
diff --git a/concurrent/futures-ktx/api/public_plus_experimental_1.1.0-alpha01.txt b/concurrent/futures-ktx/api/public_plus_experimental_1.1.0-alpha01.txt
new file mode 100644
index 0000000..b0c8c4b
--- /dev/null
+++ b/concurrent/futures-ktx/api/public_plus_experimental_1.1.0-alpha01.txt
@@ -0,0 +1,10 @@
+// Signature format: 3.0
+package androidx.concurrent.futures {
+
+ public final class ListenableFutureKt {
+ ctor public ListenableFutureKt();
+ method public static suspend <T> Object! await(com.google.common.util.concurrent.ListenableFuture<T>, kotlin.coroutines.Continuation<? super T> p);
+ }
+
+}
+
diff --git a/concurrent/futures-ktx/api/public_plus_experimental_current.txt b/concurrent/futures-ktx/api/public_plus_experimental_current.txt
new file mode 100644
index 0000000..b0c8c4b
--- /dev/null
+++ b/concurrent/futures-ktx/api/public_plus_experimental_current.txt
@@ -0,0 +1,10 @@
+// Signature format: 3.0
+package androidx.concurrent.futures {
+
+ public final class ListenableFutureKt {
+ ctor public ListenableFutureKt();
+ method public static suspend <T> Object! await(com.google.common.util.concurrent.ListenableFuture<T>, kotlin.coroutines.Continuation<? super T> p);
+ }
+
+}
+
diff --git a/concurrent/futures-ktx/api/restricted_1.1.0-alpha01.txt b/concurrent/futures-ktx/api/restricted_1.1.0-alpha01.txt
new file mode 100644
index 0000000..b0c8c4b
--- /dev/null
+++ b/concurrent/futures-ktx/api/restricted_1.1.0-alpha01.txt
@@ -0,0 +1,10 @@
+// Signature format: 3.0
+package androidx.concurrent.futures {
+
+ public final class ListenableFutureKt {
+ ctor public ListenableFutureKt();
+ method public static suspend <T> Object! await(com.google.common.util.concurrent.ListenableFuture<T>, kotlin.coroutines.Continuation<? super T> p);
+ }
+
+}
+
diff --git a/concurrent/futures-ktx/api/restricted_current.txt b/concurrent/futures-ktx/api/restricted_current.txt
new file mode 100644
index 0000000..b0c8c4b
--- /dev/null
+++ b/concurrent/futures-ktx/api/restricted_current.txt
@@ -0,0 +1,10 @@
+// Signature format: 3.0
+package androidx.concurrent.futures {
+
+ public final class ListenableFutureKt {
+ ctor public ListenableFutureKt();
+ method public static suspend <T> Object! await(com.google.common.util.concurrent.ListenableFuture<T>, kotlin.coroutines.Continuation<? super T> p);
+ }
+
+}
+
diff --git a/concurrent/futures-ktx/build.gradle b/concurrent/futures-ktx/build.gradle
new file mode 100644
index 0000000..84f44c7
--- /dev/null
+++ b/concurrent/futures-ktx/build.gradle
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+import androidx.build.AndroidXExtension
+import androidx.build.LibraryGroups
+import androidx.build.LibraryVersions
+import androidx.build.Publish
+
+import static androidx.build.dependencies.DependenciesKt.*
+
+plugins {
+ id("AndroidXPlugin")
+ id("kotlin")
+}
+
+dependencies {
+ api(project(":concurrent:concurrent-futures"))
+ api(KOTLIN_STDLIB)
+ api(KOTLIN_COROUTINES_CORE)
+
+ testImplementation(JUNIT)
+ testImplementation(KOTLIN_TEST)
+ testImplementation(KOTLIN_COROUTINES_TEST)
+ testImplementation(ANDROIDX_TEST_EXT_JUNIT)
+ testImplementation(ANDROIDX_TEST_CORE)
+}
+
+androidx {
+ name = "AndroidX Futures Kotlin Extensions"
+ publish = Publish.SNAPSHOT_AND_RELEASE
+ mavenVersion = LibraryVersions.FUTURES
+ mavenGroup = LibraryGroups.CONCURRENT
+ inceptionYear = "2019"
+ description = "Kotlin Extensions for Androidx implementation of Guava's ListenableFuture"
+ url = AndroidXExtension.ARCHITECTURE_URL
+}
diff --git a/concurrent/futures-ktx/src/main/java/androidx/concurrent/futures/ListenableFuture.kt b/concurrent/futures-ktx/src/main/java/androidx/concurrent/futures/ListenableFuture.kt
new file mode 100644
index 0000000..7328609
--- /dev/null
+++ b/concurrent/futures-ktx/src/main/java/androidx/concurrent/futures/ListenableFuture.kt
@@ -0,0 +1,105 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.concurrent.futures
+
+import androidx.concurrent.futures.AbstractResolvableFuture.getUninterruptibly
+import com.google.common.util.concurrent.ListenableFuture
+import kotlinx.coroutines.CancellableContinuation
+import kotlinx.coroutines.suspendCancellableCoroutine
+import java.util.concurrent.ExecutionException
+import java.util.concurrent.Future
+import kotlin.coroutines.resumeWithException
+
+/**
+ * Awaits completion of `this` [ListenableFuture] without blocking a thread.
+ *
+ * This suspend function is cancellable.
+ *
+ * If the [kotlinx.coroutines.Job] of the current coroutine is cancelled or completed while this
+ * suspending function is
+ * waiting, this function stops waiting for the future and immediately resumes with
+ * [CancellationException][kotlinx.coroutines.CancellationException].
+ *
+ * This method is intended to be used with one-shot Futures, so on coroutine cancellation, the
+ * Future is cancelled as well. If cancelling the given future is undesired, use
+ * [kotlinx.coroutines.NonCancellable].
+ */
+suspend fun <T> ListenableFuture<T>.await(): T {
+ try {
+ if (isDone) return getUninterruptibly(this)
+ } catch (e: ExecutionException) {
+ // ExecutionException is the only kind of exception that can be thrown from a gotten
+ // Future, other than CancellationException. Cancellation is propagated upward so that
+ // the coroutine running this suspend function may process it.
+ // Any other Exception showing up here indicates a very fundamental bug in a
+ // Future implementation.
+ throw e.nonNullCause()
+ }
+
+ return suspendCancellableCoroutine { cont: CancellableContinuation<T> ->
+ addListener(
+ ToContinuation(this, cont),
+ DirectExecutor.INSTANCE
+ )
+ cont.invokeOnCancellation {
+ cancel(false)
+ }
+ }
+}
+
+/**
+ * Propagates the outcome of [futureToObserve] to [continuation] on completion.
+ *
+ * Cancellation is propagated as cancelling the continuation. If [futureToObserve] completes
+ * and fails, the cause of the Future will be propagated without a wrapping
+ * [ExecutionException] when thrown.
+ */
+private class ToContinuation<T>(
+ val futureToObserve: ListenableFuture<T>,
+ val continuation: CancellableContinuation<T>
+) : Runnable {
+ override fun run() {
+ if (futureToObserve.isCancelled) {
+ continuation.cancel()
+ } else {
+ try {
+ continuation.resumeWith(
+ Result.success(getUninterruptibly(futureToObserve))
+ )
+ } catch (e: ExecutionException) {
+ // ExecutionException is the only kind of exception that can be thrown from a gotten
+ // Future. Anything else showing up here indicates a very fundamental bug in a
+ // Future implementation.
+ continuation.resumeWithException(e.nonNullCause())
+ }
+ }
+ }
+}
+
+/**
+ * Returns the cause from an [ExecutionException] thrown by a [Future.get] or similar.
+ *
+ * [ExecutionException] _always_ wraps a non-null cause when Future.get() throws. A Future cannot
+ * fail without a non-null `cause`, because the only way a Future _can_ fail is an uncaught
+ * [Exception].
+ *
+ * If this !! throws [NullPointerException], a Future is breaking its interface contract and losing
+ * state - a serious fundamental bug.
+ */
+private fun ExecutionException.nonNullCause(): Throwable {
+ return this.cause!!
+}
\ No newline at end of file
diff --git a/concurrent/futures-ktx/src/test/java/androidx/concurrent/futures/ListenableFutureTest.kt b/concurrent/futures-ktx/src/test/java/androidx/concurrent/futures/ListenableFutureTest.kt
new file mode 100644
index 0000000..21a9530
--- /dev/null
+++ b/concurrent/futures-ktx/src/test/java/androidx/concurrent/futures/ListenableFutureTest.kt
@@ -0,0 +1,149 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.concurrent.futures
+
+import kotlinx.coroutines.CancellationException
+import kotlinx.coroutines.CoroutineStart
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.GlobalScope
+import kotlinx.coroutines.async
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.runBlocking
+import kotlinx.coroutines.test.runBlockingTest
+import kotlinx.coroutines.yield
+import org.hamcrest.CoreMatchers.`is`
+import org.hamcrest.CoreMatchers.instanceOf
+import org.hamcrest.MatcherAssert.assertThat
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+import java.util.concurrent.atomic.AtomicBoolean
+import java.util.concurrent.atomic.AtomicInteger
+import kotlin.test.assertFailsWith
+
+@RunWith(JUnit4::class)
+class ListenableFutureTest {
+ private var actionIndex = AtomicInteger()
+ private var finished = AtomicBoolean()
+
+ @Test
+ fun testFutureWithResult() {
+ val future: ResolvableFuture<Int> = ResolvableFuture.create()
+ val job = GlobalScope.launch {
+ val result = future.await()
+ assertThat(result, `is`(10))
+ }
+ future.set(10)
+ runBlocking {
+ job.join()
+ }
+ }
+
+ @Test
+ fun testFutureWithException() {
+ val future: ResolvableFuture<Int> = ResolvableFuture.create()
+ val exception = RuntimeException("Something bad happened")
+ val job = GlobalScope.launch {
+ try {
+ future.await()
+ } catch (throwable: Throwable) {
+ assertThat(throwable, `is`(instanceOf(RuntimeException::class.java)))
+ assertThat(throwable.message, `is`(exception.message))
+ }
+ }
+ future.setException(exception)
+ runBlocking {
+ job.join()
+ }
+ }
+
+ @Test
+ fun testFutureCancellation() {
+ val future: ResolvableFuture<Int> = ResolvableFuture.create()
+ val job = GlobalScope.launch {
+ future.await()
+ }
+ future.cancel(true)
+ runBlocking {
+ job.join()
+ assertThat(job.isCancelled, `is`(true))
+ }
+ }
+
+ @ExperimentalCoroutinesApi
+ @Test
+ fun testAwaitWithCancellation() = runBlockingTest {
+ val future = ResolvableFuture.create<Int>()
+ val deferred = async {
+ future.await()
+ }
+
+ deferred.cancel(TestCancellationException())
+ assertFailsWith<TestCancellationException> {
+ deferred.await()
+ expectUnreached()
+ }
+ }
+
+ @ExperimentalCoroutinesApi
+ @Test
+ fun testCancellableAwait() = runBlocking {
+ expect(1)
+ val toAwait = ResolvableFuture.create<String>()
+ val job = launch(start = CoroutineStart.UNDISPATCHED) {
+ expect(2)
+ try {
+ toAwait.await() // suspends
+ } catch (e: CancellationException) {
+ expect(5) // should throw cancellation exception
+ throw e
+ }
+ }
+ expect(3)
+ job.cancel() // cancel the job
+ toAwait.set("fail") // too late, the waiting job was already cancelled
+ expect(4) // job processing of cancellation was scheduled, not executed yet
+ yield() // yield main thread to job
+ finish(6)
+ }
+
+ /**
+ * Asserts that this invocation is `index`-th in the execution sequence (counting from one).
+ */
+ private fun expect(index: Int) {
+ val wasIndex = actionIndex.incrementAndGet()
+ check(index == wasIndex) { "Expecting action index $index but it is actually $wasIndex" }
+ }
+
+ /**
+ * Asserts that this it the last action in the test. It must be invoked by any test that used
+ * [expect].
+ */
+ private fun finish(index: Int) {
+ expect(index)
+ check(!finished.getAndSet(true)) { "Should call 'finish(...)' at most once" }
+ }
+
+ /**
+ * Asserts that this line is never executed.
+ */
+ private fun expectUnreached() {
+ error("Should not be reached")
+ }
+
+ private class TestCancellationException : CancellationException()
+}
diff --git a/concurrent/futures/api/restricted_1.0.0-rc01.txt b/concurrent/futures/api/restricted_1.0.0-rc01.txt
index 6dabf0b..3103236 100644
--- a/concurrent/futures/api/restricted_1.0.0-rc01.txt
+++ b/concurrent/futures/api/restricted_1.0.0-rc01.txt
@@ -34,6 +34,11 @@
method public Object? attachCompleter(androidx.concurrent.futures.CallbackToFutureAdapter.Completer<T!>) throws java.lang.Exception;
}
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public enum DirectExecutor implements java.util.concurrent.Executor {
+ method public void execute(Runnable!);
+ enum_constant public static final androidx.concurrent.futures.DirectExecutor INSTANCE;
+ }
+
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class ResolvableFuture<V> extends androidx.concurrent.futures.AbstractResolvableFuture<V> {
method public static <V> androidx.concurrent.futures.ResolvableFuture<V!>! create();
method public boolean set(V?);
diff --git a/concurrent/futures/api/restricted_1.1.0-alpha01.txt b/concurrent/futures/api/restricted_1.1.0-alpha01.txt
index 6dabf0b..3103236 100644
--- a/concurrent/futures/api/restricted_1.1.0-alpha01.txt
+++ b/concurrent/futures/api/restricted_1.1.0-alpha01.txt
@@ -34,6 +34,11 @@
method public Object? attachCompleter(androidx.concurrent.futures.CallbackToFutureAdapter.Completer<T!>) throws java.lang.Exception;
}
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public enum DirectExecutor implements java.util.concurrent.Executor {
+ method public void execute(Runnable!);
+ enum_constant public static final androidx.concurrent.futures.DirectExecutor INSTANCE;
+ }
+
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class ResolvableFuture<V> extends androidx.concurrent.futures.AbstractResolvableFuture<V> {
method public static <V> androidx.concurrent.futures.ResolvableFuture<V!>! create();
method public boolean set(V?);
diff --git a/concurrent/futures/api/restricted_current.txt b/concurrent/futures/api/restricted_current.txt
index 6dabf0b..3103236 100644
--- a/concurrent/futures/api/restricted_current.txt
+++ b/concurrent/futures/api/restricted_current.txt
@@ -34,6 +34,11 @@
method public Object? attachCompleter(androidx.concurrent.futures.CallbackToFutureAdapter.Completer<T!>) throws java.lang.Exception;
}
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public enum DirectExecutor implements java.util.concurrent.Executor {
+ method public void execute(Runnable!);
+ enum_constant public static final androidx.concurrent.futures.DirectExecutor INSTANCE;
+ }
+
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class ResolvableFuture<V> extends androidx.concurrent.futures.AbstractResolvableFuture<V> {
method public static <V> androidx.concurrent.futures.ResolvableFuture<V!>! create();
method public boolean set(V?);
diff --git a/concurrent/futures/lint-baseline.xml b/concurrent/futures/lint-baseline.xml
index 05fdc84..7e9e712 100644
--- a/concurrent/futures/lint-baseline.xml
+++ b/concurrent/futures/lint-baseline.xml
@@ -92,6 +92,17 @@
<issue
id="UnknownNullness"
message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+ errorLine1=" public void execute(Runnable command) {"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="src/main/java/androidx/concurrent/futures/DirectExecutor.java"
+ line="34"
+ column="25"/>
+ </issue>
+
+ <issue
+ id="UnknownNullness"
+ message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
errorLine1=" public static <V> ResolvableFuture<V> create() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
diff --git a/concurrent/futures/src/main/java/androidx/concurrent/futures/AbstractResolvableFuture.java b/concurrent/futures/src/main/java/androidx/concurrent/futures/AbstractResolvableFuture.java
index 9e6051b..3acecce 100644
--- a/concurrent/futures/src/main/java/androidx/concurrent/futures/AbstractResolvableFuture.java
+++ b/concurrent/futures/src/main/java/androidx/concurrent/futures/AbstractResolvableFuture.java
@@ -844,8 +844,11 @@
/**
* internal dependency on other /util/concurrent classes.
+ *
+ * @hide
*/
- private static <V> V getUninterruptibly(Future<V> future) throws ExecutionException {
+ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+ static <V> V getUninterruptibly(Future<V> future) throws ExecutionException {
boolean interrupted = false;
try {
while (true) {
diff --git a/concurrent/futures/src/main/java/androidx/concurrent/futures/DirectExecutor.java b/concurrent/futures/src/main/java/androidx/concurrent/futures/DirectExecutor.java
index b12180f..9f1244b 100644
--- a/concurrent/futures/src/main/java/androidx/concurrent/futures/DirectExecutor.java
+++ b/concurrent/futures/src/main/java/androidx/concurrent/futures/DirectExecutor.java
@@ -16,13 +16,18 @@
package androidx.concurrent.futures;
+import androidx.annotation.RestrictTo;
+
import java.util.concurrent.Executor;
/**
* An {@link Executor} that runs each task in the thread that invokes {@link Executor#execute
* execute}.
+ *
+ * @hide
*/
-enum DirectExecutor implements Executor {
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public enum DirectExecutor implements Executor {
INSTANCE;
@Override
diff --git a/coordinatorlayout/src/androidTest/java/androidx/coordinatorlayout/widget/CoordinatorLayoutTouchEventTest.java b/coordinatorlayout/src/androidTest/java/androidx/coordinatorlayout/widget/CoordinatorLayoutTouchEventTest.java
index b239e5b..09ef66a 100644
--- a/coordinatorlayout/src/androidTest/java/androidx/coordinatorlayout/widget/CoordinatorLayoutTouchEventTest.java
+++ b/coordinatorlayout/src/androidTest/java/androidx/coordinatorlayout/widget/CoordinatorLayoutTouchEventTest.java
@@ -36,7 +36,7 @@
import androidx.annotation.NonNull;
import androidx.test.ext.junit.runners.AndroidJUnit4;
-import androidx.test.filters.SmallTest;
+import androidx.test.filters.MediumTest;
import androidx.test.rule.ActivityTestRule;
import org.junit.Before;
@@ -47,7 +47,7 @@
import org.mockito.InOrder;
@SuppressWarnings({"unchecked", "rawtypes"})
-@SmallTest
+@MediumTest
@RunWith(AndroidJUnit4.class)
public class CoordinatorLayoutTouchEventTest {
private static final Touch[] NO_TOUCHES = new Touch[] {};
diff --git a/core/core/src/main/java/androidx/core/accessibilityservice/AccessibilityServiceInfoCompat.java b/core/core/src/main/java/androidx/core/accessibilityservice/AccessibilityServiceInfoCompat.java
index a8214fd..31d258c 100644
--- a/core/core/src/main/java/androidx/core/accessibilityservice/AccessibilityServiceInfoCompat.java
+++ b/core/core/src/main/java/androidx/core/accessibilityservice/AccessibilityServiceInfoCompat.java
@@ -191,13 +191,13 @@
* @param packageManager The current package manager
* @return The localized description.
*/
+ @SuppressWarnings("deprecation")
@Nullable
public static String loadDescription(
@NonNull AccessibilityServiceInfo info, @NonNull PackageManager packageManager) {
if (Build.VERSION.SDK_INT >= 16) {
return info.loadDescription(packageManager);
} else {
- //noinspection deprecation
return info.getDescription();
}
}
@@ -282,11 +282,11 @@
* @see #CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY
* @see #CAPABILITY_CAN_FILTER_KEY_EVENTS
*/
+ @SuppressWarnings("deprecation")
public static int getCapabilities(@NonNull AccessibilityServiceInfo info) {
if (Build.VERSION.SDK_INT >= 18) {
return info.getCapabilities();
} else {
- //noinspection deprecation
if (info.getCanRetrieveWindowContent()) {
return CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT;
}
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 162db98..3df4449d 100644
--- a/core/core/src/main/java/androidx/core/app/NotificationCompat.java
+++ b/core/core/src/main/java/androidx/core/app/NotificationCompat.java
@@ -764,6 +764,7 @@
* @param channelId The constructed Notification will be posted on this
* NotificationChannel.
*/
+ @SuppressWarnings("deprecation")
public Builder(@NonNull Context context, @NonNull String channelId) {
mContext = context;
mChannelId = channelId;
@@ -772,13 +773,13 @@
mNotification.when = System.currentTimeMillis();
mNotification.audioStreamType = Notification.STREAM_DEFAULT;
mPriority = PRIORITY_DEFAULT;
- mPeople = new ArrayList<String>();
+ mPeople = new ArrayList<>();
mAllowSystemGeneratedContextualActions = true;
}
/**
- * @deprecated use {@link #NotificationCompat.Builder(Context,String)} instead.
- * All posted Notifications must specify a NotificationChannel Id.
+ * @deprecated use {@code Builder(Context, String)} instead. All posted notifications must
+ * specify a NotificationChannel ID.
*/
@Deprecated
public Builder(Context context) {
@@ -991,6 +992,7 @@
* @param highPriority Passing true will cause this notification to be sent
* even if other notifications are suppressed.
*/
+ @SuppressWarnings("deprecation")
public Builder setFullScreenIntent(PendingIntent intent, boolean highPriority) {
mFullScreenIntent = intent;
setFlag(FLAG_HIGH_PRIORITY, highPriority);
@@ -1282,6 +1284,7 @@
* @param uri A URI for the person.
* @see Notification#EXTRA_PEOPLE
*/
+ @SuppressWarnings("deprecation")
public Builder addPerson(String uri) {
mPeople.add(uri);
return this;
@@ -3306,6 +3309,7 @@
}
// Package private access to avoid adding a SyntheticAccessor for the Action.Builder class.
+ @SuppressWarnings("deprecation")
Action(@Nullable IconCompat icon, CharSequence title, PendingIntent intent,
Bundle extras,
RemoteInput[] remoteInputs, RemoteInput[] dataOnlyRemoteInputs,
@@ -3329,6 +3333,7 @@
/**
* @deprecated use {@link #getIconCompat()} instead.
*/
+ @SuppressWarnings("deprecation")
@Deprecated
public int getIcon() {
return icon;
@@ -3337,6 +3342,7 @@
/**
* Return the icon associated with this Action.
*/
+ @SuppressWarnings("deprecation")
public @Nullable IconCompat getIconCompat() {
if (mIcon == null && icon != 0) {
mIcon = IconCompat.createWithResource(null, "", icon);
@@ -4120,6 +4126,7 @@
private int mContentIcon;
private int mContentIconGravity = DEFAULT_CONTENT_ICON_GRAVITY;
private int mContentActionIndex = UNSET_ACTION_INDEX;
+ @SuppressWarnings("deprecation")
private int mCustomSizePreset = SIZE_DEFAULT;
private int mCustomContentHeight;
private int mGravity = DEFAULT_GRAVITY;
@@ -4134,6 +4141,7 @@
public WearableExtender() {
}
+ @SuppressWarnings("deprecation")
public WearableExtender(Notification notification) {
Bundle extras = getExtras(notification);
Bundle wearableBundle = extras != null ? extras.getBundle(EXTRA_WEARABLE_EXTENSIONS)
@@ -4185,6 +4193,7 @@
* called by the {@link NotificationCompat.Builder#extend} method of
* {@link NotificationCompat.Builder}.
*/
+ @SuppressWarnings("deprecation")
@Override
public NotificationCompat.Builder extend(NotificationCompat.Builder builder) {
Bundle wearableBundle = new Bundle();
@@ -4261,7 +4270,7 @@
actionCompat.getActionIntent());
} else {
actionBuilder = new Notification.Action.Builder(
- actionCompat.getIcon(), actionCompat.getTitle(),
+ actionCompat.getIconCompat().getResId(), actionCompat.getTitle(),
actionCompat.getActionIntent());
}
Bundle actionExtras;
@@ -5755,6 +5764,7 @@
* @param notification The notification to inspect.
* @param actionIndex The index of the action to retrieve.
*/
+ @SuppressWarnings("deprecation")
public static Action getAction(Notification notification, int actionIndex) {
if (Build.VERSION.SDK_INT >= 20) {
return getActionCompatFromAction(notification.actions[actionIndex]);
@@ -5791,6 +5801,7 @@
}
}
+ @SuppressWarnings("deprecation")
@RequiresApi(20)
static Action getActionCompatFromAction(Notification.Action action) {
final RemoteInput[] remoteInputs;
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 3711994..aac35da 100644
--- a/core/core/src/main/java/androidx/core/app/NotificationCompatBuilder.java
+++ b/core/core/src/main/java/androidx/core/app/NotificationCompatBuilder.java
@@ -60,6 +60,7 @@
// @RequiresApi(21) - uncomment when lint bug is fixed.
private RemoteViews mHeadsUpContentView;
+ @SuppressWarnings("deprecation")
NotificationCompatBuilder(NotificationCompat.Builder b) {
mBuilderCompat = b;
if (Build.VERSION.SDK_INT >= 26) {
@@ -262,14 +263,17 @@
private void addAction(NotificationCompat.Action action) {
if (Build.VERSION.SDK_INT >= 20) {
Notification.Action.Builder actionBuilder;
+ IconCompat iconCompat = action.getIconCompat();
if (Build.VERSION.SDK_INT >= 23) {
- IconCompat iconCompat = action.getIconCompat();
actionBuilder = new Notification.Action.Builder(
- iconCompat == null ? null : iconCompat.toIcon(), action.getTitle(),
- action.getActionIntent());
+ iconCompat != null ? iconCompat.toIcon() : null,
+ action.getTitle(),
+ action.getActionIntent());
} else {
actionBuilder = new Notification.Action.Builder(
- action.getIcon(), action.getTitle(), action.getActionIntent());
+ iconCompat != null ? iconCompat.getResId() : 0,
+ action.getTitle(),
+ action.getActionIntent());
}
if (action.getRemoteInputs() != null) {
for (android.app.RemoteInput remoteInput : RemoteInput.fromCompat(
diff --git a/core/core/src/main/java/androidx/core/app/NotificationCompatJellybean.java b/core/core/src/main/java/androidx/core/app/NotificationCompatJellybean.java
index 4d07e31..35a7b45 100644
--- a/core/core/src/main/java/androidx/core/app/NotificationCompatJellybean.java
+++ b/core/core/src/main/java/androidx/core/app/NotificationCompatJellybean.java
@@ -24,6 +24,7 @@
import android.util.SparseArray;
import androidx.annotation.RequiresApi;
+import androidx.core.graphics.drawable.IconCompat;
import java.lang.reflect.Field;
import java.util.ArrayList;
@@ -137,7 +138,11 @@
public static Bundle writeActionAndGetExtras(
Notification.Builder builder, NotificationCompat.Action action) {
- builder.addAction(action.getIcon(), action.getTitle(), action.getActionIntent());
+ IconCompat iconCompat = action.getIconCompat();
+ builder.addAction(
+ iconCompat != null ? iconCompat.getResId() : 0,
+ action.getTitle(),
+ action.getActionIntent());
Bundle actionExtras = new Bundle(action.getExtras());
if (action.getRemoteInputs() != null) {
actionExtras.putParcelableArray(NotificationCompatExtras.EXTRA_REMOTE_INPUTS,
@@ -247,7 +252,8 @@
static Bundle getBundleForAction(NotificationCompat.Action action) {
Bundle bundle = new Bundle();
- bundle.putInt(KEY_ICON, action.getIcon());
+ IconCompat icon = action.getIconCompat();
+ bundle.putInt(KEY_ICON, icon != null ? icon.getResId() : 0);
bundle.putCharSequence(KEY_TITLE, action.getTitle());
bundle.putParcelable(KEY_ACTION_INTENT, action.getActionIntent());
Bundle actionExtras;
diff --git a/core/core/src/main/java/androidx/core/content/ContextCompat.java b/core/core/src/main/java/androidx/core/content/ContextCompat.java
index 597f879..6b0af66 100644
--- a/core/core/src/main/java/androidx/core/content/ContextCompat.java
+++ b/core/core/src/main/java/androidx/core/content/ContextCompat.java
@@ -448,6 +448,7 @@
* The value 0 is an invalid identifier.
* @return Drawable An object that can be used to draw this resource.
*/
+ @SuppressWarnings("deprecation")
@Nullable
public static Drawable getDrawable(@NonNull Context context, @DrawableRes int id) {
if (Build.VERSION.SDK_INT >= 21) {
@@ -485,6 +486,7 @@
* @throws android.content.res.Resources.NotFoundException if the given ID
* does not exist.
*/
+ @SuppressWarnings("deprecation")
@Nullable
public static ColorStateList getColorStateList(@NonNull Context context,
@ColorRes int id) {
@@ -508,6 +510,7 @@
* @throws android.content.res.Resources.NotFoundException if the given ID
* does not exist.
*/
+ @SuppressWarnings("deprecation")
@ColorInt
public static int getColor(@NonNull Context context, @ColorRes int id) {
if (Build.VERSION.SDK_INT >= 23) {
diff --git a/core/core/src/main/java/androidx/core/content/pm/PackageInfoCompat.java b/core/core/src/main/java/androidx/core/content/pm/PackageInfoCompat.java
index bcd55b3..b7e7452 100644
--- a/core/core/src/main/java/androidx/core/content/pm/PackageInfoCompat.java
+++ b/core/core/src/main/java/androidx/core/content/pm/PackageInfoCompat.java
@@ -30,11 +30,11 @@
*
* @see PackageInfo#getLongVersionCode()
*/
+ @SuppressWarnings("deprecation")
public static long getLongVersionCode(@NonNull PackageInfo info) {
if (Build.VERSION.SDK_INT >= 28) {
return info.getLongVersionCode();
}
- //noinspection deprecation
return info.versionCode;
}
diff --git a/core/core/src/main/java/androidx/core/content/pm/PermissionInfoCompat.java b/core/core/src/main/java/androidx/core/content/pm/PermissionInfoCompat.java
index 5c3401f..642d767 100644
--- a/core/core/src/main/java/androidx/core/content/pm/PermissionInfoCompat.java
+++ b/core/core/src/main/java/androidx/core/content/pm/PermissionInfoCompat.java
@@ -67,13 +67,13 @@
/**
* Return the base permission type of a {@link PermissionInfo}.
*/
+ @SuppressWarnings("deprecation")
@SuppressLint("WrongConstant") // for "PermissionInfo.PROTECTION_MASK_BASE"
@Protection
public static int getProtection(@NonNull PermissionInfo permissionInfo) {
if (Build.VERSION.SDK_INT >= 28) {
return permissionInfo.getProtection();
} else {
- //noinspection deprecation
return permissionInfo.protectionLevel & PermissionInfo.PROTECTION_MASK_BASE;
}
}
@@ -81,13 +81,13 @@
/**
* Return the additional protection flags of a {@link PermissionInfo}.
*/
+ @SuppressWarnings("deprecation")
@SuppressLint("WrongConstant") // for "~PermissionInfo.PROTECTION_MASK_BASE"
@ProtectionFlags
public static int getProtectionFlags(@NonNull PermissionInfo permissionInfo) {
if (Build.VERSION.SDK_INT >= 28) {
return permissionInfo.getProtectionFlags();
} else {
- //noinspection deprecation
return permissionInfo.protectionLevel & ~PermissionInfo.PROTECTION_MASK_BASE;
}
}
diff --git a/core/core/src/main/java/androidx/core/database/CursorWindowCompat.java b/core/core/src/main/java/androidx/core/database/CursorWindowCompat.java
index 855c25c..01a48df 100644
--- a/core/core/src/main/java/androidx/core/database/CursorWindowCompat.java
+++ b/core/core/src/main/java/androidx/core/database/CursorWindowCompat.java
@@ -36,6 +36,7 @@
* <p>
* Prior to Android P, this method will return a CursorWindow of size defined by the platform.
*/
+ @SuppressWarnings("deprecation")
@NonNull
public static CursorWindow create(@Nullable String name, long windowSizeBytes) {
if (Build.VERSION.SDK_INT >= 28) {
@@ -43,7 +44,6 @@
} else if (Build.VERSION.SDK_INT >= 15) {
return new CursorWindow(name);
} else {
- //noinspection deprecation
return new CursorWindow(false);
}
}
diff --git a/core/core/src/main/java/androidx/core/os/ConfigurationCompat.java b/core/core/src/main/java/androidx/core/os/ConfigurationCompat.java
index 423c1fd..e6b4617 100644
--- a/core/core/src/main/java/androidx/core/os/ConfigurationCompat.java
+++ b/core/core/src/main/java/androidx/core/os/ConfigurationCompat.java
@@ -35,6 +35,7 @@
*
* @return The locale list.
*/
+ @SuppressWarnings("deprecation")
@NonNull
public static LocaleListCompat getLocales(@NonNull Configuration configuration) {
if (SDK_INT >= 24) {
diff --git a/core/core/src/main/java/androidx/core/text/HtmlCompat.java b/core/core/src/main/java/androidx/core/text/HtmlCompat.java
index 8d9b932..b132c00 100644
--- a/core/core/src/main/java/androidx/core/text/HtmlCompat.java
+++ b/core/core/src/main/java/androidx/core/text/HtmlCompat.java
@@ -141,12 +141,12 @@
* Invokes {@link Html#fromHtml(String, int)} on API 24 and newer, otherwise {@code flags} are
* ignored and {@link Html#fromHtml(String)} is used.
*/
+ @SuppressWarnings("deprecation")
@NonNull
public static Spanned fromHtml(@NonNull String source, @FromHtmlFlags int flags) {
if (Build.VERSION.SDK_INT >= 24) {
return Html.fromHtml(source, flags);
}
- //noinspection deprecation
return Html.fromHtml(source);
}
@@ -155,13 +155,13 @@
* otherwise {@code flags} are ignored and
* {@link Html#fromHtml(String, ImageGetter, TagHandler)} is used.
*/
+ @SuppressWarnings("deprecation")
@NonNull
public static Spanned fromHtml(@NonNull String source, @FromHtmlFlags int flags,
@Nullable ImageGetter imageGetter, @Nullable TagHandler tagHandler) {
if (Build.VERSION.SDK_INT >= 24) {
return Html.fromHtml(source, flags, imageGetter, tagHandler);
}
- //noinspection deprecation
return Html.fromHtml(source, imageGetter, tagHandler);
}
@@ -169,12 +169,12 @@
* Invokes {@link Html#toHtml(Spanned, int)} on API 24 or newer, otherwise {@code options} are
* ignored and {@link Html#toHtml(Spanned)} is used.
*/
+ @SuppressWarnings("deprecation")
@NonNull
public static String toHtml(@NonNull Spanned text, @ToHtmlOptions int options) {
if (Build.VERSION.SDK_INT >= 24) {
return Html.toHtml(text, options);
}
- //noinspection deprecation
return Html.toHtml(text);
}
diff --git a/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityEventCompat.java b/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityEventCompat.java
index 9e7c758..93e5a90 100644
--- a/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityEventCompat.java
+++ b/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityEventCompat.java
@@ -238,6 +238,7 @@
*
* @deprecated Use {@link AccessibilityEvent#appendRecord(AccessibilityRecord)} directly.
*/
+ @SuppressWarnings("deprecation")
@Deprecated
public static void appendRecord(AccessibilityEvent event, AccessibilityRecordCompat record) {
event.appendRecord((AccessibilityRecord) record.getImpl());
@@ -251,6 +252,7 @@
*
* @deprecated Use {@link AccessibilityEvent#getRecord(int)} directly.
*/
+ @SuppressWarnings("deprecation")
@Deprecated
public static AccessibilityRecordCompat getRecord(AccessibilityEvent event, int index) {
return new AccessibilityRecordCompat(event.getRecord(index));
@@ -271,6 +273,7 @@
*
* @deprecated Use the {@link AccessibilityEvent} directly as {@link AccessibilityRecord}.
*/
+ @SuppressWarnings("deprecation")
@Deprecated
public static AccessibilityRecordCompat asRecord(AccessibilityEvent event) {
return new AccessibilityRecordCompat(event);
diff --git a/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityManagerCompat.java b/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityManagerCompat.java
index 432e67c..acdf35e 100644
--- a/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityManagerCompat.java
+++ b/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityManagerCompat.java
@@ -40,6 +40,7 @@
* @deprecated Use {@link AccessibilityManager#addAccessibilityStateChangeListener(
* AccessibilityManager.AccessibilityStateChangeListener)} directly.
*/
+ @SuppressWarnings("deprecation")
@Deprecated
public static boolean addAccessibilityStateChangeListener(AccessibilityManager manager,
AccessibilityStateChangeListener listener) {
@@ -60,6 +61,7 @@
* @deprecated Use {@link AccessibilityManager#removeAccessibilityStateChangeListener(
* AccessibilityManager.AccessibilityStateChangeListener)} directly.
*/
+ @SuppressWarnings("deprecation")
@Deprecated
public static boolean removeAccessibilityStateChangeListener(AccessibilityManager manager,
AccessibilityStateChangeListener listener) {
@@ -70,6 +72,7 @@
new AccessibilityStateChangeListenerWrapper(listener));
}
+ @SuppressWarnings("deprecation")
private static class AccessibilityStateChangeListenerWrapper
implements AccessibilityManager.AccessibilityStateChangeListener {
AccessibilityStateChangeListener mListener;
@@ -232,6 +235,7 @@
* @deprecated Use {@link AccessibilityManager.AccessibilityStateChangeListener} directly
* instead of this listener.
*/
+ @SuppressWarnings("deprecation")
@Deprecated
public static abstract class AccessibilityStateChangeListenerCompat
implements AccessibilityStateChangeListener {
diff --git a/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java b/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java
index 1d3090f..48a81ec 100644
--- a/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java
+++ b/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java
@@ -948,6 +948,7 @@
* @return If the item is a heading.
* @deprecated Use {@link AccessibilityNodeInfoCompat#isHeading()}
*/
+ @SuppressWarnings("deprecation")
@Deprecated
public boolean isHeading() {
if (Build.VERSION.SDK_INT >= 19) {
@@ -1612,6 +1613,7 @@
* @param object The info to wrap.
* @return A wrapper for if the object is not null, null otherwise.
*/
+ @SuppressWarnings("deprecation")
static AccessibilityNodeInfoCompat wrapNonNullInstance(Object object) {
if (object != null) {
return new AccessibilityNodeInfoCompat(object);
@@ -3817,6 +3819,7 @@
*
* @return {@code true} if the node is a heading, {@code false} otherwise.
*/
+ @SuppressWarnings("deprecation")
public boolean isHeading() {
if (Build.VERSION.SDK_INT >= 28) {
return mInfo.isHeading();
@@ -4017,6 +4020,7 @@
return true;
}
+ @SuppressWarnings("deprecation")
@NonNull
@Override
public String toString() {
diff --git a/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityRecordCompat.java b/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityRecordCompat.java
index 2e8ced2..e3fe75c 100644
--- a/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityRecordCompat.java
+++ b/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityRecordCompat.java
@@ -64,6 +64,7 @@
*
* @deprecated Use {@link AccessibilityRecord#obtain(AccessibilityRecord)} directly.
*/
+ @SuppressWarnings("deprecation")
@Deprecated
public static AccessibilityRecordCompat obtain(AccessibilityRecordCompat record) {
return new AccessibilityRecordCompat(AccessibilityRecord.obtain(record.mRecord));
@@ -77,6 +78,7 @@
*
* @deprecated Use {@link AccessibilityRecord#obtain()} directly.
*/
+ @SuppressWarnings("deprecation")
@Deprecated
public static AccessibilityRecordCompat obtain() {
return new AccessibilityRecordCompat(AccessibilityRecord.obtain());
diff --git a/cursoradapter/src/main/java/androidx/cursoradapter/widget/CursorAdapter.java b/cursoradapter/src/main/java/androidx/cursoradapter/widget/CursorAdapter.java
index 5984051..f0fc461 100644
--- a/cursoradapter/src/main/java/androidx/cursoradapter/widget/CursorAdapter.java
+++ b/cursoradapter/src/main/java/androidx/cursoradapter/widget/CursorAdapter.java
@@ -179,6 +179,7 @@
@SuppressWarnings("deprecation")
void init(Context context, Cursor c, int flags) {
+ // Maintained for compatibility.
if ((flags & FLAG_AUTO_REQUERY) == FLAG_AUTO_REQUERY) {
flags |= FLAG_REGISTER_CONTENT_OBSERVER;
mAutoRequery = true;
diff --git a/exifinterface/src/main/java/androidx/exifinterface/media/ExifInterface.java b/exifinterface/src/main/java/androidx/exifinterface/media/ExifInterface.java
index fc0a595..19e58ae 100644
--- a/exifinterface/src/main/java/androidx/exifinterface/media/ExifInterface.java
+++ b/exifinterface/src/main/java/androidx/exifinterface/media/ExifInterface.java
@@ -764,6 +764,63 @@
*/
public static final String TAG_DATETIME_DIGITIZED = "DateTimeDigitized";
/**
+ * <p>A tag used to record the offset from UTC (the time difference from Universal Time
+ * Coordinated including daylight saving time) of the time of DateTime tag. The format when
+ * recording the offset is "±HH:MM". The part of "±" shall be recorded as "+" or "-". When
+ * the offsets are unknown, all the character spaces except colons (":") should be filled
+ * with blank characters, or else the Interoperability field should be filled with blank
+ * characters. The character string length is 7 Bytes including NULL for termination. When
+ * the field is left blank, it is treated as unknown.</p>
+ *
+ * <ul>
+ * <li>Tag = 36880</li>
+ * <li>Type = String</li>
+ * <li>Length = 7</li>
+ * <li>Default = None</li>
+ * </ul>
+ * @hide
+ */
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
+ public static final String TAG_OFFSET_TIME = "OffsetTime";
+ /**
+ * <p>A tag used to record the offset from UTC (the time difference from Universal Time
+ * Coordinated including daylight saving time) of the time of DateTimeOriginal tag. The format
+ * when recording the offset is "±HH:MM". The part of "±" shall be recorded as "+" or "-". When
+ * the offsets are unknown, all the character spaces except colons (":") should be filled
+ * with blank characters, or else the Interoperability field should be filled with blank
+ * characters. The character string length is 7 Bytes including NULL for termination. When
+ * the field is left blank, it is treated as unknown.</p>
+ *
+ * <ul>
+ * <li>Tag = 36881</li>
+ * <li>Type = String</li>
+ * <li>Length = 7</li>
+ * <li>Default = None</li>
+ * </ul>
+ * @hide
+ */
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
+ public static final String TAG_OFFSET_TIME_ORIGINAL = "OffsetTimeOriginal";
+ /**
+ * <p>A tag used to record the offset from UTC (the time difference from Universal Time
+ * Coordinated including daylight saving time) of the time of DateTimeDigitized tag. The format
+ * when recording the offset is "±HH:MM". The part of "±" shall be recorded as "+" or "-". When
+ * the offsets are unknown, all the character spaces except colons (":") should be filled
+ * with blank characters, or else the Interoperability field should be filled with blank
+ * characters. The character string length is 7 Bytes including NULL for termination. When
+ * the field is left blank, it is treated as unknown.</p>
+ *
+ * <ul>
+ * <li>Tag = 36882</li>
+ * <li>Type = String</li>
+ * <li>Length = 7</li>
+ * <li>Default = None</li>
+ * </ul>
+ * @hide
+ */
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
+ public static final String TAG_OFFSET_TIME_DIGITIZED = "OffsetTimeDigitized";
+ /**
* <p>A tag used to record fractions of seconds for {@link #TAG_DATETIME}.</p>
*
* <ul>
@@ -3467,9 +3524,18 @@
new ExifTag(TAG_SPECTRAL_SENSITIVITY, 34852, IFD_FORMAT_STRING),
new ExifTag(TAG_PHOTOGRAPHIC_SENSITIVITY, 34855, IFD_FORMAT_USHORT),
new ExifTag(TAG_OECF, 34856, IFD_FORMAT_UNDEFINED),
+ new ExifTag(TAG_SENSITIVITY_TYPE, 34864, IFD_FORMAT_USHORT),
+ new ExifTag(TAG_STANDARD_OUTPUT_SENSITIVITY, 34865, IFD_FORMAT_ULONG),
+ new ExifTag(TAG_RECOMMENDED_EXPOSURE_INDEX, 34866, IFD_FORMAT_ULONG),
+ new ExifTag(TAG_ISO_SPEED, 34867, IFD_FORMAT_ULONG),
+ new ExifTag(TAG_ISO_SPEED_LATITUDE_YYY, 34868, IFD_FORMAT_ULONG),
+ new ExifTag(TAG_ISO_SPEED_LATITUDE_ZZZ, 34869, IFD_FORMAT_ULONG),
new ExifTag(TAG_EXIF_VERSION, 36864, IFD_FORMAT_STRING),
new ExifTag(TAG_DATETIME_ORIGINAL, 36867, IFD_FORMAT_STRING),
new ExifTag(TAG_DATETIME_DIGITIZED, 36868, IFD_FORMAT_STRING),
+ new ExifTag(TAG_OFFSET_TIME, 36880, IFD_FORMAT_STRING),
+ new ExifTag(TAG_OFFSET_TIME_ORIGINAL, 36881, IFD_FORMAT_STRING),
+ new ExifTag(TAG_OFFSET_TIME_DIGITIZED, 36882, IFD_FORMAT_STRING),
new ExifTag(TAG_COMPONENTS_CONFIGURATION, 37121, IFD_FORMAT_UNDEFINED),
new ExifTag(TAG_COMPRESSED_BITS_PER_PIXEL, 37122, IFD_FORMAT_URATIONAL),
new ExifTag(TAG_SHUTTER_SPEED_VALUE, 37377, IFD_FORMAT_SRATIONAL),
@@ -3518,6 +3584,12 @@
new ExifTag(TAG_DEVICE_SETTING_DESCRIPTION, 41995, IFD_FORMAT_UNDEFINED),
new ExifTag(TAG_SUBJECT_DISTANCE_RANGE, 41996, IFD_FORMAT_USHORT),
new ExifTag(TAG_IMAGE_UNIQUE_ID, 42016, IFD_FORMAT_STRING),
+ new ExifTag(TAG_CAMERA_OWNER_NAME, 42032, IFD_FORMAT_STRING),
+ new ExifTag(TAG_BODY_SERIAL_NUMBER, 42033, IFD_FORMAT_STRING),
+ new ExifTag(TAG_LENS_SPECIFICATION, 42034, IFD_FORMAT_URATIONAL),
+ new ExifTag(TAG_LENS_MAKE, 42035, IFD_FORMAT_STRING),
+ new ExifTag(TAG_LENS_MODEL, 42036, IFD_FORMAT_STRING),
+ new ExifTag(TAG_GAMMA, 42240, IFD_FORMAT_URATIONAL),
new ExifTag(TAG_DNG_VERSION, 50706, IFD_FORMAT_BYTE),
new ExifTag(TAG_DEFAULT_CROP_SIZE, 50720, IFD_FORMAT_USHORT, IFD_FORMAT_ULONG)
};
@@ -3554,7 +3626,8 @@
new ExifTag(TAG_GPS_PROCESSING_METHOD, 27, IFD_FORMAT_UNDEFINED),
new ExifTag(TAG_GPS_AREA_INFORMATION, 28, IFD_FORMAT_UNDEFINED),
new ExifTag(TAG_GPS_DATESTAMP, 29, IFD_FORMAT_STRING),
- new ExifTag(TAG_GPS_DIFFERENTIAL, 30, IFD_FORMAT_USHORT)
+ new ExifTag(TAG_GPS_DIFFERENTIAL, 30, IFD_FORMAT_USHORT),
+ new ExifTag(TAG_GPS_H_POSITIONING_ERROR, 31, IFD_FORMAT_URATIONAL)
};
// Primary image IFD Interoperability tag (See JEITA CP-3451C Section 4.6.8 Tag Support Levels)
private static final ExifTag[] IFD_INTEROPERABILITY_TAGS = new ExifTag[] {
@@ -3945,11 +4018,13 @@
*
* @param tag the name of the tag.
*/
+ @SuppressWarnings("deprecation")
@Nullable
private ExifAttribute getExifAttribute(@NonNull String tag) {
if (tag == null) {
throw new NullPointerException("tag shouldn't be null");
}
+ // Maintain compatibility.
if (TAG_ISO_SPEED_RATINGS.equals(tag)) {
if (DEBUG) {
Log.d(TAG, "getExifAttribute: Replacing TAG_ISO_SPEED_RATINGS with "
@@ -4064,10 +4139,12 @@
* @param tag the name of the tag.
* @param value the value of the tag.
*/
+ @SuppressWarnings("deprecation")
public void setAttribute(@NonNull String tag, @Nullable String value) {
if (tag == null) {
throw new NullPointerException("tag shouldn't be null");
}
+ // Maintain compatibility.
if (TAG_ISO_SPEED_RATINGS.equals(tag)) {
if (DEBUG) {
Log.d(TAG, "setAttribute: Replacing TAG_ISO_SPEED_RATINGS with "
diff --git a/leanback/src/androidTest/java/androidx/leanback/app/DetailsSupportFragmentTest.java b/leanback/src/androidTest/java/androidx/leanback/app/DetailsSupportFragmentTest.java
index b7dfc34..2d8f4df 100644
--- a/leanback/src/androidTest/java/androidx/leanback/app/DetailsSupportFragmentTest.java
+++ b/leanback/src/androidTest/java/androidx/leanback/app/DetailsSupportFragmentTest.java
@@ -47,6 +47,7 @@
import androidx.leanback.widget.ParallaxTarget;
import androidx.leanback.widget.RecyclerViewParallax;
import androidx.leanback.widget.VerticalGridView;
+import androidx.test.filters.FlakyTest;
import androidx.test.filters.LargeTest;
import androidx.test.filters.SdkSuppress;
import androidx.test.platform.app.InstrumentationRegistry;
@@ -472,6 +473,7 @@
fragmentOnStartWithVideoInternal(DetailsSupportFragmentWithVideo2.class);
}
+ @FlakyTest
@Test
public void navigateBetweenRowsAndTitle() throws Throwable {
SingleSupportFragmentTestActivity activity =
diff --git a/leanback/src/androidTest/java/androidx/leanback/widget/GridWidgetTest.java b/leanback/src/androidTest/java/androidx/leanback/widget/GridWidgetTest.java
index 23b0ef3..574cd15 100644
--- a/leanback/src/androidTest/java/androidx/leanback/widget/GridWidgetTest.java
+++ b/leanback/src/androidTest/java/androidx/leanback/widget/GridWidgetTest.java
@@ -54,6 +54,7 @@
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.RecyclerViewAccessibilityDelegate;
import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.FlakyTest;
import androidx.test.filters.LargeTest;
import androidx.test.filters.SdkSuppress;
import androidx.test.platform.app.InstrumentationRegistry;
@@ -4342,6 +4343,7 @@
assertEquals(0, mGridView.getSelectedPosition());
}
+ @FlakyTest
@Test
public void testExtraLayoutSpace() throws Throwable {
Intent intent = new Intent();
@@ -5389,6 +5391,7 @@
mGridView.findViewHolderForAdapterPosition(29).itemView, lastChild);
}
+ @FlakyTest
@Test
public void testAnimateOutBlockLayout() throws Throwable {
Intent intent = new Intent();
diff --git a/leanback/src/main/java/androidx/leanback/app/BackgroundFragment.java b/leanback/src/main/java/androidx/leanback/app/BackgroundFragment.java
index d02edee..e9e4615 100644
--- a/leanback/src/main/java/androidx/leanback/app/BackgroundFragment.java
+++ b/leanback/src/main/java/androidx/leanback/app/BackgroundFragment.java
@@ -21,6 +21,7 @@
/**
* Fragment used by the background manager.
+ *
* @hide
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
diff --git a/leanback/src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java b/leanback/src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java
index 74105c5..ce3ef92 100644
--- a/leanback/src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java
+++ b/leanback/src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java
@@ -26,7 +26,7 @@
/**
* An abstract {@link Presenter} for rendering a detailed description of an
- * item. Typically this Presenter will be used in a {@link DetailsOverviewRowPresenter}
+ * item. Typically this Presenter will be used in a {@link FullWidthDetailsOverviewRowPresenter}
* or {@link PlaybackControlsRowPresenter}.
*
* <p>Subclasses must override {@link #onBindDescription} to implement the data
diff --git a/leanback/src/main/java/androidx/leanback/widget/picker/Picker.java b/leanback/src/main/java/androidx/leanback/widget/picker/Picker.java
index c367f35..cd2a421 100644
--- a/leanback/src/main/java/androidx/leanback/widget/picker/Picker.java
+++ b/leanback/src/main/java/androidx/leanback/widget/picker/Picker.java
@@ -99,6 +99,7 @@
* @return The separator that will be populated between all the Picker columns.
* @deprecated Use {@link #getSeparators()}
*/
+ @Deprecated
public final CharSequence getSeparator() {
return mSeparators.get(0);
}
diff --git a/media/src/main/java/android/support/v4/media/session/PlaybackStateCompat.java b/media/src/main/java/android/support/v4/media/session/PlaybackStateCompat.java
index c0fa895..40d565a 100644
--- a/media/src/main/java/android/support/v4/media/session/PlaybackStateCompat.java
+++ b/media/src/main/java/android/support/v4/media/session/PlaybackStateCompat.java
@@ -1327,6 +1327,7 @@
* @return this
* @deprecated Use {@link #setErrorMessage(int, CharSequence)} instead.
*/
+ @Deprecated
public Builder setErrorMessage(CharSequence errorMessage) {
mErrorMessage = errorMessage;
return this;
diff --git a/media/src/main/java/androidx/media/AudioManagerCompat.java b/media/src/main/java/androidx/media/AudioManagerCompat.java
index 4186245..948aa82 100644
--- a/media/src/main/java/androidx/media/AudioManagerCompat.java
+++ b/media/src/main/java/androidx/media/AudioManagerCompat.java
@@ -75,6 +75,7 @@
* AudioManager#AUDIOFOCUS_REQUEST_GRANTED}.
* @throws NullPointerException if passed a null argument
*/
+ @SuppressWarnings("deprecation")
public static int requestAudioFocus(
@NonNull AudioManager audioManager, @NonNull AudioFocusRequestCompat focusRequest) {
if (audioManager == null) {
@@ -103,6 +104,7 @@
* AudioManager#AUDIOFOCUS_REQUEST_GRANTED}
* @throws IllegalArgumentException if passed a null argument
*/
+ @SuppressWarnings("deprecation")
public static int abandonAudioFocusRequest(
@NonNull AudioManager audioManager, @NonNull AudioFocusRequestCompat focusRequest) {
if (audioManager == null) {
diff --git a/media2/session/src/main/java/androidx/media2/session/MediaUtils.java b/media2/session/src/main/java/androidx/media2/session/MediaUtils.java
index b77bf45..9b74698 100644
--- a/media2/session/src/main/java/androidx/media2/session/MediaUtils.java
+++ b/media2/session/src/main/java/androidx/media2/session/MediaUtils.java
@@ -753,8 +753,8 @@
public static MediaController.PlaybackInfo toPlaybackInfo2(
MediaControllerCompat.PlaybackInfo info) {
return MediaController.PlaybackInfo.createPlaybackInfo(info.getPlaybackType(),
- new AudioAttributesCompat.Builder()
- .setLegacyStreamType(info.getAudioStream()).build(),
+ new AudioAttributesCompat.Builder().setLegacyStreamType(
+ info.getAudioAttributes().getLegacyStreamType()).build(),
info.getVolumeControl(), info.getMaxVolume(), info.getCurrentVolume());
}
diff --git a/media2/widget/src/androidTest/java/androidx/media2/widget/MediaControlViewTestActivity.java b/media2/widget/src/androidTest/java/androidx/media2/widget/MediaControlViewTestActivity.java
index 4535176..5dd2103 100644
--- a/media2/widget/src/androidTest/java/androidx/media2/widget/MediaControlViewTestActivity.java
+++ b/media2/widget/src/androidTest/java/androidx/media2/widget/MediaControlViewTestActivity.java
@@ -35,6 +35,7 @@
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ TestUtils.setKeepScreenOn(this);
setContentView(R.layout.mediacontrolviewtest_layout);
mSurfaceView = findViewById(R.id.surfaceview);
}
diff --git a/media2/widget/src/androidTest/java/androidx/media2/widget/MediaControlView_WithPlayerTest.java b/media2/widget/src/androidTest/java/androidx/media2/widget/MediaControlView_WithPlayerTest.java
index ef6974c..e9a2912 100644
--- a/media2/widget/src/androidTest/java/androidx/media2/widget/MediaControlView_WithPlayerTest.java
+++ b/media2/widget/src/androidTest/java/androidx/media2/widget/MediaControlView_WithPlayerTest.java
@@ -95,8 +95,6 @@
Uri fileSchemeUri = Uri.parse("android.resource://" + mContext.getPackageName() + "/"
+ androidx.media2.widget.test.R.raw.test_file_scheme_video);
mFileSchemeMediaItem = createTestMediaItem(fileSchemeUri);
-
- setKeepScreenOn(mActivityRule);
checkAttachedToWindow(mMediaControlView);
}
diff --git a/media2/widget/src/androidTest/java/androidx/media2/widget/MediaControlView_WithoutPlayerTest.java b/media2/widget/src/androidTest/java/androidx/media2/widget/MediaControlView_WithoutPlayerTest.java
index 9f2642a..a4fa4dd 100644
--- a/media2/widget/src/androidTest/java/androidx/media2/widget/MediaControlView_WithoutPlayerTest.java
+++ b/media2/widget/src/androidTest/java/androidx/media2/widget/MediaControlView_WithoutPlayerTest.java
@@ -61,8 +61,6 @@
mActivity = mActivityRule.getActivity();
mMediaControlView = mActivity.findViewById(
androidx.media2.widget.test.R.id.mediacontrolview);
-
- setKeepScreenOn(mActivityRule);
checkAttachedToWindow(mMediaControlView);
}
diff --git a/media2/widget/src/androidTest/java/androidx/media2/widget/MediaWidgetTestBase.java b/media2/widget/src/androidTest/java/androidx/media2/widget/MediaWidgetTestBase.java
index dac6636..c96ba43 100644
--- a/media2/widget/src/androidTest/java/androidx/media2/widget/MediaWidgetTestBase.java
+++ b/media2/widget/src/androidTest/java/androidx/media2/widget/MediaWidgetTestBase.java
@@ -16,19 +16,12 @@
package androidx.media2.widget;
-import static android.content.Context.KEYGUARD_SERVICE;
-
import static org.junit.Assert.assertTrue;
-import android.app.Activity;
-import android.app.Instrumentation;
-import android.app.KeyguardManager;
import android.content.Context;
import android.net.Uri;
-import android.os.Build;
import android.text.TextUtils;
import android.view.View;
-import android.view.WindowManager;
import androidx.annotation.GuardedBy;
import androidx.annotation.NonNull;
@@ -43,8 +36,6 @@
import androidx.media2.session.MediaSession;
import androidx.media2.widget.test.R;
import androidx.test.core.app.ApplicationProvider;
-import androidx.test.platform.app.InstrumentationRegistry;
-import androidx.test.rule.ActivityTestRule;
import org.junit.Before;
@@ -82,31 +73,6 @@
mSessionCallbackExecutor = Executors.newFixedThreadPool(1);
}
- static <T extends Activity> void setKeepScreenOn(ActivityTestRule<T> activityRule)
- throws Throwable {
- final Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation();
- final Activity activity = activityRule.getActivity();
- activityRule.runOnUiThread(new Runnable() {
- @Override
- public void run() {
- if (Build.VERSION.SDK_INT >= 27) {
- activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
- activity.setTurnScreenOn(true);
- activity.setShowWhenLocked(true);
- KeyguardManager keyguardManager = (KeyguardManager)
- instrumentation.getTargetContext().getSystemService(KEYGUARD_SERVICE);
- keyguardManager.requestDismissKeyguard(activity, null);
- } else {
- activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
- | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
- | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
- | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
- }
- }
- });
- instrumentation.waitForIdleSync();
- }
-
static void checkAttachedToWindow(View view) throws Exception {
if (!view.isAttachedToWindow()) {
final CountDownLatch latch = new CountDownLatch(1);
diff --git a/media2/widget/src/androidTest/java/androidx/media2/widget/TestUtils.java b/media2/widget/src/androidTest/java/androidx/media2/widget/TestUtils.java
new file mode 100644
index 0000000..3d2ba52
--- /dev/null
+++ b/media2/widget/src/androidTest/java/androidx/media2/widget/TestUtils.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.media2.widget;
+
+import static android.content.Context.KEYGUARD_SERVICE;
+
+import android.app.Activity;
+import android.app.KeyguardManager;
+import android.os.Build;
+import android.view.WindowManager;
+
+final class TestUtils {
+ static void setKeepScreenOn(Activity activity) {
+ if (Build.VERSION.SDK_INT >= 27) {
+ activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+ activity.setTurnScreenOn(true);
+ activity.setShowWhenLocked(true);
+ KeyguardManager keyguardManager =
+ (KeyguardManager) activity.getSystemService(KEYGUARD_SERVICE);
+ keyguardManager.requestDismissKeyguard(activity, null);
+ } else {
+ activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
+ | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
+ | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
+ | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
+ }
+ }
+
+ private TestUtils() {}
+}
diff --git a/media2/widget/src/androidTest/java/androidx/media2/widget/VideoViewTestActivity.java b/media2/widget/src/androidTest/java/androidx/media2/widget/VideoViewTestActivity.java
index a7be923..cf5955a 100644
--- a/media2/widget/src/androidTest/java/androidx/media2/widget/VideoViewTestActivity.java
+++ b/media2/widget/src/androidTest/java/androidx/media2/widget/VideoViewTestActivity.java
@@ -31,6 +31,7 @@
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ TestUtils.setKeepScreenOn(this);
setContentView(R.layout.videoview_layout);
}
}
diff --git a/media2/widget/src/androidTest/java/androidx/media2/widget/VideoView_WithPlayerTest.java b/media2/widget/src/androidTest/java/androidx/media2/widget/VideoView_WithPlayerTest.java
index dee8015..fe1bb1b 100644
--- a/media2/widget/src/androidTest/java/androidx/media2/widget/VideoView_WithPlayerTest.java
+++ b/media2/widget/src/androidTest/java/androidx/media2/widget/VideoView_WithPlayerTest.java
@@ -92,8 +92,6 @@
mVideoView = mActivity.findViewById(R.id.videoview);
mMediaItem = createTestMediaItem();
mPixelCopyHelper = new SynchronousPixelCopy();
-
- setKeepScreenOn(mActivityRule);
checkAttachedToWindow(mVideoView);
}
diff --git a/media2/widget/src/androidTest/java/androidx/media2/widget/VideoView_WithoutPlayerTest.java b/media2/widget/src/androidTest/java/androidx/media2/widget/VideoView_WithoutPlayerTest.java
index 235a40e..26e3c26 100644
--- a/media2/widget/src/androidTest/java/androidx/media2/widget/VideoView_WithoutPlayerTest.java
+++ b/media2/widget/src/androidTest/java/androidx/media2/widget/VideoView_WithoutPlayerTest.java
@@ -47,8 +47,6 @@
public void setup() throws Throwable {
mActivity = mActivityRule.getActivity();
mVideoView = mActivity.findViewById(R.id.videoview);
-
- setKeepScreenOn(mActivityRule);
checkAttachedToWindow(mVideoView);
}
diff --git a/mediarouter/src/main/java/androidx/mediarouter/media/MediaRouteDescriptor.java b/mediarouter/src/main/java/androidx/mediarouter/media/MediaRouteDescriptor.java
index 9279e58..b4c7773 100644
--- a/mediarouter/src/main/java/androidx/mediarouter/media/MediaRouteDescriptor.java
+++ b/mediarouter/src/main/java/androidx/mediarouter/media/MediaRouteDescriptor.java
@@ -348,7 +348,6 @@
result.append(", description=").append(getDescription());
result.append(", iconUri=").append(getIconUri());
result.append(", isEnabled=").append(isEnabled());
- result.append(", isConnecting=").append(isConnecting());
result.append(", connectionState=").append(getConnectionState());
result.append(", controlFilters=").append(Arrays.toString(getControlFilters().toArray()));
result.append(", playbackType=").append(getPlaybackType());
diff --git a/mediarouter/src/main/java/androidx/mediarouter/media/SystemMediaRouteProvider.java b/mediarouter/src/main/java/androidx/mediarouter/media/SystemMediaRouteProvider.java
index b8ab169..1a0f419 100644
--- a/mediarouter/src/main/java/androidx/mediarouter/media/SystemMediaRouteProvider.java
+++ b/mediarouter/src/main/java/androidx/mediarouter/media/SystemMediaRouteProvider.java
@@ -770,7 +770,7 @@
}
if (isConnecting(record)) {
- builder.setConnecting(true);
+ builder.setConnectionState(MediaRouter.RouteInfo.CONNECTION_STATE_CONNECTING);
}
Display presentationDisplay =
diff --git a/paging/integration-tests/testapp/src/main/java/androidx/paging/integration/testapp/room/CustomerViewModel.java b/paging/integration-tests/testapp/src/main/java/androidx/paging/integration/testapp/room/CustomerViewModel.java
index a4d9778..535d317 100644
--- a/paging/integration-tests/testapp/src/main/java/androidx/paging/integration/testapp/room/CustomerViewModel.java
+++ b/paging/integration-tests/testapp/src/main/java/androidx/paging/integration/testapp/room/CustomerViewModel.java
@@ -85,12 +85,14 @@
() -> mDatabase.getCustomerDao().removeAll());
}
+ @SuppressWarnings("deprecation")
private static <K> LiveData<PagedList<Customer>> getLivePagedList(
K initialLoadKey, DataSource.Factory<K, Customer> dataSourceFactory) {
PagedList.Config config = new PagedList.Config.Builder()
.setPageSize(10)
.setEnablePlaceholders(false)
.build();
+ // Maintained for compatibility.
return new LivePagedListBuilder<>(dataSourceFactory, config)
.setInitialLoadKey(initialLoadKey)
.build();
diff --git a/preference/preference/src/main/java/androidx/preference/EditTextPreferenceDialogFragment.java b/preference/preference/src/main/java/androidx/preference/EditTextPreferenceDialogFragment.java
index 016e361..82dfd99 100644
--- a/preference/preference/src/main/java/androidx/preference/EditTextPreferenceDialogFragment.java
+++ b/preference/preference/src/main/java/androidx/preference/EditTextPreferenceDialogFragment.java
@@ -28,6 +28,7 @@
/**
* @deprecated Use {@link EditTextPreferenceDialogFragmentCompat} instead
*/
+@SuppressWarnings("deprecation")
@Deprecated
public class EditTextPreferenceDialogFragment extends PreferenceDialogFragment {
diff --git a/samples/Support4Demos/src/main/java/com/example/android/supportv4/widget/SlidingPaneLayoutActivity.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/widget/SlidingPaneLayoutActivity.java
index 0566df9..5dc4e53 100644
--- a/samples/Support4Demos/src/main/java/com/example/android/supportv4/widget/SlidingPaneLayoutActivity.java
+++ b/samples/Support4Demos/src/main/java/com/example/android/supportv4/widget/SlidingPaneLayoutActivity.java
@@ -143,12 +143,12 @@
*/
private class FirstLayoutListener implements ViewTreeObserver.OnGlobalLayoutListener {
@Override
+ @SuppressWarnings("deprecation")
public void onGlobalLayout() {
mActionBar.onFirstLayout();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
mSlidingLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this);
} else {
- //noinspection deprecation
mSlidingLayout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
}
diff --git a/settings.gradle b/settings.gradle
index aebfd08..63f87ac 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -97,6 +97,7 @@
includeProject(":collection:collection", "collection/collection")
includeProject(":collection:collection-ktx", "collection/collection-ktx")
includeProject(":concurrent:concurrent-futures", "concurrent/futures")
+includeProject(":concurrent:concurrent-futures-ktx", "concurrent/futures-ktx")
includeProject(":contentaccess", "contentaccess")
includeProject(":contentpager", "contentpager")
includeProject(":coordinatorlayout", "coordinatorlayout")
diff --git a/slidingpanelayout/src/main/java/androidx/slidingpanelayout/widget/SlidingPaneLayout.java b/slidingpanelayout/src/main/java/androidx/slidingpanelayout/widget/SlidingPaneLayout.java
index 5578aa9..0a0c856 100644
--- a/slidingpanelayout/src/main/java/androidx/slidingpanelayout/widget/SlidingPaneLayout.java
+++ b/slidingpanelayout/src/main/java/androidx/slidingpanelayout/widget/SlidingPaneLayout.java
@@ -1154,7 +1154,7 @@
*/
@Deprecated
public void setShadowResource(@DrawableRes int resId) {
- setShadowDrawable(getResources().getDrawable(resId));
+ setShadowDrawableLeft(getResources().getDrawable(resId));
}
/**
diff --git a/tv-provider/src/main/java/androidx/tvprovider/media/tv/BaseProgram.java b/tv-provider/src/main/java/androidx/tvprovider/media/tv/BaseProgram.java
index ff1a99c..fc74e69 100644
--- a/tv-provider/src/main/java/androidx/tvprovider/media/tv/BaseProgram.java
+++ b/tv-provider/src/main/java/androidx/tvprovider/media/tv/BaseProgram.java
@@ -116,6 +116,7 @@
* @return The season display number for the program.
* @see androidx.tvprovider.media.tv.TvContractCompat.Programs#COLUMN_SEASON_DISPLAY_NUMBER
*/
+ @SuppressWarnings("deprecation")
public String getSeasonNumber() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
return mValues.getAsString(Programs.COLUMN_SEASON_DISPLAY_NUMBER);
@@ -128,6 +129,7 @@
* @return The episode display number for the program.
* @see androidx.tvprovider.media.tv.TvContractCompat.Programs#COLUMN_EPISODE_DISPLAY_NUMBER
*/
+ @SuppressWarnings("deprecation")
public String getEpisodeNumber() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
return mValues.getAsString(Programs.COLUMN_EPISODE_DISPLAY_NUMBER);
@@ -335,6 +337,7 @@
* @param cursor A row from the TV Input Framework database.
* @param builder A Builder to set the fields.
*/
+ @SuppressWarnings("deprecation")
static void setFieldsFromCursor(Cursor cursor, Builder builder) {
// TODO: Add additional API which does not use costly getColumnIndex().
int index;
@@ -465,6 +468,7 @@
}
}
+ @SuppressWarnings("deprecation")
private static String[] getProjection() {
String[] baseColumns = new String[] {
BaseTvColumns._ID,
@@ -612,6 +616,7 @@
* @see androidx.tvprovider.media.tv.TvContractCompat.Programs#COLUMN_SEASON_DISPLAY_NUMBER
* @see androidx.tvprovider.media.tv.TvContractCompat.Programs#COLUMN_SEASON_NUMBER
*/
+ @SuppressWarnings("deprecation")
public T setSeasonNumber(String seasonNumber, int numericalSeasonNumber) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
mValues.put(Programs.COLUMN_SEASON_DISPLAY_NUMBER, seasonNumber);
@@ -644,6 +649,7 @@
* @see androidx.tvprovider.media.tv.TvContractCompat.Programs#COLUMN_EPISODE_DISPLAY_NUMBER
* @see androidx.tvprovider.media.tv.TvContractCompat.Programs#COLUMN_EPISODE_NUMBER
*/
+ @SuppressWarnings("deprecation")
public T setEpisodeNumber(String episodeNumber, int numericalEpisodeNumber) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
mValues.put(Programs.COLUMN_EPISODE_DISPLAY_NUMBER, episodeNumber);
diff --git a/ui/ui-android-text/src/androidTest/java/androidx/text/TextLayoutTest.kt b/ui/ui-android-text/src/androidTest/java/androidx/text/TextLayoutTest.kt
index f7b8706..1d3e64e 100644
--- a/ui/ui-android-text/src/androidTest/java/androidx/text/TextLayoutTest.kt
+++ b/ui/ui-android-text/src/androidTest/java/androidx/text/TextLayoutTest.kt
@@ -58,8 +58,6 @@
assertThat(frameworkLayout.getParagraphDirection(0)).isEqualTo(Layout.DIR_LEFT_TO_RIGHT)
assertThat(frameworkLayout.spacingMultiplier).isEqualTo(1.0f)
assertThat(frameworkLayout.spacingAdd).isEqualTo(0.0f)
- // TODO(haoyuchang): Need public API to test includePadding, maxLines,
- // breakStrategy and hyphenFrequency.
}
@Test
diff --git a/ui/ui-android-text/src/main/java/androidx/text/LayoutIntrinsics.kt b/ui/ui-android-text/src/main/java/androidx/text/LayoutIntrinsics.kt
index 48f35dd..8337726 100644
--- a/ui/ui-android-text/src/main/java/androidx/text/LayoutIntrinsics.kt
+++ b/ui/ui-android-text/src/main/java/androidx/text/LayoutIntrinsics.kt
@@ -57,9 +57,6 @@
* of text where no soft line breaks are applied.
*/
val maxIntrinsicWidth: Float by lazy {
- // TODO(haoyuchang): we didn't pass the TextDirection to Layout.getDesiredWidth(), check if
- // there is any behavior difference from
- // Layout.getWidthWithLimits(charSequence, start, end, paint, dir)
boringMetrics?.width?.toFloat()
?: Layout.getDesiredWidth(charSequence, 0, charSequence.length, textPaint)
}
diff --git a/ui/ui-foundation/api/0.1.0-dev02.txt b/ui/ui-foundation/api/0.1.0-dev02.txt
index b1539e4..fd1e764 100644
--- a/ui/ui-foundation/api/0.1.0-dev02.txt
+++ b/ui/ui-foundation/api/0.1.0-dev02.txt
@@ -200,15 +200,15 @@
public final class ToggleableKt {
ctor public ToggleableKt();
- method public static void Toggleable(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onCheckedChange = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
- method public static androidx.ui.foundation.selection.ToggleableState ToggleableState(boolean checked);
- method public static void TriStateToggleable(androidx.ui.foundation.selection.ToggleableState value = androidx.ui.foundation.selection.ToggleableState.Checked, kotlin.jvm.functions.Function0<kotlin.Unit>? onToggle = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+ method public static void Toggleable(boolean value, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onValueChange = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+ method public static androidx.ui.foundation.selection.ToggleableState ToggleableState(boolean value);
+ method public static void TriStateToggleable(androidx.ui.foundation.selection.ToggleableState value = androidx.ui.foundation.selection.ToggleableState.On, kotlin.jvm.functions.Function0<kotlin.Unit>? onToggle = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
public enum ToggleableState {
- enum_constant public static final androidx.ui.foundation.selection.ToggleableState Checked;
enum_constant public static final androidx.ui.foundation.selection.ToggleableState Indeterminate;
- enum_constant public static final androidx.ui.foundation.selection.ToggleableState Unchecked;
+ enum_constant public static final androidx.ui.foundation.selection.ToggleableState Off;
+ enum_constant public static final androidx.ui.foundation.selection.ToggleableState On;
}
}
diff --git a/ui/ui-foundation/api/0.1.0-dev03.txt b/ui/ui-foundation/api/0.1.0-dev03.txt
index 2123312..edd72f5 100644
--- a/ui/ui-foundation/api/0.1.0-dev03.txt
+++ b/ui/ui-foundation/api/0.1.0-dev03.txt
@@ -200,15 +200,15 @@
public final class ToggleableKt {
ctor public ToggleableKt();
- method public static void Toggleable(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onCheckedChange = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
- method public static androidx.ui.foundation.selection.ToggleableState ToggleableState(boolean checked);
- method public static void TriStateToggleable(androidx.ui.foundation.selection.ToggleableState value = androidx.ui.foundation.selection.ToggleableState.Checked, kotlin.jvm.functions.Function0<kotlin.Unit>? onToggle = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+ method public static void Toggleable(boolean value, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onValueChange = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+ method public static androidx.ui.foundation.selection.ToggleableState ToggleableState(boolean value);
+ method public static void TriStateToggleable(androidx.ui.foundation.selection.ToggleableState value = androidx.ui.foundation.selection.ToggleableState.On, kotlin.jvm.functions.Function0<kotlin.Unit>? onToggle = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
public enum ToggleableState {
- enum_constant public static final androidx.ui.foundation.selection.ToggleableState Checked;
enum_constant public static final androidx.ui.foundation.selection.ToggleableState Indeterminate;
- enum_constant public static final androidx.ui.foundation.selection.ToggleableState Unchecked;
+ enum_constant public static final androidx.ui.foundation.selection.ToggleableState Off;
+ enum_constant public static final androidx.ui.foundation.selection.ToggleableState On;
}
}
diff --git a/ui/ui-foundation/api/current.txt b/ui/ui-foundation/api/current.txt
index 2123312..edd72f5 100644
--- a/ui/ui-foundation/api/current.txt
+++ b/ui/ui-foundation/api/current.txt
@@ -200,15 +200,15 @@
public final class ToggleableKt {
ctor public ToggleableKt();
- method public static void Toggleable(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onCheckedChange = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
- method public static androidx.ui.foundation.selection.ToggleableState ToggleableState(boolean checked);
- method public static void TriStateToggleable(androidx.ui.foundation.selection.ToggleableState value = androidx.ui.foundation.selection.ToggleableState.Checked, kotlin.jvm.functions.Function0<kotlin.Unit>? onToggle = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+ method public static void Toggleable(boolean value, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onValueChange = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+ method public static androidx.ui.foundation.selection.ToggleableState ToggleableState(boolean value);
+ method public static void TriStateToggleable(androidx.ui.foundation.selection.ToggleableState value = androidx.ui.foundation.selection.ToggleableState.On, kotlin.jvm.functions.Function0<kotlin.Unit>? onToggle = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
public enum ToggleableState {
- enum_constant public static final androidx.ui.foundation.selection.ToggleableState Checked;
enum_constant public static final androidx.ui.foundation.selection.ToggleableState Indeterminate;
- enum_constant public static final androidx.ui.foundation.selection.ToggleableState Unchecked;
+ enum_constant public static final androidx.ui.foundation.selection.ToggleableState Off;
+ enum_constant public static final androidx.ui.foundation.selection.ToggleableState On;
}
}
diff --git a/ui/ui-foundation/api/public_plus_experimental_0.1.0-dev02.txt b/ui/ui-foundation/api/public_plus_experimental_0.1.0-dev02.txt
index b1539e4..fd1e764 100644
--- a/ui/ui-foundation/api/public_plus_experimental_0.1.0-dev02.txt
+++ b/ui/ui-foundation/api/public_plus_experimental_0.1.0-dev02.txt
@@ -200,15 +200,15 @@
public final class ToggleableKt {
ctor public ToggleableKt();
- method public static void Toggleable(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onCheckedChange = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
- method public static androidx.ui.foundation.selection.ToggleableState ToggleableState(boolean checked);
- method public static void TriStateToggleable(androidx.ui.foundation.selection.ToggleableState value = androidx.ui.foundation.selection.ToggleableState.Checked, kotlin.jvm.functions.Function0<kotlin.Unit>? onToggle = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+ method public static void Toggleable(boolean value, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onValueChange = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+ method public static androidx.ui.foundation.selection.ToggleableState ToggleableState(boolean value);
+ method public static void TriStateToggleable(androidx.ui.foundation.selection.ToggleableState value = androidx.ui.foundation.selection.ToggleableState.On, kotlin.jvm.functions.Function0<kotlin.Unit>? onToggle = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
public enum ToggleableState {
- enum_constant public static final androidx.ui.foundation.selection.ToggleableState Checked;
enum_constant public static final androidx.ui.foundation.selection.ToggleableState Indeterminate;
- enum_constant public static final androidx.ui.foundation.selection.ToggleableState Unchecked;
+ enum_constant public static final androidx.ui.foundation.selection.ToggleableState Off;
+ enum_constant public static final androidx.ui.foundation.selection.ToggleableState On;
}
}
diff --git a/ui/ui-foundation/api/public_plus_experimental_0.1.0-dev03.txt b/ui/ui-foundation/api/public_plus_experimental_0.1.0-dev03.txt
index 2123312..edd72f5 100644
--- a/ui/ui-foundation/api/public_plus_experimental_0.1.0-dev03.txt
+++ b/ui/ui-foundation/api/public_plus_experimental_0.1.0-dev03.txt
@@ -200,15 +200,15 @@
public final class ToggleableKt {
ctor public ToggleableKt();
- method public static void Toggleable(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onCheckedChange = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
- method public static androidx.ui.foundation.selection.ToggleableState ToggleableState(boolean checked);
- method public static void TriStateToggleable(androidx.ui.foundation.selection.ToggleableState value = androidx.ui.foundation.selection.ToggleableState.Checked, kotlin.jvm.functions.Function0<kotlin.Unit>? onToggle = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+ method public static void Toggleable(boolean value, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onValueChange = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+ method public static androidx.ui.foundation.selection.ToggleableState ToggleableState(boolean value);
+ method public static void TriStateToggleable(androidx.ui.foundation.selection.ToggleableState value = androidx.ui.foundation.selection.ToggleableState.On, kotlin.jvm.functions.Function0<kotlin.Unit>? onToggle = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
public enum ToggleableState {
- enum_constant public static final androidx.ui.foundation.selection.ToggleableState Checked;
enum_constant public static final androidx.ui.foundation.selection.ToggleableState Indeterminate;
- enum_constant public static final androidx.ui.foundation.selection.ToggleableState Unchecked;
+ enum_constant public static final androidx.ui.foundation.selection.ToggleableState Off;
+ enum_constant public static final androidx.ui.foundation.selection.ToggleableState On;
}
}
diff --git a/ui/ui-foundation/api/public_plus_experimental_current.txt b/ui/ui-foundation/api/public_plus_experimental_current.txt
index 2123312..edd72f5 100644
--- a/ui/ui-foundation/api/public_plus_experimental_current.txt
+++ b/ui/ui-foundation/api/public_plus_experimental_current.txt
@@ -200,15 +200,15 @@
public final class ToggleableKt {
ctor public ToggleableKt();
- method public static void Toggleable(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onCheckedChange = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
- method public static androidx.ui.foundation.selection.ToggleableState ToggleableState(boolean checked);
- method public static void TriStateToggleable(androidx.ui.foundation.selection.ToggleableState value = androidx.ui.foundation.selection.ToggleableState.Checked, kotlin.jvm.functions.Function0<kotlin.Unit>? onToggle = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+ method public static void Toggleable(boolean value, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onValueChange = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+ method public static androidx.ui.foundation.selection.ToggleableState ToggleableState(boolean value);
+ method public static void TriStateToggleable(androidx.ui.foundation.selection.ToggleableState value = androidx.ui.foundation.selection.ToggleableState.On, kotlin.jvm.functions.Function0<kotlin.Unit>? onToggle = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
public enum ToggleableState {
- enum_constant public static final androidx.ui.foundation.selection.ToggleableState Checked;
enum_constant public static final androidx.ui.foundation.selection.ToggleableState Indeterminate;
- enum_constant public static final androidx.ui.foundation.selection.ToggleableState Unchecked;
+ enum_constant public static final androidx.ui.foundation.selection.ToggleableState Off;
+ enum_constant public static final androidx.ui.foundation.selection.ToggleableState On;
}
}
diff --git a/ui/ui-foundation/api/restricted_0.1.0-dev02.txt b/ui/ui-foundation/api/restricted_0.1.0-dev02.txt
index b1539e4..fd1e764 100644
--- a/ui/ui-foundation/api/restricted_0.1.0-dev02.txt
+++ b/ui/ui-foundation/api/restricted_0.1.0-dev02.txt
@@ -200,15 +200,15 @@
public final class ToggleableKt {
ctor public ToggleableKt();
- method public static void Toggleable(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onCheckedChange = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
- method public static androidx.ui.foundation.selection.ToggleableState ToggleableState(boolean checked);
- method public static void TriStateToggleable(androidx.ui.foundation.selection.ToggleableState value = androidx.ui.foundation.selection.ToggleableState.Checked, kotlin.jvm.functions.Function0<kotlin.Unit>? onToggle = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+ method public static void Toggleable(boolean value, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onValueChange = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+ method public static androidx.ui.foundation.selection.ToggleableState ToggleableState(boolean value);
+ method public static void TriStateToggleable(androidx.ui.foundation.selection.ToggleableState value = androidx.ui.foundation.selection.ToggleableState.On, kotlin.jvm.functions.Function0<kotlin.Unit>? onToggle = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
public enum ToggleableState {
- enum_constant public static final androidx.ui.foundation.selection.ToggleableState Checked;
enum_constant public static final androidx.ui.foundation.selection.ToggleableState Indeterminate;
- enum_constant public static final androidx.ui.foundation.selection.ToggleableState Unchecked;
+ enum_constant public static final androidx.ui.foundation.selection.ToggleableState Off;
+ enum_constant public static final androidx.ui.foundation.selection.ToggleableState On;
}
}
diff --git a/ui/ui-foundation/api/restricted_0.1.0-dev03.txt b/ui/ui-foundation/api/restricted_0.1.0-dev03.txt
index 2123312..edd72f5 100644
--- a/ui/ui-foundation/api/restricted_0.1.0-dev03.txt
+++ b/ui/ui-foundation/api/restricted_0.1.0-dev03.txt
@@ -200,15 +200,15 @@
public final class ToggleableKt {
ctor public ToggleableKt();
- method public static void Toggleable(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onCheckedChange = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
- method public static androidx.ui.foundation.selection.ToggleableState ToggleableState(boolean checked);
- method public static void TriStateToggleable(androidx.ui.foundation.selection.ToggleableState value = androidx.ui.foundation.selection.ToggleableState.Checked, kotlin.jvm.functions.Function0<kotlin.Unit>? onToggle = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+ method public static void Toggleable(boolean value, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onValueChange = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+ method public static androidx.ui.foundation.selection.ToggleableState ToggleableState(boolean value);
+ method public static void TriStateToggleable(androidx.ui.foundation.selection.ToggleableState value = androidx.ui.foundation.selection.ToggleableState.On, kotlin.jvm.functions.Function0<kotlin.Unit>? onToggle = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
public enum ToggleableState {
- enum_constant public static final androidx.ui.foundation.selection.ToggleableState Checked;
enum_constant public static final androidx.ui.foundation.selection.ToggleableState Indeterminate;
- enum_constant public static final androidx.ui.foundation.selection.ToggleableState Unchecked;
+ enum_constant public static final androidx.ui.foundation.selection.ToggleableState Off;
+ enum_constant public static final androidx.ui.foundation.selection.ToggleableState On;
}
}
diff --git a/ui/ui-foundation/api/restricted_current.txt b/ui/ui-foundation/api/restricted_current.txt
index 2123312..edd72f5 100644
--- a/ui/ui-foundation/api/restricted_current.txt
+++ b/ui/ui-foundation/api/restricted_current.txt
@@ -200,15 +200,15 @@
public final class ToggleableKt {
ctor public ToggleableKt();
- method public static void Toggleable(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onCheckedChange = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
- method public static androidx.ui.foundation.selection.ToggleableState ToggleableState(boolean checked);
- method public static void TriStateToggleable(androidx.ui.foundation.selection.ToggleableState value = androidx.ui.foundation.selection.ToggleableState.Checked, kotlin.jvm.functions.Function0<kotlin.Unit>? onToggle = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+ method public static void Toggleable(boolean value, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onValueChange = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+ method public static androidx.ui.foundation.selection.ToggleableState ToggleableState(boolean value);
+ method public static void TriStateToggleable(androidx.ui.foundation.selection.ToggleableState value = androidx.ui.foundation.selection.ToggleableState.On, kotlin.jvm.functions.Function0<kotlin.Unit>? onToggle = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
}
public enum ToggleableState {
- enum_constant public static final androidx.ui.foundation.selection.ToggleableState Checked;
enum_constant public static final androidx.ui.foundation.selection.ToggleableState Indeterminate;
- enum_constant public static final androidx.ui.foundation.selection.ToggleableState Unchecked;
+ enum_constant public static final androidx.ui.foundation.selection.ToggleableState Off;
+ enum_constant public static final androidx.ui.foundation.selection.ToggleableState On;
}
}
diff --git a/ui/ui-foundation/integration-tests/foundation-demos/src/main/java/androidx/ui/foundation/demos/PopupActivity.kt b/ui/ui-foundation/integration-tests/foundation-demos/src/main/java/androidx/ui/foundation/demos/PopupActivity.kt
index 322e4f2..0bb5a21 100644
--- a/ui/ui-foundation/integration-tests/foundation-demos/src/main/java/androidx/ui/foundation/demos/PopupActivity.kt
+++ b/ui/ui-foundation/integration-tests/foundation-demos/src/main/java/androidx/ui/foundation/demos/PopupActivity.kt
@@ -40,7 +40,6 @@
import androidx.ui.foundation.shape.RectangleShape
import androidx.ui.foundation.shape.corner.CircleShape
import androidx.ui.graphics.Color
-import androidx.ui.input.EditorStyle
import androidx.ui.input.ImeAction
import androidx.ui.input.KeyboardType
import androidx.ui.layout.Column
@@ -597,7 +596,7 @@
state.value = it
onValueChange(it)
},
- editorStyle = EditorStyle(textStyle = TextStyle())
+ textStyle = TextStyle()
)
}
}
\ No newline at end of file
diff --git a/ui/ui-foundation/integration-tests/samples/src/main/java/androidx/ui/foundation/samples/ToggleableSamples.kt b/ui/ui-foundation/integration-tests/samples/src/main/java/androidx/ui/foundation/samples/ToggleableSamples.kt
index 3da1995..c5141fb 100644
--- a/ui/ui-foundation/integration-tests/samples/src/main/java/androidx/ui/foundation/samples/ToggleableSamples.kt
+++ b/ui/ui-foundation/integration-tests/samples/src/main/java/androidx/ui/foundation/samples/ToggleableSamples.kt
@@ -29,7 +29,7 @@
@Composable
fun ToggleableSample() {
var checked by +state { false }
- Toggleable(checked = checked, onCheckedChange = { checked = it }) {
+ Toggleable(value = checked, onValueChange = { checked = it }) {
// content that you want to make toggleable
Text(text = checked.toString())
}
@@ -43,10 +43,10 @@
value = checked,
onToggle = {
checked =
- if (checked == ToggleableState.Checked) {
- ToggleableState.Unchecked
+ if (checked == ToggleableState.On) {
+ ToggleableState.Off
} else {
- ToggleableState.Checked
+ ToggleableState.On
}
}) {
// content that you want to make toggleable
diff --git a/ui/ui-foundation/src/androidTest/java/androidx/ui/foundation/ToggleableTest.kt b/ui/ui-foundation/src/androidTest/java/androidx/ui/foundation/ToggleableTest.kt
index bb4705e..db1989b 100644
--- a/ui/ui-foundation/src/androidTest/java/androidx/ui/foundation/ToggleableTest.kt
+++ b/ui/ui-foundation/src/androidTest/java/androidx/ui/foundation/ToggleableTest.kt
@@ -49,12 +49,12 @@
composeTestRule.setContent {
Column {
TestTag(tag = "checkedToggleable") {
- TriStateToggleable(ToggleableState.Checked, onToggle = {}) {
+ TriStateToggleable(ToggleableState.On, onToggle = {}) {
Text("ToggleableText")
}
}
TestTag(tag = "unCheckedToggleable") {
- TriStateToggleable(ToggleableState.Unchecked, onToggle = {}) {
+ TriStateToggleable(ToggleableState.Off, onToggle = {}) {
Text("ToggleableText")
}
}
@@ -70,7 +70,7 @@
.assertSemanticsIsEqualTo(
createFullSemantics(
isEnabled = true,
- toggleableState = ToggleableState.Checked
+ toggleableState = ToggleableState.On
)
)
.assertHasClickAction()
@@ -78,7 +78,7 @@
.assertSemanticsIsEqualTo(
createFullSemantics(
isEnabled = true,
- toggleableState = ToggleableState.Unchecked
+ toggleableState = ToggleableState.Off
)
)
.assertHasClickAction()
@@ -97,12 +97,12 @@
composeTestRule.setContent {
Column {
TestTag(tag = "checkedToggleable") {
- Toggleable(checked = true, onCheckedChange = {}) {
+ Toggleable(value = true, onValueChange = {}) {
Text("ToggleableText")
}
}
TestTag(tag = "unCheckedToggleable") {
- Toggleable(checked = false, onCheckedChange = {}) {
+ Toggleable(value = false, onValueChange = {}) {
Text("ToggleableText")
}
}
@@ -113,7 +113,7 @@
.assertSemanticsIsEqualTo(
createFullSemantics(
isEnabled = true,
- toggleableState = ToggleableState.Checked
+ toggleableState = ToggleableState.On
)
)
.assertHasClickAction()
@@ -121,7 +121,7 @@
.assertSemanticsIsEqualTo(
createFullSemantics(
isEnabled = true,
- toggleableState = ToggleableState.Unchecked
+ toggleableState = ToggleableState.Off
)
)
.assertHasClickAction()
@@ -132,7 +132,7 @@
composeTestRule.setContent {
Center {
TestTag(tag = "myToggleable") {
- TriStateToggleable(value = ToggleableState.Checked) {
+ TriStateToggleable(value = ToggleableState.On) {
Text("ToggleableText")
}
}
@@ -156,7 +156,7 @@
composeTestRule.setContent {
Center {
TestTag(tag = "myToggleable") {
- Toggleable(checked = checked, onCheckedChange = onCheckedChange) {
+ Toggleable(value = checked, onValueChange = onCheckedChange) {
Text("ToggleableText")
}
}
diff --git a/ui/ui-foundation/src/main/java/androidx/ui/foundation/selection/Toggleable.kt b/ui/ui-foundation/src/main/java/androidx/ui/foundation/selection/Toggleable.kt
index 2ceb337..0a96ba7 100644
--- a/ui/ui-foundation/src/main/java/androidx/ui/foundation/selection/Toggleable.kt
+++ b/ui/ui-foundation/src/main/java/androidx/ui/foundation/selection/Toggleable.kt
@@ -33,35 +33,36 @@
*
* @see [TriStateToggleable] if you require support for an indeterminate state.
*
- * @param checked whether Toggleable is checked or unchecked
- * @param onCheckedChange callback to be invoked when toggleable is being clicked,
- * therefore the change of checked state in requested.
- * If null, Toggleable will appears in the [checked] state and remains disabled
+ * @param value whether Toggleable is on or off
+ * @param onValueChange callback to be invoked when toggleable is being clicked,
+ * therefore the change of the state in requested.
+ * If null, Toggleable will appear in the [value] state and remains disabled
*/
@Composable
fun Toggleable(
- checked: Boolean,
- onCheckedChange: ((Boolean) -> Unit)? = null,
+ value: Boolean,
+ onValueChange: ((Boolean) -> Unit)? = null,
children: @Composable() () -> Unit
) {
TriStateToggleable(
- value = ToggleableState(checked),
- onToggle = onCheckedChange?.let { { it(!checked) } },
+ value = ToggleableState(value),
+ onToggle = onValueChange?.let { { it(!value) } },
children = children
)
}
+
/**
* Combines [PressReleasedGestureDetector] and [Semantics] for the components with three states
- * like Checkbox.
+ * like TriStateCheckbox.
*
- * It supports three states: checked, unchecked and indeterminate.
+ * It supports three states: On, Off and Indeterminate.
*
* TriStateToggleable should be used when there are
* dependent Toggleables associated to this component and those can have different values.
*
* @sample androidx.ui.foundation.samples.TriStateToggleableSample
*
- * @see [Toggleable] if you want to support only two states: checked and unchecked
+ * @see [Toggleable] if you want to support only two states: on and off
*
* @param value current value for the component
* @param onToggle will be called when user toggles the toggleable. The children will not be
@@ -69,7 +70,7 @@
*/
@Composable
fun TriStateToggleable(
- value: ToggleableState = ToggleableState.Checked,
+ value: ToggleableState = ToggleableState.On,
onToggle: (() -> Unit)? = null,
children: @Composable() () -> Unit
) {
@@ -81,8 +82,8 @@
Semantics(properties = {
this.accessibilityValue = when (value) {
// TODO(ryanmentley): These should be set by Checkbox, Switch, etc.
- ToggleableState.Checked -> Strings.Checked
- ToggleableState.Unchecked -> Strings.Unchecked
+ ToggleableState.On -> Strings.Checked
+ ToggleableState.Off -> Strings.Unchecked
ToggleableState.Indeterminate -> Strings.Indeterminate
}
this.toggleableState = value
@@ -95,14 +96,22 @@
}
}
-// TODO: These shouldn't use checkbox-specific language
+/**
+ * Enum that represents possible toggleable states.
+ * @property On components is on
+ * @property Off components is off
+ * @property Indeterminate means that on/off value cannot be determined
+ */
enum class ToggleableState {
- Checked,
- Unchecked,
+ On,
+ Off,
Indeterminate
}
-fun ToggleableState(checked: Boolean) = when (checked) {
- true -> ToggleableState.Checked
- false -> ToggleableState.Unchecked
-}
\ No newline at end of file
+/**
+ * Return corresponding ToggleableState based on a Boolean representation
+ *
+ * @param value whether the ToggleableState is on or off
+ */
+fun ToggleableState(value: Boolean) =
+ if (value) ToggleableState.On else ToggleableState.Off
\ No newline at end of file
diff --git a/ui/ui-framework/api/0.1.0-dev03.txt b/ui/ui-framework/api/0.1.0-dev03.txt
index 2a8753d..7b4517b 100644
--- a/ui/ui-framework/api/0.1.0-dev03.txt
+++ b/ui/ui-framework/api/0.1.0-dev03.txt
@@ -64,7 +64,7 @@
public final class PasswordTextFieldKt {
ctor public PasswordTextFieldKt();
- method public static void PasswordTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.input.EditorStyle? editorStyle = null, char mask = '\u2022', androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {});
+ method public static void PasswordTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.text.TextStyle? textStyle = null, char mask = '\u2022', androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {});
}
public final class PointerInputWrapperKt {
@@ -90,17 +90,17 @@
public final class TextFieldKt {
ctor public TextFieldKt();
- method public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.input.EditorStyle? editorStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
- method public static void TextField(androidx.ui.core.EditorModel value, kotlin.jvm.functions.Function1<? super androidx.ui.core.EditorModel,kotlin.Unit> onValueChange = {}, androidx.ui.input.EditorStyle? editorStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
- method public static void TextField(androidx.ui.core.EditorModel model, androidx.ui.text.TextRange? compositionRange, kotlin.jvm.functions.Function2<? super androidx.ui.core.EditorModel,? super androidx.ui.text.TextRange,kotlin.Unit> onValueChange = { _, _ -> }, androidx.ui.input.EditorStyle? editorStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
+ method public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.text.TextStyle? textStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
+ method public static void TextField(androidx.ui.core.EditorModel value, kotlin.jvm.functions.Function1<? super androidx.ui.core.EditorModel,kotlin.Unit> onValueChange = {}, androidx.ui.text.TextStyle? textStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
+ method public static void TextField(androidx.ui.core.EditorModel model, androidx.ui.text.TextRange? compositionRange, kotlin.jvm.functions.Function2<? super androidx.ui.core.EditorModel,? super androidx.ui.text.TextRange,kotlin.Unit> onValueChange = { _, _ -> }, androidx.ui.text.TextStyle? textStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
}
public final class TextKt {
ctor public TextKt();
method public static void CurrentTextStyleProvider(androidx.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
- method public static void Text(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor, kotlin.jvm.functions.Function1<? super androidx.ui.core.TextSpanScope,kotlin.Unit> child);
- method public static void Text(String text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor);
- method public static void Text(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor);
+ method public static void Text(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, kotlin.jvm.functions.Function1<? super androidx.ui.core.TextSpanScope,kotlin.Unit> child);
+ method public static void Text(String text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines);
+ method public static void Text(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines);
method public static androidx.compose.Effect<androidx.ui.text.TextStyle> currentTextStyle();
method public static androidx.ui.core.HorizontalAlignmentLine getFirstBaseline();
method public static androidx.ui.core.HorizontalAlignmentLine getLastBaseline();
diff --git a/ui/ui-framework/api/api_lint.ignore b/ui/ui-framework/api/api_lint.ignore
index 40f9062..802d86c 100644
--- a/ui/ui-framework/api/api_lint.ignore
+++ b/ui/ui-framework/api/api_lint.ignore
@@ -19,11 +19,11 @@
Method should return Collection<PathNode> (or subclass) instead of raw array; was `androidx.ui.graphics.vector.PathNode[]`
-AutoBoxing: androidx.ui.core.TextKt#Text(String, androidx.ui.core.Modifier, androidx.ui.text.TextStyle, androidx.ui.text.ParagraphStyle, boolean, androidx.ui.text.style.TextOverflow, Integer, androidx.ui.graphics.Color) parameter #6:
+AutoBoxing: androidx.ui.core.TextKt#Text(String, androidx.ui.core.Modifier, androidx.ui.text.TextStyle, androidx.ui.text.ParagraphStyle, boolean, androidx.ui.text.style.TextOverflow, Integer) parameter #6:
Must avoid boxed primitives (`java.lang.Integer`)
-AutoBoxing: androidx.ui.core.TextKt#Text(androidx.ui.core.Modifier, androidx.ui.text.TextStyle, androidx.ui.text.ParagraphStyle, boolean, androidx.ui.text.style.TextOverflow, Integer, androidx.ui.graphics.Color, kotlin.jvm.functions.Function1<? super androidx.ui.core.TextSpanScope,kotlin.Unit>) parameter #5:
+AutoBoxing: androidx.ui.core.TextKt#Text(androidx.ui.core.Modifier, androidx.ui.text.TextStyle, androidx.ui.text.ParagraphStyle, boolean, androidx.ui.text.style.TextOverflow, Integer, kotlin.jvm.functions.Function1<? super androidx.ui.core.TextSpanScope,kotlin.Unit>) parameter #5:
Must avoid boxed primitives (`java.lang.Integer`)
-AutoBoxing: androidx.ui.core.TextKt#Text(androidx.ui.text.AnnotatedString, androidx.ui.core.Modifier, androidx.ui.text.TextStyle, androidx.ui.text.ParagraphStyle, boolean, androidx.ui.text.style.TextOverflow, Integer, androidx.ui.graphics.Color) parameter #6:
+AutoBoxing: androidx.ui.core.TextKt#Text(androidx.ui.text.AnnotatedString, androidx.ui.core.Modifier, androidx.ui.text.TextStyle, androidx.ui.text.ParagraphStyle, boolean, androidx.ui.text.style.TextOverflow, Integer) parameter #6:
Must avoid boxed primitives (`java.lang.Integer`)
diff --git a/ui/ui-framework/api/current.txt b/ui/ui-framework/api/current.txt
index 2a8753d..7b4517b 100644
--- a/ui/ui-framework/api/current.txt
+++ b/ui/ui-framework/api/current.txt
@@ -64,7 +64,7 @@
public final class PasswordTextFieldKt {
ctor public PasswordTextFieldKt();
- method public static void PasswordTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.input.EditorStyle? editorStyle = null, char mask = '\u2022', androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {});
+ method public static void PasswordTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.text.TextStyle? textStyle = null, char mask = '\u2022', androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {});
}
public final class PointerInputWrapperKt {
@@ -90,17 +90,17 @@
public final class TextFieldKt {
ctor public TextFieldKt();
- method public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.input.EditorStyle? editorStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
- method public static void TextField(androidx.ui.core.EditorModel value, kotlin.jvm.functions.Function1<? super androidx.ui.core.EditorModel,kotlin.Unit> onValueChange = {}, androidx.ui.input.EditorStyle? editorStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
- method public static void TextField(androidx.ui.core.EditorModel model, androidx.ui.text.TextRange? compositionRange, kotlin.jvm.functions.Function2<? super androidx.ui.core.EditorModel,? super androidx.ui.text.TextRange,kotlin.Unit> onValueChange = { _, _ -> }, androidx.ui.input.EditorStyle? editorStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
+ method public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.text.TextStyle? textStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
+ method public static void TextField(androidx.ui.core.EditorModel value, kotlin.jvm.functions.Function1<? super androidx.ui.core.EditorModel,kotlin.Unit> onValueChange = {}, androidx.ui.text.TextStyle? textStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
+ method public static void TextField(androidx.ui.core.EditorModel model, androidx.ui.text.TextRange? compositionRange, kotlin.jvm.functions.Function2<? super androidx.ui.core.EditorModel,? super androidx.ui.text.TextRange,kotlin.Unit> onValueChange = { _, _ -> }, androidx.ui.text.TextStyle? textStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
}
public final class TextKt {
ctor public TextKt();
method public static void CurrentTextStyleProvider(androidx.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
- method public static void Text(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor, kotlin.jvm.functions.Function1<? super androidx.ui.core.TextSpanScope,kotlin.Unit> child);
- method public static void Text(String text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor);
- method public static void Text(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor);
+ method public static void Text(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, kotlin.jvm.functions.Function1<? super androidx.ui.core.TextSpanScope,kotlin.Unit> child);
+ method public static void Text(String text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines);
+ method public static void Text(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines);
method public static androidx.compose.Effect<androidx.ui.text.TextStyle> currentTextStyle();
method public static androidx.ui.core.HorizontalAlignmentLine getFirstBaseline();
method public static androidx.ui.core.HorizontalAlignmentLine getLastBaseline();
diff --git a/ui/ui-framework/api/public_plus_experimental_0.1.0-dev03.txt b/ui/ui-framework/api/public_plus_experimental_0.1.0-dev03.txt
index 2a8753d..7b4517b 100644
--- a/ui/ui-framework/api/public_plus_experimental_0.1.0-dev03.txt
+++ b/ui/ui-framework/api/public_plus_experimental_0.1.0-dev03.txt
@@ -64,7 +64,7 @@
public final class PasswordTextFieldKt {
ctor public PasswordTextFieldKt();
- method public static void PasswordTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.input.EditorStyle? editorStyle = null, char mask = '\u2022', androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {});
+ method public static void PasswordTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.text.TextStyle? textStyle = null, char mask = '\u2022', androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {});
}
public final class PointerInputWrapperKt {
@@ -90,17 +90,17 @@
public final class TextFieldKt {
ctor public TextFieldKt();
- method public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.input.EditorStyle? editorStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
- method public static void TextField(androidx.ui.core.EditorModel value, kotlin.jvm.functions.Function1<? super androidx.ui.core.EditorModel,kotlin.Unit> onValueChange = {}, androidx.ui.input.EditorStyle? editorStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
- method public static void TextField(androidx.ui.core.EditorModel model, androidx.ui.text.TextRange? compositionRange, kotlin.jvm.functions.Function2<? super androidx.ui.core.EditorModel,? super androidx.ui.text.TextRange,kotlin.Unit> onValueChange = { _, _ -> }, androidx.ui.input.EditorStyle? editorStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
+ method public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.text.TextStyle? textStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
+ method public static void TextField(androidx.ui.core.EditorModel value, kotlin.jvm.functions.Function1<? super androidx.ui.core.EditorModel,kotlin.Unit> onValueChange = {}, androidx.ui.text.TextStyle? textStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
+ method public static void TextField(androidx.ui.core.EditorModel model, androidx.ui.text.TextRange? compositionRange, kotlin.jvm.functions.Function2<? super androidx.ui.core.EditorModel,? super androidx.ui.text.TextRange,kotlin.Unit> onValueChange = { _, _ -> }, androidx.ui.text.TextStyle? textStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
}
public final class TextKt {
ctor public TextKt();
method public static void CurrentTextStyleProvider(androidx.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
- method public static void Text(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor, kotlin.jvm.functions.Function1<? super androidx.ui.core.TextSpanScope,kotlin.Unit> child);
- method public static void Text(String text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor);
- method public static void Text(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor);
+ method public static void Text(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, kotlin.jvm.functions.Function1<? super androidx.ui.core.TextSpanScope,kotlin.Unit> child);
+ method public static void Text(String text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines);
+ method public static void Text(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines);
method public static androidx.compose.Effect<androidx.ui.text.TextStyle> currentTextStyle();
method public static androidx.ui.core.HorizontalAlignmentLine getFirstBaseline();
method public static androidx.ui.core.HorizontalAlignmentLine getLastBaseline();
diff --git a/ui/ui-framework/api/public_plus_experimental_current.txt b/ui/ui-framework/api/public_plus_experimental_current.txt
index 2a8753d..7b4517b 100644
--- a/ui/ui-framework/api/public_plus_experimental_current.txt
+++ b/ui/ui-framework/api/public_plus_experimental_current.txt
@@ -64,7 +64,7 @@
public final class PasswordTextFieldKt {
ctor public PasswordTextFieldKt();
- method public static void PasswordTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.input.EditorStyle? editorStyle = null, char mask = '\u2022', androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {});
+ method public static void PasswordTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.text.TextStyle? textStyle = null, char mask = '\u2022', androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {});
}
public final class PointerInputWrapperKt {
@@ -90,17 +90,17 @@
public final class TextFieldKt {
ctor public TextFieldKt();
- method public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.input.EditorStyle? editorStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
- method public static void TextField(androidx.ui.core.EditorModel value, kotlin.jvm.functions.Function1<? super androidx.ui.core.EditorModel,kotlin.Unit> onValueChange = {}, androidx.ui.input.EditorStyle? editorStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
- method public static void TextField(androidx.ui.core.EditorModel model, androidx.ui.text.TextRange? compositionRange, kotlin.jvm.functions.Function2<? super androidx.ui.core.EditorModel,? super androidx.ui.text.TextRange,kotlin.Unit> onValueChange = { _, _ -> }, androidx.ui.input.EditorStyle? editorStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
+ method public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.text.TextStyle? textStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
+ method public static void TextField(androidx.ui.core.EditorModel value, kotlin.jvm.functions.Function1<? super androidx.ui.core.EditorModel,kotlin.Unit> onValueChange = {}, androidx.ui.text.TextStyle? textStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
+ method public static void TextField(androidx.ui.core.EditorModel model, androidx.ui.text.TextRange? compositionRange, kotlin.jvm.functions.Function2<? super androidx.ui.core.EditorModel,? super androidx.ui.text.TextRange,kotlin.Unit> onValueChange = { _, _ -> }, androidx.ui.text.TextStyle? textStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
}
public final class TextKt {
ctor public TextKt();
method public static void CurrentTextStyleProvider(androidx.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
- method public static void Text(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor, kotlin.jvm.functions.Function1<? super androidx.ui.core.TextSpanScope,kotlin.Unit> child);
- method public static void Text(String text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor);
- method public static void Text(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor);
+ method public static void Text(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, kotlin.jvm.functions.Function1<? super androidx.ui.core.TextSpanScope,kotlin.Unit> child);
+ method public static void Text(String text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines);
+ method public static void Text(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines);
method public static androidx.compose.Effect<androidx.ui.text.TextStyle> currentTextStyle();
method public static androidx.ui.core.HorizontalAlignmentLine getFirstBaseline();
method public static androidx.ui.core.HorizontalAlignmentLine getLastBaseline();
diff --git a/ui/ui-framework/api/restricted_0.1.0-dev03.txt b/ui/ui-framework/api/restricted_0.1.0-dev03.txt
index 2a8753d..7b4517b 100644
--- a/ui/ui-framework/api/restricted_0.1.0-dev03.txt
+++ b/ui/ui-framework/api/restricted_0.1.0-dev03.txt
@@ -64,7 +64,7 @@
public final class PasswordTextFieldKt {
ctor public PasswordTextFieldKt();
- method public static void PasswordTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.input.EditorStyle? editorStyle = null, char mask = '\u2022', androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {});
+ method public static void PasswordTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.text.TextStyle? textStyle = null, char mask = '\u2022', androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {});
}
public final class PointerInputWrapperKt {
@@ -90,17 +90,17 @@
public final class TextFieldKt {
ctor public TextFieldKt();
- method public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.input.EditorStyle? editorStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
- method public static void TextField(androidx.ui.core.EditorModel value, kotlin.jvm.functions.Function1<? super androidx.ui.core.EditorModel,kotlin.Unit> onValueChange = {}, androidx.ui.input.EditorStyle? editorStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
- method public static void TextField(androidx.ui.core.EditorModel model, androidx.ui.text.TextRange? compositionRange, kotlin.jvm.functions.Function2<? super androidx.ui.core.EditorModel,? super androidx.ui.text.TextRange,kotlin.Unit> onValueChange = { _, _ -> }, androidx.ui.input.EditorStyle? editorStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
+ method public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.text.TextStyle? textStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
+ method public static void TextField(androidx.ui.core.EditorModel value, kotlin.jvm.functions.Function1<? super androidx.ui.core.EditorModel,kotlin.Unit> onValueChange = {}, androidx.ui.text.TextStyle? textStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
+ method public static void TextField(androidx.ui.core.EditorModel model, androidx.ui.text.TextRange? compositionRange, kotlin.jvm.functions.Function2<? super androidx.ui.core.EditorModel,? super androidx.ui.text.TextRange,kotlin.Unit> onValueChange = { _, _ -> }, androidx.ui.text.TextStyle? textStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
}
public final class TextKt {
ctor public TextKt();
method public static void CurrentTextStyleProvider(androidx.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
- method public static void Text(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor, kotlin.jvm.functions.Function1<? super androidx.ui.core.TextSpanScope,kotlin.Unit> child);
- method public static void Text(String text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor);
- method public static void Text(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor);
+ method public static void Text(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, kotlin.jvm.functions.Function1<? super androidx.ui.core.TextSpanScope,kotlin.Unit> child);
+ method public static void Text(String text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines);
+ method public static void Text(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines);
method public static androidx.compose.Effect<androidx.ui.text.TextStyle> currentTextStyle();
method public static androidx.ui.core.HorizontalAlignmentLine getFirstBaseline();
method public static androidx.ui.core.HorizontalAlignmentLine getLastBaseline();
diff --git a/ui/ui-framework/api/restricted_current.txt b/ui/ui-framework/api/restricted_current.txt
index 2a8753d..7b4517b 100644
--- a/ui/ui-framework/api/restricted_current.txt
+++ b/ui/ui-framework/api/restricted_current.txt
@@ -64,7 +64,7 @@
public final class PasswordTextFieldKt {
ctor public PasswordTextFieldKt();
- method public static void PasswordTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.input.EditorStyle? editorStyle = null, char mask = '\u2022', androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {});
+ method public static void PasswordTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.text.TextStyle? textStyle = null, char mask = '\u2022', androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {});
}
public final class PointerInputWrapperKt {
@@ -90,17 +90,17 @@
public final class TextFieldKt {
ctor public TextFieldKt();
- method public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.input.EditorStyle? editorStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
- method public static void TextField(androidx.ui.core.EditorModel value, kotlin.jvm.functions.Function1<? super androidx.ui.core.EditorModel,kotlin.Unit> onValueChange = {}, androidx.ui.input.EditorStyle? editorStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
- method public static void TextField(androidx.ui.core.EditorModel model, androidx.ui.text.TextRange? compositionRange, kotlin.jvm.functions.Function2<? super androidx.ui.core.EditorModel,? super androidx.ui.text.TextRange,kotlin.Unit> onValueChange = { _, _ -> }, androidx.ui.input.EditorStyle? editorStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
+ method public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.text.TextStyle? textStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
+ method public static void TextField(androidx.ui.core.EditorModel value, kotlin.jvm.functions.Function1<? super androidx.ui.core.EditorModel,kotlin.Unit> onValueChange = {}, androidx.ui.text.TextStyle? textStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
+ method public static void TextField(androidx.ui.core.EditorModel model, androidx.ui.text.TextRange? compositionRange, kotlin.jvm.functions.Function2<? super androidx.ui.core.EditorModel,? super androidx.ui.text.TextRange,kotlin.Unit> onValueChange = { _, _ -> }, androidx.ui.text.TextStyle? textStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
}
public final class TextKt {
ctor public TextKt();
method public static void CurrentTextStyleProvider(androidx.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
- method public static void Text(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor, kotlin.jvm.functions.Function1<? super androidx.ui.core.TextSpanScope,kotlin.Unit> child);
- method public static void Text(String text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor);
- method public static void Text(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor);
+ method public static void Text(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, kotlin.jvm.functions.Function1<? super androidx.ui.core.TextSpanScope,kotlin.Unit> child);
+ method public static void Text(String text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines);
+ method public static void Text(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines);
method public static androidx.compose.Effect<androidx.ui.text.TextStyle> currentTextStyle();
method public static androidx.ui.core.HorizontalAlignmentLine getFirstBaseline();
method public static androidx.ui.core.HorizontalAlignmentLine getLastBaseline();
diff --git a/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/autofill/ExplicitAutofillTypesActivity.kt b/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/autofill/ExplicitAutofillTypesActivity.kt
index 4de305e..8717940 100644
--- a/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/autofill/ExplicitAutofillTypesActivity.kt
+++ b/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/autofill/ExplicitAutofillTypesActivity.kt
@@ -35,7 +35,6 @@
import androidx.ui.core.PxPosition
import androidx.ui.core.dp
import androidx.ui.core.setContent
-import androidx.ui.input.EditorStyle
import androidx.ui.input.ImeAction
import androidx.ui.input.KeyboardType
import androidx.ui.layout.Column
@@ -69,7 +68,7 @@
onValueChange = { nameState.value = it },
onFocus = { autofill?.requestAutofillForNode(autofillNode) },
onBlur = { autofill?.cancelAutofillForNode(autofillNode) },
- editorStyle = EditorStyle(textStyle = textStyle)
+ textStyle = textStyle
)
}
@@ -87,7 +86,7 @@
onValueChange = { emailState.value = it },
onFocus = { autofill?.requestAutofillForNode(autofillNode) },
onBlur = { autofill?.cancelAutofillForNode(autofillNode) },
- editorStyle = EditorStyle(textStyle = textStyle)
+ textStyle = textStyle
)
}
}
diff --git a/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/TextFieldTest.kt b/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/TextFieldTest.kt
index cb98f32..98e17a3 100644
--- a/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/TextFieldTest.kt
+++ b/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/TextFieldTest.kt
@@ -27,9 +27,7 @@
import androidx.ui.core.input.FocusManager
import androidx.ui.input.CommitTextEditOp
import androidx.ui.input.EditOperation
-import androidx.ui.input.EditorStyle
import androidx.ui.input.InputState
-import androidx.ui.input.SetComposingRegionEditOp
import androidx.ui.input.TextInputService
import androidx.ui.test.createComposeRule
import androidx.ui.test.doClick
@@ -39,10 +37,8 @@
import com.nhaarman.mockitokotlin2.any
import com.nhaarman.mockitokotlin2.argumentCaptor
import com.nhaarman.mockitokotlin2.atLeastOnce
-import com.nhaarman.mockitokotlin2.clearInvocations
import com.nhaarman.mockitokotlin2.eq
import com.nhaarman.mockitokotlin2.mock
-import com.nhaarman.mockitokotlin2.never
import com.nhaarman.mockitokotlin2.times
import com.nhaarman.mockitokotlin2.verify
import com.nhaarman.mockitokotlin2.whenever
@@ -68,8 +64,7 @@
TestTag(tag = "textField") {
TextField(
value = state.value,
- onValueChange = { state.value = it },
- editorStyle = EditorStyle()
+ onValueChange = { state.value = it }
)
}
}
diff --git a/ui/ui-framework/src/main/java/androidx/ui/core/PasswordTextField.kt b/ui/ui-framework/src/main/java/androidx/ui/core/PasswordTextField.kt
index 45a6089..8c7df92 100644
--- a/ui/ui-framework/src/main/java/androidx/ui/core/PasswordTextField.kt
+++ b/ui/ui-framework/src/main/java/androidx/ui/core/PasswordTextField.kt
@@ -15,16 +15,15 @@
*/
package androidx.ui.core
-import androidx.compose.composer
import androidx.compose.Composable
import androidx.compose.memo
import androidx.compose.unaryPlus
import androidx.ui.core.input.FocusManager
-import androidx.ui.input.EditorStyle
import androidx.ui.input.ImeAction
import androidx.ui.input.KeyboardType
import androidx.ui.input.PasswordVisualTransformation
import androidx.ui.input.VisualTransformation
+import androidx.ui.text.TextStyle
/**
* A user interface element for entering and modifying password text.
@@ -41,7 +40,7 @@
* @param onValueChange Called when the input service updates the text. When the input service
* update the text, this callback is called with the updated text. If you want to observe the cursor
* location or selection range, use [TextField] with [EditorModel] instead.
- * @param editorStyle The editor style.
+ * @param textStyle Style configuration that applies at character level such as color, font etc.
* @param mask The character shown instead of plaint text.
* @param imeAction The IME action. This IME action is honored by IME and may show specific icons
* on the keyboard. For example, search icon may be shown if [ImeAction.Search] is specified.
@@ -56,7 +55,6 @@
* input service emitted an IME action, this callback is called with the emitted IME action. Note
* that this IME action may be different from what you specified in [imeAction].
*
- * @see EditorStyle
* @see ImeAction
* @see KeyboardType
* @see TextField
@@ -66,7 +64,7 @@
fun PasswordTextField(
value: String,
onValueChange: (String) -> Unit = {},
- editorStyle: EditorStyle? = null,
+ textStyle: TextStyle? = null,
mask: Char = '\u2022',
imeAction: ImeAction = ImeAction.Unspecified,
onFocus: () -> Unit = {},
@@ -78,7 +76,7 @@
TextField(
value = value,
onValueChange = onValueChange,
- editorStyle = editorStyle,
+ textStyle = textStyle,
keyboardType = KeyboardType.Password,
imeAction = imeAction,
onFocus = onFocus,
diff --git a/ui/ui-framework/src/main/java/androidx/ui/core/Text.kt b/ui/ui-framework/src/main/java/androidx/ui/core/Text.kt
index 122cfce..853c6e9 100644
--- a/ui/ui-framework/src/main/java/androidx/ui/core/Text.kt
+++ b/ui/ui-framework/src/main/java/androidx/ui/core/Text.kt
@@ -65,7 +65,6 @@
* @param maxLines An optional maximum number of lines for the text to span, wrapping if
* necessary. If the text exceeds the given number of lines, it will be truncated according to
* [overflow] and [softWrap]. If it is not null, then it must be greater than zero.
- * @param selectionColor The color used to draw selected region.
*/
@Composable
fun Text(
@@ -75,7 +74,6 @@
softWrap: Boolean = DefaultSoftWrap,
overflow: TextOverflow = DefaultOverflow,
maxLines: Int? = DefaultMaxLines,
- selectionColor: Color = DefaultSelectionColor,
child: @Composable TextSpanScope.() -> Unit
) {
val rootTextSpan = +memo { TextSpan() }
@@ -90,8 +88,7 @@
paragraphStyle = paragraphStyle,
softWrap = softWrap,
overflow = overflow,
- maxLines = maxLines,
- selectionColor = selectionColor
+ maxLines = maxLines
)
}
@@ -110,7 +107,6 @@
* @param maxLines An optional maximum number of lines for the text to span, wrapping if
* necessary. If the text exceeds the given number of lines, it will be truncated according to
* [overflow] and [softWrap]. If it is not null, then it must be greater than zero.
- * @param selectionColor The color used to draw selected region.
*/
@Composable
fun Text(
@@ -120,8 +116,7 @@
paragraphStyle: ParagraphStyle? = null,
softWrap: Boolean = DefaultSoftWrap,
overflow: TextOverflow = DefaultOverflow,
- maxLines: Int? = DefaultMaxLines,
- selectionColor: Color = DefaultSelectionColor
+ maxLines: Int? = DefaultMaxLines
) {
Text(
text = AnnotatedString(text),
@@ -130,8 +125,7 @@
paragraphStyle = paragraphStyle,
softWrap = softWrap,
overflow = overflow,
- maxLines = maxLines,
- selectionColor = selectionColor
+ maxLines = maxLines
)
}
@@ -151,7 +145,6 @@
* @param maxLines An optional maximum number of lines for the text to span, wrapping if
* necessary. If the text exceeds the given number of lines, it will be truncated according to
* [overflow] and [softWrap]. If it is not null, then it must be greater than zero.
- * @param selectionColor The color used to draw selected region.
*/
@Composable
fun Text(
@@ -161,8 +154,7 @@
paragraphStyle: ParagraphStyle? = null,
softWrap: Boolean = DefaultSoftWrap,
overflow: TextOverflow = DefaultOverflow,
- maxLines: Int? = DefaultMaxLines,
- selectionColor: Color = DefaultSelectionColor
+ maxLines: Int? = DefaultMaxLines
) {
maxLines?.let {
require(it > 0) { "maxLines should be greater than 0" }
@@ -217,7 +209,7 @@
Draw { canvas, _ ->
selectionRange.value?.let {
textDelegate.paintBackground(
- it.min, it.max, selectionColor, canvas
+ it.min, it.max, DefaultSelectionColor, canvas
)
}
textDelegate.paint(canvas)
diff --git a/ui/ui-framework/src/main/java/androidx/ui/core/TextField.kt b/ui/ui-framework/src/main/java/androidx/ui/core/TextField.kt
index 8a432f2..14f4327 100644
--- a/ui/ui-framework/src/main/java/androidx/ui/core/TextField.kt
+++ b/ui/ui-framework/src/main/java/androidx/ui/core/TextField.kt
@@ -26,7 +26,6 @@
import androidx.ui.core.gesture.TouchSlopDragGestureDetector
import androidx.ui.core.input.FocusManager
import androidx.ui.input.EditProcessor
-import androidx.ui.input.EditorStyle
import androidx.ui.input.ImeAction
import androidx.ui.input.InputState
import androidx.ui.input.KeyboardType
@@ -36,6 +35,7 @@
import androidx.ui.semantics.onClick
import androidx.ui.text.TextDelegate
import androidx.ui.text.TextRange
+import androidx.ui.text.TextStyle
/**
* A user interface element for entering and modifying text.
@@ -63,7 +63,7 @@
* @param onValueChange Called when the input service updates the text. When the input service
* update the text, this callback is called with the updated text. If you want to observe the cursor
* location or selection range, use [TextField] with [EditorModel] instead.
- * @param editorStyle The editor style.
+ * @param textStyle Style configuration that applies at character level such as color, font etc.
* @param keyboardType The keyboard type to be used in this text field. Note that this input type
* is honored by IME and shows corresponding keyboard but this is not guaranteed. For example,
* some IME may send non-ASCII character even if you set [KeyboardType.Ascii].
@@ -83,7 +83,6 @@
*
* @see PasswordTextField
* @see EditorModel
- * @see EditorStyle
* @see ImeAction
* @see KeyboardType
* @see VisualTransformation
@@ -92,7 +91,7 @@
fun TextField(
value: String,
onValueChange: (String) -> Unit = {},
- editorStyle: EditorStyle? = null,
+ textStyle: TextStyle? = null,
keyboardType: KeyboardType = KeyboardType.Text,
imeAction: ImeAction = ImeAction.Unspecified,
onFocus: () -> Unit = {},
@@ -122,7 +121,7 @@
onValueChange(it.text)
}
},
- editorStyle = editorStyle,
+ textStyle = textStyle,
keyboardType = keyboardType,
imeAction = imeAction,
onFocus = onFocus,
@@ -171,7 +170,7 @@
* the input service update the text, selection or cursor, this callback is called with the updated
* [EditorModel]. If you want to observe the composition text, use [TextField] with
* compositionRange instead.
- * @param editorStyle The editor style.
+ * @param textStyle Style configuration that applies at character level such as color, font etc.
* @param keyboardType The keyboard type to be used in this text field. Note that this input type
* is honored by IME and shows corresponding keyboard but this is not guaranteed. For example,
* some IME may send non-ASCII character even if you set [KeyboardType.Ascii].
@@ -190,7 +189,6 @@
* @param visualTransformation Optional visual filter for changing visual output of input field.
*
* @see EditorModel
- * @see EditorStyle
* @see ImeAction
* @see KeyboardType
* @see VisualTransformation
@@ -199,7 +197,7 @@
fun TextField(
value: EditorModel,
onValueChange: (EditorModel) -> Unit = {},
- editorStyle: EditorStyle? = null,
+ textStyle: TextStyle? = null,
keyboardType: KeyboardType = KeyboardType.Text,
imeAction: ImeAction = ImeAction.Unspecified,
onFocus: () -> Unit = {},
@@ -229,7 +227,7 @@
onValueChange(EditorModel(it.text, it.selection))
}
},
- editorStyle = editorStyle,
+ textStyle = textStyle,
keyboardType = keyboardType,
imeAction = imeAction,
onFocus = onFocus,
@@ -268,7 +266,7 @@
* @param onValueChange Called when the input service updates the text, selection or cursor. When
* the input service update the text, selection or cursor, this callback is called with the updated
* [EditorModel].
- * @param editorStyle The editor style.
+ * @param textStyle Style configuration that applies at character level such as color, font etc.
* @param keyboardType The keyboard type to be used in this text field. Note that this input type
* is honored by IME and shows corresponding keyboard but this is not guaranteed. For example,
* some IME may send non-ASCII character even if you set [KeyboardType.Ascii].
@@ -287,7 +285,6 @@
* @param visualTransformation Optional visual filter for changing visual output of input field.
*
* @see EditorModel
- * @see EditorStyle
* @see ImeAction
* @see KeyboardType
* @see VisualTransformation
@@ -297,7 +294,7 @@
model: EditorModel,
compositionRange: TextRange?,
onValueChange: (EditorModel, TextRange?) -> Unit = { _, _ -> },
- editorStyle: EditorStyle? = null,
+ textStyle: TextStyle? = null,
keyboardType: KeyboardType = KeyboardType.Text,
imeAction: ImeAction = ImeAction.Unspecified,
onFocus: () -> Unit = {},
@@ -309,7 +306,7 @@
BaseTextField(
value = InputState(model.text, model.selection, compositionRange),
onValueChange = { onValueChange(EditorModel(it.text, it.selection), it.composition) },
- editorStyle = editorStyle,
+ textStyle = textStyle,
keyboardType = keyboardType,
imeAction = imeAction,
onFocus = onFocus,
@@ -327,7 +324,7 @@
internal fun BaseTextField(
value: InputState,
onValueChange: (InputState) -> Unit = { },
- editorStyle: EditorStyle? = null,
+ textStyle: TextStyle? = null,
keyboardType: KeyboardType = KeyboardType.Text,
imeAction: ImeAction = ImeAction.Unspecified,
onFocus: () -> Unit = {},
@@ -354,7 +351,7 @@
// Memos
val processor = +memo { EditProcessor() }
- val mergedStyle = style.merge(editorStyle?.textStyle)
+ val mergedStyle = style.merge(textStyle)
val (visualText, offsetMap) = +memo(value, visualTransformation) {
val transformed = TextFieldDelegate.applyVisualFilter(value, visualTransformation)
value.composition?.let {
@@ -449,7 +446,7 @@
offsetMap,
textDelegate,
hasFocus.value,
- editorStyle?.selectionColor
+ DefaultSelectionColor
)
}
},
diff --git a/ui/ui-framework/src/main/java/androidx/ui/core/TextFieldDelegate.kt b/ui/ui-framework/src/main/java/androidx/ui/core/TextFieldDelegate.kt
index 4789ff5..f4c1d5a 100644
--- a/ui/ui-framework/src/main/java/androidx/ui/core/TextFieldDelegate.kt
+++ b/ui/ui-framework/src/main/java/androidx/ui/core/TextFieldDelegate.kt
@@ -134,7 +134,7 @@
offsetMap: OffsetMap,
textDelegate: TextDelegate,
hasFocus: Boolean,
- selectionColor: Color? = null
+ selectionColor: Color
) {
if (value.selection.collapsed) {
if (hasFocus) {
@@ -145,7 +145,7 @@
textDelegate.paintBackground(
offsetMap.originalToTransformed(value.selection.min),
offsetMap.originalToTransformed(value.selection.max),
- selectionColor ?: DefaultSelectionColor,
+ selectionColor,
canvas
)
}
diff --git a/ui/ui-framework/src/test/java/androidx/ui/core/TextFieldDelegateTest.kt b/ui/ui-framework/src/test/java/androidx/ui/core/TextFieldDelegateTest.kt
index 206ff8d..8a5d35e 100644
--- a/ui/ui-framework/src/test/java/androidx/ui/core/TextFieldDelegateTest.kt
+++ b/ui/ui-framework/src/test/java/androidx/ui/core/TextFieldDelegateTest.kt
@@ -139,7 +139,8 @@
textDelegate = mDelegate,
value = InputState(text = "Hello, World", selection = cursor),
hasFocus = true,
- offsetMap = identityOffsetMap
+ offsetMap = identityOffsetMap,
+ selectionColor = Color.Blue
)
verify(mDelegate, times(1)).paintCursor(eq(cursor.min), eq(canvas))
@@ -156,7 +157,8 @@
textDelegate = mDelegate,
value = InputState(text = "Hello, World", selection = cursor),
hasFocus = false,
- offsetMap = identityOffsetMap
+ offsetMap = identityOffsetMap,
+ selectionColor = Color.Blue
)
verify(mDelegate, never()).paintCursor(any(), any())
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyAlertDialog.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyAlertDialog.kt
new file mode 100644
index 0000000..c6da7ca5
--- /dev/null
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyAlertDialog.kt
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.ui.material.studies.rally
+
+import androidx.compose.Composable
+import androidx.compose.unaryPlus
+import androidx.ui.core.Text
+import androidx.ui.core.dp
+import androidx.ui.foundation.shape.RectangleShape
+import androidx.ui.layout.Column
+import androidx.ui.layout.CrossAxisAlignment
+import androidx.ui.layout.EdgeInsets
+import androidx.ui.layout.Spacing
+import androidx.ui.material.AlertDialog
+import androidx.ui.material.Button
+import androidx.ui.material.Divider
+import androidx.ui.material.TextButtonStyle
+import androidx.ui.material.themeColor
+
+@Composable
+fun RallyAlertDialog(
+ onDismiss: () -> Unit,
+ bodyText: String,
+ buttonText: String
+) {
+ RallyDialogThemeOverlay {
+ AlertDialog(
+ onCloseRequest = onDismiss,
+ text = { Text(bodyText) },
+ buttons = {
+ val style = TextButtonStyle(RectangleShape).copy(paddings = EdgeInsets(16.dp))
+ Column(crossAxisAlignment = CrossAxisAlignment.Stretch) {
+ Divider(
+ Spacing(left = 12.dp, right = 12.dp),
+ color = (+themeColor { onSurface }).copy(alpha = .2f)
+ )
+ Button(text = buttonText, onClick = onDismiss, style = style)
+ }
+ }
+ )
+ }
+}
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyCards.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyCards.kt
index 2d26b16..9b60e8ec 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyCards.kt
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyCards.kt
@@ -17,10 +17,12 @@
package androidx.ui.material.studies.rally
import androidx.compose.Composable
+import androidx.compose.state
import androidx.compose.unaryPlus
import androidx.ui.core.Alignment
import androidx.ui.core.Text
import androidx.ui.core.dp
+import androidx.ui.foundation.Clickable
import androidx.ui.foundation.ColoredRect
import androidx.ui.foundation.VerticalScroller
import androidx.ui.graphics.Color
@@ -39,44 +41,65 @@
import androidx.ui.material.Button
import androidx.ui.material.Divider
import androidx.ui.material.TextButtonStyle
+import androidx.ui.material.ripple.Ripple
import androidx.ui.material.surface.Card
import androidx.ui.material.themeColor
import androidx.ui.material.themeTextStyle
+import java.util.Locale
/**
* The Alerts card within the Rally Overview screen.
*/
@Composable
fun RallyAlertCard() {
+ val openDialog = +state { false }
+ val alertMessage = "Heads up, you've used up 90% of your Shopping budget for this month."
+
+ if (openDialog.value) {
+ RallyAlertDialog(
+ onDismiss = {
+ openDialog.value = false
+ },
+ bodyText = alertMessage,
+ buttonText = "Dismiss".toUpperCase(Locale.getDefault())
+ )
+ }
Card {
- Column(Spacing(12.dp)) {
- Row(
- ExpandedWidth,
- mainAxisAlignment = MainAxisAlignment.SpaceBetween
- ) {
- Text(
- text = "Alerts",
- style = +themeTextStyle { body1 }
- )
- Button(text = "See All", onClick = { }, style = TextButtonStyle())
+ Column {
+ Ripple(bounded = true) {
+ Clickable(onClick = { openDialog.value = true }) {
+ Container {
+ Row(
+ modifier = Spacing(12.dp) wraps ExpandedWidth,
+ mainAxisAlignment = MainAxisAlignment.SpaceBetween
+ ) {
+ Text(text = "Alerts", style = +themeTextStyle { subtitle2 })
+ Button(text = "See All", onClick = { }, style = TextButtonStyle())
+ }
+ }
+ }
}
Divider(
- Spacing(top = 12.dp, bottom = 12.dp),
+ Spacing(left = 12.dp, right = 12.dp),
color = +themeColor { background },
height = 2.dp
)
- Row {
- val text = "Heads up, you've used up 90% of your " +
- "Shopping budget for this month."
- Text(
- style = +themeTextStyle { body1 },
- modifier = Flexible(1f),
- text = text
- )
- // TODO: icons still don't work
-// <vectorResource res=context.resources
-// resId=androidx.ui.material.studies.R.drawable.sort_icon/>
- Button(text = "Sort", onClick = { }, style = TextButtonStyle())
+ Ripple(bounded = true) {
+ Clickable(onClick = { openDialog.value = true }) {
+ Container {
+ Row(Spacing(12.dp)) {
+ Text(
+ style = +themeTextStyle { body1 },
+ modifier = Flexible(1f),
+ text = alertMessage
+ )
+ // TODO: icons still don't work
+// <vectorResource res=context.resources
+// resId=androidx.ui.material.studies.R.drawable.sort_icon/>
+ Button(text = "Sort", onClick = { }, style = TextButtonStyle())
+ }
+ }
+ }
}
}
}
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyTheme.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyTheme.kt
index 2e2c5882..ad16cb4 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyTheme.kt
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyTheme.kt
@@ -17,14 +17,19 @@
package androidx.ui.material.studies.rally
import androidx.compose.Composable
+import androidx.compose.ambient
+import androidx.compose.unaryPlus
+import androidx.ui.core.em
import androidx.ui.core.sp
-import androidx.ui.text.font.FontWeight
-import androidx.ui.text.font.FontFamily
import androidx.ui.graphics.Color
+import androidx.ui.material.Colors
import androidx.ui.material.MaterialColors
import androidx.ui.material.MaterialTheme
import androidx.ui.material.MaterialTypography
+import androidx.ui.material.Typography
import androidx.ui.text.TextStyle
+import androidx.ui.text.font.FontFamily
+import androidx.ui.text.font.FontWeight
val rallyGreen = Color(0xFF1EB980)
val rallyDarkGreen = Color(0xFF045D56)
@@ -84,7 +89,27 @@
fontSize = 10.sp)
)
- MaterialTheme(colors = colors, typography = typography) {
- children()
- }
+ MaterialTheme(colors = colors, typography = typography, children = children)
+}
+
+@Composable
+fun RallyDialogThemeOverlay(children: @Composable() () -> Unit) {
+ val dialogColors = (+ambient(Colors)).copy(
+ primary = Color.White,
+ surface = Color(0xFF1E1E1E),
+ onSurface = Color.White
+ )
+ val currentTypography = +ambient(Typography)
+ val dialogTypography = currentTypography.copy(
+ body1 = currentTypography.body1.copy(
+ fontFamily = FontFamily("RobotoCondensed"),
+ fontWeight = FontWeight.Normal,
+ fontSize = 20.sp
+ ),
+ button = currentTypography.button.copy(
+ fontWeight = FontWeight.Bold,
+ letterSpacing = 0.2.em
+ )
+ )
+ MaterialTheme(colors = dialogColors, typography = dialogTypography, children = children)
}
\ No newline at end of file
diff --git a/ui/ui-material/integration-tests/samples/src/main/java/androidx/ui/material/samples/SelectionControlsSamples.kt b/ui/ui-material/integration-tests/samples/src/main/java/androidx/ui/material/samples/SelectionControlsSamples.kt
index e2ac4bc..5f72c4a 100644
--- a/ui/ui-material/integration-tests/samples/src/main/java/androidx/ui/material/samples/SelectionControlsSamples.kt
+++ b/ui/ui-material/integration-tests/samples/src/main/java/androidx/ui/material/samples/SelectionControlsSamples.kt
@@ -44,13 +44,13 @@
// TriStateCheckbox state reflects state of dependent checkboxes
val parentState = +memo(state, state2) {
- if (state && state2) ToggleableState.Checked
- else if (!state && !state2) ToggleableState.Unchecked
+ if (state && state2) ToggleableState.On
+ else if (!state && !state2) ToggleableState.Off
else ToggleableState.Indeterminate
}
// click on TriStateCheckbox can set state for dependent checkboxes
val onParentClick = {
- val s = parentState != ToggleableState.Checked
+ val s = parentState != ToggleableState.On
onStateChange(s)
onStateChange2(s)
}
diff --git a/ui/ui-material/src/androidTest/java/androidx/ui/material/CheckboxUiTest.kt b/ui/ui-material/src/androidTest/java/androidx/ui/material/CheckboxUiTest.kt
index df6d70d2..6315812 100644
--- a/ui/ui-material/src/androidTest/java/androidx/ui/material/CheckboxUiTest.kt
+++ b/ui/ui-material/src/androidTest/java/androidx/ui/material/CheckboxUiTest.kt
@@ -22,15 +22,15 @@
import androidx.ui.core.dp
import androidx.ui.foundation.Strings
import androidx.ui.foundation.selection.ToggleableState
-import androidx.ui.foundation.selection.ToggleableState.Checked
+import androidx.ui.foundation.selection.ToggleableState.On
import androidx.ui.foundation.selection.ToggleableState.Indeterminate
-import androidx.ui.foundation.selection.ToggleableState.Unchecked
+import androidx.ui.foundation.selection.ToggleableState.Off
import androidx.ui.foundation.semantics.toggleableState
import androidx.ui.layout.Column
import androidx.ui.semantics.accessibilityValue
import androidx.ui.test.assertHasNoClickAction
-import androidx.ui.test.assertIsChecked
-import androidx.ui.test.assertIsUnchecked
+import androidx.ui.test.assertIsOn
+import androidx.ui.test.assertIsOff
import androidx.ui.test.assertSemanticsIsEqualTo
import androidx.ui.test.copyWith
import androidx.ui.test.createComposeRule
@@ -53,12 +53,12 @@
private val defaultCheckboxCheckedSemantics = createFullSemantics(
isEnabled = true,
value = Strings.Checked,
- toggleableState = Checked
+ toggleableState = On
)
private val defaultCheckboxUncheckedSemantics = defaultCheckboxCheckedSemantics.copyWith {
accessibilityValue = Strings.Unchecked
- toggleableState = Unchecked
+ toggleableState = Off
}
private val defaultTag = "myCheckbox"
@@ -93,9 +93,9 @@
}
findByTag(defaultTag)
- .assertIsUnchecked()
+ .assertIsOff()
.doClick()
- .assertIsChecked()
+ .assertIsOn()
}
@Test
@@ -108,11 +108,11 @@
}
findByTag(defaultTag)
- .assertIsUnchecked()
+ .assertIsOff()
.doClick()
- .assertIsChecked()
+ .assertIsOn()
.doClick()
- .assertIsUnchecked()
+ .assertIsOff()
}
@Test
@@ -131,12 +131,12 @@
@Test
fun checkBoxTest_MaterialSize_WhenChecked() {
- materialSizeTestForValue(Checked)
+ materialSizeTestForValue(On)
}
@Test
fun checkBoxTest_MaterialSize_WhenUnchecked() {
- materialSizeTestForValue(Unchecked)
+ materialSizeTestForValue(Off)
}
@Test
diff --git a/ui/ui-material/src/androidTest/java/androidx/ui/material/SwitchUiTest.kt b/ui/ui-material/src/androidTest/java/androidx/ui/material/SwitchUiTest.kt
index 3dc299f..6b1e2bd 100644
--- a/ui/ui-material/src/androidTest/java/androidx/ui/material/SwitchUiTest.kt
+++ b/ui/ui-material/src/androidTest/java/androidx/ui/material/SwitchUiTest.kt
@@ -27,8 +27,8 @@
import androidx.ui.layout.Column
import androidx.ui.semantics.accessibilityValue
import androidx.ui.test.assertHasNoClickAction
-import androidx.ui.test.assertIsChecked
-import androidx.ui.test.assertIsUnchecked
+import androidx.ui.test.assertIsOn
+import androidx.ui.test.assertIsOff
import androidx.ui.test.assertSemanticsIsEqualTo
import androidx.ui.test.copyWith
import androidx.ui.test.createComposeRule
@@ -49,12 +49,12 @@
private val defaultUncheckedSwitchSemantics = createFullSemantics(
isEnabled = true,
- toggleableState = ToggleableState.Unchecked,
+ toggleableState = ToggleableState.Off,
value = Strings.Unchecked // TODO(a11y): Do we still call this checked/unchecked?
)
private val defaultCheckedSwitchSemantics = defaultUncheckedSwitchSemantics.copyWith {
- toggleableState = ToggleableState.Checked
+ toggleableState = ToggleableState.On
accessibilityValue = Strings.Checked
}
private val defaultSwitchTag = "switch"
@@ -85,9 +85,9 @@
}
}
findByTag(defaultSwitchTag)
- .assertIsUnchecked()
+ .assertIsOff()
.doClick()
- .assertIsChecked()
+ .assertIsOn()
}
@Test
@@ -100,11 +100,11 @@
}
}
findByTag(defaultSwitchTag)
- .assertIsUnchecked()
+ .assertIsOff()
.doClick()
- .assertIsChecked()
+ .assertIsOn()
.doClick()
- .assertIsUnchecked()
+ .assertIsOff()
}
@Test
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/AlertDialog.kt b/ui/ui-material/src/main/java/androidx/ui/material/AlertDialog.kt
index 0c3372f..2d221d7 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/AlertDialog.kt
+++ b/ui/ui-material/src/main/java/androidx/ui/material/AlertDialog.kt
@@ -52,9 +52,10 @@
* @param onCloseRequest Executes when the user tries to dismiss the Dialog by clicking outside
* or pressing the back button.
* @param title The title of the Dialog which should specify the purpose of the Dialog. The title
- * is not mandatory, because there may be sufficient information inside the [text].
- * @param text The text which presents the details regarding
- * the Dialog's purpose.
+ * is not mandatory, because there may be sufficient information inside the [text]. Provided text
+ * style will be [MaterialTypography.h6].
+ * @param text The text which presents the details regarding the Dialog's purpose. Provided text
+ * style will be [MaterialTypography.body1].
* @param confirmButton A button which is meant to confirm a proposed action, thus resolving
* what triggered the dialog.
* @param dismissButton A button which is meant to dismiss the dialog.
@@ -95,9 +96,10 @@
* @param onCloseRequest Executes when the user tries to dismiss the Dialog by clicking outside
* or pressing the back button.
* @param title The title of the Dialog which should specify the purpose of the Dialog. The title
- * is not mandatory, because there may be sufficient information inside the [text].
- * @param text The text which presents the details regarding
- * the Dialog's purpose.
+ * is not mandatory, because there may be sufficient information inside the [text]. Provided text
+ * style will be [MaterialTypography.h6].
+ * @param text The text which presents the details regarding the Dialog's purpose. Provided text
+ * style will be [MaterialTypography.body1].
* @param buttons Function that emits the layout with the buttons
*/
@Suppress("USELESS_CAST")
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/Checkbox.kt b/ui/ui-material/src/main/java/androidx/ui/material/Checkbox.kt
index 2108efc..a0a715e 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/Checkbox.kt
+++ b/ui/ui-material/src/main/java/androidx/ui/material/Checkbox.kt
@@ -213,13 +213,13 @@
private fun generateTransitionDefinition(color: Color, unselectedColor: Color) =
transitionDefinition {
- state(ToggleableState.Checked) {
+ state(ToggleableState.On) {
this[CheckFractionProp] = 1f
this[InnerRadiusFractionProp] = 1f
this[CenterGravitationForCheck] = 0f
this[BoxColorProp] = color
}
- state(ToggleableState.Unchecked) {
+ state(ToggleableState.Off) {
this[CheckFractionProp] = 0f
this[InnerRadiusFractionProp] = 0f
this[CenterGravitationForCheck] = 1f
@@ -231,26 +231,26 @@
this[CenterGravitationForCheck] = 1f
this[BoxColorProp] = color
}
- transition(fromState = ToggleableState.Unchecked, toState = ToggleableState.Checked) {
+ transition(fromState = ToggleableState.Off, toState = ToggleableState.On) {
boxTransitionFromUnchecked()
CenterGravitationForCheck using snap()
}
- transition(fromState = ToggleableState.Checked, toState = ToggleableState.Unchecked) {
+ transition(fromState = ToggleableState.On, toState = ToggleableState.Off) {
boxTransitionToUnchecked()
CenterGravitationForCheck using tween {
duration = CheckStrokeAnimationDuration
}
}
- transition(ToggleableState.Checked to ToggleableState.Indeterminate,
- ToggleableState.Indeterminate to ToggleableState.Checked) {
+ transition(ToggleableState.On to ToggleableState.Indeterminate,
+ ToggleableState.Indeterminate to ToggleableState.On) {
CenterGravitationForCheck using tween {
duration = CheckStrokeAnimationDuration
}
}
- transition(fromState = ToggleableState.Indeterminate, toState = ToggleableState.Unchecked) {
+ transition(fromState = ToggleableState.Indeterminate, toState = ToggleableState.Off) {
boxTransitionToUnchecked()
}
- transition(fromState = ToggleableState.Unchecked, toState = ToggleableState.Indeterminate) {
+ transition(fromState = ToggleableState.Off, toState = ToggleableState.Indeterminate) {
boxTransitionFromUnchecked()
}
}
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/DataTable.kt b/ui/ui-material/src/main/java/androidx/ui/material/DataTable.kt
index f30d563..20881c1 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/DataTable.kt
+++ b/ui/ui-material/src/main/java/androidx/ui/material/DataTable.kt
@@ -366,12 +366,12 @@
if (showCheckboxes) {
Container(height = headerRowHeight, padding = cellSpacing) {
val parentState = when (selectableRows.count { it.selected }) {
- selectableRows.size -> ToggleableState.Checked
- 0 -> ToggleableState.Unchecked
+ selectableRows.size -> ToggleableState.On
+ 0 -> ToggleableState.Off
else -> ToggleableState.Indeterminate
}
TriStateCheckbox(value = parentState, onClick = {
- val newValue = parentState != ToggleableState.Checked
+ val newValue = parentState != ToggleableState.On
if (header.onSelectAll != null) {
header.onSelectAll.invoke(newValue)
} else {
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/Switch.kt b/ui/ui-material/src/main/java/androidx/ui/material/Switch.kt
index 5ea6cea..5aa29b3 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/Switch.kt
+++ b/ui/ui-material/src/main/java/androidx/ui/material/Switch.kt
@@ -59,7 +59,7 @@
) {
Wrap {
Ripple(bounded = false) {
- Toggleable(checked = checked, onCheckedChange = onCheckedChange) {
+ Toggleable(value = checked, onValueChange = onCheckedChange) {
Padding(padding = DefaultSwitchPadding) {
SwitchImpl(checked, onCheckedChange, color)
}
diff --git a/ui/ui-platform/src/main/java/androidx/ui/core/text/AndroidFontResourceLoader.kt b/ui/ui-platform/src/main/java/androidx/ui/core/text/AndroidFontResourceLoader.kt
index e92cac8..c5126a7 100644
--- a/ui/ui-platform/src/main/java/androidx/ui/core/text/AndroidFontResourceLoader.kt
+++ b/ui/ui-platform/src/main/java/androidx/ui/core/text/AndroidFontResourceLoader.kt
@@ -30,8 +30,6 @@
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
class AndroidFontResourceLoader(private val context: Context) : Font.ResourceLoader {
override fun load(font: Font): Typeface {
- // TODO(siyamed): This is an expensive operation and discouraged in the API Docs
- // remove when alternative resource loading system is defined.
val resId = context.resources.getIdentifier(
font.name.substringBefore("."),
"font",
diff --git a/ui/ui-test/api/0.1.0-dev02.txt b/ui/ui-test/api/0.1.0-dev02.txt
index ea248216..eb9c996 100644
--- a/ui/ui-test/api/0.1.0-dev02.txt
+++ b/ui/ui-test/api/0.1.0-dev02.txt
@@ -13,11 +13,11 @@
method public static void assertDoesNotExist(kotlin.jvm.functions.Function1<? super androidx.ui.core.semantics.SemanticsConfiguration,java.lang.Boolean> selector);
method public static androidx.ui.test.SemanticsNodeInteraction assertHasClickAction(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertHasNoClickAction(androidx.ui.test.SemanticsNodeInteraction);
- method public static androidx.ui.test.SemanticsNodeInteraction assertIsChecked(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertIsHidden(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertIsInMutuallyExclusiveGroup(androidx.ui.test.SemanticsNodeInteraction);
+ method public static androidx.ui.test.SemanticsNodeInteraction assertIsOff(androidx.ui.test.SemanticsNodeInteraction);
+ method public static androidx.ui.test.SemanticsNodeInteraction assertIsOn(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertIsSelected(androidx.ui.test.SemanticsNodeInteraction);
- method public static androidx.ui.test.SemanticsNodeInteraction assertIsUnchecked(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertIsUnselected(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertIsVisible(androidx.ui.test.SemanticsNodeInteraction);
method public static void assertNoLongerExists(androidx.ui.test.SemanticsNodeInteraction);
diff --git a/ui/ui-test/api/0.1.0-dev03.txt b/ui/ui-test/api/0.1.0-dev03.txt
index ea248216..eb9c996 100644
--- a/ui/ui-test/api/0.1.0-dev03.txt
+++ b/ui/ui-test/api/0.1.0-dev03.txt
@@ -13,11 +13,11 @@
method public static void assertDoesNotExist(kotlin.jvm.functions.Function1<? super androidx.ui.core.semantics.SemanticsConfiguration,java.lang.Boolean> selector);
method public static androidx.ui.test.SemanticsNodeInteraction assertHasClickAction(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertHasNoClickAction(androidx.ui.test.SemanticsNodeInteraction);
- method public static androidx.ui.test.SemanticsNodeInteraction assertIsChecked(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertIsHidden(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertIsInMutuallyExclusiveGroup(androidx.ui.test.SemanticsNodeInteraction);
+ method public static androidx.ui.test.SemanticsNodeInteraction assertIsOff(androidx.ui.test.SemanticsNodeInteraction);
+ method public static androidx.ui.test.SemanticsNodeInteraction assertIsOn(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertIsSelected(androidx.ui.test.SemanticsNodeInteraction);
- method public static androidx.ui.test.SemanticsNodeInteraction assertIsUnchecked(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertIsUnselected(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertIsVisible(androidx.ui.test.SemanticsNodeInteraction);
method public static void assertNoLongerExists(androidx.ui.test.SemanticsNodeInteraction);
diff --git a/ui/ui-test/api/current.txt b/ui/ui-test/api/current.txt
index ea248216..eb9c996 100644
--- a/ui/ui-test/api/current.txt
+++ b/ui/ui-test/api/current.txt
@@ -13,11 +13,11 @@
method public static void assertDoesNotExist(kotlin.jvm.functions.Function1<? super androidx.ui.core.semantics.SemanticsConfiguration,java.lang.Boolean> selector);
method public static androidx.ui.test.SemanticsNodeInteraction assertHasClickAction(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertHasNoClickAction(androidx.ui.test.SemanticsNodeInteraction);
- method public static androidx.ui.test.SemanticsNodeInteraction assertIsChecked(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertIsHidden(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertIsInMutuallyExclusiveGroup(androidx.ui.test.SemanticsNodeInteraction);
+ method public static androidx.ui.test.SemanticsNodeInteraction assertIsOff(androidx.ui.test.SemanticsNodeInteraction);
+ method public static androidx.ui.test.SemanticsNodeInteraction assertIsOn(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertIsSelected(androidx.ui.test.SemanticsNodeInteraction);
- method public static androidx.ui.test.SemanticsNodeInteraction assertIsUnchecked(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertIsUnselected(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertIsVisible(androidx.ui.test.SemanticsNodeInteraction);
method public static void assertNoLongerExists(androidx.ui.test.SemanticsNodeInteraction);
diff --git a/ui/ui-test/api/public_plus_experimental_0.1.0-dev02.txt b/ui/ui-test/api/public_plus_experimental_0.1.0-dev02.txt
index ea248216..eb9c996 100644
--- a/ui/ui-test/api/public_plus_experimental_0.1.0-dev02.txt
+++ b/ui/ui-test/api/public_plus_experimental_0.1.0-dev02.txt
@@ -13,11 +13,11 @@
method public static void assertDoesNotExist(kotlin.jvm.functions.Function1<? super androidx.ui.core.semantics.SemanticsConfiguration,java.lang.Boolean> selector);
method public static androidx.ui.test.SemanticsNodeInteraction assertHasClickAction(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertHasNoClickAction(androidx.ui.test.SemanticsNodeInteraction);
- method public static androidx.ui.test.SemanticsNodeInteraction assertIsChecked(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertIsHidden(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertIsInMutuallyExclusiveGroup(androidx.ui.test.SemanticsNodeInteraction);
+ method public static androidx.ui.test.SemanticsNodeInteraction assertIsOff(androidx.ui.test.SemanticsNodeInteraction);
+ method public static androidx.ui.test.SemanticsNodeInteraction assertIsOn(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertIsSelected(androidx.ui.test.SemanticsNodeInteraction);
- method public static androidx.ui.test.SemanticsNodeInteraction assertIsUnchecked(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertIsUnselected(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertIsVisible(androidx.ui.test.SemanticsNodeInteraction);
method public static void assertNoLongerExists(androidx.ui.test.SemanticsNodeInteraction);
diff --git a/ui/ui-test/api/public_plus_experimental_0.1.0-dev03.txt b/ui/ui-test/api/public_plus_experimental_0.1.0-dev03.txt
index ea248216..eb9c996 100644
--- a/ui/ui-test/api/public_plus_experimental_0.1.0-dev03.txt
+++ b/ui/ui-test/api/public_plus_experimental_0.1.0-dev03.txt
@@ -13,11 +13,11 @@
method public static void assertDoesNotExist(kotlin.jvm.functions.Function1<? super androidx.ui.core.semantics.SemanticsConfiguration,java.lang.Boolean> selector);
method public static androidx.ui.test.SemanticsNodeInteraction assertHasClickAction(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertHasNoClickAction(androidx.ui.test.SemanticsNodeInteraction);
- method public static androidx.ui.test.SemanticsNodeInteraction assertIsChecked(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertIsHidden(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertIsInMutuallyExclusiveGroup(androidx.ui.test.SemanticsNodeInteraction);
+ method public static androidx.ui.test.SemanticsNodeInteraction assertIsOff(androidx.ui.test.SemanticsNodeInteraction);
+ method public static androidx.ui.test.SemanticsNodeInteraction assertIsOn(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertIsSelected(androidx.ui.test.SemanticsNodeInteraction);
- method public static androidx.ui.test.SemanticsNodeInteraction assertIsUnchecked(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertIsUnselected(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertIsVisible(androidx.ui.test.SemanticsNodeInteraction);
method public static void assertNoLongerExists(androidx.ui.test.SemanticsNodeInteraction);
diff --git a/ui/ui-test/api/public_plus_experimental_current.txt b/ui/ui-test/api/public_plus_experimental_current.txt
index ea248216..eb9c996 100644
--- a/ui/ui-test/api/public_plus_experimental_current.txt
+++ b/ui/ui-test/api/public_plus_experimental_current.txt
@@ -13,11 +13,11 @@
method public static void assertDoesNotExist(kotlin.jvm.functions.Function1<? super androidx.ui.core.semantics.SemanticsConfiguration,java.lang.Boolean> selector);
method public static androidx.ui.test.SemanticsNodeInteraction assertHasClickAction(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertHasNoClickAction(androidx.ui.test.SemanticsNodeInteraction);
- method public static androidx.ui.test.SemanticsNodeInteraction assertIsChecked(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertIsHidden(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertIsInMutuallyExclusiveGroup(androidx.ui.test.SemanticsNodeInteraction);
+ method public static androidx.ui.test.SemanticsNodeInteraction assertIsOff(androidx.ui.test.SemanticsNodeInteraction);
+ method public static androidx.ui.test.SemanticsNodeInteraction assertIsOn(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertIsSelected(androidx.ui.test.SemanticsNodeInteraction);
- method public static androidx.ui.test.SemanticsNodeInteraction assertIsUnchecked(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertIsUnselected(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertIsVisible(androidx.ui.test.SemanticsNodeInteraction);
method public static void assertNoLongerExists(androidx.ui.test.SemanticsNodeInteraction);
diff --git a/ui/ui-test/api/restricted_0.1.0-dev02.txt b/ui/ui-test/api/restricted_0.1.0-dev02.txt
index ea248216..eb9c996 100644
--- a/ui/ui-test/api/restricted_0.1.0-dev02.txt
+++ b/ui/ui-test/api/restricted_0.1.0-dev02.txt
@@ -13,11 +13,11 @@
method public static void assertDoesNotExist(kotlin.jvm.functions.Function1<? super androidx.ui.core.semantics.SemanticsConfiguration,java.lang.Boolean> selector);
method public static androidx.ui.test.SemanticsNodeInteraction assertHasClickAction(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertHasNoClickAction(androidx.ui.test.SemanticsNodeInteraction);
- method public static androidx.ui.test.SemanticsNodeInteraction assertIsChecked(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertIsHidden(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertIsInMutuallyExclusiveGroup(androidx.ui.test.SemanticsNodeInteraction);
+ method public static androidx.ui.test.SemanticsNodeInteraction assertIsOff(androidx.ui.test.SemanticsNodeInteraction);
+ method public static androidx.ui.test.SemanticsNodeInteraction assertIsOn(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertIsSelected(androidx.ui.test.SemanticsNodeInteraction);
- method public static androidx.ui.test.SemanticsNodeInteraction assertIsUnchecked(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertIsUnselected(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertIsVisible(androidx.ui.test.SemanticsNodeInteraction);
method public static void assertNoLongerExists(androidx.ui.test.SemanticsNodeInteraction);
diff --git a/ui/ui-test/api/restricted_0.1.0-dev03.txt b/ui/ui-test/api/restricted_0.1.0-dev03.txt
index ea248216..eb9c996 100644
--- a/ui/ui-test/api/restricted_0.1.0-dev03.txt
+++ b/ui/ui-test/api/restricted_0.1.0-dev03.txt
@@ -13,11 +13,11 @@
method public static void assertDoesNotExist(kotlin.jvm.functions.Function1<? super androidx.ui.core.semantics.SemanticsConfiguration,java.lang.Boolean> selector);
method public static androidx.ui.test.SemanticsNodeInteraction assertHasClickAction(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertHasNoClickAction(androidx.ui.test.SemanticsNodeInteraction);
- method public static androidx.ui.test.SemanticsNodeInteraction assertIsChecked(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertIsHidden(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertIsInMutuallyExclusiveGroup(androidx.ui.test.SemanticsNodeInteraction);
+ method public static androidx.ui.test.SemanticsNodeInteraction assertIsOff(androidx.ui.test.SemanticsNodeInteraction);
+ method public static androidx.ui.test.SemanticsNodeInteraction assertIsOn(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertIsSelected(androidx.ui.test.SemanticsNodeInteraction);
- method public static androidx.ui.test.SemanticsNodeInteraction assertIsUnchecked(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertIsUnselected(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertIsVisible(androidx.ui.test.SemanticsNodeInteraction);
method public static void assertNoLongerExists(androidx.ui.test.SemanticsNodeInteraction);
diff --git a/ui/ui-test/api/restricted_current.txt b/ui/ui-test/api/restricted_current.txt
index ea248216..eb9c996 100644
--- a/ui/ui-test/api/restricted_current.txt
+++ b/ui/ui-test/api/restricted_current.txt
@@ -13,11 +13,11 @@
method public static void assertDoesNotExist(kotlin.jvm.functions.Function1<? super androidx.ui.core.semantics.SemanticsConfiguration,java.lang.Boolean> selector);
method public static androidx.ui.test.SemanticsNodeInteraction assertHasClickAction(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertHasNoClickAction(androidx.ui.test.SemanticsNodeInteraction);
- method public static androidx.ui.test.SemanticsNodeInteraction assertIsChecked(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertIsHidden(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertIsInMutuallyExclusiveGroup(androidx.ui.test.SemanticsNodeInteraction);
+ method public static androidx.ui.test.SemanticsNodeInteraction assertIsOff(androidx.ui.test.SemanticsNodeInteraction);
+ method public static androidx.ui.test.SemanticsNodeInteraction assertIsOn(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertIsSelected(androidx.ui.test.SemanticsNodeInteraction);
- method public static androidx.ui.test.SemanticsNodeInteraction assertIsUnchecked(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertIsUnselected(androidx.ui.test.SemanticsNodeInteraction);
method public static androidx.ui.test.SemanticsNodeInteraction assertIsVisible(androidx.ui.test.SemanticsNodeInteraction);
method public static void assertNoLongerExists(androidx.ui.test.SemanticsNodeInteraction);
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/FindAllTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/FindAllTest.kt
index 7209945..f8c0776 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/FindAllTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/FindAllTest.kt
@@ -52,11 +52,11 @@
}
findAll {
- getOrNull(FoundationSemanticsProperties.ToggleableState) == ToggleableState.Checked
+ getOrNull(FoundationSemanticsProperties.ToggleableState) == ToggleableState.On
}
.assertCountEquals(2)
.forEach {
- it.assertIsChecked()
+ it.assertIsOn()
}
}
@@ -85,7 +85,7 @@
.assertCountEquals(2)
.forEach {
it.doClick()
- it.assertIsChecked()
+ it.assertIsOn()
}
}
@@ -103,7 +103,7 @@
}
findAll {
- getOrNull(FoundationSemanticsProperties.ToggleableState) != ToggleableState.Checked
+ getOrNull(FoundationSemanticsProperties.ToggleableState) != ToggleableState.On
}
.assertCountEquals(0)
}
@@ -133,9 +133,9 @@
findAll { isToggleable }.apply {
get(0)
.doClick()
- .assertIsChecked()
+ .assertIsOn()
get(1)
- .assertIsUnchecked()
+ .assertIsOff()
}.assertCountEquals(2)
}
@@ -171,14 +171,14 @@
findAll { isToggleable }.assertCountEquals(2).apply {
get(0)
- .assertIsUnchecked()
+ .assertIsOff()
.doClick()
- .assertIsChecked()
+ .assertIsOn()
}
findAll { isToggleable }.assertCountEquals(3).apply {
get(2)
- .assertIsUnchecked()
+ .assertIsOff()
}
}
@@ -209,9 +209,9 @@
findAll { isToggleable }.assertCountEquals(2).apply {
get(0)
- .assertIsUnchecked()
+ .assertIsOff()
.doClick()
- .assertIsChecked()
+ .assertIsOn()
get(1)
.assertNoLongerExists()
}
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/MultipleComposeRootsTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/MultipleComposeRootsTest.kt
index 8b560ea..9c38db3 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/MultipleComposeRootsTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/MultipleComposeRootsTest.kt
@@ -40,13 +40,13 @@
// TODO: Make this inner class once @Model gets fixed.
@Model
-class CheckboxState(var value: ToggleableState = ToggleableState.Unchecked) {
+class CheckboxState(var value: ToggleableState = ToggleableState.Off) {
fun toggle() {
value =
- if (value == ToggleableState.Checked) {
- ToggleableState.Unchecked
+ if (value == ToggleableState.On) {
+ ToggleableState.Off
} else {
- ToggleableState.Checked
+ ToggleableState.On
}
}
}
@@ -86,8 +86,8 @@
activity.runOnUiThread(object : Runnable { // Workaround for lambda bug in IR
override fun run() {
- val state1 = CheckboxState(value = ToggleableState.Unchecked)
- val state2 = CheckboxState(value = ToggleableState.Checked)
+ val state1 = CheckboxState(value = ToggleableState.Off)
+ val state2 = CheckboxState(value = ToggleableState.On)
val linearLayout = LinearLayout(activity)
.apply { orientation = LinearLayout.VERTICAL }
@@ -153,22 +153,22 @@
findByTag("checkbox1")
.doClick()
- .assertIsChecked()
+ .assertIsOn()
findByTag("checkbox2")
- .assertIsUnchecked()
+ .assertIsOff()
- Espresso.onView(withText("Compose 1 - Checked")).check(matches(isDisplayed()))
- Espresso.onView(withText("Compose 2 - Unchecked")).check(matches(isDisplayed()))
+ Espresso.onView(withText("Compose 1 - On")).check(matches(isDisplayed()))
+ Espresso.onView(withText("Compose 2 - Off")).check(matches(isDisplayed()))
findByTag("checkbox2")
.doClick()
- .assertIsUnchecked()
+ .assertIsOff()
findByTag("checkbox1")
- .assertIsChecked()
+ .assertIsOn()
- Espresso.onView(withText("Compose 1 - Checked")).check(matches(isDisplayed()))
- Espresso.onView(withText("Compose 2 - Unchecked")).check(matches(isDisplayed()))
+ Espresso.onView(withText("Compose 1 - On")).check(matches(isDisplayed()))
+ Espresso.onView(withText("Compose 2 - Off")).check(matches(isDisplayed()))
}
}
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/RecompositionDetectionTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/RecompositionDetectionTest.kt
index 1a5b89c..2118d3b 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/RecompositionDetectionTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/RecompositionDetectionTest.kt
@@ -67,6 +67,6 @@
Truth.assertThat(interaction.hadPendingChangesAfterLastAction).isTrue()
- node.assertIsChecked()
+ node.assertIsOn()
}
}
\ No newline at end of file
diff --git a/ui/ui-test/src/main/java/androidx/ui/test/Assertions.kt b/ui/ui-test/src/main/java/androidx/ui/test/Assertions.kt
index e417c4d3..fc2b54c 100644
--- a/ui/ui-test/src/main/java/androidx/ui/test/Assertions.kt
+++ b/ui/ui-test/src/main/java/androidx/ui/test/Assertions.kt
@@ -76,10 +76,10 @@
*
* Throws [AssertionError] if the component is not unchecked, indeterminate, or not toggleable.
*/
-fun SemanticsNodeInteraction.assertIsChecked(): SemanticsNodeInteraction {
+fun SemanticsNodeInteraction.assertIsOn(): SemanticsNodeInteraction {
assertIsToggleable()
verify({ "Component is toggled off, expected it to be toggled on" }) {
- it[FoundationSemanticsProperties.ToggleableState] == ToggleableState.Checked
+ it[FoundationSemanticsProperties.ToggleableState] == ToggleableState.On
}
return this
}
@@ -89,10 +89,10 @@
*
* Throws [AssertionError] if the component is checked, indeterminate, or not toggleable.
*/
-fun SemanticsNodeInteraction.assertIsUnchecked(): SemanticsNodeInteraction {
+fun SemanticsNodeInteraction.assertIsOff(): SemanticsNodeInteraction {
assertIsToggleable()
verify({ "Component is toggled on, expected it to be toggled off" }) {
- it[FoundationSemanticsProperties.ToggleableState] == ToggleableState.Unchecked
+ it[FoundationSemanticsProperties.ToggleableState] == ToggleableState.Off
}
return this
diff --git a/ui/ui-test/src/main/java/androidx/ui/test/SemanticsNodeInteraction.kt b/ui/ui-test/src/main/java/androidx/ui/test/SemanticsNodeInteraction.kt
index 64fcc18..78a269e 100644
--- a/ui/ui-test/src/main/java/androidx/ui/test/SemanticsNodeInteraction.kt
+++ b/ui/ui-test/src/main/java/androidx/ui/test/SemanticsNodeInteraction.kt
@@ -20,12 +20,12 @@
/**
* Represents a component with which one can interact with the hierarchy.
- * Examples of interactions include [findByTag], [isToggleable], [assertIsChecked], [doClick]
+ * Examples of interactions include [findByTag], [isToggleable], [assertIsOn], [doClick]
*
* Example usage:
* findByTag("myCheckbox")
* .doClick()
- * .assertIsChecked()
+ * .assertIsOn()
*/
class SemanticsNodeInteraction internal constructor(
internal val semanticsTreeNode: SemanticsTreeNode,
diff --git a/ui/ui-test/src/test/java/androidx/ui/test/AssertsTests.kt b/ui/ui-test/src/test/java/androidx/ui/test/AssertsTests.kt
index c3da838..ebe9ff9 100644
--- a/ui/ui-test/src/test/java/androidx/ui/test/AssertsTests.kt
+++ b/ui/ui-test/src/test/java/androidx/ui/test/AssertsTests.kt
@@ -89,35 +89,35 @@
}
@Test
- fun assertIsChecked_forCheckedElement_isOk() {
+ fun assertIsOn_forCheckedElement_isOk() {
semanticsTreeInteractionFactory = { selector ->
FakeSemanticsTreeInteraction(selector)
.withProperties(SemanticsConfiguration().also {
it.testTag = "test"
- it.toggleableState = ToggleableState.Checked
+ it.toggleableState = ToggleableState.On
})
}
findByTag("test")
- .assertIsChecked()
+ .assertIsOn()
}
@Test(expected = AssertionError::class)
- fun assertIsChecked_forUncheckedElement_throwsError() {
+ fun assertIsOn_forUncheckedElement_throwsError() {
semanticsTreeInteractionFactory = { selector ->
FakeSemanticsTreeInteraction(selector)
.withProperties(SemanticsConfiguration().also {
it.testTag = "test"
- it.toggleableState = ToggleableState.Unchecked
+ it.toggleableState = ToggleableState.Off
})
}
findByTag("test")
- .assertIsChecked()
+ .assertIsOn()
}
@Test(expected = AssertionError::class)
- fun assertIsChecked_forNotToggleableElement_throwsError() {
+ fun assertIsOn_forNotToggleableElement_throwsError() {
semanticsTreeInteractionFactory = { selector ->
FakeSemanticsTreeInteraction(selector)
.withProperties(SemanticsConfiguration().also {
@@ -126,39 +126,39 @@
}
findByTag("test")
- .assertIsChecked()
+ .assertIsOn()
}
@Test(expected = AssertionError::class)
- fun assertIsUnchecked_forCheckedElement_throwsError() {
+ fun assertIsOff_forCheckedElement_throwsError() {
semanticsTreeInteractionFactory = { selector ->
FakeSemanticsTreeInteraction(selector)
.withProperties(SemanticsConfiguration().also {
it.testTag = "test"
- it.toggleableState = ToggleableState.Checked
+ it.toggleableState = ToggleableState.On
})
}
findByTag("test")
- .assertIsUnchecked()
+ .assertIsOff()
}
@Test
- fun assertIsUnchecked_forUncheckedElement_isOk() {
+ fun assertIsOff_forUncheckedElement_isOk() {
semanticsTreeInteractionFactory = { selector ->
FakeSemanticsTreeInteraction(selector)
.withProperties(SemanticsConfiguration().also {
it.testTag = "test"
- it.toggleableState = ToggleableState.Unchecked
+ it.toggleableState = ToggleableState.Off
})
}
findByTag("test")
- .assertIsUnchecked()
+ .assertIsOff()
}
@Test(expected = AssertionError::class)
- fun assertIsUnchecked_forNotToggleableElement_throwsError() {
+ fun assertIsOff_forNotToggleableElement_throwsError() {
semanticsTreeInteractionFactory = { selector ->
FakeSemanticsTreeInteraction(selector)
.withProperties(SemanticsConfiguration().also {
@@ -167,7 +167,7 @@
}
findByTag("test")
- .assertIsUnchecked()
+ .assertIsOff()
}
@Test(expected = AssertionError::class)
diff --git a/ui/ui-text/api/0.1.0-dev03.txt b/ui/ui-text/api/0.1.0-dev03.txt
index 4150384..f6ec67a 100644
--- a/ui/ui-text/api/0.1.0-dev03.txt
+++ b/ui/ui-text/api/0.1.0-dev03.txt
@@ -1,16 +1,6 @@
// Signature format: 3.0
package androidx.ui.input {
- public final class EditorStyle {
- ctor public EditorStyle(androidx.ui.text.TextStyle? textStyle, androidx.ui.graphics.Color? selectionColor);
- ctor public EditorStyle();
- method public androidx.ui.text.TextStyle? component1();
- method public androidx.ui.graphics.Color? component2();
- method public androidx.ui.input.EditorStyle copy(androidx.ui.text.TextStyle? textStyle, androidx.ui.graphics.Color? selectionColor);
- method public androidx.ui.graphics.Color? getSelectionColor();
- method public androidx.ui.text.TextStyle? getTextStyle();
- }
-
public enum ImeAction {
enum_constant public static final androidx.ui.input.ImeAction Done;
enum_constant public static final androidx.ui.input.ImeAction Go;
@@ -358,17 +348,13 @@
package androidx.ui.text.font {
public final class Font {
- ctor public Font(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style, int ttcIndex, String fontVariationSettings);
+ ctor public Font(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style);
method public String component1();
method public androidx.ui.text.font.FontWeight component2();
method public androidx.ui.text.font.FontStyle component3();
- method public int component4();
- method public String component5();
- method public androidx.ui.text.font.Font copy(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style, int ttcIndex, String fontVariationSettings);
- method public String getFontVariationSettings();
+ method public androidx.ui.text.font.Font copy(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style);
method public String getName();
method public androidx.ui.text.font.FontStyle getStyle();
- method public int getTtcIndex();
method public androidx.ui.text.font.FontWeight getWeight();
}
diff --git a/ui/ui-text/api/current.txt b/ui/ui-text/api/current.txt
index 4150384..f6ec67a 100644
--- a/ui/ui-text/api/current.txt
+++ b/ui/ui-text/api/current.txt
@@ -1,16 +1,6 @@
// Signature format: 3.0
package androidx.ui.input {
- public final class EditorStyle {
- ctor public EditorStyle(androidx.ui.text.TextStyle? textStyle, androidx.ui.graphics.Color? selectionColor);
- ctor public EditorStyle();
- method public androidx.ui.text.TextStyle? component1();
- method public androidx.ui.graphics.Color? component2();
- method public androidx.ui.input.EditorStyle copy(androidx.ui.text.TextStyle? textStyle, androidx.ui.graphics.Color? selectionColor);
- method public androidx.ui.graphics.Color? getSelectionColor();
- method public androidx.ui.text.TextStyle? getTextStyle();
- }
-
public enum ImeAction {
enum_constant public static final androidx.ui.input.ImeAction Done;
enum_constant public static final androidx.ui.input.ImeAction Go;
@@ -358,17 +348,13 @@
package androidx.ui.text.font {
public final class Font {
- ctor public Font(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style, int ttcIndex, String fontVariationSettings);
+ ctor public Font(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style);
method public String component1();
method public androidx.ui.text.font.FontWeight component2();
method public androidx.ui.text.font.FontStyle component3();
- method public int component4();
- method public String component5();
- method public androidx.ui.text.font.Font copy(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style, int ttcIndex, String fontVariationSettings);
- method public String getFontVariationSettings();
+ method public androidx.ui.text.font.Font copy(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style);
method public String getName();
method public androidx.ui.text.font.FontStyle getStyle();
- method public int getTtcIndex();
method public androidx.ui.text.font.FontWeight getWeight();
}
diff --git a/ui/ui-text/api/public_plus_experimental_0.1.0-dev03.txt b/ui/ui-text/api/public_plus_experimental_0.1.0-dev03.txt
index 4150384..f6ec67a 100644
--- a/ui/ui-text/api/public_plus_experimental_0.1.0-dev03.txt
+++ b/ui/ui-text/api/public_plus_experimental_0.1.0-dev03.txt
@@ -1,16 +1,6 @@
// Signature format: 3.0
package androidx.ui.input {
- public final class EditorStyle {
- ctor public EditorStyle(androidx.ui.text.TextStyle? textStyle, androidx.ui.graphics.Color? selectionColor);
- ctor public EditorStyle();
- method public androidx.ui.text.TextStyle? component1();
- method public androidx.ui.graphics.Color? component2();
- method public androidx.ui.input.EditorStyle copy(androidx.ui.text.TextStyle? textStyle, androidx.ui.graphics.Color? selectionColor);
- method public androidx.ui.graphics.Color? getSelectionColor();
- method public androidx.ui.text.TextStyle? getTextStyle();
- }
-
public enum ImeAction {
enum_constant public static final androidx.ui.input.ImeAction Done;
enum_constant public static final androidx.ui.input.ImeAction Go;
@@ -358,17 +348,13 @@
package androidx.ui.text.font {
public final class Font {
- ctor public Font(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style, int ttcIndex, String fontVariationSettings);
+ ctor public Font(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style);
method public String component1();
method public androidx.ui.text.font.FontWeight component2();
method public androidx.ui.text.font.FontStyle component3();
- method public int component4();
- method public String component5();
- method public androidx.ui.text.font.Font copy(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style, int ttcIndex, String fontVariationSettings);
- method public String getFontVariationSettings();
+ method public androidx.ui.text.font.Font copy(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style);
method public String getName();
method public androidx.ui.text.font.FontStyle getStyle();
- method public int getTtcIndex();
method public androidx.ui.text.font.FontWeight getWeight();
}
diff --git a/ui/ui-text/api/public_plus_experimental_current.txt b/ui/ui-text/api/public_plus_experimental_current.txt
index 4150384..f6ec67a 100644
--- a/ui/ui-text/api/public_plus_experimental_current.txt
+++ b/ui/ui-text/api/public_plus_experimental_current.txt
@@ -1,16 +1,6 @@
// Signature format: 3.0
package androidx.ui.input {
- public final class EditorStyle {
- ctor public EditorStyle(androidx.ui.text.TextStyle? textStyle, androidx.ui.graphics.Color? selectionColor);
- ctor public EditorStyle();
- method public androidx.ui.text.TextStyle? component1();
- method public androidx.ui.graphics.Color? component2();
- method public androidx.ui.input.EditorStyle copy(androidx.ui.text.TextStyle? textStyle, androidx.ui.graphics.Color? selectionColor);
- method public androidx.ui.graphics.Color? getSelectionColor();
- method public androidx.ui.text.TextStyle? getTextStyle();
- }
-
public enum ImeAction {
enum_constant public static final androidx.ui.input.ImeAction Done;
enum_constant public static final androidx.ui.input.ImeAction Go;
@@ -358,17 +348,13 @@
package androidx.ui.text.font {
public final class Font {
- ctor public Font(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style, int ttcIndex, String fontVariationSettings);
+ ctor public Font(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style);
method public String component1();
method public androidx.ui.text.font.FontWeight component2();
method public androidx.ui.text.font.FontStyle component3();
- method public int component4();
- method public String component5();
- method public androidx.ui.text.font.Font copy(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style, int ttcIndex, String fontVariationSettings);
- method public String getFontVariationSettings();
+ method public androidx.ui.text.font.Font copy(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style);
method public String getName();
method public androidx.ui.text.font.FontStyle getStyle();
- method public int getTtcIndex();
method public androidx.ui.text.font.FontWeight getWeight();
}
diff --git a/ui/ui-text/api/restricted_0.1.0-dev03.txt b/ui/ui-text/api/restricted_0.1.0-dev03.txt
index 8899d8b..35a3089 100644
--- a/ui/ui-text/api/restricted_0.1.0-dev03.txt
+++ b/ui/ui-text/api/restricted_0.1.0-dev03.txt
@@ -8,16 +8,6 @@
- public final class EditorStyle {
- ctor public EditorStyle(androidx.ui.text.TextStyle? textStyle, androidx.ui.graphics.Color? selectionColor);
- ctor public EditorStyle();
- method public androidx.ui.text.TextStyle? component1();
- method public androidx.ui.graphics.Color? component2();
- method public androidx.ui.input.EditorStyle copy(androidx.ui.text.TextStyle? textStyle, androidx.ui.graphics.Color? selectionColor);
- method public androidx.ui.graphics.Color? getSelectionColor();
- method public androidx.ui.text.TextStyle? getTextStyle();
- }
-
public enum ImeAction {
enum_constant public static final androidx.ui.input.ImeAction Done;
@@ -386,17 +376,13 @@
package androidx.ui.text.font {
public final class Font {
- ctor public Font(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style, int ttcIndex, String fontVariationSettings);
+ ctor public Font(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style);
method public String component1();
method public androidx.ui.text.font.FontWeight component2();
method public androidx.ui.text.font.FontStyle component3();
- method public int component4();
- method public String component5();
- method public androidx.ui.text.font.Font copy(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style, int ttcIndex, String fontVariationSettings);
- method public String getFontVariationSettings();
+ method public androidx.ui.text.font.Font copy(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style);
method public String getName();
method public androidx.ui.text.font.FontStyle getStyle();
- method public int getTtcIndex();
method public androidx.ui.text.font.FontWeight getWeight();
}
diff --git a/ui/ui-text/api/restricted_current.txt b/ui/ui-text/api/restricted_current.txt
index 8899d8b..35a3089 100644
--- a/ui/ui-text/api/restricted_current.txt
+++ b/ui/ui-text/api/restricted_current.txt
@@ -8,16 +8,6 @@
- public final class EditorStyle {
- ctor public EditorStyle(androidx.ui.text.TextStyle? textStyle, androidx.ui.graphics.Color? selectionColor);
- ctor public EditorStyle();
- method public androidx.ui.text.TextStyle? component1();
- method public androidx.ui.graphics.Color? component2();
- method public androidx.ui.input.EditorStyle copy(androidx.ui.text.TextStyle? textStyle, androidx.ui.graphics.Color? selectionColor);
- method public androidx.ui.graphics.Color? getSelectionColor();
- method public androidx.ui.text.TextStyle? getTextStyle();
- }
-
public enum ImeAction {
enum_constant public static final androidx.ui.input.ImeAction Done;
@@ -386,17 +376,13 @@
package androidx.ui.text.font {
public final class Font {
- ctor public Font(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style, int ttcIndex, String fontVariationSettings);
+ ctor public Font(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style);
method public String component1();
method public androidx.ui.text.font.FontWeight component2();
method public androidx.ui.text.font.FontStyle component3();
- method public int component4();
- method public String component5();
- method public androidx.ui.text.font.Font copy(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style, int ttcIndex, String fontVariationSettings);
- method public String getFontVariationSettings();
+ method public androidx.ui.text.font.Font copy(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style);
method public String getName();
method public androidx.ui.text.font.FontStyle getStyle();
- method public int getTtcIndex();
method public androidx.ui.text.font.FontWeight getWeight();
}
diff --git a/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeInputField.kt b/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeInputField.kt
index 83cbedb..c55e8dc 100644
--- a/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeInputField.kt
+++ b/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeInputField.kt
@@ -20,7 +20,6 @@
import androidx.compose.state
import androidx.compose.unaryPlus
import androidx.ui.core.TextField
-import androidx.ui.input.EditorStyle
import androidx.ui.input.ImeAction
import androidx.ui.input.KeyboardType
import androidx.ui.layout.Column
@@ -86,6 +85,6 @@
keyboardType = keyboardType,
imeAction = imeAction,
onValueChange = { state.value = it },
- editorStyle = EditorStyle(textStyle = TextStyle(fontSize = fontSize8))
+ textStyle = TextStyle(fontSize = fontSize8)
)
}
diff --git a/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeInputFieldFocusTransition.kt b/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeInputFieldFocusTransition.kt
index b253b96..8e3ef59 100644
--- a/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeInputFieldFocusTransition.kt
+++ b/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeInputFieldFocusTransition.kt
@@ -26,7 +26,6 @@
import androidx.ui.foundation.VerticalScroller
import androidx.ui.layout.CrossAxisAlignment
import androidx.ui.graphics.Color
-import androidx.ui.input.EditorStyle
import androidx.ui.input.ImeAction
import androidx.ui.layout.Column
import androidx.ui.text.TextStyle
@@ -57,7 +56,7 @@
}
TextField(
value = state.value,
- editorStyle = EditorStyle(textStyle = TextStyle(color = color, fontSize = 32.sp)),
+ textStyle = TextStyle(color = color, fontSize = 32.sp),
onValueChange = {
state.value = it
},
diff --git a/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeInputFieldTrickyUseCase.kt b/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeInputFieldTrickyUseCase.kt
index 25a6c67..f33a865 100644
--- a/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeInputFieldTrickyUseCase.kt
+++ b/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeInputFieldTrickyUseCase.kt
@@ -24,7 +24,6 @@
import androidx.ui.layout.Column
import androidx.ui.layout.CrossAxisAlignment
import androidx.ui.foundation.VerticalScroller
-import androidx.ui.input.EditorStyle
import androidx.ui.input.KeyboardType
import androidx.ui.text.TextStyle
@@ -46,7 +45,7 @@
val state = +state { "" }
TextField(
value = state.value,
- editorStyle = EditorStyle(textStyle = TextStyle(fontSize = 32.sp)),
+ textStyle = TextStyle(fontSize = 32.sp),
onValueChange = {
if (it.all { it.isDigit() }) {
state.value = it
@@ -61,7 +60,7 @@
val state = +state { "" }
TextField(
value = state.value,
- editorStyle = EditorStyle(textStyle = TextStyle(fontSize = 32.sp)),
+ textStyle = TextStyle(fontSize = 32.sp),
onValueChange = {
state.value = it
}
diff --git a/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeVariousInputField.kt b/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeVariousInputField.kt
index 7afdd1a..763c5f4 100644
--- a/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeVariousInputField.kt
+++ b/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeVariousInputField.kt
@@ -28,7 +28,6 @@
import androidx.ui.input.VisualTransformation
import androidx.ui.core.ipx
import androidx.ui.graphics.Color
-import androidx.ui.input.EditorStyle
import androidx.ui.input.ImeAction
import androidx.ui.input.KeyboardType
import androidx.ui.layout.Column
@@ -254,7 +253,7 @@
imeAction = imeAction,
visualTransformation = visualTransformation,
onValueChange = { state.value = onValueChange(state.value, it) },
- editorStyle = EditorStyle(textStyle = TextStyle(fontSize = fontSize8))
+ textStyle = TextStyle(fontSize = fontSize8)
)
}
@@ -266,7 +265,7 @@
TextField(
value = state.value,
onValueChange = { state.value = it },
- editorStyle = EditorStyle(textStyle = TextStyle(fontSize = fontSize8))
+ textStyle = TextStyle(fontSize = fontSize8)
)
}
diff --git a/ui/ui-text/src/androidTest/java/androidx/ui/text/ParagraphIntegrationTest.kt b/ui/ui-text/src/androidTest/java/androidx/ui/text/ParagraphIntegrationTest.kt
index bb3f6c6..ba93ad2 100644
--- a/ui/ui-text/src/androidTest/java/androidx/ui/text/ParagraphIntegrationTest.kt
+++ b/ui/ui-text/src/androidTest/java/androidx/ui/text/ParagraphIntegrationTest.kt
@@ -430,7 +430,6 @@
}
}
- // TODO(qqd) on API 23 this test causes test to be blocked and wait indefinitely. Please fix.
@Suppress
@Test(expected = java.lang.IndexOutOfBoundsException::class)
fun getBoundingBox_ltr_textPosition_larger_than_length_throw_exception() {
diff --git a/ui/ui-text/src/androidTest/java/androidx/ui/text/TextDelegateIntegrationTest.kt b/ui/ui-text/src/androidTest/java/androidx/ui/text/TextDelegateIntegrationTest.kt
index 9cc88a5..0999217 100644
--- a/ui/ui-text/src/androidTest/java/androidx/ui/text/TextDelegateIntegrationTest.kt
+++ b/ui/ui-text/src/androidTest/java/androidx/ui/text/TextDelegateIntegrationTest.kt
@@ -51,18 +51,6 @@
private val context = InstrumentationRegistry.getInstrumentation().context
private val resourceLoader = TestFontResourceLoader(context)
- // TODO(qqd): The default font size should be 14.0 but it returns 15.0. Need further
- // investigation. It is being changed in the native level, and probably related to the font.
-// @Test
-// fun preferredLineHeight_style_not_set() {
-// val defaultTextStyle = TextStyle(fontFamily = fontFamily)
-// val textDelegate = TextDelegate(style = defaultTextStyle)
-//
-// val prefferedHeight = textDelegate.preferredLineHeight
-//
-// assertThat(prefferedHeight).isEqualTo(14.0)
-// }
-
@Test
fun minIntrinsicWidth_getter() {
withDensity(density) {
diff --git a/ui/ui-text/src/androidTest/java/androidx/ui/text/TextTestExtensions.kt b/ui/ui-text/src/androidTest/java/androidx/ui/text/TextTestExtensions.kt
index 9d7cb89..d338f8d 100644
--- a/ui/ui-text/src/androidTest/java/androidx/ui/text/TextTestExtensions.kt
+++ b/ui/ui-text/src/androidTest/java/androidx/ui/text/TextTestExtensions.kt
@@ -23,7 +23,6 @@
import androidx.ui.text.font.Font
import kotlin.math.ceil
-// TODO(siyamed): This should return platform independent bitmap but we dont have it yet
fun Paragraph.bitmap(): Bitmap {
val bitmap = Bitmap.createBitmap(
ceil(this.width).toInt(),
diff --git a/ui/ui-text/src/androidTest/java/androidx/ui/text/platform/TypefaceAdapterTest.kt b/ui/ui-text/src/androidTest/java/androidx/ui/text/platform/TypefaceAdapterTest.kt
index 7a4a377..1dff233 100644
--- a/ui/ui-text/src/androidTest/java/androidx/ui/text/platform/TypefaceAdapterTest.kt
+++ b/ui/ui-text/src/androidTest/java/androidx/ui/text/platform/TypefaceAdapterTest.kt
@@ -61,8 +61,6 @@
@RunWith(MockitoJUnitRunner::class)
@SmallTest
class TypefaceAdapterTest {
- // TODO(siyamed): These native calls should be removed after the
- // counterparts are implemented in compose.
private val context = InstrumentationRegistry.getInstrumentation().context
private val resourceLoader = TestFontResourceLoader(context)
diff --git a/ui/ui-text/src/main/java/androidx/ui/text/MultiParagraph.kt b/ui/ui-text/src/main/java/androidx/ui/text/MultiParagraph.kt
index dce606d..8ed2029 100644
--- a/ui/ui-text/src/main/java/androidx/ui/text/MultiParagraph.kt
+++ b/ui/ui-text/src/main/java/androidx/ui/text/MultiParagraph.kt
@@ -177,8 +177,6 @@
paragraphInfo.bottom = (currentHeight + paragraph.height).px
currentHeight += paragraph.height
- // TODO(haoyuchang): solve the corner case where the ellipsis won't be applied when
- // currentLineNum == maxLines but there are still more paragraphs
if (paragraph.didExceedMaxLines ||
(currentLineCount == maxLines && index != this.paragraphInfoList.lastIndex)
) {
diff --git a/ui/ui-text/src/main/java/androidx/ui/text/TextBox.kt b/ui/ui-text/src/main/java/androidx/ui/text/TextBox.kt
deleted file mode 100644
index 83a427b..0000000
--- a/ui/ui-text/src/main/java/androidx/ui/text/TextBox.kt
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package androidx.ui.text
-
-import androidx.ui.engine.geometry.Rect
-import androidx.ui.text.style.TextDirection
-import androidx.ui.toStringAsFixed
-
-/**
- * A rectangle enclosing a run of text.
- *
- * This is similar to [Rect] but includes an inherent [TextDirection].
- */
-internal data class TextBox(
- /**
- * The left edge of the text box, irrespective of direction.
- * To get the leading edge (which may depend on the [direction]), consider [start].
- */
- val left: Float,
- /** The top edge of the text box. */
- val top: Float,
- /**
- * The right edge of the text box, irrespective of direction.
- * To get the trailing edge (which may depend on the [direction]), consider [end].
- */
- val right: Float,
- /** The bottom edge of the text box. */
- val bottom: Float,
- /** The direction in which text inside this box flows. */
- val direction: TextDirection
-) {
-
- /** Returns a rect of the same size as this box. */
- fun toRect(): Rect {
- return Rect.fromLTRB(left, top, right, bottom)
- }
-
- /**
- * The [left] edge of the box for left-to-right text; the [right] edge of the box for
- * right-to-left text.
- * See also:
- * * [direction], which specifies the text direction.
- */
- fun start(): Float {
- return if ((direction == TextDirection.Ltr)) left else right
- }
-
- /**
- * The [right] edge of the box for left-to-right text; the [left] edge of the box for
- * right-to-left text.
- * See also:
- * * [direction], which specifies the text direction.
- */
- fun end(): Float {
- return if ((direction == TextDirection.Ltr)) right else left
- }
-
- override fun toString(): String {
- return "TextBox.fromLTRBD(${left.toStringAsFixed(1)}, ${top.toStringAsFixed(1)}, " +
- "${right.toStringAsFixed(1)}, ${bottom.toStringAsFixed(1)}, $direction)"
- }
-
- companion object {
- fun fromLTRBD(
- left: Float,
- top: Float,
- right: Float,
- bottom: Float,
- direction: TextDirection
- ): TextBox {
- return TextBox(left, top, right, bottom, direction)
- }
- }
-}
diff --git a/ui/ui-text/src/main/java/androidx/ui/text/TextDelegate.kt b/ui/ui-text/src/main/java/androidx/ui/text/TextDelegate.kt
index 36420a4..ad41e95 100644
--- a/ui/ui-text/src/main/java/androidx/ui/text/TextDelegate.kt
+++ b/ui/ui-text/src/main/java/androidx/ui/text/TextDelegate.kt
@@ -281,8 +281,6 @@
}
fun layout(constraints: Constraints) {
- // TODO(haoyuchang): fix that when softWarp is false and overflow is Ellipsis, ellipsis
- // doesn't work.
val minWidth = constraints.minWidth.value.toFloat()
val widthMatters = softWrap || overflow == TextOverflow.Ellipsis
val maxWidth = if (widthMatters) {
@@ -382,7 +380,6 @@
) = assumeLayout { layoutResult ->
if (start == end) return
val selectionPath = layoutResult.multiParagraph.getPathForRange(start, end)
- // TODO(haoyuchang): check if move this paint to parameter is better
canvas.drawPath(selectionPath, Paint().apply { this.color = color })
}
diff --git a/ui/ui-text/src/main/java/androidx/ui/text/TextStyle.kt b/ui/ui-text/src/main/java/androidx/ui/text/TextStyle.kt
index 01f24a8..7b36cb9 100644
--- a/ui/ui-text/src/main/java/androidx/ui/text/TextStyle.kt
+++ b/ui/ui-text/src/main/java/androidx/ui/text/TextStyle.kt
@@ -156,8 +156,6 @@
* between [start] and [stop]. The interpolation can be extrapolated beyond 0.0 and
* 1.0, so negative values and values greater than 1.0 are valid.
*/
-// TODO(siyamed): This should not accept nullable values
-// TODO(siyamed): This should be in the file level, not a companon function
fun lerp(start: TextStyle? = null, stop: TextStyle? = null, fraction: Float): TextStyle? {
val aIsNull = start == null
val bIsNull = stop == null
diff --git a/ui/ui-text/src/main/java/androidx/ui/text/font/Font.kt b/ui/ui-text/src/main/java/androidx/ui/text/font/Font.kt
index a9aafdf..074121f 100644
--- a/ui/ui-text/src/main/java/androidx/ui/text/font/Font.kt
+++ b/ui/ui-text/src/main/java/androidx/ui/text/font/Font.kt
@@ -16,8 +16,6 @@
package androidx.ui.text.font
-// TODO(siyamed): might need nullable defaults for FontWeight and FontStyle which
-// would mean read the weight and style from the font.
/**
* Defines a font to be used while rendering text.
*
@@ -28,32 +26,13 @@
* that is given in a `TextStyle`.
* @param style The style of the font, normal or italic. The system uses this to match a font to a
* font request that is given in a `TextStyle`.
- * @param ttcIndex The index of the font collection. If the font file is not a font collection the
- * value should not be changed
- * @param fontVariationSettings The TrueType or OpenType font variation settings. Valid only when
- * the font that is used is a variable font. The settings string is constructed from multiple
- * pairs of axis tag and style values. The axis tag must contain four ASCII characters and must
- * be wrapped with single quotes (U+0027) or double quotes (U+0022). Axis strings that are longer
- * or shorter than four characters, or contain characters outside of U+0020..U+007E are invalid.
- * If a specified axis name is not defined in the font, the settings will be ignored.
- * Examples: to set font width to 150: "'wdth' 150", to set the font slant to 20 degrees and ask
- * for italic style: "'slnt' 20, 'ital' 1".
*
* @see [FontFamily]
*/
data class Font(
val name: String,
val weight: FontWeight = FontWeight.Normal,
- val style: FontStyle = FontStyle.Normal,
- // TODO(siyamed): implement integration and add tests
- val ttcIndex: Int = 0,
- // TODO(siyamed): implement integration and add tests
- // https://docs.microsoft.com/en-us/typography/opentype/spec/otvaroverview
- // not sure if this would be here or in the composable properties similar to TextStyle.fontWeight
- // CSS says: "These descriptors define initial settings that apply when the font defined by an
- // @font-face rule is rendered. They do not affect font selection"
- // https://www.w3.org/TR/css-fonts-4/#ref-for-descdef-font-face-font-variation-settings
- val fontVariationSettings: String = ""
+ val style: FontStyle = FontStyle.Normal
) {
init {
assert(name.isNotEmpty()) { "Font name cannot be empty" }
@@ -69,7 +48,6 @@
* @param font [Font] to be loaded
* @return platform specific font
*/
- // TODO(siyamed) when expect/actual is enabled return a typealias
fun load(font: Font): Any
}
}
diff --git a/ui/ui-text/src/main/java/androidx/ui/text/font/FontWeight.kt b/ui/ui-text/src/main/java/androidx/ui/text/font/FontWeight.kt
index 7c06de5..c2e9a2d 100644
--- a/ui/ui-text/src/main/java/androidx/ui/text/font/FontWeight.kt
+++ b/ui/ui-text/src/main/java/androidx/ui/text/font/FontWeight.kt
@@ -30,8 +30,6 @@
internal val weight: Int
) : Comparable<FontWeight> {
- // TODO(siyamed): This is weird since it should actually be possible to create a font
- // weight that is not one of the items here. This decision changes the lerp behavior.
companion object {
/** Thin, the minimum thickness */
val W100 = FontWeight(100)
@@ -110,8 +108,6 @@
* Values for [fraction] are usually obtained from an [Animation<Float>], such as
* an `AnimationController`.
*/
-// TODO(siyamed): These should not accept nullable arguments
-// TODO(siyamed): This should be in the file, not a Companion function
fun lerp(start: FontWeight?, stop: FontWeight?, fraction: Float): FontWeight {
val index = lerp(
start?.index ?: FontWeight.Normal.index,
diff --git a/ui/ui-text/src/main/java/androidx/ui/text/platform/AndroidParagraph.kt b/ui/ui-text/src/main/java/androidx/ui/text/platform/AndroidParagraph.kt
index 1363054..bacff45 100644
--- a/ui/ui-text/src/main/java/androidx/ui/text/platform/AndroidParagraph.kt
+++ b/ui/ui-text/src/main/java/androidx/ui/text/platform/AndroidParagraph.kt
@@ -122,7 +122,6 @@
override val height: Float
get() = layout.let {
- // TODO(haoyuchang): Figure out a way to add bottomPadding properly
val lineCount = it.lineCount
if (maxLines != null &&
maxLines >= 0 &&
diff --git a/ui/ui-text/src/main/java/androidx/ui/text/platform/AndroidParagraphHelper.kt b/ui/ui-text/src/main/java/androidx/ui/text/platform/AndroidParagraphHelper.kt
index 9bf20d7..43dbf60 100644
--- a/ui/ui-text/src/main/java/androidx/ui/text/platform/AndroidParagraphHelper.kt
+++ b/ui/ui-text/src/main/java/androidx/ui/text/platform/AndroidParagraphHelper.kt
@@ -76,9 +76,6 @@
textSize *= it
}
- // TODO(siyamed): This default values are problem here. If the user just gives a single font
- // in the family, and does not provide any fontWeight, TypefaceAdapter will still get the
- // call as FontWeight.normal (which is the default value)
if (style.hasFontAttributes()) {
typeface = createTypeface(style, typefaceAdapter)
}
diff --git a/ui/ui-text/src/main/java/androidx/ui/text/platform/TypefaceAdapter.kt b/ui/ui-text/src/main/java/androidx/ui/text/platform/TypefaceAdapter.kt
index 098a8ca..1d200cb 100644
--- a/ui/ui-text/src/main/java/androidx/ui/text/platform/TypefaceAdapter.kt
+++ b/ui/ui-text/src/main/java/androidx/ui/text/platform/TypefaceAdapter.kt
@@ -34,13 +34,10 @@
*
* @param resourceLoader [Font.ResourceLoader] for Android.
*/
-// TODO(siyamed): font matcher should be at an upper layer such as Paragraph, whoever
-// will call TypefaceAdapter can know about a single font
internal open class TypefaceAdapter(
val fontMatcher: FontMatcher = FontMatcher(),
val resourceLoader: Font.ResourceLoader
) {
-
data class CacheKey(
val fontFamily: FontFamily? = null,
val fontWeight: FontWeight,
@@ -122,9 +119,7 @@
return Typeface.DEFAULT
}
- // TODO(siyamed): ideally we should not have platform dependent if's here.
- // will think more and move to ui-text later.
- val result = if (Build.VERSION.SDK_INT < 28) {
+ return if (Build.VERSION.SDK_INT < 28) {
val targetStyle = getTypefaceStyle(fontWeight, fontStyle)
if (genericFontFamily.isNullOrEmpty()) {
Typeface.defaultFromStyle(targetStyle)
@@ -132,11 +127,10 @@
Typeface.create(genericFontFamily, targetStyle)
}
} else {
- val familyTypeface: Typeface
- if (genericFontFamily == null) {
- familyTypeface = Typeface.DEFAULT
+ val familyTypeface = if (genericFontFamily == null) {
+ Typeface.DEFAULT
} else {
- familyTypeface = Typeface.create(genericFontFamily, Typeface.NORMAL)
+ Typeface.create(genericFontFamily, Typeface.NORMAL)
}
Typeface.create(
@@ -145,8 +139,6 @@
fontStyle == FontStyle.Italic
)
}
-
- return result
}
/**
@@ -167,9 +159,6 @@
fontFamily: FontFamily,
fontSynthesis: FontSynthesis = FontSynthesis.All
): Typeface {
- // TODO(siyamed): add genericFontFamily : String? = null for fallback
- // TODO(siyamed): add support for multiple font families
-
val font = fontMatcher.matchFont(fontFamily, fontWeight, fontStyle)
val typeface = try {
@@ -187,7 +176,7 @@
return synthesize(typeface, font, fontWeight, fontStyle, fontSynthesis)
}
- fun synthesize(
+ private fun synthesize(
typeface: Typeface,
font: Font,
fontWeight: FontWeight,
@@ -238,7 +227,7 @@
return getTypefaceStyle(fontWeight >= ANDROID_BOLD, fontStyle == FontStyle.Italic)
}
- fun getTypefaceStyle(isBold: Boolean, isItalic: Boolean): Int {
+ private fun getTypefaceStyle(isBold: Boolean, isItalic: Boolean): Int {
return if (isItalic && isBold) {
Typeface.BOLD_ITALIC
} else if (isBold) {
diff --git a/ui/ui-text/src/main/java/androidx/ui/text/style/BaselineShift.kt b/ui/ui-text/src/main/java/androidx/ui/text/style/BaselineShift.kt
index 867dd28..a35aee7 100644
--- a/ui/ui-text/src/main/java/androidx/ui/text/style/BaselineShift.kt
+++ b/ui/ui-text/src/main/java/androidx/ui/text/style/BaselineShift.kt
@@ -45,7 +45,6 @@
/**
* Linearly interpolate two [BaselineShift]s.
*/
-// TODO(haoyuchang): This should not accept nullables
fun lerp(start: BaselineShift?, stop: BaselineShift?, fraction: Float): BaselineShift? {
if (start == null && stop == null) {
return null
diff --git a/ui/ui-text/src/test/java/androidx/ui/text/TextBoxTest.kt b/ui/ui-text/src/test/java/androidx/ui/text/TextBoxTest.kt
deleted file mode 100644
index 299dc9b..0000000
--- a/ui/ui-text/src/test/java/androidx/ui/text/TextBoxTest.kt
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package androidx.ui.text
-
-import androidx.ui.engine.geometry.Rect
-import androidx.ui.text.style.TextDirection
-import com.google.common.truth.Truth.assertThat
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.JUnit4
-
-@RunWith(JUnit4::class)
-class TextBoxTest {
-
- @Test
- fun `toRect`() {
- val textBox = TextBox(
- 1.0f,
- 2.0f,
- 3.0f,
- 4.0f,
- TextDirection.Ltr
- )
- assertThat(textBox.toRect()).isEqualTo(Rect.fromLTRB(1.0f, 2.0f, 3.0f, 4.0f))
- }
-
- @Test
- fun `start for LTR`() {
- val textBox = TextBox(
- 1.0f,
- 2.0f,
- 3.0f,
- 4.0f,
- TextDirection.Ltr
- )
- assertThat(textBox.start()).isEqualTo(1.0f)
- }
-
- @Test
- fun `start for RTL`() {
- val textBox = TextBox(
- 1.0f,
- 2.0f,
- 3.0f,
- 4.0f,
- TextDirection.Rtl
- )
- assertThat(textBox.start()).isEqualTo(3.0f)
- }
-
- @Test
- fun `end for LTR`() {
- val textBox = TextBox(
- 1.0f,
- 2.0f,
- 3.0f,
- 4.0f,
- TextDirection.Ltr
- )
- assertThat(textBox.end()).isEqualTo(3.0f)
- }
-
- @Test
- fun `end for RTL`() {
- val textBox = TextBox(
- 1.0f,
- 2.0f,
- 3.0f,
- 4.0f,
- TextDirection.Rtl
- )
- assertThat(textBox.end()).isEqualTo(1.0f)
- }
-
- @Test
- fun `fromLTRBD`() {
- val textBox = TextBox.fromLTRBD(
- 1.0f,
- 2.0f,
- 3.0f,
- 4.0f,
- TextDirection.Ltr
- )
- assertThat(textBox.toRect()).isEqualTo(Rect.fromLTRB(1.0f, 2.0f, 3.0f, 4.0f))
- assertThat(textBox.direction).isEqualTo(TextDirection.Ltr)
- }
-
- @Test
- fun `toString `() {
- val textBox = TextBox(
- 1.0f,
- 2.0f,
- 3.0f,
- 4.0f,
- TextDirection.Ltr
- )
- assertThat(textBox.toString())
- .isEqualTo("TextBox.fromLTRBD(1.0, 2.0, 3.0, 4.0, ${TextDirection.Ltr})")
- }
-}
\ No newline at end of file
diff --git a/ui/ui-text/src/test/java/androidx/ui/text/font/FontFamilyTest.kt b/ui/ui-text/src/test/java/androidx/ui/text/font/FontFamilyTest.kt
index 09dd17d..6455cd0 100644
--- a/ui/ui-text/src/test/java/androidx/ui/text/font/FontFamilyTest.kt
+++ b/ui/ui-text/src/test/java/androidx/ui/text/font/FontFamilyTest.kt
@@ -34,9 +34,7 @@
Font(
name = "fontName",
weight = FontWeight.W900,
- style = FontStyle.Italic,
- ttcIndex = 1,
- fontVariationSettings = "'wdth' 150"
+ style = FontStyle.Italic
)
)
@@ -44,9 +42,7 @@
Font(
name = "fontName",
weight = FontWeight.W900,
- style = FontStyle.Italic,
- ttcIndex = 1,
- fontVariationSettings = "'wdth' 150"
+ style = FontStyle.Italic
)
)
@@ -59,19 +55,15 @@
Font(
name = "fontName",
weight = FontWeight.W900,
- style = FontStyle.Italic,
- ttcIndex = 1,
- fontVariationSettings = "'wdth' 150"
+ style = FontStyle.Italic
)
)
val otherFontFamily = FontFamily(
Font(
name = "fontName",
- weight = FontWeight.W900,
- style = FontStyle.Italic,
- ttcIndex = 1,
- fontVariationSettings = "'wdth' 151" // this is different
+ weight = FontWeight.W800,
+ style = FontStyle.Italic
)
)
diff --git a/ui/ui-text/src/test/java/androidx/ui/text/font/FontTest.kt b/ui/ui-text/src/test/java/androidx/ui/text/font/FontTest.kt
index 9070fcc..427f853 100644
--- a/ui/ui-text/src/test/java/androidx/ui/text/font/FontTest.kt
+++ b/ui/ui-text/src/test/java/androidx/ui/text/font/FontTest.kt
@@ -33,8 +33,6 @@
val font = Font(name = "fontName")
assertThat(font.weight).isEqualTo(FontWeight.Normal)
assertThat(font.style).isEqualTo(FontStyle.Normal)
- assertThat(font.ttcIndex).isEqualTo(0)
- assertThat(font.fontVariationSettings).isEmpty()
}
@Test
@@ -42,17 +40,13 @@
val font = Font(
name = "fontName",
weight = FontWeight.W900,
- style = FontStyle.Italic,
- ttcIndex = 1,
- fontVariationSettings = "'wdth' 150"
+ style = FontStyle.Italic
)
val otherFont = Font(
name = "fontName",
weight = FontWeight.W900,
- style = FontStyle.Italic,
- ttcIndex = 1,
- fontVariationSettings = "'wdth' 150"
+ style = FontStyle.Italic
)
assertThat(font).isEqualTo(otherFont)
@@ -63,17 +57,13 @@
val font = Font(
name = "fontName",
weight = FontWeight.W900,
- style = FontStyle.Italic,
- ttcIndex = 1,
- fontVariationSettings = "'wdth' 150"
+ style = FontStyle.Italic
)
val otherFont = Font(
name = "fontName",
- weight = FontWeight.W900,
- style = FontStyle.Italic,
- ttcIndex = 1,
- fontVariationSettings = "'wdth' 151" // this is different
+ weight = FontWeight.W800,
+ style = FontStyle.Italic
)
assertThat(font).isNotEqualTo(otherFont)
diff --git a/ui/ui-tooling/src/main/java/androidx/ui/tooling/preview/LayoutlibFontResourceLoader.kt b/ui/ui-tooling/src/main/java/androidx/ui/tooling/preview/LayoutlibFontResourceLoader.kt
index 9bda79f..0b2c5f9 100644
--- a/ui/ui-tooling/src/main/java/androidx/ui/tooling/preview/LayoutlibFontResourceLoader.kt
+++ b/ui/ui-tooling/src/main/java/androidx/ui/tooling/preview/LayoutlibFontResourceLoader.kt
@@ -32,8 +32,6 @@
internal class LayoutlibFontResourceLoader(private val context: Context) : Font.ResourceLoader {
@RequiresApi(Build.VERSION_CODES.O)
override fun load(font: Font): Typeface {
- // TODO(siyamed): This is an expensive operation and discouraged in the API Docs
- // remove when alternative resource loading system is defined.
val resId = context.resources.getIdentifier(
font.name.substringBefore("."),
"font",
diff --git a/work/workmanager-ktx/api/2.3.0-alpha02.ignore b/work/workmanager-ktx/api/2.3.0-alpha02.ignore
new file mode 100644
index 0000000..8aff62a
--- /dev/null
+++ b/work/workmanager-ktx/api/2.3.0-alpha02.ignore
@@ -0,0 +1,3 @@
+// Baseline format: 1.0
+RemovedClass: androidx.work.ListenableFutureKt:
+ Removed class androidx.work.ListenableFutureKt
diff --git a/work/workmanager-ktx/api/2.3.0-alpha02.txt b/work/workmanager-ktx/api/2.3.0-alpha02.txt
index 5873b39..b875ebc 100644
--- a/work/workmanager-ktx/api/2.3.0-alpha02.txt
+++ b/work/workmanager-ktx/api/2.3.0-alpha02.txt
@@ -18,10 +18,6 @@
method public static inline androidx.work.Data workDataOf(kotlin.Pair<java.lang.String,?>... pairs);
}
- public final class ListenableFutureKt {
- ctor public ListenableFutureKt();
- }
-
public final class OneTimeWorkRequestKt {
ctor public OneTimeWorkRequestKt();
method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.OneTimeWorkRequest.Builder OneTimeWorkRequestBuilder();
diff --git a/work/workmanager-ktx/api/2.3.0-alpha04.ignore b/work/workmanager-ktx/api/2.3.0-alpha04.ignore
new file mode 100644
index 0000000..8aff62a
--- /dev/null
+++ b/work/workmanager-ktx/api/2.3.0-alpha04.ignore
@@ -0,0 +1,3 @@
+// Baseline format: 1.0
+RemovedClass: androidx.work.ListenableFutureKt:
+ Removed class androidx.work.ListenableFutureKt
diff --git a/work/workmanager-ktx/api/2.3.0-alpha04.txt b/work/workmanager-ktx/api/2.3.0-alpha04.txt
index 5873b39..b875ebc 100644
--- a/work/workmanager-ktx/api/2.3.0-alpha04.txt
+++ b/work/workmanager-ktx/api/2.3.0-alpha04.txt
@@ -18,10 +18,6 @@
method public static inline androidx.work.Data workDataOf(kotlin.Pair<java.lang.String,?>... pairs);
}
- public final class ListenableFutureKt {
- ctor public ListenableFutureKt();
- }
-
public final class OneTimeWorkRequestKt {
ctor public OneTimeWorkRequestKt();
method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.OneTimeWorkRequest.Builder OneTimeWorkRequestBuilder();
diff --git a/work/workmanager-ktx/api/current.txt b/work/workmanager-ktx/api/current.txt
index 5873b39..b875ebc 100644
--- a/work/workmanager-ktx/api/current.txt
+++ b/work/workmanager-ktx/api/current.txt
@@ -18,10 +18,6 @@
method public static inline androidx.work.Data workDataOf(kotlin.Pair<java.lang.String,?>... pairs);
}
- public final class ListenableFutureKt {
- ctor public ListenableFutureKt();
- }
-
public final class OneTimeWorkRequestKt {
ctor public OneTimeWorkRequestKt();
method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.OneTimeWorkRequest.Builder OneTimeWorkRequestBuilder();
diff --git a/work/workmanager-ktx/api/public_plus_experimental_2.3.0-alpha02.txt b/work/workmanager-ktx/api/public_plus_experimental_2.3.0-alpha02.txt
index 5873b39..b875ebc 100644
--- a/work/workmanager-ktx/api/public_plus_experimental_2.3.0-alpha02.txt
+++ b/work/workmanager-ktx/api/public_plus_experimental_2.3.0-alpha02.txt
@@ -18,10 +18,6 @@
method public static inline androidx.work.Data workDataOf(kotlin.Pair<java.lang.String,?>... pairs);
}
- public final class ListenableFutureKt {
- ctor public ListenableFutureKt();
- }
-
public final class OneTimeWorkRequestKt {
ctor public OneTimeWorkRequestKt();
method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.OneTimeWorkRequest.Builder OneTimeWorkRequestBuilder();
diff --git a/work/workmanager-ktx/api/public_plus_experimental_2.3.0-alpha04.txt b/work/workmanager-ktx/api/public_plus_experimental_2.3.0-alpha04.txt
index 5873b39..b875ebc 100644
--- a/work/workmanager-ktx/api/public_plus_experimental_2.3.0-alpha04.txt
+++ b/work/workmanager-ktx/api/public_plus_experimental_2.3.0-alpha04.txt
@@ -18,10 +18,6 @@
method public static inline androidx.work.Data workDataOf(kotlin.Pair<java.lang.String,?>... pairs);
}
- public final class ListenableFutureKt {
- ctor public ListenableFutureKt();
- }
-
public final class OneTimeWorkRequestKt {
ctor public OneTimeWorkRequestKt();
method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.OneTimeWorkRequest.Builder OneTimeWorkRequestBuilder();
diff --git a/work/workmanager-ktx/api/public_plus_experimental_current.txt b/work/workmanager-ktx/api/public_plus_experimental_current.txt
index 5873b39..b875ebc 100644
--- a/work/workmanager-ktx/api/public_plus_experimental_current.txt
+++ b/work/workmanager-ktx/api/public_plus_experimental_current.txt
@@ -18,10 +18,6 @@
method public static inline androidx.work.Data workDataOf(kotlin.Pair<java.lang.String,?>... pairs);
}
- public final class ListenableFutureKt {
- ctor public ListenableFutureKt();
- }
-
public final class OneTimeWorkRequestKt {
ctor public OneTimeWorkRequestKt();
method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.OneTimeWorkRequest.Builder OneTimeWorkRequestBuilder();
diff --git a/work/workmanager-ktx/api/restricted_2.3.0-alpha02.ignore b/work/workmanager-ktx/api/restricted_2.3.0-alpha02.ignore
new file mode 100644
index 0000000..8aff62a
--- /dev/null
+++ b/work/workmanager-ktx/api/restricted_2.3.0-alpha02.ignore
@@ -0,0 +1,3 @@
+// Baseline format: 1.0
+RemovedClass: androidx.work.ListenableFutureKt:
+ Removed class androidx.work.ListenableFutureKt
diff --git a/work/workmanager-ktx/api/restricted_2.3.0-alpha02.txt b/work/workmanager-ktx/api/restricted_2.3.0-alpha02.txt
index 075851a..1cff0b6 100644
--- a/work/workmanager-ktx/api/restricted_2.3.0-alpha02.txt
+++ b/work/workmanager-ktx/api/restricted_2.3.0-alpha02.txt
@@ -23,11 +23,6 @@
enum_constant public static final androidx.work.DirectExecutor INSTANCE;
}
- public final class ListenableFutureKt {
- ctor public ListenableFutureKt();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static suspend inline <R> Object! await(com.google.common.util.concurrent.ListenableFuture<R>, kotlin.coroutines.Continuation<? super R> p);
- }
-
public final class OneTimeWorkRequestKt {
ctor public OneTimeWorkRequestKt();
method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.OneTimeWorkRequest.Builder OneTimeWorkRequestBuilder();
diff --git a/work/workmanager-ktx/api/restricted_2.3.0-alpha04.ignore b/work/workmanager-ktx/api/restricted_2.3.0-alpha04.ignore
new file mode 100644
index 0000000..8aff62a
--- /dev/null
+++ b/work/workmanager-ktx/api/restricted_2.3.0-alpha04.ignore
@@ -0,0 +1,3 @@
+// Baseline format: 1.0
+RemovedClass: androidx.work.ListenableFutureKt:
+ Removed class androidx.work.ListenableFutureKt
diff --git a/work/workmanager-ktx/api/restricted_2.3.0-alpha04.txt b/work/workmanager-ktx/api/restricted_2.3.0-alpha04.txt
index 075851a..1cff0b6 100644
--- a/work/workmanager-ktx/api/restricted_2.3.0-alpha04.txt
+++ b/work/workmanager-ktx/api/restricted_2.3.0-alpha04.txt
@@ -23,11 +23,6 @@
enum_constant public static final androidx.work.DirectExecutor INSTANCE;
}
- public final class ListenableFutureKt {
- ctor public ListenableFutureKt();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static suspend inline <R> Object! await(com.google.common.util.concurrent.ListenableFuture<R>, kotlin.coroutines.Continuation<? super R> p);
- }
-
public final class OneTimeWorkRequestKt {
ctor public OneTimeWorkRequestKt();
method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.OneTimeWorkRequest.Builder OneTimeWorkRequestBuilder();
diff --git a/work/workmanager-ktx/api/restricted_current.txt b/work/workmanager-ktx/api/restricted_current.txt
index 075851a..1cff0b6 100644
--- a/work/workmanager-ktx/api/restricted_current.txt
+++ b/work/workmanager-ktx/api/restricted_current.txt
@@ -23,11 +23,6 @@
enum_constant public static final androidx.work.DirectExecutor INSTANCE;
}
- public final class ListenableFutureKt {
- ctor public ListenableFutureKt();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static suspend inline <R> Object! await(com.google.common.util.concurrent.ListenableFuture<R>, kotlin.coroutines.Continuation<? super R> p);
- }
-
public final class OneTimeWorkRequestKt {
ctor public OneTimeWorkRequestKt();
method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.OneTimeWorkRequest.Builder OneTimeWorkRequestBuilder();
diff --git a/work/workmanager-ktx/build.gradle b/work/workmanager-ktx/build.gradle
index 2a279bb..6b74ce6 100644
--- a/work/workmanager-ktx/build.gradle
+++ b/work/workmanager-ktx/build.gradle
@@ -45,8 +45,8 @@
api project(':work:work-runtime')
api(KOTLIN_STDLIB)
api(KOTLIN_COROUTINES_ANDROID)
+ implementation project(':concurrent:concurrent-futures-ktx')
- androidTestImplementation("androidx.concurrent:concurrent-futures:1.0.0")
androidTestImplementation(ANDROIDX_TEST_EXT_JUNIT)
androidTestImplementation(ANDROIDX_TEST_CORE)
androidTestImplementation(ANDROIDX_TEST_RUNNER)
diff --git a/work/workmanager-ktx/src/androidTest/java/androidx/work/ListenableFutureTest.kt b/work/workmanager-ktx/src/androidTest/java/androidx/work/ListenableFutureTest.kt
deleted file mode 100644
index 1f87734..0000000
--- a/work/workmanager-ktx/src/androidTest/java/androidx/work/ListenableFutureTest.kt
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright 2018 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.work
-
-import androidx.concurrent.futures.ResolvableFuture
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import androidx.test.filters.SmallTest
-import kotlinx.coroutines.GlobalScope
-import kotlinx.coroutines.launch
-import kotlinx.coroutines.runBlocking
-import org.hamcrest.CoreMatchers.`is`
-import org.hamcrest.CoreMatchers.instanceOf
-import org.hamcrest.MatcherAssert.assertThat
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@RunWith(AndroidJUnit4::class)
-@SmallTest
-class ListenableFutureTest {
- @Test
- fun testFutureWithResult() {
- val future: ResolvableFuture<Int> = ResolvableFuture.create()
- val job = GlobalScope.launch {
- val result = future.await()
- assertThat(result, `is`(10))
- }
- future.set(10)
- runBlocking {
- job.join()
- }
- }
- @Test
- fun testFutureWithException() {
- val future: ResolvableFuture<Int> = ResolvableFuture.create()
- val exception = RuntimeException("Something bad happened")
- val job = GlobalScope.launch {
- try {
- future.await()
- } catch (throwable: Throwable) {
- assertThat(throwable, `is`(instanceOf(RuntimeException::class.java)))
- assertThat(throwable.message, `is`(exception.message))
- }
- }
- future.setException(exception)
- runBlocking {
- job.join()
- }
- }
- @Test
- fun testFutureCancellation() {
- val future: ResolvableFuture<Int> = ResolvableFuture.create()
- val job = GlobalScope.launch {
- future.await()
- }
- future.cancel(true)
- runBlocking {
- job.join()
- assertThat(job.isCancelled, `is`(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..e15192f 100644
--- a/work/workmanager-ktx/src/main/java/androidx/work/CoroutineWorker.kt
+++ b/work/workmanager-ktx/src/main/java/androidx/work/CoroutineWorker.kt
@@ -17,6 +17,7 @@
package androidx.work
import android.content.Context
+import androidx.concurrent.futures.await
import androidx.work.impl.utils.futures.SettableFuture
import com.google.common.util.concurrent.ListenableFuture
import kotlinx.coroutines.CoroutineScope
diff --git a/work/workmanager-ktx/src/main/java/androidx/work/ListenableFuture.kt b/work/workmanager-ktx/src/main/java/androidx/work/ListenableFuture.kt
deleted file mode 100644
index 51504ab..0000000
--- a/work/workmanager-ktx/src/main/java/androidx/work/ListenableFuture.kt
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-@file:Suppress("NOTHING_TO_INLINE")
-
-package androidx.work
-
-import androidx.annotation.RestrictTo
-import com.google.common.util.concurrent.ListenableFuture
-import kotlinx.coroutines.suspendCancellableCoroutine
-import java.util.concurrent.CancellationException
-import java.util.concurrent.ExecutionException
-import kotlin.coroutines.resume
-import kotlin.coroutines.resumeWithException
-
-/**
- * Awaits for the completion of the [ListenableFuture] without blocking a thread.
- *
- * @return R The result from the [ListenableFuture]
- *
- * @hide
- */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-suspend inline fun <R> ListenableFuture<R>.await(): R {
- // Fast path
- if (isDone) {
- try {
- return get()
- } catch (e: ExecutionException) {
- throw e.cause ?: e
- }
- }
- return suspendCancellableCoroutine { cancellableContinuation ->
- addListener(Runnable {
- try {
- cancellableContinuation.resume(get())
- } catch (throwable: Throwable) {
- val cause = throwable.cause ?: throwable
- when (throwable) {
- is CancellationException -> cancellableContinuation.cancel(cause)
- else -> cancellableContinuation.resumeWithException(cause)
- }
- }
- }, DirectExecutor.INSTANCE)
- }
-}
diff --git a/work/workmanager-ktx/src/main/java/androidx/work/Operation.kt b/work/workmanager-ktx/src/main/java/androidx/work/Operation.kt
index c05181c..892cb51 100644
--- a/work/workmanager-ktx/src/main/java/androidx/work/Operation.kt
+++ b/work/workmanager-ktx/src/main/java/androidx/work/Operation.kt
@@ -19,6 +19,8 @@
package androidx.work
+import androidx.concurrent.futures.await
+
/**
* Awaits an [Operation] without blocking a thread.
*
diff --git a/work/workmanager-testing/build.gradle b/work/workmanager-testing/build.gradle
index 281b68b..f7566fa 100644
--- a/work/workmanager-testing/build.gradle
+++ b/work/workmanager-testing/build.gradle
@@ -40,6 +40,7 @@
implementation("androidx.lifecycle:lifecycle-livedata-core:2.1.0")
implementation("androidx.room:room-runtime:2.2.1")
+ androidTestImplementation(project(':concurrent:concurrent-futures-ktx'))
androidTestImplementation("androidx.arch.core:core-testing:2.1.0")
androidTestImplementation(ANDROIDX_TEST_EXT_JUNIT)
androidTestImplementation(ANDROIDX_TEST_CORE)
diff --git a/work/workmanager-testing/src/androidTest/java/androidx/work/testing/TestWorkerBuilderTest.kt b/work/workmanager-testing/src/androidTest/java/androidx/work/testing/TestWorkerBuilderTest.kt
index b9c085f..51d9286 100644
--- a/work/workmanager-testing/src/androidTest/java/androidx/work/testing/TestWorkerBuilderTest.kt
+++ b/work/workmanager-testing/src/androidTest/java/androidx/work/testing/TestWorkerBuilderTest.kt
@@ -18,6 +18,7 @@
import android.content.Context
import android.net.Uri
+import androidx.concurrent.futures.await
import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
@@ -26,7 +27,6 @@
import androidx.work.OneTimeWorkRequestBuilder
import androidx.work.WorkerFactory
import androidx.work.WorkerParameters
-import androidx.work.await
import androidx.work.testing.workers.TestListenableWorker
import androidx.work.testing.workers.TestWorker
import kotlinx.coroutines.runBlocking
diff --git a/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/Alarms.java b/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/Alarms.java
index 9ddd4b9..3c730f5 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/Alarms.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/Alarms.java
@@ -122,7 +122,7 @@
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent delayMet = CommandHandler.createDelayMetIntent(context, workSpecId);
PendingIntent pendingIntent = PendingIntent.getService(
- context, alarmId, delayMet, PendingIntent.FLAG_ONE_SHOT);
+ context, alarmId, delayMet, PendingIntent.FLAG_UPDATE_CURRENT);
if (alarmManager != null) {
if (Build.VERSION.SDK_INT >= 19) {
alarmManager.setExact(RTC_WAKEUP, triggerAtMillis, pendingIntent);