Merge "Import translations. DO NOT MERGE" into oc-mr1-dev
am: aaded1bd47 -s ours
Change-Id: Ic66cfcb1baa579548d30877c4000c597b11e2d73
diff --git a/.idea/copyright/AndroidCopyright.xml b/.idea/copyright/AndroidCopyright.xml
index b8334d4..7d2d80c 100644
--- a/.idea/copyright/AndroidCopyright.xml
+++ b/.idea/copyright/AndroidCopyright.xml
@@ -1,6 +1,6 @@
<component name="CopyrightManager">
<copyright>
<option name="myName" value="AndroidCopyright" />
- <option name="notice" value="Copyright (C) &#36;today.year 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." />
+ <option name="notice" value="Copyright &#36;today.year The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License." />
</copyright>
-</component>
\ No newline at end of file
+</component>
diff --git a/OWNERS b/OWNERS
new file mode 100644
index 0000000..049932f
--- /dev/null
+++ b/OWNERS
@@ -0,0 +1,10 @@
+adamp@google.com
+alanv@google.com
+aurimas@google.com
+ccraik@google.com
+clarabayarri@google.com
+ilake@google.com
+kirillg@google.com
+mount@google.com
+sergeyv@google.com
+yboyar@google.com
\ No newline at end of file
diff --git a/annotations/Android.mk b/annotations/Android.mk
index 78a29df..41abfaa 100644
--- a/annotations/Android.mk
+++ b/annotations/Android.mk
@@ -18,7 +18,7 @@
LOCAL_USE_AAPT2 := true
LOCAL_MODULE := android-support-annotations
LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_SRC_FILES := $(call all-java-files-under,src)
+LOCAL_SRC_FILES := $(call all-java-files-under,src/main/java)
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
LOCAL_JAVA_LANGUAGE_VERSION := 1.7
LOCAL_AAPT_FLAGS := --add-javadoc-annotation doconly
diff --git a/annotations/OWNERS b/annotations/OWNERS
new file mode 100644
index 0000000..e980177
--- /dev/null
+++ b/annotations/OWNERS
@@ -0,0 +1 @@
+tnorbye@google.com
\ No newline at end of file
diff --git a/annotations/api/current.txt b/annotations/api/current.txt
deleted file mode 100644
index c52f7e1..0000000
--- a/annotations/api/current.txt
+++ /dev/null
@@ -1,171 +0,0 @@
-package android.support.annotation {
-
- public abstract class AnimRes implements java.lang.annotation.Annotation {
- }
-
- public abstract class AnimatorRes implements java.lang.annotation.Annotation {
- }
-
- public abstract class AnyRes implements java.lang.annotation.Annotation {
- }
-
- public abstract class AnyThread implements java.lang.annotation.Annotation {
- }
-
- public abstract class ArrayRes implements java.lang.annotation.Annotation {
- }
-
- public abstract class AttrRes implements java.lang.annotation.Annotation {
- }
-
- public abstract class BinderThread implements java.lang.annotation.Annotation {
- }
-
- public abstract class BoolRes implements java.lang.annotation.Annotation {
- }
-
- public abstract class CallSuper implements java.lang.annotation.Annotation {
- }
-
- public abstract class CheckResult implements java.lang.annotation.Annotation {
- }
-
- public abstract class ColorInt implements java.lang.annotation.Annotation {
- }
-
- public abstract class ColorLong implements java.lang.annotation.Annotation {
- }
-
- public abstract class ColorRes implements java.lang.annotation.Annotation {
- }
-
- public abstract class DimenRes implements java.lang.annotation.Annotation {
- }
-
- public abstract class Dimension implements java.lang.annotation.Annotation {
- field public static final int DP = 0; // 0x0
- field public static final int PX = 1; // 0x1
- field public static final int SP = 2; // 0x2
- }
-
- public abstract class DrawableRes implements java.lang.annotation.Annotation {
- }
-
- public abstract class FloatRange implements java.lang.annotation.Annotation {
- }
-
- public abstract class FontRes implements java.lang.annotation.Annotation {
- }
-
- public abstract class FractionRes implements java.lang.annotation.Annotation {
- }
-
- public abstract class GuardedBy implements java.lang.annotation.Annotation {
- }
-
- public abstract class HalfFloat implements java.lang.annotation.Annotation {
- }
-
- public abstract class IdRes implements java.lang.annotation.Annotation {
- }
-
- public abstract class IntDef implements java.lang.annotation.Annotation {
- }
-
- public abstract class IntRange implements java.lang.annotation.Annotation {
- }
-
- public abstract class IntegerRes implements java.lang.annotation.Annotation {
- }
-
- public abstract class InterpolatorRes implements java.lang.annotation.Annotation {
- }
-
- public abstract class Keep implements java.lang.annotation.Annotation {
- }
-
- public abstract class LayoutRes implements java.lang.annotation.Annotation {
- }
-
- public abstract class MainThread implements java.lang.annotation.Annotation {
- }
-
- public abstract class MenuRes implements java.lang.annotation.Annotation {
- }
-
- public abstract class NonNull implements java.lang.annotation.Annotation {
- }
-
- public abstract class Nullable implements java.lang.annotation.Annotation {
- }
-
- public abstract class PluralsRes implements java.lang.annotation.Annotation {
- }
-
- public abstract class Px implements java.lang.annotation.Annotation {
- }
-
- public abstract class RawRes implements java.lang.annotation.Annotation {
- }
-
- public abstract class RequiresApi implements java.lang.annotation.Annotation {
- }
-
- public abstract class RequiresPermission implements java.lang.annotation.Annotation {
- }
-
- public static abstract class RequiresPermission.Read implements java.lang.annotation.Annotation {
- }
-
- public static abstract class RequiresPermission.Write implements java.lang.annotation.Annotation {
- }
-
- public abstract class RestrictTo implements java.lang.annotation.Annotation {
- }
-
- public static final class RestrictTo.Scope extends java.lang.Enum {
- method public static android.support.annotation.RestrictTo.Scope valueOf(java.lang.String);
- method public static final android.support.annotation.RestrictTo.Scope[] values();
- enum_constant public static final deprecated android.support.annotation.RestrictTo.Scope GROUP_ID;
- enum_constant public static final android.support.annotation.RestrictTo.Scope LIBRARY;
- enum_constant public static final android.support.annotation.RestrictTo.Scope LIBRARY_GROUP;
- enum_constant public static final android.support.annotation.RestrictTo.Scope SUBCLASSES;
- enum_constant public static final android.support.annotation.RestrictTo.Scope TESTS;
- }
-
- public abstract class Size implements java.lang.annotation.Annotation {
- }
-
- public abstract class StringDef implements java.lang.annotation.Annotation {
- }
-
- public abstract class StringRes implements java.lang.annotation.Annotation {
- }
-
- public abstract class StyleRes implements java.lang.annotation.Annotation {
- }
-
- public abstract class StyleableRes implements java.lang.annotation.Annotation {
- }
-
- public abstract class TransitionRes implements java.lang.annotation.Annotation {
- }
-
- public abstract class UiThread implements java.lang.annotation.Annotation {
- }
-
- public abstract class VisibleForTesting implements java.lang.annotation.Annotation {
- field public static final int NONE = 5; // 0x5
- field public static final int PACKAGE_PRIVATE = 3; // 0x3
- field public static final int PRIVATE = 2; // 0x2
- field public static final int PROTECTED = 4; // 0x4
- }
-
- public abstract class WorkerThread implements java.lang.annotation.Annotation {
- }
-
- public abstract class XmlRes implements java.lang.annotation.Annotation {
- }
-
-}
-
diff --git a/annotations/build.gradle b/annotations/build.gradle
index 4bedc3f..af4174d 100644
--- a/annotations/build.gradle
+++ b/annotations/build.gradle
@@ -1,9 +1,5 @@
apply plugin: android.support.SupportJavaLibraryPlugin
-sourceSets {
- main.java.srcDir 'src'
-}
-
jar {
from sourceSets.main.output
// Strip out typedef classes. For Android libraries, this is done
diff --git a/annotations/src/android/support/annotation/AnimRes.java b/annotations/src/main/java/android/support/annotation/AnimRes.java
similarity index 100%
rename from annotations/src/android/support/annotation/AnimRes.java
rename to annotations/src/main/java/android/support/annotation/AnimRes.java
diff --git a/annotations/src/android/support/annotation/AnimatorRes.java b/annotations/src/main/java/android/support/annotation/AnimatorRes.java
similarity index 100%
rename from annotations/src/android/support/annotation/AnimatorRes.java
rename to annotations/src/main/java/android/support/annotation/AnimatorRes.java
diff --git a/annotations/src/android/support/annotation/AnyRes.java b/annotations/src/main/java/android/support/annotation/AnyRes.java
similarity index 100%
rename from annotations/src/android/support/annotation/AnyRes.java
rename to annotations/src/main/java/android/support/annotation/AnyRes.java
diff --git a/annotations/src/android/support/annotation/AnyThread.java b/annotations/src/main/java/android/support/annotation/AnyThread.java
similarity index 100%
rename from annotations/src/android/support/annotation/AnyThread.java
rename to annotations/src/main/java/android/support/annotation/AnyThread.java
diff --git a/annotations/src/android/support/annotation/ArrayRes.java b/annotations/src/main/java/android/support/annotation/ArrayRes.java
similarity index 100%
rename from annotations/src/android/support/annotation/ArrayRes.java
rename to annotations/src/main/java/android/support/annotation/ArrayRes.java
diff --git a/annotations/src/android/support/annotation/AttrRes.java b/annotations/src/main/java/android/support/annotation/AttrRes.java
similarity index 100%
rename from annotations/src/android/support/annotation/AttrRes.java
rename to annotations/src/main/java/android/support/annotation/AttrRes.java
diff --git a/annotations/src/android/support/annotation/BinderThread.java b/annotations/src/main/java/android/support/annotation/BinderThread.java
similarity index 100%
rename from annotations/src/android/support/annotation/BinderThread.java
rename to annotations/src/main/java/android/support/annotation/BinderThread.java
diff --git a/annotations/src/android/support/annotation/BoolRes.java b/annotations/src/main/java/android/support/annotation/BoolRes.java
similarity index 100%
rename from annotations/src/android/support/annotation/BoolRes.java
rename to annotations/src/main/java/android/support/annotation/BoolRes.java
diff --git a/annotations/src/android/support/annotation/CallSuper.java b/annotations/src/main/java/android/support/annotation/CallSuper.java
similarity index 100%
rename from annotations/src/android/support/annotation/CallSuper.java
rename to annotations/src/main/java/android/support/annotation/CallSuper.java
diff --git a/annotations/src/android/support/annotation/CheckResult.java b/annotations/src/main/java/android/support/annotation/CheckResult.java
similarity index 100%
rename from annotations/src/android/support/annotation/CheckResult.java
rename to annotations/src/main/java/android/support/annotation/CheckResult.java
diff --git a/annotations/src/android/support/annotation/ColorInt.java b/annotations/src/main/java/android/support/annotation/ColorInt.java
similarity index 100%
rename from annotations/src/android/support/annotation/ColorInt.java
rename to annotations/src/main/java/android/support/annotation/ColorInt.java
diff --git a/annotations/src/android/support/annotation/ColorLong.java b/annotations/src/main/java/android/support/annotation/ColorLong.java
similarity index 100%
rename from annotations/src/android/support/annotation/ColorLong.java
rename to annotations/src/main/java/android/support/annotation/ColorLong.java
diff --git a/annotations/src/android/support/annotation/ColorRes.java b/annotations/src/main/java/android/support/annotation/ColorRes.java
similarity index 100%
rename from annotations/src/android/support/annotation/ColorRes.java
rename to annotations/src/main/java/android/support/annotation/ColorRes.java
diff --git a/annotations/src/android/support/annotation/DimenRes.java b/annotations/src/main/java/android/support/annotation/DimenRes.java
similarity index 100%
rename from annotations/src/android/support/annotation/DimenRes.java
rename to annotations/src/main/java/android/support/annotation/DimenRes.java
diff --git a/annotations/src/android/support/annotation/Dimension.java b/annotations/src/main/java/android/support/annotation/Dimension.java
similarity index 100%
rename from annotations/src/android/support/annotation/Dimension.java
rename to annotations/src/main/java/android/support/annotation/Dimension.java
diff --git a/annotations/src/android/support/annotation/DimensionUnit.java b/annotations/src/main/java/android/support/annotation/DimensionUnit.java
similarity index 100%
rename from annotations/src/android/support/annotation/DimensionUnit.java
rename to annotations/src/main/java/android/support/annotation/DimensionUnit.java
diff --git a/annotations/src/android/support/annotation/DrawableRes.java b/annotations/src/main/java/android/support/annotation/DrawableRes.java
similarity index 100%
rename from annotations/src/android/support/annotation/DrawableRes.java
rename to annotations/src/main/java/android/support/annotation/DrawableRes.java
diff --git a/annotations/src/android/support/annotation/FloatRange.java b/annotations/src/main/java/android/support/annotation/FloatRange.java
similarity index 100%
rename from annotations/src/android/support/annotation/FloatRange.java
rename to annotations/src/main/java/android/support/annotation/FloatRange.java
diff --git a/annotations/src/android/support/annotation/FontRes.java b/annotations/src/main/java/android/support/annotation/FontRes.java
similarity index 100%
rename from annotations/src/android/support/annotation/FontRes.java
rename to annotations/src/main/java/android/support/annotation/FontRes.java
diff --git a/annotations/src/android/support/annotation/FractionRes.java b/annotations/src/main/java/android/support/annotation/FractionRes.java
similarity index 100%
rename from annotations/src/android/support/annotation/FractionRes.java
rename to annotations/src/main/java/android/support/annotation/FractionRes.java
diff --git a/annotations/src/android/support/annotation/GuardedBy.java b/annotations/src/main/java/android/support/annotation/GuardedBy.java
similarity index 100%
rename from annotations/src/android/support/annotation/GuardedBy.java
rename to annotations/src/main/java/android/support/annotation/GuardedBy.java
diff --git a/annotations/src/android/support/annotation/HalfFloat.java b/annotations/src/main/java/android/support/annotation/HalfFloat.java
similarity index 100%
rename from annotations/src/android/support/annotation/HalfFloat.java
rename to annotations/src/main/java/android/support/annotation/HalfFloat.java
diff --git a/annotations/src/android/support/annotation/IdRes.java b/annotations/src/main/java/android/support/annotation/IdRes.java
similarity index 100%
rename from annotations/src/android/support/annotation/IdRes.java
rename to annotations/src/main/java/android/support/annotation/IdRes.java
diff --git a/annotations/src/android/support/annotation/IntDef.java b/annotations/src/main/java/android/support/annotation/IntDef.java
similarity index 100%
rename from annotations/src/android/support/annotation/IntDef.java
rename to annotations/src/main/java/android/support/annotation/IntDef.java
diff --git a/annotations/src/android/support/annotation/IntRange.java b/annotations/src/main/java/android/support/annotation/IntRange.java
similarity index 100%
rename from annotations/src/android/support/annotation/IntRange.java
rename to annotations/src/main/java/android/support/annotation/IntRange.java
diff --git a/annotations/src/android/support/annotation/IntegerRes.java b/annotations/src/main/java/android/support/annotation/IntegerRes.java
similarity index 100%
rename from annotations/src/android/support/annotation/IntegerRes.java
rename to annotations/src/main/java/android/support/annotation/IntegerRes.java
diff --git a/annotations/src/android/support/annotation/InterpolatorRes.java b/annotations/src/main/java/android/support/annotation/InterpolatorRes.java
similarity index 100%
rename from annotations/src/android/support/annotation/InterpolatorRes.java
rename to annotations/src/main/java/android/support/annotation/InterpolatorRes.java
diff --git a/annotations/src/android/support/annotation/Keep.java b/annotations/src/main/java/android/support/annotation/Keep.java
similarity index 100%
rename from annotations/src/android/support/annotation/Keep.java
rename to annotations/src/main/java/android/support/annotation/Keep.java
diff --git a/annotations/src/android/support/annotation/LayoutRes.java b/annotations/src/main/java/android/support/annotation/LayoutRes.java
similarity index 100%
rename from annotations/src/android/support/annotation/LayoutRes.java
rename to annotations/src/main/java/android/support/annotation/LayoutRes.java
diff --git a/annotations/src/android/support/annotation/MainThread.java b/annotations/src/main/java/android/support/annotation/MainThread.java
similarity index 100%
rename from annotations/src/android/support/annotation/MainThread.java
rename to annotations/src/main/java/android/support/annotation/MainThread.java
diff --git a/annotations/src/android/support/annotation/MenuRes.java b/annotations/src/main/java/android/support/annotation/MenuRes.java
similarity index 100%
rename from annotations/src/android/support/annotation/MenuRes.java
rename to annotations/src/main/java/android/support/annotation/MenuRes.java
diff --git a/annotations/src/main/java/android/support/annotation/NavigationRes.java b/annotations/src/main/java/android/support/annotation/NavigationRes.java
new file mode 100644
index 0000000..a051026
--- /dev/null
+++ b/annotations/src/main/java/android/support/annotation/NavigationRes.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.support.annotation;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.LOCAL_VARIABLE;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.RetentionPolicy.CLASS;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+/**
+ * Denotes that an integer parameter, field or method return value is expected
+ * to be a navigation resource reference (e.g. {@code R.navigation.flow}).
+ */
+@Documented
+@Retention(CLASS)
+@Target({METHOD, PARAMETER, FIELD, LOCAL_VARIABLE})
+public @interface NavigationRes {
+}
diff --git a/annotations/src/android/support/annotation/NonNull.java b/annotations/src/main/java/android/support/annotation/NonNull.java
similarity index 100%
rename from annotations/src/android/support/annotation/NonNull.java
rename to annotations/src/main/java/android/support/annotation/NonNull.java
diff --git a/annotations/src/android/support/annotation/Nullable.java b/annotations/src/main/java/android/support/annotation/Nullable.java
similarity index 100%
rename from annotations/src/android/support/annotation/Nullable.java
rename to annotations/src/main/java/android/support/annotation/Nullable.java
diff --git a/annotations/src/android/support/annotation/PluralsRes.java b/annotations/src/main/java/android/support/annotation/PluralsRes.java
similarity index 100%
rename from annotations/src/android/support/annotation/PluralsRes.java
rename to annotations/src/main/java/android/support/annotation/PluralsRes.java
diff --git a/annotations/src/android/support/annotation/ProductionVisibility.java b/annotations/src/main/java/android/support/annotation/ProductionVisibility.java
similarity index 100%
rename from annotations/src/android/support/annotation/ProductionVisibility.java
rename to annotations/src/main/java/android/support/annotation/ProductionVisibility.java
diff --git a/annotations/src/android/support/annotation/Px.java b/annotations/src/main/java/android/support/annotation/Px.java
similarity index 100%
rename from annotations/src/android/support/annotation/Px.java
rename to annotations/src/main/java/android/support/annotation/Px.java
diff --git a/annotations/src/android/support/annotation/RawRes.java b/annotations/src/main/java/android/support/annotation/RawRes.java
similarity index 100%
rename from annotations/src/android/support/annotation/RawRes.java
rename to annotations/src/main/java/android/support/annotation/RawRes.java
diff --git a/annotations/src/android/support/annotation/RequiresApi.java b/annotations/src/main/java/android/support/annotation/RequiresApi.java
similarity index 100%
rename from annotations/src/android/support/annotation/RequiresApi.java
rename to annotations/src/main/java/android/support/annotation/RequiresApi.java
diff --git a/annotations/src/android/support/annotation/RequiresPermission.java b/annotations/src/main/java/android/support/annotation/RequiresPermission.java
similarity index 100%
rename from annotations/src/android/support/annotation/RequiresPermission.java
rename to annotations/src/main/java/android/support/annotation/RequiresPermission.java
diff --git a/annotations/src/android/support/annotation/RestrictTo.java b/annotations/src/main/java/android/support/annotation/RestrictTo.java
similarity index 100%
rename from annotations/src/android/support/annotation/RestrictTo.java
rename to annotations/src/main/java/android/support/annotation/RestrictTo.java
diff --git a/annotations/src/android/support/annotation/Size.java b/annotations/src/main/java/android/support/annotation/Size.java
similarity index 100%
rename from annotations/src/android/support/annotation/Size.java
rename to annotations/src/main/java/android/support/annotation/Size.java
diff --git a/annotations/src/android/support/annotation/StringDef.java b/annotations/src/main/java/android/support/annotation/StringDef.java
similarity index 100%
rename from annotations/src/android/support/annotation/StringDef.java
rename to annotations/src/main/java/android/support/annotation/StringDef.java
diff --git a/annotations/src/android/support/annotation/StringRes.java b/annotations/src/main/java/android/support/annotation/StringRes.java
similarity index 100%
rename from annotations/src/android/support/annotation/StringRes.java
rename to annotations/src/main/java/android/support/annotation/StringRes.java
diff --git a/annotations/src/android/support/annotation/StyleRes.java b/annotations/src/main/java/android/support/annotation/StyleRes.java
similarity index 100%
rename from annotations/src/android/support/annotation/StyleRes.java
rename to annotations/src/main/java/android/support/annotation/StyleRes.java
diff --git a/annotations/src/android/support/annotation/StyleableRes.java b/annotations/src/main/java/android/support/annotation/StyleableRes.java
similarity index 100%
rename from annotations/src/android/support/annotation/StyleableRes.java
rename to annotations/src/main/java/android/support/annotation/StyleableRes.java
diff --git a/annotations/src/android/support/annotation/TransitionRes.java b/annotations/src/main/java/android/support/annotation/TransitionRes.java
similarity index 100%
rename from annotations/src/android/support/annotation/TransitionRes.java
rename to annotations/src/main/java/android/support/annotation/TransitionRes.java
diff --git a/annotations/src/android/support/annotation/UiThread.java b/annotations/src/main/java/android/support/annotation/UiThread.java
similarity index 100%
rename from annotations/src/android/support/annotation/UiThread.java
rename to annotations/src/main/java/android/support/annotation/UiThread.java
diff --git a/annotations/src/android/support/annotation/VisibleForTesting.java b/annotations/src/main/java/android/support/annotation/VisibleForTesting.java
similarity index 100%
rename from annotations/src/android/support/annotation/VisibleForTesting.java
rename to annotations/src/main/java/android/support/annotation/VisibleForTesting.java
diff --git a/annotations/src/android/support/annotation/WorkerThread.java b/annotations/src/main/java/android/support/annotation/WorkerThread.java
similarity index 100%
rename from annotations/src/android/support/annotation/WorkerThread.java
rename to annotations/src/main/java/android/support/annotation/WorkerThread.java
diff --git a/annotations/src/android/support/annotation/XmlRes.java b/annotations/src/main/java/android/support/annotation/XmlRes.java
similarity index 100%
rename from annotations/src/android/support/annotation/XmlRes.java
rename to annotations/src/main/java/android/support/annotation/XmlRes.java
diff --git a/api/26.1.0.ignore b/api/26.1.0.ignore
new file mode 100644
index 0000000..8fa74fe
--- /dev/null
+++ b/api/26.1.0.ignore
@@ -0,0 +1,6 @@
+036d6d4
+07abbac
+83a055e
+0af04fb
+7529650
+f41c100
diff --git a/app-toolkit/OWNERS b/app-toolkit/OWNERS
new file mode 100644
index 0000000..fc51372
--- /dev/null
+++ b/app-toolkit/OWNERS
@@ -0,0 +1,2 @@
+sergeyv@google.com
+yboyar@google.com
\ No newline at end of file
diff --git a/app-toolkit/core-testing/src/androidTest/java/android/arch/core/executor/testing/CountingTaskExecutorRuleTest.java b/app-toolkit/core-testing/src/androidTest/java/android/arch/core/executor/testing/CountingTaskExecutorRuleTest.java
index ad36b9b..a6a5b2e 100644
--- a/app-toolkit/core-testing/src/androidTest/java/android/arch/core/executor/testing/CountingTaskExecutorRuleTest.java
+++ b/app-toolkit/core-testing/src/androidTest/java/android/arch/core/executor/testing/CountingTaskExecutorRuleTest.java
@@ -19,7 +19,7 @@
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
-import android.arch.core.executor.AppToolkitTaskExecutor;
+import android.arch.core.executor.ArchTaskExecutor;
import android.support.test.filters.MediumTest;
import android.support.test.runner.AndroidJUnit4;
@@ -115,13 +115,13 @@
private LatchRunnable runOnIO() {
LatchRunnable latchRunnable = new LatchRunnable();
- AppToolkitTaskExecutor.getInstance().executeOnDiskIO(latchRunnable);
+ ArchTaskExecutor.getInstance().executeOnDiskIO(latchRunnable);
return latchRunnable;
}
private LatchRunnable runOnMain() {
LatchRunnable latchRunnable = new LatchRunnable();
- AppToolkitTaskExecutor.getInstance().executeOnMainThread(latchRunnable);
+ ArchTaskExecutor.getInstance().executeOnMainThread(latchRunnable);
return latchRunnable;
}
diff --git a/app-toolkit/core-testing/src/main/AndroidManifest.xml b/app-toolkit/core-testing/src/main/AndroidManifest.xml
index 2d55b39..d169e00 100644
--- a/app-toolkit/core-testing/src/main/AndroidManifest.xml
+++ b/app-toolkit/core-testing/src/main/AndroidManifest.xml
@@ -16,8 +16,4 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.arch.core.testing">
- <application>
- <meta-data android:name="android.arch.core.testing.VERSION"
- android:value="${version}" />
- </application>
</manifest>
diff --git a/app-toolkit/core-testing/src/main/java/android/arch/core/executor/JunitTaskExecutorRule.java b/app-toolkit/core-testing/src/main/java/android/arch/core/executor/JunitTaskExecutorRule.java
index cd4f8f5..c3366f3 100644
--- a/app-toolkit/core-testing/src/main/java/android/arch/core/executor/JunitTaskExecutorRule.java
+++ b/app-toolkit/core-testing/src/main/java/android/arch/core/executor/JunitTaskExecutorRule.java
@@ -46,11 +46,11 @@
}
private void beforeStart() {
- AppToolkitTaskExecutor.getInstance().setDelegate(mTaskExecutor);
+ ArchTaskExecutor.getInstance().setDelegate(mTaskExecutor);
}
private void afterFinished() {
- AppToolkitTaskExecutor.getInstance().setDelegate(null);
+ ArchTaskExecutor.getInstance().setDelegate(null);
}
public TaskExecutor getTaskExecutor() {
diff --git a/app-toolkit/core-testing/src/main/java/android/arch/core/executor/testing/CountingTaskExecutorRule.java b/app-toolkit/core-testing/src/main/java/android/arch/core/executor/testing/CountingTaskExecutorRule.java
index ad930aa..77133d5 100644
--- a/app-toolkit/core-testing/src/main/java/android/arch/core/executor/testing/CountingTaskExecutorRule.java
+++ b/app-toolkit/core-testing/src/main/java/android/arch/core/executor/testing/CountingTaskExecutorRule.java
@@ -16,7 +16,7 @@
package android.arch.core.executor.testing;
-import android.arch.core.executor.AppToolkitTaskExecutor;
+import android.arch.core.executor.ArchTaskExecutor;
import android.arch.core.executor.DefaultTaskExecutor;
import android.os.SystemClock;
@@ -39,7 +39,7 @@
@Override
protected void starting(Description description) {
super.starting(description);
- AppToolkitTaskExecutor.getInstance().setDelegate(new DefaultTaskExecutor() {
+ ArchTaskExecutor.getInstance().setDelegate(new DefaultTaskExecutor() {
@Override
public void executeOnDiskIO(Runnable runnable) {
super.executeOnDiskIO(new CountingRunnable(runnable));
@@ -55,7 +55,7 @@
@Override
protected void finished(Description description) {
super.finished(description);
- AppToolkitTaskExecutor.getInstance().setDelegate(null);
+ ArchTaskExecutor.getInstance().setDelegate(null);
}
private void increment() {
diff --git a/app-toolkit/core-testing/src/main/java/android/arch/core/executor/testing/InstantTaskExecutorRule.java b/app-toolkit/core-testing/src/main/java/android/arch/core/executor/testing/InstantTaskExecutorRule.java
index 07dcf1f..f88a3e3 100644
--- a/app-toolkit/core-testing/src/main/java/android/arch/core/executor/testing/InstantTaskExecutorRule.java
+++ b/app-toolkit/core-testing/src/main/java/android/arch/core/executor/testing/InstantTaskExecutorRule.java
@@ -16,7 +16,7 @@
package android.arch.core.executor.testing;
-import android.arch.core.executor.AppToolkitTaskExecutor;
+import android.arch.core.executor.ArchTaskExecutor;
import android.arch.core.executor.TaskExecutor;
import org.junit.rules.TestWatcher;
@@ -32,7 +32,7 @@
@Override
protected void starting(Description description) {
super.starting(description);
- AppToolkitTaskExecutor.getInstance().setDelegate(new TaskExecutor() {
+ ArchTaskExecutor.getInstance().setDelegate(new TaskExecutor() {
@Override
public void executeOnDiskIO(Runnable runnable) {
runnable.run();
@@ -53,6 +53,6 @@
@Override
protected void finished(Description description) {
super.finished(description);
- AppToolkitTaskExecutor.getInstance().setDelegate(null);
+ ArchTaskExecutor.getInstance().setDelegate(null);
}
}
diff --git a/app-toolkit/core-testing/src/test/java/android/arch/core/executor/testing/InstantTaskExecutorRuleTest.java b/app-toolkit/core-testing/src/test/java/android/arch/core/executor/testing/InstantTaskExecutorRuleTest.java
index 4345fd1..0fdcbfb 100644
--- a/app-toolkit/core-testing/src/test/java/android/arch/core/executor/testing/InstantTaskExecutorRuleTest.java
+++ b/app-toolkit/core-testing/src/test/java/android/arch/core/executor/testing/InstantTaskExecutorRuleTest.java
@@ -18,7 +18,7 @@
import static org.junit.Assert.assertTrue;
-import android.arch.core.executor.AppToolkitTaskExecutor;
+import android.arch.core.executor.ArchTaskExecutor;
import org.junit.Rule;
import org.junit.Test;
@@ -46,7 +46,7 @@
return null;
}
});
- AppToolkitTaskExecutor.getInstance().executeOnMainThread(check);
+ ArchTaskExecutor.getInstance().executeOnMainThread(check);
check.get(1, TimeUnit.SECONDS);
}
@@ -60,7 +60,7 @@
return null;
}
});
- AppToolkitTaskExecutor.getInstance().executeOnDiskIO(check);
+ ArchTaskExecutor.getInstance().executeOnDiskIO(check);
check.get(1, TimeUnit.SECONDS);
}
}
diff --git a/app-toolkit/dependencies.gradle b/app-toolkit/dependencies.gradle
index 083325b..cb68089 100644
--- a/app-toolkit/dependencies.gradle
+++ b/app-toolkit/dependencies.gradle
@@ -32,7 +32,8 @@
ffVersions.reactivestreams = "1.0.0"
// this Xerial version is newer than we want but we need it to fix
// https://github.com/xerial/sqlite-jdbc/issues/97
-ffVersions.xerial = "3.16.1"
+// https://github.com/xerial/sqlite-jdbc/issues/267
+ffVersions.xerial = "3.20.1"
ffVersions.antlr = "4.5.3"
ffVersions.commons_codec = "1.10"
ffVersions.gson = "2.8.0"
diff --git a/app-toolkit/runtime/src/main/AndroidManifest.xml b/app-toolkit/runtime/src/main/AndroidManifest.xml
index a5660ce..3f40068 100644
--- a/app-toolkit/runtime/src/main/AndroidManifest.xml
+++ b/app-toolkit/runtime/src/main/AndroidManifest.xml
@@ -16,8 +16,4 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.arch.core">
- <application>
- <meta-data android:name="android.arch.core.VERSION"
- android:value="${version}" />
- </application>
</manifest>
diff --git a/app-toolkit/runtime/src/main/java/android/arch/core/executor/AppToolkitTaskExecutor.java b/app-toolkit/runtime/src/main/java/android/arch/core/executor/ArchTaskExecutor.java
similarity index 88%
rename from app-toolkit/runtime/src/main/java/android/arch/core/executor/AppToolkitTaskExecutor.java
rename to app-toolkit/runtime/src/main/java/android/arch/core/executor/ArchTaskExecutor.java
index 7337f74..2401a73 100644
--- a/app-toolkit/runtime/src/main/java/android/arch/core/executor/AppToolkitTaskExecutor.java
+++ b/app-toolkit/runtime/src/main/java/android/arch/core/executor/ArchTaskExecutor.java
@@ -29,8 +29,8 @@
* @hide This API is not final.
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-public class AppToolkitTaskExecutor extends TaskExecutor {
- private static volatile AppToolkitTaskExecutor sInstance;
+public class ArchTaskExecutor extends TaskExecutor {
+ private static volatile ArchTaskExecutor sInstance;
@NonNull
private TaskExecutor mDelegate;
@@ -54,7 +54,7 @@
}
};
- private AppToolkitTaskExecutor() {
+ private ArchTaskExecutor() {
mDefaultTaskExecutor = new DefaultTaskExecutor();
mDelegate = mDefaultTaskExecutor;
}
@@ -62,15 +62,15 @@
/**
* Returns an instance of the task executor.
*
- * @return The singleton AppToolkitTaskExecutor.
+ * @return The singleton ArchTaskExecutor.
*/
- public static AppToolkitTaskExecutor getInstance() {
+ public static ArchTaskExecutor getInstance() {
if (sInstance != null) {
return sInstance;
}
- synchronized (AppToolkitTaskExecutor.class) {
+ synchronized (ArchTaskExecutor.class) {
if (sInstance == null) {
- sInstance = new AppToolkitTaskExecutor();
+ sInstance = new ArchTaskExecutor();
}
}
return sInstance;
diff --git a/buildSrc/dependencies.gradle b/buildSrc/dependencies.gradle
index 43576e2..ebeaa7e 100644
--- a/buildSrc/dependencies.gradle
+++ b/buildSrc/dependencies.gradle
@@ -32,11 +32,11 @@
libs.gradle = 'com.android.tools.build:gradle:' + androidPluginVersionOverride
} else {
// Keep gradle plugin version in sync with ub_supportlib-master manifest.
- libs.gradle = 'com.android.tools.build:gradle:3.0.0-beta6'
+ libs.gradle = 'com.android.tools.build:gradle:3.0.0'
}
//arch components
-libs.arch_lifecycle_runtime = "android.arch.lifecycle:runtime:1.0.0"
+libs.arch_lifecycle_runtime = "android.arch.lifecycle:runtime:1.0.0@aar"
// Other dependencies
libs.xml_parser_apis = 'xerces:xmlParserAPIs:2.6.2'
diff --git a/buildSrc/diff_and_docs.gradle b/buildSrc/diff_and_docs.gradle
index 6da0b57..876d1f3 100644
--- a/buildSrc/diff_and_docs.gradle
+++ b/buildSrc/diff_and_docs.gradle
@@ -14,15 +14,16 @@
* limitations under the License.
*/
-import android.support.LibraryVersions
import android.support.Version
import android.support.checkapi.ApiXmlConversionTask
import android.support.checkapi.CheckApiTask
import android.support.checkapi.UpdateApiTask
import android.support.doclava.DoclavaTask
import android.support.jdiff.JDiffTask
+import com.android.build.gradle.api.LibraryVariant
import groovy.io.FileType
import groovy.transform.Field
+import org.gradle.api.tasks.compile.JavaCompile
// Set up platform API files for federation.
if (project.androidApiTxt != null) {
@@ -65,19 +66,21 @@
}
// configuration file for setting up api diffs and api docs
-void registerAndroidProjectForDocsTask(Task task, releaseVariant) {
+void registerAndroidProjectForDocsTask(Task task, LibraryVariant releaseVariant) {
task.dependsOn releaseVariant.javaCompile
task.source {
- return releaseVariant.javaCompile.source +
- fileTree(releaseVariant.aidlCompile.sourceOutputDir) +
- fileTree(releaseVariant.outputs[0].processResources.sourceOutputDir)
+ // Exclude generated R.java files that don't belong to this project.
+ String packageDir = releaseVariant.getApplicationId().replace('.', '/')
+ return releaseVariant.javaCompile.source.filter { File file ->
+ return !file.name.equals('R.java') || file.parent.endsWith(packageDir)
+ }
}
task.classpath += releaseVariant.getCompileClasspath(null) +
files(releaseVariant.javaCompile.destinationDir)
}
// configuration file for setting up api diffs and api docs
-void registerJavaProjectForDocsTask(Task task, javaCompileTask) {
+void registerJavaProjectForDocsTask(Task task, JavaCompile javaCompileTask) {
task.dependsOn javaCompileTask
task.source javaCompileTask.source
task.classpath += files(javaCompileTask.classpath) +
@@ -117,10 +120,9 @@
}
options {
- addStringOption "templatedir",
+ addStringOption 'templatedir',
"${supportRootFolder}/../../external/doclava/res/assets/templates-sdk"
- addStringOption "stubpackages", "android.support.*"
- addStringOption "samplesdir", "${supportRootFolder}/samples"
+ addStringOption 'samplesdir', "${supportRootFolder}/samples"
addMultilineMultiValueOption("federate").setValue([
['Android', 'https://developer.android.com']
])
@@ -384,6 +386,11 @@
oldApiFile = getApiFile(project.projectDir, new Version(project.version))
whitelistErrors = project.checkApiRelease.whitelistErrors
whitelistErrorsFile = project.checkApiRelease.whitelistErrorsFile
+
+ doFirst {
+ // Replace the expected whitelist with the detected whitelist.
+ whitelistErrors = project.checkApiRelease.detectedWhitelistErrors
+ }
}
}
@@ -425,7 +432,7 @@
} else if (project.hasProperty("toApi") && toApi.matches(~/(\d+\.){2}\d+/)) {
// If toApi matches released API (X.Y.Z) format, use the most recently
// released API file prior to toApi.
- inputApiFile = getPreviousApiFile(rootFolder, toApi)
+ inputApiFile = getLastReleasedApiFile(rootFolder, toApi)
} else {
// Use the most recently released API file.
inputApiFile = getApiFile(rootFolder, new Version(project.version))
@@ -507,22 +514,23 @@
subprojects { subProject ->
subProject.afterEvaluate { project ->
if (project.hasProperty("noDocs") && project.noDocs) {
+ logger.warn("Project $project.name specified noDocs, ignoring API tasks.")
+ return
+ }
+ if (project.hasProperty("supportLibrary") && !project.supportLibrary.publish) {
+ logger.warn("Project $project.name is not published, ignoring API tasks.")
return
}
if (project.hasProperty('android') && project.android.hasProperty('libraryVariants')) {
project.android.libraryVariants.all { variant ->
if (variant.name == 'release') {
registerAndroidProjectForDocsTask(rootProject.generateDocs, variant)
- if (rootProject.tasks.findByPath("generateApi")) {
- registerAndroidProjectForDocsTask(rootProject.generateApi, variant)
- registerAndroidProjectForDocsTask(rootProject.generateDiffs, variant)
- }
if (!hasJavaSources(variant)) {
return
}
if (!hasApiFolder(project)) {
logger.warn("Project $project.name doesn't have an api folder, " +
- "ignoring API tasks")
+ "ignoring API tasks.")
return
}
initializeApiChecksForProject(project)
@@ -534,7 +542,7 @@
registerJavaProjectForDocsTask(rootProject.generateDocs, project.compileJava)
if (!hasApiFolder(project)) {
logger.warn("Project $project.name doesn't have an api folder, " +
- "ignoring API tasks")
+ "ignoring API tasks.")
return
}
initializeApiChecksForProject(project)
diff --git a/buildSrc/init.gradle b/buildSrc/init.gradle
index ec8685d..44116d6 100644
--- a/buildSrc/init.gradle
+++ b/buildSrc/init.gradle
@@ -64,7 +64,7 @@
}
def setSdkInLocalPropertiesFile() {
- ext.buildToolsVersion = '26.0.0'
+ ext.buildToolsVersion = '27.0.0'
final String fullSdkPath = getFullSdkPath();
if (file(fullSdkPath).exists()) {
gradle.ext.currentSdk = 26
@@ -127,7 +127,7 @@
def configureBuildOnServer() {
def buildOnServerTask = rootProject.tasks.create("buildOnServer")
rootProject.tasks.whenTaskAdded { task ->
- if ("createArchive".equals(task.name)) {
+ if ("createArchive".equals(task.name) || "distDocs".equals(task.name)) {
buildOnServerTask.dependsOn task
}
}
@@ -255,7 +255,20 @@
task.doLast {
def source = testApk ? project.android.sourceSets.androidTest
: project.android.sourceSets.main
- if (task.hasProperty("outputDirectory") && !source.java.sourceFiles.isEmpty()) {
+ def hasKotlinSources = false
+ if (source.hasProperty('kotlin')) {
+ if (!source.kotlin.files.isEmpty()) {
+ hasKotlinSources = true
+ } else {
+ // kotlin files does not show in java sources due to the *.java filter
+ // so we need to check them manually
+ hasKotlinSources = source.java.sourceDirectoryTrees.any {
+ !fileTree(dir: it.dir, include:'**/*.kt').files.isEmpty()
+ }
+ }
+ }
+ def hasSourceCode = !source.java.sourceFiles.isEmpty() || hasKotlinSources
+ if (task.hasProperty("outputDirectory") && (hasSourceCode || !testApk)) {
copy {
from(task.outputDirectory)
include '*.apk'
diff --git a/buildSrc/release.gradle b/buildSrc/release.gradle
index 959ed44..d376039 100644
--- a/buildSrc/release.gradle
+++ b/buildSrc/release.gradle
@@ -65,6 +65,11 @@
includeFilters.forEach {
include it
}
+ if (includeFilters.isEmpty()) {
+ // not providing any include would mean include everything so we provide a dummy
+ // include constraint.
+ include "do-not-include-anything"
+ }
}
from rootProject.ext.supportRepoOut
destinationDir rootProject.ext.distDir
diff --git a/buildSrc/src/main/groovy/android/support/FlatfootAndroidLibraryPlugin.groovy b/buildSrc/src/main/groovy/android/support/FlatfootAndroidLibraryPlugin.groovy
index 5fe6d60..c6abac2 100644
--- a/buildSrc/src/main/groovy/android/support/FlatfootAndroidLibraryPlugin.groovy
+++ b/buildSrc/src/main/groovy/android/support/FlatfootAndroidLibraryPlugin.groovy
@@ -17,7 +17,6 @@
package android.support
import com.google.common.collect.ImmutableMap
-import org.gradle.api.JavaVersion
import org.gradle.api.Plugin
import org.gradle.api.Project
@@ -31,6 +30,7 @@
SupportLibraryExtension supportLibraryExtension =
project.extensions.create("supportLibrary", SupportLibraryExtension, project);
SupportLibraryMavenUploader.apply(project, supportLibraryExtension);
+ VersionFileWriterTask.setUpAndroidLibrary(project);
project.apply(ImmutableMap.of("plugin", "com.android.library"));
}
diff --git a/buildSrc/src/main/groovy/android/support/SupportAndroidLibraryPlugin.groovy b/buildSrc/src/main/groovy/android/support/SupportAndroidLibraryPlugin.groovy
index cd4d96c..2170a50 100644
--- a/buildSrc/src/main/groovy/android/support/SupportAndroidLibraryPlugin.groovy
+++ b/buildSrc/src/main/groovy/android/support/SupportAndroidLibraryPlugin.groovy
@@ -42,6 +42,30 @@
project.extensions.create("supportLibrary", SupportLibraryExtension, project);
SupportLibraryMavenUploader.apply(project, supportLibraryExtension);
+ project.afterEvaluate {
+ LibraryExtension library = project.extensions.findByType(LibraryExtension.class);
+
+ // Java 8 is only fully supported on API 24+ and not all Java 8 features are binary
+ // compatible with API < 24, so use Java 7 for both source AND target.
+ final JavaVersion javaVersion;
+ if (supportLibraryExtension.java8Library) {
+ if (library.defaultConfig.minSdkVersion.apiLevel < 24) {
+ throw new IllegalArgumentException("Libraries can only support Java 8 if "
+ + "minSdkVersion is 24 or higher");
+ }
+ javaVersion = JavaVersion.VERSION_1_8
+ } else {
+ javaVersion = JavaVersion.VERSION_1_7
+ }
+
+ library.compileOptions {
+ sourceCompatibility javaVersion
+ targetCompatibility javaVersion
+ }
+ }
+
+ VersionFileWriterTask.setUpAndroidLibrary(project);
+
project.apply(ImmutableMap.of("plugin", "com.android.library"));
project.apply(ImmutableMap.of("plugin", ErrorProneBasePlugin.class));
@@ -51,8 +75,7 @@
library.defaultConfig {
// Update the version meta-data in each Manifest.
- addManifestPlaceholders(["support-version": LibraryVersions.SUPPORT_LIBRARY.toString(),
- "target-sdk-version": project.currentSdk])
+ addManifestPlaceholders(["target-sdk-version": project.currentSdk])
// Set test related options.
testInstrumentationRunner INSTRUMENTATION_RUNNER
@@ -112,13 +135,6 @@
project.uploadArchives.dependsOn "lintRelease"
}
- // Java 8 is only fully supported on API 24+ and not all Java 8 features are binary
- // compatible with API < 24, so use Java 7 for both source AND target.
- library.compileOptions {
- sourceCompatibility JavaVersion.VERSION_1_7
- targetCompatibility JavaVersion.VERSION_1_7
- }
-
// Create sources jar for release builds
library.getLibraryVariants().all(new Action<LibraryVariant>() {
@Override
@@ -128,6 +144,7 @@
}
Jar sourceJar = project.getTasks().create("sourceJarRelease", Jar.class);
+ sourceJar.preserveFileTimestamps = false;
sourceJar.setClassifier("sources");
sourceJar.from(library.getSourceSets().findByName("main").getJava().getSrcDirs());
project.getArtifacts().add("archives", sourceJar);
diff --git a/buildSrc/src/main/groovy/android/support/SupportLibraryMavenUploader.groovy b/buildSrc/src/main/groovy/android/support/SupportLibraryMavenUploader.groovy
index 7f942e1..957cae8 100644
--- a/buildSrc/src/main/groovy/android/support/SupportLibraryMavenUploader.groovy
+++ b/buildSrc/src/main/groovy/android/support/SupportLibraryMavenUploader.groovy
@@ -16,9 +16,11 @@
package android.support
+import com.android.build.gradle.LibraryPlugin
import com.google.common.collect.ImmutableMap
import org.gradle.api.Action
import org.gradle.api.Project
+import org.gradle.api.artifacts.ProjectDependency
import org.gradle.api.artifacts.maven.MavenDeployer
import org.gradle.api.tasks.Upload
@@ -66,6 +68,21 @@
}
}
}
+
+ uploadTask.doFirst {
+ Set<ProjectDependency> allDeps = new HashSet<>();
+ collectDependenciesForConfiguration(allDeps, project, "api");
+ collectDependenciesForConfiguration(allDeps, project, "implementation");
+ collectDependenciesForConfiguration(allDeps, project, "compile");
+
+ mavenDeployer.getPom().whenConfigured {
+ it.dependencies.forEach { dep ->
+ if (isAndroidProject(dep.groupId, dep.artifactId, allDeps)) {
+ dep.type = "aar"
+ }
+ }
+ }
+ }
}
});
} else {
@@ -73,4 +90,23 @@
}
}
}
+
+ private static void collectDependenciesForConfiguration(Set<ProjectDependency> dependencies,
+ Project project, String name) {
+ def config = project.configurations.findByName(name);
+ if (config != null) {
+ config.dependencies.withType(ProjectDependency.class).forEach {
+ dep -> dependencies.add(dep)
+ }
+ }
+ }
+
+ private static boolean isAndroidProject(String groupId, String artifactId, Set<ProjectDependency> deps) {
+ for (ProjectDependency dep : deps) {
+ if (dep.group == groupId && dep.name == artifactId) {
+ return dep.getDependencyProject().plugins.hasPlugin(LibraryPlugin.class)
+ }
+ }
+ return false;
+ }
}
\ No newline at end of file
diff --git a/buildSrc/src/main/groovy/android/support/checkapi/CheckApiTask.groovy b/buildSrc/src/main/groovy/android/support/checkapi/CheckApiTask.groovy
index 05b4b1c..4f829f6 100644
--- a/buildSrc/src/main/groovy/android/support/checkapi/CheckApiTask.groovy
+++ b/buildSrc/src/main/groovy/android/support/checkapi/CheckApiTask.groovy
@@ -18,8 +18,6 @@
import org.gradle.api.DefaultTask
import org.gradle.api.GradleException
-import org.gradle.api.InvalidUserDataException
-import org.gradle.api.Nullable
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.InputFile
import org.gradle.api.tasks.InputFiles
@@ -110,6 +108,9 @@
@Input
Set whitelistErrors = []
+ // Errors that were both detected and whitelisted.
+ Set detectedWhitelistErrors = []
+
@InputFiles
Collection<File> doclavaClasspath
@@ -234,9 +235,9 @@
}
// Parse the error output.
- def unparsedErrors = []
- def ignoredErrors = []
- def parsedErrors = []
+ Set unparsedErrors = []
+ Set detectedErrors = []
+ Set parsedErrors = []
errStream.toString().split("\n").each {
if (it) {
def matcher = it =~ ~/^(.+):(.+): (\w+) (\d+): (.+)$/
@@ -246,7 +247,8 @@
def hash = getShortHash(matcher[0][5]);
def error = matcher[0][1..-1] + [hash]
if (hash in whitelistErrors) {
- ignoredErrors += [error]
+ detectedErrors += [error]
+ detectedWhitelistErrors += error[5]
} else {
parsedErrors += [error]
}
@@ -256,7 +258,7 @@
unparsedErrors.each { error -> logger.error "$ANSI_RED$error$ANSI_RESET" }
parsedErrors.each { logger.error "$ANSI_RED${it[5]}$ANSI_RESET ${it[4]}"}
- ignoredErrors.each { logger.warn "$ANSI_YELLOW${it[5]}$ANSI_RESET ${it[4]}"}
+ detectedErrors.each { logger.warn "$ANSI_YELLOW${it[5]}$ANSI_RESET ${it[4]}"}
if (unparsedErrors || parsedErrors) {
throw new GradleException(onFailMessage)
diff --git a/buildSrc/src/main/java/android/support/LibraryVersions.java b/buildSrc/src/main/java/android/support/LibraryVersions.java
index dbc9da6..19d5d6d 100644
--- a/buildSrc/src/main/java/android/support/LibraryVersions.java
+++ b/buildSrc/src/main/java/android/support/LibraryVersions.java
@@ -23,12 +23,12 @@
/**
* Version code of the support library components.
*/
- public static final Version SUPPORT_LIBRARY = new Version("27.0.0-SNAPSHOT");
+ public static final Version SUPPORT_LIBRARY = new Version("27.0.0");
/**
* Version code for flatfoot 1.0 projects (room, lifecycles)
*/
- private static final Version FLATFOOT_1_0_BATCH = new Version("1.0.0-beta1");
+ private static final Version FLATFOOT_1_0_BATCH = new Version("1.0.0-rc1");
/**
* Version code for Room
@@ -43,17 +43,19 @@
/**
* Version code for RecyclerView & Room paging
*/
- public static final Version PAGING = new Version("1.0.0-alpha2");
+ public static final Version PAGING = new Version("1.0.0-alpha3");
+
+ private static final Version LIFECYCLES = new Version("1.0.3");
/**
* Version code for Lifecycle libs that are required by the support library
*/
- public static final Version LIFECYCLES_CORE = new Version("1.0.1");
+ public static final Version LIFECYCLES_CORE = LIFECYCLES;
/**
* Version code for Lifecycle runtime libs that are required by the support library
*/
- public static final Version LIFECYCLES_RUNTIME = new Version("1.0.0");
+ public static final Version LIFECYCLES_RUNTIME = LIFECYCLES;
/**
* Version code for shared code of flatfoot
diff --git a/buildSrc/src/main/java/android/support/VersionFileWriterTask.java b/buildSrc/src/main/java/android/support/VersionFileWriterTask.java
new file mode 100644
index 0000000..aafa023
--- /dev/null
+++ b/buildSrc/src/main/java/android/support/VersionFileWriterTask.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support;
+
+import com.android.build.gradle.LibraryExtension;
+
+import org.gradle.api.Action;
+import org.gradle.api.DefaultTask;
+import org.gradle.api.Project;
+import org.gradle.api.tasks.Input;
+import org.gradle.api.tasks.OutputFile;
+import org.gradle.api.tasks.TaskAction;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+/**
+ * Task that allows to write a version to a given output file.
+ */
+public class VersionFileWriterTask extends DefaultTask {
+ public static final String RESOURCE_DIRECTORY = "generatedResources";
+ public static final String VERSION_FILE_PATH =
+ RESOURCE_DIRECTORY + "/META-INF/%s_%s.version";
+
+ private String mVersion;
+ private File mOutputFile;
+
+ /**
+ * Sets up Android Library project to have a task that generates a version file.
+ *
+ * @param project an Android Library project.
+ */
+ public static void setUpAndroidLibrary(Project project) {
+ project.afterEvaluate(new Action<Project>() {
+ @Override
+ public void execute(Project project) {
+ LibraryExtension library =
+ project.getExtensions().findByType(LibraryExtension.class);
+
+ String group = (String) project.getProperties().get("group");
+ String artifactId = (String) project.getProperties().get("name");
+ String version = (String) project.getProperties().get("version");
+
+ // Add a java resource file to the library jar for version tracking purposes.
+ File artifactName = new File(project.getBuildDir(),
+ String.format(VersionFileWriterTask.VERSION_FILE_PATH,
+ group, artifactId));
+
+ VersionFileWriterTask writeVersionFile =
+ project.getTasks().create("writeVersionFile", VersionFileWriterTask.class);
+ writeVersionFile.setVersion(version);
+ writeVersionFile.setOutputFile(artifactName);
+
+ library.getLibraryVariants().all(
+ libraryVariant -> libraryVariant.getProcessJavaResources().dependsOn(
+ writeVersionFile));
+
+ library.getSourceSets().getByName("main").getResources().srcDir(
+ new File(project.getBuildDir(), VersionFileWriterTask.RESOURCE_DIRECTORY)
+ );
+ }
+ });
+ }
+
+ @Input
+ public String getVersion() {
+ return mVersion;
+ }
+
+ public void setVersion(String version) {
+ mVersion = version;
+ }
+
+ @OutputFile
+ public File getOutputFile() {
+ return mOutputFile;
+ }
+
+ public void setOutputFile(File outputFile) {
+ mOutputFile = outputFile;
+ }
+
+ /**
+ * The main method for actually writing out the file.
+ *
+ * @throws IOException
+ */
+ @TaskAction
+ public void run() throws IOException {
+ PrintWriter writer = new PrintWriter(mOutputFile);
+ writer.println(mVersion);
+ writer.close();
+ }
+}
diff --git a/compat/Android.mk b/compat/Android.mk
index cd62336..e16bba6 100644
--- a/compat/Android.mk
+++ b/compat/Android.mk
@@ -25,10 +25,10 @@
LOCAL_USE_AAPT2 := true
LOCAL_MODULE := android-support-compat
LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_AIDL_INCLUDES := $(LOCAL_PATH)/java
+LOCAL_AIDL_INCLUDES := $(LOCAL_PATH)/src/main/java
LOCAL_SRC_FILES := \
- $(call all-java-files-under,java) \
- $(call all-Iaidl-files-under,java)
+ $(call all-java-files-under,src/main/java) \
+ $(call all-Iaidl-files-under,src/main/java)
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
LOCAL_SHARED_ANDROID_LIBRARIES := \
android-support-annotations
diff --git a/compat/AndroidManifest.xml b/compat/AndroidManifest.xml
index cba2f24..5525c41 100644
--- a/compat/AndroidManifest.xml
+++ b/compat/AndroidManifest.xml
@@ -16,8 +16,4 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.support.compat">
<uses-sdk android:minSdkVersion="14"/>
- <application>
- <meta-data android:name="android.support.compat.VERSION"
- android:value="${support-version}" />
- </application>
</manifest>
diff --git a/compat/OWNERS b/compat/OWNERS
new file mode 100644
index 0000000..cf4df58
--- /dev/null
+++ b/compat/OWNERS
@@ -0,0 +1,4 @@
+aurimas@google.com
+cinek@google.com
+clarabayarri@google.com
+juliacr@google.com
\ No newline at end of file
diff --git a/compat/api/26.1.0.ignore b/compat/api/26.1.0.ignore
new file mode 100644
index 0000000..bad3ae6
--- /dev/null
+++ b/compat/api/26.1.0.ignore
@@ -0,0 +1,4 @@
+83a055e
+0af04fb
+7529650
+f41c100
diff --git a/compat/api/26.1.0.txt b/compat/api/26.1.0.txt
new file mode 100644
index 0000000..d6f02b4
--- /dev/null
+++ b/compat/api/26.1.0.txt
@@ -0,0 +1,2426 @@
+package android.support.v4.accessibilityservice {
+
+ public final class AccessibilityServiceInfoCompat {
+ method public static java.lang.String capabilityToString(int);
+ method public static java.lang.String feedbackTypeToString(int);
+ method public static java.lang.String flagToString(int);
+ method public static deprecated boolean getCanRetrieveWindowContent(android.accessibilityservice.AccessibilityServiceInfo);
+ method public static int getCapabilities(android.accessibilityservice.AccessibilityServiceInfo);
+ method public static deprecated java.lang.String getDescription(android.accessibilityservice.AccessibilityServiceInfo);
+ method public static deprecated java.lang.String getId(android.accessibilityservice.AccessibilityServiceInfo);
+ method public static deprecated android.content.pm.ResolveInfo getResolveInfo(android.accessibilityservice.AccessibilityServiceInfo);
+ method public static deprecated java.lang.String getSettingsActivityName(android.accessibilityservice.AccessibilityServiceInfo);
+ method public static java.lang.String loadDescription(android.accessibilityservice.AccessibilityServiceInfo, android.content.pm.PackageManager);
+ field public static final int CAPABILITY_CAN_FILTER_KEY_EVENTS = 8; // 0x8
+ field public static final int CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 4; // 0x4
+ field public static final int CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION = 2; // 0x2
+ field public static final int CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT = 1; // 0x1
+ field public static final deprecated int DEFAULT = 1; // 0x1
+ field public static final int FEEDBACK_ALL_MASK = -1; // 0xffffffff
+ field public static final int FEEDBACK_BRAILLE = 32; // 0x20
+ field public static final int FLAG_INCLUDE_NOT_IMPORTANT_VIEWS = 2; // 0x2
+ field public static final int FLAG_REPORT_VIEW_IDS = 16; // 0x10
+ field public static final int FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 8; // 0x8
+ field public static final int FLAG_REQUEST_FILTER_KEY_EVENTS = 32; // 0x20
+ field public static final int FLAG_REQUEST_TOUCH_EXPLORATION_MODE = 4; // 0x4
+ }
+
+}
+
+package android.support.v4.app {
+
+ public class ActivityCompat extends android.support.v4.content.ContextCompat {
+ ctor protected ActivityCompat();
+ method public static void finishAffinity(android.app.Activity);
+ method public static void finishAfterTransition(android.app.Activity);
+ method public static android.net.Uri getReferrer(android.app.Activity);
+ method public static boolean invalidateOptionsMenu(android.app.Activity);
+ method public static void postponeEnterTransition(android.app.Activity);
+ method public static void requestPermissions(android.app.Activity, java.lang.String[], int);
+ method public static void setEnterSharedElementCallback(android.app.Activity, android.support.v4.app.SharedElementCallback);
+ method public static void setExitSharedElementCallback(android.app.Activity, android.support.v4.app.SharedElementCallback);
+ method public static boolean shouldShowRequestPermissionRationale(android.app.Activity, java.lang.String);
+ method public static void startActivityForResult(android.app.Activity, android.content.Intent, int, android.os.Bundle);
+ method public static void startIntentSenderForResult(android.app.Activity, android.content.IntentSender, int, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException;
+ method public static void startPostponedEnterTransition(android.app.Activity);
+ }
+
+ public static abstract interface ActivityCompat.OnRequestPermissionsResultCallback {
+ method public abstract void onRequestPermissionsResult(int, java.lang.String[], int[]);
+ }
+
+ public final class ActivityManagerCompat {
+ method public static boolean isLowRamDevice(android.app.ActivityManager);
+ }
+
+ public class ActivityOptionsCompat {
+ ctor protected ActivityOptionsCompat();
+ method public android.graphics.Rect getLaunchBounds();
+ method public static android.support.v4.app.ActivityOptionsCompat makeBasic();
+ method public static android.support.v4.app.ActivityOptionsCompat makeClipRevealAnimation(android.view.View, int, int, int, int);
+ method public static android.support.v4.app.ActivityOptionsCompat makeCustomAnimation(android.content.Context, int, int);
+ method public static android.support.v4.app.ActivityOptionsCompat makeScaleUpAnimation(android.view.View, int, int, int, int);
+ method public static android.support.v4.app.ActivityOptionsCompat makeSceneTransitionAnimation(android.app.Activity, android.view.View, java.lang.String);
+ method public static android.support.v4.app.ActivityOptionsCompat makeSceneTransitionAnimation(android.app.Activity, android.support.v4.util.Pair<android.view.View, java.lang.String>...);
+ method public static android.support.v4.app.ActivityOptionsCompat makeTaskLaunchBehind();
+ method public static android.support.v4.app.ActivityOptionsCompat makeThumbnailScaleUpAnimation(android.view.View, android.graphics.Bitmap, int, int);
+ method public void requestUsageTimeReport(android.app.PendingIntent);
+ method public android.support.v4.app.ActivityOptionsCompat setLaunchBounds(android.graphics.Rect);
+ method public android.os.Bundle toBundle();
+ method public void update(android.support.v4.app.ActivityOptionsCompat);
+ field public static final java.lang.String EXTRA_USAGE_TIME_REPORT = "android.activity.usage_time";
+ field public static final java.lang.String EXTRA_USAGE_TIME_REPORT_PACKAGES = "android.usage_time_packages";
+ }
+
+ public final class AlarmManagerCompat {
+ method public static void setAlarmClock(android.app.AlarmManager, long, android.app.PendingIntent, android.app.PendingIntent);
+ method public static void setAndAllowWhileIdle(android.app.AlarmManager, int, long, android.app.PendingIntent);
+ method public static void setExact(android.app.AlarmManager, int, long, android.app.PendingIntent);
+ method public static void setExactAndAllowWhileIdle(android.app.AlarmManager, int, long, android.app.PendingIntent);
+ }
+
+ public final class AppOpsManagerCompat {
+ method public static int noteOp(android.content.Context, java.lang.String, int, java.lang.String);
+ method public static int noteProxyOp(android.content.Context, java.lang.String, java.lang.String);
+ method public static java.lang.String permissionToOp(java.lang.String);
+ field public static final int MODE_ALLOWED = 0; // 0x0
+ field public static final int MODE_DEFAULT = 3; // 0x3
+ field public static final int MODE_IGNORED = 1; // 0x1
+ }
+
+ public final class BundleCompat {
+ method public static android.os.IBinder getBinder(android.os.Bundle, java.lang.String);
+ method public static void putBinder(android.os.Bundle, java.lang.String, android.os.IBinder);
+ }
+
+ public abstract class JobIntentService extends android.app.Service {
+ ctor public JobIntentService();
+ method public static void enqueueWork(android.content.Context, java.lang.Class, int, android.content.Intent);
+ method public static void enqueueWork(android.content.Context, android.content.ComponentName, int, android.content.Intent);
+ method public boolean isStopped();
+ method public android.os.IBinder onBind(android.content.Intent);
+ method protected abstract void onHandleWork(android.content.Intent);
+ method public boolean onStopCurrentWork();
+ method public void setInterruptIfStopped(boolean);
+ }
+
+ public class NotificationCompat {
+ ctor public NotificationCompat();
+ method public static android.support.v4.app.NotificationCompat.Action getAction(android.app.Notification, int);
+ method public static int getActionCount(android.app.Notification);
+ method public static int getBadgeIconType(android.app.Notification);
+ method public static java.lang.String getCategory(android.app.Notification);
+ method public static java.lang.String getChannelId(android.app.Notification);
+ method public static android.os.Bundle getExtras(android.app.Notification);
+ method public static java.lang.String getGroup(android.app.Notification);
+ method public static int getGroupAlertBehavior(android.app.Notification);
+ method public static boolean getLocalOnly(android.app.Notification);
+ method public static java.lang.String getShortcutId(android.app.Notification);
+ method public static java.lang.String getSortKey(android.app.Notification);
+ method public static long getTimeoutAfter(android.app.Notification);
+ method public static boolean isGroupSummary(android.app.Notification);
+ field public static final int BADGE_ICON_LARGE = 2; // 0x2
+ field public static final int BADGE_ICON_NONE = 0; // 0x0
+ field public static final int BADGE_ICON_SMALL = 1; // 0x1
+ field public static final java.lang.String CATEGORY_ALARM = "alarm";
+ field public static final java.lang.String CATEGORY_CALL = "call";
+ field public static final java.lang.String CATEGORY_EMAIL = "email";
+ field public static final java.lang.String CATEGORY_ERROR = "err";
+ field public static final java.lang.String CATEGORY_EVENT = "event";
+ field public static final java.lang.String CATEGORY_MESSAGE = "msg";
+ field public static final java.lang.String CATEGORY_PROGRESS = "progress";
+ field public static final java.lang.String CATEGORY_PROMO = "promo";
+ field public static final java.lang.String CATEGORY_RECOMMENDATION = "recommendation";
+ field public static final java.lang.String CATEGORY_REMINDER = "reminder";
+ field public static final java.lang.String CATEGORY_SERVICE = "service";
+ field public static final java.lang.String CATEGORY_SOCIAL = "social";
+ field public static final java.lang.String CATEGORY_STATUS = "status";
+ field public static final java.lang.String CATEGORY_SYSTEM = "sys";
+ field public static final java.lang.String CATEGORY_TRANSPORT = "transport";
+ field public static final int COLOR_DEFAULT = 0; // 0x0
+ field public static final int DEFAULT_ALL = -1; // 0xffffffff
+ field public static final int DEFAULT_LIGHTS = 4; // 0x4
+ field public static final int DEFAULT_SOUND = 1; // 0x1
+ field public static final int DEFAULT_VIBRATE = 2; // 0x2
+ field public static final java.lang.String EXTRA_AUDIO_CONTENTS_URI = "android.audioContents";
+ field public static final java.lang.String EXTRA_BACKGROUND_IMAGE_URI = "android.backgroundImageUri";
+ field public static final java.lang.String EXTRA_BIG_TEXT = "android.bigText";
+ field public static final java.lang.String EXTRA_COMPACT_ACTIONS = "android.compactActions";
+ field public static final java.lang.String EXTRA_CONVERSATION_TITLE = "android.conversationTitle";
+ field public static final java.lang.String EXTRA_INFO_TEXT = "android.infoText";
+ field public static final java.lang.String EXTRA_LARGE_ICON = "android.largeIcon";
+ field public static final java.lang.String EXTRA_LARGE_ICON_BIG = "android.largeIcon.big";
+ field public static final java.lang.String EXTRA_MEDIA_SESSION = "android.mediaSession";
+ field public static final java.lang.String EXTRA_MESSAGES = "android.messages";
+ field public static final java.lang.String EXTRA_PEOPLE = "android.people";
+ field public static final java.lang.String EXTRA_PICTURE = "android.picture";
+ field public static final java.lang.String EXTRA_PROGRESS = "android.progress";
+ field public static final java.lang.String EXTRA_PROGRESS_INDETERMINATE = "android.progressIndeterminate";
+ field public static final java.lang.String EXTRA_PROGRESS_MAX = "android.progressMax";
+ field public static final java.lang.String EXTRA_REMOTE_INPUT_HISTORY = "android.remoteInputHistory";
+ field public static final java.lang.String EXTRA_SELF_DISPLAY_NAME = "android.selfDisplayName";
+ field public static final java.lang.String EXTRA_SHOW_CHRONOMETER = "android.showChronometer";
+ field public static final java.lang.String EXTRA_SHOW_WHEN = "android.showWhen";
+ field public static final java.lang.String EXTRA_SMALL_ICON = "android.icon";
+ field public static final java.lang.String EXTRA_SUB_TEXT = "android.subText";
+ field public static final java.lang.String EXTRA_SUMMARY_TEXT = "android.summaryText";
+ field public static final java.lang.String EXTRA_TEMPLATE = "android.template";
+ field public static final java.lang.String EXTRA_TEXT = "android.text";
+ field public static final java.lang.String EXTRA_TEXT_LINES = "android.textLines";
+ field public static final java.lang.String EXTRA_TITLE = "android.title";
+ field public static final java.lang.String EXTRA_TITLE_BIG = "android.title.big";
+ field public static final int FLAG_AUTO_CANCEL = 16; // 0x10
+ field public static final int FLAG_FOREGROUND_SERVICE = 64; // 0x40
+ field public static final int FLAG_GROUP_SUMMARY = 512; // 0x200
+ field public static final deprecated int FLAG_HIGH_PRIORITY = 128; // 0x80
+ field public static final int FLAG_INSISTENT = 4; // 0x4
+ field public static final int FLAG_LOCAL_ONLY = 256; // 0x100
+ field public static final int FLAG_NO_CLEAR = 32; // 0x20
+ field public static final int FLAG_ONGOING_EVENT = 2; // 0x2
+ field public static final int FLAG_ONLY_ALERT_ONCE = 8; // 0x8
+ field public static final int FLAG_SHOW_LIGHTS = 1; // 0x1
+ field public static final int GROUP_ALERT_ALL = 0; // 0x0
+ field public static final int GROUP_ALERT_CHILDREN = 2; // 0x2
+ field public static final int GROUP_ALERT_SUMMARY = 1; // 0x1
+ field public static final int PRIORITY_DEFAULT = 0; // 0x0
+ field public static final int PRIORITY_HIGH = 1; // 0x1
+ field public static final int PRIORITY_LOW = -1; // 0xffffffff
+ field public static final int PRIORITY_MAX = 2; // 0x2
+ field public static final int PRIORITY_MIN = -2; // 0xfffffffe
+ field public static final int STREAM_DEFAULT = -1; // 0xffffffff
+ field public static final int VISIBILITY_PRIVATE = 0; // 0x0
+ field public static final int VISIBILITY_PUBLIC = 1; // 0x1
+ field public static final int VISIBILITY_SECRET = -1; // 0xffffffff
+ }
+
+ public static class NotificationCompat.Action {
+ ctor public NotificationCompat.Action(int, java.lang.CharSequence, android.app.PendingIntent);
+ method public android.app.PendingIntent getActionIntent();
+ method public boolean getAllowGeneratedReplies();
+ method public android.support.v4.app.RemoteInput[] getDataOnlyRemoteInputs();
+ method public android.os.Bundle getExtras();
+ method public int getIcon();
+ method public android.support.v4.app.RemoteInput[] getRemoteInputs();
+ method public java.lang.CharSequence getTitle();
+ field public android.app.PendingIntent actionIntent;
+ field public int icon;
+ field public java.lang.CharSequence title;
+ }
+
+ public static final class NotificationCompat.Action.Builder {
+ ctor public NotificationCompat.Action.Builder(int, java.lang.CharSequence, android.app.PendingIntent);
+ ctor public NotificationCompat.Action.Builder(android.support.v4.app.NotificationCompat.Action);
+ method public android.support.v4.app.NotificationCompat.Action.Builder addExtras(android.os.Bundle);
+ method public android.support.v4.app.NotificationCompat.Action.Builder addRemoteInput(android.support.v4.app.RemoteInput);
+ method public android.support.v4.app.NotificationCompat.Action build();
+ method public android.support.v4.app.NotificationCompat.Action.Builder extend(android.support.v4.app.NotificationCompat.Action.Extender);
+ method public android.os.Bundle getExtras();
+ method public android.support.v4.app.NotificationCompat.Action.Builder setAllowGeneratedReplies(boolean);
+ }
+
+ public static abstract interface NotificationCompat.Action.Extender {
+ method public abstract android.support.v4.app.NotificationCompat.Action.Builder extend(android.support.v4.app.NotificationCompat.Action.Builder);
+ }
+
+ public static final class NotificationCompat.Action.WearableExtender implements android.support.v4.app.NotificationCompat.Action.Extender {
+ ctor public NotificationCompat.Action.WearableExtender();
+ ctor public NotificationCompat.Action.WearableExtender(android.support.v4.app.NotificationCompat.Action);
+ method public android.support.v4.app.NotificationCompat.Action.WearableExtender clone();
+ method public android.support.v4.app.NotificationCompat.Action.Builder extend(android.support.v4.app.NotificationCompat.Action.Builder);
+ method public java.lang.CharSequence getCancelLabel();
+ method public java.lang.CharSequence getConfirmLabel();
+ method public boolean getHintDisplayActionInline();
+ method public boolean getHintLaunchesActivity();
+ method public java.lang.CharSequence getInProgressLabel();
+ method public boolean isAvailableOffline();
+ method public android.support.v4.app.NotificationCompat.Action.WearableExtender setAvailableOffline(boolean);
+ method public android.support.v4.app.NotificationCompat.Action.WearableExtender setCancelLabel(java.lang.CharSequence);
+ method public android.support.v4.app.NotificationCompat.Action.WearableExtender setConfirmLabel(java.lang.CharSequence);
+ method public android.support.v4.app.NotificationCompat.Action.WearableExtender setHintDisplayActionInline(boolean);
+ method public android.support.v4.app.NotificationCompat.Action.WearableExtender setHintLaunchesActivity(boolean);
+ method public android.support.v4.app.NotificationCompat.Action.WearableExtender setInProgressLabel(java.lang.CharSequence);
+ }
+
+ public static class NotificationCompat.BigPictureStyle extends android.support.v4.app.NotificationCompat.Style {
+ ctor public NotificationCompat.BigPictureStyle();
+ ctor public NotificationCompat.BigPictureStyle(android.support.v4.app.NotificationCompat.Builder);
+ method public android.support.v4.app.NotificationCompat.BigPictureStyle bigLargeIcon(android.graphics.Bitmap);
+ method public android.support.v4.app.NotificationCompat.BigPictureStyle bigPicture(android.graphics.Bitmap);
+ method public android.support.v4.app.NotificationCompat.BigPictureStyle setBigContentTitle(java.lang.CharSequence);
+ method public android.support.v4.app.NotificationCompat.BigPictureStyle setSummaryText(java.lang.CharSequence);
+ }
+
+ public static class NotificationCompat.BigTextStyle extends android.support.v4.app.NotificationCompat.Style {
+ ctor public NotificationCompat.BigTextStyle();
+ ctor public NotificationCompat.BigTextStyle(android.support.v4.app.NotificationCompat.Builder);
+ method public android.support.v4.app.NotificationCompat.BigTextStyle bigText(java.lang.CharSequence);
+ method public android.support.v4.app.NotificationCompat.BigTextStyle setBigContentTitle(java.lang.CharSequence);
+ method public android.support.v4.app.NotificationCompat.BigTextStyle setSummaryText(java.lang.CharSequence);
+ }
+
+ public static class NotificationCompat.Builder {
+ ctor public NotificationCompat.Builder(android.content.Context, java.lang.String);
+ ctor public deprecated NotificationCompat.Builder(android.content.Context);
+ method public android.support.v4.app.NotificationCompat.Builder addAction(int, java.lang.CharSequence, android.app.PendingIntent);
+ method public android.support.v4.app.NotificationCompat.Builder addAction(android.support.v4.app.NotificationCompat.Action);
+ method public android.support.v4.app.NotificationCompat.Builder addExtras(android.os.Bundle);
+ method public android.support.v4.app.NotificationCompat.Builder addPerson(java.lang.String);
+ method public android.app.Notification build();
+ method public android.support.v4.app.NotificationCompat.Builder extend(android.support.v4.app.NotificationCompat.Extender);
+ method public android.os.Bundle getExtras();
+ method public deprecated android.app.Notification getNotification();
+ method protected static java.lang.CharSequence limitCharSequenceLength(java.lang.CharSequence);
+ method public android.support.v4.app.NotificationCompat.Builder setAutoCancel(boolean);
+ method public android.support.v4.app.NotificationCompat.Builder setBadgeIconType(int);
+ method public android.support.v4.app.NotificationCompat.Builder setCategory(java.lang.String);
+ method public android.support.v4.app.NotificationCompat.Builder setChannelId(java.lang.String);
+ method public android.support.v4.app.NotificationCompat.Builder setColor(int);
+ method public android.support.v4.app.NotificationCompat.Builder setColorized(boolean);
+ method public android.support.v4.app.NotificationCompat.Builder setContent(android.widget.RemoteViews);
+ method public android.support.v4.app.NotificationCompat.Builder setContentInfo(java.lang.CharSequence);
+ method public android.support.v4.app.NotificationCompat.Builder setContentIntent(android.app.PendingIntent);
+ method public android.support.v4.app.NotificationCompat.Builder setContentText(java.lang.CharSequence);
+ method public android.support.v4.app.NotificationCompat.Builder setContentTitle(java.lang.CharSequence);
+ method public android.support.v4.app.NotificationCompat.Builder setCustomBigContentView(android.widget.RemoteViews);
+ method public android.support.v4.app.NotificationCompat.Builder setCustomContentView(android.widget.RemoteViews);
+ method public android.support.v4.app.NotificationCompat.Builder setCustomHeadsUpContentView(android.widget.RemoteViews);
+ method public android.support.v4.app.NotificationCompat.Builder setDefaults(int);
+ method public android.support.v4.app.NotificationCompat.Builder setDeleteIntent(android.app.PendingIntent);
+ method public android.support.v4.app.NotificationCompat.Builder setExtras(android.os.Bundle);
+ method public android.support.v4.app.NotificationCompat.Builder setFullScreenIntent(android.app.PendingIntent, boolean);
+ method public android.support.v4.app.NotificationCompat.Builder setGroup(java.lang.String);
+ method public android.support.v4.app.NotificationCompat.Builder setGroupAlertBehavior(int);
+ method public android.support.v4.app.NotificationCompat.Builder setGroupSummary(boolean);
+ method public android.support.v4.app.NotificationCompat.Builder setLargeIcon(android.graphics.Bitmap);
+ method public android.support.v4.app.NotificationCompat.Builder setLights(int, int, int);
+ method public android.support.v4.app.NotificationCompat.Builder setLocalOnly(boolean);
+ method public android.support.v4.app.NotificationCompat.Builder setNumber(int);
+ method public android.support.v4.app.NotificationCompat.Builder setOngoing(boolean);
+ method public android.support.v4.app.NotificationCompat.Builder setOnlyAlertOnce(boolean);
+ method public android.support.v4.app.NotificationCompat.Builder setPriority(int);
+ method public android.support.v4.app.NotificationCompat.Builder setProgress(int, int, boolean);
+ method public android.support.v4.app.NotificationCompat.Builder setPublicVersion(android.app.Notification);
+ method public android.support.v4.app.NotificationCompat.Builder setRemoteInputHistory(java.lang.CharSequence[]);
+ method public android.support.v4.app.NotificationCompat.Builder setShortcutId(java.lang.String);
+ method public android.support.v4.app.NotificationCompat.Builder setShowWhen(boolean);
+ method public android.support.v4.app.NotificationCompat.Builder setSmallIcon(int);
+ method public android.support.v4.app.NotificationCompat.Builder setSmallIcon(int, int);
+ method public android.support.v4.app.NotificationCompat.Builder setSortKey(java.lang.String);
+ method public android.support.v4.app.NotificationCompat.Builder setSound(android.net.Uri);
+ method public android.support.v4.app.NotificationCompat.Builder setSound(android.net.Uri, int);
+ method public android.support.v4.app.NotificationCompat.Builder setStyle(android.support.v4.app.NotificationCompat.Style);
+ method public android.support.v4.app.NotificationCompat.Builder setSubText(java.lang.CharSequence);
+ method public android.support.v4.app.NotificationCompat.Builder setTicker(java.lang.CharSequence);
+ method public android.support.v4.app.NotificationCompat.Builder setTicker(java.lang.CharSequence, android.widget.RemoteViews);
+ method public android.support.v4.app.NotificationCompat.Builder setTimeoutAfter(long);
+ method public android.support.v4.app.NotificationCompat.Builder setUsesChronometer(boolean);
+ method public android.support.v4.app.NotificationCompat.Builder setVibrate(long[]);
+ method public android.support.v4.app.NotificationCompat.Builder setVisibility(int);
+ method public android.support.v4.app.NotificationCompat.Builder setWhen(long);
+ field public java.util.ArrayList<java.lang.String> mPeople;
+ }
+
+ public static final class NotificationCompat.CarExtender implements android.support.v4.app.NotificationCompat.Extender {
+ ctor public NotificationCompat.CarExtender();
+ ctor public NotificationCompat.CarExtender(android.app.Notification);
+ method public android.support.v4.app.NotificationCompat.Builder extend(android.support.v4.app.NotificationCompat.Builder);
+ method public int getColor();
+ method public android.graphics.Bitmap getLargeIcon();
+ method public android.support.v4.app.NotificationCompat.CarExtender.UnreadConversation getUnreadConversation();
+ method public android.support.v4.app.NotificationCompat.CarExtender setColor(int);
+ method public android.support.v4.app.NotificationCompat.CarExtender setLargeIcon(android.graphics.Bitmap);
+ method public android.support.v4.app.NotificationCompat.CarExtender setUnreadConversation(android.support.v4.app.NotificationCompat.CarExtender.UnreadConversation);
+ }
+
+ public static class NotificationCompat.CarExtender.UnreadConversation {
+ method public long getLatestTimestamp();
+ method public java.lang.String[] getMessages();
+ method public java.lang.String getParticipant();
+ method public java.lang.String[] getParticipants();
+ method public android.app.PendingIntent getReadPendingIntent();
+ method public android.support.v4.app.RemoteInput getRemoteInput();
+ method public android.app.PendingIntent getReplyPendingIntent();
+ }
+
+ public static class NotificationCompat.CarExtender.UnreadConversation.Builder {
+ ctor public NotificationCompat.CarExtender.UnreadConversation.Builder(java.lang.String);
+ method public android.support.v4.app.NotificationCompat.CarExtender.UnreadConversation.Builder addMessage(java.lang.String);
+ method public android.support.v4.app.NotificationCompat.CarExtender.UnreadConversation build();
+ method public android.support.v4.app.NotificationCompat.CarExtender.UnreadConversation.Builder setLatestTimestamp(long);
+ method public android.support.v4.app.NotificationCompat.CarExtender.UnreadConversation.Builder setReadPendingIntent(android.app.PendingIntent);
+ method public android.support.v4.app.NotificationCompat.CarExtender.UnreadConversation.Builder setReplyAction(android.app.PendingIntent, android.support.v4.app.RemoteInput);
+ }
+
+ public static class NotificationCompat.DecoratedCustomViewStyle extends android.support.v4.app.NotificationCompat.Style {
+ ctor public NotificationCompat.DecoratedCustomViewStyle();
+ }
+
+ public static abstract interface NotificationCompat.Extender {
+ method public abstract android.support.v4.app.NotificationCompat.Builder extend(android.support.v4.app.NotificationCompat.Builder);
+ }
+
+ public static class NotificationCompat.InboxStyle extends android.support.v4.app.NotificationCompat.Style {
+ ctor public NotificationCompat.InboxStyle();
+ ctor public NotificationCompat.InboxStyle(android.support.v4.app.NotificationCompat.Builder);
+ method public android.support.v4.app.NotificationCompat.InboxStyle addLine(java.lang.CharSequence);
+ method public android.support.v4.app.NotificationCompat.InboxStyle setBigContentTitle(java.lang.CharSequence);
+ method public android.support.v4.app.NotificationCompat.InboxStyle setSummaryText(java.lang.CharSequence);
+ }
+
+ public static class NotificationCompat.MessagingStyle extends android.support.v4.app.NotificationCompat.Style {
+ ctor public NotificationCompat.MessagingStyle(java.lang.CharSequence);
+ method public void addCompatExtras(android.os.Bundle);
+ method public android.support.v4.app.NotificationCompat.MessagingStyle addMessage(java.lang.CharSequence, long, java.lang.CharSequence);
+ method public android.support.v4.app.NotificationCompat.MessagingStyle addMessage(android.support.v4.app.NotificationCompat.MessagingStyle.Message);
+ method public static android.support.v4.app.NotificationCompat.MessagingStyle extractMessagingStyleFromNotification(android.app.Notification);
+ method public java.lang.CharSequence getConversationTitle();
+ method public java.util.List<android.support.v4.app.NotificationCompat.MessagingStyle.Message> getMessages();
+ method public java.lang.CharSequence getUserDisplayName();
+ method public android.support.v4.app.NotificationCompat.MessagingStyle setConversationTitle(java.lang.CharSequence);
+ field public static final int MAXIMUM_RETAINED_MESSAGES = 25; // 0x19
+ }
+
+ public static final class NotificationCompat.MessagingStyle.Message {
+ ctor public NotificationCompat.MessagingStyle.Message(java.lang.CharSequence, long, java.lang.CharSequence);
+ method public java.lang.String getDataMimeType();
+ method public android.net.Uri getDataUri();
+ method public android.os.Bundle getExtras();
+ method public java.lang.CharSequence getSender();
+ method public java.lang.CharSequence getText();
+ method public long getTimestamp();
+ method public android.support.v4.app.NotificationCompat.MessagingStyle.Message setData(java.lang.String, android.net.Uri);
+ }
+
+ public static abstract class NotificationCompat.Style {
+ ctor public NotificationCompat.Style();
+ method public android.app.Notification build();
+ method public void setBuilder(android.support.v4.app.NotificationCompat.Builder);
+ }
+
+ public static final class NotificationCompat.WearableExtender implements android.support.v4.app.NotificationCompat.Extender {
+ ctor public NotificationCompat.WearableExtender();
+ ctor public NotificationCompat.WearableExtender(android.app.Notification);
+ method public android.support.v4.app.NotificationCompat.WearableExtender addAction(android.support.v4.app.NotificationCompat.Action);
+ method public android.support.v4.app.NotificationCompat.WearableExtender addActions(java.util.List<android.support.v4.app.NotificationCompat.Action>);
+ method public android.support.v4.app.NotificationCompat.WearableExtender addPage(android.app.Notification);
+ method public android.support.v4.app.NotificationCompat.WearableExtender addPages(java.util.List<android.app.Notification>);
+ method public android.support.v4.app.NotificationCompat.WearableExtender clearActions();
+ method public android.support.v4.app.NotificationCompat.WearableExtender clearPages();
+ method public android.support.v4.app.NotificationCompat.WearableExtender clone();
+ method public android.support.v4.app.NotificationCompat.Builder extend(android.support.v4.app.NotificationCompat.Builder);
+ method public java.util.List<android.support.v4.app.NotificationCompat.Action> getActions();
+ method public android.graphics.Bitmap getBackground();
+ method public java.lang.String getBridgeTag();
+ method public int getContentAction();
+ method public int getContentIcon();
+ method public int getContentIconGravity();
+ method public boolean getContentIntentAvailableOffline();
+ method public int getCustomContentHeight();
+ method public int getCustomSizePreset();
+ method public java.lang.String getDismissalId();
+ method public android.app.PendingIntent getDisplayIntent();
+ method public int getGravity();
+ method public boolean getHintAmbientBigPicture();
+ method public boolean getHintAvoidBackgroundClipping();
+ method public boolean getHintContentIntentLaunchesActivity();
+ method public boolean getHintHideIcon();
+ method public int getHintScreenTimeout();
+ method public boolean getHintShowBackgroundOnly();
+ method public java.util.List<android.app.Notification> getPages();
+ method public boolean getStartScrollBottom();
+ method public android.support.v4.app.NotificationCompat.WearableExtender setBackground(android.graphics.Bitmap);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setBridgeTag(java.lang.String);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setContentAction(int);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setContentIcon(int);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setContentIconGravity(int);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setContentIntentAvailableOffline(boolean);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setCustomContentHeight(int);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setCustomSizePreset(int);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setDismissalId(java.lang.String);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setDisplayIntent(android.app.PendingIntent);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setGravity(int);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setHintAmbientBigPicture(boolean);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setHintAvoidBackgroundClipping(boolean);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setHintContentIntentLaunchesActivity(boolean);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setHintHideIcon(boolean);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setHintScreenTimeout(int);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setHintShowBackgroundOnly(boolean);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setStartScrollBottom(boolean);
+ field public static final int SCREEN_TIMEOUT_LONG = -1; // 0xffffffff
+ field public static final int SCREEN_TIMEOUT_SHORT = 0; // 0x0
+ field public static final int SIZE_DEFAULT = 0; // 0x0
+ field public static final int SIZE_FULL_SCREEN = 5; // 0x5
+ field public static final int SIZE_LARGE = 4; // 0x4
+ field public static final int SIZE_MEDIUM = 3; // 0x3
+ field public static final int SIZE_SMALL = 2; // 0x2
+ field public static final int SIZE_XSMALL = 1; // 0x1
+ field public static final int UNSET_ACTION_INDEX = -1; // 0xffffffff
+ }
+
+ public final class NotificationCompatExtras {
+ field public static final java.lang.String EXTRA_ACTION_EXTRAS = "android.support.actionExtras";
+ field public static final java.lang.String EXTRA_GROUP_KEY = "android.support.groupKey";
+ field public static final java.lang.String EXTRA_GROUP_SUMMARY = "android.support.isGroupSummary";
+ field public static final java.lang.String EXTRA_LOCAL_ONLY = "android.support.localOnly";
+ field public static final java.lang.String EXTRA_REMOTE_INPUTS = "android.support.remoteInputs";
+ field public static final java.lang.String EXTRA_SORT_KEY = "android.support.sortKey";
+ }
+
+ public abstract class NotificationCompatSideChannelService extends android.app.Service {
+ ctor public NotificationCompatSideChannelService();
+ method public abstract void cancel(java.lang.String, int, java.lang.String);
+ method public abstract void cancelAll(java.lang.String);
+ method public abstract void notify(java.lang.String, int, java.lang.String, android.app.Notification);
+ method public android.os.IBinder onBind(android.content.Intent);
+ }
+
+ public final class NotificationManagerCompat {
+ method public boolean areNotificationsEnabled();
+ method public void cancel(int);
+ method public void cancel(java.lang.String, int);
+ method public void cancelAll();
+ method public static android.support.v4.app.NotificationManagerCompat from(android.content.Context);
+ method public static java.util.Set<java.lang.String> getEnabledListenerPackages(android.content.Context);
+ method public int getImportance();
+ method public void notify(int, android.app.Notification);
+ method public void notify(java.lang.String, int, android.app.Notification);
+ field public static final java.lang.String ACTION_BIND_SIDE_CHANNEL = "android.support.BIND_NOTIFICATION_SIDE_CHANNEL";
+ field public static final java.lang.String EXTRA_USE_SIDE_CHANNEL = "android.support.useSideChannel";
+ field public static final int IMPORTANCE_DEFAULT = 3; // 0x3
+ field public static final int IMPORTANCE_HIGH = 4; // 0x4
+ field public static final int IMPORTANCE_LOW = 2; // 0x2
+ field public static final int IMPORTANCE_MAX = 5; // 0x5
+ field public static final int IMPORTANCE_MIN = 1; // 0x1
+ field public static final int IMPORTANCE_NONE = 0; // 0x0
+ field public static final int IMPORTANCE_UNSPECIFIED = -1000; // 0xfffffc18
+ }
+
+ public final class RemoteInput extends android.support.v4.app.RemoteInputCompatBase.RemoteInput {
+ method public static void addDataResultToIntent(android.support.v4.app.RemoteInput, android.content.Intent, java.util.Map<java.lang.String, android.net.Uri>);
+ method public static void addResultsToIntent(android.support.v4.app.RemoteInput[], android.content.Intent, android.os.Bundle);
+ method public boolean getAllowFreeFormInput();
+ method public java.util.Set<java.lang.String> getAllowedDataTypes();
+ method public java.lang.CharSequence[] getChoices();
+ method public static java.util.Map<java.lang.String, android.net.Uri> getDataResultsFromIntent(android.content.Intent, java.lang.String);
+ method public android.os.Bundle getExtras();
+ method public java.lang.CharSequence getLabel();
+ method public java.lang.String getResultKey();
+ method public static android.os.Bundle getResultsFromIntent(android.content.Intent);
+ method public boolean isDataOnly();
+ field public static final java.lang.String EXTRA_RESULTS_DATA = "android.remoteinput.resultsData";
+ field public static final java.lang.String RESULTS_CLIP_LABEL = "android.remoteinput.results";
+ }
+
+ public static final class RemoteInput.Builder {
+ ctor public RemoteInput.Builder(java.lang.String);
+ method public android.support.v4.app.RemoteInput.Builder addExtras(android.os.Bundle);
+ method public android.support.v4.app.RemoteInput build();
+ method public android.os.Bundle getExtras();
+ method public android.support.v4.app.RemoteInput.Builder setAllowDataType(java.lang.String, boolean);
+ method public android.support.v4.app.RemoteInput.Builder setAllowFreeFormInput(boolean);
+ method public android.support.v4.app.RemoteInput.Builder setChoices(java.lang.CharSequence[]);
+ method public android.support.v4.app.RemoteInput.Builder setLabel(java.lang.CharSequence);
+ }
+
+ deprecated class RemoteInputCompatBase {
+ }
+
+ public static abstract class RemoteInputCompatBase.RemoteInput {
+ ctor public RemoteInputCompatBase.RemoteInput();
+ method protected abstract boolean getAllowFreeFormInput();
+ method protected abstract java.util.Set<java.lang.String> getAllowedDataTypes();
+ method protected abstract java.lang.CharSequence[] getChoices();
+ method protected abstract android.os.Bundle getExtras();
+ method protected abstract java.lang.CharSequence getLabel();
+ method protected abstract java.lang.String getResultKey();
+ }
+
+ public final class ServiceCompat {
+ method public static void stopForeground(android.app.Service, int);
+ field public static final int START_STICKY = 1; // 0x1
+ field public static final int STOP_FOREGROUND_DETACH = 2; // 0x2
+ field public static final int STOP_FOREGROUND_REMOVE = 1; // 0x1
+ }
+
+ public final class ShareCompat {
+ method public static void configureMenuItem(android.view.MenuItem, android.support.v4.app.ShareCompat.IntentBuilder);
+ method public static void configureMenuItem(android.view.Menu, int, android.support.v4.app.ShareCompat.IntentBuilder);
+ method public static android.content.ComponentName getCallingActivity(android.app.Activity);
+ method public static java.lang.String getCallingPackage(android.app.Activity);
+ field public static final java.lang.String EXTRA_CALLING_ACTIVITY = "android.support.v4.app.EXTRA_CALLING_ACTIVITY";
+ field public static final java.lang.String EXTRA_CALLING_PACKAGE = "android.support.v4.app.EXTRA_CALLING_PACKAGE";
+ }
+
+ public static class ShareCompat.IntentBuilder {
+ method public android.support.v4.app.ShareCompat.IntentBuilder addEmailBcc(java.lang.String);
+ method public android.support.v4.app.ShareCompat.IntentBuilder addEmailBcc(java.lang.String[]);
+ method public android.support.v4.app.ShareCompat.IntentBuilder addEmailCc(java.lang.String);
+ method public android.support.v4.app.ShareCompat.IntentBuilder addEmailCc(java.lang.String[]);
+ method public android.support.v4.app.ShareCompat.IntentBuilder addEmailTo(java.lang.String);
+ method public android.support.v4.app.ShareCompat.IntentBuilder addEmailTo(java.lang.String[]);
+ method public android.support.v4.app.ShareCompat.IntentBuilder addStream(android.net.Uri);
+ method public android.content.Intent createChooserIntent();
+ method public static android.support.v4.app.ShareCompat.IntentBuilder from(android.app.Activity);
+ method public android.content.Intent getIntent();
+ method public android.support.v4.app.ShareCompat.IntentBuilder setChooserTitle(java.lang.CharSequence);
+ method public android.support.v4.app.ShareCompat.IntentBuilder setChooserTitle(int);
+ method public android.support.v4.app.ShareCompat.IntentBuilder setEmailBcc(java.lang.String[]);
+ method public android.support.v4.app.ShareCompat.IntentBuilder setEmailCc(java.lang.String[]);
+ method public android.support.v4.app.ShareCompat.IntentBuilder setEmailTo(java.lang.String[]);
+ method public android.support.v4.app.ShareCompat.IntentBuilder setHtmlText(java.lang.String);
+ method public android.support.v4.app.ShareCompat.IntentBuilder setStream(android.net.Uri);
+ method public android.support.v4.app.ShareCompat.IntentBuilder setSubject(java.lang.String);
+ method public android.support.v4.app.ShareCompat.IntentBuilder setText(java.lang.CharSequence);
+ method public android.support.v4.app.ShareCompat.IntentBuilder setType(java.lang.String);
+ method public void startChooser();
+ }
+
+ public static class ShareCompat.IntentReader {
+ method public static android.support.v4.app.ShareCompat.IntentReader from(android.app.Activity);
+ method public android.content.ComponentName getCallingActivity();
+ method public android.graphics.drawable.Drawable getCallingActivityIcon();
+ method public android.graphics.drawable.Drawable getCallingApplicationIcon();
+ method public java.lang.CharSequence getCallingApplicationLabel();
+ method public java.lang.String getCallingPackage();
+ method public java.lang.String[] getEmailBcc();
+ method public java.lang.String[] getEmailCc();
+ method public java.lang.String[] getEmailTo();
+ method public java.lang.String getHtmlText();
+ method public android.net.Uri getStream();
+ method public android.net.Uri getStream(int);
+ method public int getStreamCount();
+ method public java.lang.String getSubject();
+ method public java.lang.CharSequence getText();
+ method public java.lang.String getType();
+ method public boolean isMultipleShare();
+ method public boolean isShareIntent();
+ method public boolean isSingleShare();
+ }
+
+ public abstract class SharedElementCallback {
+ ctor public SharedElementCallback();
+ method public android.os.Parcelable onCaptureSharedElementSnapshot(android.view.View, android.graphics.Matrix, android.graphics.RectF);
+ method public android.view.View onCreateSnapshotView(android.content.Context, android.os.Parcelable);
+ method public void onMapSharedElements(java.util.List<java.lang.String>, java.util.Map<java.lang.String, android.view.View>);
+ method public void onRejectSharedElements(java.util.List<android.view.View>);
+ method public void onSharedElementEnd(java.util.List<java.lang.String>, java.util.List<android.view.View>, java.util.List<android.view.View>);
+ method public void onSharedElementStart(java.util.List<java.lang.String>, java.util.List<android.view.View>, java.util.List<android.view.View>);
+ method public void onSharedElementsArrived(java.util.List<java.lang.String>, java.util.List<android.view.View>, android.support.v4.app.SharedElementCallback.OnSharedElementsReadyListener);
+ }
+
+ public static abstract interface SharedElementCallback.OnSharedElementsReadyListener {
+ method public abstract void onSharedElementsReady();
+ }
+
+}
+
+package android.support.v4.content {
+
+ public final class ContentResolverCompat {
+ method public static android.database.Cursor query(android.content.ContentResolver, android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, android.support.v4.os.CancellationSignal);
+ }
+
+ public class ContextCompat {
+ ctor protected ContextCompat();
+ method public static int checkSelfPermission(android.content.Context, java.lang.String);
+ method public static android.content.Context createDeviceProtectedStorageContext(android.content.Context);
+ method public static java.io.File getCodeCacheDir(android.content.Context);
+ method public static final int getColor(android.content.Context, int);
+ method public static final android.content.res.ColorStateList getColorStateList(android.content.Context, int);
+ method public static java.io.File getDataDir(android.content.Context);
+ method public static final android.graphics.drawable.Drawable getDrawable(android.content.Context, int);
+ method public static java.io.File[] getExternalCacheDirs(android.content.Context);
+ method public static java.io.File[] getExternalFilesDirs(android.content.Context, java.lang.String);
+ method public static final java.io.File getNoBackupFilesDir(android.content.Context);
+ method public static java.io.File[] getObbDirs(android.content.Context);
+ method public static boolean isDeviceProtectedStorage(android.content.Context);
+ method public static boolean startActivities(android.content.Context, android.content.Intent[]);
+ method public static boolean startActivities(android.content.Context, android.content.Intent[], android.os.Bundle);
+ method public static void startActivity(android.content.Context, android.content.Intent, android.os.Bundle);
+ method public static void startForegroundService(android.content.Context, android.content.Intent);
+ }
+
+ public final class IntentCompat {
+ method public static deprecated android.content.Intent makeMainActivity(android.content.ComponentName);
+ method public static android.content.Intent makeMainSelectorActivity(java.lang.String, java.lang.String);
+ method public static deprecated android.content.Intent makeRestartActivityTask(android.content.ComponentName);
+ field public static final deprecated java.lang.String ACTION_EXTERNAL_APPLICATIONS_AVAILABLE = "android.intent.action.EXTERNAL_APPLICATIONS_AVAILABLE";
+ field public static final deprecated java.lang.String ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE = "android.intent.action.EXTERNAL_APPLICATIONS_UNAVAILABLE";
+ field public static final java.lang.String CATEGORY_LEANBACK_LAUNCHER = "android.intent.category.LEANBACK_LAUNCHER";
+ field public static final deprecated java.lang.String EXTRA_CHANGED_PACKAGE_LIST = "android.intent.extra.changed_package_list";
+ field public static final deprecated java.lang.String EXTRA_CHANGED_UID_LIST = "android.intent.extra.changed_uid_list";
+ field public static final java.lang.String EXTRA_HTML_TEXT = "android.intent.extra.HTML_TEXT";
+ field public static final java.lang.String EXTRA_START_PLAYBACK = "android.intent.extra.START_PLAYBACK";
+ field public static final deprecated int FLAG_ACTIVITY_CLEAR_TASK = 32768; // 0x8000
+ field public static final deprecated int FLAG_ACTIVITY_TASK_ON_HOME = 16384; // 0x4000
+ }
+
+ public final deprecated class ParallelExecutorCompat {
+ method public static deprecated java.util.concurrent.Executor getParallelExecutor();
+ }
+
+ public final class SharedPreferencesCompat {
+ }
+
+ public static final class SharedPreferencesCompat.EditorCompat {
+ method public void apply(android.content.SharedPreferences.Editor);
+ method public static android.support.v4.content.SharedPreferencesCompat.EditorCompat getInstance();
+ }
+
+}
+
+package android.support.v4.content.pm {
+
+ public final class ActivityInfoCompat {
+ field public static final int CONFIG_UI_MODE = 512; // 0x200
+ }
+
+ public class ShortcutInfoCompat {
+ method public android.content.ComponentName getActivity();
+ method public java.lang.CharSequence getDisabledMessage();
+ method public java.lang.String getId();
+ method public android.content.Intent getIntent();
+ method public android.content.Intent[] getIntents();
+ method public java.lang.CharSequence getLongLabel();
+ method public java.lang.CharSequence getShortLabel();
+ }
+
+ public static class ShortcutInfoCompat.Builder {
+ ctor public ShortcutInfoCompat.Builder(android.content.Context, java.lang.String);
+ method public android.support.v4.content.pm.ShortcutInfoCompat build();
+ method public android.support.v4.content.pm.ShortcutInfoCompat.Builder setActivity(android.content.ComponentName);
+ method public android.support.v4.content.pm.ShortcutInfoCompat.Builder setDisabledMessage(java.lang.CharSequence);
+ method public deprecated android.support.v4.content.pm.ShortcutInfoCompat.Builder setIcon(android.graphics.Bitmap);
+ method public deprecated android.support.v4.content.pm.ShortcutInfoCompat.Builder setIcon(int);
+ method public android.support.v4.content.pm.ShortcutInfoCompat.Builder setIcon(android.support.v4.graphics.drawable.IconCompat);
+ method public android.support.v4.content.pm.ShortcutInfoCompat.Builder setIntent(android.content.Intent);
+ method public android.support.v4.content.pm.ShortcutInfoCompat.Builder setIntents(android.content.Intent[]);
+ method public android.support.v4.content.pm.ShortcutInfoCompat.Builder setLongLabel(java.lang.CharSequence);
+ method public android.support.v4.content.pm.ShortcutInfoCompat.Builder setShortLabel(java.lang.CharSequence);
+ }
+
+ public class ShortcutManagerCompat {
+ method public static android.content.Intent createShortcutResultIntent(android.content.Context, android.support.v4.content.pm.ShortcutInfoCompat);
+ method public static boolean isRequestPinShortcutSupported(android.content.Context);
+ method public static boolean requestPinShortcut(android.content.Context, android.support.v4.content.pm.ShortcutInfoCompat, android.content.IntentSender);
+ }
+
+}
+
+package android.support.v4.content.res {
+
+ public final class ConfigurationHelper {
+ method public static int getDensityDpi(android.content.res.Resources);
+ method public static deprecated int getScreenHeightDp(android.content.res.Resources);
+ method public static deprecated int getScreenWidthDp(android.content.res.Resources);
+ method public static deprecated int getSmallestScreenWidthDp(android.content.res.Resources);
+ }
+
+ public final class ResourcesCompat {
+ method public static int getColor(android.content.res.Resources, int, android.content.res.Resources.Theme) throws android.content.res.Resources.NotFoundException;
+ method public static android.content.res.ColorStateList getColorStateList(android.content.res.Resources, int, android.content.res.Resources.Theme) throws android.content.res.Resources.NotFoundException;
+ method public static android.graphics.drawable.Drawable getDrawable(android.content.res.Resources, int, android.content.res.Resources.Theme) throws android.content.res.Resources.NotFoundException;
+ method public static android.graphics.drawable.Drawable getDrawableForDensity(android.content.res.Resources, int, int, android.content.res.Resources.Theme) throws android.content.res.Resources.NotFoundException;
+ method public static android.graphics.Typeface getFont(android.content.Context, int) throws android.content.res.Resources.NotFoundException;
+ }
+
+}
+
+package android.support.v4.database {
+
+ public final class DatabaseUtilsCompat {
+ method public static java.lang.String[] appendSelectionArgs(java.lang.String[], java.lang.String[]);
+ method public static java.lang.String concatenateWhere(java.lang.String, java.lang.String);
+ }
+
+}
+
+package android.support.v4.graphics {
+
+ public final class BitmapCompat {
+ method public static int getAllocationByteCount(android.graphics.Bitmap);
+ method public static boolean hasMipMap(android.graphics.Bitmap);
+ method public static void setHasMipMap(android.graphics.Bitmap, boolean);
+ }
+
+ public final class PaintCompat {
+ method public static boolean hasGlyph(android.graphics.Paint, java.lang.String);
+ }
+
+}
+
+package android.support.v4.graphics.drawable {
+
+ public final class DrawableCompat {
+ method public static void applyTheme(android.graphics.drawable.Drawable, android.content.res.Resources.Theme);
+ method public static boolean canApplyTheme(android.graphics.drawable.Drawable);
+ method public static void clearColorFilter(android.graphics.drawable.Drawable);
+ method public static int getAlpha(android.graphics.drawable.Drawable);
+ method public static android.graphics.ColorFilter getColorFilter(android.graphics.drawable.Drawable);
+ method public static int getLayoutDirection(android.graphics.drawable.Drawable);
+ method public static void inflate(android.graphics.drawable.Drawable, android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet, android.content.res.Resources.Theme) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+ method public static boolean isAutoMirrored(android.graphics.drawable.Drawable);
+ method public static void jumpToCurrentState(android.graphics.drawable.Drawable);
+ method public static void setAutoMirrored(android.graphics.drawable.Drawable, boolean);
+ method public static void setHotspot(android.graphics.drawable.Drawable, float, float);
+ method public static void setHotspotBounds(android.graphics.drawable.Drawable, int, int, int, int);
+ method public static boolean setLayoutDirection(android.graphics.drawable.Drawable, int);
+ method public static void setTint(android.graphics.drawable.Drawable, int);
+ method public static void setTintList(android.graphics.drawable.Drawable, android.content.res.ColorStateList);
+ method public static void setTintMode(android.graphics.drawable.Drawable, android.graphics.PorterDuff.Mode);
+ method public static <T extends android.graphics.drawable.Drawable> T unwrap(android.graphics.drawable.Drawable);
+ method public static android.graphics.drawable.Drawable wrap(android.graphics.drawable.Drawable);
+ }
+
+ public class IconCompat {
+ method public static android.support.v4.graphics.drawable.IconCompat createWithAdaptiveBitmap(android.graphics.Bitmap);
+ method public static android.support.v4.graphics.drawable.IconCompat createWithBitmap(android.graphics.Bitmap);
+ method public static android.support.v4.graphics.drawable.IconCompat createWithContentUri(java.lang.String);
+ method public static android.support.v4.graphics.drawable.IconCompat createWithContentUri(android.net.Uri);
+ method public static android.support.v4.graphics.drawable.IconCompat createWithData(byte[], int, int);
+ method public static android.support.v4.graphics.drawable.IconCompat createWithResource(android.content.Context, int);
+ }
+
+}
+
+package android.support.v4.hardware.display {
+
+ public abstract class DisplayManagerCompat {
+ method public abstract android.view.Display getDisplay(int);
+ method public abstract android.view.Display[] getDisplays();
+ method public abstract android.view.Display[] getDisplays(java.lang.String);
+ method public static android.support.v4.hardware.display.DisplayManagerCompat getInstance(android.content.Context);
+ field public static final java.lang.String DISPLAY_CATEGORY_PRESENTATION = "android.hardware.display.category.PRESENTATION";
+ }
+
+}
+
+package android.support.v4.hardware.fingerprint {
+
+ public final class FingerprintManagerCompat {
+ method public void authenticate(android.support.v4.hardware.fingerprint.FingerprintManagerCompat.CryptoObject, int, android.support.v4.os.CancellationSignal, android.support.v4.hardware.fingerprint.FingerprintManagerCompat.AuthenticationCallback, android.os.Handler);
+ method public static android.support.v4.hardware.fingerprint.FingerprintManagerCompat from(android.content.Context);
+ method public boolean hasEnrolledFingerprints();
+ method public boolean isHardwareDetected();
+ }
+
+ public static abstract class FingerprintManagerCompat.AuthenticationCallback {
+ ctor public FingerprintManagerCompat.AuthenticationCallback();
+ method public void onAuthenticationError(int, java.lang.CharSequence);
+ method public void onAuthenticationFailed();
+ method public void onAuthenticationHelp(int, java.lang.CharSequence);
+ method public void onAuthenticationSucceeded(android.support.v4.hardware.fingerprint.FingerprintManagerCompat.AuthenticationResult);
+ }
+
+ public static final class FingerprintManagerCompat.AuthenticationResult {
+ ctor public FingerprintManagerCompat.AuthenticationResult(android.support.v4.hardware.fingerprint.FingerprintManagerCompat.CryptoObject);
+ method public android.support.v4.hardware.fingerprint.FingerprintManagerCompat.CryptoObject getCryptoObject();
+ }
+
+ public static class FingerprintManagerCompat.CryptoObject {
+ ctor public FingerprintManagerCompat.CryptoObject(java.security.Signature);
+ ctor public FingerprintManagerCompat.CryptoObject(javax.crypto.Cipher);
+ ctor public FingerprintManagerCompat.CryptoObject(javax.crypto.Mac);
+ method public javax.crypto.Cipher getCipher();
+ method public javax.crypto.Mac getMac();
+ method public java.security.Signature getSignature();
+ }
+
+}
+
+package android.support.v4.net {
+
+ public final class ConnectivityManagerCompat {
+ method public static android.net.NetworkInfo getNetworkInfoFromBroadcast(android.net.ConnectivityManager, android.content.Intent);
+ method public static int getRestrictBackgroundStatus(android.net.ConnectivityManager);
+ method public static boolean isActiveNetworkMetered(android.net.ConnectivityManager);
+ field public static final int RESTRICT_BACKGROUND_STATUS_DISABLED = 1; // 0x1
+ field public static final int RESTRICT_BACKGROUND_STATUS_ENABLED = 3; // 0x3
+ field public static final int RESTRICT_BACKGROUND_STATUS_WHITELISTED = 2; // 0x2
+ }
+
+ public final class TrafficStatsCompat {
+ method public static deprecated void clearThreadStatsTag();
+ method public static deprecated int getThreadStatsTag();
+ method public static deprecated void incrementOperationCount(int);
+ method public static deprecated void incrementOperationCount(int, int);
+ method public static deprecated void setThreadStatsTag(int);
+ method public static void tagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
+ method public static deprecated void tagSocket(java.net.Socket) throws java.net.SocketException;
+ method public static void untagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
+ method public static deprecated void untagSocket(java.net.Socket) throws java.net.SocketException;
+ }
+
+}
+
+package android.support.v4.os {
+
+ public final deprecated class AsyncTaskCompat {
+ method public static deprecated <Params, Progress, Result> android.os.AsyncTask<Params, Progress, Result> executeParallel(android.os.AsyncTask<Params, Progress, Result>, Params...);
+ }
+
+ public class BuildCompat {
+ method public static deprecated boolean isAtLeastN();
+ method public static deprecated boolean isAtLeastNMR1();
+ method public static deprecated boolean isAtLeastO();
+ method public static boolean isAtLeastOMR1();
+ method public static boolean isAtLeastP();
+ }
+
+ public final class CancellationSignal {
+ ctor public CancellationSignal();
+ method public void cancel();
+ method public java.lang.Object getCancellationSignalObject();
+ method public boolean isCanceled();
+ method public void setOnCancelListener(android.support.v4.os.CancellationSignal.OnCancelListener);
+ method public void throwIfCanceled();
+ }
+
+ public static abstract interface CancellationSignal.OnCancelListener {
+ method public abstract void onCancel();
+ }
+
+ public final class ConfigurationCompat {
+ method public static android.support.v4.os.LocaleListCompat getLocales(android.content.res.Configuration);
+ }
+
+ public final class EnvironmentCompat {
+ method public static java.lang.String getStorageState(java.io.File);
+ field public static final java.lang.String MEDIA_UNKNOWN = "unknown";
+ }
+
+ public final class LocaleListCompat {
+ method public static android.support.v4.os.LocaleListCompat create(java.util.Locale...);
+ method public static android.support.v4.os.LocaleListCompat forLanguageTags(java.lang.String);
+ method public java.util.Locale get(int);
+ method public static android.support.v4.os.LocaleListCompat getAdjustedDefault();
+ method public static android.support.v4.os.LocaleListCompat getDefault();
+ method public static android.support.v4.os.LocaleListCompat getEmptyLocaleList();
+ method public java.util.Locale getFirstMatch(java.lang.String[]);
+ method public int indexOf(java.util.Locale);
+ method public boolean isEmpty();
+ method public int size();
+ method public java.lang.String toLanguageTags();
+ method public java.lang.Object unwrap();
+ method public static android.support.v4.os.LocaleListCompat wrap(java.lang.Object);
+ }
+
+ public class OperationCanceledException extends java.lang.RuntimeException {
+ ctor public OperationCanceledException();
+ ctor public OperationCanceledException(java.lang.String);
+ }
+
+ public final deprecated class ParcelableCompat {
+ method public static deprecated <T> android.os.Parcelable.Creator<T> newCreator(android.support.v4.os.ParcelableCompatCreatorCallbacks<T>);
+ }
+
+ public abstract deprecated interface ParcelableCompatCreatorCallbacks<T> {
+ method public abstract T createFromParcel(android.os.Parcel, java.lang.ClassLoader);
+ method public abstract T[] newArray(int);
+ }
+
+ public final class TraceCompat {
+ method public static void beginSection(java.lang.String);
+ method public static void endSection();
+ }
+
+ public class UserManagerCompat {
+ method public static boolean isUserUnlocked(android.content.Context);
+ }
+
+}
+
+package android.support.v4.provider {
+
+ public final class FontRequest {
+ ctor public FontRequest(java.lang.String, java.lang.String, java.lang.String, java.util.List<java.util.List<byte[]>>);
+ ctor public FontRequest(java.lang.String, java.lang.String, java.lang.String, int);
+ method public java.util.List<java.util.List<byte[]>> getCertificates();
+ method public int getCertificatesArrayResId();
+ method public java.lang.String getProviderAuthority();
+ method public java.lang.String getProviderPackage();
+ method public java.lang.String getQuery();
+ }
+
+ public class FontsContractCompat {
+ method public static android.graphics.Typeface buildTypeface(android.content.Context, android.os.CancellationSignal, android.support.v4.provider.FontsContractCompat.FontInfo[]);
+ method public static android.support.v4.provider.FontsContractCompat.FontFamilyResult fetchFonts(android.content.Context, android.os.CancellationSignal, android.support.v4.provider.FontRequest) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public static void requestFont(android.content.Context, android.support.v4.provider.FontRequest, android.support.v4.provider.FontsContractCompat.FontRequestCallback, android.os.Handler);
+ }
+
+ public static final class FontsContractCompat.Columns {
+ ctor public FontsContractCompat.Columns();
+ field public static final java.lang.String FILE_ID = "file_id";
+ field public static final java.lang.String ITALIC = "font_italic";
+ field public static final java.lang.String RESULT_CODE = "result_code";
+ field public static final int RESULT_CODE_FONT_NOT_FOUND = 1; // 0x1
+ field public static final int RESULT_CODE_FONT_UNAVAILABLE = 2; // 0x2
+ field public static final int RESULT_CODE_MALFORMED_QUERY = 3; // 0x3
+ field public static final int RESULT_CODE_OK = 0; // 0x0
+ field public static final java.lang.String TTC_INDEX = "font_ttc_index";
+ field public static final java.lang.String VARIATION_SETTINGS = "font_variation_settings";
+ field public static final java.lang.String WEIGHT = "font_weight";
+ }
+
+ public static class FontsContractCompat.FontFamilyResult {
+ method public android.support.v4.provider.FontsContractCompat.FontInfo[] getFonts();
+ method public int getStatusCode();
+ field public static final int STATUS_OK = 0; // 0x0
+ field public static final int STATUS_UNEXPECTED_DATA_PROVIDED = 2; // 0x2
+ field public static final int STATUS_WRONG_CERTIFICATES = 1; // 0x1
+ }
+
+ public static class FontsContractCompat.FontInfo {
+ method public int getResultCode();
+ method public int getTtcIndex();
+ method public android.net.Uri getUri();
+ method public int getWeight();
+ method public boolean isItalic();
+ }
+
+ public static class FontsContractCompat.FontRequestCallback {
+ ctor public FontsContractCompat.FontRequestCallback();
+ method public void onTypefaceRequestFailed(int);
+ method public void onTypefaceRetrieved(android.graphics.Typeface);
+ field public static final int FAIL_REASON_FONT_LOAD_ERROR = -3; // 0xfffffffd
+ field public static final int FAIL_REASON_FONT_NOT_FOUND = 1; // 0x1
+ field public static final int FAIL_REASON_FONT_UNAVAILABLE = 2; // 0x2
+ field public static final int FAIL_REASON_MALFORMED_QUERY = 3; // 0x3
+ field public static final int FAIL_REASON_PROVIDER_NOT_FOUND = -1; // 0xffffffff
+ field public static final int FAIL_REASON_WRONG_CERTIFICATES = -2; // 0xfffffffe
+ }
+
+}
+
+package android.support.v4.text {
+
+ public final class BidiFormatter {
+ method public static android.support.v4.text.BidiFormatter getInstance();
+ method public static android.support.v4.text.BidiFormatter getInstance(boolean);
+ method public static android.support.v4.text.BidiFormatter getInstance(java.util.Locale);
+ method public boolean getStereoReset();
+ method public boolean isRtl(java.lang.String);
+ method public boolean isRtl(java.lang.CharSequence);
+ method public boolean isRtlContext();
+ method public java.lang.String unicodeWrap(java.lang.String, android.support.v4.text.TextDirectionHeuristicCompat, boolean);
+ method public java.lang.CharSequence unicodeWrap(java.lang.CharSequence, android.support.v4.text.TextDirectionHeuristicCompat, boolean);
+ method public java.lang.String unicodeWrap(java.lang.String, android.support.v4.text.TextDirectionHeuristicCompat);
+ method public java.lang.CharSequence unicodeWrap(java.lang.CharSequence, android.support.v4.text.TextDirectionHeuristicCompat);
+ method public java.lang.String unicodeWrap(java.lang.String, boolean);
+ method public java.lang.CharSequence unicodeWrap(java.lang.CharSequence, boolean);
+ method public java.lang.String unicodeWrap(java.lang.String);
+ method public java.lang.CharSequence unicodeWrap(java.lang.CharSequence);
+ }
+
+ public static final class BidiFormatter.Builder {
+ ctor public BidiFormatter.Builder();
+ ctor public BidiFormatter.Builder(boolean);
+ ctor public BidiFormatter.Builder(java.util.Locale);
+ method public android.support.v4.text.BidiFormatter build();
+ method public android.support.v4.text.BidiFormatter.Builder setTextDirectionHeuristic(android.support.v4.text.TextDirectionHeuristicCompat);
+ method public android.support.v4.text.BidiFormatter.Builder stereoReset(boolean);
+ }
+
+ public final class ICUCompat {
+ method public static java.lang.String maximizeAndGetScript(java.util.Locale);
+ }
+
+ public abstract interface TextDirectionHeuristicCompat {
+ method public abstract boolean isRtl(char[], int, int);
+ method public abstract boolean isRtl(java.lang.CharSequence, int, int);
+ }
+
+ public final class TextDirectionHeuristicsCompat {
+ field public static final android.support.v4.text.TextDirectionHeuristicCompat ANYRTL_LTR;
+ field public static final android.support.v4.text.TextDirectionHeuristicCompat FIRSTSTRONG_LTR;
+ field public static final android.support.v4.text.TextDirectionHeuristicCompat FIRSTSTRONG_RTL;
+ field public static final android.support.v4.text.TextDirectionHeuristicCompat LOCALE;
+ field public static final android.support.v4.text.TextDirectionHeuristicCompat LTR;
+ field public static final android.support.v4.text.TextDirectionHeuristicCompat RTL;
+ }
+
+ public final class TextUtilsCompat {
+ method public static int getLayoutDirectionFromLocale(java.util.Locale);
+ method public static java.lang.String htmlEncode(java.lang.String);
+ field public static final deprecated java.util.Locale ROOT;
+ }
+
+}
+
+package android.support.v4.text.util {
+
+ public final class LinkifyCompat {
+ method public static final boolean addLinks(android.text.Spannable, int);
+ method public static final boolean addLinks(android.widget.TextView, int);
+ method public static final void addLinks(android.widget.TextView, java.util.regex.Pattern, java.lang.String);
+ method public static final void addLinks(android.widget.TextView, java.util.regex.Pattern, java.lang.String, android.text.util.Linkify.MatchFilter, android.text.util.Linkify.TransformFilter);
+ method public static final void addLinks(android.widget.TextView, java.util.regex.Pattern, java.lang.String, java.lang.String[], android.text.util.Linkify.MatchFilter, android.text.util.Linkify.TransformFilter);
+ method public static final boolean addLinks(android.text.Spannable, java.util.regex.Pattern, java.lang.String);
+ method public static final boolean addLinks(android.text.Spannable, java.util.regex.Pattern, java.lang.String, android.text.util.Linkify.MatchFilter, android.text.util.Linkify.TransformFilter);
+ method public static final boolean addLinks(android.text.Spannable, java.util.regex.Pattern, java.lang.String, java.lang.String[], android.text.util.Linkify.MatchFilter, android.text.util.Linkify.TransformFilter);
+ }
+
+}
+
+package android.support.v4.util {
+
+ public class ArrayMap<K, V> extends android.support.v4.util.SimpleArrayMap implements java.util.Map {
+ ctor public ArrayMap();
+ ctor public ArrayMap(int);
+ ctor public ArrayMap(android.support.v4.util.SimpleArrayMap);
+ method public boolean containsAll(java.util.Collection<?>);
+ method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
+ method public java.util.Set<K> keySet();
+ method public void putAll(java.util.Map<? extends K, ? extends V>);
+ method public boolean removeAll(java.util.Collection<?>);
+ method public boolean retainAll(java.util.Collection<?>);
+ method public java.util.Collection<V> values();
+ }
+
+ public final class ArraySet<E> implements java.util.Collection java.util.Set {
+ ctor public ArraySet();
+ ctor public ArraySet(int);
+ ctor public ArraySet(android.support.v4.util.ArraySet<E>);
+ method public boolean add(E);
+ method public void addAll(android.support.v4.util.ArraySet<? extends E>);
+ method public boolean addAll(java.util.Collection<? extends E>);
+ method public void clear();
+ method public boolean contains(java.lang.Object);
+ method public boolean containsAll(java.util.Collection<?>);
+ method public void ensureCapacity(int);
+ method public int indexOf(java.lang.Object);
+ method public boolean isEmpty();
+ method public java.util.Iterator<E> iterator();
+ method public boolean remove(java.lang.Object);
+ method public boolean removeAll(android.support.v4.util.ArraySet<? extends E>);
+ method public boolean removeAll(java.util.Collection<?>);
+ method public E removeAt(int);
+ method public boolean retainAll(java.util.Collection<?>);
+ method public int size();
+ method public java.lang.Object[] toArray();
+ method public <T> T[] toArray(T[]);
+ method public E valueAt(int);
+ }
+
+ public class AtomicFile {
+ ctor public AtomicFile(java.io.File);
+ method public void delete();
+ method public void failWrite(java.io.FileOutputStream);
+ method public void finishWrite(java.io.FileOutputStream);
+ method public java.io.File getBaseFile();
+ method public java.io.FileInputStream openRead() throws java.io.FileNotFoundException;
+ method public byte[] readFully() throws java.io.IOException;
+ method public java.io.FileOutputStream startWrite() throws java.io.IOException;
+ }
+
+ public final class CircularArray<E> {
+ ctor public CircularArray();
+ ctor public CircularArray(int);
+ method public void addFirst(E);
+ method public void addLast(E);
+ method public void clear();
+ method public E get(int);
+ method public E getFirst();
+ method public E getLast();
+ method public boolean isEmpty();
+ method public E popFirst();
+ method public E popLast();
+ method public void removeFromEnd(int);
+ method public void removeFromStart(int);
+ method public int size();
+ }
+
+ public final class CircularIntArray {
+ ctor public CircularIntArray();
+ ctor public CircularIntArray(int);
+ method public void addFirst(int);
+ method public void addLast(int);
+ method public void clear();
+ method public int get(int);
+ method public int getFirst();
+ method public int getLast();
+ method public boolean isEmpty();
+ method public int popFirst();
+ method public int popLast();
+ method public void removeFromEnd(int);
+ method public void removeFromStart(int);
+ method public int size();
+ }
+
+ public class LongSparseArray<E> {
+ ctor public LongSparseArray();
+ ctor public LongSparseArray(int);
+ method public void append(long, E);
+ method public void clear();
+ method public android.support.v4.util.LongSparseArray<E> clone();
+ method public void delete(long);
+ method public E get(long);
+ method public E get(long, E);
+ method public int indexOfKey(long);
+ method public int indexOfValue(E);
+ method public long keyAt(int);
+ method public void put(long, E);
+ method public void remove(long);
+ method public void removeAt(int);
+ method public void setValueAt(int, E);
+ method public int size();
+ method public E valueAt(int);
+ }
+
+ public class LruCache<K, V> {
+ ctor public LruCache(int);
+ method protected V create(K);
+ method public final synchronized int createCount();
+ method protected void entryRemoved(boolean, K, V, V);
+ method public final void evictAll();
+ method public final synchronized int evictionCount();
+ method public final V get(K);
+ method public final synchronized int hitCount();
+ method public final synchronized int maxSize();
+ method public final synchronized int missCount();
+ method public final V put(K, V);
+ method public final synchronized int putCount();
+ method public final V remove(K);
+ method public void resize(int);
+ method public final synchronized int size();
+ method protected int sizeOf(K, V);
+ method public final synchronized java.util.Map<K, V> snapshot();
+ method public final synchronized java.lang.String toString();
+ method public void trimToSize(int);
+ }
+
+ public class ObjectsCompat {
+ method public static boolean equals(java.lang.Object, java.lang.Object);
+ }
+
+ public class Pair<F, S> {
+ ctor public Pair(F, S);
+ method public static <A, B> android.support.v4.util.Pair<A, B> create(A, B);
+ field public final F first;
+ field public final S second;
+ }
+
+ public final class PatternsCompat {
+ field public static final java.util.regex.Pattern DOMAIN_NAME;
+ field public static final java.util.regex.Pattern EMAIL_ADDRESS;
+ field public static final java.util.regex.Pattern IP_ADDRESS;
+ field public static final java.util.regex.Pattern WEB_URL;
+ }
+
+ public final class Pools {
+ }
+
+ public static abstract interface Pools.Pool<T> {
+ method public abstract T acquire();
+ method public abstract boolean release(T);
+ }
+
+ public static class Pools.SimplePool<T> implements android.support.v4.util.Pools.Pool {
+ ctor public Pools.SimplePool(int);
+ method public T acquire();
+ method public boolean release(T);
+ }
+
+ public static class Pools.SynchronizedPool<T> extends android.support.v4.util.Pools.SimplePool {
+ ctor public Pools.SynchronizedPool(int);
+ }
+
+ public class SimpleArrayMap<K, V> {
+ ctor public SimpleArrayMap();
+ ctor public SimpleArrayMap(int);
+ ctor public SimpleArrayMap(android.support.v4.util.SimpleArrayMap<K, V>);
+ method public void clear();
+ method public boolean containsKey(java.lang.Object);
+ method public boolean containsValue(java.lang.Object);
+ method public void ensureCapacity(int);
+ method public V get(java.lang.Object);
+ method public int indexOfKey(java.lang.Object);
+ method public boolean isEmpty();
+ method public K keyAt(int);
+ method public V put(K, V);
+ method public void putAll(android.support.v4.util.SimpleArrayMap<? extends K, ? extends V>);
+ method public V remove(java.lang.Object);
+ method public V removeAt(int);
+ method public V setValueAt(int, V);
+ method public int size();
+ method public V valueAt(int);
+ }
+
+ public class SparseArrayCompat<E> {
+ ctor public SparseArrayCompat();
+ ctor public SparseArrayCompat(int);
+ method public void append(int, E);
+ method public void clear();
+ method public android.support.v4.util.SparseArrayCompat<E> clone();
+ method public void delete(int);
+ method public E get(int);
+ method public E get(int, E);
+ method public int indexOfKey(int);
+ method public int indexOfValue(E);
+ method public int keyAt(int);
+ method public void put(int, E);
+ method public void remove(int);
+ method public void removeAt(int);
+ method public void removeAtRange(int, int);
+ method public void setValueAt(int, E);
+ method public int size();
+ method public E valueAt(int);
+ }
+
+}
+
+package android.support.v4.view {
+
+ public class AccessibilityDelegateCompat {
+ ctor public AccessibilityDelegateCompat();
+ method public boolean dispatchPopulateAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
+ method public android.support.v4.view.accessibility.AccessibilityNodeProviderCompat getAccessibilityNodeProvider(android.view.View);
+ method public void onInitializeAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
+ method public void onInitializeAccessibilityNodeInfo(android.view.View, android.support.v4.view.accessibility.AccessibilityNodeInfoCompat);
+ method public void onPopulateAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
+ method public boolean onRequestSendAccessibilityEvent(android.view.ViewGroup, android.view.View, android.view.accessibility.AccessibilityEvent);
+ method public boolean performAccessibilityAction(android.view.View, int, android.os.Bundle);
+ method public void sendAccessibilityEvent(android.view.View, int);
+ method public void sendAccessibilityEventUnchecked(android.view.View, android.view.accessibility.AccessibilityEvent);
+ }
+
+ public abstract class ActionProvider {
+ ctor public ActionProvider(android.content.Context);
+ method public android.content.Context getContext();
+ method public boolean hasSubMenu();
+ method public boolean isVisible();
+ method public abstract android.view.View onCreateActionView();
+ method public android.view.View onCreateActionView(android.view.MenuItem);
+ method public boolean onPerformDefaultAction();
+ method public void onPrepareSubMenu(android.view.SubMenu);
+ method public boolean overridesItemVisibility();
+ method public void refreshVisibility();
+ method public void setVisibilityListener(android.support.v4.view.ActionProvider.VisibilityListener);
+ }
+
+ public static abstract interface ActionProvider.VisibilityListener {
+ method public abstract void onActionProviderVisibilityChanged(boolean);
+ }
+
+ public final class GestureDetectorCompat {
+ ctor public GestureDetectorCompat(android.content.Context, android.view.GestureDetector.OnGestureListener);
+ ctor public GestureDetectorCompat(android.content.Context, android.view.GestureDetector.OnGestureListener, android.os.Handler);
+ method public boolean isLongpressEnabled();
+ method public boolean onTouchEvent(android.view.MotionEvent);
+ method public void setIsLongpressEnabled(boolean);
+ method public void setOnDoubleTapListener(android.view.GestureDetector.OnDoubleTapListener);
+ }
+
+ public final class GravityCompat {
+ method public static void apply(int, int, int, android.graphics.Rect, android.graphics.Rect, int);
+ method public static void apply(int, int, int, android.graphics.Rect, int, int, android.graphics.Rect, int);
+ method public static void applyDisplay(int, android.graphics.Rect, android.graphics.Rect, int);
+ method public static int getAbsoluteGravity(int, int);
+ field public static final int END = 8388613; // 0x800005
+ field public static final int RELATIVE_HORIZONTAL_GRAVITY_MASK = 8388615; // 0x800007
+ field public static final int RELATIVE_LAYOUT_DIRECTION = 8388608; // 0x800000
+ field public static final int START = 8388611; // 0x800003
+ }
+
+ public final class InputDeviceCompat {
+ field public static final int SOURCE_ANY = -256; // 0xffffff00
+ field public static final int SOURCE_CLASS_BUTTON = 1; // 0x1
+ field public static final int SOURCE_CLASS_JOYSTICK = 16; // 0x10
+ field public static final int SOURCE_CLASS_MASK = 255; // 0xff
+ field public static final int SOURCE_CLASS_NONE = 0; // 0x0
+ field public static final int SOURCE_CLASS_POINTER = 2; // 0x2
+ field public static final int SOURCE_CLASS_POSITION = 8; // 0x8
+ field public static final int SOURCE_CLASS_TRACKBALL = 4; // 0x4
+ field public static final int SOURCE_DPAD = 513; // 0x201
+ field public static final int SOURCE_GAMEPAD = 1025; // 0x401
+ field public static final int SOURCE_HDMI = 33554433; // 0x2000001
+ field public static final int SOURCE_JOYSTICK = 16777232; // 0x1000010
+ field public static final int SOURCE_KEYBOARD = 257; // 0x101
+ field public static final int SOURCE_MOUSE = 8194; // 0x2002
+ field public static final int SOURCE_ROTARY_ENCODER = 4194304; // 0x400000
+ field public static final int SOURCE_STYLUS = 16386; // 0x4002
+ field public static final int SOURCE_TOUCHPAD = 1048584; // 0x100008
+ field public static final int SOURCE_TOUCHSCREEN = 4098; // 0x1002
+ field public static final int SOURCE_TOUCH_NAVIGATION = 2097152; // 0x200000
+ field public static final int SOURCE_TRACKBALL = 65540; // 0x10004
+ field public static final int SOURCE_UNKNOWN = 0; // 0x0
+ }
+
+ public final deprecated class KeyEventCompat {
+ method public static deprecated boolean dispatch(android.view.KeyEvent, android.view.KeyEvent.Callback, java.lang.Object, java.lang.Object);
+ method public static deprecated java.lang.Object getKeyDispatcherState(android.view.View);
+ method public static deprecated boolean hasModifiers(android.view.KeyEvent, int);
+ method public static deprecated boolean hasNoModifiers(android.view.KeyEvent);
+ method public static deprecated boolean isCtrlPressed(android.view.KeyEvent);
+ method public static deprecated boolean isTracking(android.view.KeyEvent);
+ method public static deprecated boolean metaStateHasModifiers(int, int);
+ method public static deprecated boolean metaStateHasNoModifiers(int);
+ method public static deprecated int normalizeMetaState(int);
+ method public static deprecated void startTracking(android.view.KeyEvent);
+ }
+
+ public final class LayoutInflaterCompat {
+ method public static deprecated android.support.v4.view.LayoutInflaterFactory getFactory(android.view.LayoutInflater);
+ method public static deprecated void setFactory(android.view.LayoutInflater, android.support.v4.view.LayoutInflaterFactory);
+ method public static void setFactory2(android.view.LayoutInflater, android.view.LayoutInflater.Factory2);
+ }
+
+ public abstract deprecated interface LayoutInflaterFactory {
+ method public abstract android.view.View onCreateView(android.view.View, java.lang.String, android.content.Context, android.util.AttributeSet);
+ }
+
+ public final class MarginLayoutParamsCompat {
+ method public static int getLayoutDirection(android.view.ViewGroup.MarginLayoutParams);
+ method public static int getMarginEnd(android.view.ViewGroup.MarginLayoutParams);
+ method public static int getMarginStart(android.view.ViewGroup.MarginLayoutParams);
+ method public static boolean isMarginRelative(android.view.ViewGroup.MarginLayoutParams);
+ method public static void resolveLayoutDirection(android.view.ViewGroup.MarginLayoutParams, int);
+ method public static void setLayoutDirection(android.view.ViewGroup.MarginLayoutParams, int);
+ method public static void setMarginEnd(android.view.ViewGroup.MarginLayoutParams, int);
+ method public static void setMarginStart(android.view.ViewGroup.MarginLayoutParams, int);
+ }
+
+ public final class MenuCompat {
+ method public static deprecated void setShowAsAction(android.view.MenuItem, int);
+ }
+
+ public final class MenuItemCompat {
+ method public static deprecated boolean collapseActionView(android.view.MenuItem);
+ method public static deprecated boolean expandActionView(android.view.MenuItem);
+ method public static android.support.v4.view.ActionProvider getActionProvider(android.view.MenuItem);
+ method public static deprecated android.view.View getActionView(android.view.MenuItem);
+ method public static int getAlphabeticModifiers(android.view.MenuItem);
+ method public static java.lang.CharSequence getContentDescription(android.view.MenuItem);
+ method public static android.content.res.ColorStateList getIconTintList(android.view.MenuItem);
+ method public static android.graphics.PorterDuff.Mode getIconTintMode(android.view.MenuItem);
+ method public static int getNumericModifiers(android.view.MenuItem);
+ method public static java.lang.CharSequence getTooltipText(android.view.MenuItem);
+ method public static deprecated boolean isActionViewExpanded(android.view.MenuItem);
+ method public static android.view.MenuItem setActionProvider(android.view.MenuItem, android.support.v4.view.ActionProvider);
+ method public static deprecated android.view.MenuItem setActionView(android.view.MenuItem, android.view.View);
+ method public static deprecated android.view.MenuItem setActionView(android.view.MenuItem, int);
+ method public static void setAlphabeticShortcut(android.view.MenuItem, char, int);
+ method public static void setContentDescription(android.view.MenuItem, java.lang.CharSequence);
+ method public static void setIconTintList(android.view.MenuItem, android.content.res.ColorStateList);
+ method public static void setIconTintMode(android.view.MenuItem, android.graphics.PorterDuff.Mode);
+ method public static void setNumericShortcut(android.view.MenuItem, char, int);
+ method public static deprecated android.view.MenuItem setOnActionExpandListener(android.view.MenuItem, android.support.v4.view.MenuItemCompat.OnActionExpandListener);
+ method public static void setShortcut(android.view.MenuItem, char, char, int, int);
+ method public static deprecated void setShowAsAction(android.view.MenuItem, int);
+ method public static void setTooltipText(android.view.MenuItem, java.lang.CharSequence);
+ field public static final deprecated int SHOW_AS_ACTION_ALWAYS = 2; // 0x2
+ field public static final deprecated int SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW = 8; // 0x8
+ field public static final deprecated int SHOW_AS_ACTION_IF_ROOM = 1; // 0x1
+ field public static final deprecated int SHOW_AS_ACTION_NEVER = 0; // 0x0
+ field public static final deprecated int SHOW_AS_ACTION_WITH_TEXT = 4; // 0x4
+ }
+
+ public static abstract deprecated interface MenuItemCompat.OnActionExpandListener {
+ method public abstract boolean onMenuItemActionCollapse(android.view.MenuItem);
+ method public abstract boolean onMenuItemActionExpand(android.view.MenuItem);
+ }
+
+ public final class MotionEventCompat {
+ method public static deprecated int findPointerIndex(android.view.MotionEvent, int);
+ method public static deprecated int getActionIndex(android.view.MotionEvent);
+ method public static deprecated int getActionMasked(android.view.MotionEvent);
+ method public static deprecated float getAxisValue(android.view.MotionEvent, int);
+ method public static deprecated float getAxisValue(android.view.MotionEvent, int, int);
+ method public static deprecated int getButtonState(android.view.MotionEvent);
+ method public static deprecated int getPointerCount(android.view.MotionEvent);
+ method public static deprecated int getPointerId(android.view.MotionEvent, int);
+ method public static deprecated int getSource(android.view.MotionEvent);
+ method public static deprecated float getX(android.view.MotionEvent, int);
+ method public static deprecated float getY(android.view.MotionEvent, int);
+ method public static boolean isFromSource(android.view.MotionEvent, int);
+ field public static final deprecated int ACTION_HOVER_ENTER = 9; // 0x9
+ field public static final deprecated int ACTION_HOVER_EXIT = 10; // 0xa
+ field public static final deprecated int ACTION_HOVER_MOVE = 7; // 0x7
+ field public static final deprecated int ACTION_MASK = 255; // 0xff
+ field public static final deprecated int ACTION_POINTER_DOWN = 5; // 0x5
+ field public static final deprecated int ACTION_POINTER_INDEX_MASK = 65280; // 0xff00
+ field public static final deprecated int ACTION_POINTER_INDEX_SHIFT = 8; // 0x8
+ field public static final deprecated int ACTION_POINTER_UP = 6; // 0x6
+ field public static final deprecated int ACTION_SCROLL = 8; // 0x8
+ field public static final deprecated int AXIS_BRAKE = 23; // 0x17
+ field public static final deprecated int AXIS_DISTANCE = 24; // 0x18
+ field public static final deprecated int AXIS_GAS = 22; // 0x16
+ field public static final deprecated int AXIS_GENERIC_1 = 32; // 0x20
+ field public static final deprecated int AXIS_GENERIC_10 = 41; // 0x29
+ field public static final deprecated int AXIS_GENERIC_11 = 42; // 0x2a
+ field public static final deprecated int AXIS_GENERIC_12 = 43; // 0x2b
+ field public static final deprecated int AXIS_GENERIC_13 = 44; // 0x2c
+ field public static final deprecated int AXIS_GENERIC_14 = 45; // 0x2d
+ field public static final deprecated int AXIS_GENERIC_15 = 46; // 0x2e
+ field public static final deprecated int AXIS_GENERIC_16 = 47; // 0x2f
+ field public static final deprecated int AXIS_GENERIC_2 = 33; // 0x21
+ field public static final deprecated int AXIS_GENERIC_3 = 34; // 0x22
+ field public static final deprecated int AXIS_GENERIC_4 = 35; // 0x23
+ field public static final deprecated int AXIS_GENERIC_5 = 36; // 0x24
+ field public static final deprecated int AXIS_GENERIC_6 = 37; // 0x25
+ field public static final deprecated int AXIS_GENERIC_7 = 38; // 0x26
+ field public static final deprecated int AXIS_GENERIC_8 = 39; // 0x27
+ field public static final deprecated int AXIS_GENERIC_9 = 40; // 0x28
+ field public static final deprecated int AXIS_HAT_X = 15; // 0xf
+ field public static final deprecated int AXIS_HAT_Y = 16; // 0x10
+ field public static final deprecated int AXIS_HSCROLL = 10; // 0xa
+ field public static final deprecated int AXIS_LTRIGGER = 17; // 0x11
+ field public static final deprecated int AXIS_ORIENTATION = 8; // 0x8
+ field public static final deprecated int AXIS_PRESSURE = 2; // 0x2
+ field public static final int AXIS_RELATIVE_X = 27; // 0x1b
+ field public static final int AXIS_RELATIVE_Y = 28; // 0x1c
+ field public static final deprecated int AXIS_RTRIGGER = 18; // 0x12
+ field public static final deprecated int AXIS_RUDDER = 20; // 0x14
+ field public static final deprecated int AXIS_RX = 12; // 0xc
+ field public static final deprecated int AXIS_RY = 13; // 0xd
+ field public static final deprecated int AXIS_RZ = 14; // 0xe
+ field public static final int AXIS_SCROLL = 26; // 0x1a
+ field public static final deprecated int AXIS_SIZE = 3; // 0x3
+ field public static final deprecated int AXIS_THROTTLE = 19; // 0x13
+ field public static final deprecated int AXIS_TILT = 25; // 0x19
+ field public static final deprecated int AXIS_TOOL_MAJOR = 6; // 0x6
+ field public static final deprecated int AXIS_TOOL_MINOR = 7; // 0x7
+ field public static final deprecated int AXIS_TOUCH_MAJOR = 4; // 0x4
+ field public static final deprecated int AXIS_TOUCH_MINOR = 5; // 0x5
+ field public static final deprecated int AXIS_VSCROLL = 9; // 0x9
+ field public static final deprecated int AXIS_WHEEL = 21; // 0x15
+ field public static final deprecated int AXIS_X = 0; // 0x0
+ field public static final deprecated int AXIS_Y = 1; // 0x1
+ field public static final deprecated int AXIS_Z = 11; // 0xb
+ field public static final deprecated int BUTTON_PRIMARY = 1; // 0x1
+ }
+
+ public abstract interface NestedScrollingChild {
+ method public abstract boolean dispatchNestedFling(float, float, boolean);
+ method public abstract boolean dispatchNestedPreFling(float, float);
+ method public abstract boolean dispatchNestedPreScroll(int, int, int[], int[]);
+ method public abstract boolean dispatchNestedScroll(int, int, int, int, int[]);
+ method public abstract boolean hasNestedScrollingParent();
+ method public abstract boolean isNestedScrollingEnabled();
+ method public abstract void setNestedScrollingEnabled(boolean);
+ method public abstract boolean startNestedScroll(int);
+ method public abstract void stopNestedScroll();
+ }
+
+ public abstract interface NestedScrollingChild2 implements android.support.v4.view.NestedScrollingChild {
+ method public abstract boolean dispatchNestedPreScroll(int, int, int[], int[], int);
+ method public abstract boolean dispatchNestedScroll(int, int, int, int, int[], int);
+ method public abstract boolean hasNestedScrollingParent(int);
+ method public abstract boolean startNestedScroll(int, int);
+ method public abstract void stopNestedScroll(int);
+ }
+
+ public abstract interface NestedScrollingParent {
+ method public abstract int getNestedScrollAxes();
+ method public abstract boolean onNestedFling(android.view.View, float, float, boolean);
+ method public abstract boolean onNestedPreFling(android.view.View, float, float);
+ method public abstract void onNestedPreScroll(android.view.View, int, int, int[]);
+ method public abstract void onNestedScroll(android.view.View, int, int, int, int);
+ method public abstract void onNestedScrollAccepted(android.view.View, android.view.View, int);
+ method public abstract boolean onStartNestedScroll(android.view.View, android.view.View, int);
+ method public abstract void onStopNestedScroll(android.view.View);
+ }
+
+ public abstract interface NestedScrollingParent2 implements android.support.v4.view.NestedScrollingParent {
+ method public abstract void onNestedPreScroll(android.view.View, int, int, int[], int);
+ method public abstract void onNestedScroll(android.view.View, int, int, int, int, int);
+ method public abstract void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
+ method public abstract boolean onStartNestedScroll(android.view.View, android.view.View, int, int);
+ method public abstract void onStopNestedScroll(android.view.View, int);
+ }
+
+ public abstract interface OnApplyWindowInsetsListener {
+ method public abstract android.support.v4.view.WindowInsetsCompat onApplyWindowInsets(android.view.View, android.support.v4.view.WindowInsetsCompat);
+ }
+
+ public final class PointerIconCompat {
+ method public static android.support.v4.view.PointerIconCompat create(android.graphics.Bitmap, float, float);
+ method public static android.support.v4.view.PointerIconCompat getSystemIcon(android.content.Context, int);
+ method public static android.support.v4.view.PointerIconCompat load(android.content.res.Resources, int);
+ field public static final int TYPE_ALIAS = 1010; // 0x3f2
+ field public static final int TYPE_ALL_SCROLL = 1013; // 0x3f5
+ field public static final int TYPE_ARROW = 1000; // 0x3e8
+ field public static final int TYPE_CELL = 1006; // 0x3ee
+ field public static final int TYPE_CONTEXT_MENU = 1001; // 0x3e9
+ field public static final int TYPE_COPY = 1011; // 0x3f3
+ field public static final int TYPE_CROSSHAIR = 1007; // 0x3ef
+ field public static final int TYPE_DEFAULT = 1000; // 0x3e8
+ field public static final int TYPE_GRAB = 1020; // 0x3fc
+ field public static final int TYPE_GRABBING = 1021; // 0x3fd
+ field public static final int TYPE_HAND = 1002; // 0x3ea
+ field public static final int TYPE_HELP = 1003; // 0x3eb
+ field public static final int TYPE_HORIZONTAL_DOUBLE_ARROW = 1014; // 0x3f6
+ field public static final int TYPE_NO_DROP = 1012; // 0x3f4
+ field public static final int TYPE_NULL = 0; // 0x0
+ field public static final int TYPE_TEXT = 1008; // 0x3f0
+ field public static final int TYPE_TOP_LEFT_DIAGONAL_DOUBLE_ARROW = 1017; // 0x3f9
+ field public static final int TYPE_TOP_RIGHT_DIAGONAL_DOUBLE_ARROW = 1016; // 0x3f8
+ field public static final int TYPE_VERTICAL_DOUBLE_ARROW = 1015; // 0x3f7
+ field public static final int TYPE_VERTICAL_TEXT = 1009; // 0x3f1
+ field public static final int TYPE_WAIT = 1004; // 0x3ec
+ field public static final int TYPE_ZOOM_IN = 1018; // 0x3fa
+ field public static final int TYPE_ZOOM_OUT = 1019; // 0x3fb
+ }
+
+ public final class ScaleGestureDetectorCompat {
+ method public static deprecated boolean isQuickScaleEnabled(java.lang.Object);
+ method public static boolean isQuickScaleEnabled(android.view.ScaleGestureDetector);
+ method public static deprecated void setQuickScaleEnabled(java.lang.Object, boolean);
+ method public static void setQuickScaleEnabled(android.view.ScaleGestureDetector, boolean);
+ }
+
+ public abstract interface ScrollingView {
+ method public abstract int computeHorizontalScrollExtent();
+ method public abstract int computeHorizontalScrollOffset();
+ method public abstract int computeHorizontalScrollRange();
+ method public abstract int computeVerticalScrollExtent();
+ method public abstract int computeVerticalScrollOffset();
+ method public abstract int computeVerticalScrollRange();
+ }
+
+ public abstract interface TintableBackgroundView {
+ method public abstract android.content.res.ColorStateList getSupportBackgroundTintList();
+ method public abstract android.graphics.PorterDuff.Mode getSupportBackgroundTintMode();
+ method public abstract void setSupportBackgroundTintList(android.content.res.ColorStateList);
+ method public abstract void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode);
+ }
+
+ public final deprecated class VelocityTrackerCompat {
+ method public static deprecated float getXVelocity(android.view.VelocityTracker, int);
+ method public static deprecated float getYVelocity(android.view.VelocityTracker, int);
+ }
+
+ public class ViewCompat {
+ ctor protected ViewCompat();
+ method public static void addKeyboardNavigationClusters(android.view.View, java.util.Collection<android.view.View>, int);
+ method public static android.support.v4.view.ViewPropertyAnimatorCompat animate(android.view.View);
+ method public static deprecated boolean canScrollHorizontally(android.view.View, int);
+ method public static deprecated boolean canScrollVertically(android.view.View, int);
+ method public static void cancelDragAndDrop(android.view.View);
+ method public static deprecated int combineMeasuredStates(int, int);
+ method public static android.support.v4.view.WindowInsetsCompat dispatchApplyWindowInsets(android.view.View, android.support.v4.view.WindowInsetsCompat);
+ method public static void dispatchFinishTemporaryDetach(android.view.View);
+ method public static boolean dispatchNestedFling(android.view.View, float, float, boolean);
+ method public static boolean dispatchNestedPreFling(android.view.View, float, float);
+ method public static boolean dispatchNestedPreScroll(android.view.View, int, int, int[], int[]);
+ method public static boolean dispatchNestedPreScroll(android.view.View, int, int, int[], int[], int);
+ method public static boolean dispatchNestedScroll(android.view.View, int, int, int, int, int[]);
+ method public static boolean dispatchNestedScroll(android.view.View, int, int, int, int, int[], int);
+ method public static void dispatchStartTemporaryDetach(android.view.View);
+ method public static int getAccessibilityLiveRegion(android.view.View);
+ method public static android.support.v4.view.accessibility.AccessibilityNodeProviderCompat getAccessibilityNodeProvider(android.view.View);
+ method public static deprecated float getAlpha(android.view.View);
+ method public static android.content.res.ColorStateList getBackgroundTintList(android.view.View);
+ method public static android.graphics.PorterDuff.Mode getBackgroundTintMode(android.view.View);
+ method public static android.graphics.Rect getClipBounds(android.view.View);
+ method public static android.view.Display getDisplay(android.view.View);
+ method public static float getElevation(android.view.View);
+ method public static boolean getFitsSystemWindows(android.view.View);
+ method public static int getImportantForAccessibility(android.view.View);
+ method public static int getLabelFor(android.view.View);
+ method public static deprecated int getLayerType(android.view.View);
+ method public static int getLayoutDirection(android.view.View);
+ method public static deprecated android.graphics.Matrix getMatrix(android.view.View);
+ method public static deprecated int getMeasuredHeightAndState(android.view.View);
+ method public static deprecated int getMeasuredState(android.view.View);
+ method public static deprecated int getMeasuredWidthAndState(android.view.View);
+ method public static int getMinimumHeight(android.view.View);
+ method public static int getMinimumWidth(android.view.View);
+ method public static int getNextClusterForwardId(android.view.View);
+ method public static deprecated int getOverScrollMode(android.view.View);
+ method public static int getPaddingEnd(android.view.View);
+ method public static int getPaddingStart(android.view.View);
+ method public static android.view.ViewParent getParentForAccessibility(android.view.View);
+ method public static deprecated float getPivotX(android.view.View);
+ method public static deprecated float getPivotY(android.view.View);
+ method public static deprecated float getRotation(android.view.View);
+ method public static deprecated float getRotationX(android.view.View);
+ method public static deprecated float getRotationY(android.view.View);
+ method public static deprecated float getScaleX(android.view.View);
+ method public static deprecated float getScaleY(android.view.View);
+ method public static int getScrollIndicators(android.view.View);
+ method public static java.lang.String getTransitionName(android.view.View);
+ method public static deprecated float getTranslationX(android.view.View);
+ method public static deprecated float getTranslationY(android.view.View);
+ method public static float getTranslationZ(android.view.View);
+ method public static int getWindowSystemUiVisibility(android.view.View);
+ method public static deprecated float getX(android.view.View);
+ method public static deprecated float getY(android.view.View);
+ method public static float getZ(android.view.View);
+ method public static boolean hasAccessibilityDelegate(android.view.View);
+ method public static boolean hasExplicitFocusable(android.view.View);
+ method public static boolean hasNestedScrollingParent(android.view.View);
+ method public static boolean hasNestedScrollingParent(android.view.View, int);
+ method public static boolean hasOnClickListeners(android.view.View);
+ method public static boolean hasOverlappingRendering(android.view.View);
+ method public static boolean hasTransientState(android.view.View);
+ method public static boolean isAttachedToWindow(android.view.View);
+ method public static boolean isFocusedByDefault(android.view.View);
+ method public static boolean isImportantForAccessibility(android.view.View);
+ method public static boolean isInLayout(android.view.View);
+ method public static boolean isKeyboardNavigationCluster(android.view.View);
+ method public static boolean isLaidOut(android.view.View);
+ method public static boolean isLayoutDirectionResolved(android.view.View);
+ method public static boolean isNestedScrollingEnabled(android.view.View);
+ method public static deprecated boolean isOpaque(android.view.View);
+ method public static boolean isPaddingRelative(android.view.View);
+ method public static deprecated void jumpDrawablesToCurrentState(android.view.View);
+ method public static android.view.View keyboardNavigationClusterSearch(android.view.View, android.view.View, int);
+ method public static void offsetLeftAndRight(android.view.View, int);
+ method public static void offsetTopAndBottom(android.view.View, int);
+ method public static android.support.v4.view.WindowInsetsCompat onApplyWindowInsets(android.view.View, android.support.v4.view.WindowInsetsCompat);
+ method public static deprecated void onInitializeAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
+ method public static void onInitializeAccessibilityNodeInfo(android.view.View, android.support.v4.view.accessibility.AccessibilityNodeInfoCompat);
+ method public static deprecated void onPopulateAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
+ method public static boolean performAccessibilityAction(android.view.View, int, android.os.Bundle);
+ method public static void postInvalidateOnAnimation(android.view.View);
+ method public static void postInvalidateOnAnimation(android.view.View, int, int, int, int);
+ method public static void postOnAnimation(android.view.View, java.lang.Runnable);
+ method public static void postOnAnimationDelayed(android.view.View, java.lang.Runnable, long);
+ method public static void requestApplyInsets(android.view.View);
+ method public static deprecated int resolveSizeAndState(int, int, int);
+ method public static boolean restoreDefaultFocus(android.view.View);
+ method public static void setAccessibilityDelegate(android.view.View, android.support.v4.view.AccessibilityDelegateCompat);
+ method public static void setAccessibilityLiveRegion(android.view.View, int);
+ method public static deprecated void setActivated(android.view.View, boolean);
+ method public static deprecated void setAlpha(android.view.View, float);
+ method public static void setBackground(android.view.View, android.graphics.drawable.Drawable);
+ method public static void setBackgroundTintList(android.view.View, android.content.res.ColorStateList);
+ method public static void setBackgroundTintMode(android.view.View, android.graphics.PorterDuff.Mode);
+ method public static void setChildrenDrawingOrderEnabled(android.view.ViewGroup, boolean);
+ method public static void setClipBounds(android.view.View, android.graphics.Rect);
+ method public static void setElevation(android.view.View, float);
+ method public static deprecated void setFitsSystemWindows(android.view.View, boolean);
+ method public static void setFocusedByDefault(android.view.View, boolean);
+ method public static void setHasTransientState(android.view.View, boolean);
+ method public static void setImportantForAccessibility(android.view.View, int);
+ method public static void setKeyboardNavigationCluster(android.view.View, boolean);
+ method public static void setLabelFor(android.view.View, int);
+ method public static void setLayerPaint(android.view.View, android.graphics.Paint);
+ method public static deprecated void setLayerType(android.view.View, int, android.graphics.Paint);
+ method public static void setLayoutDirection(android.view.View, int);
+ method public static void setNestedScrollingEnabled(android.view.View, boolean);
+ method public static void setNextClusterForwardId(android.view.View, int);
+ method public static void setOnApplyWindowInsetsListener(android.view.View, android.support.v4.view.OnApplyWindowInsetsListener);
+ method public static deprecated void setOverScrollMode(android.view.View, int);
+ method public static void setPaddingRelative(android.view.View, int, int, int, int);
+ method public static deprecated void setPivotX(android.view.View, float);
+ method public static deprecated void setPivotY(android.view.View, float);
+ method public static void setPointerIcon(android.view.View, android.support.v4.view.PointerIconCompat);
+ method public static deprecated void setRotation(android.view.View, float);
+ method public static deprecated void setRotationX(android.view.View, float);
+ method public static deprecated void setRotationY(android.view.View, float);
+ method public static deprecated void setSaveFromParentEnabled(android.view.View, boolean);
+ method public static deprecated void setScaleX(android.view.View, float);
+ method public static deprecated void setScaleY(android.view.View, float);
+ method public static void setScrollIndicators(android.view.View, int);
+ method public static void setScrollIndicators(android.view.View, int, int);
+ method public static void setTooltipText(android.view.View, java.lang.CharSequence);
+ method public static void setTransitionName(android.view.View, java.lang.String);
+ method public static deprecated void setTranslationX(android.view.View, float);
+ method public static deprecated void setTranslationY(android.view.View, float);
+ method public static void setTranslationZ(android.view.View, float);
+ method public static deprecated void setX(android.view.View, float);
+ method public static deprecated void setY(android.view.View, float);
+ method public static void setZ(android.view.View, float);
+ method public static boolean startDragAndDrop(android.view.View, android.content.ClipData, android.view.View.DragShadowBuilder, java.lang.Object, int);
+ method public static boolean startNestedScroll(android.view.View, int);
+ method public static boolean startNestedScroll(android.view.View, int, int);
+ method public static void stopNestedScroll(android.view.View);
+ method public static void stopNestedScroll(android.view.View, int);
+ method public static void updateDragShadow(android.view.View, android.view.View.DragShadowBuilder);
+ field public static final int ACCESSIBILITY_LIVE_REGION_ASSERTIVE = 2; // 0x2
+ field public static final int ACCESSIBILITY_LIVE_REGION_NONE = 0; // 0x0
+ field public static final int ACCESSIBILITY_LIVE_REGION_POLITE = 1; // 0x1
+ field public static final int IMPORTANT_FOR_ACCESSIBILITY_AUTO = 0; // 0x0
+ field public static final int IMPORTANT_FOR_ACCESSIBILITY_NO = 2; // 0x2
+ field public static final int IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS = 4; // 0x4
+ field public static final int IMPORTANT_FOR_ACCESSIBILITY_YES = 1; // 0x1
+ field public static final deprecated int LAYER_TYPE_HARDWARE = 2; // 0x2
+ field public static final deprecated int LAYER_TYPE_NONE = 0; // 0x0
+ field public static final deprecated int LAYER_TYPE_SOFTWARE = 1; // 0x1
+ field public static final int LAYOUT_DIRECTION_INHERIT = 2; // 0x2
+ field public static final int LAYOUT_DIRECTION_LOCALE = 3; // 0x3
+ field public static final int LAYOUT_DIRECTION_LTR = 0; // 0x0
+ field public static final int LAYOUT_DIRECTION_RTL = 1; // 0x1
+ field public static final deprecated int MEASURED_HEIGHT_STATE_SHIFT = 16; // 0x10
+ field public static final deprecated int MEASURED_SIZE_MASK = 16777215; // 0xffffff
+ field public static final deprecated int MEASURED_STATE_MASK = -16777216; // 0xff000000
+ field public static final deprecated int MEASURED_STATE_TOO_SMALL = 16777216; // 0x1000000
+ field public static final deprecated int OVER_SCROLL_ALWAYS = 0; // 0x0
+ field public static final deprecated int OVER_SCROLL_IF_CONTENT_SCROLLS = 1; // 0x1
+ field public static final deprecated int OVER_SCROLL_NEVER = 2; // 0x2
+ field public static final int SCROLL_AXIS_HORIZONTAL = 1; // 0x1
+ field public static final int SCROLL_AXIS_NONE = 0; // 0x0
+ field public static final int SCROLL_AXIS_VERTICAL = 2; // 0x2
+ field public static final int SCROLL_INDICATOR_BOTTOM = 2; // 0x2
+ field public static final int SCROLL_INDICATOR_END = 32; // 0x20
+ field public static final int SCROLL_INDICATOR_LEFT = 4; // 0x4
+ field public static final int SCROLL_INDICATOR_RIGHT = 8; // 0x8
+ field public static final int SCROLL_INDICATOR_START = 16; // 0x10
+ field public static final int SCROLL_INDICATOR_TOP = 1; // 0x1
+ field public static final int TYPE_NON_TOUCH = 1; // 0x1
+ field public static final int TYPE_TOUCH = 0; // 0x0
+ }
+
+ public final deprecated class ViewConfigurationCompat {
+ method public static float getScaledHorizontalScrollFactor(android.view.ViewConfiguration, android.content.Context);
+ method public static deprecated int getScaledPagingTouchSlop(android.view.ViewConfiguration);
+ method public static float getScaledVerticalScrollFactor(android.view.ViewConfiguration, android.content.Context);
+ method public static deprecated boolean hasPermanentMenuKey(android.view.ViewConfiguration);
+ }
+
+ public final class ViewGroupCompat {
+ method public static int getLayoutMode(android.view.ViewGroup);
+ method public static int getNestedScrollAxes(android.view.ViewGroup);
+ method public static boolean isTransitionGroup(android.view.ViewGroup);
+ method public static deprecated boolean onRequestSendAccessibilityEvent(android.view.ViewGroup, android.view.View, android.view.accessibility.AccessibilityEvent);
+ method public static void setLayoutMode(android.view.ViewGroup, int);
+ method public static deprecated void setMotionEventSplittingEnabled(android.view.ViewGroup, boolean);
+ method public static void setTransitionGroup(android.view.ViewGroup, boolean);
+ field public static final int LAYOUT_MODE_CLIP_BOUNDS = 0; // 0x0
+ field public static final int LAYOUT_MODE_OPTICAL_BOUNDS = 1; // 0x1
+ }
+
+ public final class ViewParentCompat {
+ method public static void notifySubtreeAccessibilityStateChanged(android.view.ViewParent, android.view.View, android.view.View, int);
+ method public static boolean onNestedFling(android.view.ViewParent, android.view.View, float, float, boolean);
+ method public static boolean onNestedPreFling(android.view.ViewParent, android.view.View, float, float);
+ method public static void onNestedPreScroll(android.view.ViewParent, android.view.View, int, int, int[]);
+ method public static void onNestedPreScroll(android.view.ViewParent, android.view.View, int, int, int[], int);
+ method public static void onNestedScroll(android.view.ViewParent, android.view.View, int, int, int, int);
+ method public static void onNestedScroll(android.view.ViewParent, android.view.View, int, int, int, int, int);
+ method public static void onNestedScrollAccepted(android.view.ViewParent, android.view.View, android.view.View, int);
+ method public static void onNestedScrollAccepted(android.view.ViewParent, android.view.View, android.view.View, int, int);
+ method public static boolean onStartNestedScroll(android.view.ViewParent, android.view.View, android.view.View, int);
+ method public static boolean onStartNestedScroll(android.view.ViewParent, android.view.View, android.view.View, int, int);
+ method public static void onStopNestedScroll(android.view.ViewParent, android.view.View);
+ method public static void onStopNestedScroll(android.view.ViewParent, android.view.View, int);
+ method public static deprecated boolean requestSendAccessibilityEvent(android.view.ViewParent, android.view.View, android.view.accessibility.AccessibilityEvent);
+ }
+
+ public final class ViewPropertyAnimatorCompat {
+ method public android.support.v4.view.ViewPropertyAnimatorCompat alpha(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat alphaBy(float);
+ method public void cancel();
+ method public long getDuration();
+ method public android.view.animation.Interpolator getInterpolator();
+ method public long getStartDelay();
+ method public android.support.v4.view.ViewPropertyAnimatorCompat rotation(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat rotationBy(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat rotationX(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat rotationXBy(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat rotationY(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat rotationYBy(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat scaleX(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat scaleXBy(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat scaleY(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat scaleYBy(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat setDuration(long);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat setInterpolator(android.view.animation.Interpolator);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat setListener(android.support.v4.view.ViewPropertyAnimatorListener);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat setStartDelay(long);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat setUpdateListener(android.support.v4.view.ViewPropertyAnimatorUpdateListener);
+ method public void start();
+ method public android.support.v4.view.ViewPropertyAnimatorCompat translationX(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat translationXBy(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat translationY(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat translationYBy(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat translationZ(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat translationZBy(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat withEndAction(java.lang.Runnable);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat withLayer();
+ method public android.support.v4.view.ViewPropertyAnimatorCompat withStartAction(java.lang.Runnable);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat x(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat xBy(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat y(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat yBy(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat z(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat zBy(float);
+ }
+
+ public abstract interface ViewPropertyAnimatorListener {
+ method public abstract void onAnimationCancel(android.view.View);
+ method public abstract void onAnimationEnd(android.view.View);
+ method public abstract void onAnimationStart(android.view.View);
+ }
+
+ public class ViewPropertyAnimatorListenerAdapter implements android.support.v4.view.ViewPropertyAnimatorListener {
+ ctor public ViewPropertyAnimatorListenerAdapter();
+ method public void onAnimationCancel(android.view.View);
+ method public void onAnimationEnd(android.view.View);
+ method public void onAnimationStart(android.view.View);
+ }
+
+ public abstract interface ViewPropertyAnimatorUpdateListener {
+ method public abstract void onAnimationUpdate(android.view.View);
+ }
+
+ public final class WindowCompat {
+ field public static final int FEATURE_ACTION_BAR = 8; // 0x8
+ field public static final int FEATURE_ACTION_BAR_OVERLAY = 9; // 0x9
+ field public static final int FEATURE_ACTION_MODE_OVERLAY = 10; // 0xa
+ }
+
+ public class WindowInsetsCompat {
+ ctor public WindowInsetsCompat(android.support.v4.view.WindowInsetsCompat);
+ method public android.support.v4.view.WindowInsetsCompat consumeStableInsets();
+ method public android.support.v4.view.WindowInsetsCompat consumeSystemWindowInsets();
+ method public int getStableInsetBottom();
+ method public int getStableInsetLeft();
+ method public int getStableInsetRight();
+ method public int getStableInsetTop();
+ method public int getSystemWindowInsetBottom();
+ method public int getSystemWindowInsetLeft();
+ method public int getSystemWindowInsetRight();
+ method public int getSystemWindowInsetTop();
+ method public boolean hasInsets();
+ method public boolean hasStableInsets();
+ method public boolean hasSystemWindowInsets();
+ method public boolean isConsumed();
+ method public boolean isRound();
+ method public android.support.v4.view.WindowInsetsCompat replaceSystemWindowInsets(int, int, int, int);
+ method public android.support.v4.view.WindowInsetsCompat replaceSystemWindowInsets(android.graphics.Rect);
+ }
+
+}
+
+package android.support.v4.view.accessibility {
+
+ public final class AccessibilityEventCompat {
+ method public static deprecated void appendRecord(android.view.accessibility.AccessibilityEvent, android.support.v4.view.accessibility.AccessibilityRecordCompat);
+ method public static deprecated android.support.v4.view.accessibility.AccessibilityRecordCompat asRecord(android.view.accessibility.AccessibilityEvent);
+ method public int getAction(android.view.accessibility.AccessibilityEvent);
+ method public static int getContentChangeTypes(android.view.accessibility.AccessibilityEvent);
+ method public int getMovementGranularity(android.view.accessibility.AccessibilityEvent);
+ method public static deprecated android.support.v4.view.accessibility.AccessibilityRecordCompat getRecord(android.view.accessibility.AccessibilityEvent, int);
+ method public static deprecated int getRecordCount(android.view.accessibility.AccessibilityEvent);
+ method public void setAction(android.view.accessibility.AccessibilityEvent, int);
+ method public static void setContentChangeTypes(android.view.accessibility.AccessibilityEvent, int);
+ method public void setMovementGranularity(android.view.accessibility.AccessibilityEvent, int);
+ field public static final int CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION = 4; // 0x4
+ field public static final int CONTENT_CHANGE_TYPE_SUBTREE = 1; // 0x1
+ field public static final int CONTENT_CHANGE_TYPE_TEXT = 2; // 0x2
+ field public static final int CONTENT_CHANGE_TYPE_UNDEFINED = 0; // 0x0
+ field public static final int TYPES_ALL_MASK = -1; // 0xffffffff
+ field public static final int TYPE_ANNOUNCEMENT = 16384; // 0x4000
+ field public static final int TYPE_ASSIST_READING_CONTEXT = 16777216; // 0x1000000
+ field public static final int TYPE_GESTURE_DETECTION_END = 524288; // 0x80000
+ field public static final int TYPE_GESTURE_DETECTION_START = 262144; // 0x40000
+ field public static final deprecated int TYPE_TOUCH_EXPLORATION_GESTURE_END = 1024; // 0x400
+ field public static final deprecated int TYPE_TOUCH_EXPLORATION_GESTURE_START = 512; // 0x200
+ field public static final int TYPE_TOUCH_INTERACTION_END = 2097152; // 0x200000
+ field public static final int TYPE_TOUCH_INTERACTION_START = 1048576; // 0x100000
+ field public static final int TYPE_VIEW_ACCESSIBILITY_FOCUSED = 32768; // 0x8000
+ field public static final int TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED = 65536; // 0x10000
+ field public static final int TYPE_VIEW_CONTEXT_CLICKED = 8388608; // 0x800000
+ field public static final deprecated int TYPE_VIEW_HOVER_ENTER = 128; // 0x80
+ field public static final deprecated int TYPE_VIEW_HOVER_EXIT = 256; // 0x100
+ field public static final deprecated int TYPE_VIEW_SCROLLED = 4096; // 0x1000
+ field public static final deprecated int TYPE_VIEW_TEXT_SELECTION_CHANGED = 8192; // 0x2000
+ field public static final int TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY = 131072; // 0x20000
+ field public static final int TYPE_WINDOWS_CHANGED = 4194304; // 0x400000
+ field public static final deprecated int TYPE_WINDOW_CONTENT_CHANGED = 2048; // 0x800
+ }
+
+ public final class AccessibilityManagerCompat {
+ method public static deprecated boolean addAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener);
+ method public static boolean addTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener);
+ method public static deprecated java.util.List<android.accessibilityservice.AccessibilityServiceInfo> getEnabledAccessibilityServiceList(android.view.accessibility.AccessibilityManager, int);
+ method public static deprecated java.util.List<android.accessibilityservice.AccessibilityServiceInfo> getInstalledAccessibilityServiceList(android.view.accessibility.AccessibilityManager);
+ method public static deprecated boolean isTouchExplorationEnabled(android.view.accessibility.AccessibilityManager);
+ method public static deprecated boolean removeAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener);
+ method public static boolean removeTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener);
+ }
+
+ public static abstract deprecated interface AccessibilityManagerCompat.AccessibilityStateChangeListener {
+ method public abstract deprecated void onAccessibilityStateChanged(boolean);
+ }
+
+ public static abstract deprecated class AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat implements android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener {
+ ctor public AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat();
+ }
+
+ public static abstract interface AccessibilityManagerCompat.TouchExplorationStateChangeListener {
+ method public abstract void onTouchExplorationStateChanged(boolean);
+ }
+
+ public class AccessibilityNodeInfoCompat {
+ ctor public deprecated AccessibilityNodeInfoCompat(java.lang.Object);
+ method public void addAction(int);
+ method public void addAction(android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat);
+ method public void addChild(android.view.View);
+ method public void addChild(android.view.View, int);
+ method public boolean canOpenPopup();
+ method public java.util.List<android.support.v4.view.accessibility.AccessibilityNodeInfoCompat> findAccessibilityNodeInfosByText(java.lang.String);
+ method public java.util.List<android.support.v4.view.accessibility.AccessibilityNodeInfoCompat> findAccessibilityNodeInfosByViewId(java.lang.String);
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat findFocus(int);
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat focusSearch(int);
+ method public java.util.List<android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat> getActionList();
+ method public int getActions();
+ method public void getBoundsInParent(android.graphics.Rect);
+ method public void getBoundsInScreen(android.graphics.Rect);
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat getChild(int);
+ method public int getChildCount();
+ method public java.lang.CharSequence getClassName();
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat getCollectionInfo();
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat getCollectionItemInfo();
+ method public java.lang.CharSequence getContentDescription();
+ method public int getDrawingOrder();
+ method public java.lang.CharSequence getError();
+ method public android.os.Bundle getExtras();
+ method public deprecated java.lang.Object getInfo();
+ method public int getInputType();
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat getLabelFor();
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat getLabeledBy();
+ method public int getLiveRegion();
+ method public int getMaxTextLength();
+ method public int getMovementGranularities();
+ method public java.lang.CharSequence getPackageName();
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat getParent();
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat getRangeInfo();
+ method public java.lang.CharSequence getRoleDescription();
+ method public java.lang.CharSequence getText();
+ method public int getTextSelectionEnd();
+ method public int getTextSelectionStart();
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat getTraversalAfter();
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat getTraversalBefore();
+ method public java.lang.String getViewIdResourceName();
+ method public android.support.v4.view.accessibility.AccessibilityWindowInfoCompat getWindow();
+ method public int getWindowId();
+ method public boolean isAccessibilityFocused();
+ method public boolean isCheckable();
+ method public boolean isChecked();
+ method public boolean isClickable();
+ method public boolean isContentInvalid();
+ method public boolean isContextClickable();
+ method public boolean isDismissable();
+ method public boolean isEditable();
+ method public boolean isEnabled();
+ method public boolean isFocusable();
+ method public boolean isFocused();
+ method public boolean isImportantForAccessibility();
+ method public boolean isLongClickable();
+ method public boolean isMultiLine();
+ method public boolean isPassword();
+ method public boolean isScrollable();
+ method public boolean isSelected();
+ method public boolean isVisibleToUser();
+ method public static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat obtain(android.view.View);
+ method public static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat obtain(android.view.View, int);
+ method public static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat obtain();
+ method public static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat obtain(android.support.v4.view.accessibility.AccessibilityNodeInfoCompat);
+ method public boolean performAction(int);
+ method public boolean performAction(int, android.os.Bundle);
+ method public void recycle();
+ method public boolean refresh();
+ method public boolean removeAction(android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat);
+ method public boolean removeChild(android.view.View);
+ method public boolean removeChild(android.view.View, int);
+ method public void setAccessibilityFocused(boolean);
+ method public void setBoundsInParent(android.graphics.Rect);
+ method public void setBoundsInScreen(android.graphics.Rect);
+ method public void setCanOpenPopup(boolean);
+ method public void setCheckable(boolean);
+ method public void setChecked(boolean);
+ method public void setClassName(java.lang.CharSequence);
+ method public void setClickable(boolean);
+ method public void setCollectionInfo(java.lang.Object);
+ method public void setCollectionItemInfo(java.lang.Object);
+ method public void setContentDescription(java.lang.CharSequence);
+ method public void setContentInvalid(boolean);
+ method public void setContextClickable(boolean);
+ method public void setDismissable(boolean);
+ method public void setDrawingOrder(int);
+ method public void setEditable(boolean);
+ method public void setEnabled(boolean);
+ method public void setError(java.lang.CharSequence);
+ method public void setFocusable(boolean);
+ method public void setFocused(boolean);
+ method public void setImportantForAccessibility(boolean);
+ method public void setInputType(int);
+ method public void setLabelFor(android.view.View);
+ method public void setLabelFor(android.view.View, int);
+ method public void setLabeledBy(android.view.View);
+ method public void setLabeledBy(android.view.View, int);
+ method public void setLiveRegion(int);
+ method public void setLongClickable(boolean);
+ method public void setMaxTextLength(int);
+ method public void setMovementGranularities(int);
+ method public void setMultiLine(boolean);
+ method public void setPackageName(java.lang.CharSequence);
+ method public void setParent(android.view.View);
+ method public void setParent(android.view.View, int);
+ method public void setPassword(boolean);
+ method public void setRangeInfo(android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat);
+ method public void setRoleDescription(java.lang.CharSequence);
+ method public void setScrollable(boolean);
+ method public void setSelected(boolean);
+ method public void setSource(android.view.View);
+ method public void setSource(android.view.View, int);
+ method public void setText(java.lang.CharSequence);
+ method public void setTextSelection(int, int);
+ method public void setTraversalAfter(android.view.View);
+ method public void setTraversalAfter(android.view.View, int);
+ method public void setTraversalBefore(android.view.View);
+ method public void setTraversalBefore(android.view.View, int);
+ method public void setViewIdResourceName(java.lang.String);
+ method public void setVisibleToUser(boolean);
+ method public android.view.accessibility.AccessibilityNodeInfo unwrap();
+ method public static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat wrap(android.view.accessibility.AccessibilityNodeInfo);
+ field public static final int ACTION_ACCESSIBILITY_FOCUS = 64; // 0x40
+ field public static final java.lang.String ACTION_ARGUMENT_COLUMN_INT = "android.view.accessibility.action.ARGUMENT_COLUMN_INT";
+ field public static final java.lang.String ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN = "ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN";
+ field public static final java.lang.String ACTION_ARGUMENT_HTML_ELEMENT_STRING = "ACTION_ARGUMENT_HTML_ELEMENT_STRING";
+ field public static final java.lang.String ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT = "ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT";
+ field public static final java.lang.String ACTION_ARGUMENT_PROGRESS_VALUE = "android.view.accessibility.action.ARGUMENT_PROGRESS_VALUE";
+ field public static final java.lang.String ACTION_ARGUMENT_ROW_INT = "android.view.accessibility.action.ARGUMENT_ROW_INT";
+ field public static final java.lang.String ACTION_ARGUMENT_SELECTION_END_INT = "ACTION_ARGUMENT_SELECTION_END_INT";
+ field public static final java.lang.String ACTION_ARGUMENT_SELECTION_START_INT = "ACTION_ARGUMENT_SELECTION_START_INT";
+ field public static final java.lang.String ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE = "ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE";
+ field public static final int ACTION_CLEAR_ACCESSIBILITY_FOCUS = 128; // 0x80
+ field public static final int ACTION_CLEAR_FOCUS = 2; // 0x2
+ field public static final int ACTION_CLEAR_SELECTION = 8; // 0x8
+ field public static final int ACTION_CLICK = 16; // 0x10
+ field public static final int ACTION_COLLAPSE = 524288; // 0x80000
+ field public static final int ACTION_COPY = 16384; // 0x4000
+ field public static final int ACTION_CUT = 65536; // 0x10000
+ field public static final int ACTION_DISMISS = 1048576; // 0x100000
+ field public static final int ACTION_EXPAND = 262144; // 0x40000
+ field public static final int ACTION_FOCUS = 1; // 0x1
+ field public static final int ACTION_LONG_CLICK = 32; // 0x20
+ field public static final int ACTION_NEXT_AT_MOVEMENT_GRANULARITY = 256; // 0x100
+ field public static final int ACTION_NEXT_HTML_ELEMENT = 1024; // 0x400
+ field public static final int ACTION_PASTE = 32768; // 0x8000
+ field public static final int ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY = 512; // 0x200
+ field public static final int ACTION_PREVIOUS_HTML_ELEMENT = 2048; // 0x800
+ field public static final int ACTION_SCROLL_BACKWARD = 8192; // 0x2000
+ field public static final int ACTION_SCROLL_FORWARD = 4096; // 0x1000
+ field public static final int ACTION_SELECT = 4; // 0x4
+ field public static final int ACTION_SET_SELECTION = 131072; // 0x20000
+ field public static final int ACTION_SET_TEXT = 2097152; // 0x200000
+ field public static final int FOCUS_ACCESSIBILITY = 2; // 0x2
+ field public static final int FOCUS_INPUT = 1; // 0x1
+ field public static final int MOVEMENT_GRANULARITY_CHARACTER = 1; // 0x1
+ field public static final int MOVEMENT_GRANULARITY_LINE = 4; // 0x4
+ field public static final int MOVEMENT_GRANULARITY_PAGE = 16; // 0x10
+ field public static final int MOVEMENT_GRANULARITY_PARAGRAPH = 8; // 0x8
+ field public static final int MOVEMENT_GRANULARITY_WORD = 2; // 0x2
+ }
+
+ public static class AccessibilityNodeInfoCompat.AccessibilityActionCompat {
+ ctor public AccessibilityNodeInfoCompat.AccessibilityActionCompat(int, java.lang.CharSequence);
+ method public int getId();
+ method public java.lang.CharSequence getLabel();
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_ACCESSIBILITY_FOCUS;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_CLEAR_ACCESSIBILITY_FOCUS;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_CLEAR_FOCUS;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_CLEAR_SELECTION;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_CLICK;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_COLLAPSE;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_CONTEXT_CLICK;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_COPY;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_CUT;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_DISMISS;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_EXPAND;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_FOCUS;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_LONG_CLICK;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_NEXT_AT_MOVEMENT_GRANULARITY;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_NEXT_HTML_ELEMENT;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PASTE;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PREVIOUS_HTML_ELEMENT;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SCROLL_BACKWARD;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SCROLL_DOWN;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SCROLL_FORWARD;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SCROLL_LEFT;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SCROLL_RIGHT;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SCROLL_TO_POSITION;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SCROLL_UP;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SELECT;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SET_PROGRESS;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SET_SELECTION;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SET_TEXT;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SHOW_ON_SCREEN;
+ }
+
+ public static class AccessibilityNodeInfoCompat.CollectionInfoCompat {
+ method public int getColumnCount();
+ method public int getRowCount();
+ method public int getSelectionMode();
+ method public boolean isHierarchical();
+ method public static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat obtain(int, int, boolean, int);
+ method public static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat obtain(int, int, boolean);
+ field public static final int SELECTION_MODE_MULTIPLE = 2; // 0x2
+ field public static final int SELECTION_MODE_NONE = 0; // 0x0
+ field public static final int SELECTION_MODE_SINGLE = 1; // 0x1
+ }
+
+ public static class AccessibilityNodeInfoCompat.CollectionItemInfoCompat {
+ method public int getColumnIndex();
+ method public int getColumnSpan();
+ method public int getRowIndex();
+ method public int getRowSpan();
+ method public boolean isHeading();
+ method public boolean isSelected();
+ method public static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat obtain(int, int, int, int, boolean, boolean);
+ method public static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat obtain(int, int, int, int, boolean);
+ }
+
+ public static class AccessibilityNodeInfoCompat.RangeInfoCompat {
+ method public float getCurrent();
+ method public float getMax();
+ method public float getMin();
+ method public int getType();
+ method public static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat obtain(int, float, float, float);
+ field public static final int RANGE_TYPE_FLOAT = 1; // 0x1
+ field public static final int RANGE_TYPE_INT = 0; // 0x0
+ field public static final int RANGE_TYPE_PERCENT = 2; // 0x2
+ }
+
+ public class AccessibilityNodeProviderCompat {
+ ctor public AccessibilityNodeProviderCompat();
+ ctor public AccessibilityNodeProviderCompat(java.lang.Object);
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat createAccessibilityNodeInfo(int);
+ method public java.util.List<android.support.v4.view.accessibility.AccessibilityNodeInfoCompat> findAccessibilityNodeInfosByText(java.lang.String, int);
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat findFocus(int);
+ method public java.lang.Object getProvider();
+ method public boolean performAction(int, int, android.os.Bundle);
+ field public static final int HOST_VIEW_ID = -1; // 0xffffffff
+ }
+
+ public class AccessibilityRecordCompat {
+ ctor public deprecated AccessibilityRecordCompat(java.lang.Object);
+ method public deprecated boolean equals(java.lang.Object);
+ method public deprecated int getAddedCount();
+ method public deprecated java.lang.CharSequence getBeforeText();
+ method public deprecated java.lang.CharSequence getClassName();
+ method public deprecated java.lang.CharSequence getContentDescription();
+ method public deprecated int getCurrentItemIndex();
+ method public deprecated int getFromIndex();
+ method public deprecated java.lang.Object getImpl();
+ method public deprecated int getItemCount();
+ method public deprecated int getMaxScrollX();
+ method public static int getMaxScrollX(android.view.accessibility.AccessibilityRecord);
+ method public deprecated int getMaxScrollY();
+ method public static int getMaxScrollY(android.view.accessibility.AccessibilityRecord);
+ method public deprecated android.os.Parcelable getParcelableData();
+ method public deprecated int getRemovedCount();
+ method public deprecated int getScrollX();
+ method public deprecated int getScrollY();
+ method public deprecated android.support.v4.view.accessibility.AccessibilityNodeInfoCompat getSource();
+ method public deprecated java.util.List<java.lang.CharSequence> getText();
+ method public deprecated int getToIndex();
+ method public deprecated int getWindowId();
+ method public deprecated int hashCode();
+ method public deprecated boolean isChecked();
+ method public deprecated boolean isEnabled();
+ method public deprecated boolean isFullScreen();
+ method public deprecated boolean isPassword();
+ method public deprecated boolean isScrollable();
+ method public static deprecated android.support.v4.view.accessibility.AccessibilityRecordCompat obtain(android.support.v4.view.accessibility.AccessibilityRecordCompat);
+ method public static deprecated android.support.v4.view.accessibility.AccessibilityRecordCompat obtain();
+ method public deprecated void recycle();
+ method public deprecated void setAddedCount(int);
+ method public deprecated void setBeforeText(java.lang.CharSequence);
+ method public deprecated void setChecked(boolean);
+ method public deprecated void setClassName(java.lang.CharSequence);
+ method public deprecated void setContentDescription(java.lang.CharSequence);
+ method public deprecated void setCurrentItemIndex(int);
+ method public deprecated void setEnabled(boolean);
+ method public deprecated void setFromIndex(int);
+ method public deprecated void setFullScreen(boolean);
+ method public deprecated void setItemCount(int);
+ method public deprecated void setMaxScrollX(int);
+ method public static void setMaxScrollX(android.view.accessibility.AccessibilityRecord, int);
+ method public deprecated void setMaxScrollY(int);
+ method public static void setMaxScrollY(android.view.accessibility.AccessibilityRecord, int);
+ method public deprecated void setParcelableData(android.os.Parcelable);
+ method public deprecated void setPassword(boolean);
+ method public deprecated void setRemovedCount(int);
+ method public deprecated void setScrollX(int);
+ method public deprecated void setScrollY(int);
+ method public deprecated void setScrollable(boolean);
+ method public deprecated void setSource(android.view.View);
+ method public deprecated void setSource(android.view.View, int);
+ method public static void setSource(android.view.accessibility.AccessibilityRecord, android.view.View, int);
+ method public deprecated void setToIndex(int);
+ }
+
+ public class AccessibilityWindowInfoCompat {
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat getAnchor();
+ method public void getBoundsInScreen(android.graphics.Rect);
+ method public android.support.v4.view.accessibility.AccessibilityWindowInfoCompat getChild(int);
+ method public int getChildCount();
+ method public int getId();
+ method public int getLayer();
+ method public android.support.v4.view.accessibility.AccessibilityWindowInfoCompat getParent();
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat getRoot();
+ method public java.lang.CharSequence getTitle();
+ method public int getType();
+ method public boolean isAccessibilityFocused();
+ method public boolean isActive();
+ method public boolean isFocused();
+ method public static android.support.v4.view.accessibility.AccessibilityWindowInfoCompat obtain();
+ method public static android.support.v4.view.accessibility.AccessibilityWindowInfoCompat obtain(android.support.v4.view.accessibility.AccessibilityWindowInfoCompat);
+ method public void recycle();
+ field public static final int TYPE_ACCESSIBILITY_OVERLAY = 4; // 0x4
+ field public static final int TYPE_APPLICATION = 1; // 0x1
+ field public static final int TYPE_INPUT_METHOD = 2; // 0x2
+ field public static final int TYPE_SPLIT_SCREEN_DIVIDER = 5; // 0x5
+ field public static final int TYPE_SYSTEM = 3; // 0x3
+ }
+
+}
+
+package android.support.v4.view.animation {
+
+ public final class PathInterpolatorCompat {
+ method public static android.view.animation.Interpolator create(android.graphics.Path);
+ method public static android.view.animation.Interpolator create(float, float);
+ method public static android.view.animation.Interpolator create(float, float, float, float);
+ }
+
+}
+
+package android.support.v4.widget {
+
+ public final class CompoundButtonCompat {
+ method public static android.graphics.drawable.Drawable getButtonDrawable(android.widget.CompoundButton);
+ method public static android.content.res.ColorStateList getButtonTintList(android.widget.CompoundButton);
+ method public static android.graphics.PorterDuff.Mode getButtonTintMode(android.widget.CompoundButton);
+ method public static void setButtonTintList(android.widget.CompoundButton, android.content.res.ColorStateList);
+ method public static void setButtonTintMode(android.widget.CompoundButton, android.graphics.PorterDuff.Mode);
+ }
+
+ public final class EdgeEffectCompat {
+ ctor public deprecated EdgeEffectCompat(android.content.Context);
+ method public deprecated boolean draw(android.graphics.Canvas);
+ method public deprecated void finish();
+ method public deprecated boolean isFinished();
+ method public deprecated boolean onAbsorb(int);
+ method public deprecated boolean onPull(float);
+ method public deprecated boolean onPull(float, float);
+ method public static void onPull(android.widget.EdgeEffect, float, float);
+ method public deprecated boolean onRelease();
+ method public deprecated void setSize(int, int);
+ }
+
+ public class ImageViewCompat {
+ method public static android.content.res.ColorStateList getImageTintList(android.widget.ImageView);
+ method public static android.graphics.PorterDuff.Mode getImageTintMode(android.widget.ImageView);
+ method public static void setImageTintList(android.widget.ImageView, android.content.res.ColorStateList);
+ method public static void setImageTintMode(android.widget.ImageView, android.graphics.PorterDuff.Mode);
+ }
+
+ public final class ListPopupWindowCompat {
+ method public static deprecated android.view.View.OnTouchListener createDragToOpenListener(java.lang.Object, android.view.View);
+ method public static android.view.View.OnTouchListener createDragToOpenListener(android.widget.ListPopupWindow, android.view.View);
+ }
+
+ public final class ListViewCompat {
+ method public static boolean canScrollList(android.widget.ListView, int);
+ method public static void scrollListBy(android.widget.ListView, int);
+ }
+
+ public final class PopupMenuCompat {
+ method public static android.view.View.OnTouchListener getDragToOpenListener(java.lang.Object);
+ }
+
+ public final class PopupWindowCompat {
+ method public static boolean getOverlapAnchor(android.widget.PopupWindow);
+ method public static int getWindowLayoutType(android.widget.PopupWindow);
+ method public static void setOverlapAnchor(android.widget.PopupWindow, boolean);
+ method public static void setWindowLayoutType(android.widget.PopupWindow, int);
+ method public static void showAsDropDown(android.widget.PopupWindow, android.view.View, int, int, int);
+ }
+
+ public final deprecated class ScrollerCompat {
+ method public deprecated void abortAnimation();
+ method public deprecated boolean computeScrollOffset();
+ method public static deprecated android.support.v4.widget.ScrollerCompat create(android.content.Context);
+ method public static deprecated android.support.v4.widget.ScrollerCompat create(android.content.Context, android.view.animation.Interpolator);
+ method public deprecated void fling(int, int, int, int, int, int, int, int);
+ method public deprecated void fling(int, int, int, int, int, int, int, int, int, int);
+ method public deprecated float getCurrVelocity();
+ method public deprecated int getCurrX();
+ method public deprecated int getCurrY();
+ method public deprecated int getFinalX();
+ method public deprecated int getFinalY();
+ method public deprecated boolean isFinished();
+ method public deprecated boolean isOverScrolled();
+ method public deprecated void notifyHorizontalEdgeReached(int, int, int);
+ method public deprecated void notifyVerticalEdgeReached(int, int, int);
+ method public deprecated boolean springBack(int, int, int, int, int, int);
+ method public deprecated void startScroll(int, int, int, int);
+ method public deprecated void startScroll(int, int, int, int, int);
+ }
+
+ public final deprecated class SearchViewCompat {
+ method public static deprecated java.lang.CharSequence getQuery(android.view.View);
+ method public static deprecated boolean isIconified(android.view.View);
+ method public static deprecated boolean isQueryRefinementEnabled(android.view.View);
+ method public static deprecated boolean isSubmitButtonEnabled(android.view.View);
+ method public static deprecated android.view.View newSearchView(android.content.Context);
+ method public static deprecated void setIconified(android.view.View, boolean);
+ method public static deprecated void setImeOptions(android.view.View, int);
+ method public static deprecated void setInputType(android.view.View, int);
+ method public static deprecated void setMaxWidth(android.view.View, int);
+ method public static deprecated void setOnCloseListener(android.view.View, android.support.v4.widget.SearchViewCompat.OnCloseListener);
+ method public static deprecated void setOnQueryTextListener(android.view.View, android.support.v4.widget.SearchViewCompat.OnQueryTextListener);
+ method public static deprecated void setQuery(android.view.View, java.lang.CharSequence, boolean);
+ method public static deprecated void setQueryHint(android.view.View, java.lang.CharSequence);
+ method public static deprecated void setQueryRefinementEnabled(android.view.View, boolean);
+ method public static deprecated void setSearchableInfo(android.view.View, android.content.ComponentName);
+ method public static deprecated void setSubmitButtonEnabled(android.view.View, boolean);
+ }
+
+ public static abstract deprecated interface SearchViewCompat.OnCloseListener {
+ method public abstract boolean onClose();
+ }
+
+ public static abstract deprecated class SearchViewCompat.OnCloseListenerCompat implements android.support.v4.widget.SearchViewCompat.OnCloseListener {
+ ctor public SearchViewCompat.OnCloseListenerCompat();
+ method public boolean onClose();
+ }
+
+ public static abstract deprecated interface SearchViewCompat.OnQueryTextListener {
+ method public abstract boolean onQueryTextChange(java.lang.String);
+ method public abstract boolean onQueryTextSubmit(java.lang.String);
+ }
+
+ public static abstract deprecated class SearchViewCompat.OnQueryTextListenerCompat implements android.support.v4.widget.SearchViewCompat.OnQueryTextListener {
+ ctor public SearchViewCompat.OnQueryTextListenerCompat();
+ method public boolean onQueryTextChange(java.lang.String);
+ method public boolean onQueryTextSubmit(java.lang.String);
+ }
+
+ public final class TextViewCompat {
+ method public static int getAutoSizeMaxTextSize(android.widget.TextView);
+ method public static int getAutoSizeMinTextSize(android.widget.TextView);
+ method public static int getAutoSizeStepGranularity(android.widget.TextView);
+ method public static int[] getAutoSizeTextAvailableSizes(android.widget.TextView);
+ method public static int getAutoSizeTextType(android.widget.TextView);
+ method public static android.graphics.drawable.Drawable[] getCompoundDrawablesRelative(android.widget.TextView);
+ method public static int getMaxLines(android.widget.TextView);
+ method public static int getMinLines(android.widget.TextView);
+ method public static void setAutoSizeTextTypeUniformWithConfiguration(android.widget.TextView, int, int, int, int) throws java.lang.IllegalArgumentException;
+ method public static void setAutoSizeTextTypeUniformWithPresetSizes(android.widget.TextView, int[], int) throws java.lang.IllegalArgumentException;
+ method public static void setAutoSizeTextTypeWithDefaults(android.widget.TextView, int);
+ method public static void setCompoundDrawablesRelative(android.widget.TextView, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable);
+ method public static void setCompoundDrawablesRelativeWithIntrinsicBounds(android.widget.TextView, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable);
+ method public static void setCompoundDrawablesRelativeWithIntrinsicBounds(android.widget.TextView, int, int, int, int);
+ method public static void setTextAppearance(android.widget.TextView, int);
+ field public static final int AUTO_SIZE_TEXT_TYPE_NONE = 0; // 0x0
+ field public static final int AUTO_SIZE_TEXT_TYPE_UNIFORM = 1; // 0x1
+ }
+
+ public abstract interface TintableCompoundButton {
+ method public abstract android.content.res.ColorStateList getSupportButtonTintList();
+ method public abstract android.graphics.PorterDuff.Mode getSupportButtonTintMode();
+ method public abstract void setSupportButtonTintList(android.content.res.ColorStateList);
+ method public abstract void setSupportButtonTintMode(android.graphics.PorterDuff.Mode);
+ }
+
+}
+
diff --git a/compat/api/27.0.0.txt b/compat/api/27.0.0.txt
new file mode 100644
index 0000000..96a94cb
--- /dev/null
+++ b/compat/api/27.0.0.txt
@@ -0,0 +1,2366 @@
+package android.support.v4.accessibilityservice {
+
+ public final class AccessibilityServiceInfoCompat {
+ method public static java.lang.String capabilityToString(int);
+ method public static java.lang.String feedbackTypeToString(int);
+ method public static java.lang.String flagToString(int);
+ method public static int getCapabilities(android.accessibilityservice.AccessibilityServiceInfo);
+ method public static java.lang.String loadDescription(android.accessibilityservice.AccessibilityServiceInfo, android.content.pm.PackageManager);
+ field public static final int CAPABILITY_CAN_FILTER_KEY_EVENTS = 8; // 0x8
+ field public static final int CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 4; // 0x4
+ field public static final int CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION = 2; // 0x2
+ field public static final int CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT = 1; // 0x1
+ field public static final int FEEDBACK_ALL_MASK = -1; // 0xffffffff
+ field public static final int FEEDBACK_BRAILLE = 32; // 0x20
+ field public static final int FLAG_INCLUDE_NOT_IMPORTANT_VIEWS = 2; // 0x2
+ field public static final int FLAG_REPORT_VIEW_IDS = 16; // 0x10
+ field public static final int FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 8; // 0x8
+ field public static final int FLAG_REQUEST_FILTER_KEY_EVENTS = 32; // 0x20
+ field public static final int FLAG_REQUEST_TOUCH_EXPLORATION_MODE = 4; // 0x4
+ }
+
+}
+
+package android.support.v4.app {
+
+ public class ActivityCompat extends android.support.v4.content.ContextCompat {
+ ctor protected ActivityCompat();
+ method public static void finishAffinity(android.app.Activity);
+ method public static void finishAfterTransition(android.app.Activity);
+ method public static android.net.Uri getReferrer(android.app.Activity);
+ method public static deprecated boolean invalidateOptionsMenu(android.app.Activity);
+ method public static void postponeEnterTransition(android.app.Activity);
+ method public static void requestPermissions(android.app.Activity, java.lang.String[], int);
+ method public static void setEnterSharedElementCallback(android.app.Activity, android.support.v4.app.SharedElementCallback);
+ method public static void setExitSharedElementCallback(android.app.Activity, android.support.v4.app.SharedElementCallback);
+ method public static void setPermissionCompatDelegate(android.support.v4.app.ActivityCompat.PermissionCompatDelegate);
+ method public static boolean shouldShowRequestPermissionRationale(android.app.Activity, java.lang.String);
+ method public static void startActivityForResult(android.app.Activity, android.content.Intent, int, android.os.Bundle);
+ method public static void startIntentSenderForResult(android.app.Activity, android.content.IntentSender, int, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException;
+ method public static void startPostponedEnterTransition(android.app.Activity);
+ }
+
+ public static abstract interface ActivityCompat.OnRequestPermissionsResultCallback {
+ method public abstract void onRequestPermissionsResult(int, java.lang.String[], int[]);
+ }
+
+ public static abstract interface ActivityCompat.PermissionCompatDelegate {
+ method public abstract boolean onActivityResult(android.app.Activity, int, int, android.content.Intent);
+ method public abstract boolean requestPermissions(android.app.Activity, java.lang.String[], int);
+ }
+
+ public final class ActivityManagerCompat {
+ method public static boolean isLowRamDevice(android.app.ActivityManager);
+ }
+
+ public class ActivityOptionsCompat {
+ ctor protected ActivityOptionsCompat();
+ method public android.graphics.Rect getLaunchBounds();
+ method public static android.support.v4.app.ActivityOptionsCompat makeBasic();
+ method public static android.support.v4.app.ActivityOptionsCompat makeClipRevealAnimation(android.view.View, int, int, int, int);
+ method public static android.support.v4.app.ActivityOptionsCompat makeCustomAnimation(android.content.Context, int, int);
+ method public static android.support.v4.app.ActivityOptionsCompat makeScaleUpAnimation(android.view.View, int, int, int, int);
+ method public static android.support.v4.app.ActivityOptionsCompat makeSceneTransitionAnimation(android.app.Activity, android.view.View, java.lang.String);
+ method public static android.support.v4.app.ActivityOptionsCompat makeSceneTransitionAnimation(android.app.Activity, android.support.v4.util.Pair<android.view.View, java.lang.String>...);
+ method public static android.support.v4.app.ActivityOptionsCompat makeTaskLaunchBehind();
+ method public static android.support.v4.app.ActivityOptionsCompat makeThumbnailScaleUpAnimation(android.view.View, android.graphics.Bitmap, int, int);
+ method public void requestUsageTimeReport(android.app.PendingIntent);
+ method public android.support.v4.app.ActivityOptionsCompat setLaunchBounds(android.graphics.Rect);
+ method public android.os.Bundle toBundle();
+ method public void update(android.support.v4.app.ActivityOptionsCompat);
+ field public static final java.lang.String EXTRA_USAGE_TIME_REPORT = "android.activity.usage_time";
+ field public static final java.lang.String EXTRA_USAGE_TIME_REPORT_PACKAGES = "android.usage_time_packages";
+ }
+
+ public final class AlarmManagerCompat {
+ method public static void setAlarmClock(android.app.AlarmManager, long, android.app.PendingIntent, android.app.PendingIntent);
+ method public static void setAndAllowWhileIdle(android.app.AlarmManager, int, long, android.app.PendingIntent);
+ method public static void setExact(android.app.AlarmManager, int, long, android.app.PendingIntent);
+ method public static void setExactAndAllowWhileIdle(android.app.AlarmManager, int, long, android.app.PendingIntent);
+ }
+
+ public final class AppOpsManagerCompat {
+ method public static int noteOp(android.content.Context, java.lang.String, int, java.lang.String);
+ method public static int noteProxyOp(android.content.Context, java.lang.String, java.lang.String);
+ method public static java.lang.String permissionToOp(java.lang.String);
+ field public static final int MODE_ALLOWED = 0; // 0x0
+ field public static final int MODE_DEFAULT = 3; // 0x3
+ field public static final int MODE_IGNORED = 1; // 0x1
+ }
+
+ public final class BundleCompat {
+ method public static android.os.IBinder getBinder(android.os.Bundle, java.lang.String);
+ method public static void putBinder(android.os.Bundle, java.lang.String, android.os.IBinder);
+ }
+
+ public abstract class JobIntentService extends android.app.Service {
+ ctor public JobIntentService();
+ method public static void enqueueWork(android.content.Context, java.lang.Class, int, android.content.Intent);
+ method public static void enqueueWork(android.content.Context, android.content.ComponentName, int, android.content.Intent);
+ method public boolean isStopped();
+ method public android.os.IBinder onBind(android.content.Intent);
+ method protected abstract void onHandleWork(android.content.Intent);
+ method public boolean onStopCurrentWork();
+ method public void setInterruptIfStopped(boolean);
+ }
+
+ public class NotificationCompat {
+ ctor public NotificationCompat();
+ method public static android.support.v4.app.NotificationCompat.Action getAction(android.app.Notification, int);
+ method public static int getActionCount(android.app.Notification);
+ method public static int getBadgeIconType(android.app.Notification);
+ method public static java.lang.String getCategory(android.app.Notification);
+ method public static java.lang.String getChannelId(android.app.Notification);
+ method public static android.os.Bundle getExtras(android.app.Notification);
+ method public static java.lang.String getGroup(android.app.Notification);
+ method public static int getGroupAlertBehavior(android.app.Notification);
+ method public static boolean getLocalOnly(android.app.Notification);
+ method public static java.lang.String getShortcutId(android.app.Notification);
+ method public static java.lang.String getSortKey(android.app.Notification);
+ method public static long getTimeoutAfter(android.app.Notification);
+ method public static boolean isGroupSummary(android.app.Notification);
+ field public static final int BADGE_ICON_LARGE = 2; // 0x2
+ field public static final int BADGE_ICON_NONE = 0; // 0x0
+ field public static final int BADGE_ICON_SMALL = 1; // 0x1
+ field public static final java.lang.String CATEGORY_ALARM = "alarm";
+ field public static final java.lang.String CATEGORY_CALL = "call";
+ field public static final java.lang.String CATEGORY_EMAIL = "email";
+ field public static final java.lang.String CATEGORY_ERROR = "err";
+ field public static final java.lang.String CATEGORY_EVENT = "event";
+ field public static final java.lang.String CATEGORY_MESSAGE = "msg";
+ field public static final java.lang.String CATEGORY_PROGRESS = "progress";
+ field public static final java.lang.String CATEGORY_PROMO = "promo";
+ field public static final java.lang.String CATEGORY_RECOMMENDATION = "recommendation";
+ field public static final java.lang.String CATEGORY_REMINDER = "reminder";
+ field public static final java.lang.String CATEGORY_SERVICE = "service";
+ field public static final java.lang.String CATEGORY_SOCIAL = "social";
+ field public static final java.lang.String CATEGORY_STATUS = "status";
+ field public static final java.lang.String CATEGORY_SYSTEM = "sys";
+ field public static final java.lang.String CATEGORY_TRANSPORT = "transport";
+ field public static final int COLOR_DEFAULT = 0; // 0x0
+ field public static final int DEFAULT_ALL = -1; // 0xffffffff
+ field public static final int DEFAULT_LIGHTS = 4; // 0x4
+ field public static final int DEFAULT_SOUND = 1; // 0x1
+ field public static final int DEFAULT_VIBRATE = 2; // 0x2
+ field public static final java.lang.String EXTRA_AUDIO_CONTENTS_URI = "android.audioContents";
+ field public static final java.lang.String EXTRA_BACKGROUND_IMAGE_URI = "android.backgroundImageUri";
+ field public static final java.lang.String EXTRA_BIG_TEXT = "android.bigText";
+ field public static final java.lang.String EXTRA_COMPACT_ACTIONS = "android.compactActions";
+ field public static final java.lang.String EXTRA_CONVERSATION_TITLE = "android.conversationTitle";
+ field public static final java.lang.String EXTRA_INFO_TEXT = "android.infoText";
+ field public static final java.lang.String EXTRA_LARGE_ICON = "android.largeIcon";
+ field public static final java.lang.String EXTRA_LARGE_ICON_BIG = "android.largeIcon.big";
+ field public static final java.lang.String EXTRA_MEDIA_SESSION = "android.mediaSession";
+ field public static final java.lang.String EXTRA_MESSAGES = "android.messages";
+ field public static final java.lang.String EXTRA_PEOPLE = "android.people";
+ field public static final java.lang.String EXTRA_PICTURE = "android.picture";
+ field public static final java.lang.String EXTRA_PROGRESS = "android.progress";
+ field public static final java.lang.String EXTRA_PROGRESS_INDETERMINATE = "android.progressIndeterminate";
+ field public static final java.lang.String EXTRA_PROGRESS_MAX = "android.progressMax";
+ field public static final java.lang.String EXTRA_REMOTE_INPUT_HISTORY = "android.remoteInputHistory";
+ field public static final java.lang.String EXTRA_SELF_DISPLAY_NAME = "android.selfDisplayName";
+ field public static final java.lang.String EXTRA_SHOW_CHRONOMETER = "android.showChronometer";
+ field public static final java.lang.String EXTRA_SHOW_WHEN = "android.showWhen";
+ field public static final java.lang.String EXTRA_SMALL_ICON = "android.icon";
+ field public static final java.lang.String EXTRA_SUB_TEXT = "android.subText";
+ field public static final java.lang.String EXTRA_SUMMARY_TEXT = "android.summaryText";
+ field public static final java.lang.String EXTRA_TEMPLATE = "android.template";
+ field public static final java.lang.String EXTRA_TEXT = "android.text";
+ field public static final java.lang.String EXTRA_TEXT_LINES = "android.textLines";
+ field public static final java.lang.String EXTRA_TITLE = "android.title";
+ field public static final java.lang.String EXTRA_TITLE_BIG = "android.title.big";
+ field public static final int FLAG_AUTO_CANCEL = 16; // 0x10
+ field public static final int FLAG_FOREGROUND_SERVICE = 64; // 0x40
+ field public static final int FLAG_GROUP_SUMMARY = 512; // 0x200
+ field public static final deprecated int FLAG_HIGH_PRIORITY = 128; // 0x80
+ field public static final int FLAG_INSISTENT = 4; // 0x4
+ field public static final int FLAG_LOCAL_ONLY = 256; // 0x100
+ field public static final int FLAG_NO_CLEAR = 32; // 0x20
+ field public static final int FLAG_ONGOING_EVENT = 2; // 0x2
+ field public static final int FLAG_ONLY_ALERT_ONCE = 8; // 0x8
+ field public static final int FLAG_SHOW_LIGHTS = 1; // 0x1
+ field public static final int GROUP_ALERT_ALL = 0; // 0x0
+ field public static final int GROUP_ALERT_CHILDREN = 2; // 0x2
+ field public static final int GROUP_ALERT_SUMMARY = 1; // 0x1
+ field public static final int PRIORITY_DEFAULT = 0; // 0x0
+ field public static final int PRIORITY_HIGH = 1; // 0x1
+ field public static final int PRIORITY_LOW = -1; // 0xffffffff
+ field public static final int PRIORITY_MAX = 2; // 0x2
+ field public static final int PRIORITY_MIN = -2; // 0xfffffffe
+ field public static final int STREAM_DEFAULT = -1; // 0xffffffff
+ field public static final int VISIBILITY_PRIVATE = 0; // 0x0
+ field public static final int VISIBILITY_PUBLIC = 1; // 0x1
+ field public static final int VISIBILITY_SECRET = -1; // 0xffffffff
+ }
+
+ public static class NotificationCompat.Action {
+ ctor public NotificationCompat.Action(int, java.lang.CharSequence, android.app.PendingIntent);
+ method public android.app.PendingIntent getActionIntent();
+ method public boolean getAllowGeneratedReplies();
+ method public android.support.v4.app.RemoteInput[] getDataOnlyRemoteInputs();
+ method public android.os.Bundle getExtras();
+ method public int getIcon();
+ method public android.support.v4.app.RemoteInput[] getRemoteInputs();
+ method public java.lang.CharSequence getTitle();
+ field public android.app.PendingIntent actionIntent;
+ field public int icon;
+ field public java.lang.CharSequence title;
+ }
+
+ public static final class NotificationCompat.Action.Builder {
+ ctor public NotificationCompat.Action.Builder(int, java.lang.CharSequence, android.app.PendingIntent);
+ ctor public NotificationCompat.Action.Builder(android.support.v4.app.NotificationCompat.Action);
+ method public android.support.v4.app.NotificationCompat.Action.Builder addExtras(android.os.Bundle);
+ method public android.support.v4.app.NotificationCompat.Action.Builder addRemoteInput(android.support.v4.app.RemoteInput);
+ method public android.support.v4.app.NotificationCompat.Action build();
+ method public android.support.v4.app.NotificationCompat.Action.Builder extend(android.support.v4.app.NotificationCompat.Action.Extender);
+ method public android.os.Bundle getExtras();
+ method public android.support.v4.app.NotificationCompat.Action.Builder setAllowGeneratedReplies(boolean);
+ }
+
+ public static abstract interface NotificationCompat.Action.Extender {
+ method public abstract android.support.v4.app.NotificationCompat.Action.Builder extend(android.support.v4.app.NotificationCompat.Action.Builder);
+ }
+
+ public static final class NotificationCompat.Action.WearableExtender implements android.support.v4.app.NotificationCompat.Action.Extender {
+ ctor public NotificationCompat.Action.WearableExtender();
+ ctor public NotificationCompat.Action.WearableExtender(android.support.v4.app.NotificationCompat.Action);
+ method public android.support.v4.app.NotificationCompat.Action.WearableExtender clone();
+ method public android.support.v4.app.NotificationCompat.Action.Builder extend(android.support.v4.app.NotificationCompat.Action.Builder);
+ method public java.lang.CharSequence getCancelLabel();
+ method public java.lang.CharSequence getConfirmLabel();
+ method public boolean getHintDisplayActionInline();
+ method public boolean getHintLaunchesActivity();
+ method public java.lang.CharSequence getInProgressLabel();
+ method public boolean isAvailableOffline();
+ method public android.support.v4.app.NotificationCompat.Action.WearableExtender setAvailableOffline(boolean);
+ method public android.support.v4.app.NotificationCompat.Action.WearableExtender setCancelLabel(java.lang.CharSequence);
+ method public android.support.v4.app.NotificationCompat.Action.WearableExtender setConfirmLabel(java.lang.CharSequence);
+ method public android.support.v4.app.NotificationCompat.Action.WearableExtender setHintDisplayActionInline(boolean);
+ method public android.support.v4.app.NotificationCompat.Action.WearableExtender setHintLaunchesActivity(boolean);
+ method public android.support.v4.app.NotificationCompat.Action.WearableExtender setInProgressLabel(java.lang.CharSequence);
+ }
+
+ public static class NotificationCompat.BigPictureStyle extends android.support.v4.app.NotificationCompat.Style {
+ ctor public NotificationCompat.BigPictureStyle();
+ ctor public NotificationCompat.BigPictureStyle(android.support.v4.app.NotificationCompat.Builder);
+ method public android.support.v4.app.NotificationCompat.BigPictureStyle bigLargeIcon(android.graphics.Bitmap);
+ method public android.support.v4.app.NotificationCompat.BigPictureStyle bigPicture(android.graphics.Bitmap);
+ method public android.support.v4.app.NotificationCompat.BigPictureStyle setBigContentTitle(java.lang.CharSequence);
+ method public android.support.v4.app.NotificationCompat.BigPictureStyle setSummaryText(java.lang.CharSequence);
+ }
+
+ public static class NotificationCompat.BigTextStyle extends android.support.v4.app.NotificationCompat.Style {
+ ctor public NotificationCompat.BigTextStyle();
+ ctor public NotificationCompat.BigTextStyle(android.support.v4.app.NotificationCompat.Builder);
+ method public android.support.v4.app.NotificationCompat.BigTextStyle bigText(java.lang.CharSequence);
+ method public android.support.v4.app.NotificationCompat.BigTextStyle setBigContentTitle(java.lang.CharSequence);
+ method public android.support.v4.app.NotificationCompat.BigTextStyle setSummaryText(java.lang.CharSequence);
+ }
+
+ public static class NotificationCompat.Builder {
+ ctor public NotificationCompat.Builder(android.content.Context, java.lang.String);
+ ctor public deprecated NotificationCompat.Builder(android.content.Context);
+ method public android.support.v4.app.NotificationCompat.Builder addAction(int, java.lang.CharSequence, android.app.PendingIntent);
+ method public android.support.v4.app.NotificationCompat.Builder addAction(android.support.v4.app.NotificationCompat.Action);
+ method public android.support.v4.app.NotificationCompat.Builder addExtras(android.os.Bundle);
+ method public android.support.v4.app.NotificationCompat.Builder addPerson(java.lang.String);
+ method public android.app.Notification build();
+ method public android.support.v4.app.NotificationCompat.Builder extend(android.support.v4.app.NotificationCompat.Extender);
+ method public android.os.Bundle getExtras();
+ method public deprecated android.app.Notification getNotification();
+ method protected static java.lang.CharSequence limitCharSequenceLength(java.lang.CharSequence);
+ method public android.support.v4.app.NotificationCompat.Builder setAutoCancel(boolean);
+ method public android.support.v4.app.NotificationCompat.Builder setBadgeIconType(int);
+ method public android.support.v4.app.NotificationCompat.Builder setCategory(java.lang.String);
+ method public android.support.v4.app.NotificationCompat.Builder setChannelId(java.lang.String);
+ method public android.support.v4.app.NotificationCompat.Builder setColor(int);
+ method public android.support.v4.app.NotificationCompat.Builder setColorized(boolean);
+ method public android.support.v4.app.NotificationCompat.Builder setContent(android.widget.RemoteViews);
+ method public android.support.v4.app.NotificationCompat.Builder setContentInfo(java.lang.CharSequence);
+ method public android.support.v4.app.NotificationCompat.Builder setContentIntent(android.app.PendingIntent);
+ method public android.support.v4.app.NotificationCompat.Builder setContentText(java.lang.CharSequence);
+ method public android.support.v4.app.NotificationCompat.Builder setContentTitle(java.lang.CharSequence);
+ method public android.support.v4.app.NotificationCompat.Builder setCustomBigContentView(android.widget.RemoteViews);
+ method public android.support.v4.app.NotificationCompat.Builder setCustomContentView(android.widget.RemoteViews);
+ method public android.support.v4.app.NotificationCompat.Builder setCustomHeadsUpContentView(android.widget.RemoteViews);
+ method public android.support.v4.app.NotificationCompat.Builder setDefaults(int);
+ method public android.support.v4.app.NotificationCompat.Builder setDeleteIntent(android.app.PendingIntent);
+ method public android.support.v4.app.NotificationCompat.Builder setExtras(android.os.Bundle);
+ method public android.support.v4.app.NotificationCompat.Builder setFullScreenIntent(android.app.PendingIntent, boolean);
+ method public android.support.v4.app.NotificationCompat.Builder setGroup(java.lang.String);
+ method public android.support.v4.app.NotificationCompat.Builder setGroupAlertBehavior(int);
+ method public android.support.v4.app.NotificationCompat.Builder setGroupSummary(boolean);
+ method public android.support.v4.app.NotificationCompat.Builder setLargeIcon(android.graphics.Bitmap);
+ method public android.support.v4.app.NotificationCompat.Builder setLights(int, int, int);
+ method public android.support.v4.app.NotificationCompat.Builder setLocalOnly(boolean);
+ method public android.support.v4.app.NotificationCompat.Builder setNumber(int);
+ method public android.support.v4.app.NotificationCompat.Builder setOngoing(boolean);
+ method public android.support.v4.app.NotificationCompat.Builder setOnlyAlertOnce(boolean);
+ method public android.support.v4.app.NotificationCompat.Builder setPriority(int);
+ method public android.support.v4.app.NotificationCompat.Builder setProgress(int, int, boolean);
+ method public android.support.v4.app.NotificationCompat.Builder setPublicVersion(android.app.Notification);
+ method public android.support.v4.app.NotificationCompat.Builder setRemoteInputHistory(java.lang.CharSequence[]);
+ method public android.support.v4.app.NotificationCompat.Builder setShortcutId(java.lang.String);
+ method public android.support.v4.app.NotificationCompat.Builder setShowWhen(boolean);
+ method public android.support.v4.app.NotificationCompat.Builder setSmallIcon(int);
+ method public android.support.v4.app.NotificationCompat.Builder setSmallIcon(int, int);
+ method public android.support.v4.app.NotificationCompat.Builder setSortKey(java.lang.String);
+ method public android.support.v4.app.NotificationCompat.Builder setSound(android.net.Uri);
+ method public android.support.v4.app.NotificationCompat.Builder setSound(android.net.Uri, int);
+ method public android.support.v4.app.NotificationCompat.Builder setStyle(android.support.v4.app.NotificationCompat.Style);
+ method public android.support.v4.app.NotificationCompat.Builder setSubText(java.lang.CharSequence);
+ method public android.support.v4.app.NotificationCompat.Builder setTicker(java.lang.CharSequence);
+ method public android.support.v4.app.NotificationCompat.Builder setTicker(java.lang.CharSequence, android.widget.RemoteViews);
+ method public android.support.v4.app.NotificationCompat.Builder setTimeoutAfter(long);
+ method public android.support.v4.app.NotificationCompat.Builder setUsesChronometer(boolean);
+ method public android.support.v4.app.NotificationCompat.Builder setVibrate(long[]);
+ method public android.support.v4.app.NotificationCompat.Builder setVisibility(int);
+ method public android.support.v4.app.NotificationCompat.Builder setWhen(long);
+ field public deprecated java.util.ArrayList<java.lang.String> mPeople;
+ }
+
+ public static final class NotificationCompat.CarExtender implements android.support.v4.app.NotificationCompat.Extender {
+ ctor public NotificationCompat.CarExtender();
+ ctor public NotificationCompat.CarExtender(android.app.Notification);
+ method public android.support.v4.app.NotificationCompat.Builder extend(android.support.v4.app.NotificationCompat.Builder);
+ method public int getColor();
+ method public android.graphics.Bitmap getLargeIcon();
+ method public android.support.v4.app.NotificationCompat.CarExtender.UnreadConversation getUnreadConversation();
+ method public android.support.v4.app.NotificationCompat.CarExtender setColor(int);
+ method public android.support.v4.app.NotificationCompat.CarExtender setLargeIcon(android.graphics.Bitmap);
+ method public android.support.v4.app.NotificationCompat.CarExtender setUnreadConversation(android.support.v4.app.NotificationCompat.CarExtender.UnreadConversation);
+ }
+
+ public static class NotificationCompat.CarExtender.UnreadConversation {
+ method public long getLatestTimestamp();
+ method public java.lang.String[] getMessages();
+ method public java.lang.String getParticipant();
+ method public java.lang.String[] getParticipants();
+ method public android.app.PendingIntent getReadPendingIntent();
+ method public android.support.v4.app.RemoteInput getRemoteInput();
+ method public android.app.PendingIntent getReplyPendingIntent();
+ }
+
+ public static class NotificationCompat.CarExtender.UnreadConversation.Builder {
+ ctor public NotificationCompat.CarExtender.UnreadConversation.Builder(java.lang.String);
+ method public android.support.v4.app.NotificationCompat.CarExtender.UnreadConversation.Builder addMessage(java.lang.String);
+ method public android.support.v4.app.NotificationCompat.CarExtender.UnreadConversation build();
+ method public android.support.v4.app.NotificationCompat.CarExtender.UnreadConversation.Builder setLatestTimestamp(long);
+ method public android.support.v4.app.NotificationCompat.CarExtender.UnreadConversation.Builder setReadPendingIntent(android.app.PendingIntent);
+ method public android.support.v4.app.NotificationCompat.CarExtender.UnreadConversation.Builder setReplyAction(android.app.PendingIntent, android.support.v4.app.RemoteInput);
+ }
+
+ public static class NotificationCompat.DecoratedCustomViewStyle extends android.support.v4.app.NotificationCompat.Style {
+ ctor public NotificationCompat.DecoratedCustomViewStyle();
+ }
+
+ public static abstract interface NotificationCompat.Extender {
+ method public abstract android.support.v4.app.NotificationCompat.Builder extend(android.support.v4.app.NotificationCompat.Builder);
+ }
+
+ public static class NotificationCompat.InboxStyle extends android.support.v4.app.NotificationCompat.Style {
+ ctor public NotificationCompat.InboxStyle();
+ ctor public NotificationCompat.InboxStyle(android.support.v4.app.NotificationCompat.Builder);
+ method public android.support.v4.app.NotificationCompat.InboxStyle addLine(java.lang.CharSequence);
+ method public android.support.v4.app.NotificationCompat.InboxStyle setBigContentTitle(java.lang.CharSequence);
+ method public android.support.v4.app.NotificationCompat.InboxStyle setSummaryText(java.lang.CharSequence);
+ }
+
+ public static class NotificationCompat.MessagingStyle extends android.support.v4.app.NotificationCompat.Style {
+ ctor public NotificationCompat.MessagingStyle(java.lang.CharSequence);
+ method public void addCompatExtras(android.os.Bundle);
+ method public android.support.v4.app.NotificationCompat.MessagingStyle addMessage(java.lang.CharSequence, long, java.lang.CharSequence);
+ method public android.support.v4.app.NotificationCompat.MessagingStyle addMessage(android.support.v4.app.NotificationCompat.MessagingStyle.Message);
+ method public static android.support.v4.app.NotificationCompat.MessagingStyle extractMessagingStyleFromNotification(android.app.Notification);
+ method public java.lang.CharSequence getConversationTitle();
+ method public java.util.List<android.support.v4.app.NotificationCompat.MessagingStyle.Message> getMessages();
+ method public java.lang.CharSequence getUserDisplayName();
+ method public android.support.v4.app.NotificationCompat.MessagingStyle setConversationTitle(java.lang.CharSequence);
+ field public static final int MAXIMUM_RETAINED_MESSAGES = 25; // 0x19
+ }
+
+ public static final class NotificationCompat.MessagingStyle.Message {
+ ctor public NotificationCompat.MessagingStyle.Message(java.lang.CharSequence, long, java.lang.CharSequence);
+ method public java.lang.String getDataMimeType();
+ method public android.net.Uri getDataUri();
+ method public android.os.Bundle getExtras();
+ method public java.lang.CharSequence getSender();
+ method public java.lang.CharSequence getText();
+ method public long getTimestamp();
+ method public android.support.v4.app.NotificationCompat.MessagingStyle.Message setData(java.lang.String, android.net.Uri);
+ }
+
+ public static abstract class NotificationCompat.Style {
+ ctor public NotificationCompat.Style();
+ method public android.app.Notification build();
+ method public void setBuilder(android.support.v4.app.NotificationCompat.Builder);
+ }
+
+ public static final class NotificationCompat.WearableExtender implements android.support.v4.app.NotificationCompat.Extender {
+ ctor public NotificationCompat.WearableExtender();
+ ctor public NotificationCompat.WearableExtender(android.app.Notification);
+ method public android.support.v4.app.NotificationCompat.WearableExtender addAction(android.support.v4.app.NotificationCompat.Action);
+ method public android.support.v4.app.NotificationCompat.WearableExtender addActions(java.util.List<android.support.v4.app.NotificationCompat.Action>);
+ method public android.support.v4.app.NotificationCompat.WearableExtender addPage(android.app.Notification);
+ method public android.support.v4.app.NotificationCompat.WearableExtender addPages(java.util.List<android.app.Notification>);
+ method public android.support.v4.app.NotificationCompat.WearableExtender clearActions();
+ method public android.support.v4.app.NotificationCompat.WearableExtender clearPages();
+ method public android.support.v4.app.NotificationCompat.WearableExtender clone();
+ method public android.support.v4.app.NotificationCompat.Builder extend(android.support.v4.app.NotificationCompat.Builder);
+ method public java.util.List<android.support.v4.app.NotificationCompat.Action> getActions();
+ method public android.graphics.Bitmap getBackground();
+ method public java.lang.String getBridgeTag();
+ method public int getContentAction();
+ method public int getContentIcon();
+ method public int getContentIconGravity();
+ method public boolean getContentIntentAvailableOffline();
+ method public int getCustomContentHeight();
+ method public int getCustomSizePreset();
+ method public java.lang.String getDismissalId();
+ method public android.app.PendingIntent getDisplayIntent();
+ method public int getGravity();
+ method public boolean getHintAmbientBigPicture();
+ method public boolean getHintAvoidBackgroundClipping();
+ method public boolean getHintContentIntentLaunchesActivity();
+ method public boolean getHintHideIcon();
+ method public int getHintScreenTimeout();
+ method public boolean getHintShowBackgroundOnly();
+ method public java.util.List<android.app.Notification> getPages();
+ method public boolean getStartScrollBottom();
+ method public android.support.v4.app.NotificationCompat.WearableExtender setBackground(android.graphics.Bitmap);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setBridgeTag(java.lang.String);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setContentAction(int);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setContentIcon(int);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setContentIconGravity(int);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setContentIntentAvailableOffline(boolean);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setCustomContentHeight(int);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setCustomSizePreset(int);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setDismissalId(java.lang.String);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setDisplayIntent(android.app.PendingIntent);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setGravity(int);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setHintAmbientBigPicture(boolean);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setHintAvoidBackgroundClipping(boolean);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setHintContentIntentLaunchesActivity(boolean);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setHintHideIcon(boolean);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setHintScreenTimeout(int);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setHintShowBackgroundOnly(boolean);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setStartScrollBottom(boolean);
+ field public static final int SCREEN_TIMEOUT_LONG = -1; // 0xffffffff
+ field public static final int SCREEN_TIMEOUT_SHORT = 0; // 0x0
+ field public static final int SIZE_DEFAULT = 0; // 0x0
+ field public static final int SIZE_FULL_SCREEN = 5; // 0x5
+ field public static final int SIZE_LARGE = 4; // 0x4
+ field public static final int SIZE_MEDIUM = 3; // 0x3
+ field public static final int SIZE_SMALL = 2; // 0x2
+ field public static final int SIZE_XSMALL = 1; // 0x1
+ field public static final int UNSET_ACTION_INDEX = -1; // 0xffffffff
+ }
+
+ public final class NotificationCompatExtras {
+ field public static final java.lang.String EXTRA_ACTION_EXTRAS = "android.support.actionExtras";
+ field public static final java.lang.String EXTRA_GROUP_KEY = "android.support.groupKey";
+ field public static final java.lang.String EXTRA_GROUP_SUMMARY = "android.support.isGroupSummary";
+ field public static final java.lang.String EXTRA_LOCAL_ONLY = "android.support.localOnly";
+ field public static final java.lang.String EXTRA_REMOTE_INPUTS = "android.support.remoteInputs";
+ field public static final java.lang.String EXTRA_SORT_KEY = "android.support.sortKey";
+ }
+
+ public abstract class NotificationCompatSideChannelService extends android.app.Service {
+ ctor public NotificationCompatSideChannelService();
+ method public abstract void cancel(java.lang.String, int, java.lang.String);
+ method public abstract void cancelAll(java.lang.String);
+ method public abstract void notify(java.lang.String, int, java.lang.String, android.app.Notification);
+ method public android.os.IBinder onBind(android.content.Intent);
+ }
+
+ public final class NotificationManagerCompat {
+ method public boolean areNotificationsEnabled();
+ method public void cancel(int);
+ method public void cancel(java.lang.String, int);
+ method public void cancelAll();
+ method public static android.support.v4.app.NotificationManagerCompat from(android.content.Context);
+ method public static java.util.Set<java.lang.String> getEnabledListenerPackages(android.content.Context);
+ method public int getImportance();
+ method public void notify(int, android.app.Notification);
+ method public void notify(java.lang.String, int, android.app.Notification);
+ field public static final java.lang.String ACTION_BIND_SIDE_CHANNEL = "android.support.BIND_NOTIFICATION_SIDE_CHANNEL";
+ field public static final java.lang.String EXTRA_USE_SIDE_CHANNEL = "android.support.useSideChannel";
+ field public static final int IMPORTANCE_DEFAULT = 3; // 0x3
+ field public static final int IMPORTANCE_HIGH = 4; // 0x4
+ field public static final int IMPORTANCE_LOW = 2; // 0x2
+ field public static final int IMPORTANCE_MAX = 5; // 0x5
+ field public static final int IMPORTANCE_MIN = 1; // 0x1
+ field public static final int IMPORTANCE_NONE = 0; // 0x0
+ field public static final int IMPORTANCE_UNSPECIFIED = -1000; // 0xfffffc18
+ }
+
+ public final class RemoteInput extends android.support.v4.app.RemoteInputCompatBase.RemoteInput {
+ method public static void addDataResultToIntent(android.support.v4.app.RemoteInput, android.content.Intent, java.util.Map<java.lang.String, android.net.Uri>);
+ method public static void addResultsToIntent(android.support.v4.app.RemoteInput[], android.content.Intent, android.os.Bundle);
+ method public boolean getAllowFreeFormInput();
+ method public java.util.Set<java.lang.String> getAllowedDataTypes();
+ method public java.lang.CharSequence[] getChoices();
+ method public static java.util.Map<java.lang.String, android.net.Uri> getDataResultsFromIntent(android.content.Intent, java.lang.String);
+ method public android.os.Bundle getExtras();
+ method public java.lang.CharSequence getLabel();
+ method public java.lang.String getResultKey();
+ method public static android.os.Bundle getResultsFromIntent(android.content.Intent);
+ method public boolean isDataOnly();
+ field public static final java.lang.String EXTRA_RESULTS_DATA = "android.remoteinput.resultsData";
+ field public static final java.lang.String RESULTS_CLIP_LABEL = "android.remoteinput.results";
+ }
+
+ public static final class RemoteInput.Builder {
+ ctor public RemoteInput.Builder(java.lang.String);
+ method public android.support.v4.app.RemoteInput.Builder addExtras(android.os.Bundle);
+ method public android.support.v4.app.RemoteInput build();
+ method public android.os.Bundle getExtras();
+ method public android.support.v4.app.RemoteInput.Builder setAllowDataType(java.lang.String, boolean);
+ method public android.support.v4.app.RemoteInput.Builder setAllowFreeFormInput(boolean);
+ method public android.support.v4.app.RemoteInput.Builder setChoices(java.lang.CharSequence[]);
+ method public android.support.v4.app.RemoteInput.Builder setLabel(java.lang.CharSequence);
+ }
+
+ deprecated class RemoteInputCompatBase {
+ }
+
+ public static abstract deprecated class RemoteInputCompatBase.RemoteInput {
+ ctor public deprecated RemoteInputCompatBase.RemoteInput();
+ method protected abstract deprecated boolean getAllowFreeFormInput();
+ method protected abstract deprecated java.util.Set<java.lang.String> getAllowedDataTypes();
+ method protected abstract deprecated java.lang.CharSequence[] getChoices();
+ method protected abstract deprecated android.os.Bundle getExtras();
+ method protected abstract deprecated java.lang.CharSequence getLabel();
+ method protected abstract deprecated java.lang.String getResultKey();
+ }
+
+ public final class ServiceCompat {
+ method public static void stopForeground(android.app.Service, int);
+ field public static final int START_STICKY = 1; // 0x1
+ field public static final int STOP_FOREGROUND_DETACH = 2; // 0x2
+ field public static final int STOP_FOREGROUND_REMOVE = 1; // 0x1
+ }
+
+ public final class ShareCompat {
+ method public static void configureMenuItem(android.view.MenuItem, android.support.v4.app.ShareCompat.IntentBuilder);
+ method public static void configureMenuItem(android.view.Menu, int, android.support.v4.app.ShareCompat.IntentBuilder);
+ method public static android.content.ComponentName getCallingActivity(android.app.Activity);
+ method public static java.lang.String getCallingPackage(android.app.Activity);
+ field public static final java.lang.String EXTRA_CALLING_ACTIVITY = "android.support.v4.app.EXTRA_CALLING_ACTIVITY";
+ field public static final java.lang.String EXTRA_CALLING_PACKAGE = "android.support.v4.app.EXTRA_CALLING_PACKAGE";
+ }
+
+ public static class ShareCompat.IntentBuilder {
+ method public android.support.v4.app.ShareCompat.IntentBuilder addEmailBcc(java.lang.String);
+ method public android.support.v4.app.ShareCompat.IntentBuilder addEmailBcc(java.lang.String[]);
+ method public android.support.v4.app.ShareCompat.IntentBuilder addEmailCc(java.lang.String);
+ method public android.support.v4.app.ShareCompat.IntentBuilder addEmailCc(java.lang.String[]);
+ method public android.support.v4.app.ShareCompat.IntentBuilder addEmailTo(java.lang.String);
+ method public android.support.v4.app.ShareCompat.IntentBuilder addEmailTo(java.lang.String[]);
+ method public android.support.v4.app.ShareCompat.IntentBuilder addStream(android.net.Uri);
+ method public android.content.Intent createChooserIntent();
+ method public static android.support.v4.app.ShareCompat.IntentBuilder from(android.app.Activity);
+ method public android.content.Intent getIntent();
+ method public android.support.v4.app.ShareCompat.IntentBuilder setChooserTitle(java.lang.CharSequence);
+ method public android.support.v4.app.ShareCompat.IntentBuilder setChooserTitle(int);
+ method public android.support.v4.app.ShareCompat.IntentBuilder setEmailBcc(java.lang.String[]);
+ method public android.support.v4.app.ShareCompat.IntentBuilder setEmailCc(java.lang.String[]);
+ method public android.support.v4.app.ShareCompat.IntentBuilder setEmailTo(java.lang.String[]);
+ method public android.support.v4.app.ShareCompat.IntentBuilder setHtmlText(java.lang.String);
+ method public android.support.v4.app.ShareCompat.IntentBuilder setStream(android.net.Uri);
+ method public android.support.v4.app.ShareCompat.IntentBuilder setSubject(java.lang.String);
+ method public android.support.v4.app.ShareCompat.IntentBuilder setText(java.lang.CharSequence);
+ method public android.support.v4.app.ShareCompat.IntentBuilder setType(java.lang.String);
+ method public void startChooser();
+ }
+
+ public static class ShareCompat.IntentReader {
+ method public static android.support.v4.app.ShareCompat.IntentReader from(android.app.Activity);
+ method public android.content.ComponentName getCallingActivity();
+ method public android.graphics.drawable.Drawable getCallingActivityIcon();
+ method public android.graphics.drawable.Drawable getCallingApplicationIcon();
+ method public java.lang.CharSequence getCallingApplicationLabel();
+ method public java.lang.String getCallingPackage();
+ method public java.lang.String[] getEmailBcc();
+ method public java.lang.String[] getEmailCc();
+ method public java.lang.String[] getEmailTo();
+ method public java.lang.String getHtmlText();
+ method public android.net.Uri getStream();
+ method public android.net.Uri getStream(int);
+ method public int getStreamCount();
+ method public java.lang.String getSubject();
+ method public java.lang.CharSequence getText();
+ method public java.lang.String getType();
+ method public boolean isMultipleShare();
+ method public boolean isShareIntent();
+ method public boolean isSingleShare();
+ }
+
+ public abstract class SharedElementCallback {
+ ctor public SharedElementCallback();
+ method public android.os.Parcelable onCaptureSharedElementSnapshot(android.view.View, android.graphics.Matrix, android.graphics.RectF);
+ method public android.view.View onCreateSnapshotView(android.content.Context, android.os.Parcelable);
+ method public void onMapSharedElements(java.util.List<java.lang.String>, java.util.Map<java.lang.String, android.view.View>);
+ method public void onRejectSharedElements(java.util.List<android.view.View>);
+ method public void onSharedElementEnd(java.util.List<java.lang.String>, java.util.List<android.view.View>, java.util.List<android.view.View>);
+ method public void onSharedElementStart(java.util.List<java.lang.String>, java.util.List<android.view.View>, java.util.List<android.view.View>);
+ method public void onSharedElementsArrived(java.util.List<java.lang.String>, java.util.List<android.view.View>, android.support.v4.app.SharedElementCallback.OnSharedElementsReadyListener);
+ }
+
+ public static abstract interface SharedElementCallback.OnSharedElementsReadyListener {
+ method public abstract void onSharedElementsReady();
+ }
+
+}
+
+package android.support.v4.content {
+
+ public final class ContentResolverCompat {
+ method public static android.database.Cursor query(android.content.ContentResolver, android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, android.support.v4.os.CancellationSignal);
+ }
+
+ public class ContextCompat {
+ ctor protected ContextCompat();
+ method public static int checkSelfPermission(android.content.Context, java.lang.String);
+ method public static android.content.Context createDeviceProtectedStorageContext(android.content.Context);
+ method public static java.io.File getCodeCacheDir(android.content.Context);
+ method public static final int getColor(android.content.Context, int);
+ method public static final android.content.res.ColorStateList getColorStateList(android.content.Context, int);
+ method public static java.io.File getDataDir(android.content.Context);
+ method public static final android.graphics.drawable.Drawable getDrawable(android.content.Context, int);
+ method public static java.io.File[] getExternalCacheDirs(android.content.Context);
+ method public static java.io.File[] getExternalFilesDirs(android.content.Context, java.lang.String);
+ method public static final java.io.File getNoBackupFilesDir(android.content.Context);
+ method public static java.io.File[] getObbDirs(android.content.Context);
+ method public static boolean isDeviceProtectedStorage(android.content.Context);
+ method public static boolean startActivities(android.content.Context, android.content.Intent[]);
+ method public static boolean startActivities(android.content.Context, android.content.Intent[], android.os.Bundle);
+ method public static void startActivity(android.content.Context, android.content.Intent, android.os.Bundle);
+ method public static void startForegroundService(android.content.Context, android.content.Intent);
+ }
+
+ public final class IntentCompat {
+ method public static android.content.Intent makeMainSelectorActivity(java.lang.String, java.lang.String);
+ field public static final java.lang.String CATEGORY_LEANBACK_LAUNCHER = "android.intent.category.LEANBACK_LAUNCHER";
+ field public static final java.lang.String EXTRA_HTML_TEXT = "android.intent.extra.HTML_TEXT";
+ field public static final java.lang.String EXTRA_START_PLAYBACK = "android.intent.extra.START_PLAYBACK";
+ }
+
+ public final deprecated class SharedPreferencesCompat {
+ }
+
+ public static final deprecated class SharedPreferencesCompat.EditorCompat {
+ method public deprecated void apply(android.content.SharedPreferences.Editor);
+ method public static deprecated android.support.v4.content.SharedPreferencesCompat.EditorCompat getInstance();
+ }
+
+}
+
+package android.support.v4.content.pm {
+
+ public final deprecated class ActivityInfoCompat {
+ field public static final deprecated int CONFIG_UI_MODE = 512; // 0x200
+ }
+
+ public class ShortcutInfoCompat {
+ method public android.content.ComponentName getActivity();
+ method public java.lang.CharSequence getDisabledMessage();
+ method public java.lang.String getId();
+ method public android.content.Intent getIntent();
+ method public android.content.Intent[] getIntents();
+ method public java.lang.CharSequence getLongLabel();
+ method public java.lang.CharSequence getShortLabel();
+ method public android.content.pm.ShortcutInfo toShortcutInfo();
+ }
+
+ public static class ShortcutInfoCompat.Builder {
+ ctor public ShortcutInfoCompat.Builder(android.content.Context, java.lang.String);
+ method public android.support.v4.content.pm.ShortcutInfoCompat build();
+ method public android.support.v4.content.pm.ShortcutInfoCompat.Builder setActivity(android.content.ComponentName);
+ method public android.support.v4.content.pm.ShortcutInfoCompat.Builder setDisabledMessage(java.lang.CharSequence);
+ method public android.support.v4.content.pm.ShortcutInfoCompat.Builder setIcon(android.support.v4.graphics.drawable.IconCompat);
+ method public android.support.v4.content.pm.ShortcutInfoCompat.Builder setIntent(android.content.Intent);
+ method public android.support.v4.content.pm.ShortcutInfoCompat.Builder setIntents(android.content.Intent[]);
+ method public android.support.v4.content.pm.ShortcutInfoCompat.Builder setLongLabel(java.lang.CharSequence);
+ method public android.support.v4.content.pm.ShortcutInfoCompat.Builder setShortLabel(java.lang.CharSequence);
+ }
+
+ public class ShortcutManagerCompat {
+ method public static android.content.Intent createShortcutResultIntent(android.content.Context, android.support.v4.content.pm.ShortcutInfoCompat);
+ method public static boolean isRequestPinShortcutSupported(android.content.Context);
+ method public static boolean requestPinShortcut(android.content.Context, android.support.v4.content.pm.ShortcutInfoCompat, android.content.IntentSender);
+ }
+
+}
+
+package android.support.v4.content.res {
+
+ public final class ConfigurationHelper {
+ method public static int getDensityDpi(android.content.res.Resources);
+ }
+
+ public final class ResourcesCompat {
+ method public static int getColor(android.content.res.Resources, int, android.content.res.Resources.Theme) throws android.content.res.Resources.NotFoundException;
+ method public static android.content.res.ColorStateList getColorStateList(android.content.res.Resources, int, android.content.res.Resources.Theme) throws android.content.res.Resources.NotFoundException;
+ method public static android.graphics.drawable.Drawable getDrawable(android.content.res.Resources, int, android.content.res.Resources.Theme) throws android.content.res.Resources.NotFoundException;
+ method public static android.graphics.drawable.Drawable getDrawableForDensity(android.content.res.Resources, int, int, android.content.res.Resources.Theme) throws android.content.res.Resources.NotFoundException;
+ method public static android.graphics.Typeface getFont(android.content.Context, int) throws android.content.res.Resources.NotFoundException;
+ method public static void getFont(android.content.Context, int, android.support.v4.content.res.ResourcesCompat.FontCallback, android.os.Handler) throws android.content.res.Resources.NotFoundException;
+ }
+
+ public static abstract class ResourcesCompat.FontCallback {
+ ctor public ResourcesCompat.FontCallback();
+ method public abstract void onFontRetrievalFailed(int);
+ method public abstract void onFontRetrieved(android.graphics.Typeface);
+ }
+
+}
+
+package android.support.v4.database {
+
+ public final deprecated class DatabaseUtilsCompat {
+ method public static deprecated java.lang.String[] appendSelectionArgs(java.lang.String[], java.lang.String[]);
+ method public static deprecated java.lang.String concatenateWhere(java.lang.String, java.lang.String);
+ }
+
+}
+
+package android.support.v4.graphics {
+
+ public final class BitmapCompat {
+ method public static int getAllocationByteCount(android.graphics.Bitmap);
+ method public static boolean hasMipMap(android.graphics.Bitmap);
+ method public static void setHasMipMap(android.graphics.Bitmap, boolean);
+ }
+
+ public final class PaintCompat {
+ method public static boolean hasGlyph(android.graphics.Paint, java.lang.String);
+ }
+
+}
+
+package android.support.v4.graphics.drawable {
+
+ public final class DrawableCompat {
+ method public static void applyTheme(android.graphics.drawable.Drawable, android.content.res.Resources.Theme);
+ method public static boolean canApplyTheme(android.graphics.drawable.Drawable);
+ method public static void clearColorFilter(android.graphics.drawable.Drawable);
+ method public static int getAlpha(android.graphics.drawable.Drawable);
+ method public static android.graphics.ColorFilter getColorFilter(android.graphics.drawable.Drawable);
+ method public static int getLayoutDirection(android.graphics.drawable.Drawable);
+ method public static void inflate(android.graphics.drawable.Drawable, android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet, android.content.res.Resources.Theme) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+ method public static boolean isAutoMirrored(android.graphics.drawable.Drawable);
+ method public static deprecated void jumpToCurrentState(android.graphics.drawable.Drawable);
+ method public static void setAutoMirrored(android.graphics.drawable.Drawable, boolean);
+ method public static void setHotspot(android.graphics.drawable.Drawable, float, float);
+ method public static void setHotspotBounds(android.graphics.drawable.Drawable, int, int, int, int);
+ method public static boolean setLayoutDirection(android.graphics.drawable.Drawable, int);
+ method public static void setTint(android.graphics.drawable.Drawable, int);
+ method public static void setTintList(android.graphics.drawable.Drawable, android.content.res.ColorStateList);
+ method public static void setTintMode(android.graphics.drawable.Drawable, android.graphics.PorterDuff.Mode);
+ method public static <T extends android.graphics.drawable.Drawable> T unwrap(android.graphics.drawable.Drawable);
+ method public static android.graphics.drawable.Drawable wrap(android.graphics.drawable.Drawable);
+ }
+
+ public class IconCompat {
+ method public static android.support.v4.graphics.drawable.IconCompat createWithAdaptiveBitmap(android.graphics.Bitmap);
+ method public static android.support.v4.graphics.drawable.IconCompat createWithBitmap(android.graphics.Bitmap);
+ method public static android.support.v4.graphics.drawable.IconCompat createWithContentUri(java.lang.String);
+ method public static android.support.v4.graphics.drawable.IconCompat createWithContentUri(android.net.Uri);
+ method public static android.support.v4.graphics.drawable.IconCompat createWithData(byte[], int, int);
+ method public static android.support.v4.graphics.drawable.IconCompat createWithResource(android.content.Context, int);
+ method public android.graphics.drawable.Icon toIcon();
+ }
+
+}
+
+package android.support.v4.hardware.display {
+
+ public abstract class DisplayManagerCompat {
+ method public abstract android.view.Display getDisplay(int);
+ method public abstract android.view.Display[] getDisplays();
+ method public abstract android.view.Display[] getDisplays(java.lang.String);
+ method public static android.support.v4.hardware.display.DisplayManagerCompat getInstance(android.content.Context);
+ field public static final java.lang.String DISPLAY_CATEGORY_PRESENTATION = "android.hardware.display.category.PRESENTATION";
+ }
+
+}
+
+package android.support.v4.hardware.fingerprint {
+
+ public final class FingerprintManagerCompat {
+ method public void authenticate(android.support.v4.hardware.fingerprint.FingerprintManagerCompat.CryptoObject, int, android.support.v4.os.CancellationSignal, android.support.v4.hardware.fingerprint.FingerprintManagerCompat.AuthenticationCallback, android.os.Handler);
+ method public static android.support.v4.hardware.fingerprint.FingerprintManagerCompat from(android.content.Context);
+ method public boolean hasEnrolledFingerprints();
+ method public boolean isHardwareDetected();
+ }
+
+ public static abstract class FingerprintManagerCompat.AuthenticationCallback {
+ ctor public FingerprintManagerCompat.AuthenticationCallback();
+ method public void onAuthenticationError(int, java.lang.CharSequence);
+ method public void onAuthenticationFailed();
+ method public void onAuthenticationHelp(int, java.lang.CharSequence);
+ method public void onAuthenticationSucceeded(android.support.v4.hardware.fingerprint.FingerprintManagerCompat.AuthenticationResult);
+ }
+
+ public static final class FingerprintManagerCompat.AuthenticationResult {
+ ctor public FingerprintManagerCompat.AuthenticationResult(android.support.v4.hardware.fingerprint.FingerprintManagerCompat.CryptoObject);
+ method public android.support.v4.hardware.fingerprint.FingerprintManagerCompat.CryptoObject getCryptoObject();
+ }
+
+ public static class FingerprintManagerCompat.CryptoObject {
+ ctor public FingerprintManagerCompat.CryptoObject(java.security.Signature);
+ ctor public FingerprintManagerCompat.CryptoObject(javax.crypto.Cipher);
+ ctor public FingerprintManagerCompat.CryptoObject(javax.crypto.Mac);
+ method public javax.crypto.Cipher getCipher();
+ method public javax.crypto.Mac getMac();
+ method public java.security.Signature getSignature();
+ }
+
+}
+
+package android.support.v4.net {
+
+ public final class ConnectivityManagerCompat {
+ method public static android.net.NetworkInfo getNetworkInfoFromBroadcast(android.net.ConnectivityManager, android.content.Intent);
+ method public static int getRestrictBackgroundStatus(android.net.ConnectivityManager);
+ method public static boolean isActiveNetworkMetered(android.net.ConnectivityManager);
+ field public static final int RESTRICT_BACKGROUND_STATUS_DISABLED = 1; // 0x1
+ field public static final int RESTRICT_BACKGROUND_STATUS_ENABLED = 3; // 0x3
+ field public static final int RESTRICT_BACKGROUND_STATUS_WHITELISTED = 2; // 0x2
+ }
+
+ public final class TrafficStatsCompat {
+ method public static deprecated void clearThreadStatsTag();
+ method public static deprecated int getThreadStatsTag();
+ method public static deprecated void incrementOperationCount(int);
+ method public static deprecated void incrementOperationCount(int, int);
+ method public static deprecated void setThreadStatsTag(int);
+ method public static void tagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
+ method public static deprecated void tagSocket(java.net.Socket) throws java.net.SocketException;
+ method public static void untagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
+ method public static deprecated void untagSocket(java.net.Socket) throws java.net.SocketException;
+ }
+
+}
+
+package android.support.v4.os {
+
+ public class BuildCompat {
+ method public static deprecated boolean isAtLeastN();
+ method public static deprecated boolean isAtLeastNMR1();
+ method public static deprecated boolean isAtLeastO();
+ method public static deprecated boolean isAtLeastOMR1();
+ method public static boolean isAtLeastP();
+ }
+
+ public final class CancellationSignal {
+ ctor public CancellationSignal();
+ method public void cancel();
+ method public java.lang.Object getCancellationSignalObject();
+ method public boolean isCanceled();
+ method public void setOnCancelListener(android.support.v4.os.CancellationSignal.OnCancelListener);
+ method public void throwIfCanceled();
+ }
+
+ public static abstract interface CancellationSignal.OnCancelListener {
+ method public abstract void onCancel();
+ }
+
+ public final class ConfigurationCompat {
+ method public static android.support.v4.os.LocaleListCompat getLocales(android.content.res.Configuration);
+ }
+
+ public final class EnvironmentCompat {
+ method public static java.lang.String getStorageState(java.io.File);
+ field public static final java.lang.String MEDIA_UNKNOWN = "unknown";
+ }
+
+ public final class LocaleListCompat {
+ method public static android.support.v4.os.LocaleListCompat create(java.util.Locale...);
+ method public static android.support.v4.os.LocaleListCompat forLanguageTags(java.lang.String);
+ method public java.util.Locale get(int);
+ method public static android.support.v4.os.LocaleListCompat getAdjustedDefault();
+ method public static android.support.v4.os.LocaleListCompat getDefault();
+ method public static android.support.v4.os.LocaleListCompat getEmptyLocaleList();
+ method public java.util.Locale getFirstMatch(java.lang.String[]);
+ method public int indexOf(java.util.Locale);
+ method public boolean isEmpty();
+ method public int size();
+ method public java.lang.String toLanguageTags();
+ method public java.lang.Object unwrap();
+ method public static android.support.v4.os.LocaleListCompat wrap(java.lang.Object);
+ }
+
+ public class OperationCanceledException extends java.lang.RuntimeException {
+ ctor public OperationCanceledException();
+ ctor public OperationCanceledException(java.lang.String);
+ }
+
+ public final deprecated class ParcelableCompat {
+ method public static deprecated <T> android.os.Parcelable.Creator<T> newCreator(android.support.v4.os.ParcelableCompatCreatorCallbacks<T>);
+ }
+
+ public abstract deprecated interface ParcelableCompatCreatorCallbacks<T> {
+ method public abstract T createFromParcel(android.os.Parcel, java.lang.ClassLoader);
+ method public abstract T[] newArray(int);
+ }
+
+ public final class TraceCompat {
+ method public static void beginSection(java.lang.String);
+ method public static void endSection();
+ }
+
+ public class UserManagerCompat {
+ method public static boolean isUserUnlocked(android.content.Context);
+ }
+
+}
+
+package android.support.v4.provider {
+
+ public final class FontRequest {
+ ctor public FontRequest(java.lang.String, java.lang.String, java.lang.String, java.util.List<java.util.List<byte[]>>);
+ ctor public FontRequest(java.lang.String, java.lang.String, java.lang.String, int);
+ method public java.util.List<java.util.List<byte[]>> getCertificates();
+ method public int getCertificatesArrayResId();
+ method public java.lang.String getProviderAuthority();
+ method public java.lang.String getProviderPackage();
+ method public java.lang.String getQuery();
+ }
+
+ public class FontsContractCompat {
+ method public static android.graphics.Typeface buildTypeface(android.content.Context, android.os.CancellationSignal, android.support.v4.provider.FontsContractCompat.FontInfo[]);
+ method public static android.support.v4.provider.FontsContractCompat.FontFamilyResult fetchFonts(android.content.Context, android.os.CancellationSignal, android.support.v4.provider.FontRequest) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public static void requestFont(android.content.Context, android.support.v4.provider.FontRequest, android.support.v4.provider.FontsContractCompat.FontRequestCallback, android.os.Handler);
+ }
+
+ public static final class FontsContractCompat.Columns {
+ ctor public FontsContractCompat.Columns();
+ field public static final java.lang.String FILE_ID = "file_id";
+ field public static final java.lang.String ITALIC = "font_italic";
+ field public static final java.lang.String RESULT_CODE = "result_code";
+ field public static final int RESULT_CODE_FONT_NOT_FOUND = 1; // 0x1
+ field public static final int RESULT_CODE_FONT_UNAVAILABLE = 2; // 0x2
+ field public static final int RESULT_CODE_MALFORMED_QUERY = 3; // 0x3
+ field public static final int RESULT_CODE_OK = 0; // 0x0
+ field public static final java.lang.String TTC_INDEX = "font_ttc_index";
+ field public static final java.lang.String VARIATION_SETTINGS = "font_variation_settings";
+ field public static final java.lang.String WEIGHT = "font_weight";
+ }
+
+ public static class FontsContractCompat.FontFamilyResult {
+ method public android.support.v4.provider.FontsContractCompat.FontInfo[] getFonts();
+ method public int getStatusCode();
+ field public static final int STATUS_OK = 0; // 0x0
+ field public static final int STATUS_UNEXPECTED_DATA_PROVIDED = 2; // 0x2
+ field public static final int STATUS_WRONG_CERTIFICATES = 1; // 0x1
+ }
+
+ public static class FontsContractCompat.FontInfo {
+ method public int getResultCode();
+ method public int getTtcIndex();
+ method public android.net.Uri getUri();
+ method public int getWeight();
+ method public boolean isItalic();
+ }
+
+ public static class FontsContractCompat.FontRequestCallback {
+ ctor public FontsContractCompat.FontRequestCallback();
+ method public void onTypefaceRequestFailed(int);
+ method public void onTypefaceRetrieved(android.graphics.Typeface);
+ field public static final int FAIL_REASON_FONT_LOAD_ERROR = -3; // 0xfffffffd
+ field public static final int FAIL_REASON_FONT_NOT_FOUND = 1; // 0x1
+ field public static final int FAIL_REASON_FONT_UNAVAILABLE = 2; // 0x2
+ field public static final int FAIL_REASON_MALFORMED_QUERY = 3; // 0x3
+ field public static final int FAIL_REASON_PROVIDER_NOT_FOUND = -1; // 0xffffffff
+ field public static final int FAIL_REASON_SECURITY_VIOLATION = -4; // 0xfffffffc
+ field public static final int FAIL_REASON_WRONG_CERTIFICATES = -2; // 0xfffffffe
+ }
+
+}
+
+package android.support.v4.text {
+
+ public final class BidiFormatter {
+ method public static android.support.v4.text.BidiFormatter getInstance();
+ method public static android.support.v4.text.BidiFormatter getInstance(boolean);
+ method public static android.support.v4.text.BidiFormatter getInstance(java.util.Locale);
+ method public boolean getStereoReset();
+ method public boolean isRtl(java.lang.String);
+ method public boolean isRtl(java.lang.CharSequence);
+ method public boolean isRtlContext();
+ method public java.lang.String unicodeWrap(java.lang.String, android.support.v4.text.TextDirectionHeuristicCompat, boolean);
+ method public java.lang.CharSequence unicodeWrap(java.lang.CharSequence, android.support.v4.text.TextDirectionHeuristicCompat, boolean);
+ method public java.lang.String unicodeWrap(java.lang.String, android.support.v4.text.TextDirectionHeuristicCompat);
+ method public java.lang.CharSequence unicodeWrap(java.lang.CharSequence, android.support.v4.text.TextDirectionHeuristicCompat);
+ method public java.lang.String unicodeWrap(java.lang.String, boolean);
+ method public java.lang.CharSequence unicodeWrap(java.lang.CharSequence, boolean);
+ method public java.lang.String unicodeWrap(java.lang.String);
+ method public java.lang.CharSequence unicodeWrap(java.lang.CharSequence);
+ }
+
+ public static final class BidiFormatter.Builder {
+ ctor public BidiFormatter.Builder();
+ ctor public BidiFormatter.Builder(boolean);
+ ctor public BidiFormatter.Builder(java.util.Locale);
+ method public android.support.v4.text.BidiFormatter build();
+ method public android.support.v4.text.BidiFormatter.Builder setTextDirectionHeuristic(android.support.v4.text.TextDirectionHeuristicCompat);
+ method public android.support.v4.text.BidiFormatter.Builder stereoReset(boolean);
+ }
+
+ public final class ICUCompat {
+ method public static java.lang.String maximizeAndGetScript(java.util.Locale);
+ }
+
+ public abstract interface TextDirectionHeuristicCompat {
+ method public abstract boolean isRtl(char[], int, int);
+ method public abstract boolean isRtl(java.lang.CharSequence, int, int);
+ }
+
+ public final class TextDirectionHeuristicsCompat {
+ field public static final android.support.v4.text.TextDirectionHeuristicCompat ANYRTL_LTR;
+ field public static final android.support.v4.text.TextDirectionHeuristicCompat FIRSTSTRONG_LTR;
+ field public static final android.support.v4.text.TextDirectionHeuristicCompat FIRSTSTRONG_RTL;
+ field public static final android.support.v4.text.TextDirectionHeuristicCompat LOCALE;
+ field public static final android.support.v4.text.TextDirectionHeuristicCompat LTR;
+ field public static final android.support.v4.text.TextDirectionHeuristicCompat RTL;
+ }
+
+ public final class TextUtilsCompat {
+ method public static int getLayoutDirectionFromLocale(java.util.Locale);
+ method public static java.lang.String htmlEncode(java.lang.String);
+ }
+
+}
+
+package android.support.v4.text.util {
+
+ public final class LinkifyCompat {
+ method public static final boolean addLinks(android.text.Spannable, int);
+ method public static final boolean addLinks(android.widget.TextView, int);
+ method public static final void addLinks(android.widget.TextView, java.util.regex.Pattern, java.lang.String);
+ method public static final void addLinks(android.widget.TextView, java.util.regex.Pattern, java.lang.String, android.text.util.Linkify.MatchFilter, android.text.util.Linkify.TransformFilter);
+ method public static final void addLinks(android.widget.TextView, java.util.regex.Pattern, java.lang.String, java.lang.String[], android.text.util.Linkify.MatchFilter, android.text.util.Linkify.TransformFilter);
+ method public static final boolean addLinks(android.text.Spannable, java.util.regex.Pattern, java.lang.String);
+ method public static final boolean addLinks(android.text.Spannable, java.util.regex.Pattern, java.lang.String, android.text.util.Linkify.MatchFilter, android.text.util.Linkify.TransformFilter);
+ method public static final boolean addLinks(android.text.Spannable, java.util.regex.Pattern, java.lang.String, java.lang.String[], android.text.util.Linkify.MatchFilter, android.text.util.Linkify.TransformFilter);
+ }
+
+}
+
+package android.support.v4.util {
+
+ public class ArrayMap<K, V> extends android.support.v4.util.SimpleArrayMap implements java.util.Map {
+ ctor public ArrayMap();
+ ctor public ArrayMap(int);
+ ctor public ArrayMap(android.support.v4.util.SimpleArrayMap);
+ method public boolean containsAll(java.util.Collection<?>);
+ method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
+ method public java.util.Set<K> keySet();
+ method public void putAll(java.util.Map<? extends K, ? extends V>);
+ method public boolean removeAll(java.util.Collection<?>);
+ method public boolean retainAll(java.util.Collection<?>);
+ method public java.util.Collection<V> values();
+ }
+
+ public final class ArraySet<E> implements java.util.Collection java.util.Set {
+ ctor public ArraySet();
+ ctor public ArraySet(int);
+ ctor public ArraySet(android.support.v4.util.ArraySet<E>);
+ method public boolean add(E);
+ method public void addAll(android.support.v4.util.ArraySet<? extends E>);
+ method public boolean addAll(java.util.Collection<? extends E>);
+ method public void clear();
+ method public boolean contains(java.lang.Object);
+ method public boolean containsAll(java.util.Collection<?>);
+ method public void ensureCapacity(int);
+ method public int indexOf(java.lang.Object);
+ method public boolean isEmpty();
+ method public java.util.Iterator<E> iterator();
+ method public boolean remove(java.lang.Object);
+ method public boolean removeAll(android.support.v4.util.ArraySet<? extends E>);
+ method public boolean removeAll(java.util.Collection<?>);
+ method public E removeAt(int);
+ method public boolean retainAll(java.util.Collection<?>);
+ method public int size();
+ method public java.lang.Object[] toArray();
+ method public <T> T[] toArray(T[]);
+ method public E valueAt(int);
+ }
+
+ public class AtomicFile {
+ ctor public AtomicFile(java.io.File);
+ method public void delete();
+ method public void failWrite(java.io.FileOutputStream);
+ method public void finishWrite(java.io.FileOutputStream);
+ method public java.io.File getBaseFile();
+ method public java.io.FileInputStream openRead() throws java.io.FileNotFoundException;
+ method public byte[] readFully() throws java.io.IOException;
+ method public java.io.FileOutputStream startWrite() throws java.io.IOException;
+ }
+
+ public final class CircularArray<E> {
+ ctor public CircularArray();
+ ctor public CircularArray(int);
+ method public void addFirst(E);
+ method public void addLast(E);
+ method public void clear();
+ method public E get(int);
+ method public E getFirst();
+ method public E getLast();
+ method public boolean isEmpty();
+ method public E popFirst();
+ method public E popLast();
+ method public void removeFromEnd(int);
+ method public void removeFromStart(int);
+ method public int size();
+ }
+
+ public final class CircularIntArray {
+ ctor public CircularIntArray();
+ ctor public CircularIntArray(int);
+ method public void addFirst(int);
+ method public void addLast(int);
+ method public void clear();
+ method public int get(int);
+ method public int getFirst();
+ method public int getLast();
+ method public boolean isEmpty();
+ method public int popFirst();
+ method public int popLast();
+ method public void removeFromEnd(int);
+ method public void removeFromStart(int);
+ method public int size();
+ }
+
+ public class LongSparseArray<E> {
+ ctor public LongSparseArray();
+ ctor public LongSparseArray(int);
+ method public void append(long, E);
+ method public void clear();
+ method public android.support.v4.util.LongSparseArray<E> clone();
+ method public void delete(long);
+ method public E get(long);
+ method public E get(long, E);
+ method public int indexOfKey(long);
+ method public int indexOfValue(E);
+ method public long keyAt(int);
+ method public void put(long, E);
+ method public void remove(long);
+ method public void removeAt(int);
+ method public void setValueAt(int, E);
+ method public int size();
+ method public E valueAt(int);
+ }
+
+ public class LruCache<K, V> {
+ ctor public LruCache(int);
+ method protected V create(K);
+ method public final synchronized int createCount();
+ method protected void entryRemoved(boolean, K, V, V);
+ method public final void evictAll();
+ method public final synchronized int evictionCount();
+ method public final V get(K);
+ method public final synchronized int hitCount();
+ method public final synchronized int maxSize();
+ method public final synchronized int missCount();
+ method public final V put(K, V);
+ method public final synchronized int putCount();
+ method public final V remove(K);
+ method public void resize(int);
+ method public final synchronized int size();
+ method protected int sizeOf(K, V);
+ method public final synchronized java.util.Map<K, V> snapshot();
+ method public final synchronized java.lang.String toString();
+ method public void trimToSize(int);
+ }
+
+ public class ObjectsCompat {
+ method public static boolean equals(java.lang.Object, java.lang.Object);
+ }
+
+ public class Pair<F, S> {
+ ctor public Pair(F, S);
+ method public static <A, B> android.support.v4.util.Pair<A, B> create(A, B);
+ field public final F first;
+ field public final S second;
+ }
+
+ public final class PatternsCompat {
+ field public static final java.util.regex.Pattern DOMAIN_NAME;
+ field public static final java.util.regex.Pattern EMAIL_ADDRESS;
+ field public static final java.util.regex.Pattern IP_ADDRESS;
+ field public static final java.util.regex.Pattern WEB_URL;
+ }
+
+ public final class Pools {
+ }
+
+ public static abstract interface Pools.Pool<T> {
+ method public abstract T acquire();
+ method public abstract boolean release(T);
+ }
+
+ public static class Pools.SimplePool<T> implements android.support.v4.util.Pools.Pool {
+ ctor public Pools.SimplePool(int);
+ method public T acquire();
+ method public boolean release(T);
+ }
+
+ public static class Pools.SynchronizedPool<T> extends android.support.v4.util.Pools.SimplePool {
+ ctor public Pools.SynchronizedPool(int);
+ }
+
+ public class SimpleArrayMap<K, V> {
+ ctor public SimpleArrayMap();
+ ctor public SimpleArrayMap(int);
+ ctor public SimpleArrayMap(android.support.v4.util.SimpleArrayMap<K, V>);
+ method public void clear();
+ method public boolean containsKey(java.lang.Object);
+ method public boolean containsValue(java.lang.Object);
+ method public void ensureCapacity(int);
+ method public V get(java.lang.Object);
+ method public int indexOfKey(java.lang.Object);
+ method public boolean isEmpty();
+ method public K keyAt(int);
+ method public V put(K, V);
+ method public void putAll(android.support.v4.util.SimpleArrayMap<? extends K, ? extends V>);
+ method public V remove(java.lang.Object);
+ method public V removeAt(int);
+ method public V setValueAt(int, V);
+ method public int size();
+ method public V valueAt(int);
+ }
+
+ public class SparseArrayCompat<E> {
+ ctor public SparseArrayCompat();
+ ctor public SparseArrayCompat(int);
+ method public void append(int, E);
+ method public void clear();
+ method public android.support.v4.util.SparseArrayCompat<E> clone();
+ method public void delete(int);
+ method public E get(int);
+ method public E get(int, E);
+ method public int indexOfKey(int);
+ method public int indexOfValue(E);
+ method public int keyAt(int);
+ method public void put(int, E);
+ method public void remove(int);
+ method public void removeAt(int);
+ method public void removeAtRange(int, int);
+ method public void setValueAt(int, E);
+ method public int size();
+ method public E valueAt(int);
+ }
+
+}
+
+package android.support.v4.view {
+
+ public class AccessibilityDelegateCompat {
+ ctor public AccessibilityDelegateCompat();
+ method public boolean dispatchPopulateAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
+ method public android.support.v4.view.accessibility.AccessibilityNodeProviderCompat getAccessibilityNodeProvider(android.view.View);
+ method public void onInitializeAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
+ method public void onInitializeAccessibilityNodeInfo(android.view.View, android.support.v4.view.accessibility.AccessibilityNodeInfoCompat);
+ method public void onPopulateAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
+ method public boolean onRequestSendAccessibilityEvent(android.view.ViewGroup, android.view.View, android.view.accessibility.AccessibilityEvent);
+ method public boolean performAccessibilityAction(android.view.View, int, android.os.Bundle);
+ method public void sendAccessibilityEvent(android.view.View, int);
+ method public void sendAccessibilityEventUnchecked(android.view.View, android.view.accessibility.AccessibilityEvent);
+ }
+
+ public abstract class ActionProvider {
+ ctor public ActionProvider(android.content.Context);
+ method public android.content.Context getContext();
+ method public boolean hasSubMenu();
+ method public boolean isVisible();
+ method public abstract android.view.View onCreateActionView();
+ method public android.view.View onCreateActionView(android.view.MenuItem);
+ method public boolean onPerformDefaultAction();
+ method public void onPrepareSubMenu(android.view.SubMenu);
+ method public boolean overridesItemVisibility();
+ method public void refreshVisibility();
+ method public void setVisibilityListener(android.support.v4.view.ActionProvider.VisibilityListener);
+ }
+
+ public static abstract interface ActionProvider.VisibilityListener {
+ method public abstract void onActionProviderVisibilityChanged(boolean);
+ }
+
+ public final class GestureDetectorCompat {
+ ctor public GestureDetectorCompat(android.content.Context, android.view.GestureDetector.OnGestureListener);
+ ctor public GestureDetectorCompat(android.content.Context, android.view.GestureDetector.OnGestureListener, android.os.Handler);
+ method public boolean isLongpressEnabled();
+ method public boolean onTouchEvent(android.view.MotionEvent);
+ method public void setIsLongpressEnabled(boolean);
+ method public void setOnDoubleTapListener(android.view.GestureDetector.OnDoubleTapListener);
+ }
+
+ public final class GravityCompat {
+ method public static void apply(int, int, int, android.graphics.Rect, android.graphics.Rect, int);
+ method public static void apply(int, int, int, android.graphics.Rect, int, int, android.graphics.Rect, int);
+ method public static void applyDisplay(int, android.graphics.Rect, android.graphics.Rect, int);
+ method public static int getAbsoluteGravity(int, int);
+ field public static final int END = 8388613; // 0x800005
+ field public static final int RELATIVE_HORIZONTAL_GRAVITY_MASK = 8388615; // 0x800007
+ field public static final int RELATIVE_LAYOUT_DIRECTION = 8388608; // 0x800000
+ field public static final int START = 8388611; // 0x800003
+ }
+
+ public final class InputDeviceCompat {
+ field public static final int SOURCE_ANY = -256; // 0xffffff00
+ field public static final int SOURCE_CLASS_BUTTON = 1; // 0x1
+ field public static final int SOURCE_CLASS_JOYSTICK = 16; // 0x10
+ field public static final int SOURCE_CLASS_MASK = 255; // 0xff
+ field public static final int SOURCE_CLASS_NONE = 0; // 0x0
+ field public static final int SOURCE_CLASS_POINTER = 2; // 0x2
+ field public static final int SOURCE_CLASS_POSITION = 8; // 0x8
+ field public static final int SOURCE_CLASS_TRACKBALL = 4; // 0x4
+ field public static final int SOURCE_DPAD = 513; // 0x201
+ field public static final int SOURCE_GAMEPAD = 1025; // 0x401
+ field public static final int SOURCE_HDMI = 33554433; // 0x2000001
+ field public static final int SOURCE_JOYSTICK = 16777232; // 0x1000010
+ field public static final int SOURCE_KEYBOARD = 257; // 0x101
+ field public static final int SOURCE_MOUSE = 8194; // 0x2002
+ field public static final int SOURCE_ROTARY_ENCODER = 4194304; // 0x400000
+ field public static final int SOURCE_STYLUS = 16386; // 0x4002
+ field public static final int SOURCE_TOUCHPAD = 1048584; // 0x100008
+ field public static final int SOURCE_TOUCHSCREEN = 4098; // 0x1002
+ field public static final int SOURCE_TOUCH_NAVIGATION = 2097152; // 0x200000
+ field public static final int SOURCE_TRACKBALL = 65540; // 0x10004
+ field public static final int SOURCE_UNKNOWN = 0; // 0x0
+ }
+
+ public final class LayoutInflaterCompat {
+ method public static deprecated android.support.v4.view.LayoutInflaterFactory getFactory(android.view.LayoutInflater);
+ method public static deprecated void setFactory(android.view.LayoutInflater, android.support.v4.view.LayoutInflaterFactory);
+ method public static void setFactory2(android.view.LayoutInflater, android.view.LayoutInflater.Factory2);
+ }
+
+ public abstract deprecated interface LayoutInflaterFactory {
+ method public abstract android.view.View onCreateView(android.view.View, java.lang.String, android.content.Context, android.util.AttributeSet);
+ }
+
+ public final class MarginLayoutParamsCompat {
+ method public static int getLayoutDirection(android.view.ViewGroup.MarginLayoutParams);
+ method public static int getMarginEnd(android.view.ViewGroup.MarginLayoutParams);
+ method public static int getMarginStart(android.view.ViewGroup.MarginLayoutParams);
+ method public static boolean isMarginRelative(android.view.ViewGroup.MarginLayoutParams);
+ method public static void resolveLayoutDirection(android.view.ViewGroup.MarginLayoutParams, int);
+ method public static void setLayoutDirection(android.view.ViewGroup.MarginLayoutParams, int);
+ method public static void setMarginEnd(android.view.ViewGroup.MarginLayoutParams, int);
+ method public static void setMarginStart(android.view.ViewGroup.MarginLayoutParams, int);
+ }
+
+ public final class MenuCompat {
+ method public static deprecated void setShowAsAction(android.view.MenuItem, int);
+ }
+
+ public final class MenuItemCompat {
+ method public static deprecated boolean collapseActionView(android.view.MenuItem);
+ method public static deprecated boolean expandActionView(android.view.MenuItem);
+ method public static android.support.v4.view.ActionProvider getActionProvider(android.view.MenuItem);
+ method public static deprecated android.view.View getActionView(android.view.MenuItem);
+ method public static int getAlphabeticModifiers(android.view.MenuItem);
+ method public static java.lang.CharSequence getContentDescription(android.view.MenuItem);
+ method public static android.content.res.ColorStateList getIconTintList(android.view.MenuItem);
+ method public static android.graphics.PorterDuff.Mode getIconTintMode(android.view.MenuItem);
+ method public static int getNumericModifiers(android.view.MenuItem);
+ method public static java.lang.CharSequence getTooltipText(android.view.MenuItem);
+ method public static deprecated boolean isActionViewExpanded(android.view.MenuItem);
+ method public static android.view.MenuItem setActionProvider(android.view.MenuItem, android.support.v4.view.ActionProvider);
+ method public static deprecated android.view.MenuItem setActionView(android.view.MenuItem, android.view.View);
+ method public static deprecated android.view.MenuItem setActionView(android.view.MenuItem, int);
+ method public static void setAlphabeticShortcut(android.view.MenuItem, char, int);
+ method public static void setContentDescription(android.view.MenuItem, java.lang.CharSequence);
+ method public static void setIconTintList(android.view.MenuItem, android.content.res.ColorStateList);
+ method public static void setIconTintMode(android.view.MenuItem, android.graphics.PorterDuff.Mode);
+ method public static void setNumericShortcut(android.view.MenuItem, char, int);
+ method public static deprecated android.view.MenuItem setOnActionExpandListener(android.view.MenuItem, android.support.v4.view.MenuItemCompat.OnActionExpandListener);
+ method public static void setShortcut(android.view.MenuItem, char, char, int, int);
+ method public static deprecated void setShowAsAction(android.view.MenuItem, int);
+ method public static void setTooltipText(android.view.MenuItem, java.lang.CharSequence);
+ field public static final deprecated int SHOW_AS_ACTION_ALWAYS = 2; // 0x2
+ field public static final deprecated int SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW = 8; // 0x8
+ field public static final deprecated int SHOW_AS_ACTION_IF_ROOM = 1; // 0x1
+ field public static final deprecated int SHOW_AS_ACTION_NEVER = 0; // 0x0
+ field public static final deprecated int SHOW_AS_ACTION_WITH_TEXT = 4; // 0x4
+ }
+
+ public static abstract deprecated interface MenuItemCompat.OnActionExpandListener {
+ method public abstract boolean onMenuItemActionCollapse(android.view.MenuItem);
+ method public abstract boolean onMenuItemActionExpand(android.view.MenuItem);
+ }
+
+ public final class MotionEventCompat {
+ method public static deprecated int findPointerIndex(android.view.MotionEvent, int);
+ method public static deprecated int getActionIndex(android.view.MotionEvent);
+ method public static deprecated int getActionMasked(android.view.MotionEvent);
+ method public static deprecated float getAxisValue(android.view.MotionEvent, int);
+ method public static deprecated float getAxisValue(android.view.MotionEvent, int, int);
+ method public static deprecated int getButtonState(android.view.MotionEvent);
+ method public static deprecated int getPointerCount(android.view.MotionEvent);
+ method public static deprecated int getPointerId(android.view.MotionEvent, int);
+ method public static deprecated int getSource(android.view.MotionEvent);
+ method public static deprecated float getX(android.view.MotionEvent, int);
+ method public static deprecated float getY(android.view.MotionEvent, int);
+ method public static boolean isFromSource(android.view.MotionEvent, int);
+ field public static final deprecated int ACTION_HOVER_ENTER = 9; // 0x9
+ field public static final deprecated int ACTION_HOVER_EXIT = 10; // 0xa
+ field public static final deprecated int ACTION_HOVER_MOVE = 7; // 0x7
+ field public static final deprecated int ACTION_MASK = 255; // 0xff
+ field public static final deprecated int ACTION_POINTER_DOWN = 5; // 0x5
+ field public static final deprecated int ACTION_POINTER_INDEX_MASK = 65280; // 0xff00
+ field public static final deprecated int ACTION_POINTER_INDEX_SHIFT = 8; // 0x8
+ field public static final deprecated int ACTION_POINTER_UP = 6; // 0x6
+ field public static final deprecated int ACTION_SCROLL = 8; // 0x8
+ field public static final deprecated int AXIS_BRAKE = 23; // 0x17
+ field public static final deprecated int AXIS_DISTANCE = 24; // 0x18
+ field public static final deprecated int AXIS_GAS = 22; // 0x16
+ field public static final deprecated int AXIS_GENERIC_1 = 32; // 0x20
+ field public static final deprecated int AXIS_GENERIC_10 = 41; // 0x29
+ field public static final deprecated int AXIS_GENERIC_11 = 42; // 0x2a
+ field public static final deprecated int AXIS_GENERIC_12 = 43; // 0x2b
+ field public static final deprecated int AXIS_GENERIC_13 = 44; // 0x2c
+ field public static final deprecated int AXIS_GENERIC_14 = 45; // 0x2d
+ field public static final deprecated int AXIS_GENERIC_15 = 46; // 0x2e
+ field public static final deprecated int AXIS_GENERIC_16 = 47; // 0x2f
+ field public static final deprecated int AXIS_GENERIC_2 = 33; // 0x21
+ field public static final deprecated int AXIS_GENERIC_3 = 34; // 0x22
+ field public static final deprecated int AXIS_GENERIC_4 = 35; // 0x23
+ field public static final deprecated int AXIS_GENERIC_5 = 36; // 0x24
+ field public static final deprecated int AXIS_GENERIC_6 = 37; // 0x25
+ field public static final deprecated int AXIS_GENERIC_7 = 38; // 0x26
+ field public static final deprecated int AXIS_GENERIC_8 = 39; // 0x27
+ field public static final deprecated int AXIS_GENERIC_9 = 40; // 0x28
+ field public static final deprecated int AXIS_HAT_X = 15; // 0xf
+ field public static final deprecated int AXIS_HAT_Y = 16; // 0x10
+ field public static final deprecated int AXIS_HSCROLL = 10; // 0xa
+ field public static final deprecated int AXIS_LTRIGGER = 17; // 0x11
+ field public static final deprecated int AXIS_ORIENTATION = 8; // 0x8
+ field public static final deprecated int AXIS_PRESSURE = 2; // 0x2
+ field public static final int AXIS_RELATIVE_X = 27; // 0x1b
+ field public static final int AXIS_RELATIVE_Y = 28; // 0x1c
+ field public static final deprecated int AXIS_RTRIGGER = 18; // 0x12
+ field public static final deprecated int AXIS_RUDDER = 20; // 0x14
+ field public static final deprecated int AXIS_RX = 12; // 0xc
+ field public static final deprecated int AXIS_RY = 13; // 0xd
+ field public static final deprecated int AXIS_RZ = 14; // 0xe
+ field public static final int AXIS_SCROLL = 26; // 0x1a
+ field public static final deprecated int AXIS_SIZE = 3; // 0x3
+ field public static final deprecated int AXIS_THROTTLE = 19; // 0x13
+ field public static final deprecated int AXIS_TILT = 25; // 0x19
+ field public static final deprecated int AXIS_TOOL_MAJOR = 6; // 0x6
+ field public static final deprecated int AXIS_TOOL_MINOR = 7; // 0x7
+ field public static final deprecated int AXIS_TOUCH_MAJOR = 4; // 0x4
+ field public static final deprecated int AXIS_TOUCH_MINOR = 5; // 0x5
+ field public static final deprecated int AXIS_VSCROLL = 9; // 0x9
+ field public static final deprecated int AXIS_WHEEL = 21; // 0x15
+ field public static final deprecated int AXIS_X = 0; // 0x0
+ field public static final deprecated int AXIS_Y = 1; // 0x1
+ field public static final deprecated int AXIS_Z = 11; // 0xb
+ field public static final deprecated int BUTTON_PRIMARY = 1; // 0x1
+ }
+
+ public abstract interface NestedScrollingChild {
+ method public abstract boolean dispatchNestedFling(float, float, boolean);
+ method public abstract boolean dispatchNestedPreFling(float, float);
+ method public abstract boolean dispatchNestedPreScroll(int, int, int[], int[]);
+ method public abstract boolean dispatchNestedScroll(int, int, int, int, int[]);
+ method public abstract boolean hasNestedScrollingParent();
+ method public abstract boolean isNestedScrollingEnabled();
+ method public abstract void setNestedScrollingEnabled(boolean);
+ method public abstract boolean startNestedScroll(int);
+ method public abstract void stopNestedScroll();
+ }
+
+ public abstract interface NestedScrollingChild2 implements android.support.v4.view.NestedScrollingChild {
+ method public abstract boolean dispatchNestedPreScroll(int, int, int[], int[], int);
+ method public abstract boolean dispatchNestedScroll(int, int, int, int, int[], int);
+ method public abstract boolean hasNestedScrollingParent(int);
+ method public abstract boolean startNestedScroll(int, int);
+ method public abstract void stopNestedScroll(int);
+ }
+
+ public abstract interface NestedScrollingParent {
+ method public abstract int getNestedScrollAxes();
+ method public abstract boolean onNestedFling(android.view.View, float, float, boolean);
+ method public abstract boolean onNestedPreFling(android.view.View, float, float);
+ method public abstract void onNestedPreScroll(android.view.View, int, int, int[]);
+ method public abstract void onNestedScroll(android.view.View, int, int, int, int);
+ method public abstract void onNestedScrollAccepted(android.view.View, android.view.View, int);
+ method public abstract boolean onStartNestedScroll(android.view.View, android.view.View, int);
+ method public abstract void onStopNestedScroll(android.view.View);
+ }
+
+ public abstract interface NestedScrollingParent2 implements android.support.v4.view.NestedScrollingParent {
+ method public abstract void onNestedPreScroll(android.view.View, int, int, int[], int);
+ method public abstract void onNestedScroll(android.view.View, int, int, int, int, int);
+ method public abstract void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
+ method public abstract boolean onStartNestedScroll(android.view.View, android.view.View, int, int);
+ method public abstract void onStopNestedScroll(android.view.View, int);
+ }
+
+ public abstract interface OnApplyWindowInsetsListener {
+ method public abstract android.support.v4.view.WindowInsetsCompat onApplyWindowInsets(android.view.View, android.support.v4.view.WindowInsetsCompat);
+ }
+
+ public final class PointerIconCompat {
+ method public static android.support.v4.view.PointerIconCompat create(android.graphics.Bitmap, float, float);
+ method public static android.support.v4.view.PointerIconCompat getSystemIcon(android.content.Context, int);
+ method public static android.support.v4.view.PointerIconCompat load(android.content.res.Resources, int);
+ field public static final int TYPE_ALIAS = 1010; // 0x3f2
+ field public static final int TYPE_ALL_SCROLL = 1013; // 0x3f5
+ field public static final int TYPE_ARROW = 1000; // 0x3e8
+ field public static final int TYPE_CELL = 1006; // 0x3ee
+ field public static final int TYPE_CONTEXT_MENU = 1001; // 0x3e9
+ field public static final int TYPE_COPY = 1011; // 0x3f3
+ field public static final int TYPE_CROSSHAIR = 1007; // 0x3ef
+ field public static final int TYPE_DEFAULT = 1000; // 0x3e8
+ field public static final int TYPE_GRAB = 1020; // 0x3fc
+ field public static final int TYPE_GRABBING = 1021; // 0x3fd
+ field public static final int TYPE_HAND = 1002; // 0x3ea
+ field public static final int TYPE_HELP = 1003; // 0x3eb
+ field public static final int TYPE_HORIZONTAL_DOUBLE_ARROW = 1014; // 0x3f6
+ field public static final int TYPE_NO_DROP = 1012; // 0x3f4
+ field public static final int TYPE_NULL = 0; // 0x0
+ field public static final int TYPE_TEXT = 1008; // 0x3f0
+ field public static final int TYPE_TOP_LEFT_DIAGONAL_DOUBLE_ARROW = 1017; // 0x3f9
+ field public static final int TYPE_TOP_RIGHT_DIAGONAL_DOUBLE_ARROW = 1016; // 0x3f8
+ field public static final int TYPE_VERTICAL_DOUBLE_ARROW = 1015; // 0x3f7
+ field public static final int TYPE_VERTICAL_TEXT = 1009; // 0x3f1
+ field public static final int TYPE_WAIT = 1004; // 0x3ec
+ field public static final int TYPE_ZOOM_IN = 1018; // 0x3fa
+ field public static final int TYPE_ZOOM_OUT = 1019; // 0x3fb
+ }
+
+ public final class ScaleGestureDetectorCompat {
+ method public static deprecated boolean isQuickScaleEnabled(java.lang.Object);
+ method public static boolean isQuickScaleEnabled(android.view.ScaleGestureDetector);
+ method public static deprecated void setQuickScaleEnabled(java.lang.Object, boolean);
+ method public static void setQuickScaleEnabled(android.view.ScaleGestureDetector, boolean);
+ }
+
+ public abstract interface ScrollingView {
+ method public abstract int computeHorizontalScrollExtent();
+ method public abstract int computeHorizontalScrollOffset();
+ method public abstract int computeHorizontalScrollRange();
+ method public abstract int computeVerticalScrollExtent();
+ method public abstract int computeVerticalScrollOffset();
+ method public abstract int computeVerticalScrollRange();
+ }
+
+ public abstract interface TintableBackgroundView {
+ method public abstract android.content.res.ColorStateList getSupportBackgroundTintList();
+ method public abstract android.graphics.PorterDuff.Mode getSupportBackgroundTintMode();
+ method public abstract void setSupportBackgroundTintList(android.content.res.ColorStateList);
+ method public abstract void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode);
+ }
+
+ public final deprecated class VelocityTrackerCompat {
+ method public static deprecated float getXVelocity(android.view.VelocityTracker, int);
+ method public static deprecated float getYVelocity(android.view.VelocityTracker, int);
+ }
+
+ public class ViewCompat {
+ ctor protected ViewCompat();
+ method public static void addKeyboardNavigationClusters(android.view.View, java.util.Collection<android.view.View>, int);
+ method public static android.support.v4.view.ViewPropertyAnimatorCompat animate(android.view.View);
+ method public static deprecated boolean canScrollHorizontally(android.view.View, int);
+ method public static deprecated boolean canScrollVertically(android.view.View, int);
+ method public static void cancelDragAndDrop(android.view.View);
+ method public static deprecated int combineMeasuredStates(int, int);
+ method public static android.support.v4.view.WindowInsetsCompat dispatchApplyWindowInsets(android.view.View, android.support.v4.view.WindowInsetsCompat);
+ method public static void dispatchFinishTemporaryDetach(android.view.View);
+ method public static boolean dispatchNestedFling(android.view.View, float, float, boolean);
+ method public static boolean dispatchNestedPreFling(android.view.View, float, float);
+ method public static boolean dispatchNestedPreScroll(android.view.View, int, int, int[], int[]);
+ method public static boolean dispatchNestedPreScroll(android.view.View, int, int, int[], int[], int);
+ method public static boolean dispatchNestedScroll(android.view.View, int, int, int, int, int[]);
+ method public static boolean dispatchNestedScroll(android.view.View, int, int, int, int, int[], int);
+ method public static void dispatchStartTemporaryDetach(android.view.View);
+ method public static int getAccessibilityLiveRegion(android.view.View);
+ method public static android.support.v4.view.accessibility.AccessibilityNodeProviderCompat getAccessibilityNodeProvider(android.view.View);
+ method public static deprecated float getAlpha(android.view.View);
+ method public static android.content.res.ColorStateList getBackgroundTintList(android.view.View);
+ method public static android.graphics.PorterDuff.Mode getBackgroundTintMode(android.view.View);
+ method public static android.graphics.Rect getClipBounds(android.view.View);
+ method public static android.view.Display getDisplay(android.view.View);
+ method public static float getElevation(android.view.View);
+ method public static boolean getFitsSystemWindows(android.view.View);
+ method public static int getImportantForAccessibility(android.view.View);
+ method public static int getImportantForAutofill(android.view.View);
+ method public static int getLabelFor(android.view.View);
+ method public static deprecated int getLayerType(android.view.View);
+ method public static int getLayoutDirection(android.view.View);
+ method public static deprecated android.graphics.Matrix getMatrix(android.view.View);
+ method public static deprecated int getMeasuredHeightAndState(android.view.View);
+ method public static deprecated int getMeasuredState(android.view.View);
+ method public static deprecated int getMeasuredWidthAndState(android.view.View);
+ method public static int getMinimumHeight(android.view.View);
+ method public static int getMinimumWidth(android.view.View);
+ method public static int getNextClusterForwardId(android.view.View);
+ method public static deprecated int getOverScrollMode(android.view.View);
+ method public static int getPaddingEnd(android.view.View);
+ method public static int getPaddingStart(android.view.View);
+ method public static android.view.ViewParent getParentForAccessibility(android.view.View);
+ method public static deprecated float getPivotX(android.view.View);
+ method public static deprecated float getPivotY(android.view.View);
+ method public static deprecated float getRotation(android.view.View);
+ method public static deprecated float getRotationX(android.view.View);
+ method public static deprecated float getRotationY(android.view.View);
+ method public static deprecated float getScaleX(android.view.View);
+ method public static deprecated float getScaleY(android.view.View);
+ method public static int getScrollIndicators(android.view.View);
+ method public static java.lang.String getTransitionName(android.view.View);
+ method public static deprecated float getTranslationX(android.view.View);
+ method public static deprecated float getTranslationY(android.view.View);
+ method public static float getTranslationZ(android.view.View);
+ method public static int getWindowSystemUiVisibility(android.view.View);
+ method public static deprecated float getX(android.view.View);
+ method public static deprecated float getY(android.view.View);
+ method public static float getZ(android.view.View);
+ method public static boolean hasAccessibilityDelegate(android.view.View);
+ method public static boolean hasExplicitFocusable(android.view.View);
+ method public static boolean hasNestedScrollingParent(android.view.View);
+ method public static boolean hasNestedScrollingParent(android.view.View, int);
+ method public static boolean hasOnClickListeners(android.view.View);
+ method public static boolean hasOverlappingRendering(android.view.View);
+ method public static boolean hasTransientState(android.view.View);
+ method public static boolean isAttachedToWindow(android.view.View);
+ method public static boolean isFocusedByDefault(android.view.View);
+ method public static boolean isImportantForAccessibility(android.view.View);
+ method public static boolean isImportantForAutofill(android.view.View);
+ method public static boolean isInLayout(android.view.View);
+ method public static boolean isKeyboardNavigationCluster(android.view.View);
+ method public static boolean isLaidOut(android.view.View);
+ method public static boolean isLayoutDirectionResolved(android.view.View);
+ method public static boolean isNestedScrollingEnabled(android.view.View);
+ method public static deprecated boolean isOpaque(android.view.View);
+ method public static boolean isPaddingRelative(android.view.View);
+ method public static deprecated void jumpDrawablesToCurrentState(android.view.View);
+ method public static android.view.View keyboardNavigationClusterSearch(android.view.View, android.view.View, int);
+ method public static void offsetLeftAndRight(android.view.View, int);
+ method public static void offsetTopAndBottom(android.view.View, int);
+ method public static android.support.v4.view.WindowInsetsCompat onApplyWindowInsets(android.view.View, android.support.v4.view.WindowInsetsCompat);
+ method public static deprecated void onInitializeAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
+ method public static void onInitializeAccessibilityNodeInfo(android.view.View, android.support.v4.view.accessibility.AccessibilityNodeInfoCompat);
+ method public static deprecated void onPopulateAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
+ method public static boolean performAccessibilityAction(android.view.View, int, android.os.Bundle);
+ method public static void postInvalidateOnAnimation(android.view.View);
+ method public static void postInvalidateOnAnimation(android.view.View, int, int, int, int);
+ method public static void postOnAnimation(android.view.View, java.lang.Runnable);
+ method public static void postOnAnimationDelayed(android.view.View, java.lang.Runnable, long);
+ method public static void requestApplyInsets(android.view.View);
+ method public static deprecated int resolveSizeAndState(int, int, int);
+ method public static boolean restoreDefaultFocus(android.view.View);
+ method public static void setAccessibilityDelegate(android.view.View, android.support.v4.view.AccessibilityDelegateCompat);
+ method public static void setAccessibilityLiveRegion(android.view.View, int);
+ method public static deprecated void setActivated(android.view.View, boolean);
+ method public static deprecated void setAlpha(android.view.View, float);
+ method public static void setAutofillHints(android.view.View, java.lang.String...);
+ method public static void setBackground(android.view.View, android.graphics.drawable.Drawable);
+ method public static void setBackgroundTintList(android.view.View, android.content.res.ColorStateList);
+ method public static void setBackgroundTintMode(android.view.View, android.graphics.PorterDuff.Mode);
+ method public static deprecated void setChildrenDrawingOrderEnabled(android.view.ViewGroup, boolean);
+ method public static void setClipBounds(android.view.View, android.graphics.Rect);
+ method public static void setElevation(android.view.View, float);
+ method public static deprecated void setFitsSystemWindows(android.view.View, boolean);
+ method public static void setFocusedByDefault(android.view.View, boolean);
+ method public static void setHasTransientState(android.view.View, boolean);
+ method public static void setImportantForAccessibility(android.view.View, int);
+ method public static void setImportantForAutofill(android.view.View, int);
+ method public static void setKeyboardNavigationCluster(android.view.View, boolean);
+ method public static void setLabelFor(android.view.View, int);
+ method public static void setLayerPaint(android.view.View, android.graphics.Paint);
+ method public static deprecated void setLayerType(android.view.View, int, android.graphics.Paint);
+ method public static void setLayoutDirection(android.view.View, int);
+ method public static void setNestedScrollingEnabled(android.view.View, boolean);
+ method public static void setNextClusterForwardId(android.view.View, int);
+ method public static void setOnApplyWindowInsetsListener(android.view.View, android.support.v4.view.OnApplyWindowInsetsListener);
+ method public static deprecated void setOverScrollMode(android.view.View, int);
+ method public static void setPaddingRelative(android.view.View, int, int, int, int);
+ method public static deprecated void setPivotX(android.view.View, float);
+ method public static deprecated void setPivotY(android.view.View, float);
+ method public static void setPointerIcon(android.view.View, android.support.v4.view.PointerIconCompat);
+ method public static deprecated void setRotation(android.view.View, float);
+ method public static deprecated void setRotationX(android.view.View, float);
+ method public static deprecated void setRotationY(android.view.View, float);
+ method public static deprecated void setSaveFromParentEnabled(android.view.View, boolean);
+ method public static deprecated void setScaleX(android.view.View, float);
+ method public static deprecated void setScaleY(android.view.View, float);
+ method public static void setScrollIndicators(android.view.View, int);
+ method public static void setScrollIndicators(android.view.View, int, int);
+ method public static void setTooltipText(android.view.View, java.lang.CharSequence);
+ method public static void setTransitionName(android.view.View, java.lang.String);
+ method public static deprecated void setTranslationX(android.view.View, float);
+ method public static deprecated void setTranslationY(android.view.View, float);
+ method public static void setTranslationZ(android.view.View, float);
+ method public static deprecated void setX(android.view.View, float);
+ method public static deprecated void setY(android.view.View, float);
+ method public static void setZ(android.view.View, float);
+ method public static boolean startDragAndDrop(android.view.View, android.content.ClipData, android.view.View.DragShadowBuilder, java.lang.Object, int);
+ method public static boolean startNestedScroll(android.view.View, int);
+ method public static boolean startNestedScroll(android.view.View, int, int);
+ method public static void stopNestedScroll(android.view.View);
+ method public static void stopNestedScroll(android.view.View, int);
+ method public static void updateDragShadow(android.view.View, android.view.View.DragShadowBuilder);
+ field public static final int ACCESSIBILITY_LIVE_REGION_ASSERTIVE = 2; // 0x2
+ field public static final int ACCESSIBILITY_LIVE_REGION_NONE = 0; // 0x0
+ field public static final int ACCESSIBILITY_LIVE_REGION_POLITE = 1; // 0x1
+ field public static final int IMPORTANT_FOR_ACCESSIBILITY_AUTO = 0; // 0x0
+ field public static final int IMPORTANT_FOR_ACCESSIBILITY_NO = 2; // 0x2
+ field public static final int IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS = 4; // 0x4
+ field public static final int IMPORTANT_FOR_ACCESSIBILITY_YES = 1; // 0x1
+ field public static final deprecated int LAYER_TYPE_HARDWARE = 2; // 0x2
+ field public static final deprecated int LAYER_TYPE_NONE = 0; // 0x0
+ field public static final deprecated int LAYER_TYPE_SOFTWARE = 1; // 0x1
+ field public static final int LAYOUT_DIRECTION_INHERIT = 2; // 0x2
+ field public static final int LAYOUT_DIRECTION_LOCALE = 3; // 0x3
+ field public static final int LAYOUT_DIRECTION_LTR = 0; // 0x0
+ field public static final int LAYOUT_DIRECTION_RTL = 1; // 0x1
+ field public static final deprecated int MEASURED_HEIGHT_STATE_SHIFT = 16; // 0x10
+ field public static final deprecated int MEASURED_SIZE_MASK = 16777215; // 0xffffff
+ field public static final deprecated int MEASURED_STATE_MASK = -16777216; // 0xff000000
+ field public static final deprecated int MEASURED_STATE_TOO_SMALL = 16777216; // 0x1000000
+ field public static final deprecated int OVER_SCROLL_ALWAYS = 0; // 0x0
+ field public static final deprecated int OVER_SCROLL_IF_CONTENT_SCROLLS = 1; // 0x1
+ field public static final deprecated int OVER_SCROLL_NEVER = 2; // 0x2
+ field public static final int SCROLL_AXIS_HORIZONTAL = 1; // 0x1
+ field public static final int SCROLL_AXIS_NONE = 0; // 0x0
+ field public static final int SCROLL_AXIS_VERTICAL = 2; // 0x2
+ field public static final int SCROLL_INDICATOR_BOTTOM = 2; // 0x2
+ field public static final int SCROLL_INDICATOR_END = 32; // 0x20
+ field public static final int SCROLL_INDICATOR_LEFT = 4; // 0x4
+ field public static final int SCROLL_INDICATOR_RIGHT = 8; // 0x8
+ field public static final int SCROLL_INDICATOR_START = 16; // 0x10
+ field public static final int SCROLL_INDICATOR_TOP = 1; // 0x1
+ field public static final int TYPE_NON_TOUCH = 1; // 0x1
+ field public static final int TYPE_TOUCH = 0; // 0x0
+ }
+
+ public final deprecated class ViewConfigurationCompat {
+ method public static float getScaledHorizontalScrollFactor(android.view.ViewConfiguration, android.content.Context);
+ method public static deprecated int getScaledPagingTouchSlop(android.view.ViewConfiguration);
+ method public static float getScaledVerticalScrollFactor(android.view.ViewConfiguration, android.content.Context);
+ method public static deprecated boolean hasPermanentMenuKey(android.view.ViewConfiguration);
+ }
+
+ public final class ViewGroupCompat {
+ method public static int getLayoutMode(android.view.ViewGroup);
+ method public static int getNestedScrollAxes(android.view.ViewGroup);
+ method public static boolean isTransitionGroup(android.view.ViewGroup);
+ method public static deprecated boolean onRequestSendAccessibilityEvent(android.view.ViewGroup, android.view.View, android.view.accessibility.AccessibilityEvent);
+ method public static void setLayoutMode(android.view.ViewGroup, int);
+ method public static deprecated void setMotionEventSplittingEnabled(android.view.ViewGroup, boolean);
+ method public static void setTransitionGroup(android.view.ViewGroup, boolean);
+ field public static final int LAYOUT_MODE_CLIP_BOUNDS = 0; // 0x0
+ field public static final int LAYOUT_MODE_OPTICAL_BOUNDS = 1; // 0x1
+ }
+
+ public final class ViewParentCompat {
+ method public static void notifySubtreeAccessibilityStateChanged(android.view.ViewParent, android.view.View, android.view.View, int);
+ method public static boolean onNestedFling(android.view.ViewParent, android.view.View, float, float, boolean);
+ method public static boolean onNestedPreFling(android.view.ViewParent, android.view.View, float, float);
+ method public static void onNestedPreScroll(android.view.ViewParent, android.view.View, int, int, int[]);
+ method public static void onNestedPreScroll(android.view.ViewParent, android.view.View, int, int, int[], int);
+ method public static void onNestedScroll(android.view.ViewParent, android.view.View, int, int, int, int);
+ method public static void onNestedScroll(android.view.ViewParent, android.view.View, int, int, int, int, int);
+ method public static void onNestedScrollAccepted(android.view.ViewParent, android.view.View, android.view.View, int);
+ method public static void onNestedScrollAccepted(android.view.ViewParent, android.view.View, android.view.View, int, int);
+ method public static boolean onStartNestedScroll(android.view.ViewParent, android.view.View, android.view.View, int);
+ method public static boolean onStartNestedScroll(android.view.ViewParent, android.view.View, android.view.View, int, int);
+ method public static void onStopNestedScroll(android.view.ViewParent, android.view.View);
+ method public static void onStopNestedScroll(android.view.ViewParent, android.view.View, int);
+ method public static deprecated boolean requestSendAccessibilityEvent(android.view.ViewParent, android.view.View, android.view.accessibility.AccessibilityEvent);
+ }
+
+ public final class ViewPropertyAnimatorCompat {
+ method public android.support.v4.view.ViewPropertyAnimatorCompat alpha(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat alphaBy(float);
+ method public void cancel();
+ method public long getDuration();
+ method public android.view.animation.Interpolator getInterpolator();
+ method public long getStartDelay();
+ method public android.support.v4.view.ViewPropertyAnimatorCompat rotation(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat rotationBy(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat rotationX(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat rotationXBy(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat rotationY(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat rotationYBy(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat scaleX(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat scaleXBy(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat scaleY(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat scaleYBy(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat setDuration(long);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat setInterpolator(android.view.animation.Interpolator);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat setListener(android.support.v4.view.ViewPropertyAnimatorListener);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat setStartDelay(long);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat setUpdateListener(android.support.v4.view.ViewPropertyAnimatorUpdateListener);
+ method public void start();
+ method public android.support.v4.view.ViewPropertyAnimatorCompat translationX(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat translationXBy(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat translationY(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat translationYBy(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat translationZ(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat translationZBy(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat withEndAction(java.lang.Runnable);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat withLayer();
+ method public android.support.v4.view.ViewPropertyAnimatorCompat withStartAction(java.lang.Runnable);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat x(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat xBy(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat y(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat yBy(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat z(float);
+ method public android.support.v4.view.ViewPropertyAnimatorCompat zBy(float);
+ }
+
+ public abstract interface ViewPropertyAnimatorListener {
+ method public abstract void onAnimationCancel(android.view.View);
+ method public abstract void onAnimationEnd(android.view.View);
+ method public abstract void onAnimationStart(android.view.View);
+ }
+
+ public class ViewPropertyAnimatorListenerAdapter implements android.support.v4.view.ViewPropertyAnimatorListener {
+ ctor public ViewPropertyAnimatorListenerAdapter();
+ method public void onAnimationCancel(android.view.View);
+ method public void onAnimationEnd(android.view.View);
+ method public void onAnimationStart(android.view.View);
+ }
+
+ public abstract interface ViewPropertyAnimatorUpdateListener {
+ method public abstract void onAnimationUpdate(android.view.View);
+ }
+
+ public final class WindowCompat {
+ field public static final int FEATURE_ACTION_BAR = 8; // 0x8
+ field public static final int FEATURE_ACTION_BAR_OVERLAY = 9; // 0x9
+ field public static final int FEATURE_ACTION_MODE_OVERLAY = 10; // 0xa
+ }
+
+ public class WindowInsetsCompat {
+ ctor public WindowInsetsCompat(android.support.v4.view.WindowInsetsCompat);
+ method public android.support.v4.view.WindowInsetsCompat consumeStableInsets();
+ method public android.support.v4.view.WindowInsetsCompat consumeSystemWindowInsets();
+ method public int getStableInsetBottom();
+ method public int getStableInsetLeft();
+ method public int getStableInsetRight();
+ method public int getStableInsetTop();
+ method public int getSystemWindowInsetBottom();
+ method public int getSystemWindowInsetLeft();
+ method public int getSystemWindowInsetRight();
+ method public int getSystemWindowInsetTop();
+ method public boolean hasInsets();
+ method public boolean hasStableInsets();
+ method public boolean hasSystemWindowInsets();
+ method public boolean isConsumed();
+ method public boolean isRound();
+ method public android.support.v4.view.WindowInsetsCompat replaceSystemWindowInsets(int, int, int, int);
+ method public android.support.v4.view.WindowInsetsCompat replaceSystemWindowInsets(android.graphics.Rect);
+ }
+
+}
+
+package android.support.v4.view.accessibility {
+
+ public final class AccessibilityEventCompat {
+ method public static deprecated void appendRecord(android.view.accessibility.AccessibilityEvent, android.support.v4.view.accessibility.AccessibilityRecordCompat);
+ method public static deprecated android.support.v4.view.accessibility.AccessibilityRecordCompat asRecord(android.view.accessibility.AccessibilityEvent);
+ method public static int getAction(android.view.accessibility.AccessibilityEvent);
+ method public static int getContentChangeTypes(android.view.accessibility.AccessibilityEvent);
+ method public static int getMovementGranularity(android.view.accessibility.AccessibilityEvent);
+ method public static deprecated android.support.v4.view.accessibility.AccessibilityRecordCompat getRecord(android.view.accessibility.AccessibilityEvent, int);
+ method public static deprecated int getRecordCount(android.view.accessibility.AccessibilityEvent);
+ method public static void setAction(android.view.accessibility.AccessibilityEvent, int);
+ method public static void setContentChangeTypes(android.view.accessibility.AccessibilityEvent, int);
+ method public static void setMovementGranularity(android.view.accessibility.AccessibilityEvent, int);
+ field public static final int CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION = 4; // 0x4
+ field public static final int CONTENT_CHANGE_TYPE_SUBTREE = 1; // 0x1
+ field public static final int CONTENT_CHANGE_TYPE_TEXT = 2; // 0x2
+ field public static final int CONTENT_CHANGE_TYPE_UNDEFINED = 0; // 0x0
+ field public static final int TYPES_ALL_MASK = -1; // 0xffffffff
+ field public static final int TYPE_ANNOUNCEMENT = 16384; // 0x4000
+ field public static final int TYPE_ASSIST_READING_CONTEXT = 16777216; // 0x1000000
+ field public static final int TYPE_GESTURE_DETECTION_END = 524288; // 0x80000
+ field public static final int TYPE_GESTURE_DETECTION_START = 262144; // 0x40000
+ field public static final deprecated int TYPE_TOUCH_EXPLORATION_GESTURE_END = 1024; // 0x400
+ field public static final deprecated int TYPE_TOUCH_EXPLORATION_GESTURE_START = 512; // 0x200
+ field public static final int TYPE_TOUCH_INTERACTION_END = 2097152; // 0x200000
+ field public static final int TYPE_TOUCH_INTERACTION_START = 1048576; // 0x100000
+ field public static final int TYPE_VIEW_ACCESSIBILITY_FOCUSED = 32768; // 0x8000
+ field public static final int TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED = 65536; // 0x10000
+ field public static final int TYPE_VIEW_CONTEXT_CLICKED = 8388608; // 0x800000
+ field public static final deprecated int TYPE_VIEW_HOVER_ENTER = 128; // 0x80
+ field public static final deprecated int TYPE_VIEW_HOVER_EXIT = 256; // 0x100
+ field public static final deprecated int TYPE_VIEW_SCROLLED = 4096; // 0x1000
+ field public static final deprecated int TYPE_VIEW_TEXT_SELECTION_CHANGED = 8192; // 0x2000
+ field public static final int TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY = 131072; // 0x20000
+ field public static final int TYPE_WINDOWS_CHANGED = 4194304; // 0x400000
+ field public static final deprecated int TYPE_WINDOW_CONTENT_CHANGED = 2048; // 0x800
+ }
+
+ public final class AccessibilityManagerCompat {
+ method public static deprecated boolean addAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener);
+ method public static boolean addTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener);
+ method public static deprecated java.util.List<android.accessibilityservice.AccessibilityServiceInfo> getEnabledAccessibilityServiceList(android.view.accessibility.AccessibilityManager, int);
+ method public static deprecated java.util.List<android.accessibilityservice.AccessibilityServiceInfo> getInstalledAccessibilityServiceList(android.view.accessibility.AccessibilityManager);
+ method public static deprecated boolean isTouchExplorationEnabled(android.view.accessibility.AccessibilityManager);
+ method public static deprecated boolean removeAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener);
+ method public static boolean removeTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener);
+ }
+
+ public static abstract deprecated interface AccessibilityManagerCompat.AccessibilityStateChangeListener {
+ method public abstract deprecated void onAccessibilityStateChanged(boolean);
+ }
+
+ public static abstract deprecated class AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat implements android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener {
+ ctor public AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat();
+ }
+
+ public static abstract interface AccessibilityManagerCompat.TouchExplorationStateChangeListener {
+ method public abstract void onTouchExplorationStateChanged(boolean);
+ }
+
+ public class AccessibilityNodeInfoCompat {
+ ctor public deprecated AccessibilityNodeInfoCompat(java.lang.Object);
+ method public void addAction(int);
+ method public void addAction(android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat);
+ method public void addChild(android.view.View);
+ method public void addChild(android.view.View, int);
+ method public boolean canOpenPopup();
+ method public java.util.List<android.support.v4.view.accessibility.AccessibilityNodeInfoCompat> findAccessibilityNodeInfosByText(java.lang.String);
+ method public java.util.List<android.support.v4.view.accessibility.AccessibilityNodeInfoCompat> findAccessibilityNodeInfosByViewId(java.lang.String);
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat findFocus(int);
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat focusSearch(int);
+ method public java.util.List<android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat> getActionList();
+ method public int getActions();
+ method public void getBoundsInParent(android.graphics.Rect);
+ method public void getBoundsInScreen(android.graphics.Rect);
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat getChild(int);
+ method public int getChildCount();
+ method public java.lang.CharSequence getClassName();
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat getCollectionInfo();
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat getCollectionItemInfo();
+ method public java.lang.CharSequence getContentDescription();
+ method public int getDrawingOrder();
+ method public java.lang.CharSequence getError();
+ method public android.os.Bundle getExtras();
+ method public deprecated java.lang.Object getInfo();
+ method public int getInputType();
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat getLabelFor();
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat getLabeledBy();
+ method public int getLiveRegion();
+ method public int getMaxTextLength();
+ method public int getMovementGranularities();
+ method public java.lang.CharSequence getPackageName();
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat getParent();
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat getRangeInfo();
+ method public java.lang.CharSequence getRoleDescription();
+ method public java.lang.CharSequence getText();
+ method public int getTextSelectionEnd();
+ method public int getTextSelectionStart();
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat getTraversalAfter();
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat getTraversalBefore();
+ method public java.lang.String getViewIdResourceName();
+ method public android.support.v4.view.accessibility.AccessibilityWindowInfoCompat getWindow();
+ method public int getWindowId();
+ method public boolean isAccessibilityFocused();
+ method public boolean isCheckable();
+ method public boolean isChecked();
+ method public boolean isClickable();
+ method public boolean isContentInvalid();
+ method public boolean isContextClickable();
+ method public boolean isDismissable();
+ method public boolean isEditable();
+ method public boolean isEnabled();
+ method public boolean isFocusable();
+ method public boolean isFocused();
+ method public boolean isImportantForAccessibility();
+ method public boolean isLongClickable();
+ method public boolean isMultiLine();
+ method public boolean isPassword();
+ method public boolean isScrollable();
+ method public boolean isSelected();
+ method public boolean isVisibleToUser();
+ method public static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat obtain(android.view.View);
+ method public static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat obtain(android.view.View, int);
+ method public static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat obtain();
+ method public static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat obtain(android.support.v4.view.accessibility.AccessibilityNodeInfoCompat);
+ method public boolean performAction(int);
+ method public boolean performAction(int, android.os.Bundle);
+ method public void recycle();
+ method public boolean refresh();
+ method public boolean removeAction(android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat);
+ method public boolean removeChild(android.view.View);
+ method public boolean removeChild(android.view.View, int);
+ method public void setAccessibilityFocused(boolean);
+ method public void setBoundsInParent(android.graphics.Rect);
+ method public void setBoundsInScreen(android.graphics.Rect);
+ method public void setCanOpenPopup(boolean);
+ method public void setCheckable(boolean);
+ method public void setChecked(boolean);
+ method public void setClassName(java.lang.CharSequence);
+ method public void setClickable(boolean);
+ method public void setCollectionInfo(java.lang.Object);
+ method public void setCollectionItemInfo(java.lang.Object);
+ method public void setContentDescription(java.lang.CharSequence);
+ method public void setContentInvalid(boolean);
+ method public void setContextClickable(boolean);
+ method public void setDismissable(boolean);
+ method public void setDrawingOrder(int);
+ method public void setEditable(boolean);
+ method public void setEnabled(boolean);
+ method public void setError(java.lang.CharSequence);
+ method public void setFocusable(boolean);
+ method public void setFocused(boolean);
+ method public void setImportantForAccessibility(boolean);
+ method public void setInputType(int);
+ method public void setLabelFor(android.view.View);
+ method public void setLabelFor(android.view.View, int);
+ method public void setLabeledBy(android.view.View);
+ method public void setLabeledBy(android.view.View, int);
+ method public void setLiveRegion(int);
+ method public void setLongClickable(boolean);
+ method public void setMaxTextLength(int);
+ method public void setMovementGranularities(int);
+ method public void setMultiLine(boolean);
+ method public void setPackageName(java.lang.CharSequence);
+ method public void setParent(android.view.View);
+ method public void setParent(android.view.View, int);
+ method public void setPassword(boolean);
+ method public void setRangeInfo(android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat);
+ method public void setRoleDescription(java.lang.CharSequence);
+ method public void setScrollable(boolean);
+ method public void setSelected(boolean);
+ method public void setSource(android.view.View);
+ method public void setSource(android.view.View, int);
+ method public void setText(java.lang.CharSequence);
+ method public void setTextSelection(int, int);
+ method public void setTraversalAfter(android.view.View);
+ method public void setTraversalAfter(android.view.View, int);
+ method public void setTraversalBefore(android.view.View);
+ method public void setTraversalBefore(android.view.View, int);
+ method public void setViewIdResourceName(java.lang.String);
+ method public void setVisibleToUser(boolean);
+ method public android.view.accessibility.AccessibilityNodeInfo unwrap();
+ method public static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat wrap(android.view.accessibility.AccessibilityNodeInfo);
+ field public static final int ACTION_ACCESSIBILITY_FOCUS = 64; // 0x40
+ field public static final java.lang.String ACTION_ARGUMENT_COLUMN_INT = "android.view.accessibility.action.ARGUMENT_COLUMN_INT";
+ field public static final java.lang.String ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN = "ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN";
+ field public static final java.lang.String ACTION_ARGUMENT_HTML_ELEMENT_STRING = "ACTION_ARGUMENT_HTML_ELEMENT_STRING";
+ field public static final java.lang.String ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT = "ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT";
+ field public static final java.lang.String ACTION_ARGUMENT_PROGRESS_VALUE = "android.view.accessibility.action.ARGUMENT_PROGRESS_VALUE";
+ field public static final java.lang.String ACTION_ARGUMENT_ROW_INT = "android.view.accessibility.action.ARGUMENT_ROW_INT";
+ field public static final java.lang.String ACTION_ARGUMENT_SELECTION_END_INT = "ACTION_ARGUMENT_SELECTION_END_INT";
+ field public static final java.lang.String ACTION_ARGUMENT_SELECTION_START_INT = "ACTION_ARGUMENT_SELECTION_START_INT";
+ field public static final java.lang.String ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE = "ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE";
+ field public static final int ACTION_CLEAR_ACCESSIBILITY_FOCUS = 128; // 0x80
+ field public static final int ACTION_CLEAR_FOCUS = 2; // 0x2
+ field public static final int ACTION_CLEAR_SELECTION = 8; // 0x8
+ field public static final int ACTION_CLICK = 16; // 0x10
+ field public static final int ACTION_COLLAPSE = 524288; // 0x80000
+ field public static final int ACTION_COPY = 16384; // 0x4000
+ field public static final int ACTION_CUT = 65536; // 0x10000
+ field public static final int ACTION_DISMISS = 1048576; // 0x100000
+ field public static final int ACTION_EXPAND = 262144; // 0x40000
+ field public static final int ACTION_FOCUS = 1; // 0x1
+ field public static final int ACTION_LONG_CLICK = 32; // 0x20
+ field public static final int ACTION_NEXT_AT_MOVEMENT_GRANULARITY = 256; // 0x100
+ field public static final int ACTION_NEXT_HTML_ELEMENT = 1024; // 0x400
+ field public static final int ACTION_PASTE = 32768; // 0x8000
+ field public static final int ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY = 512; // 0x200
+ field public static final int ACTION_PREVIOUS_HTML_ELEMENT = 2048; // 0x800
+ field public static final int ACTION_SCROLL_BACKWARD = 8192; // 0x2000
+ field public static final int ACTION_SCROLL_FORWARD = 4096; // 0x1000
+ field public static final int ACTION_SELECT = 4; // 0x4
+ field public static final int ACTION_SET_SELECTION = 131072; // 0x20000
+ field public static final int ACTION_SET_TEXT = 2097152; // 0x200000
+ field public static final int FOCUS_ACCESSIBILITY = 2; // 0x2
+ field public static final int FOCUS_INPUT = 1; // 0x1
+ field public static final int MOVEMENT_GRANULARITY_CHARACTER = 1; // 0x1
+ field public static final int MOVEMENT_GRANULARITY_LINE = 4; // 0x4
+ field public static final int MOVEMENT_GRANULARITY_PAGE = 16; // 0x10
+ field public static final int MOVEMENT_GRANULARITY_PARAGRAPH = 8; // 0x8
+ field public static final int MOVEMENT_GRANULARITY_WORD = 2; // 0x2
+ }
+
+ public static class AccessibilityNodeInfoCompat.AccessibilityActionCompat {
+ ctor public AccessibilityNodeInfoCompat.AccessibilityActionCompat(int, java.lang.CharSequence);
+ method public int getId();
+ method public java.lang.CharSequence getLabel();
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_ACCESSIBILITY_FOCUS;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_CLEAR_ACCESSIBILITY_FOCUS;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_CLEAR_FOCUS;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_CLEAR_SELECTION;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_CLICK;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_COLLAPSE;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_CONTEXT_CLICK;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_COPY;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_CUT;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_DISMISS;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_EXPAND;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_FOCUS;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_LONG_CLICK;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_NEXT_AT_MOVEMENT_GRANULARITY;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_NEXT_HTML_ELEMENT;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PASTE;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PREVIOUS_HTML_ELEMENT;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SCROLL_BACKWARD;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SCROLL_DOWN;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SCROLL_FORWARD;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SCROLL_LEFT;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SCROLL_RIGHT;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SCROLL_TO_POSITION;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SCROLL_UP;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SELECT;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SET_PROGRESS;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SET_SELECTION;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SET_TEXT;
+ field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SHOW_ON_SCREEN;
+ }
+
+ public static class AccessibilityNodeInfoCompat.CollectionInfoCompat {
+ method public int getColumnCount();
+ method public int getRowCount();
+ method public int getSelectionMode();
+ method public boolean isHierarchical();
+ method public static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat obtain(int, int, boolean, int);
+ method public static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat obtain(int, int, boolean);
+ field public static final int SELECTION_MODE_MULTIPLE = 2; // 0x2
+ field public static final int SELECTION_MODE_NONE = 0; // 0x0
+ field public static final int SELECTION_MODE_SINGLE = 1; // 0x1
+ }
+
+ public static class AccessibilityNodeInfoCompat.CollectionItemInfoCompat {
+ method public int getColumnIndex();
+ method public int getColumnSpan();
+ method public int getRowIndex();
+ method public int getRowSpan();
+ method public boolean isHeading();
+ method public boolean isSelected();
+ method public static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat obtain(int, int, int, int, boolean, boolean);
+ method public static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat obtain(int, int, int, int, boolean);
+ }
+
+ public static class AccessibilityNodeInfoCompat.RangeInfoCompat {
+ method public float getCurrent();
+ method public float getMax();
+ method public float getMin();
+ method public int getType();
+ method public static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat obtain(int, float, float, float);
+ field public static final int RANGE_TYPE_FLOAT = 1; // 0x1
+ field public static final int RANGE_TYPE_INT = 0; // 0x0
+ field public static final int RANGE_TYPE_PERCENT = 2; // 0x2
+ }
+
+ public class AccessibilityNodeProviderCompat {
+ ctor public AccessibilityNodeProviderCompat();
+ ctor public AccessibilityNodeProviderCompat(java.lang.Object);
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat createAccessibilityNodeInfo(int);
+ method public java.util.List<android.support.v4.view.accessibility.AccessibilityNodeInfoCompat> findAccessibilityNodeInfosByText(java.lang.String, int);
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat findFocus(int);
+ method public java.lang.Object getProvider();
+ method public boolean performAction(int, int, android.os.Bundle);
+ field public static final int HOST_VIEW_ID = -1; // 0xffffffff
+ }
+
+ public class AccessibilityRecordCompat {
+ ctor public deprecated AccessibilityRecordCompat(java.lang.Object);
+ method public deprecated boolean equals(java.lang.Object);
+ method public deprecated int getAddedCount();
+ method public deprecated java.lang.CharSequence getBeforeText();
+ method public deprecated java.lang.CharSequence getClassName();
+ method public deprecated java.lang.CharSequence getContentDescription();
+ method public deprecated int getCurrentItemIndex();
+ method public deprecated int getFromIndex();
+ method public deprecated java.lang.Object getImpl();
+ method public deprecated int getItemCount();
+ method public deprecated int getMaxScrollX();
+ method public static int getMaxScrollX(android.view.accessibility.AccessibilityRecord);
+ method public deprecated int getMaxScrollY();
+ method public static int getMaxScrollY(android.view.accessibility.AccessibilityRecord);
+ method public deprecated android.os.Parcelable getParcelableData();
+ method public deprecated int getRemovedCount();
+ method public deprecated int getScrollX();
+ method public deprecated int getScrollY();
+ method public deprecated android.support.v4.view.accessibility.AccessibilityNodeInfoCompat getSource();
+ method public deprecated java.util.List<java.lang.CharSequence> getText();
+ method public deprecated int getToIndex();
+ method public deprecated int getWindowId();
+ method public deprecated int hashCode();
+ method public deprecated boolean isChecked();
+ method public deprecated boolean isEnabled();
+ method public deprecated boolean isFullScreen();
+ method public deprecated boolean isPassword();
+ method public deprecated boolean isScrollable();
+ method public static deprecated android.support.v4.view.accessibility.AccessibilityRecordCompat obtain(android.support.v4.view.accessibility.AccessibilityRecordCompat);
+ method public static deprecated android.support.v4.view.accessibility.AccessibilityRecordCompat obtain();
+ method public deprecated void recycle();
+ method public deprecated void setAddedCount(int);
+ method public deprecated void setBeforeText(java.lang.CharSequence);
+ method public deprecated void setChecked(boolean);
+ method public deprecated void setClassName(java.lang.CharSequence);
+ method public deprecated void setContentDescription(java.lang.CharSequence);
+ method public deprecated void setCurrentItemIndex(int);
+ method public deprecated void setEnabled(boolean);
+ method public deprecated void setFromIndex(int);
+ method public deprecated void setFullScreen(boolean);
+ method public deprecated void setItemCount(int);
+ method public deprecated void setMaxScrollX(int);
+ method public static void setMaxScrollX(android.view.accessibility.AccessibilityRecord, int);
+ method public deprecated void setMaxScrollY(int);
+ method public static void setMaxScrollY(android.view.accessibility.AccessibilityRecord, int);
+ method public deprecated void setParcelableData(android.os.Parcelable);
+ method public deprecated void setPassword(boolean);
+ method public deprecated void setRemovedCount(int);
+ method public deprecated void setScrollX(int);
+ method public deprecated void setScrollY(int);
+ method public deprecated void setScrollable(boolean);
+ method public deprecated void setSource(android.view.View);
+ method public deprecated void setSource(android.view.View, int);
+ method public static void setSource(android.view.accessibility.AccessibilityRecord, android.view.View, int);
+ method public deprecated void setToIndex(int);
+ }
+
+ public class AccessibilityWindowInfoCompat {
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat getAnchor();
+ method public void getBoundsInScreen(android.graphics.Rect);
+ method public android.support.v4.view.accessibility.AccessibilityWindowInfoCompat getChild(int);
+ method public int getChildCount();
+ method public int getId();
+ method public int getLayer();
+ method public android.support.v4.view.accessibility.AccessibilityWindowInfoCompat getParent();
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat getRoot();
+ method public java.lang.CharSequence getTitle();
+ method public int getType();
+ method public boolean isAccessibilityFocused();
+ method public boolean isActive();
+ method public boolean isFocused();
+ method public static android.support.v4.view.accessibility.AccessibilityWindowInfoCompat obtain();
+ method public static android.support.v4.view.accessibility.AccessibilityWindowInfoCompat obtain(android.support.v4.view.accessibility.AccessibilityWindowInfoCompat);
+ method public void recycle();
+ field public static final int TYPE_ACCESSIBILITY_OVERLAY = 4; // 0x4
+ field public static final int TYPE_APPLICATION = 1; // 0x1
+ field public static final int TYPE_INPUT_METHOD = 2; // 0x2
+ field public static final int TYPE_SPLIT_SCREEN_DIVIDER = 5; // 0x5
+ field public static final int TYPE_SYSTEM = 3; // 0x3
+ }
+
+}
+
+package android.support.v4.view.animation {
+
+ public final class PathInterpolatorCompat {
+ method public static android.view.animation.Interpolator create(android.graphics.Path);
+ method public static android.view.animation.Interpolator create(float, float);
+ method public static android.view.animation.Interpolator create(float, float, float, float);
+ }
+
+}
+
+package android.support.v4.widget {
+
+ public final class CompoundButtonCompat {
+ method public static android.graphics.drawable.Drawable getButtonDrawable(android.widget.CompoundButton);
+ method public static android.content.res.ColorStateList getButtonTintList(android.widget.CompoundButton);
+ method public static android.graphics.PorterDuff.Mode getButtonTintMode(android.widget.CompoundButton);
+ method public static void setButtonTintList(android.widget.CompoundButton, android.content.res.ColorStateList);
+ method public static void setButtonTintMode(android.widget.CompoundButton, android.graphics.PorterDuff.Mode);
+ }
+
+ public final class EdgeEffectCompat {
+ ctor public deprecated EdgeEffectCompat(android.content.Context);
+ method public deprecated boolean draw(android.graphics.Canvas);
+ method public deprecated void finish();
+ method public deprecated boolean isFinished();
+ method public deprecated boolean onAbsorb(int);
+ method public deprecated boolean onPull(float);
+ method public deprecated boolean onPull(float, float);
+ method public static void onPull(android.widget.EdgeEffect, float, float);
+ method public deprecated boolean onRelease();
+ method public deprecated void setSize(int, int);
+ }
+
+ public class ImageViewCompat {
+ method public static android.content.res.ColorStateList getImageTintList(android.widget.ImageView);
+ method public static android.graphics.PorterDuff.Mode getImageTintMode(android.widget.ImageView);
+ method public static void setImageTintList(android.widget.ImageView, android.content.res.ColorStateList);
+ method public static void setImageTintMode(android.widget.ImageView, android.graphics.PorterDuff.Mode);
+ }
+
+ public final class ListPopupWindowCompat {
+ method public static deprecated android.view.View.OnTouchListener createDragToOpenListener(java.lang.Object, android.view.View);
+ method public static android.view.View.OnTouchListener createDragToOpenListener(android.widget.ListPopupWindow, android.view.View);
+ }
+
+ public final class ListViewCompat {
+ method public static boolean canScrollList(android.widget.ListView, int);
+ method public static void scrollListBy(android.widget.ListView, int);
+ }
+
+ public final class PopupMenuCompat {
+ method public static android.view.View.OnTouchListener getDragToOpenListener(java.lang.Object);
+ }
+
+ public final class PopupWindowCompat {
+ method public static boolean getOverlapAnchor(android.widget.PopupWindow);
+ method public static int getWindowLayoutType(android.widget.PopupWindow);
+ method public static void setOverlapAnchor(android.widget.PopupWindow, boolean);
+ method public static void setWindowLayoutType(android.widget.PopupWindow, int);
+ method public static void showAsDropDown(android.widget.PopupWindow, android.view.View, int, int, int);
+ }
+
+ public final deprecated class ScrollerCompat {
+ method public deprecated void abortAnimation();
+ method public deprecated boolean computeScrollOffset();
+ method public static deprecated android.support.v4.widget.ScrollerCompat create(android.content.Context);
+ method public static deprecated android.support.v4.widget.ScrollerCompat create(android.content.Context, android.view.animation.Interpolator);
+ method public deprecated void fling(int, int, int, int, int, int, int, int);
+ method public deprecated void fling(int, int, int, int, int, int, int, int, int, int);
+ method public deprecated float getCurrVelocity();
+ method public deprecated int getCurrX();
+ method public deprecated int getCurrY();
+ method public deprecated int getFinalX();
+ method public deprecated int getFinalY();
+ method public deprecated boolean isFinished();
+ method public deprecated boolean isOverScrolled();
+ method public deprecated void notifyHorizontalEdgeReached(int, int, int);
+ method public deprecated void notifyVerticalEdgeReached(int, int, int);
+ method public deprecated boolean springBack(int, int, int, int, int, int);
+ method public deprecated void startScroll(int, int, int, int);
+ method public deprecated void startScroll(int, int, int, int, int);
+ }
+
+ public final class TextViewCompat {
+ method public static int getAutoSizeMaxTextSize(android.widget.TextView);
+ method public static int getAutoSizeMinTextSize(android.widget.TextView);
+ method public static int getAutoSizeStepGranularity(android.widget.TextView);
+ method public static int[] getAutoSizeTextAvailableSizes(android.widget.TextView);
+ method public static int getAutoSizeTextType(android.widget.TextView);
+ method public static android.graphics.drawable.Drawable[] getCompoundDrawablesRelative(android.widget.TextView);
+ method public static int getMaxLines(android.widget.TextView);
+ method public static int getMinLines(android.widget.TextView);
+ method public static void setAutoSizeTextTypeUniformWithConfiguration(android.widget.TextView, int, int, int, int) throws java.lang.IllegalArgumentException;
+ method public static void setAutoSizeTextTypeUniformWithPresetSizes(android.widget.TextView, int[], int) throws java.lang.IllegalArgumentException;
+ method public static void setAutoSizeTextTypeWithDefaults(android.widget.TextView, int);
+ method public static void setCompoundDrawablesRelative(android.widget.TextView, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable);
+ method public static void setCompoundDrawablesRelativeWithIntrinsicBounds(android.widget.TextView, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable);
+ method public static void setCompoundDrawablesRelativeWithIntrinsicBounds(android.widget.TextView, int, int, int, int);
+ method public static void setTextAppearance(android.widget.TextView, int);
+ field public static final int AUTO_SIZE_TEXT_TYPE_NONE = 0; // 0x0
+ field public static final int AUTO_SIZE_TEXT_TYPE_UNIFORM = 1; // 0x1
+ }
+
+ public abstract interface TintableCompoundButton {
+ method public abstract android.content.res.ColorStateList getSupportButtonTintList();
+ method public abstract android.graphics.PorterDuff.Mode getSupportButtonTintMode();
+ method public abstract void setSupportButtonTintList(android.content.res.ColorStateList);
+ method public abstract void setSupportButtonTintMode(android.graphics.PorterDuff.Mode);
+ }
+
+}
+
diff --git a/compat/api/current.txt b/compat/api/current.txt
index c4e7fd3..96a94cb 100644
--- a/compat/api/current.txt
+++ b/compat/api/current.txt
@@ -28,11 +28,12 @@
method public static void finishAffinity(android.app.Activity);
method public static void finishAfterTransition(android.app.Activity);
method public static android.net.Uri getReferrer(android.app.Activity);
- method public static boolean invalidateOptionsMenu(android.app.Activity);
+ method public static deprecated boolean invalidateOptionsMenu(android.app.Activity);
method public static void postponeEnterTransition(android.app.Activity);
method public static void requestPermissions(android.app.Activity, java.lang.String[], int);
method public static void setEnterSharedElementCallback(android.app.Activity, android.support.v4.app.SharedElementCallback);
method public static void setExitSharedElementCallback(android.app.Activity, android.support.v4.app.SharedElementCallback);
+ method public static void setPermissionCompatDelegate(android.support.v4.app.ActivityCompat.PermissionCompatDelegate);
method public static boolean shouldShowRequestPermissionRationale(android.app.Activity, java.lang.String);
method public static void startActivityForResult(android.app.Activity, android.content.Intent, int, android.os.Bundle);
method public static void startIntentSenderForResult(android.app.Activity, android.content.IntentSender, int, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException;
@@ -43,6 +44,11 @@
method public abstract void onRequestPermissionsResult(int, java.lang.String[], int[]);
}
+ public static abstract interface ActivityCompat.PermissionCompatDelegate {
+ method public abstract boolean onActivityResult(android.app.Activity, int, int, android.content.Intent);
+ method public abstract boolean requestPermissions(android.app.Activity, java.lang.String[], int);
+ }
+
public final class ActivityManagerCompat {
method public static boolean isLowRamDevice(android.app.ActivityManager);
}
@@ -641,12 +647,12 @@
field public static final java.lang.String EXTRA_START_PLAYBACK = "android.intent.extra.START_PLAYBACK";
}
- public final class SharedPreferencesCompat {
+ public final deprecated class SharedPreferencesCompat {
}
- public static final class SharedPreferencesCompat.EditorCompat {
- method public void apply(android.content.SharedPreferences.Editor);
- method public static android.support.v4.content.SharedPreferencesCompat.EditorCompat getInstance();
+ public static final deprecated class SharedPreferencesCompat.EditorCompat {
+ method public deprecated void apply(android.content.SharedPreferences.Editor);
+ method public static deprecated android.support.v4.content.SharedPreferencesCompat.EditorCompat getInstance();
}
}
@@ -700,6 +706,13 @@
method public static android.graphics.drawable.Drawable getDrawable(android.content.res.Resources, int, android.content.res.Resources.Theme) throws android.content.res.Resources.NotFoundException;
method public static android.graphics.drawable.Drawable getDrawableForDensity(android.content.res.Resources, int, int, android.content.res.Resources.Theme) throws android.content.res.Resources.NotFoundException;
method public static android.graphics.Typeface getFont(android.content.Context, int) throws android.content.res.Resources.NotFoundException;
+ method public static void getFont(android.content.Context, int, android.support.v4.content.res.ResourcesCompat.FontCallback, android.os.Handler) throws android.content.res.Resources.NotFoundException;
+ }
+
+ public static abstract class ResourcesCompat.FontCallback {
+ ctor public ResourcesCompat.FontCallback();
+ method public abstract void onFontRetrievalFailed(int);
+ method public abstract void onFontRetrieved(android.graphics.Typeface);
}
}
@@ -962,6 +975,7 @@
field public static final int FAIL_REASON_FONT_UNAVAILABLE = 2; // 0x2
field public static final int FAIL_REASON_MALFORMED_QUERY = 3; // 0x3
field public static final int FAIL_REASON_PROVIDER_NOT_FOUND = -1; // 0xffffffff
+ field public static final int FAIL_REASON_SECURITY_VIOLATION = -4; // 0xfffffffc
field public static final int FAIL_REASON_WRONG_CERTIFICATES = -2; // 0xfffffffe
}
diff --git a/compat/build.gradle b/compat/build.gradle
index 66ae6f3..1e5d847 100644
--- a/compat/build.gradle
+++ b/compat/build.gradle
@@ -4,6 +4,7 @@
api project(':support-annotations')
api (libs.arch_lifecycle_runtime) {
exclude module: 'support-annotations'
+ transitive = true
}
androidTestImplementation libs.test_runner, { exclude module: 'support-annotations' }
@@ -19,8 +20,7 @@
}
sourceSets {
- main.java.srcDirs = ['java']
- main.aidl.srcDirs = ['java']
+ main.aidl.srcDirs = ['src/main/java']
main.res.srcDirs 'res', 'res-public'
}
diff --git a/compat/java/android/support/v4/content/res/ResourcesCompat.java b/compat/java/android/support/v4/content/res/ResourcesCompat.java
deleted file mode 100644
index 43d78d0..0000000
--- a/compat/java/android/support/v4/content/res/ResourcesCompat.java
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.v4.content.res;
-
-import static android.os.Build.VERSION.SDK_INT;
-import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-
-import android.content.Context;
-import android.content.res.ColorStateList;
-import android.content.res.Resources;
-import android.content.res.Resources.NotFoundException;
-import android.content.res.Resources.Theme;
-import android.content.res.XmlResourceParser;
-import android.graphics.Typeface;
-import android.graphics.drawable.Drawable;
-import android.support.annotation.ColorInt;
-import android.support.annotation.ColorRes;
-import android.support.annotation.DrawableRes;
-import android.support.annotation.FontRes;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.RestrictTo;
-import android.support.v4.content.res.FontResourcesParserCompat.FamilyResourceEntry;
-import android.support.v4.graphics.TypefaceCompat;
-import android.util.Log;
-import android.util.TypedValue;
-import android.widget.TextView;
-
-import org.xmlpull.v1.XmlPullParserException;
-
-import java.io.IOException;
-
-/**
- * Helper for accessing features in {@link android.content.res.Resources}.
- */
-public final class ResourcesCompat {
- private static final String TAG = "ResourcesCompat";
-
- /**
- * Return a drawable object associated with a particular resource ID and
- * styled for the specified theme. Various types of objects will be
- * returned depending on the underlying resource -- for example, a solid
- * color, PNG image, scalable image, etc.
- * <p>
- * Prior to API level 21, the theme will not be applied and this method
- * simply calls through to {@link Resources#getDrawable(int)}.
- *
- * @param id The desired resource identifier, as generated by the aapt
- * tool. This integer encodes the package, type, and resource
- * entry. The value 0 is an invalid identifier.
- * @param theme The theme used to style the drawable attributes, may be
- * {@code null}.
- * @return Drawable An object that can be used to draw this resource.
- * @throws NotFoundException Throws NotFoundException if the given ID does
- * not exist.
- */
- @Nullable
- @SuppressWarnings("deprecation")
- public static Drawable getDrawable(@NonNull Resources res, @DrawableRes int id,
- @Nullable Theme theme) throws NotFoundException {
- if (SDK_INT >= 21) {
- return res.getDrawable(id, theme);
- } else {
- return res.getDrawable(id);
- }
- }
-
-
- /**
- * Return a drawable object associated with a particular resource ID for
- * the given screen density in DPI and styled for the specified theme.
- * <p>
- * Prior to API level 15, the theme and density will not be applied and
- * this method simply calls through to {@link Resources#getDrawable(int)}.
- * <p>
- * Prior to API level 21, the theme will not be applied and this method
- * calls through to Resources#getDrawableForDensity(int, int).
- *
- * @param id The desired resource identifier, as generated by the aapt
- * tool. This integer encodes the package, type, and resource
- * entry. The value 0 is an invalid identifier.
- * @param density The desired screen density indicated by the resource as
- * found in {@link android.util.DisplayMetrics}.
- * @param theme The theme used to style the drawable attributes, may be
- * {@code null}.
- * @return Drawable An object that can be used to draw this resource.
- * @throws NotFoundException Throws NotFoundException if the given ID does
- * not exist.
- */
- @Nullable
- @SuppressWarnings("deprecation")
- public static Drawable getDrawableForDensity(@NonNull Resources res, @DrawableRes int id,
- int density, @Nullable Theme theme) throws NotFoundException {
- if (SDK_INT >= 21) {
- return res.getDrawableForDensity(id, density, theme);
- } else if (SDK_INT >= 15) {
- return res.getDrawableForDensity(id, density);
- } else {
- return res.getDrawable(id);
- }
- }
-
- /**
- * Returns a themed color integer associated with a particular resource ID.
- * If the resource holds a complex {@link ColorStateList}, then the default
- * color from the set is returned.
- * <p>
- * Prior to API level 23, the theme will not be applied and this method
- * calls through to {@link Resources#getColor(int)}.
- *
- * @param id The desired resource identifier, as generated by the aapt
- * tool. This integer encodes the package, type, and resource
- * entry. The value 0 is an invalid identifier.
- * @param theme The theme used to style the color attributes, may be
- * {@code null}.
- * @return A single color value in the form {@code 0xAARRGGBB}.
- * @throws NotFoundException Throws NotFoundException if the given ID does
- * not exist.
- */
- @ColorInt
- @SuppressWarnings("deprecation")
- public static int getColor(@NonNull Resources res, @ColorRes int id, @Nullable Theme theme)
- throws NotFoundException {
- if (SDK_INT >= 23) {
- return res.getColor(id, theme);
- } else {
- return res.getColor(id);
- }
- }
-
- /**
- * Returns a themed color state list associated with a particular resource
- * ID. The resource may contain either a single raw color value or a
- * complex {@link ColorStateList} holding multiple possible colors.
- * <p>
- * Prior to API level 23, the theme will not be applied and this method
- * calls through to {@link Resources#getColorStateList(int)}.
- *
- * @param id The desired resource identifier of a {@link ColorStateList},
- * as generated by the aapt tool. This integer encodes the
- * package, type, and resource entry. The value 0 is an invalid
- * identifier.
- * @param theme The theme used to style the color attributes, may be
- * {@code null}.
- * @return A themed ColorStateList object containing either a single solid
- * color or multiple colors that can be selected based on a state.
- * @throws NotFoundException Throws NotFoundException if the given ID does
- * not exist.
- */
- @Nullable
- @SuppressWarnings("deprecation")
- public static ColorStateList getColorStateList(@NonNull Resources res, @ColorRes int id,
- @Nullable Theme theme) throws NotFoundException {
- if (SDK_INT >= 23) {
- return res.getColorStateList(id, theme);
- } else {
- return res.getColorStateList(id);
- }
- }
-
- /**
- * Returns a font Typeface associated with a particular resource ID.
- * <p>
- * Prior to API level 23, font resources with more than one font in a family will only load the
- * first font in that family.
- *
- * @param context A context to retrieve the Resources from.
- * @param id The desired resource identifier of a {@link Typeface},
- * as generated by the aapt tool. This integer encodes the
- * package, type, and resource entry. The value 0 is an invalid
- * identifier.
- * @return A font Typeface object.
- * @throws NotFoundException Throws NotFoundException if the given ID does
- * not exist.
- */
- @Nullable
- public static Typeface getFont(@NonNull Context context, @FontRes int id)
- throws NotFoundException {
- if (context.isRestricted()) {
- return null;
- }
- return loadFont(context, id, new TypedValue(), Typeface.NORMAL, null);
- }
-
- /** @hide */
- @RestrictTo(LIBRARY_GROUP)
- public static Typeface getFont(@NonNull Context context, @FontRes int id, TypedValue value,
- int style, @Nullable TextView targetView) throws NotFoundException {
- if (context.isRestricted()) {
- return null;
- }
- return loadFont(context, id, value, style, targetView);
- }
-
- private static Typeface loadFont(@NonNull Context context, int id, TypedValue value,
- int style, @Nullable TextView targetView) {
- final Resources resources = context.getResources();
- resources.getValue(id, value, true);
- Typeface typeface = loadFont(context, resources, value, id, style, targetView);
- if (typeface != null) {
- return typeface;
- }
- throw new NotFoundException("Font resource ID #0x"
- + Integer.toHexString(id));
- }
-
- private static Typeface loadFont(
- @NonNull Context context, Resources wrapper, TypedValue value, int id, int style,
- @Nullable TextView targetView) {
- if (value.string == null) {
- throw new NotFoundException("Resource \"" + wrapper.getResourceName(id) + "\" ("
- + Integer.toHexString(id) + ") is not a Font: " + value);
- }
-
- final String file = value.string.toString();
- if (!file.startsWith("res/")) {
- // Early exit if the specified string is unlikely to the resource path.
- return null;
- }
-
- Typeface cached = TypefaceCompat.findFromCache(wrapper, id, style);
- if (cached != null) {
- return cached;
- }
-
- try {
- if (file.toLowerCase().endsWith(".xml")) {
- final XmlResourceParser rp = wrapper.getXml(id);
- final FamilyResourceEntry familyEntry =
- FontResourcesParserCompat.parse(rp, wrapper);
- if (familyEntry == null) {
- Log.e(TAG, "Failed to find font-family tag");
- return null;
- }
- return TypefaceCompat.createFromResourcesFamilyXml(
- context, familyEntry, wrapper, id, style, targetView);
- }
- return TypefaceCompat.createFromResourcesFontFile(context, wrapper, id, file, style);
- } catch (XmlPullParserException e) {
- Log.e(TAG, "Failed to parse xml resource " + file, e);
- } catch (IOException e) {
- Log.e(TAG, "Failed to read xml resource " + file, e);
- }
- return null;
- }
-
- private ResourcesCompat() {}
-}
diff --git a/compat/res/values/attrs.xml b/compat/res/values/attrs.xml
index 1833794..04d7690 100644
--- a/compat/res/values/attrs.xml
+++ b/compat/res/values/attrs.xml
@@ -32,7 +32,12 @@
documentation for these values. -->
<attr name="fontProviderCerts" format="reference" />
<!-- The strategy to be used when fetching font data from a font provider in XML layouts.
- -->
+ This attribute is ignored when the resource is loaded from code, as it is equivalent to the
+ choice of API between {@link
+ android.support.v4.content.res.ResourcesCompat#getFont(Context, int)} (blocking) and
+ {@link
+ android.support.v4.content.res.ResourcesCompat#getFont(Context, int, FontCallback, Handler)}
+ (async). -->
<attr name="fontProviderFetchStrategy">
<!-- The blocking font fetch works as follows.
First, check the local cache, then if the requested font is not cached, request the
@@ -74,5 +79,10 @@
common values are 400 for regular weight and 700 for bold weight. If unspecified, the value
in the font's header tables will be used. -->
<attr name="fontWeight" format="integer" />
+
+ <!-- References to the framework attrs -->
+ <attr name="android:fontStyle" />
+ <attr name="android:font" />
+ <attr name="android:fontWeight" />
</declare-styleable>
</resources>
diff --git a/compat/java/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompat.java b/compat/src/main/java/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompat.java
similarity index 97%
rename from compat/java/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompat.java
rename to compat/src/main/java/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompat.java
index 3905ca5..0dcd902 100644
--- a/compat/java/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompat.java
+++ b/compat/src/main/java/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompat.java
@@ -20,6 +20,8 @@
import android.accessibilityservice.AccessibilityServiceInfo;
import android.content.pm.PackageManager;
import android.os.Build;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.view.View;
/**
@@ -188,8 +190,9 @@
* @param packageManager The current package manager
* @return The localized description.
*/
+ @Nullable
public static String loadDescription(
- AccessibilityServiceInfo info, PackageManager packageManager) {
+ @NonNull AccessibilityServiceInfo info, @NonNull PackageManager packageManager) {
if (Build.VERSION.SDK_INT >= 16) {
return info.loadDescription(packageManager);
} else {
@@ -206,6 +209,7 @@
* @param feedbackType The feedback type.
* @return The string representation.
*/
+ @NonNull
public static String feedbackTypeToString(int feedbackType) {
StringBuilder builder = new StringBuilder();
builder.append("[");
@@ -245,6 +249,7 @@
* @param flag The flag.
* @return The string representation.
*/
+ @Nullable
public static String flagToString(int flag) {
switch (flag) {
case AccessibilityServiceInfo.DEFAULT:
@@ -276,7 +281,7 @@
* @see #CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY
* @see #CAPABILITY_CAN_FILTER_KEY_EVENTS
*/
- public static int getCapabilities(AccessibilityServiceInfo info) {
+ public static int getCapabilities(@NonNull AccessibilityServiceInfo info) {
if (Build.VERSION.SDK_INT >= 18) {
return info.getCapabilities();
} else {
@@ -296,6 +301,7 @@
* @param capability The capability.
* @return The string representation.
*/
+ @NonNull
public static String capabilityToString(int capability) {
switch (capability) {
case CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT:
diff --git a/compat/java/android/support/v4/accessibilityservice/package.html b/compat/src/main/java/android/support/v4/accessibilityservice/package.html
similarity index 100%
rename from compat/java/android/support/v4/accessibilityservice/package.html
rename to compat/src/main/java/android/support/v4/accessibilityservice/package.html
diff --git a/compat/java/android/support/v4/app/ActivityCompat.java b/compat/src/main/java/android/support/v4/app/ActivityCompat.java
similarity index 81%
rename from compat/java/android/support/v4/app/ActivityCompat.java
rename to compat/src/main/java/android/support/v4/app/ActivityCompat.java
index f260508..5833481 100644
--- a/compat/java/android/support/v4/app/ActivityCompat.java
+++ b/compat/src/main/java/android/support/v4/app/ActivityCompat.java
@@ -74,6 +74,61 @@
}
/**
+ * Customizable delegate that allows delegating permission compatibility methods to a custom
+ * implementation.
+ *
+ * <p>
+ * To delegate permission compatibility methods to a custom class, implement this interface,
+ * and call {@code ActivityCompat.setPermissionCompatDelegate(delegate);}. All future calls
+ * to the permission compatibility methods in this class will first check whether the
+ * delegate can handle the method call, and invoke the corresponding method if it can.
+ * </p>
+ */
+ public interface PermissionCompatDelegate {
+
+ /**
+ * Determines whether the delegate should handle
+ * {@link ActivityCompat#requestPermissions(Activity, String[], int)}, and request
+ * permissions if applicable. If this method returns true, it means that permission
+ * request is successfully handled by the delegate, and platform should not perform any
+ * further requests for permission.
+ *
+ * @param activity The target activity.
+ * @param permissions The requested permissions. Must me non-null and not empty.
+ * @param requestCode Application specific request code to match with a result reported to
+ * {@link
+ * OnRequestPermissionsResultCallback#onRequestPermissionsResult(int, String[], int[])}.
+ * Should be >= 0.
+ *
+ * @return Whether the delegate has handled the permission request.
+ * @see ActivityCompat#requestPermissions(Activity, String[], int)
+ */
+ boolean requestPermissions(@NonNull Activity activity,
+ @NonNull String[] permissions, @IntRange(from = 0) int requestCode);
+
+ /**
+ * Determines whether the delegate should handle the permission request as part of
+ * {@code FragmentActivity#onActivityResult(int, int, Intent)}. If this method returns true,
+ * it means that activity result is successfully handled by the delegate, and no further
+ * action is needed on this activity result.
+ *
+ * @param activity The target Activity.
+ * @param requestCode The integer request code originally supplied to
+ * {@code startActivityForResult()}, allowing you to identify who this
+ * result came from.
+ * @param resultCode The integer result code returned by the child activity
+ * through its {@code }setResult()}.
+ * @param data An Intent, which can return result data to the caller
+ * (various data can be attached to Intent "extras").
+ *
+ * @return Whether the delegate has handled the activity result.
+ * @see ActivityCompat#requestPermissions(Activity, String[], int)
+ */
+ boolean onActivityResult(@NonNull Activity activity,
+ @IntRange(from = 0) int requestCode, int resultCode, @Nullable Intent data);
+ }
+
+ /**
* @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
@@ -81,6 +136,8 @@
void validateRequestPermissionsRequestCode(int requestCode);
}
+ private static PermissionCompatDelegate sDelegate;
+
/**
* This class should not be instantiated, but the constructor must be
* visible for the class to be extended (as in support-v13).
@@ -90,6 +147,25 @@
}
/**
+ * Sets the permission delegate for {@code ActivityCompat}. Replaces the previously set
+ * delegate.
+ *
+ * @param delegate The delegate to be set. {@code null} to clear the set delegate.
+ */
+ public static void setPermissionCompatDelegate(
+ @Nullable PermissionCompatDelegate delegate) {
+ sDelegate = delegate;
+ }
+
+ /**
+ * @hide
+ */
+ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+ public static PermissionCompatDelegate getPermissionCompatDelegate() {
+ return sDelegate;
+ }
+
+ /**
* Invalidate the activity's options menu, if able.
*
* <p>Before API level 11 (Android 3.0/Honeycomb) the lifecycle of the
@@ -120,7 +196,9 @@
*
* @param activity Invalidate the options menu of this activity
* @return true if this operation was supported and it completed; false if it was not available.
+ * @deprecated Use {@link Activity#invalidateOptionsMenu()} directly.
*/
+ @Deprecated
public static boolean invalidateOptionsMenu(Activity activity) {
activity.invalidateOptionsMenu();
return true;
@@ -146,8 +224,8 @@
* supplied here; there are no supported definitions for
* building it manually.
*/
- public static void startActivityForResult(Activity activity, Intent intent, int requestCode,
- @Nullable Bundle options) {
+ public static void startActivityForResult(@NonNull Activity activity, @NonNull Intent intent,
+ int requestCode, @Nullable Bundle options) {
if (Build.VERSION.SDK_INT >= 16) {
activity.startActivityForResult(intent, requestCode, options);
} else {
@@ -181,9 +259,10 @@
* supplied here; there are no supported definitions for
* building it manually.
*/
- public static void startIntentSenderForResult(Activity activity, IntentSender intent,
- int requestCode, Intent fillInIntent, int flagsMask, int flagsValues,
- int extraFlags, @Nullable Bundle options) throws IntentSender.SendIntentException {
+ public static void startIntentSenderForResult(@NonNull Activity activity,
+ @NonNull IntentSender intent, int requestCode, @Nullable Intent fillInIntent,
+ int flagsMask, int flagsValues, int extraFlags, @Nullable Bundle options)
+ throws IntentSender.SendIntentException {
if (Build.VERSION.SDK_INT >= 16) {
activity.startIntentSenderForResult(intent, requestCode, fillInIntent, flagsMask,
flagsValues, extraFlags, options);
@@ -200,7 +279,7 @@
* <p>On Android 4.1+ calling this method will call through to the native version of this
* method. For other platforms {@link Activity#finish()} will be called instead.</p>
*/
- public static void finishAffinity(Activity activity) {
+ public static void finishAffinity(@NonNull Activity activity) {
if (Build.VERSION.SDK_INT >= 16) {
activity.finishAffinity();
} else {
@@ -217,7 +296,7 @@
* <p>On Android 4.4 or lower, this method only finishes the Activity with no
* special exit transition.</p>
*/
- public static void finishAfterTransition(Activity activity) {
+ public static void finishAfterTransition(@NonNull Activity activity) {
if (Build.VERSION.SDK_INT >= 21) {
activity.finishAfterTransition();
} else {
@@ -242,7 +321,7 @@
* referrer information, applications can spoof it.</p>
*/
@Nullable
- public static Uri getReferrer(Activity activity) {
+ public static Uri getReferrer(@NonNull Activity activity) {
if (Build.VERSION.SDK_INT >= 22) {
return activity.getReferrer();
}
@@ -266,8 +345,8 @@
*
* @param callback Used to manipulate shared element transitions on the launched Activity.
*/
- public static void setEnterSharedElementCallback(Activity activity,
- SharedElementCallback callback) {
+ public static void setEnterSharedElementCallback(@NonNull Activity activity,
+ @Nullable SharedElementCallback callback) {
if (Build.VERSION.SDK_INT >= 23) {
android.app.SharedElementCallback frameworkCallback = callback != null
? new SharedElementCallback23Impl(callback)
@@ -290,8 +369,8 @@
*
* @param callback Used to manipulate shared element transitions on the launching Activity.
*/
- public static void setExitSharedElementCallback(Activity activity,
- SharedElementCallback callback) {
+ public static void setExitSharedElementCallback(@NonNull Activity activity,
+ @Nullable SharedElementCallback callback) {
if (Build.VERSION.SDK_INT >= 23) {
android.app.SharedElementCallback frameworkCallback = callback != null
? new SharedElementCallback23Impl(callback)
@@ -305,13 +384,13 @@
}
}
- public static void postponeEnterTransition(Activity activity) {
+ public static void postponeEnterTransition(@NonNull Activity activity) {
if (Build.VERSION.SDK_INT >= 21) {
activity.postponeEnterTransition();
}
}
- public static void startPostponedEnterTransition(Activity activity) {
+ public static void startPostponedEnterTransition(@NonNull Activity activity) {
if (Build.VERSION.SDK_INT >= 21) {
activity.startPostponedEnterTransition();
}
@@ -386,6 +465,12 @@
*/
public static void requestPermissions(final @NonNull Activity activity,
final @NonNull String[] permissions, final @IntRange(from = 0) int requestCode) {
+ if (sDelegate != null
+ && sDelegate.requestPermissions(activity, permissions, requestCode)) {
+ // Delegate has handled the permission request.
+ return;
+ }
+
if (Build.VERSION.SDK_INT >= 23) {
if (activity instanceof RequestPermissionsRequestCodeValidator) {
((RequestPermissionsRequestCodeValidator) activity)
diff --git a/compat/java/android/support/v4/app/ActivityManagerCompat.java b/compat/src/main/java/android/support/v4/app/ActivityManagerCompat.java
similarity index 100%
rename from compat/java/android/support/v4/app/ActivityManagerCompat.java
rename to compat/src/main/java/android/support/v4/app/ActivityManagerCompat.java
diff --git a/compat/java/android/support/v4/app/ActivityOptionsCompat.java b/compat/src/main/java/android/support/v4/app/ActivityOptionsCompat.java
similarity index 95%
rename from compat/java/android/support/v4/app/ActivityOptionsCompat.java
rename to compat/src/main/java/android/support/v4/app/ActivityOptionsCompat.java
index 7b5916f..6676805 100644
--- a/compat/java/android/support/v4/app/ActivityOptionsCompat.java
+++ b/compat/src/main/java/android/support/v4/app/ActivityOptionsCompat.java
@@ -24,6 +24,7 @@
import android.graphics.Rect;
import android.os.Build;
import android.os.Bundle;
+import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
import android.support.v4.util.Pair;
@@ -60,7 +61,8 @@
* @return Returns a new ActivityOptions object that you can use to supply
* these options as the options Bundle when starting an activity.
*/
- public static ActivityOptionsCompat makeCustomAnimation(Context context,
+ @NonNull
+ public static ActivityOptionsCompat makeCustomAnimation(@NonNull Context context,
int enterResId, int exitResId) {
if (Build.VERSION.SDK_INT >= 16) {
return createImpl(ActivityOptions.makeCustomAnimation(context, enterResId, exitResId));
@@ -88,7 +90,8 @@
* @return Returns a new ActivityOptions object that you can use to supply
* these options as the options Bundle when starting an activity.
*/
- public static ActivityOptionsCompat makeScaleUpAnimation(View source,
+ @NonNull
+ public static ActivityOptionsCompat makeScaleUpAnimation(@NonNull View source,
int startX, int startY, int startWidth, int startHeight) {
if (Build.VERSION.SDK_INT >= 16) {
return createImpl(ActivityOptions.makeScaleUpAnimation(
@@ -111,7 +114,8 @@
* @return Returns a new ActivityOptions object that you can use to
* supply these options as the options Bundle when starting an activity.
*/
- public static ActivityOptionsCompat makeClipRevealAnimation(View source,
+ @NonNull
+ public static ActivityOptionsCompat makeClipRevealAnimation(@NonNull View source,
int startX, int startY, int width, int height) {
if (Build.VERSION.SDK_INT >= 23) {
return createImpl(ActivityOptions.makeClipRevealAnimation(
@@ -139,8 +143,9 @@
* @return Returns a new ActivityOptions object that you can use to supply
* these options as the options Bundle when starting an activity.
*/
- public static ActivityOptionsCompat makeThumbnailScaleUpAnimation(View source,
- Bitmap thumbnail, int startX, int startY) {
+ @NonNull
+ public static ActivityOptionsCompat makeThumbnailScaleUpAnimation(@NonNull View source,
+ @NonNull Bitmap thumbnail, int startX, int startY) {
if (Build.VERSION.SDK_INT >= 16) {
return createImpl(ActivityOptions.makeThumbnailScaleUpAnimation(
source, thumbnail, startX, startY));
@@ -166,8 +171,9 @@
* @return Returns a new ActivityOptions object that you can use to
* supply these options as the options Bundle when starting an activity.
*/
- public static ActivityOptionsCompat makeSceneTransitionAnimation(Activity activity,
- View sharedElement, String sharedElementName) {
+ @NonNull
+ public static ActivityOptionsCompat makeSceneTransitionAnimation(@NonNull Activity activity,
+ @NonNull View sharedElement, @NonNull String sharedElementName) {
if (Build.VERSION.SDK_INT >= 21) {
return createImpl(ActivityOptions.makeSceneTransitionAnimation(
activity, sharedElement, sharedElementName));
@@ -192,8 +198,9 @@
* @return Returns a new ActivityOptions object that you can use to
* supply these options as the options Bundle when starting an activity.
*/
+ @NonNull
@SuppressWarnings("unchecked")
- public static ActivityOptionsCompat makeSceneTransitionAnimation(Activity activity,
+ public static ActivityOptionsCompat makeSceneTransitionAnimation(@NonNull Activity activity,
Pair<View, String>... sharedElements) {
if (Build.VERSION.SDK_INT >= 21) {
android.util.Pair<View, String>[] pairs = null;
@@ -219,6 +226,7 @@
* {@link android.R.attr#launchMode launchMode} values of
* <code>singleInstance</code> or <code>singleTask</code>.
*/
+ @NonNull
public static ActivityOptionsCompat makeTaskLaunchBehind() {
if (Build.VERSION.SDK_INT >= 21) {
return createImpl(ActivityOptions.makeTaskLaunchBehind());
@@ -230,6 +238,7 @@
* Create a basic ActivityOptions that has no special animation associated with it.
* Other options can still be set.
*/
+ @NonNull
public static ActivityOptionsCompat makeBasic() {
if (Build.VERSION.SDK_INT >= 23) {
return createImpl(ActivityOptions.makeBasic());
@@ -314,8 +323,9 @@
* {@link android.content.pm.PackageManager#FEATURE_PICTURE_IN_PICTURE} enabled.
* @param screenSpacePixelRect Launch bounds to use for the activity or null for fullscreen.
*/
+ @NonNull
public ActivityOptionsCompat setLaunchBounds(@Nullable Rect screenSpacePixelRect) {
- return null;
+ return this;
}
/**
@@ -335,6 +345,7 @@
* object; you must not modify it, but can supply it to the startActivity
* methods that take an options Bundle.
*/
+ @Nullable
public Bundle toBundle() {
return null;
}
@@ -344,7 +355,7 @@
* otherOptions. Any values defined in otherOptions replace those in the
* base options.
*/
- public void update(ActivityOptionsCompat otherOptions) {
+ public void update(@NonNull ActivityOptionsCompat otherOptions) {
// Do nothing.
}
@@ -372,7 +383,7 @@
*
* @param receiver A broadcast receiver that will receive the report.
*/
- public void requestUsageTimeReport(PendingIntent receiver) {
+ public void requestUsageTimeReport(@NonNull PendingIntent receiver) {
// Do nothing.
}
}
diff --git a/compat/java/android/support/v4/app/AlarmManagerCompat.java b/compat/src/main/java/android/support/v4/app/AlarmManagerCompat.java
similarity index 93%
rename from compat/java/android/support/v4/app/AlarmManagerCompat.java
rename to compat/src/main/java/android/support/v4/app/AlarmManagerCompat.java
index 5a4582b..a297cb5 100644
--- a/compat/java/android/support/v4/app/AlarmManagerCompat.java
+++ b/compat/src/main/java/android/support/v4/app/AlarmManagerCompat.java
@@ -19,6 +19,7 @@
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.os.Build;
+import android.support.annotation.NonNull;
/**
* Compatibility library for {@link AlarmManager} with fallbacks for older platforms.
@@ -52,8 +53,8 @@
* @see android.content.Context#registerReceiver
* @see android.content.Intent#filterEquals
*/
- public static void setAlarmClock(AlarmManager alarmManager, long triggerTime,
- PendingIntent showIntent, PendingIntent operation) {
+ public static void setAlarmClock(@NonNull AlarmManager alarmManager, long triggerTime,
+ @NonNull PendingIntent showIntent, @NonNull PendingIntent operation) {
if (Build.VERSION.SDK_INT >= 21) {
alarmManager.setAlarmClock(new AlarmManager.AlarmClockInfo(triggerTime, showIntent),
operation);
@@ -110,8 +111,8 @@
* @see AlarmManager#RTC
* @see AlarmManager#RTC_WAKEUP
*/
- public static void setAndAllowWhileIdle(AlarmManager alarmManager, int type,
- long triggerAtMillis, PendingIntent operation) {
+ public static void setAndAllowWhileIdle(@NonNull AlarmManager alarmManager, int type,
+ long triggerAtMillis, @NonNull PendingIntent operation) {
if (Build.VERSION.SDK_INT >= 23) {
alarmManager.setAndAllowWhileIdle(type, triggerAtMillis, operation);
} else {
@@ -155,8 +156,8 @@
* @see AlarmManager#RTC
* @see AlarmManager#RTC_WAKEUP
*/
- public static void setExact(AlarmManager alarmManager, int type, long triggerAtMillis,
- PendingIntent operation) {
+ public static void setExact(@NonNull AlarmManager alarmManager, int type, long triggerAtMillis,
+ @NonNull PendingIntent operation) {
if (Build.VERSION.SDK_INT >= 19) {
alarmManager.setExact(type, triggerAtMillis, operation);
} else {
@@ -215,8 +216,8 @@
* @see AlarmManager#RTC
* @see AlarmManager#RTC_WAKEUP
*/
- public static void setExactAndAllowWhileIdle(AlarmManager alarmManager, int type,
- long triggerAtMillis, PendingIntent operation) {
+ public static void setExactAndAllowWhileIdle(@NonNull AlarmManager alarmManager, int type,
+ long triggerAtMillis, @NonNull PendingIntent operation) {
if (Build.VERSION.SDK_INT >= 23) {
alarmManager.setExactAndAllowWhileIdle(type, triggerAtMillis, operation);
} else {
diff --git a/compat/java/android/support/v4/app/AppOpsManagerCompat.java b/compat/src/main/java/android/support/v4/app/AppOpsManagerCompat.java
similarity index 98%
rename from compat/java/android/support/v4/app/AppOpsManagerCompat.java
rename to compat/src/main/java/android/support/v4/app/AppOpsManagerCompat.java
index ce2d2c6..7e97199 100644
--- a/compat/java/android/support/v4/app/AppOpsManagerCompat.java
+++ b/compat/src/main/java/android/support/v4/app/AppOpsManagerCompat.java
@@ -21,6 +21,7 @@
import android.app.AppOpsManager;
import android.content.Context;
import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
/**
* Helper for accessing features in {@link android.app.AppOpsManager}.
@@ -56,6 +57,7 @@
* @param permission The permission.
* @return The app op associated with the permission or null.
*/
+ @Nullable
public static String permissionToOp(@NonNull String permission) {
if (SDK_INT >= 23) {
return AppOpsManager.permissionToOp(permission);
diff --git a/compat/java/android/support/v4/app/BundleCompat.java b/compat/src/main/java/android/support/v4/app/BundleCompat.java
similarity index 93%
rename from compat/java/android/support/v4/app/BundleCompat.java
rename to compat/src/main/java/android/support/v4/app/BundleCompat.java
index e5fc302..21d730d 100644
--- a/compat/java/android/support/v4/app/BundleCompat.java
+++ b/compat/src/main/java/android/support/v4/app/BundleCompat.java
@@ -19,6 +19,8 @@
import android.os.Build;
import android.os.Bundle;
import android.os.IBinder;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.util.Log;
import java.lang.reflect.InvocationTargetException;
@@ -94,7 +96,8 @@
* @param key The key to use while getting the {@link IBinder}.
* @return The {@link IBinder} that was obtained.
*/
- public static IBinder getBinder(Bundle bundle, String key) {
+ @Nullable
+ public static IBinder getBinder(@NonNull Bundle bundle, @Nullable String key) {
if (Build.VERSION.SDK_INT >= 18) {
return bundle.getBinder(key);
} else {
@@ -109,7 +112,8 @@
* @param key The key to use while putting the {@link IBinder}.
* @param binder The {@link IBinder} to put.
*/
- public static void putBinder(Bundle bundle, String key, IBinder binder) {
+ public static void putBinder(@NonNull Bundle bundle, @Nullable String key,
+ @Nullable IBinder binder) {
if (Build.VERSION.SDK_INT >= 18) {
bundle.putBinder(key, binder);
} else {
diff --git a/compat/java/android/support/v4/app/INotificationSideChannel.aidl b/compat/src/main/java/android/support/v4/app/INotificationSideChannel.aidl
similarity index 100%
rename from compat/java/android/support/v4/app/INotificationSideChannel.aidl
rename to compat/src/main/java/android/support/v4/app/INotificationSideChannel.aidl
diff --git a/compat/java/android/support/v4/app/JobIntentService.java b/compat/src/main/java/android/support/v4/app/JobIntentService.java
similarity index 99%
rename from compat/java/android/support/v4/app/JobIntentService.java
rename to compat/src/main/java/android/support/v4/app/JobIntentService.java
index c0d7f13..87b7441 100644
--- a/compat/java/android/support/v4/app/JobIntentService.java
+++ b/compat/src/main/java/android/support/v4/app/JobIntentService.java
@@ -84,7 +84,7 @@
*
* <p>Here is an example implementation of this class:</p>
*
- * {@sample frameworks/support/samples/Support4Demos/src/com/example/android/supportv4/app/SimpleJobIntentService.java
+ * {@sample frameworks/support/samples/Support4Demos/src/main/java/com/example/android/supportv4/app/SimpleJobIntentService.java
* complete}
*/
public abstract class JobIntentService extends Service {
diff --git a/compat/java/android/support/v4/app/NotificationBuilderWithBuilderAccessor.java b/compat/src/main/java/android/support/v4/app/NotificationBuilderWithBuilderAccessor.java
similarity index 100%
rename from compat/java/android/support/v4/app/NotificationBuilderWithBuilderAccessor.java
rename to compat/src/main/java/android/support/v4/app/NotificationBuilderWithBuilderAccessor.java
diff --git a/compat/java/android/support/v4/app/NotificationCompat.java b/compat/src/main/java/android/support/v4/app/NotificationCompat.java
similarity index 100%
rename from compat/java/android/support/v4/app/NotificationCompat.java
rename to compat/src/main/java/android/support/v4/app/NotificationCompat.java
diff --git a/compat/java/android/support/v4/app/NotificationCompatBuilder.java b/compat/src/main/java/android/support/v4/app/NotificationCompatBuilder.java
similarity index 100%
rename from compat/java/android/support/v4/app/NotificationCompatBuilder.java
rename to compat/src/main/java/android/support/v4/app/NotificationCompatBuilder.java
diff --git a/compat/java/android/support/v4/app/NotificationCompatExtras.java b/compat/src/main/java/android/support/v4/app/NotificationCompatExtras.java
similarity index 100%
rename from compat/java/android/support/v4/app/NotificationCompatExtras.java
rename to compat/src/main/java/android/support/v4/app/NotificationCompatExtras.java
diff --git a/compat/java/android/support/v4/app/NotificationCompatJellybean.java b/compat/src/main/java/android/support/v4/app/NotificationCompatJellybean.java
similarity index 100%
rename from compat/java/android/support/v4/app/NotificationCompatJellybean.java
rename to compat/src/main/java/android/support/v4/app/NotificationCompatJellybean.java
diff --git a/compat/java/android/support/v4/app/NotificationCompatSideChannelService.java b/compat/src/main/java/android/support/v4/app/NotificationCompatSideChannelService.java
similarity index 100%
rename from compat/java/android/support/v4/app/NotificationCompatSideChannelService.java
rename to compat/src/main/java/android/support/v4/app/NotificationCompatSideChannelService.java
diff --git a/compat/java/android/support/v4/app/NotificationManagerCompat.java b/compat/src/main/java/android/support/v4/app/NotificationManagerCompat.java
similarity index 98%
rename from compat/java/android/support/v4/app/NotificationManagerCompat.java
rename to compat/src/main/java/android/support/v4/app/NotificationManagerCompat.java
index 93775ec..1a0f1bc 100644
--- a/compat/java/android/support/v4/app/NotificationManagerCompat.java
+++ b/compat/src/main/java/android/support/v4/app/NotificationManagerCompat.java
@@ -36,6 +36,8 @@
import android.os.RemoteException;
import android.provider.Settings;
import android.support.annotation.GuardedBy;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.util.Log;
import java.lang.reflect.Field;
@@ -144,7 +146,8 @@
public static final int IMPORTANCE_MAX = 5;
/** Get a {@link NotificationManagerCompat} instance for a provided context. */
- public static NotificationManagerCompat from(Context context) {
+ @NonNull
+ public static NotificationManagerCompat from(@NonNull Context context) {
return new NotificationManagerCompat(context);
}
@@ -167,7 +170,7 @@
* @param tag the string identifier of the notification.
* @param id the ID of the notification
*/
- public void cancel(String tag, int id) {
+ public void cancel(@Nullable String tag, int id) {
mNotificationManager.cancel(tag, id);
if (Build.VERSION.SDK_INT <= MAX_SIDE_CHANNEL_SDK_VERSION) {
pushSideChannelQueue(new CancelTask(mContext.getPackageName(), id, tag));
@@ -197,7 +200,7 @@
* @param id the ID of the notification. The pair (tag, id) must be unique within your app.
* @param notification the notification to post to the system
*/
- public void notify(String tag, int id, Notification notification) {
+ public void notify(@Nullable String tag, int id, @NonNull Notification notification) {
if (useSideChannelForNotification(notification)) {
pushSideChannelQueue(new NotifyTask(mContext.getPackageName(), id, tag, notification));
// Cancel this notification in notification manager if it just transitioned to being
@@ -253,7 +256,8 @@
/**
* Get the set of packages that have an enabled notification listener component within them.
*/
- public static Set<String> getEnabledListenerPackages(Context context) {
+ @NonNull
+ public static Set<String> getEnabledListenerPackages(@NonNull Context context) {
final String enabledNotificationListeners = Settings.Secure.getString(
context.getContentResolver(),
SETTING_ENABLED_NOTIFICATION_LISTENERS);
diff --git a/compat/java/android/support/v4/app/RemoteInput.java b/compat/src/main/java/android/support/v4/app/RemoteInput.java
similarity index 100%
rename from compat/java/android/support/v4/app/RemoteInput.java
rename to compat/src/main/java/android/support/v4/app/RemoteInput.java
diff --git a/compat/java/android/support/v4/app/RemoteInputCompatBase.java b/compat/src/main/java/android/support/v4/app/RemoteInputCompatBase.java
similarity index 100%
rename from compat/java/android/support/v4/app/RemoteInputCompatBase.java
rename to compat/src/main/java/android/support/v4/app/RemoteInputCompatBase.java
diff --git a/compat/java/android/support/v4/app/ServiceCompat.java b/compat/src/main/java/android/support/v4/app/ServiceCompat.java
similarity index 96%
rename from compat/java/android/support/v4/app/ServiceCompat.java
rename to compat/src/main/java/android/support/v4/app/ServiceCompat.java
index 1676ee8..2e63b23 100644
--- a/compat/java/android/support/v4/app/ServiceCompat.java
+++ b/compat/src/main/java/android/support/v4/app/ServiceCompat.java
@@ -22,6 +22,7 @@
import android.app.Service;
import android.os.Build;
import android.support.annotation.IntDef;
+import android.support.annotation.NonNull;
import android.support.annotation.RestrictTo;
import java.lang.annotation.Retention;
@@ -92,7 +93,7 @@
* {@link #STOP_FOREGROUND_DETACH}.
* @see Service#startForeground(int, Notification)
*/
- public static void stopForeground(Service service, @StopForegroundFlags int flags) {
+ public static void stopForeground(@NonNull Service service, @StopForegroundFlags int flags) {
if (Build.VERSION.SDK_INT >= 24) {
service.stopForeground(flags);
} else {
diff --git a/compat/java/android/support/v4/app/ShareCompat.java b/compat/src/main/java/android/support/v4/app/ShareCompat.java
similarity index 100%
rename from compat/java/android/support/v4/app/ShareCompat.java
rename to compat/src/main/java/android/support/v4/app/ShareCompat.java
diff --git a/compat/java/android/support/v4/app/SharedElementCallback.java b/compat/src/main/java/android/support/v4/app/SharedElementCallback.java
similarity index 100%
rename from compat/java/android/support/v4/app/SharedElementCallback.java
rename to compat/src/main/java/android/support/v4/app/SharedElementCallback.java
diff --git a/compat/java/android/support/v4/app/SupportActivity.java b/compat/src/main/java/android/support/v4/app/SupportActivity.java
similarity index 100%
rename from compat/java/android/support/v4/app/SupportActivity.java
rename to compat/src/main/java/android/support/v4/app/SupportActivity.java
diff --git a/compat/java/android/support/v4/app/package.html b/compat/src/main/java/android/support/v4/app/package.html
similarity index 100%
rename from compat/java/android/support/v4/app/package.html
rename to compat/src/main/java/android/support/v4/app/package.html
diff --git a/compat/java/android/support/v4/content/ContentResolverCompat.java b/compat/src/main/java/android/support/v4/content/ContentResolverCompat.java
similarity index 100%
rename from compat/java/android/support/v4/content/ContentResolverCompat.java
rename to compat/src/main/java/android/support/v4/content/ContentResolverCompat.java
diff --git a/compat/java/android/support/v4/content/ContextCompat.java b/compat/src/main/java/android/support/v4/content/ContextCompat.java
similarity index 94%
rename from compat/java/android/support/v4/content/ContextCompat.java
rename to compat/src/main/java/android/support/v4/content/ContextCompat.java
index fdbe32f..8a4fd7a 100644
--- a/compat/java/android/support/v4/content/ContextCompat.java
+++ b/compat/src/main/java/android/support/v4/content/ContextCompat.java
@@ -79,7 +79,7 @@
* length-1 will correspond to the top activity on the resulting task stack.
* @return true if the underlying API was available and the call was successful, false otherwise
*/
- public static boolean startActivities(Context context, Intent[] intents) {
+ public static boolean startActivities(@NonNull Context context, @NonNull Intent[] intents) {
return startActivities(context, intents, null);
}
@@ -110,7 +110,8 @@
* See {@link android.content.Context#startActivity(Intent, android.os.Bundle)}
* @return true if the underlying API was available and the call was successful, false otherwise
*/
- public static boolean startActivities(Context context, Intent[] intents, Bundle options) {
+ public static boolean startActivities(@NonNull Context context, @NonNull Intent[] intents,
+ @Nullable Bundle options) {
if (Build.VERSION.SDK_INT >= 16) {
context.startActivities(intents, options);
} else {
@@ -136,7 +137,8 @@
* supplied here; there are no supported definitions for
* building it manually.
*/
- public static void startActivity(Context context, Intent intent, @Nullable Bundle options) {
+ public static void startActivity(@NonNull Context context, @NonNull Intent intent,
+ @Nullable Bundle options) {
if (Build.VERSION.SDK_INT >= 16) {
context.startActivity(intent, options);
} else {
@@ -159,7 +161,8 @@
*
* @see ApplicationInfo#dataDir
*/
- public static File getDataDir(Context context) {
+ @Nullable
+ public static File getDataDir(@NonNull Context context) {
if (Build.VERSION.SDK_INT >= 24) {
return context.getDataDir();
} else {
@@ -211,7 +214,8 @@
* @see Context#getObbDir()
* @see EnvironmentCompat#getStorageState(File)
*/
- public static File[] getObbDirs(Context context) {
+ @NonNull
+ public static File[] getObbDirs(@NonNull Context context) {
if (Build.VERSION.SDK_INT >= 19) {
return context.getObbDirs();
} else {
@@ -263,7 +267,8 @@
* @see Context#getExternalFilesDir(String)
* @see EnvironmentCompat#getStorageState(File)
*/
- public static File[] getExternalFilesDirs(Context context, String type) {
+ @NonNull
+ public static File[] getExternalFilesDirs(@NonNull Context context, @Nullable String type) {
if (Build.VERSION.SDK_INT >= 19) {
return context.getExternalFilesDirs(type);
} else {
@@ -315,7 +320,8 @@
* @see Context#getExternalCacheDir()
* @see EnvironmentCompat#getStorageState(File)
*/
- public static File[] getExternalCacheDirs(Context context) {
+ @NonNull
+ public static File[] getExternalCacheDirs(@NonNull Context context) {
if (Build.VERSION.SDK_INT >= 19) {
return context.getExternalCacheDirs();
} else {
@@ -346,7 +352,8 @@
* The value 0 is an invalid identifier.
* @return Drawable An object that can be used to draw this resource.
*/
- public static final Drawable getDrawable(Context context, @DrawableRes int id) {
+ @Nullable
+ public static final Drawable getDrawable(@NonNull Context context, @DrawableRes int id) {
if (Build.VERSION.SDK_INT >= 21) {
return context.getDrawable(id);
} else if (Build.VERSION.SDK_INT >= 16) {
@@ -382,7 +389,9 @@
* @throws android.content.res.Resources.NotFoundException if the given ID
* does not exist.
*/
- public static final ColorStateList getColorStateList(Context context, @ColorRes int id) {
+ @Nullable
+ public static final ColorStateList getColorStateList(@NonNull Context context,
+ @ColorRes int id) {
if (Build.VERSION.SDK_INT >= 23) {
return context.getColorStateList(id);
} else {
@@ -404,7 +413,7 @@
* does not exist.
*/
@ColorInt
- public static final int getColor(Context context, @ColorRes int id) {
+ public static final int getColor(@NonNull Context context, @ColorRes int id) {
if (Build.VERSION.SDK_INT >= 23) {
return context.getColor(id);
} else {
@@ -444,7 +453,8 @@
*
* @see android.content.Context#getFilesDir()
*/
- public static final File getNoBackupFilesDir(Context context) {
+ @Nullable
+ public static final File getNoBackupFilesDir(@NonNull Context context) {
if (Build.VERSION.SDK_INT >= 21) {
return context.getNoBackupFilesDir();
} else {
@@ -468,7 +478,7 @@
*
* @return The path of the directory holding application code cache files.
*/
- public static File getCodeCacheDir(Context context) {
+ public static File getCodeCacheDir(@NonNull Context context) {
if (Build.VERSION.SDK_INT >= 21) {
return context.getCodeCacheDir();
} else {
@@ -522,7 +532,8 @@
*
* @see ContextCompat#isDeviceProtectedStorage(Context)
*/
- public static Context createDeviceProtectedStorageContext(Context context) {
+ @Nullable
+ public static Context createDeviceProtectedStorageContext(@NonNull Context context) {
if (Build.VERSION.SDK_INT >= 24) {
return context.createDeviceProtectedStorageContext();
} else {
@@ -536,7 +547,7 @@
*
* @see ContextCompat#createDeviceProtectedStorageContext(Context)
*/
- public static boolean isDeviceProtectedStorage(Context context) {
+ public static boolean isDeviceProtectedStorage(@NonNull Context context) {
if (Build.VERSION.SDK_INT >= 24) {
return context.isDeviceProtectedStorage();
} else {
@@ -554,7 +565,7 @@
* @see Context#startForegeroundService()
* @see Context#startService()
*/
- public static void startForegroundService(Context context, Intent intent) {
+ public static void startForegroundService(@NonNull Context context, @NonNull Intent intent) {
if (Build.VERSION.SDK_INT >= 26) {
context.startForegroundService(intent);
} else {
diff --git a/compat/java/android/support/v4/content/IntentCompat.java b/compat/src/main/java/android/support/v4/content/IntentCompat.java
similarity index 94%
rename from compat/java/android/support/v4/content/IntentCompat.java
rename to compat/src/main/java/android/support/v4/content/IntentCompat.java
index 1a7295b..f5b3a0b 100644
--- a/compat/java/android/support/v4/content/IntentCompat.java
+++ b/compat/src/main/java/android/support/v4/content/IntentCompat.java
@@ -18,6 +18,7 @@
import android.content.Intent;
import android.os.Build;
+import android.support.annotation.NonNull;
/**
* Helper for accessing features in {@link android.content.Intent}.
@@ -69,8 +70,9 @@
* @return Returns a newly created Intent that can be used to launch the
* activity as a main application entry.
*/
- public static Intent makeMainSelectorActivity(String selectorAction,
- String selectorCategory) {
+ @NonNull
+ public static Intent makeMainSelectorActivity(@NonNull String selectorAction,
+ @NonNull String selectorCategory) {
if (Build.VERSION.SDK_INT >= 15) {
return Intent.makeMainSelectorActivity(selectorAction, selectorCategory);
} else {
diff --git a/compat/java/android/support/v4/content/SharedPreferencesCompat.java b/compat/src/main/java/android/support/v4/content/SharedPreferencesCompat.java
similarity index 76%
rename from compat/java/android/support/v4/content/SharedPreferencesCompat.java
rename to compat/src/main/java/android/support/v4/content/SharedPreferencesCompat.java
index 7d51fed..1d43c2e 100644
--- a/compat/java/android/support/v4/content/SharedPreferencesCompat.java
+++ b/compat/src/main/java/android/support/v4/content/SharedPreferencesCompat.java
@@ -19,8 +19,18 @@
import android.content.SharedPreferences;
import android.support.annotation.NonNull;
+/**
+ * @deprecated This compatibility class is no longer required. Use {@link SharedPreferences}
+ * directly.
+ */
+@Deprecated
public final class SharedPreferencesCompat {
+ /**
+ * @deprecated This compatibility class is no longer required. Use
+ * {@link SharedPreferences.Editor} directly.
+ */
+ @Deprecated
public final static class EditorCompat {
private static EditorCompat sInstance;
@@ -46,14 +56,22 @@
private EditorCompat() {
mHelper = new Helper();
}
-
+ /**
+ * @deprecated This compatibility class is no longer required. Use
+ * {@link SharedPreferences.Editor} directly.
+ */
+ @Deprecated
public static EditorCompat getInstance() {
if (sInstance == null) {
sInstance = new EditorCompat();
}
return sInstance;
}
-
+ /**
+ * @deprecated This compatibility method is no longer required. Use
+ * {@link SharedPreferences.Editor#apply()} directly.
+ */
+ @Deprecated
public void apply(@NonNull SharedPreferences.Editor editor) {
// Note that this redirection is needed to not break the public API chain
// of getInstance().apply() calls. Otherwise this method could (and should)
diff --git a/compat/java/android/support/v4/content/package.html b/compat/src/main/java/android/support/v4/content/package.html
similarity index 100%
rename from compat/java/android/support/v4/content/package.html
rename to compat/src/main/java/android/support/v4/content/package.html
diff --git a/compat/java/android/support/v4/content/pm/ActivityInfoCompat.java b/compat/src/main/java/android/support/v4/content/pm/ActivityInfoCompat.java
similarity index 100%
rename from compat/java/android/support/v4/content/pm/ActivityInfoCompat.java
rename to compat/src/main/java/android/support/v4/content/pm/ActivityInfoCompat.java
diff --git a/compat/java/android/support/v4/content/pm/ShortcutInfoCompat.java b/compat/src/main/java/android/support/v4/content/pm/ShortcutInfoCompat.java
similarity index 100%
rename from compat/java/android/support/v4/content/pm/ShortcutInfoCompat.java
rename to compat/src/main/java/android/support/v4/content/pm/ShortcutInfoCompat.java
diff --git a/compat/java/android/support/v4/content/pm/ShortcutManagerCompat.java b/compat/src/main/java/android/support/v4/content/pm/ShortcutManagerCompat.java
similarity index 100%
rename from compat/java/android/support/v4/content/pm/ShortcutManagerCompat.java
rename to compat/src/main/java/android/support/v4/content/pm/ShortcutManagerCompat.java
diff --git a/compat/java/android/support/v4/content/pm/package.html b/compat/src/main/java/android/support/v4/content/pm/package.html
similarity index 100%
rename from compat/java/android/support/v4/content/pm/package.html
rename to compat/src/main/java/android/support/v4/content/pm/package.html
diff --git a/compat/java/android/support/v4/content/res/ConfigurationHelper.java b/compat/src/main/java/android/support/v4/content/res/ConfigurationHelper.java
similarity index 100%
rename from compat/java/android/support/v4/content/res/ConfigurationHelper.java
rename to compat/src/main/java/android/support/v4/content/res/ConfigurationHelper.java
diff --git a/compat/java/android/support/v4/content/res/FontResourcesParserCompat.java b/compat/src/main/java/android/support/v4/content/res/FontResourcesParserCompat.java
similarity index 92%
rename from compat/java/android/support/v4/content/res/FontResourcesParserCompat.java
rename to compat/src/main/java/android/support/v4/content/res/FontResourcesParserCompat.java
index 7fe86ad..8ad07d3 100644
--- a/compat/java/android/support/v4/content/res/FontResourcesParserCompat.java
+++ b/compat/src/main/java/android/support/v4/content/res/FontResourcesParserCompat.java
@@ -252,10 +252,19 @@
throws XmlPullParserException, IOException {
AttributeSet attrs = Xml.asAttributeSet(parser);
TypedArray array = resources.obtainAttributes(attrs, R.styleable.FontFamilyFont);
- int weight = array.getInt(R.styleable.FontFamilyFont_fontWeight, NORMAL_WEIGHT);
- boolean isItalic = ITALIC == array.getInt(R.styleable.FontFamilyFont_fontStyle, 0);
- int resourceId = array.getResourceId(R.styleable.FontFamilyFont_font, 0);
- String filename = array.getString(R.styleable.FontFamilyFont_font);
+ final int weightAttr = array.hasValue(R.styleable.FontFamilyFont_fontWeight)
+ ? R.styleable.FontFamilyFont_fontWeight
+ : R.styleable.FontFamilyFont_android_fontWeight;
+ int weight = array.getInt(weightAttr, NORMAL_WEIGHT);
+ final int styleAttr = array.hasValue(R.styleable.FontFamilyFont_fontStyle)
+ ? R.styleable.FontFamilyFont_fontStyle
+ : R.styleable.FontFamilyFont_android_fontStyle;
+ boolean isItalic = ITALIC == array.getInt(styleAttr, 0);
+ final int resourceAttr = array.hasValue(R.styleable.FontFamilyFont_font)
+ ? R.styleable.FontFamilyFont_font
+ : R.styleable.FontFamilyFont_android_font;
+ int resourceId = array.getResourceId(resourceAttr, 0);
+ String filename = array.getString(resourceAttr);
array.recycle();
while (parser.next() != XmlPullParser.END_TAG) {
skip(parser);
diff --git a/compat/src/main/java/android/support/v4/content/res/ResourcesCompat.java b/compat/src/main/java/android/support/v4/content/res/ResourcesCompat.java
new file mode 100644
index 0000000..15b8ce9
--- /dev/null
+++ b/compat/src/main/java/android/support/v4/content/res/ResourcesCompat.java
@@ -0,0 +1,417 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v4.content.res;
+
+import static android.os.Build.VERSION.SDK_INT;
+import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
+
+import android.content.Context;
+import android.content.res.ColorStateList;
+import android.content.res.Resources;
+import android.content.res.Resources.NotFoundException;
+import android.content.res.Resources.Theme;
+import android.content.res.XmlResourceParser;
+import android.graphics.Typeface;
+import android.graphics.drawable.Drawable;
+import android.os.Handler;
+import android.os.Looper;
+import android.support.annotation.ColorInt;
+import android.support.annotation.ColorRes;
+import android.support.annotation.DrawableRes;
+import android.support.annotation.FontRes;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.annotation.RestrictTo;
+import android.support.v4.content.res.FontResourcesParserCompat.FamilyResourceEntry;
+import android.support.v4.graphics.TypefaceCompat;
+import android.support.v4.provider.FontsContractCompat.FontRequestCallback;
+import android.support.v4.provider.FontsContractCompat.FontRequestCallback.FontRequestFailReason;
+import android.support.v4.util.Preconditions;
+import android.util.Log;
+import android.util.TypedValue;
+
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
+
+/**
+ * Helper for accessing features in {@link android.content.res.Resources}.
+ */
+public final class ResourcesCompat {
+ private static final String TAG = "ResourcesCompat";
+
+ /**
+ * Return a drawable object associated with a particular resource ID and
+ * styled for the specified theme. Various types of objects will be
+ * returned depending on the underlying resource -- for example, a solid
+ * color, PNG image, scalable image, etc.
+ * <p>
+ * Prior to API level 21, the theme will not be applied and this method
+ * simply calls through to {@link Resources#getDrawable(int)}.
+ *
+ * @param id The desired resource identifier, as generated by the aapt
+ * tool. This integer encodes the package, type, and resource
+ * entry. The value 0 is an invalid identifier.
+ * @param theme The theme used to style the drawable attributes, may be
+ * {@code null}.
+ * @return Drawable An object that can be used to draw this resource.
+ * @throws NotFoundException Throws NotFoundException if the given ID does
+ * not exist.
+ */
+ @Nullable
+ @SuppressWarnings("deprecation")
+ public static Drawable getDrawable(@NonNull Resources res, @DrawableRes int id,
+ @Nullable Theme theme) throws NotFoundException {
+ if (SDK_INT >= 21) {
+ return res.getDrawable(id, theme);
+ } else {
+ return res.getDrawable(id);
+ }
+ }
+
+
+ /**
+ * Return a drawable object associated with a particular resource ID for
+ * the given screen density in DPI and styled for the specified theme.
+ * <p>
+ * Prior to API level 15, the theme and density will not be applied and
+ * this method simply calls through to {@link Resources#getDrawable(int)}.
+ * <p>
+ * Prior to API level 21, the theme will not be applied and this method
+ * calls through to Resources#getDrawableForDensity(int, int).
+ *
+ * @param id The desired resource identifier, as generated by the aapt
+ * tool. This integer encodes the package, type, and resource
+ * entry. The value 0 is an invalid identifier.
+ * @param density The desired screen density indicated by the resource as
+ * found in {@link android.util.DisplayMetrics}.
+ * @param theme The theme used to style the drawable attributes, may be
+ * {@code null}.
+ * @return Drawable An object that can be used to draw this resource.
+ * @throws NotFoundException Throws NotFoundException if the given ID does
+ * not exist.
+ */
+ @Nullable
+ @SuppressWarnings("deprecation")
+ public static Drawable getDrawableForDensity(@NonNull Resources res, @DrawableRes int id,
+ int density, @Nullable Theme theme) throws NotFoundException {
+ if (SDK_INT >= 21) {
+ return res.getDrawableForDensity(id, density, theme);
+ } else if (SDK_INT >= 15) {
+ return res.getDrawableForDensity(id, density);
+ } else {
+ return res.getDrawable(id);
+ }
+ }
+
+ /**
+ * Returns a themed color integer associated with a particular resource ID.
+ * If the resource holds a complex {@link ColorStateList}, then the default
+ * color from the set is returned.
+ * <p>
+ * Prior to API level 23, the theme will not be applied and this method
+ * calls through to {@link Resources#getColor(int)}.
+ *
+ * @param id The desired resource identifier, as generated by the aapt
+ * tool. This integer encodes the package, type, and resource
+ * entry. The value 0 is an invalid identifier.
+ * @param theme The theme used to style the color attributes, may be
+ * {@code null}.
+ * @return A single color value in the form {@code 0xAARRGGBB}.
+ * @throws NotFoundException Throws NotFoundException if the given ID does
+ * not exist.
+ */
+ @ColorInt
+ @SuppressWarnings("deprecation")
+ public static int getColor(@NonNull Resources res, @ColorRes int id, @Nullable Theme theme)
+ throws NotFoundException {
+ if (SDK_INT >= 23) {
+ return res.getColor(id, theme);
+ } else {
+ return res.getColor(id);
+ }
+ }
+
+ /**
+ * Returns a themed color state list associated with a particular resource
+ * ID. The resource may contain either a single raw color value or a
+ * complex {@link ColorStateList} holding multiple possible colors.
+ * <p>
+ * Prior to API level 23, the theme will not be applied and this method
+ * calls through to {@link Resources#getColorStateList(int)}.
+ *
+ * @param id The desired resource identifier of a {@link ColorStateList},
+ * as generated by the aapt tool. This integer encodes the
+ * package, type, and resource entry. The value 0 is an invalid
+ * identifier.
+ * @param theme The theme used to style the color attributes, may be
+ * {@code null}.
+ * @return A themed ColorStateList object containing either a single solid
+ * color or multiple colors that can be selected based on a state.
+ * @throws NotFoundException Throws NotFoundException if the given ID does
+ * not exist.
+ */
+ @Nullable
+ @SuppressWarnings("deprecation")
+ public static ColorStateList getColorStateList(@NonNull Resources res, @ColorRes int id,
+ @Nullable Theme theme) throws NotFoundException {
+ if (SDK_INT >= 23) {
+ return res.getColorStateList(id, theme);
+ } else {
+ return res.getColorStateList(id);
+ }
+ }
+
+ /**
+ * Returns a font Typeface associated with a particular resource ID.
+ * <p>
+ * This method will block the calling thread to retrieve the requested font, including if it
+ * is from a font provider. If you wish to not have this behavior, use
+ * {@link #getFont(Context, int, FontCallback, Handler)} instead.
+ * <p>
+ * Prior to API level 23, font resources with more than one font in a family will only load the
+ * font closest to a regular weight typeface.
+ *
+ * @param context A context to retrieve the Resources from.
+ * @param id The desired resource identifier of a {@link Typeface},
+ * as generated by the aapt tool. This integer encodes the
+ * package, type, and resource entry. The value 0 is an invalid
+ * identifier.
+ * @return A font Typeface object.
+ * @throws NotFoundException Throws NotFoundException if the given ID does not exist.
+ *
+ * @see #getFont(Context, int, FontCallback, Handler)
+ */
+ @Nullable
+ public static Typeface getFont(@NonNull Context context, @FontRes int id)
+ throws NotFoundException {
+ if (context.isRestricted()) {
+ return null;
+ }
+ return loadFont(context, id, new TypedValue(), Typeface.NORMAL, null /* callback */,
+ null /* handler */, false /* isXmlRequest */);
+ }
+
+ /**
+ * Interface used to receive asynchronous font fetching events.
+ */
+ public abstract static class FontCallback {
+
+ /**
+ * Called when an asynchronous font was finished loading.
+ *
+ * @param typeface The font that was loaded.
+ */
+ public abstract void onFontRetrieved(@NonNull Typeface typeface);
+
+ /**
+ * Called when an asynchronous font failed to load.
+ *
+ * @param reason The reason the font failed to load. One of
+ * {@link FontRequestFailReason#FAIL_REASON_PROVIDER_NOT_FOUND},
+ * {@link FontRequestFailReason#FAIL_REASON_WRONG_CERTIFICATES},
+ * {@link FontRequestFailReason#FAIL_REASON_FONT_LOAD_ERROR},
+ * {@link FontRequestFailReason#FAIL_REASON_SECURITY_VIOLATION},
+ * {@link FontRequestFailReason#FAIL_REASON_FONT_NOT_FOUND},
+ * {@link FontRequestFailReason#FAIL_REASON_FONT_UNAVAILABLE} or
+ * {@link FontRequestFailReason#FAIL_REASON_MALFORMED_QUERY}.
+ */
+ public abstract void onFontRetrievalFailed(@FontRequestFailReason int reason);
+
+ /**
+ * Call {@link #onFontRetrieved(Typeface)} on the handler given, or the Ui Thread if it is
+ * null.
+ * @hide
+ */
+ @RestrictTo(LIBRARY_GROUP)
+ public final void callbackSuccessAsync(final Typeface typeface, @Nullable Handler handler) {
+ if (handler == null) {
+ handler = new Handler(Looper.getMainLooper());
+ }
+ handler.post(new Runnable() {
+ @Override
+ public void run() {
+ onFontRetrieved(typeface);
+ }
+ });
+ }
+
+ /**
+ * Call {@link #onFontRetrievalFailed(int)} on the handler given, or the Ui Thread if it is
+ * null.
+ * @hide
+ */
+ @RestrictTo(LIBRARY_GROUP)
+ public final void callbackFailAsync(
+ @FontRequestFailReason final int reason, @Nullable Handler handler) {
+ if (handler == null) {
+ handler = new Handler(Looper.getMainLooper());
+ }
+ handler.post(new Runnable() {
+ @Override
+ public void run() {
+ onFontRetrievalFailed(reason);
+ }
+ });
+ }
+ }
+
+ /**
+ * Returns a font Typeface associated with a particular resource ID asynchronously.
+ * <p>
+ * Prior to API level 23, font resources with more than one font in a family will only load the
+ * font closest to a regular weight typeface.
+ * </p>
+ *
+ * @param context A context to retrieve the Resources from.
+ * @param id The desired resource identifier of a {@link Typeface}, as generated by the aapt
+ * tool. This integer encodes the package, type, and resource entry. The value 0 is an
+ * invalid identifier.
+ * @param fontCallback A callback to receive async fetching of this font. The callback will be
+ * triggered on the UI thread.
+ * @param handler A handler for the thread the callback should be called on. If null, the
+ * callback will be called on the UI thread.
+ * @throws NotFoundException Throws NotFoundException if the given ID does not exist.
+ */
+ public static void getFont(@NonNull Context context, @FontRes int id,
+ @NonNull FontCallback fontCallback, @Nullable Handler handler)
+ throws NotFoundException {
+ Preconditions.checkNotNull(fontCallback);
+ if (context.isRestricted()) {
+ fontCallback.callbackFailAsync(
+ FontRequestCallback.FAIL_REASON_SECURITY_VIOLATION, handler);
+ return;
+ }
+ loadFont(context, id, new TypedValue(), Typeface.NORMAL, fontCallback, handler,
+ false /* isXmlRequest */);
+ }
+
+ /**
+ * Used by TintTypedArray.
+ *
+ * @hide
+ */
+ @RestrictTo(LIBRARY_GROUP)
+ public static Typeface getFont(@NonNull Context context, @FontRes int id, TypedValue value,
+ int style, @Nullable FontCallback fontCallback) throws NotFoundException {
+ if (context.isRestricted()) {
+ return null;
+ }
+ return loadFont(context, id, value, style, fontCallback, null /* handler */,
+ true /* isXmlRequest */);
+ }
+
+ /**
+ *
+ * @param context The Context to get Resources from
+ * @param id The Resource id to load
+ * @param value A TypedValue to use in the fetching
+ * @param style The font style to load
+ * @param fontCallback A callback to trigger when the font is fetched or an error occurs
+ * @param handler A handler to the thread the callback should be called on
+ * @param isRequestFromLayoutInflator Whether this request originated from XML. This is used to
+ * determine if we use or ignore the fontProviderFetchStrategy attribute in
+ * font provider XML fonts.
+ * @return
+ */
+ private static Typeface loadFont(@NonNull Context context, int id, TypedValue value,
+ int style, @Nullable FontCallback fontCallback, @Nullable Handler handler,
+ boolean isRequestFromLayoutInflator) {
+ final Resources resources = context.getResources();
+ resources.getValue(id, value, true);
+ Typeface typeface = loadFont(context, resources, value, id, style, fontCallback, handler,
+ isRequestFromLayoutInflator);
+ if (typeface == null && fontCallback == null) {
+ throw new NotFoundException("Font resource ID #0x"
+ + Integer.toHexString(id) + " could not be retrieved.");
+ }
+ return typeface;
+ }
+
+ /**
+ * Load the given font. This method will always return null for asynchronous requests, which
+ * provide a fontCallback, as there is no immediate result. When the callback is not provided,
+ * the request is treated as synchronous and fails if async loading is required.
+ */
+ private static Typeface loadFont(
+ @NonNull Context context, Resources wrapper, TypedValue value, int id, int style,
+ @Nullable FontCallback fontCallback, @Nullable Handler handler,
+ boolean isRequestFromLayoutInflator) {
+ if (value.string == null) {
+ throw new NotFoundException("Resource \"" + wrapper.getResourceName(id) + "\" ("
+ + Integer.toHexString(id) + ") is not a Font: " + value);
+ }
+
+ final String file = value.string.toString();
+ if (!file.startsWith("res/")) {
+ // Early exit if the specified string is unlikely to be a resource path.
+ if (fontCallback != null) {
+ fontCallback.callbackFailAsync(
+ FontRequestCallback.FAIL_REASON_FONT_LOAD_ERROR, handler);
+ }
+ return null;
+ }
+ Typeface typeface = TypefaceCompat.findFromCache(wrapper, id, style);
+
+ if (typeface != null) {
+ if (fontCallback != null) {
+ fontCallback.callbackSuccessAsync(typeface, handler);
+ }
+ return typeface;
+ }
+
+ try {
+ if (file.toLowerCase().endsWith(".xml")) {
+ final XmlResourceParser rp = wrapper.getXml(id);
+ final FamilyResourceEntry familyEntry =
+ FontResourcesParserCompat.parse(rp, wrapper);
+ if (familyEntry == null) {
+ Log.e(TAG, "Failed to find font-family tag");
+ if (fontCallback != null) {
+ fontCallback.callbackFailAsync(
+ FontRequestCallback.FAIL_REASON_FONT_LOAD_ERROR, handler);
+ }
+ return null;
+ }
+ return TypefaceCompat.createFromResourcesFamilyXml(context, familyEntry, wrapper,
+ id, style, fontCallback, handler, isRequestFromLayoutInflator);
+ }
+ typeface = TypefaceCompat.createFromResourcesFontFile(
+ context, wrapper, id, file, style);
+ if (fontCallback != null) {
+ if (typeface != null) {
+ fontCallback.callbackSuccessAsync(typeface, handler);
+ } else {
+ fontCallback.callbackFailAsync(
+ FontRequestCallback.FAIL_REASON_FONT_LOAD_ERROR, handler);
+ }
+ }
+ return typeface;
+ } catch (XmlPullParserException e) {
+ Log.e(TAG, "Failed to parse xml resource " + file, e);
+ } catch (IOException e) {
+ Log.e(TAG, "Failed to read xml resource " + file, e);
+ }
+ if (fontCallback != null) {
+ fontCallback.callbackFailAsync(
+ FontRequestCallback.FAIL_REASON_FONT_LOAD_ERROR, handler);
+ }
+ return null;
+ }
+
+ private ResourcesCompat() {}
+}
diff --git a/compat/java/android/support/v4/content/res/TypedArrayUtils.java b/compat/src/main/java/android/support/v4/content/res/TypedArrayUtils.java
similarity index 86%
rename from compat/java/android/support/v4/content/res/TypedArrayUtils.java
rename to compat/src/main/java/android/support/v4/content/res/TypedArrayUtils.java
index e4d6b29..64cb981 100644
--- a/compat/java/android/support/v4/content/res/TypedArrayUtils.java
+++ b/compat/src/main/java/android/support/v4/content/res/TypedArrayUtils.java
@@ -24,6 +24,7 @@
import android.support.annotation.AnyRes;
import android.support.annotation.ColorInt;
import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.annotation.RestrictTo;
import android.support.annotation.StyleableRes;
import android.util.AttributeSet;
@@ -80,7 +81,7 @@
* {@code defaultValue} if it does not exist.
*/
public static boolean getNamedBoolean(@NonNull TypedArray a, @NonNull XmlPullParser parser,
- String attrName, @StyleableRes int resId, boolean defaultValue) {
+ @NonNull String attrName, @StyleableRes int resId, boolean defaultValue) {
final boolean hasAttr = hasAttribute(parser, attrName);
if (!hasAttr) {
return defaultValue;
@@ -97,7 +98,7 @@
* {@code defaultValue} if it does not exist.
*/
public static int getNamedInt(@NonNull TypedArray a, @NonNull XmlPullParser parser,
- String attrName, @StyleableRes int resId, int defaultValue) {
+ @NonNull String attrName, @StyleableRes int resId, int defaultValue) {
final boolean hasAttr = hasAttribute(parser, attrName);
if (!hasAttr) {
return defaultValue;
@@ -115,7 +116,7 @@
*/
@ColorInt
public static int getNamedColor(@NonNull TypedArray a, @NonNull XmlPullParser parser,
- String attrName, @StyleableRes int resId, @ColorInt int defaultValue) {
+ @NonNull String attrName, @StyleableRes int resId, @ColorInt int defaultValue) {
final boolean hasAttr = hasAttribute(parser, attrName);
if (!hasAttr) {
return defaultValue;
@@ -133,7 +134,7 @@
*/
@AnyRes
public static int getNamedResourceId(@NonNull TypedArray a, @NonNull XmlPullParser parser,
- String attrName, @StyleableRes int resId, @AnyRes int defaultValue) {
+ @NonNull String attrName, @StyleableRes int resId, @AnyRes int defaultValue) {
final boolean hasAttr = hasAttribute(parser, attrName);
if (!hasAttr) {
return defaultValue;
@@ -149,8 +150,9 @@
* @return a string value in the {@link TypedArray} with the specified {@code resId}, or
* null if it does not exist.
*/
+ @Nullable
public static String getNamedString(@NonNull TypedArray a, @NonNull XmlPullParser parser,
- String attrName, @StyleableRes int resId) {
+ @NonNull String attrName, @StyleableRes int resId) {
final boolean hasAttr = hasAttribute(parser, attrName);
if (!hasAttr) {
return null;
@@ -164,8 +166,9 @@
* and return a temporary object holding its data. This object is only
* valid until the next call on to {@link TypedArray}.
*/
- public static TypedValue peekNamedValue(TypedArray a, XmlPullParser parser, String attrName,
- int resId) {
+ @Nullable
+ public static TypedValue peekNamedValue(@NonNull TypedArray a, @NonNull XmlPullParser parser,
+ @NonNull String attrName, int resId) {
final boolean hasAttr = hasAttribute(parser, attrName);
if (!hasAttr) {
return null;
@@ -178,8 +181,9 @@
* Obtains styled attributes from the theme, if available, or unstyled
* resources if the theme is null.
*/
- public static TypedArray obtainAttributes(
- Resources res, Resources.Theme theme, AttributeSet set, int[] attrs) {
+ @NonNull
+ public static TypedArray obtainAttributes(@NonNull Resources res,
+ @Nullable Resources.Theme theme, @NonNull AttributeSet set, @NonNull int[] attrs) {
if (theme == null) {
return res.obtainAttributes(set, attrs);
}
@@ -190,7 +194,7 @@
* @return a boolean value of {@code index}. If it does not exist, a boolean value of
* {@code fallbackIndex}. If it still does not exist, {@code defaultValue}.
*/
- public static boolean getBoolean(TypedArray a, @StyleableRes int index,
+ public static boolean getBoolean(@NonNull TypedArray a, @StyleableRes int index,
@StyleableRes int fallbackIndex, boolean defaultValue) {
boolean val = a.getBoolean(fallbackIndex, defaultValue);
return a.getBoolean(index, val);
@@ -200,7 +204,8 @@
* @return a drawable value of {@code index}. If it does not exist, a drawable value of
* {@code fallbackIndex}. If it still does not exist, {@code null}.
*/
- public static Drawable getDrawable(TypedArray a, @StyleableRes int index,
+ @Nullable
+ public static Drawable getDrawable(@NonNull TypedArray a, @StyleableRes int index,
@StyleableRes int fallbackIndex) {
Drawable val = a.getDrawable(index);
if (val == null) {
@@ -213,7 +218,7 @@
* @return an int value of {@code index}. If it does not exist, an int value of
* {@code fallbackIndex}. If it still does not exist, {@code defaultValue}.
*/
- public static int getInt(TypedArray a, @StyleableRes int index,
+ public static int getInt(@NonNull TypedArray a, @StyleableRes int index,
@StyleableRes int fallbackIndex, int defaultValue) {
int val = a.getInt(fallbackIndex, defaultValue);
return a.getInt(index, val);
@@ -224,7 +229,7 @@
* {@code fallbackIndex}. If it still does not exist, {@code defaultValue}.
*/
@AnyRes
- public static int getResourceId(TypedArray a, @StyleableRes int index,
+ public static int getResourceId(@NonNull TypedArray a, @StyleableRes int index,
@StyleableRes int fallbackIndex, @AnyRes int defaultValue) {
int val = a.getResourceId(fallbackIndex, defaultValue);
return a.getResourceId(index, val);
@@ -234,7 +239,8 @@
* @return a string value of {@code index}. If it does not exist, a string value of
* {@code fallbackIndex}. If it still does not exist, {@code null}.
*/
- public static String getString(TypedArray a, @StyleableRes int index,
+ @Nullable
+ public static String getString(@NonNull TypedArray a, @StyleableRes int index,
@StyleableRes int fallbackIndex) {
String val = a.getString(index);
if (val == null) {
@@ -249,7 +255,8 @@
* @return a text value of {@code index}. If it does not exist, a text value of
* {@code fallbackIndex}. If it still does not exist, {@code null}.
*/
- public static CharSequence getText(TypedArray a, @StyleableRes int index,
+ @Nullable
+ public static CharSequence getText(@NonNull TypedArray a, @StyleableRes int index,
@StyleableRes int fallbackIndex) {
CharSequence val = a.getText(index);
if (val == null) {
@@ -264,7 +271,8 @@
* @return a string array value of {@code index}. If it does not exist, a string array value
* of {@code fallbackIndex}. If it still does not exist, {@code null}.
*/
- public static CharSequence[] getTextArray(TypedArray a, @StyleableRes int index,
+ @Nullable
+ public static CharSequence[] getTextArray(@NonNull TypedArray a, @StyleableRes int index,
@StyleableRes int fallbackIndex) {
CharSequence[] val = a.getTextArray(index);
if (val == null) {
@@ -277,7 +285,7 @@
* @return The resource ID value in the {@code context} specified by {@code attr}. If it does
* not exist, {@code fallbackAttr}.
*/
- public static int getAttr(Context context, int attr, int fallbackAttr) {
+ public static int getAttr(@NonNull Context context, int attr, int fallbackAttr) {
TypedValue value = new TypedValue();
context.getTheme().resolveAttribute(attr, value, true);
if (value.resourceId != 0) {
diff --git a/compat/java/android/support/v4/database/DatabaseUtilsCompat.java b/compat/src/main/java/android/support/v4/database/DatabaseUtilsCompat.java
similarity index 100%
rename from compat/java/android/support/v4/database/DatabaseUtilsCompat.java
rename to compat/src/main/java/android/support/v4/database/DatabaseUtilsCompat.java
diff --git a/compat/java/android/support/v4/database/package.html b/compat/src/main/java/android/support/v4/database/package.html
similarity index 100%
rename from compat/java/android/support/v4/database/package.html
rename to compat/src/main/java/android/support/v4/database/package.html
diff --git a/compat/java/android/support/v4/graphics/BitmapCompat.java b/compat/src/main/java/android/support/v4/graphics/BitmapCompat.java
similarity index 90%
rename from compat/java/android/support/v4/graphics/BitmapCompat.java
rename to compat/src/main/java/android/support/v4/graphics/BitmapCompat.java
index 20caf80..acc37b1 100644
--- a/compat/java/android/support/v4/graphics/BitmapCompat.java
+++ b/compat/src/main/java/android/support/v4/graphics/BitmapCompat.java
@@ -17,6 +17,7 @@
import android.graphics.Bitmap;
import android.os.Build;
+import android.support.annotation.NonNull;
import android.support.annotation.RequiresApi;
/**
@@ -71,11 +72,11 @@
}
}
- public static boolean hasMipMap(Bitmap bitmap) {
+ public static boolean hasMipMap(@NonNull Bitmap bitmap) {
return IMPL.hasMipMap(bitmap);
}
- public static void setHasMipMap(Bitmap bitmap, boolean hasMipMap) {
+ public static void setHasMipMap(@NonNull Bitmap bitmap, boolean hasMipMap) {
IMPL.setHasMipMap(bitmap, hasMipMap);
}
@@ -86,7 +87,7 @@
* @param bitmap the bitmap in which to return its allocation size
* @return the allocation size in bytes
*/
- public static int getAllocationByteCount(Bitmap bitmap) {
+ public static int getAllocationByteCount(@NonNull Bitmap bitmap) {
return IMPL.getAllocationByteCount(bitmap);
}
diff --git a/compat/java/android/support/v4/graphics/PaintCompat.java b/compat/src/main/java/android/support/v4/graphics/PaintCompat.java
similarity index 100%
rename from compat/java/android/support/v4/graphics/PaintCompat.java
rename to compat/src/main/java/android/support/v4/graphics/PaintCompat.java
diff --git a/compat/java/android/support/v4/graphics/PathParser.java b/compat/src/main/java/android/support/v4/graphics/PathParser.java
similarity index 100%
rename from compat/java/android/support/v4/graphics/PathParser.java
rename to compat/src/main/java/android/support/v4/graphics/PathParser.java
diff --git a/compat/java/android/support/v4/graphics/TypefaceCompat.java b/compat/src/main/java/android/support/v4/graphics/TypefaceCompat.java
similarity index 73%
rename from compat/java/android/support/v4/graphics/TypefaceCompat.java
rename to compat/src/main/java/android/support/v4/graphics/TypefaceCompat.java
index 6d114b6..3c55df6 100644
--- a/compat/java/android/support/v4/graphics/TypefaceCompat.java
+++ b/compat/src/main/java/android/support/v4/graphics/TypefaceCompat.java
@@ -23,16 +23,18 @@
import android.graphics.Typeface;
import android.os.Build;
import android.os.CancellationSignal;
+import android.os.Handler;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.RestrictTo;
+import android.support.v4.content.res.FontResourcesParserCompat;
import android.support.v4.content.res.FontResourcesParserCompat.FamilyResourceEntry;
import android.support.v4.content.res.FontResourcesParserCompat.FontFamilyFilesResourceEntry;
import android.support.v4.content.res.FontResourcesParserCompat.ProviderResourceEntry;
+import android.support.v4.content.res.ResourcesCompat;
import android.support.v4.provider.FontsContractCompat;
import android.support.v4.provider.FontsContractCompat.FontInfo;
import android.support.v4.util.LruCache;
-import android.widget.TextView;
/**
* Helper for accessing features in {@link Typeface}.
@@ -82,7 +84,8 @@
*
* @return null if not found.
*/
- public static Typeface findFromCache(Resources resources, int id, int style) {
+ @Nullable
+ public static Typeface findFromCache(@NonNull Resources resources, int id, int style) {
return sTypefaceCache.get(createResourceUid(resources, id, style));
}
@@ -103,18 +106,35 @@
*
* @return null if failed to create.
*/
+ @Nullable
public static Typeface createFromResourcesFamilyXml(
- Context context, FamilyResourceEntry entry, Resources resources, int id, int style,
- @Nullable TextView targetView) {
+ @NonNull Context context, @NonNull FamilyResourceEntry entry,
+ @NonNull Resources resources, int id, int style,
+ @Nullable ResourcesCompat.FontCallback fontCallback, @Nullable Handler handler,
+ boolean isRequestFromLayoutInflator) {
Typeface typeface;
if (entry instanceof ProviderResourceEntry) {
ProviderResourceEntry providerEntry = (ProviderResourceEntry) entry;
- typeface = FontsContractCompat.getFontSync(context,
- providerEntry.getRequest(), targetView, providerEntry.getFetchStrategy(),
- providerEntry.getTimeout(), style);
+ final boolean isBlocking = isRequestFromLayoutInflator
+ ? providerEntry.getFetchStrategy()
+ == FontResourcesParserCompat.FETCH_STRATEGY_BLOCKING
+ : fontCallback == null;
+ final int timeout = isRequestFromLayoutInflator ? providerEntry.getTimeout()
+ : FontResourcesParserCompat.INFINITE_TIMEOUT_VALUE;
+ typeface = FontsContractCompat.getFontSync(context, providerEntry.getRequest(),
+ fontCallback, handler, isBlocking, timeout, style);
} else {
typeface = sTypefaceCompatImpl.createFromFontFamilyFilesResourceEntry(
context, (FontFamilyFilesResourceEntry) entry, resources, style);
+ if (fontCallback != null) {
+ if (typeface != null) {
+ fontCallback.callbackSuccessAsync(typeface, handler);
+ } else {
+ fontCallback.callbackFailAsync(
+ FontsContractCompat.FontRequestCallback.FAIL_REASON_FONT_LOAD_ERROR,
+ handler);
+ }
+ }
}
if (typeface != null) {
sTypefaceCache.put(createResourceUid(resources, id, style), typeface);
@@ -127,11 +147,13 @@
*/
@Nullable
public static Typeface createFromResourcesFontFile(
- Context context, Resources resources, int id, String path, int style) {
+ @NonNull Context context, @NonNull Resources resources, int id, String path,
+ int style) {
Typeface typeface = sTypefaceCompatImpl.createFromResourcesFontFile(
context, resources, id, path, style);
if (typeface != null) {
- sTypefaceCache.put(createResourceUid(resources, id, style), typeface);
+ final String resourceUid = createResourceUid(resources, id, style);
+ sTypefaceCache.put(resourceUid, typeface);
}
return typeface;
}
@@ -139,7 +161,8 @@
/**
* Create a Typeface from a given FontInfo list and a map that matches them to ByteBuffers.
*/
- public static Typeface createFromFontInfo(Context context,
+ @Nullable
+ public static Typeface createFromFontInfo(@NonNull Context context,
@Nullable CancellationSignal cancellationSignal, @NonNull FontInfo[] fonts, int style) {
return sTypefaceCompatImpl.createFromFontInfo(context, cancellationSignal, fonts, style);
}
diff --git a/compat/java/android/support/v4/graphics/TypefaceCompatApi21Impl.java b/compat/src/main/java/android/support/v4/graphics/TypefaceCompatApi21Impl.java
similarity index 100%
rename from compat/java/android/support/v4/graphics/TypefaceCompatApi21Impl.java
rename to compat/src/main/java/android/support/v4/graphics/TypefaceCompatApi21Impl.java
diff --git a/compat/java/android/support/v4/graphics/TypefaceCompatApi24Impl.java b/compat/src/main/java/android/support/v4/graphics/TypefaceCompatApi24Impl.java
similarity index 97%
rename from compat/java/android/support/v4/graphics/TypefaceCompatApi24Impl.java
rename to compat/src/main/java/android/support/v4/graphics/TypefaceCompatApi24Impl.java
index a107859..89a6ec4 100644
--- a/compat/java/android/support/v4/graphics/TypefaceCompatApi24Impl.java
+++ b/compat/src/main/java/android/support/v4/graphics/TypefaceCompatApi24Impl.java
@@ -145,7 +145,8 @@
return null;
}
}
- return createFromFamiliesWithDefault(family);
+ final Typeface typeface = createFromFamiliesWithDefault(family);
+ return Typeface.create(typeface, style);
}
@Override
diff --git a/compat/java/android/support/v4/graphics/TypefaceCompatApi26Impl.java b/compat/src/main/java/android/support/v4/graphics/TypefaceCompatApi26Impl.java
similarity index 98%
rename from compat/java/android/support/v4/graphics/TypefaceCompatApi26Impl.java
rename to compat/src/main/java/android/support/v4/graphics/TypefaceCompatApi26Impl.java
index c7066c8..1b55a2e 100644
--- a/compat/java/android/support/v4/graphics/TypefaceCompatApi26Impl.java
+++ b/compat/src/main/java/android/support/v4/graphics/TypefaceCompatApi26Impl.java
@@ -118,7 +118,7 @@
*/
private static boolean isFontFamilyPrivateAPIAvailable() {
if (sAddFontFromAssetManager == null) {
- Log.w(TAG, "Unable to collect necessary private methods."
+ Log.w(TAG, "Unable to collect necessary private methods. "
+ "Fallback to legacy implementation.");
}
return sAddFontFromAssetManager != null;
@@ -273,7 +273,8 @@
if (!freeze(fontFamily)) {
return null;
}
- return createFromFamiliesWithDefault(fontFamily);
+ final Typeface typeface = createFromFamiliesWithDefault(fontFamily);
+ return Typeface.create(typeface, style);
}
/**
diff --git a/compat/java/android/support/v4/graphics/TypefaceCompatBaseImpl.java b/compat/src/main/java/android/support/v4/graphics/TypefaceCompatBaseImpl.java
similarity index 100%
rename from compat/java/android/support/v4/graphics/TypefaceCompatBaseImpl.java
rename to compat/src/main/java/android/support/v4/graphics/TypefaceCompatBaseImpl.java
diff --git a/compat/java/android/support/v4/graphics/TypefaceCompatUtil.java b/compat/src/main/java/android/support/v4/graphics/TypefaceCompatUtil.java
similarity index 100%
rename from compat/java/android/support/v4/graphics/TypefaceCompatUtil.java
rename to compat/src/main/java/android/support/v4/graphics/TypefaceCompatUtil.java
diff --git a/compat/java/android/support/v4/graphics/drawable/DrawableCompat.java b/compat/src/main/java/android/support/v4/graphics/drawable/DrawableCompat.java
similarity index 100%
rename from compat/java/android/support/v4/graphics/drawable/DrawableCompat.java
rename to compat/src/main/java/android/support/v4/graphics/drawable/DrawableCompat.java
diff --git a/compat/java/android/support/v4/graphics/drawable/DrawableWrapper.java b/compat/src/main/java/android/support/v4/graphics/drawable/DrawableWrapper.java
similarity index 100%
rename from compat/java/android/support/v4/graphics/drawable/DrawableWrapper.java
rename to compat/src/main/java/android/support/v4/graphics/drawable/DrawableWrapper.java
diff --git a/compat/java/android/support/v4/graphics/drawable/DrawableWrapperApi14.java b/compat/src/main/java/android/support/v4/graphics/drawable/DrawableWrapperApi14.java
similarity index 100%
rename from compat/java/android/support/v4/graphics/drawable/DrawableWrapperApi14.java
rename to compat/src/main/java/android/support/v4/graphics/drawable/DrawableWrapperApi14.java
diff --git a/compat/java/android/support/v4/graphics/drawable/DrawableWrapperApi19.java b/compat/src/main/java/android/support/v4/graphics/drawable/DrawableWrapperApi19.java
similarity index 100%
rename from compat/java/android/support/v4/graphics/drawable/DrawableWrapperApi19.java
rename to compat/src/main/java/android/support/v4/graphics/drawable/DrawableWrapperApi19.java
diff --git a/compat/java/android/support/v4/graphics/drawable/DrawableWrapperApi21.java b/compat/src/main/java/android/support/v4/graphics/drawable/DrawableWrapperApi21.java
similarity index 100%
rename from compat/java/android/support/v4/graphics/drawable/DrawableWrapperApi21.java
rename to compat/src/main/java/android/support/v4/graphics/drawable/DrawableWrapperApi21.java
diff --git a/compat/java/android/support/v4/graphics/drawable/IconCompat.java b/compat/src/main/java/android/support/v4/graphics/drawable/IconCompat.java
similarity index 100%
rename from compat/java/android/support/v4/graphics/drawable/IconCompat.java
rename to compat/src/main/java/android/support/v4/graphics/drawable/IconCompat.java
diff --git a/compat/java/android/support/v4/graphics/drawable/TintAwareDrawable.java b/compat/src/main/java/android/support/v4/graphics/drawable/TintAwareDrawable.java
similarity index 100%
rename from compat/java/android/support/v4/graphics/drawable/TintAwareDrawable.java
rename to compat/src/main/java/android/support/v4/graphics/drawable/TintAwareDrawable.java
diff --git a/compat/java/android/support/v4/hardware/display/DisplayManagerCompat.java b/compat/src/main/java/android/support/v4/hardware/display/DisplayManagerCompat.java
similarity index 95%
rename from compat/java/android/support/v4/hardware/display/DisplayManagerCompat.java
rename to compat/src/main/java/android/support/v4/hardware/display/DisplayManagerCompat.java
index 50d246b..22d39ac 100644
--- a/compat/java/android/support/v4/hardware/display/DisplayManagerCompat.java
+++ b/compat/src/main/java/android/support/v4/hardware/display/DisplayManagerCompat.java
@@ -19,6 +19,8 @@
import android.content.Context;
import android.hardware.display.DisplayManager;
import android.os.Build;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
import android.view.Display;
import android.view.WindowManager;
@@ -52,7 +54,8 @@
/**
* Gets an instance of the display manager given the context.
*/
- public static DisplayManagerCompat getInstance(Context context) {
+ @NonNull
+ public static DisplayManagerCompat getInstance(@NonNull Context context) {
synchronized (sInstances) {
DisplayManagerCompat instance = sInstances.get(context);
if (instance == null) {
@@ -76,6 +79,7 @@
* @param displayId The logical display id.
* @return The display object, or null if there is no valid display with the given id.
*/
+ @Nullable
public abstract Display getDisplay(int displayId);
/**
@@ -83,6 +87,7 @@
*
* @return An array containing all displays.
*/
+ @NonNull
public abstract Display[] getDisplays();
/**
@@ -101,6 +106,7 @@
*
* @see #DISPLAY_CATEGORY_PRESENTATION
*/
+ @NonNull
public abstract Display[] getDisplays(String category);
private static class DisplayManagerCompatApi14Impl extends DisplayManagerCompat {
diff --git a/compat/java/android/support/v4/hardware/fingerprint/FingerprintManagerCompat.java b/compat/src/main/java/android/support/v4/hardware/fingerprint/FingerprintManagerCompat.java
similarity index 96%
rename from compat/java/android/support/v4/hardware/fingerprint/FingerprintManagerCompat.java
rename to compat/src/main/java/android/support/v4/hardware/fingerprint/FingerprintManagerCompat.java
index 5e23c68..68f9476 100644
--- a/compat/java/android/support/v4/hardware/fingerprint/FingerprintManagerCompat.java
+++ b/compat/src/main/java/android/support/v4/hardware/fingerprint/FingerprintManagerCompat.java
@@ -44,7 +44,8 @@
private final Context mContext;
/** Get a {@link FingerprintManagerCompat} instance for a provided context. */
- public static FingerprintManagerCompat from(Context context) {
+ @NonNull
+ public static FingerprintManagerCompat from(@NonNull Context context) {
return new FingerprintManagerCompat(context);
}
@@ -119,8 +120,9 @@
}
}
+ @Nullable
@RequiresApi(23)
- private static FingerprintManager getFingerprintManagerOrNull(Context context) {
+ private static FingerprintManager getFingerprintManagerOrNull(@NonNull Context context) {
if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)) {
return context.getSystemService(FingerprintManager.class);
} else {
@@ -195,20 +197,20 @@
private final Cipher mCipher;
private final Mac mMac;
- public CryptoObject(Signature signature) {
+ public CryptoObject(@NonNull Signature signature) {
mSignature = signature;
mCipher = null;
mMac = null;
}
- public CryptoObject(Cipher cipher) {
+ public CryptoObject(@NonNull Cipher cipher) {
mCipher = cipher;
mSignature = null;
mMac = null;
}
- public CryptoObject(Mac mac) {
+ public CryptoObject(@NonNull Mac mac) {
mMac = mac;
mCipher = null;
mSignature = null;
@@ -218,18 +220,21 @@
* Get {@link Signature} object.
* @return {@link Signature} object or null if this doesn't contain one.
*/
+ @Nullable
public Signature getSignature() { return mSignature; }
/**
* Get {@link Cipher} object.
* @return {@link Cipher} object or null if this doesn't contain one.
*/
+ @Nullable
public Cipher getCipher() { return mCipher; }
/**
* Get {@link Mac} object.
* @return {@link Mac} object or null if this doesn't contain one.
*/
+ @Nullable
public Mac getMac() { return mMac; }
}
diff --git a/compat/java/android/support/v4/internal/package-info.java b/compat/src/main/java/android/support/v4/internal/package-info.java
similarity index 100%
rename from compat/java/android/support/v4/internal/package-info.java
rename to compat/src/main/java/android/support/v4/internal/package-info.java
diff --git a/compat/java/android/support/v4/internal/view/SupportMenu.java b/compat/src/main/java/android/support/v4/internal/view/SupportMenu.java
similarity index 100%
rename from compat/java/android/support/v4/internal/view/SupportMenu.java
rename to compat/src/main/java/android/support/v4/internal/view/SupportMenu.java
diff --git a/compat/java/android/support/v4/internal/view/SupportMenuItem.java b/compat/src/main/java/android/support/v4/internal/view/SupportMenuItem.java
similarity index 100%
rename from compat/java/android/support/v4/internal/view/SupportMenuItem.java
rename to compat/src/main/java/android/support/v4/internal/view/SupportMenuItem.java
diff --git a/compat/java/android/support/v4/internal/view/SupportSubMenu.java b/compat/src/main/java/android/support/v4/internal/view/SupportSubMenu.java
similarity index 100%
rename from compat/java/android/support/v4/internal/view/SupportSubMenu.java
rename to compat/src/main/java/android/support/v4/internal/view/SupportSubMenu.java
diff --git a/compat/java/android/support/v4/net/ConnectivityManagerCompat.java b/compat/src/main/java/android/support/v4/net/ConnectivityManagerCompat.java
similarity index 93%
rename from compat/java/android/support/v4/net/ConnectivityManagerCompat.java
rename to compat/src/main/java/android/support/v4/net/ConnectivityManagerCompat.java
index cdddb68..c08cac8 100644
--- a/compat/java/android/support/v4/net/ConnectivityManagerCompat.java
+++ b/compat/src/main/java/android/support/v4/net/ConnectivityManagerCompat.java
@@ -32,6 +32,8 @@
import android.net.NetworkInfo;
import android.os.Build;
import android.support.annotation.IntDef;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.annotation.RequiresPermission;
import android.support.annotation.RestrictTo;
@@ -91,7 +93,7 @@
*/
@SuppressWarnings("deprecation")
@RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE)
- public static boolean isActiveNetworkMetered(ConnectivityManager cm) {
+ public static boolean isActiveNetworkMetered(@NonNull ConnectivityManager cm) {
if (Build.VERSION.SDK_INT >= 16) {
return cm.isActiveNetworkMetered();
} else {
@@ -128,8 +130,10 @@
* potentially-stale value from
* {@link ConnectivityManager#EXTRA_NETWORK_INFO}. May be {@code null}.
*/
+ @Nullable
@RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE)
- public static NetworkInfo getNetworkInfoFromBroadcast(ConnectivityManager cm, Intent intent) {
+ public static NetworkInfo getNetworkInfoFromBroadcast(@NonNull ConnectivityManager cm,
+ @NonNull Intent intent) {
final NetworkInfo info = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
if (info != null) {
return cm.getNetworkInfo(info.getType());
@@ -147,7 +151,7 @@
* or {@link #RESTRICT_BACKGROUND_STATUS_WHITELISTED}
*/
@RestrictBackgroundStatus
- public static int getRestrictBackgroundStatus(ConnectivityManager cm) {
+ public static int getRestrictBackgroundStatus(@NonNull ConnectivityManager cm) {
if (Build.VERSION.SDK_INT >= 24) {
return cm.getRestrictBackgroundStatus();
} else {
diff --git a/compat/java/android/support/v4/net/DatagramSocketWrapper.java b/compat/src/main/java/android/support/v4/net/DatagramSocketWrapper.java
similarity index 100%
rename from compat/java/android/support/v4/net/DatagramSocketWrapper.java
rename to compat/src/main/java/android/support/v4/net/DatagramSocketWrapper.java
diff --git a/compat/java/android/support/v4/net/TrafficStatsCompat.java b/compat/src/main/java/android/support/v4/net/TrafficStatsCompat.java
similarity index 95%
rename from compat/java/android/support/v4/net/TrafficStatsCompat.java
rename to compat/src/main/java/android/support/v4/net/TrafficStatsCompat.java
index 1049fa5..b74b8d0 100644
--- a/compat/java/android/support/v4/net/TrafficStatsCompat.java
+++ b/compat/src/main/java/android/support/v4/net/TrafficStatsCompat.java
@@ -19,6 +19,7 @@
import android.net.TrafficStats;
import android.os.Build;
import android.os.ParcelFileDescriptor;
+import android.support.annotation.NonNull;
import java.net.DatagramSocket;
import java.net.Socket;
@@ -131,7 +132,7 @@
*
* @see #setThreadStatsTag(int)
*/
- public static void tagDatagramSocket(DatagramSocket socket) throws SocketException {
+ public static void tagDatagramSocket(@NonNull DatagramSocket socket) throws SocketException {
if (Build.VERSION.SDK_INT >= 24) {
TrafficStats.tagDatagramSocket(socket);
} else {
@@ -148,7 +149,7 @@
/**
* Remove any statistics parameters from the given {@link DatagramSocket}.
*/
- public static void untagDatagramSocket(DatagramSocket socket) throws SocketException {
+ public static void untagDatagramSocket(@NonNull DatagramSocket socket) throws SocketException {
if (Build.VERSION.SDK_INT >= 24) {
TrafficStats.untagDatagramSocket(socket);
} else {
diff --git a/compat/java/android/support/v4/os/BuildCompat.java b/compat/src/main/java/android/support/v4/os/BuildCompat.java
similarity index 100%
rename from compat/java/android/support/v4/os/BuildCompat.java
rename to compat/src/main/java/android/support/v4/os/BuildCompat.java
diff --git a/compat/java/android/support/v4/os/CancellationSignal.java b/compat/src/main/java/android/support/v4/os/CancellationSignal.java
similarity index 100%
rename from compat/java/android/support/v4/os/CancellationSignal.java
rename to compat/src/main/java/android/support/v4/os/CancellationSignal.java
diff --git a/compat/java/android/support/v4/os/ConfigurationCompat.java b/compat/src/main/java/android/support/v4/os/ConfigurationCompat.java
similarity index 100%
rename from compat/java/android/support/v4/os/ConfigurationCompat.java
rename to compat/src/main/java/android/support/v4/os/ConfigurationCompat.java
diff --git a/compat/java/android/support/v4/os/EnvironmentCompat.java b/compat/src/main/java/android/support/v4/os/EnvironmentCompat.java
similarity index 100%
rename from compat/java/android/support/v4/os/EnvironmentCompat.java
rename to compat/src/main/java/android/support/v4/os/EnvironmentCompat.java
diff --git a/compat/java/android/support/v4/os/IResultReceiver.aidl b/compat/src/main/java/android/support/v4/os/IResultReceiver.aidl
similarity index 100%
rename from compat/java/android/support/v4/os/IResultReceiver.aidl
rename to compat/src/main/java/android/support/v4/os/IResultReceiver.aidl
diff --git a/compat/java/android/support/v4/os/LocaleHelper.java b/compat/src/main/java/android/support/v4/os/LocaleHelper.java
similarity index 100%
rename from compat/java/android/support/v4/os/LocaleHelper.java
rename to compat/src/main/java/android/support/v4/os/LocaleHelper.java
diff --git a/compat/java/android/support/v4/os/LocaleListCompat.java b/compat/src/main/java/android/support/v4/os/LocaleListCompat.java
similarity index 100%
rename from compat/java/android/support/v4/os/LocaleListCompat.java
rename to compat/src/main/java/android/support/v4/os/LocaleListCompat.java
diff --git a/compat/java/android/support/v4/os/LocaleListHelper.java b/compat/src/main/java/android/support/v4/os/LocaleListHelper.java
similarity index 100%
rename from compat/java/android/support/v4/os/LocaleListHelper.java
rename to compat/src/main/java/android/support/v4/os/LocaleListHelper.java
diff --git a/compat/java/android/support/v4/os/LocaleListInterface.java b/compat/src/main/java/android/support/v4/os/LocaleListInterface.java
similarity index 100%
rename from compat/java/android/support/v4/os/LocaleListInterface.java
rename to compat/src/main/java/android/support/v4/os/LocaleListInterface.java
diff --git a/compat/java/android/support/v4/os/OperationCanceledException.java b/compat/src/main/java/android/support/v4/os/OperationCanceledException.java
similarity index 100%
rename from compat/java/android/support/v4/os/OperationCanceledException.java
rename to compat/src/main/java/android/support/v4/os/OperationCanceledException.java
diff --git a/compat/java/android/support/v4/os/ParcelableCompat.java b/compat/src/main/java/android/support/v4/os/ParcelableCompat.java
similarity index 100%
rename from compat/java/android/support/v4/os/ParcelableCompat.java
rename to compat/src/main/java/android/support/v4/os/ParcelableCompat.java
diff --git a/compat/java/android/support/v4/os/ParcelableCompatCreatorCallbacks.java b/compat/src/main/java/android/support/v4/os/ParcelableCompatCreatorCallbacks.java
similarity index 100%
rename from compat/java/android/support/v4/os/ParcelableCompatCreatorCallbacks.java
rename to compat/src/main/java/android/support/v4/os/ParcelableCompatCreatorCallbacks.java
diff --git a/compat/java/android/support/v4/os/ResultReceiver.aidl b/compat/src/main/java/android/support/v4/os/ResultReceiver.aidl
similarity index 100%
rename from compat/java/android/support/v4/os/ResultReceiver.aidl
rename to compat/src/main/java/android/support/v4/os/ResultReceiver.aidl
diff --git a/compat/java/android/support/v4/os/ResultReceiver.java b/compat/src/main/java/android/support/v4/os/ResultReceiver.java
similarity index 100%
rename from compat/java/android/support/v4/os/ResultReceiver.java
rename to compat/src/main/java/android/support/v4/os/ResultReceiver.java
diff --git a/compat/java/android/support/v4/os/TraceCompat.java b/compat/src/main/java/android/support/v4/os/TraceCompat.java
similarity index 100%
rename from compat/java/android/support/v4/os/TraceCompat.java
rename to compat/src/main/java/android/support/v4/os/TraceCompat.java
diff --git a/compat/java/android/support/v4/os/UserManagerCompat.java b/compat/src/main/java/android/support/v4/os/UserManagerCompat.java
similarity index 100%
rename from compat/java/android/support/v4/os/UserManagerCompat.java
rename to compat/src/main/java/android/support/v4/os/UserManagerCompat.java
diff --git a/compat/java/android/support/v4/os/package.html b/compat/src/main/java/android/support/v4/os/package.html
similarity index 100%
rename from compat/java/android/support/v4/os/package.html
rename to compat/src/main/java/android/support/v4/os/package.html
diff --git a/compat/java/android/support/v4/provider/FontRequest.java b/compat/src/main/java/android/support/v4/provider/FontRequest.java
similarity index 99%
rename from compat/java/android/support/v4/provider/FontRequest.java
rename to compat/src/main/java/android/support/v4/provider/FontRequest.java
index cb32f06..b14f85e 100644
--- a/compat/java/android/support/v4/provider/FontRequest.java
+++ b/compat/src/main/java/android/support/v4/provider/FontRequest.java
@@ -89,6 +89,7 @@
* Returns the selected font provider's authority. This tells the system what font provider
* it should request the font from.
*/
+ @NonNull
public String getProviderAuthority() {
return mProviderAuthority;
}
@@ -97,6 +98,7 @@
* Returns the selected font provider's package. This helps the system verify that the provider
* identified by the given authority is the one requested.
*/
+ @NonNull
public String getProviderPackage() {
return mProviderPackage;
}
@@ -105,6 +107,7 @@
* Returns the query string. Refer to your font provider's documentation on the format of this
* string.
*/
+ @NonNull
public String getQuery() {
return mQuery;
}
diff --git a/compat/java/android/support/v4/provider/FontsContractCompat.java b/compat/src/main/java/android/support/v4/provider/FontsContractCompat.java
similarity index 87%
rename from compat/java/android/support/v4/provider/FontsContractCompat.java
rename to compat/src/main/java/android/support/v4/provider/FontsContractCompat.java
index 6ad46a1..0926186 100644
--- a/compat/java/android/support/v4/provider/FontsContractCompat.java
+++ b/compat/src/main/java/android/support/v4/provider/FontsContractCompat.java
@@ -17,7 +17,6 @@
package android.support.v4.provider;
import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-import static android.support.v4.content.res.FontResourcesParserCompat.FetchStrategy;
import android.annotation.SuppressLint;
import android.content.ContentResolver;
@@ -46,17 +45,16 @@
import android.support.annotation.RestrictTo;
import android.support.annotation.VisibleForTesting;
import android.support.v4.content.res.FontResourcesParserCompat;
+import android.support.v4.content.res.ResourcesCompat;
import android.support.v4.graphics.TypefaceCompat;
import android.support.v4.graphics.TypefaceCompatUtil;
import android.support.v4.provider.SelfDestructiveThread.ReplyCallback;
import android.support.v4.util.LruCache;
import android.support.v4.util.Preconditions;
import android.support.v4.util.SimpleArrayMap;
-import android.widget.TextView;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
-import java.lang.ref.WeakReference;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Arrays;
@@ -166,11 +164,11 @@
// space open for new provider codes, these should all be negative numbers.
/** @hide */
@RestrictTo(LIBRARY_GROUP)
- public static final int RESULT_CODE_PROVIDER_NOT_FOUND = -1;
+ /* package */ static final int RESULT_CODE_PROVIDER_NOT_FOUND = -1;
/** @hide */
@RestrictTo(LIBRARY_GROUP)
- public static final int RESULT_CODE_WRONG_CERTIFICATES = -2;
- // Note -3 is used by Typeface to indicate the font failed to load.
+ /* package */ static final int RESULT_CODE_WRONG_CERTIFICATES = -2;
+ // Note -3 is used by FontRequestCallback to indicate the font failed to load.
private static final LruCache<String, Typeface> sTypefaceCache = new LruCache<>(16);
@@ -179,51 +177,87 @@
new SelfDestructiveThread("fonts", Process.THREAD_PRIORITY_BACKGROUND,
BACKGROUND_THREAD_KEEP_ALIVE_DURATION_MS);
- private static Typeface getFontInternal(final Context context, final FontRequest request,
+ @NonNull
+ private static TypefaceResult getFontInternal(final Context context, final FontRequest request,
int style) {
FontFamilyResult result;
try {
result = fetchFonts(context, null /* CancellationSignal */, request);
} catch (PackageManager.NameNotFoundException e) {
- return null;
+ return new TypefaceResult(null, FontRequestCallback.FAIL_REASON_PROVIDER_NOT_FOUND);
}
if (result.getStatusCode() == FontFamilyResult.STATUS_OK) {
- return TypefaceCompat.createFromFontInfo(context, null /* CancellationSignal */,
- result.getFonts(), style);
+ final Typeface typeface = TypefaceCompat.createFromFontInfo(
+ context, null /* CancellationSignal */, result.getFonts(), style);
+ return new TypefaceResult(typeface, typeface != null
+ ? FontRequestCallback.RESULT_OK
+ : FontRequestCallback.FAIL_REASON_FONT_LOAD_ERROR);
}
- return null;
+ int resultCode = result.getStatusCode() == FontFamilyResult.STATUS_WRONG_CERTIFICATES
+ ? FontRequestCallback.FAIL_REASON_WRONG_CERTIFICATES
+ : FontRequestCallback.FAIL_REASON_FONT_LOAD_ERROR;
+ return new TypefaceResult(null, resultCode);
}
private static final Object sLock = new Object();
@GuardedBy("sLock")
- private static final SimpleArrayMap<String, ArrayList<ReplyCallback<Typeface>>>
+ private static final SimpleArrayMap<String, ArrayList<ReplyCallback<TypefaceResult>>>
sPendingReplies = new SimpleArrayMap<>();
+ private static final class TypefaceResult {
+ final Typeface mTypeface;
+ @FontRequestCallback.FontRequestFailReason final int mResult;
+
+ TypefaceResult(@Nullable Typeface typeface,
+ @FontRequestCallback.FontRequestFailReason int result) {
+ mTypeface = typeface;
+ mResult = result;
+ }
+ }
+
+ /**
+ * Used for tests, should not be used otherwise.
+ * @hide
+ **/
+ @RestrictTo(LIBRARY_GROUP)
+ public static final void resetCache() {
+ sTypefaceCache.evictAll();
+ }
+
/** @hide */
@RestrictTo(LIBRARY_GROUP)
public static Typeface getFontSync(final Context context, final FontRequest request,
- final @Nullable TextView targetView, @FetchStrategy int strategy, int timeout,
+ final @Nullable ResourcesCompat.FontCallback fontCallback,
+ final @Nullable Handler handler, boolean isBlockingFetch, int timeout,
final int style) {
final String id = request.getIdentifier() + "-" + style;
Typeface cached = sTypefaceCache.get(id);
if (cached != null) {
+ if (fontCallback != null) {
+ fontCallback.onFontRetrieved(cached);
+ }
return cached;
}
- final boolean isBlockingFetch =
- strategy == FontResourcesParserCompat.FETCH_STRATEGY_BLOCKING;
-
if (isBlockingFetch && timeout == FontResourcesParserCompat.INFINITE_TIMEOUT_VALUE) {
// Wait forever. No need to post to the thread.
- return getFontInternal(context, request, style);
+ TypefaceResult typefaceResult = getFontInternal(context, request, style);
+ if (fontCallback != null) {
+ if (typefaceResult.mResult == FontFamilyResult.STATUS_OK) {
+ fontCallback.callbackSuccessAsync(typefaceResult.mTypeface, handler);
+ } else {
+ fontCallback.callbackFailAsync(typefaceResult.mResult, handler);
+ }
+ }
+ return typefaceResult.mTypeface;
}
- final Callable<Typeface> fetcher = new Callable<Typeface>() {
+ final Callable<TypefaceResult> fetcher = new Callable<TypefaceResult>() {
@Override
- public Typeface call() throws Exception {
- Typeface typeface = getFontInternal(context, request, style);
- if (typeface != null) {
- sTypefaceCache.put(id, typeface);
+ public TypefaceResult call() throws Exception {
+ TypefaceResult typeface = getFontInternal(context, request, style);
+ if (typeface.mTypeface != null) {
+ sTypefaceCache.put(id, typeface.mTypeface);
}
return typeface;
}
@@ -231,45 +265,53 @@
if (isBlockingFetch) {
try {
- return sBackgroundThread.postAndWait(fetcher, timeout);
+ return sBackgroundThread.postAndWait(fetcher, timeout).mTypeface;
} catch (InterruptedException e) {
return null;
}
} else {
- final WeakReference<TextView> textViewWeak = new WeakReference<TextView>(targetView);
- final ReplyCallback<Typeface> reply = new ReplyCallback<Typeface>() {
- @Override
- public void onReply(final Typeface typeface) {
- final TextView textView = textViewWeak.get();
- if (textView != null) {
- targetView.setTypeface(typeface, style);
- }
- }
- };
+ final ReplyCallback<TypefaceResult> reply = fontCallback == null ? null
+ : new ReplyCallback<TypefaceResult>() {
+ @Override
+ public void onReply(final TypefaceResult typeface) {
+ if (typeface.mResult == FontFamilyResult.STATUS_OK) {
+ fontCallback.callbackSuccessAsync(typeface.mTypeface, handler);
+ } else {
+ fontCallback.callbackFailAsync(typeface.mResult, handler);
+ }
+ }
+ };
synchronized (sLock) {
if (sPendingReplies.containsKey(id)) {
// Already requested. Do not request the same provider again and insert the
// reply to the queue instead.
- sPendingReplies.get(id).add(reply);
+ if (reply != null) {
+ sPendingReplies.get(id).add(reply);
+ }
return null;
}
- ArrayList<ReplyCallback<Typeface>> pendingReplies = new ArrayList<>();
- pendingReplies.add(reply);
- sPendingReplies.put(id, pendingReplies);
+ if (reply != null) {
+ ArrayList<ReplyCallback<TypefaceResult>> pendingReplies = new ArrayList<>();
+ pendingReplies.add(reply);
+ sPendingReplies.put(id, pendingReplies);
+ }
}
- sBackgroundThread.postAndReply(fetcher, new ReplyCallback<Typeface>() {
+ sBackgroundThread.postAndReply(fetcher, new ReplyCallback<TypefaceResult>() {
@Override
- public void onReply(final Typeface typeface) {
- final ArrayList<ReplyCallback<Typeface>> replies;
+ public void onReply(final TypefaceResult typeface) {
+ final ArrayList<ReplyCallback<TypefaceResult>> replies;
synchronized (sLock) {
replies = sPendingReplies.get(id);
+ if (replies == null) {
+ return; // Nobody requested replies. Do nothing.
+ }
sPendingReplies.remove(id);
}
for (int i = 0; i < replies.size(); ++i) {
replies.get(i).onReply(typeface);
}
- };
+ }
});
return null;
}
@@ -292,8 +334,9 @@
* @param weight An integer that indicates the font weight.
* @param italic A boolean that indicates the font is italic style or not.
* @param resultCode A boolean that indicates the font contents is ready.
+ *
+ * @hide
*/
- /** @hide */
@RestrictTo(LIBRARY_GROUP)
public FontInfo(@NonNull Uri uri, @IntRange(from = 0) int ttcIndex,
@IntRange(from = 1, to = 1000) int weight,
@@ -396,6 +439,9 @@
* Interface used to receive asynchronously fetched typefaces.
*/
public static class FontRequestCallback {
+ /** @hide */
+ @RestrictTo(LIBRARY_GROUP)
+ public static final int RESULT_OK = Columns.RESULT_CODE_OK;
/**
* Constant returned by {@link #onTypefaceRequestFailed(int)} signaling that the given
* provider was not found on the device.
@@ -412,6 +458,11 @@
*/
public static final int FAIL_REASON_FONT_LOAD_ERROR = -3;
/**
+ * Constant that signals that the font was not loaded due to security issues. This usually
+ * means the font was attempted to load on a restricted context.
+ */
+ public static final int FAIL_REASON_SECURITY_VIOLATION = -4;
+ /**
* Constant returned by {@link #onTypefaceRequestFailed(int)} signaling that the font
* provider did not return any results for the given query.
*/
@@ -431,9 +482,10 @@
@RestrictTo(LIBRARY_GROUP)
@IntDef({ FAIL_REASON_PROVIDER_NOT_FOUND, FAIL_REASON_FONT_LOAD_ERROR,
FAIL_REASON_FONT_NOT_FOUND, FAIL_REASON_FONT_UNAVAILABLE,
- FAIL_REASON_MALFORMED_QUERY, FAIL_REASON_WRONG_CERTIFICATES })
+ FAIL_REASON_MALFORMED_QUERY, FAIL_REASON_WRONG_CERTIFICATES,
+ FAIL_REASON_SECURITY_VIOLATION, RESULT_OK })
@Retention(RetentionPolicy.SOURCE)
- @interface FontRequestFailReason {}
+ public @interface FontRequestFailReason {}
public FontRequestCallback() {}
@@ -600,6 +652,7 @@
* @param fonts An array of {@link FontInfo} to be used to create a Typeface.
* @return A Typeface object. Returns null if typeface creation fails.
*/
+ @Nullable
public static Typeface buildTypeface(@NonNull Context context,
@Nullable CancellationSignal cancellationSignal, @NonNull FontInfo[] fonts) {
return TypefaceCompat.createFromFontInfo(context, cancellationSignal, fonts,
diff --git a/compat/java/android/support/v4/provider/SelfDestructiveThread.java b/compat/src/main/java/android/support/v4/provider/SelfDestructiveThread.java
similarity index 99%
rename from compat/java/android/support/v4/provider/SelfDestructiveThread.java
rename to compat/src/main/java/android/support/v4/provider/SelfDestructiveThread.java
index 885799b..7cfe1f8 100644
--- a/compat/java/android/support/v4/provider/SelfDestructiveThread.java
+++ b/compat/src/main/java/android/support/v4/provider/SelfDestructiveThread.java
@@ -129,7 +129,7 @@
/**
* Execute the specific callable object on this thread and call the reply callback on the
- * calling thread once it finishs.
+ * calling thread once it finishes.
*/
public <T> void postAndReply(final Callable<T> callable, final ReplyCallback<T> reply) {
final Handler callingHandler = new Handler();
diff --git a/compat/java/android/support/v4/text/BidiFormatter.java b/compat/src/main/java/android/support/v4/text/BidiFormatter.java
similarity index 100%
rename from compat/java/android/support/v4/text/BidiFormatter.java
rename to compat/src/main/java/android/support/v4/text/BidiFormatter.java
diff --git a/compat/java/android/support/v4/text/ICUCompat.java b/compat/src/main/java/android/support/v4/text/ICUCompat.java
similarity index 100%
rename from compat/java/android/support/v4/text/ICUCompat.java
rename to compat/src/main/java/android/support/v4/text/ICUCompat.java
diff --git a/compat/java/android/support/v4/text/TextDirectionHeuristicCompat.java b/compat/src/main/java/android/support/v4/text/TextDirectionHeuristicCompat.java
similarity index 100%
rename from compat/java/android/support/v4/text/TextDirectionHeuristicCompat.java
rename to compat/src/main/java/android/support/v4/text/TextDirectionHeuristicCompat.java
diff --git a/compat/java/android/support/v4/text/TextDirectionHeuristicsCompat.java b/compat/src/main/java/android/support/v4/text/TextDirectionHeuristicsCompat.java
similarity index 100%
rename from compat/java/android/support/v4/text/TextDirectionHeuristicsCompat.java
rename to compat/src/main/java/android/support/v4/text/TextDirectionHeuristicsCompat.java
diff --git a/compat/java/android/support/v4/text/TextUtilsCompat.java b/compat/src/main/java/android/support/v4/text/TextUtilsCompat.java
similarity index 100%
rename from compat/java/android/support/v4/text/TextUtilsCompat.java
rename to compat/src/main/java/android/support/v4/text/TextUtilsCompat.java
diff --git a/compat/java/android/support/v4/text/util/LinkifyCompat.java b/compat/src/main/java/android/support/v4/text/util/LinkifyCompat.java
similarity index 100%
rename from compat/java/android/support/v4/text/util/LinkifyCompat.java
rename to compat/src/main/java/android/support/v4/text/util/LinkifyCompat.java
diff --git a/compat/java/android/support/v4/util/ArrayMap.java b/compat/src/main/java/android/support/v4/util/ArrayMap.java
similarity index 100%
rename from compat/java/android/support/v4/util/ArrayMap.java
rename to compat/src/main/java/android/support/v4/util/ArrayMap.java
diff --git a/compat/java/android/support/v4/util/ArraySet.java b/compat/src/main/java/android/support/v4/util/ArraySet.java
similarity index 100%
rename from compat/java/android/support/v4/util/ArraySet.java
rename to compat/src/main/java/android/support/v4/util/ArraySet.java
diff --git a/compat/java/android/support/v4/util/AtomicFile.java b/compat/src/main/java/android/support/v4/util/AtomicFile.java
similarity index 94%
rename from compat/java/android/support/v4/util/AtomicFile.java
rename to compat/src/main/java/android/support/v4/util/AtomicFile.java
index 275f4e2..aefe705 100644
--- a/compat/java/android/support/v4/util/AtomicFile.java
+++ b/compat/src/main/java/android/support/v4/util/AtomicFile.java
@@ -16,6 +16,8 @@
package android.support.v4.util;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.util.Log;
import java.io.File;
@@ -48,7 +50,7 @@
* Create a new AtomicFile for a file located at the given File path.
* The secondary backup file will be the same file path with ".bak" appended.
*/
- public AtomicFile(File baseName) {
+ public AtomicFile(@NonNull File baseName) {
mBaseName = baseName;
mBackupName = new File(baseName.getPath() + ".bak");
}
@@ -57,6 +59,7 @@
* Return the path to the base file. You should not generally use this,
* as the data at that path may not be valid.
*/
+ @NonNull
public File getBaseFile() {
return mBaseName;
}
@@ -83,6 +86,7 @@
* safe (or will be lost). You must do your own threading protection for
* access to AtomicFile.
*/
+ @NonNull
public FileOutputStream startWrite() throws IOException {
// Rename the current file so it may be used as a backup during the next read
if (mBaseName.exists()) {
@@ -95,7 +99,7 @@
mBaseName.delete();
}
}
- FileOutputStream str = null;
+ FileOutputStream str;
try {
str = new FileOutputStream(mBaseName);
} catch (FileNotFoundException e) {
@@ -118,7 +122,7 @@
* commit the new data. The next attempt to read the atomic file
* will return the new file stream.
*/
- public void finishWrite(FileOutputStream str) {
+ public void finishWrite(@Nullable FileOutputStream str) {
if (str != null) {
sync(str);
try {
@@ -135,7 +139,7 @@
* returned by {@link #startWrite()}. This will close the current
* write stream, and roll back to the previous state of the file.
*/
- public void failWrite(FileOutputStream str) {
+ public void failWrite(@Nullable FileOutputStream str) {
if (str != null) {
sync(str);
try {
@@ -160,6 +164,7 @@
* be dropped. You must do your own threading protection for access to
* AtomicFile.
*/
+ @NonNull
public FileInputStream openRead() throws FileNotFoundException {
if (mBackupName.exists()) {
mBaseName.delete();
@@ -172,6 +177,7 @@
* A convenience for {@link #openRead()} that also reads all of the
* file contents into a byte array which is returned.
*/
+ @NonNull
public byte[] readFully() throws IOException {
FileInputStream stream = openRead();
try {
@@ -200,11 +206,9 @@
}
}
- static boolean sync(FileOutputStream stream) {
+ private static boolean sync(@NonNull FileOutputStream stream) {
try {
- if (stream != null) {
- stream.getFD().sync();
- }
+ stream.getFD().sync();
return true;
} catch (IOException e) {
}
diff --git a/compat/java/android/support/v4/util/CircularArray.java b/compat/src/main/java/android/support/v4/util/CircularArray.java
similarity index 100%
rename from compat/java/android/support/v4/util/CircularArray.java
rename to compat/src/main/java/android/support/v4/util/CircularArray.java
diff --git a/compat/java/android/support/v4/util/CircularIntArray.java b/compat/src/main/java/android/support/v4/util/CircularIntArray.java
similarity index 100%
rename from compat/java/android/support/v4/util/CircularIntArray.java
rename to compat/src/main/java/android/support/v4/util/CircularIntArray.java
diff --git a/compat/java/android/support/v4/util/ContainerHelpers.java b/compat/src/main/java/android/support/v4/util/ContainerHelpers.java
similarity index 100%
rename from compat/java/android/support/v4/util/ContainerHelpers.java
rename to compat/src/main/java/android/support/v4/util/ContainerHelpers.java
diff --git a/compat/java/android/support/v4/util/DebugUtils.java b/compat/src/main/java/android/support/v4/util/DebugUtils.java
similarity index 100%
rename from compat/java/android/support/v4/util/DebugUtils.java
rename to compat/src/main/java/android/support/v4/util/DebugUtils.java
diff --git a/compat/java/android/support/v4/util/LogWriter.java b/compat/src/main/java/android/support/v4/util/LogWriter.java
similarity index 100%
rename from compat/java/android/support/v4/util/LogWriter.java
rename to compat/src/main/java/android/support/v4/util/LogWriter.java
diff --git a/compat/java/android/support/v4/util/LongSparseArray.java b/compat/src/main/java/android/support/v4/util/LongSparseArray.java
similarity index 100%
rename from compat/java/android/support/v4/util/LongSparseArray.java
rename to compat/src/main/java/android/support/v4/util/LongSparseArray.java
diff --git a/compat/java/android/support/v4/util/LruCache.java b/compat/src/main/java/android/support/v4/util/LruCache.java
similarity index 100%
rename from compat/java/android/support/v4/util/LruCache.java
rename to compat/src/main/java/android/support/v4/util/LruCache.java
diff --git a/compat/java/android/support/v4/util/MapCollections.java b/compat/src/main/java/android/support/v4/util/MapCollections.java
similarity index 100%
rename from compat/java/android/support/v4/util/MapCollections.java
rename to compat/src/main/java/android/support/v4/util/MapCollections.java
diff --git a/compat/java/android/support/v4/util/ObjectsCompat.java b/compat/src/main/java/android/support/v4/util/ObjectsCompat.java
similarity index 93%
rename from compat/java/android/support/v4/util/ObjectsCompat.java
rename to compat/src/main/java/android/support/v4/util/ObjectsCompat.java
index 4650060..b6c740e 100644
--- a/compat/java/android/support/v4/util/ObjectsCompat.java
+++ b/compat/src/main/java/android/support/v4/util/ObjectsCompat.java
@@ -16,6 +16,7 @@
package android.support.v4.util;
import android.os.Build;
+import android.support.annotation.Nullable;
import java.util.Objects;
@@ -43,7 +44,7 @@
* and {@code false} otherwise
* @see Object#equals(Object)
*/
- public static boolean equals(Object a, Object b) {
+ public static boolean equals(@Nullable Object a, @Nullable Object b) {
if (Build.VERSION.SDK_INT >= 19) {
return Objects.equals(a, b);
} else {
diff --git a/compat/java/android/support/v4/util/Pair.java b/compat/src/main/java/android/support/v4/util/Pair.java
similarity index 88%
rename from compat/java/android/support/v4/util/Pair.java
rename to compat/src/main/java/android/support/v4/util/Pair.java
index 46ea5cd..9047aec 100644
--- a/compat/java/android/support/v4/util/Pair.java
+++ b/compat/src/main/java/android/support/v4/util/Pair.java
@@ -16,14 +16,17 @@
package android.support.v4.util;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+
/**
* Container to ease passing around a tuple of two objects. This object provides a sensible
* implementation of equals(), returning true if equals() is true on each of the contained
* objects.
*/
public class Pair<F, S> {
- public final F first;
- public final S second;
+ public final @Nullable F first;
+ public final @Nullable S second;
/**
* Constructor for a Pair.
@@ -31,7 +34,7 @@
* @param first the first object in the Pair
* @param second the second object in the pair
*/
- public Pair(F first, S second) {
+ public Pair(@Nullable F first, @Nullable S second) {
this.first = first;
this.second = second;
}
@@ -78,7 +81,8 @@
* @param b the second object in the pair
* @return a Pair that is templatized with the types of a and b
*/
- public static <A, B> Pair <A, B> create(A a, B b) {
+ @NonNull
+ public static <A, B> Pair <A, B> create(@Nullable A a, @Nullable B b) {
return new Pair<A, B>(a, b);
}
}
diff --git a/compat/java/android/support/v4/util/PatternsCompat.java b/compat/src/main/java/android/support/v4/util/PatternsCompat.java
similarity index 100%
rename from compat/java/android/support/v4/util/PatternsCompat.java
rename to compat/src/main/java/android/support/v4/util/PatternsCompat.java
diff --git a/compat/java/android/support/v4/util/Pools.java b/compat/src/main/java/android/support/v4/util/Pools.java
similarity index 92%
rename from compat/java/android/support/v4/util/Pools.java
rename to compat/src/main/java/android/support/v4/util/Pools.java
index 6882660..99fd888 100644
--- a/compat/java/android/support/v4/util/Pools.java
+++ b/compat/src/main/java/android/support/v4/util/Pools.java
@@ -18,6 +18,9 @@
package android.support.v4.util;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+
/**
* Helper class for creating pools of objects. An example use looks like this:
* <pre>
@@ -53,6 +56,7 @@
/**
* @return An instance from the pool if such, null otherwise.
*/
+ @Nullable
public T acquire();
/**
@@ -63,7 +67,7 @@
*
* @throws IllegalStateException If the instance is already in the pool.
*/
- public boolean release(T instance);
+ public boolean release(@NonNull T instance);
}
private Pools() {
@@ -108,7 +112,7 @@
}
@Override
- public boolean release(T instance) {
+ public boolean release(@NonNull T instance) {
if (isInPool(instance)) {
throw new IllegalStateException("Already in the pool!");
}
@@ -120,7 +124,7 @@
return false;
}
- private boolean isInPool(T instance) {
+ private boolean isInPool(@NonNull T instance) {
for (int i = 0; i < mPoolSize; i++) {
if (mPool[i] == instance) {
return true;
@@ -157,7 +161,7 @@
}
@Override
- public boolean release(T element) {
+ public boolean release(@NonNull T element) {
synchronized (mLock) {
return super.release(element);
}
diff --git a/compat/java/android/support/v4/util/Preconditions.java b/compat/src/main/java/android/support/v4/util/Preconditions.java
similarity index 100%
rename from compat/java/android/support/v4/util/Preconditions.java
rename to compat/src/main/java/android/support/v4/util/Preconditions.java
diff --git a/compat/java/android/support/v4/util/SimpleArrayMap.java b/compat/src/main/java/android/support/v4/util/SimpleArrayMap.java
similarity index 100%
rename from compat/java/android/support/v4/util/SimpleArrayMap.java
rename to compat/src/main/java/android/support/v4/util/SimpleArrayMap.java
diff --git a/compat/java/android/support/v4/util/SparseArrayCompat.java b/compat/src/main/java/android/support/v4/util/SparseArrayCompat.java
similarity index 100%
rename from compat/java/android/support/v4/util/SparseArrayCompat.java
rename to compat/src/main/java/android/support/v4/util/SparseArrayCompat.java
diff --git a/compat/java/android/support/v4/util/TimeUtils.java b/compat/src/main/java/android/support/v4/util/TimeUtils.java
similarity index 100%
rename from compat/java/android/support/v4/util/TimeUtils.java
rename to compat/src/main/java/android/support/v4/util/TimeUtils.java
diff --git a/compat/java/android/support/v4/util/package.html b/compat/src/main/java/android/support/v4/util/package.html
similarity index 100%
rename from compat/java/android/support/v4/util/package.html
rename to compat/src/main/java/android/support/v4/util/package.html
diff --git a/compat/java/android/support/v4/view/AccessibilityDelegateCompat.java b/compat/src/main/java/android/support/v4/view/AccessibilityDelegateCompat.java
similarity index 100%
rename from compat/java/android/support/v4/view/AccessibilityDelegateCompat.java
rename to compat/src/main/java/android/support/v4/view/AccessibilityDelegateCompat.java
diff --git a/compat/java/android/support/v4/view/ActionProvider.java b/compat/src/main/java/android/support/v4/view/ActionProvider.java
similarity index 100%
rename from compat/java/android/support/v4/view/ActionProvider.java
rename to compat/src/main/java/android/support/v4/view/ActionProvider.java
diff --git a/compat/java/android/support/v4/view/GestureDetectorCompat.java b/compat/src/main/java/android/support/v4/view/GestureDetectorCompat.java
similarity index 100%
rename from compat/java/android/support/v4/view/GestureDetectorCompat.java
rename to compat/src/main/java/android/support/v4/view/GestureDetectorCompat.java
diff --git a/compat/java/android/support/v4/view/GravityCompat.java b/compat/src/main/java/android/support/v4/view/GravityCompat.java
similarity index 100%
rename from compat/java/android/support/v4/view/GravityCompat.java
rename to compat/src/main/java/android/support/v4/view/GravityCompat.java
diff --git a/compat/java/android/support/v4/view/InputDeviceCompat.java b/compat/src/main/java/android/support/v4/view/InputDeviceCompat.java
similarity index 100%
rename from compat/java/android/support/v4/view/InputDeviceCompat.java
rename to compat/src/main/java/android/support/v4/view/InputDeviceCompat.java
diff --git a/compat/java/android/support/v4/view/LayoutInflaterCompat.java b/compat/src/main/java/android/support/v4/view/LayoutInflaterCompat.java
similarity index 100%
rename from compat/java/android/support/v4/view/LayoutInflaterCompat.java
rename to compat/src/main/java/android/support/v4/view/LayoutInflaterCompat.java
diff --git a/compat/java/android/support/v4/view/LayoutInflaterFactory.java b/compat/src/main/java/android/support/v4/view/LayoutInflaterFactory.java
similarity index 100%
rename from compat/java/android/support/v4/view/LayoutInflaterFactory.java
rename to compat/src/main/java/android/support/v4/view/LayoutInflaterFactory.java
diff --git a/compat/java/android/support/v4/view/MarginLayoutParamsCompat.java b/compat/src/main/java/android/support/v4/view/MarginLayoutParamsCompat.java
similarity index 100%
rename from compat/java/android/support/v4/view/MarginLayoutParamsCompat.java
rename to compat/src/main/java/android/support/v4/view/MarginLayoutParamsCompat.java
diff --git a/compat/java/android/support/v4/view/MenuCompat.java b/compat/src/main/java/android/support/v4/view/MenuCompat.java
similarity index 100%
rename from compat/java/android/support/v4/view/MenuCompat.java
rename to compat/src/main/java/android/support/v4/view/MenuCompat.java
diff --git a/compat/java/android/support/v4/view/MenuItemCompat.java b/compat/src/main/java/android/support/v4/view/MenuItemCompat.java
similarity index 100%
rename from compat/java/android/support/v4/view/MenuItemCompat.java
rename to compat/src/main/java/android/support/v4/view/MenuItemCompat.java
diff --git a/compat/java/android/support/v4/view/MotionEventCompat.java b/compat/src/main/java/android/support/v4/view/MotionEventCompat.java
similarity index 100%
rename from compat/java/android/support/v4/view/MotionEventCompat.java
rename to compat/src/main/java/android/support/v4/view/MotionEventCompat.java
diff --git a/compat/java/android/support/v4/view/NestedScrollingChild.java b/compat/src/main/java/android/support/v4/view/NestedScrollingChild.java
similarity index 100%
rename from compat/java/android/support/v4/view/NestedScrollingChild.java
rename to compat/src/main/java/android/support/v4/view/NestedScrollingChild.java
diff --git a/compat/java/android/support/v4/view/NestedScrollingChild2.java b/compat/src/main/java/android/support/v4/view/NestedScrollingChild2.java
similarity index 100%
rename from compat/java/android/support/v4/view/NestedScrollingChild2.java
rename to compat/src/main/java/android/support/v4/view/NestedScrollingChild2.java
diff --git a/compat/java/android/support/v4/view/NestedScrollingParent.java b/compat/src/main/java/android/support/v4/view/NestedScrollingParent.java
similarity index 100%
rename from compat/java/android/support/v4/view/NestedScrollingParent.java
rename to compat/src/main/java/android/support/v4/view/NestedScrollingParent.java
diff --git a/compat/java/android/support/v4/view/NestedScrollingParent2.java b/compat/src/main/java/android/support/v4/view/NestedScrollingParent2.java
similarity index 100%
rename from compat/java/android/support/v4/view/NestedScrollingParent2.java
rename to compat/src/main/java/android/support/v4/view/NestedScrollingParent2.java
diff --git a/compat/java/android/support/v4/view/OnApplyWindowInsetsListener.java b/compat/src/main/java/android/support/v4/view/OnApplyWindowInsetsListener.java
similarity index 100%
rename from compat/java/android/support/v4/view/OnApplyWindowInsetsListener.java
rename to compat/src/main/java/android/support/v4/view/OnApplyWindowInsetsListener.java
diff --git a/compat/java/android/support/v4/view/PointerIconCompat.java b/compat/src/main/java/android/support/v4/view/PointerIconCompat.java
similarity index 100%
rename from compat/java/android/support/v4/view/PointerIconCompat.java
rename to compat/src/main/java/android/support/v4/view/PointerIconCompat.java
diff --git a/compat/java/android/support/v4/view/ScaleGestureDetectorCompat.java b/compat/src/main/java/android/support/v4/view/ScaleGestureDetectorCompat.java
similarity index 100%
rename from compat/java/android/support/v4/view/ScaleGestureDetectorCompat.java
rename to compat/src/main/java/android/support/v4/view/ScaleGestureDetectorCompat.java
diff --git a/compat/java/android/support/v4/view/ScrollingView.java b/compat/src/main/java/android/support/v4/view/ScrollingView.java
similarity index 100%
rename from compat/java/android/support/v4/view/ScrollingView.java
rename to compat/src/main/java/android/support/v4/view/ScrollingView.java
diff --git a/compat/java/android/support/v4/view/TintableBackgroundView.java b/compat/src/main/java/android/support/v4/view/TintableBackgroundView.java
similarity index 100%
rename from compat/java/android/support/v4/view/TintableBackgroundView.java
rename to compat/src/main/java/android/support/v4/view/TintableBackgroundView.java
diff --git a/compat/java/android/support/v4/view/VelocityTrackerCompat.java b/compat/src/main/java/android/support/v4/view/VelocityTrackerCompat.java
similarity index 100%
rename from compat/java/android/support/v4/view/VelocityTrackerCompat.java
rename to compat/src/main/java/android/support/v4/view/VelocityTrackerCompat.java
diff --git a/compat/java/android/support/v4/view/ViewCompat.java b/compat/src/main/java/android/support/v4/view/ViewCompat.java
similarity index 100%
rename from compat/java/android/support/v4/view/ViewCompat.java
rename to compat/src/main/java/android/support/v4/view/ViewCompat.java
diff --git a/compat/java/android/support/v4/view/ViewConfigurationCompat.java b/compat/src/main/java/android/support/v4/view/ViewConfigurationCompat.java
similarity index 100%
rename from compat/java/android/support/v4/view/ViewConfigurationCompat.java
rename to compat/src/main/java/android/support/v4/view/ViewConfigurationCompat.java
diff --git a/compat/java/android/support/v4/view/ViewGroupCompat.java b/compat/src/main/java/android/support/v4/view/ViewGroupCompat.java
similarity index 100%
rename from compat/java/android/support/v4/view/ViewGroupCompat.java
rename to compat/src/main/java/android/support/v4/view/ViewGroupCompat.java
diff --git a/compat/java/android/support/v4/view/ViewParentCompat.java b/compat/src/main/java/android/support/v4/view/ViewParentCompat.java
similarity index 100%
rename from compat/java/android/support/v4/view/ViewParentCompat.java
rename to compat/src/main/java/android/support/v4/view/ViewParentCompat.java
diff --git a/compat/java/android/support/v4/view/ViewPropertyAnimatorCompat.java b/compat/src/main/java/android/support/v4/view/ViewPropertyAnimatorCompat.java
similarity index 100%
rename from compat/java/android/support/v4/view/ViewPropertyAnimatorCompat.java
rename to compat/src/main/java/android/support/v4/view/ViewPropertyAnimatorCompat.java
diff --git a/compat/java/android/support/v4/view/ViewPropertyAnimatorListener.java b/compat/src/main/java/android/support/v4/view/ViewPropertyAnimatorListener.java
similarity index 100%
rename from compat/java/android/support/v4/view/ViewPropertyAnimatorListener.java
rename to compat/src/main/java/android/support/v4/view/ViewPropertyAnimatorListener.java
diff --git a/compat/java/android/support/v4/view/ViewPropertyAnimatorListenerAdapter.java b/compat/src/main/java/android/support/v4/view/ViewPropertyAnimatorListenerAdapter.java
similarity index 100%
rename from compat/java/android/support/v4/view/ViewPropertyAnimatorListenerAdapter.java
rename to compat/src/main/java/android/support/v4/view/ViewPropertyAnimatorListenerAdapter.java
diff --git a/compat/java/android/support/v4/view/ViewPropertyAnimatorUpdateListener.java b/compat/src/main/java/android/support/v4/view/ViewPropertyAnimatorUpdateListener.java
similarity index 100%
rename from compat/java/android/support/v4/view/ViewPropertyAnimatorUpdateListener.java
rename to compat/src/main/java/android/support/v4/view/ViewPropertyAnimatorUpdateListener.java
diff --git a/compat/java/android/support/v4/view/WindowCompat.java b/compat/src/main/java/android/support/v4/view/WindowCompat.java
similarity index 100%
rename from compat/java/android/support/v4/view/WindowCompat.java
rename to compat/src/main/java/android/support/v4/view/WindowCompat.java
diff --git a/compat/java/android/support/v4/view/WindowInsetsCompat.java b/compat/src/main/java/android/support/v4/view/WindowInsetsCompat.java
similarity index 100%
rename from compat/java/android/support/v4/view/WindowInsetsCompat.java
rename to compat/src/main/java/android/support/v4/view/WindowInsetsCompat.java
diff --git a/compat/java/android/support/v4/view/accessibility/AccessibilityEventCompat.java b/compat/src/main/java/android/support/v4/view/accessibility/AccessibilityEventCompat.java
similarity index 100%
rename from compat/java/android/support/v4/view/accessibility/AccessibilityEventCompat.java
rename to compat/src/main/java/android/support/v4/view/accessibility/AccessibilityEventCompat.java
diff --git a/compat/java/android/support/v4/view/accessibility/AccessibilityManagerCompat.java b/compat/src/main/java/android/support/v4/view/accessibility/AccessibilityManagerCompat.java
similarity index 100%
rename from compat/java/android/support/v4/view/accessibility/AccessibilityManagerCompat.java
rename to compat/src/main/java/android/support/v4/view/accessibility/AccessibilityManagerCompat.java
diff --git a/compat/java/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat.java b/compat/src/main/java/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat.java
similarity index 100%
rename from compat/java/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat.java
rename to compat/src/main/java/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat.java
diff --git a/compat/java/android/support/v4/view/accessibility/AccessibilityNodeProviderCompat.java b/compat/src/main/java/android/support/v4/view/accessibility/AccessibilityNodeProviderCompat.java
similarity index 100%
rename from compat/java/android/support/v4/view/accessibility/AccessibilityNodeProviderCompat.java
rename to compat/src/main/java/android/support/v4/view/accessibility/AccessibilityNodeProviderCompat.java
diff --git a/compat/java/android/support/v4/view/accessibility/AccessibilityRecordCompat.java b/compat/src/main/java/android/support/v4/view/accessibility/AccessibilityRecordCompat.java
similarity index 100%
rename from compat/java/android/support/v4/view/accessibility/AccessibilityRecordCompat.java
rename to compat/src/main/java/android/support/v4/view/accessibility/AccessibilityRecordCompat.java
diff --git a/compat/java/android/support/v4/view/accessibility/AccessibilityWindowInfoCompat.java b/compat/src/main/java/android/support/v4/view/accessibility/AccessibilityWindowInfoCompat.java
similarity index 100%
rename from compat/java/android/support/v4/view/accessibility/AccessibilityWindowInfoCompat.java
rename to compat/src/main/java/android/support/v4/view/accessibility/AccessibilityWindowInfoCompat.java
diff --git a/compat/java/android/support/v4/view/accessibility/package.html b/compat/src/main/java/android/support/v4/view/accessibility/package.html
similarity index 100%
rename from compat/java/android/support/v4/view/accessibility/package.html
rename to compat/src/main/java/android/support/v4/view/accessibility/package.html
diff --git a/compat/java/android/support/v4/view/animation/PathInterpolatorApi14.java b/compat/src/main/java/android/support/v4/view/animation/PathInterpolatorApi14.java
similarity index 100%
rename from compat/java/android/support/v4/view/animation/PathInterpolatorApi14.java
rename to compat/src/main/java/android/support/v4/view/animation/PathInterpolatorApi14.java
diff --git a/compat/java/android/support/v4/view/animation/PathInterpolatorCompat.java b/compat/src/main/java/android/support/v4/view/animation/PathInterpolatorCompat.java
similarity index 100%
rename from compat/java/android/support/v4/view/animation/PathInterpolatorCompat.java
rename to compat/src/main/java/android/support/v4/view/animation/PathInterpolatorCompat.java
diff --git a/compat/java/android/support/v4/view/package.html b/compat/src/main/java/android/support/v4/view/package.html
similarity index 100%
rename from compat/java/android/support/v4/view/package.html
rename to compat/src/main/java/android/support/v4/view/package.html
diff --git a/compat/java/android/support/v4/widget/AutoSizeableTextView.java b/compat/src/main/java/android/support/v4/widget/AutoSizeableTextView.java
similarity index 100%
rename from compat/java/android/support/v4/widget/AutoSizeableTextView.java
rename to compat/src/main/java/android/support/v4/widget/AutoSizeableTextView.java
diff --git a/compat/java/android/support/v4/widget/CompoundButtonCompat.java b/compat/src/main/java/android/support/v4/widget/CompoundButtonCompat.java
similarity index 100%
rename from compat/java/android/support/v4/widget/CompoundButtonCompat.java
rename to compat/src/main/java/android/support/v4/widget/CompoundButtonCompat.java
diff --git a/compat/java/android/support/v4/widget/EdgeEffectCompat.java b/compat/src/main/java/android/support/v4/widget/EdgeEffectCompat.java
similarity index 97%
rename from compat/java/android/support/v4/widget/EdgeEffectCompat.java
rename to compat/src/main/java/android/support/v4/widget/EdgeEffectCompat.java
index 9293e60..0d370a8 100644
--- a/compat/java/android/support/v4/widget/EdgeEffectCompat.java
+++ b/compat/src/main/java/android/support/v4/widget/EdgeEffectCompat.java
@@ -18,6 +18,7 @@
import android.content.Context;
import android.graphics.Canvas;
import android.os.Build;
+import android.support.annotation.NonNull;
import android.support.annotation.RequiresApi;
import android.widget.EdgeEffect;
@@ -170,7 +171,8 @@
*
* @see {@link EdgeEffect#onPull(float, float)}
*/
- public static void onPull(EdgeEffect edgeEffect, float deltaDistance, float displacement) {
+ public static void onPull(@NonNull EdgeEffect edgeEffect, float deltaDistance,
+ float displacement) {
IMPL.onPull(edgeEffect, deltaDistance, displacement);
}
diff --git a/compat/java/android/support/v4/widget/ImageViewCompat.java b/compat/src/main/java/android/support/v4/widget/ImageViewCompat.java
similarity index 91%
rename from compat/java/android/support/v4/widget/ImageViewCompat.java
rename to compat/src/main/java/android/support/v4/widget/ImageViewCompat.java
index acaaf63..b517de5 100644
--- a/compat/java/android/support/v4/widget/ImageViewCompat.java
+++ b/compat/src/main/java/android/support/v4/widget/ImageViewCompat.java
@@ -20,6 +20,8 @@
import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
import android.os.Build;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
import android.widget.ImageView;
@@ -130,21 +132,24 @@
/**
* Return the tint applied to the image drawable, if specified.
*/
- public static ColorStateList getImageTintList(ImageView view) {
+ @Nullable
+ public static ColorStateList getImageTintList(@NonNull ImageView view) {
return IMPL.getImageTintList(view);
}
/**
* Applies a tint to the image drawable.
*/
- public static void setImageTintList(ImageView view, ColorStateList tintList) {
+ public static void setImageTintList(@NonNull ImageView view,
+ @Nullable ColorStateList tintList) {
IMPL.setImageTintList(view, tintList);
}
/**
* Return the blending mode used to apply the tint to the image drawable, if specified.
*/
- public static PorterDuff.Mode getImageTintMode(ImageView view) {
+ @Nullable
+ public static PorterDuff.Mode getImageTintMode(@NonNull ImageView view) {
return IMPL.getImageTintMode(view);
}
@@ -153,7 +158,7 @@
* {@link #setImageTintList(android.widget.ImageView, android.content.res.ColorStateList)}
* to the image drawable. The default mode is {@link PorterDuff.Mode#SRC_IN}.
*/
- public static void setImageTintMode(ImageView view, PorterDuff.Mode mode) {
+ public static void setImageTintMode(@NonNull ImageView view, @Nullable PorterDuff.Mode mode) {
IMPL.setImageTintMode(view, mode);
}
diff --git a/compat/java/android/support/v4/widget/ListPopupWindowCompat.java b/compat/src/main/java/android/support/v4/widget/ListPopupWindowCompat.java
similarity index 95%
rename from compat/java/android/support/v4/widget/ListPopupWindowCompat.java
rename to compat/src/main/java/android/support/v4/widget/ListPopupWindowCompat.java
index ab86e58..4532733 100644
--- a/compat/java/android/support/v4/widget/ListPopupWindowCompat.java
+++ b/compat/src/main/java/android/support/v4/widget/ListPopupWindowCompat.java
@@ -17,6 +17,8 @@
package android.support.v4.widget;
import android.os.Build;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ListPopupWindow;
@@ -88,8 +90,9 @@
* @return a touch listener that controls drag-to-open behavior, or {@code null} on
* unsupported APIs
*/
+ @Nullable
public static OnTouchListener createDragToOpenListener(
- ListPopupWindow listPopupWindow, View src) {
+ @NonNull ListPopupWindow listPopupWindow, @NonNull View src) {
if (Build.VERSION.SDK_INT >= 19) {
return listPopupWindow.createDragToOpenListener(src);
} else {
diff --git a/compat/java/android/support/v4/widget/ListViewCompat.java b/compat/src/main/java/android/support/v4/widget/ListViewCompat.java
similarity index 100%
rename from compat/java/android/support/v4/widget/ListViewCompat.java
rename to compat/src/main/java/android/support/v4/widget/ListViewCompat.java
diff --git a/compat/java/android/support/v4/widget/PopupMenuCompat.java b/compat/src/main/java/android/support/v4/widget/PopupMenuCompat.java
similarity index 91%
rename from compat/java/android/support/v4/widget/PopupMenuCompat.java
rename to compat/src/main/java/android/support/v4/widget/PopupMenuCompat.java
index 639a84b..10c5ff3 100644
--- a/compat/java/android/support/v4/widget/PopupMenuCompat.java
+++ b/compat/src/main/java/android/support/v4/widget/PopupMenuCompat.java
@@ -17,6 +17,8 @@
package android.support.v4.widget;
import android.os.Build;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.view.View.OnTouchListener;
import android.widget.PopupMenu;
@@ -47,7 +49,8 @@
* @return a touch listener that controls drag-to-open behavior, or {@code null} on
* unsupported APIs
*/
- public static OnTouchListener getDragToOpenListener(Object popupMenu) {
+ @Nullable
+ public static OnTouchListener getDragToOpenListener(@NonNull Object popupMenu) {
if (Build.VERSION.SDK_INT >= 19) {
return ((PopupMenu) popupMenu).getDragToOpenListener();
} else {
diff --git a/compat/java/android/support/v4/widget/PopupWindowCompat.java b/compat/src/main/java/android/support/v4/widget/PopupWindowCompat.java
similarity index 94%
rename from compat/java/android/support/v4/widget/PopupWindowCompat.java
rename to compat/src/main/java/android/support/v4/widget/PopupWindowCompat.java
index d846b40..d9de3db 100644
--- a/compat/java/android/support/v4/widget/PopupWindowCompat.java
+++ b/compat/src/main/java/android/support/v4/widget/PopupWindowCompat.java
@@ -17,6 +17,7 @@
package android.support.v4.widget;
import android.os.Build;
+import android.support.annotation.NonNull;
import android.support.annotation.RequiresApi;
import android.support.v4.view.GravityCompat;
import android.support.v4.view.ViewCompat;
@@ -213,8 +214,8 @@
* @param yoff A vertical offset from the anchor in pixels
* @param gravity Alignment of the popup relative to the anchor
*/
- public static void showAsDropDown(PopupWindow popup, View anchor, int xoff, int yoff,
- int gravity) {
+ public static void showAsDropDown(@NonNull PopupWindow popup, @NonNull View anchor,
+ int xoff, int yoff, int gravity) {
IMPL.showAsDropDown(popup, anchor, xoff, yoff, gravity);
}
@@ -224,7 +225,7 @@
*
* @param overlapAnchor Whether the popup should overlap its anchor.
*/
- public static void setOverlapAnchor(PopupWindow popupWindow, boolean overlapAnchor) {
+ public static void setOverlapAnchor(@NonNull PopupWindow popupWindow, boolean overlapAnchor) {
IMPL.setOverlapAnchor(popupWindow, overlapAnchor);
}
@@ -234,7 +235,7 @@
*
* @return Whether the popup should overlap its anchor.
*/
- public static boolean getOverlapAnchor(PopupWindow popupWindow) {
+ public static boolean getOverlapAnchor(@NonNull PopupWindow popupWindow) {
return IMPL.getOverlapAnchor(popupWindow);
}
@@ -247,7 +248,7 @@
*
* @see android.view.WindowManager.LayoutParams#type
*/
- public static void setWindowLayoutType(PopupWindow popupWindow, int layoutType) {
+ public static void setWindowLayoutType(@NonNull PopupWindow popupWindow, int layoutType) {
IMPL.setWindowLayoutType(popupWindow, layoutType);
}
@@ -256,7 +257,7 @@
*
* @see #setWindowLayoutType(PopupWindow popupWindow, int)
*/
- public static int getWindowLayoutType(PopupWindow popupWindow) {
+ public static int getWindowLayoutType(@NonNull PopupWindow popupWindow) {
return IMPL.getWindowLayoutType(popupWindow);
}
}
diff --git a/compat/java/android/support/v4/widget/ScrollerCompat.java b/compat/src/main/java/android/support/v4/widget/ScrollerCompat.java
similarity index 100%
rename from compat/java/android/support/v4/widget/ScrollerCompat.java
rename to compat/src/main/java/android/support/v4/widget/ScrollerCompat.java
diff --git a/compat/java/android/support/v4/widget/TextViewCompat.java b/compat/src/main/java/android/support/v4/widget/TextViewCompat.java
similarity index 97%
rename from compat/java/android/support/v4/widget/TextViewCompat.java
rename to compat/src/main/java/android/support/v4/widget/TextViewCompat.java
index 8d9e4ab..dc87a38 100644
--- a/compat/java/android/support/v4/widget/TextViewCompat.java
+++ b/compat/src/main/java/android/support/v4/widget/TextViewCompat.java
@@ -479,6 +479,7 @@
/**
* Returns drawables for the start, top, end, and bottom borders from the given text view.
*/
+ @NonNull
public static Drawable[] getCompoundDrawablesRelative(@NonNull TextView textView) {
return IMPL.getCompoundDrawablesRelative(textView);
}
@@ -493,7 +494,8 @@
*
* @attr name android:autoSizeTextType
*/
- public static void setAutoSizeTextTypeWithDefaults(TextView textView, int autoSizeTextType) {
+ public static void setAutoSizeTextTypeWithDefaults(@NonNull TextView textView,
+ int autoSizeTextType) {
IMPL.setAutoSizeTextTypeWithDefaults(textView, autoSizeTextType);
}
@@ -519,7 +521,7 @@
* @attr name android:autoSizeStepGranularity
*/
public static void setAutoSizeTextTypeUniformWithConfiguration(
- TextView textView,
+ @NonNull TextView textView,
int autoSizeMinTextSize,
int autoSizeMaxTextSize,
int autoSizeStepGranularity,
@@ -542,7 +544,7 @@
* @attr name android:autoSizeTextType
* @attr name android:autoSizePresetSizes
*/
- public static void setAutoSizeTextTypeUniformWithPresetSizes(TextView textView,
+ public static void setAutoSizeTextTypeUniformWithPresetSizes(@NonNull TextView textView,
@NonNull int[] presetSizes, int unit) throws IllegalArgumentException {
IMPL.setAutoSizeTextTypeUniformWithPresetSizes(textView, presetSizes, unit);
}
@@ -556,7 +558,7 @@
*
* @attr name android:autoSizeTextType
*/
- public static int getAutoSizeTextType(TextView textView) {
+ public static int getAutoSizeTextType(@NonNull TextView textView) {
return IMPL.getAutoSizeTextType(textView);
}
@@ -565,7 +567,7 @@
*
* @attr name android:autoSizeStepGranularity
*/
- public static int getAutoSizeStepGranularity(TextView textView) {
+ public static int getAutoSizeStepGranularity(@NonNull TextView textView) {
return IMPL.getAutoSizeStepGranularity(textView);
}
@@ -575,7 +577,7 @@
*
* @attr name android:autoSizeMinTextSize
*/
- public static int getAutoSizeMinTextSize(TextView textView) {
+ public static int getAutoSizeMinTextSize(@NonNull TextView textView) {
return IMPL.getAutoSizeMinTextSize(textView);
}
@@ -585,7 +587,7 @@
*
* @attr name android:autoSizeMaxTextSize
*/
- public static int getAutoSizeMaxTextSize(TextView textView) {
+ public static int getAutoSizeMaxTextSize(@NonNull TextView textView) {
return IMPL.getAutoSizeMaxTextSize(textView);
}
@@ -594,7 +596,8 @@
*
* @attr name android:autoSizePresetSizes
*/
- public static int[] getAutoSizeTextAvailableSizes(TextView textView) {
+ @NonNull
+ public static int[] getAutoSizeTextAvailableSizes(@NonNull TextView textView) {
return IMPL.getAutoSizeTextAvailableSizes(textView);
}
}
diff --git a/compat/java/android/support/v4/widget/TintableCompoundButton.java b/compat/src/main/java/android/support/v4/widget/TintableCompoundButton.java
similarity index 100%
rename from compat/java/android/support/v4/widget/TintableCompoundButton.java
rename to compat/src/main/java/android/support/v4/widget/TintableCompoundButton.java
diff --git a/compat/java/android/support/v4/widget/TintableImageSourceView.java b/compat/src/main/java/android/support/v4/widget/TintableImageSourceView.java
similarity index 100%
rename from compat/java/android/support/v4/widget/TintableImageSourceView.java
rename to compat/src/main/java/android/support/v4/widget/TintableImageSourceView.java
diff --git a/compat/java/android/support/v4/widget/package.html b/compat/src/main/java/android/support/v4/widget/package.html
similarity index 100%
rename from compat/java/android/support/v4/widget/package.html
rename to compat/src/main/java/android/support/v4/widget/package.html
diff --git a/compat/tests/java/android/support/v4/app/ActivityCompatTest.java b/compat/tests/java/android/support/v4/app/ActivityCompatTest.java
new file mode 100644
index 0000000..3b4f1b5
--- /dev/null
+++ b/compat/tests/java/android/support/v4/app/ActivityCompatTest.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v4.app;
+
+import static org.mockito.AdditionalMatchers.aryEq;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.ArgumentMatchers.same;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+
+import android.Manifest;
+import android.app.Activity;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+import android.support.v4.BaseInstrumentationTestCase;
+import android.support.v4.app.ActivityCompat.PermissionCompatDelegate;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+public class ActivityCompatTest extends BaseInstrumentationTestCase<TestSupportActivity> {
+
+ public ActivityCompatTest() {
+ super(TestSupportActivity.class);
+ }
+
+ @SmallTest
+ @Test
+ public void testPermissionDelegate() {
+ Activity activity = mActivityTestRule.getActivity();
+ ActivityCompat.PermissionCompatDelegate delegate = mock(PermissionCompatDelegate.class);
+
+ // First test setting the delegate
+ ActivityCompat.setPermissionCompatDelegate(delegate);
+
+ ActivityCompat.requestPermissions(activity, new String[]{
+ Manifest.permission.ACCESS_FINE_LOCATION}, 42);
+ verify(delegate).requestPermissions(same(activity), aryEq(
+ new String[]{Manifest.permission.ACCESS_FINE_LOCATION}), eq(42));
+
+ // Test clearing the delegate
+ ActivityCompat.setPermissionCompatDelegate(null);
+
+ ActivityCompat.requestPermissions(activity, new String[]{
+ Manifest.permission.ACCESS_FINE_LOCATION}, 42);
+ verifyNoMoreInteractions(delegate);
+ }
+}
diff --git a/compat/tests/java/android/support/v4/content/res/FontResourcesParserCompatTest.java b/compat/tests/java/android/support/v4/content/res/FontResourcesParserCompatTest.java
index e7f40cf..6120eed 100644
--- a/compat/tests/java/android/support/v4/content/res/FontResourcesParserCompatTest.java
+++ b/compat/tests/java/android/support/v4/content/res/FontResourcesParserCompatTest.java
@@ -28,6 +28,7 @@
import android.app.Instrumentation;
import android.content.res.Resources;
import android.content.res.XmlResourceParser;
+import android.os.Build;
import android.support.compat.test.R;
import android.support.test.InstrumentationRegistry;
import android.support.test.filters.SmallTest;
@@ -89,6 +90,41 @@
}
@Test
+ public void testParseAndroidAttrs() throws XmlPullParserException, IOException {
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP_MR1) {
+ // The following tests are only expected to pass on v22+ devices. The android
+ // resources are stripped in older versions and hence won't be parsed.
+ return;
+ }
+
+ @SuppressLint("ResourceType")
+ XmlResourceParser parser = mResources.getXml(R.font.samplexmlfont2);
+
+ FamilyResourceEntry result = FontResourcesParserCompat.parse(parser, mResources);
+
+ assertNotNull(result);
+ FontFamilyFilesResourceEntry filesEntry = (FontFamilyFilesResourceEntry) result;
+ FontFileResourceEntry[] fileEntries = filesEntry.getEntries();
+ assertEquals(4, fileEntries.length);
+ FontFileResourceEntry font1 = fileEntries[0];
+ assertEquals(400, font1.getWeight());
+ assertEquals(false, font1.isItalic());
+ assertEquals(R.font.samplefont, font1.getResourceId());
+ FontFileResourceEntry font2 = fileEntries[1];
+ assertEquals(400, font2.getWeight());
+ assertEquals(true, font2.isItalic());
+ assertEquals(R.font.samplefont2, font2.getResourceId());
+ FontFileResourceEntry font3 = fileEntries[2];
+ assertEquals(700, font3.getWeight());
+ assertEquals(false, font3.isItalic());
+ assertEquals(R.font.samplefont3, font3.getResourceId());
+ FontFileResourceEntry font4 = fileEntries[3];
+ assertEquals(700, font4.getWeight());
+ assertEquals(true, font4.isItalic());
+ assertEquals(R.font.samplefont4, font4.getResourceId());
+ }
+
+ @Test
public void testParseDownloadableFont() throws IOException, XmlPullParserException {
@SuppressLint("ResourceType")
XmlResourceParser parser = mResources.getXml(R.font.samplexmldownloadedfont);
@@ -98,10 +134,10 @@
assertNotNull(result);
ProviderResourceEntry providerEntry = (ProviderResourceEntry) result;
FontRequest request = providerEntry.getRequest();
- assertEquals("com.example.test.fontprovider.authority",
+ assertEquals("android.support.provider.fonts.font",
request.getProviderAuthority());
- assertEquals("com.example.test.fontprovider.package", request.getProviderPackage());
- assertEquals("MyRequestedFont", request.getQuery());
+ assertEquals("android.support.compat.test", request.getProviderPackage());
+ assertEquals("singleFontFamily", request.getQuery());
}
@Test
diff --git a/compat/tests/java/android/support/v4/content/res/ResourcesCompatTest.java b/compat/tests/java/android/support/v4/content/res/ResourcesCompatTest.java
index 56f5ab4..b326dd6 100644
--- a/compat/tests/java/android/support/v4/content/res/ResourcesCompatTest.java
+++ b/compat/tests/java/android/support/v4/content/res/ResourcesCompatTest.java
@@ -20,6 +20,7 @@
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
import android.content.Context;
import android.content.res.ColorStateList;
@@ -27,15 +28,21 @@
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.os.Build;
+import android.support.annotation.NonNull;
import android.support.compat.test.R;
import android.support.test.InstrumentationRegistry;
import android.support.test.filters.SmallTest;
+import android.support.v4.provider.FontsContractCompat;
+import android.support.v4.provider.MockFontProvider;
import android.support.v4.testutils.TestUtils;
import android.util.DisplayMetrics;
import org.junit.Before;
import org.junit.Test;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
@SmallTest
public class ResourcesCompatTest {
private Context mContext;
@@ -45,6 +52,7 @@
public void setup() {
mContext = InstrumentationRegistry.getContext();
mResources = mContext.getResources();
+ MockFontProvider.prepareFontFiles(mContext);
}
@Test
@@ -293,15 +301,49 @@
}
@Test
- public void testGetFont_fontFile() {
+ public void testGetFont_fontFile_sync() {
Typeface font = ResourcesCompat.getFont(mContext, R.font.samplefont);
assertNotNull(font);
assertNotSame(Typeface.DEFAULT, font);
}
+ private static final class FontCallback extends ResourcesCompat.FontCallback {
+ private final CountDownLatch mLatch;
+ Typeface mTypeface;
+
+ FontCallback(CountDownLatch latch) {
+ mLatch = latch;
+ }
+
+ @Override
+ public void onFontRetrieved(@NonNull Typeface typeface) {
+ mTypeface = typeface;
+ mLatch.countDown();
+ }
+
+ @Override
+ public void onFontRetrievalFailed(int reason) {
+ mLatch.countDown();
+ }
+ }
+
@Test
- public void testGetFont_xmlFile() {
+ public void testGetFont_fontFile_async() throws InterruptedException {
+ final CountDownLatch latch = new CountDownLatch(1);
+ final FontCallback callback = new FontCallback(latch);
+ FontsContractCompat.resetCache();
+
+ ResourcesCompat.getFont(mContext, R.font.samplefont, callback, null);
+
+ assertTrue(latch.await(5L, TimeUnit.SECONDS));
+
+ assertNotNull(callback.mTypeface);
+ assertNotSame(Typeface.DEFAULT, callback.mTypeface);
+ }
+
+ @Test
+ public void testGetFont_xmlFile_sync() {
Typeface font = ResourcesCompat.getFont(mContext, R.font.samplexmlfont);
assertNotNull(font);
@@ -309,6 +351,47 @@
}
@Test
+ public void testGetFont_xmlFile_async() throws InterruptedException {
+ final CountDownLatch latch = new CountDownLatch(1);
+ final FontCallback callback = new FontCallback(latch);
+
+ ResourcesCompat.getFont(mContext, R.font.samplexmlfont, callback, null);
+
+ assertTrue(latch.await(5L, TimeUnit.SECONDS));
+
+ assertNotNull(callback.mTypeface);
+ assertNotSame(Typeface.DEFAULT, callback.mTypeface);
+ }
+
+ @Test
+ public void testGetFont_xmlProviderFile_sync() {
+ Typeface font = ResourcesCompat.getFont(mContext, R.font.samplexmldownloadedfont);
+
+ assertNotNull(font);
+ assertNotSame(Typeface.DEFAULT, font);
+ }
+
+ @Test
+ public void testGetFont_xmlProviderFile_async() throws InterruptedException {
+ final CountDownLatch latch = new CountDownLatch(1);
+ final FontCallback callback = new FontCallback(latch);
+
+ // Font provider non-blocking requests post on the calling thread so can't run on
+ // the test thread as it doesn't have a Looper.
+ InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
+ @Override
+ public void run() {
+ ResourcesCompat.getFont(mContext, R.font.samplexmldownloadedfont, callback, null);
+ }
+ });
+
+ assertTrue(latch.await(5L, TimeUnit.SECONDS));
+
+ assertNotNull(callback.mTypeface);
+ assertNotSame(Typeface.DEFAULT, callback.mTypeface);
+ }
+
+ @Test
public void testGetFont_invalidXmlFile() {
try {
assertNull(
diff --git a/compat/tests/java/android/support/v4/graphics/TypefaceCompatTest.java b/compat/tests/java/android/support/v4/graphics/TypefaceCompatTest.java
index dab7f0f..dff4c33 100644
--- a/compat/tests/java/android/support/v4/graphics/TypefaceCompatTest.java
+++ b/compat/tests/java/android/support/v4/graphics/TypefaceCompatTest.java
@@ -17,7 +17,10 @@
package android.support.v4.graphics;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
import android.annotation.SuppressLint;
import android.app.Instrumentation;
@@ -28,16 +31,17 @@
import android.content.res.Resources;
import android.graphics.Paint;
import android.graphics.Typeface;
+import android.support.annotation.NonNull;
import android.support.compat.test.R;
import android.support.test.InstrumentationRegistry;
import android.support.test.filters.SmallTest;
-import android.support.testutils.PollingCheck;
import android.support.v4.content.res.FontResourcesParserCompat;
import android.support.v4.content.res.FontResourcesParserCompat.FamilyResourceEntry;
import android.support.v4.content.res.FontResourcesParserCompat.ProviderResourceEntry;
+import android.support.v4.content.res.ResourcesCompat;
import android.support.v4.provider.FontRequest;
+import android.support.v4.provider.FontsContractCompat;
import android.support.v4.provider.MockFontProvider;
-import android.widget.TextView;
import org.junit.After;
import org.junit.Before;
@@ -47,6 +51,8 @@
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
@SmallTest
public class TypefaceCompatTest {
@@ -134,91 +140,169 @@
return new ProviderResourceEntry(request, entry.getFetchStrategy(), entry.getTimeout());
}
- @Test
- public void testCreateFromResourcesFamilyXml_resourceFont_syncloading() throws Exception {
- Typeface typeface = TypefaceCompat.createFromResourcesFamilyXml(mContext,
- getProviderResourceEntry(R.font.styletest_sync_providerfont), mResources,
- R.font.styletest_sync_providerfont, Typeface.NORMAL, null /* TextView */);
- typeface = Typeface.create(typeface, Typeface.NORMAL);
- assertEquals(R.font.large_a, getSelectedFontResourceId(typeface));
+ public static class FontCallback extends ResourcesCompat.FontCallback {
+ private final CountDownLatch mLatch;
+ Typeface mTypeface;
- typeface = TypefaceCompat.createFromResourcesFamilyXml(mContext,
- getProviderResourceEntry(R.font.styletest_sync_providerfont), mResources,
- R.font.styletest_sync_providerfont, Typeface.ITALIC, null /* TextView */);
- typeface = Typeface.create(typeface, Typeface.ITALIC);
- assertEquals(R.font.large_b, getSelectedFontResourceId(typeface));
+ FontCallback(CountDownLatch latch) {
+ mLatch = latch;
+ }
- typeface = TypefaceCompat.createFromResourcesFamilyXml(mContext,
- getProviderResourceEntry(R.font.styletest_sync_providerfont), mResources,
- R.font.styletest_sync_providerfont, Typeface.BOLD, null /* TextView */);
- typeface = Typeface.create(typeface, Typeface.BOLD);
- assertEquals(R.font.large_c, getSelectedFontResourceId(typeface));
+ @Override
+ public void onFontRetrieved(@NonNull Typeface typeface) {
+ mTypeface = typeface;
+ mLatch.countDown();
+ }
- typeface = TypefaceCompat.createFromResourcesFamilyXml(mContext,
- getProviderResourceEntry(R.font.styletest_sync_providerfont), mResources,
- R.font.styletest_sync_providerfont, Typeface.BOLD_ITALIC, null /* TextView */);
- typeface = Typeface.create(typeface, Typeface.BOLD_ITALIC);
- assertEquals(R.font.large_d, getSelectedFontResourceId(typeface));
+ @Override
+ public void onFontRetrievalFailed(int reason) {
+ mLatch.countDown();
+ }
}
@Test
public void testCreateFromResourcesFamilyXml_resourceFont_asyncloading() throws Exception {
+ final Instrumentation inst = InstrumentationRegistry.getInstrumentation();
+ CountDownLatch latch = new CountDownLatch(1);
+ final FontCallback callback = new FontCallback(latch);
+
+ inst.runOnMainSync(new Runnable() {
+ @Override
+ public void run() {
+ TypefaceCompat.createFromResourcesFamilyXml(mContext,
+ getProviderResourceEntry(R.font.styletest_async_providerfont), mResources,
+ R.font.styletest_async_providerfont, Typeface.NORMAL, callback,
+ null /* handler */, false /* isXmlRequest */);
+ }
+ });
+ assertTrue(latch.await(5L, TimeUnit.SECONDS));
+
+ assertEquals(R.font.large_a, getSelectedFontResourceId(callback.mTypeface));
+
+ latch = new CountDownLatch(1);
+ final FontCallback callback2 = new FontCallback(latch);
+ inst.runOnMainSync(new Runnable() {
+ @Override
+ public void run() {
+ TypefaceCompat.createFromResourcesFamilyXml(mContext,
+ getProviderResourceEntry(R.font.styletest_async_providerfont), mResources,
+ R.font.styletest_async_providerfont, Typeface.ITALIC, callback2,
+ null /* handler */, false /* isXmlRequest */);
+ }
+ });
+ assertTrue(latch.await(5L, TimeUnit.SECONDS));
+ assertEquals(R.font.large_b, getSelectedFontResourceId(callback2.mTypeface));
+
+ latch = new CountDownLatch(1);
+ final FontCallback callback3 = new FontCallback(latch);
+ inst.runOnMainSync(new Runnable() {
+ @Override
+ public void run() {
+ TypefaceCompat.createFromResourcesFamilyXml(mContext,
+ getProviderResourceEntry(R.font.styletest_async_providerfont), mResources,
+ R.font.styletest_async_providerfont, Typeface.BOLD, callback3,
+ null /* handler */, false /* isXmlRequest */);
+ }
+ });
+ assertTrue(latch.await(5L, TimeUnit.SECONDS));
+ assertEquals(R.font.large_c, getSelectedFontResourceId(callback3.mTypeface));
+
+ latch = new CountDownLatch(1);
+ final FontCallback callback4 = new FontCallback(latch);
+ inst.runOnMainSync(new Runnable() {
+ @Override
+ public void run() {
+ TypefaceCompat.createFromResourcesFamilyXml(mContext,
+ getProviderResourceEntry(R.font.styletest_async_providerfont), mResources,
+ R.font.styletest_async_providerfont, Typeface.BOLD_ITALIC, callback4,
+ null /* handler */, false /* isXmlRequest */);
+ }
+ });
+ assertTrue(latch.await(5L, TimeUnit.SECONDS));
+ assertEquals(R.font.large_d, getSelectedFontResourceId(callback4.mTypeface));
+ }
+
+ @Test
+ public void testProviderFont_xmlRequest() {
+ Typeface typeface = TypefaceCompat.createFromResourcesFamilyXml(mContext,
+ getProviderResourceEntry(R.font.samplexmldownloadedfontblocking), mResources,
+ R.font.samplexmldownloadedfontblocking, Typeface.NORMAL, null,
+ null /* handler */, true /* isXmlRequest */);
+
+ assertNotNull(typeface);
+ assertNotEquals(Typeface.DEFAULT, typeface);
+ }
+
+ @Test
+ public void testProviderFont_nonXmlRequest_noCallback() {
+ // If we don't give a callback, the request should be blocking.
+ Typeface typeface = TypefaceCompat.createFromResourcesFamilyXml(mContext,
+ getProviderResourceEntry(R.font.samplexmldownloadedfontblocking), mResources,
+ R.font.samplexmldownloadedfontblocking, Typeface.NORMAL, null,
+ null /* handler */, false /* isXmlRequest */);
+
+ assertNotNull(typeface);
+ assertNotEquals(Typeface.DEFAULT, typeface);
+ }
+
+ @Test
+ public void testProviderFont_nonXmlRequest_withCallback() throws InterruptedException {
Instrumentation inst = InstrumentationRegistry.getInstrumentation();
- final TextView textView = new TextView(mContext);
- PollingCheck.PollingCheckCondition condition = new PollingCheck.PollingCheckCondition() {
- @Override
- public boolean canProceed() {
- return textView.getTypeface() != null;
- }
- };
+ CountDownLatch latch = new CountDownLatch(1);
+ final FontCallback callback = new FontCallback(latch);
+ FontsContractCompat.resetCache();
- textView.setTypeface(null);
+ final Typeface[] result = new Typeface[1];
inst.runOnMainSync(new Runnable() {
@Override
public void run() {
- TypefaceCompat.createFromResourcesFamilyXml(mContext,
- getProviderResourceEntry(R.font.styletest_async_providerfont), mResources,
- R.font.styletest_async_providerfont, Typeface.NORMAL, textView);
+ result[0] = TypefaceCompat.createFromResourcesFamilyXml(mContext,
+ getProviderResourceEntry(R.font.samplexmldownloadedfontblocking),
+ mResources, R.font.samplexmldownloadedfontblocking, Typeface.NORMAL,
+ callback, null /* handler */, false /* isXmlRequest */);
}
});
- PollingCheck.waitFor(condition);
- assertEquals(R.font.large_a, getSelectedFontResourceId(textView.getTypeface()));
+ assertTrue(latch.await(5L, TimeUnit.SECONDS));
+ assertNotNull(callback.mTypeface);
+ assertNull(result[0]);
+ }
- textView.setTypeface(null);
+ @Test
+ public void testProviderFont_nonXmlRequest_withCallback_cached() throws InterruptedException {
+ Instrumentation inst = InstrumentationRegistry.getInstrumentation();
+ CountDownLatch latch = new CountDownLatch(1);
+ final FontCallback callback = new FontCallback(latch);
+ FontsContractCompat.resetCache();
+
+ final Typeface[] result = new Typeface[2];
inst.runOnMainSync(new Runnable() {
@Override
public void run() {
- TypefaceCompat.createFromResourcesFamilyXml(mContext,
- getProviderResourceEntry(R.font.styletest_async_providerfont), mResources,
- R.font.styletest_async_providerfont, Typeface.ITALIC, textView);
+ result[0] = TypefaceCompat.createFromResourcesFamilyXml(mContext,
+ getProviderResourceEntry(R.font.samplexmldownloadedfontblocking),
+ mResources, R.font.samplexmldownloadedfontblocking, Typeface.NORMAL,
+ callback, null /* handler */, false /* isXmlRequest */);
}
});
- PollingCheck.waitFor(condition);
- assertEquals(R.font.large_b, getSelectedFontResourceId(textView.getTypeface()));
+ assertTrue(latch.await(5L, TimeUnit.SECONDS));
+ assertNotNull(callback.mTypeface);
+ assertNull(result[0]);
- textView.setTypeface(null);
+ latch = new CountDownLatch(1);
+ final FontCallback callback2 = new FontCallback(latch);
+
inst.runOnMainSync(new Runnable() {
@Override
public void run() {
- TypefaceCompat.createFromResourcesFamilyXml(mContext,
- getProviderResourceEntry(R.font.styletest_async_providerfont), mResources,
- R.font.styletest_async_providerfont, Typeface.BOLD, textView);
+ result[1] = TypefaceCompat.createFromResourcesFamilyXml(mContext,
+ getProviderResourceEntry(R.font.samplexmldownloadedfontblocking),
+ mResources, R.font.samplexmldownloadedfontblocking, Typeface.NORMAL,
+ callback2, null /* handler */, false /* isXmlRequest */);
}
});
- PollingCheck.waitFor(condition);
- assertEquals(R.font.large_c, getSelectedFontResourceId(textView.getTypeface()));
-
- textView.setTypeface(null);
- inst.runOnMainSync(new Runnable() {
- @Override
- public void run() {
- TypefaceCompat.createFromResourcesFamilyXml(mContext,
- getProviderResourceEntry(R.font.styletest_async_providerfont), mResources,
- R.font.styletest_async_providerfont, Typeface.BOLD_ITALIC, textView);
- }
- });
- PollingCheck.waitFor(condition);
- assertEquals(R.font.large_d, getSelectedFontResourceId(textView.getTypeface()));
+ assertTrue(latch.await(5L, TimeUnit.SECONDS));
+ assertNotNull(callback2.mTypeface);
+ assertNotNull(result[1]);
}
@Test
@@ -228,33 +312,45 @@
final FamilyResourceEntry entry = FontResourcesParserCompat.parse(
mResources.getXml(R.font.styletestfont), mResources);
Typeface typeface = TypefaceCompat.createFromResourcesFamilyXml(mContext, entry, mResources,
- R.font.styletestfont, Typeface.NORMAL, null /* text view */);
- assertEquals(typeface, TypefaceCompat.findFromCache(
- mResources, R.font.styletestfont, Typeface.NORMAL));
+ R.font.styletestfont, Typeface.NORMAL, null /* callback */, null /* handler */,
+ false /* isXmlRequest */);
+ Typeface cachedTypeface = TypefaceCompat.findFromCache(
+ mResources, R.font.styletestfont, Typeface.NORMAL);
+ assertNotNull(cachedTypeface);
+ assertEquals(typeface, cachedTypeface);
typeface = Typeface.create(typeface, Typeface.NORMAL);
// styletestfont has a node of fontStyle="normal" fontWeight="400" font="@font/large_a".
assertEquals(R.font.large_a, getSelectedFontResourceId(typeface));
typeface = TypefaceCompat.createFromResourcesFamilyXml(mContext, entry, mResources,
- R.font.styletestfont, Typeface.ITALIC, null);
- assertEquals(typeface, TypefaceCompat.findFromCache(
- mResources, R.font.styletestfont, Typeface.ITALIC));
+ R.font.styletestfont, Typeface.ITALIC, null /* callback */, null /* handler */,
+ false /* isXmlRequest */);
+ cachedTypeface = TypefaceCompat.findFromCache(
+ mResources, R.font.styletestfont, Typeface.ITALIC);
+ assertNotNull(cachedTypeface);
+ assertEquals(typeface, cachedTypeface);
typeface = Typeface.create(typeface, Typeface.ITALIC);
// styletestfont has a node of fontStyle="italic" fontWeight="400" font="@font/large_b".
assertEquals(R.font.large_b, getSelectedFontResourceId(typeface));
typeface = TypefaceCompat.createFromResourcesFamilyXml(mContext, entry, mResources,
- R.font.styletestfont, Typeface.BOLD, null);
- assertEquals(typeface, TypefaceCompat.findFromCache(
- mResources, R.font.styletestfont, Typeface.BOLD));
+ R.font.styletestfont, Typeface.BOLD, null /* callback */, null /* handler */,
+ false /* isXmlRequest */);
+ cachedTypeface = TypefaceCompat.findFromCache(
+ mResources, R.font.styletestfont, Typeface.BOLD);
+ assertNotNull(cachedTypeface);
+ assertEquals(typeface, cachedTypeface);
typeface = Typeface.create(typeface, Typeface.BOLD);
// styletestfont has a node of fontStyle="normal" fontWeight="700" font="@font/large_c".
assertEquals(R.font.large_c, getSelectedFontResourceId(typeface));
typeface = TypefaceCompat.createFromResourcesFamilyXml(mContext, entry, mResources,
- R.font.styletestfont, Typeface.BOLD_ITALIC, null);
- assertEquals(typeface, TypefaceCompat.findFromCache(
- mResources, R.font.styletestfont, Typeface.BOLD_ITALIC));
+ R.font.styletestfont, Typeface.BOLD_ITALIC, null /* callback */,
+ null /* handler */, false /* isXmlRequest */);
+ cachedTypeface = TypefaceCompat.findFromCache(
+ mResources, R.font.styletestfont, Typeface.BOLD_ITALIC);
+ assertNotNull(cachedTypeface);
+ assertEquals(typeface, cachedTypeface);
typeface = Typeface.create(typeface, Typeface.BOLD_ITALIC);
// styletestfont has a node of fontStyle="italic" fontWeight="700" font="@font/large_d".
assertEquals(R.font.large_d, getSelectedFontResourceId(typeface));
@@ -265,15 +361,19 @@
Typeface typeface = TypefaceCompat.createFromResourcesFontFile(mContext, mResources,
R.font.large_a, "res/font/large_a.ttf", Typeface.NORMAL);
assertNotNull(typeface);
- assertEquals(typeface, TypefaceCompat.findFromCache(
- mResources, R.font.large_a, Typeface.NORMAL));
+ Typeface cachedTypeface = TypefaceCompat.findFromCache(
+ mResources, R.font.large_a, Typeface.NORMAL);
+ assertNotNull(cachedTypeface);
+ assertEquals(typeface, cachedTypeface);
assertEquals(R.font.large_a, getSelectedFontResourceId(typeface));
typeface = TypefaceCompat.createFromResourcesFontFile(mContext, mResources, R.font.large_b,
"res/font/large_b.ttf", Typeface.NORMAL);
assertNotNull(typeface);
- assertEquals(typeface, TypefaceCompat.findFromCache(
- mResources, R.font.large_b, Typeface.NORMAL));
+ cachedTypeface = TypefaceCompat.findFromCache(
+ mResources, R.font.large_b, Typeface.NORMAL);
+ assertNotNull(cachedTypeface);
+ assertEquals(typeface, cachedTypeface);
assertEquals(R.font.large_b, getSelectedFontResourceId(typeface));
}
}
diff --git a/compat/tests/res/font/samplexmldownloadedfont.xml b/compat/tests/res/font/samplexmldownloadedfont.xml
index 659d196..824ad33 100644
--- a/compat/tests/res/font/samplexmldownloadedfont.xml
+++ b/compat/tests/res/font/samplexmldownloadedfont.xml
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:app="http://schemas.android.com/apk/res-auto"
- app:fontProviderAuthority="com.example.test.fontprovider.authority"
- app:fontProviderPackage="com.example.test.fontprovider.package"
- app:fontProviderQuery="MyRequestedFont">
+ app:fontProviderAuthority="android.support.provider.fonts.font"
+ app:fontProviderPackage="android.support.compat.test"
+ app:fontProviderQuery="singleFontFamily"
+ app:fontProviderCerts="@array/mock_provider_certs">
</font-family>
diff --git a/compat/tests/res/font/samplexmldownloadedfontblocking.xml b/compat/tests/res/font/samplexmldownloadedfontblocking.xml
new file mode 100644
index 0000000..3da2382
--- /dev/null
+++ b/compat/tests/res/font/samplexmldownloadedfontblocking.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<font-family xmlns:app="http://schemas.android.com/apk/res-auto"
+ app:fontProviderAuthority="android.support.provider.fonts.font"
+ app:fontProviderPackage="android.support.compat.test"
+ app:fontProviderQuery="singleFontFamily"
+ app:fontProviderFetchStrategy="blocking"
+ app:fontProviderCerts="@array/mock_provider_certs"
+ app:fontProviderFetchTimeout="-1">
+</font-family>
diff --git a/compat/tests/res/font/samplexmlfont2.xml b/compat/tests/res/font/samplexmlfont2.xml
new file mode 100644
index 0000000..b2f4c50
--- /dev/null
+++ b/compat/tests/res/font/samplexmlfont2.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2017 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<font-family xmlns:android="http://schemas.android.com/apk/res/android" >
+ <font android:fontStyle="normal" android:fontWeight="400" android:font="@font/samplefont" />
+ <font android:fontStyle="italic" android:fontWeight="400" android:font="@font/samplefont2" />
+ <font android:fontStyle="normal" android:fontWeight="700" android:font="@font/samplefont3" />
+ <font android:fontStyle="italic" android:fontWeight="700" android:font="@font/samplefont4" />
+</font-family>
diff --git a/compat/tests/res/values/arrays.xml b/compat/tests/res/values/arrays.xml
index 1aa87fd..5c127ca 100644
--- a/compat/tests/res/values/arrays.xml
+++ b/compat/tests/res/values/arrays.xml
@@ -30,4 +30,9 @@
<item>@array/certs1</item>
<item>@array/certs2</item>
</array>
+
+ <!-- These are the actual certs for the test running app. -->
+ <array name="mock_provider_certs">
+ <item>MIIB3TCCAUYCAQEwDQYJKoZIhvcNAQEFBQAwNzEWMBQGA1UEAwwNQW5kcm9pZCBEZWJ1ZzEQMA4GA1UECgwHQW5kcm9pZDELMAkGA1UEBhMCVVMwHhcNMTcwMzEwMjE0NzIxWhcNNDcwMzAzMjE0NzIxWjA3MRYwFAYDVQQDDA1BbmRyb2lkIERlYnVnMRAwDgYDVQQKDAdBbmRyb2lkMQswCQYDVQQGEwJVUzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAg9zgUpOAhXrfE17OYlLWkTGCvnSXWi94SpnyVBVZqq33OCbNKaIi5s314f4rhTFp4LDLFozIUihTOH1pJGLvRFqFu78vIpWBNOlj5mDJThBme6Z+eElnIttK/ivcfyaFM1dc55apQIlf9aDCLX6lEp7p1/O0rJKuXWalte+nYwcCAwEAATANBgkqhkiG9w0BAQUFAAOBgQBE6FFD5jx725gyV9Nevmlv7ndQ8/CKj1NC4C2g7sh/wLtegEU8k6VCUyLRl8EEEnXQUtRg7KVquDWwMTKtXZP8EghQ1AGIklH2u1z4w9DgdD0CrJZ9TGPN3jpbOj5RujkHoRr+g6mwMluq0vH1GnOUMEtshkybq15SbDOmXjEUJA==</item>
+ </array>
</resources>
\ No newline at end of file
diff --git a/content/Android.mk b/content/Android.mk
index eff8215..32caf53 100644
--- a/content/Android.mk
+++ b/content/Android.mk
@@ -18,7 +18,7 @@
LOCAL_USE_AAPT2 := true
LOCAL_MODULE := android-support-content
LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
+LOCAL_SRC_FILES := $(call all-java-files-under, src/main/java)
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
LOCAL_SHARED_ANDROID_LIBRARIES := \
android-support-compat \
diff --git a/content/AndroidManifest.xml b/content/AndroidManifest.xml
index 8304504..8d2bc4b 100644
--- a/content/AndroidManifest.xml
+++ b/content/AndroidManifest.xml
@@ -16,8 +16,4 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.support.content">
<uses-sdk android:minSdkVersion="14" />
- <application>
- <meta-data android:name="android.support.content.VERSION"
- android:value="${support-version}" />
- </application>
</manifest>
diff --git a/content/api/27.0.0.txt b/content/api/27.0.0.txt
new file mode 100644
index 0000000..e0b4fa3
--- /dev/null
+++ b/content/api/27.0.0.txt
@@ -0,0 +1,54 @@
+package android.support.content {
+
+ public class ContentPager {
+ ctor public ContentPager(android.content.ContentResolver, android.support.content.ContentPager.QueryRunner);
+ ctor public ContentPager(android.content.ContentResolver, android.support.content.ContentPager.QueryRunner, int);
+ method public static android.os.Bundle createArgs(int, int);
+ method public android.support.content.Query query(android.net.Uri, java.lang.String[], android.os.Bundle, android.os.CancellationSignal, android.support.content.ContentPager.ContentCallback);
+ method public void reset();
+ field public static final int CURSOR_DISPOSITION_COPIED = 1; // 0x1
+ field public static final int CURSOR_DISPOSITION_PAGED = 2; // 0x2
+ field public static final int CURSOR_DISPOSITION_REPAGED = 3; // 0x3
+ field public static final int CURSOR_DISPOSITION_WRAPPED = 4; // 0x4
+ field public static final java.lang.String EXTRA_HONORED_ARGS = "android.content.extra.HONORED_ARGS";
+ field public static final java.lang.String EXTRA_REQUESTED_LIMIT = "android-support:extra-ignored-limit";
+ field public static final java.lang.String EXTRA_SUGGESTED_LIMIT = "android-support:extra-suggested-limit";
+ field public static final java.lang.String EXTRA_TOTAL_COUNT = "android.content.extra.TOTAL_COUNT";
+ field public static final java.lang.String QUERY_ARG_LIMIT = "android:query-arg-limit";
+ field public static final java.lang.String QUERY_ARG_OFFSET = "android:query-arg-offset";
+ }
+
+ public static abstract interface ContentPager.ContentCallback {
+ method public abstract void onCursorReady(android.support.content.Query, android.database.Cursor);
+ }
+
+ public static abstract class ContentPager.CursorDisposition implements java.lang.annotation.Annotation {
+ }
+
+ public static abstract interface ContentPager.QueryRunner {
+ method public abstract void cancel(android.support.content.Query);
+ method public abstract boolean isRunning(android.support.content.Query);
+ method public abstract void query(android.support.content.Query, android.support.content.ContentPager.QueryRunner.Callback);
+ }
+
+ public static abstract interface ContentPager.QueryRunner.Callback {
+ method public abstract void onQueryFinished(android.support.content.Query, android.database.Cursor);
+ method public abstract android.database.Cursor runQueryInBackground(android.support.content.Query);
+ }
+
+ public final class LoaderQueryRunner implements android.support.content.ContentPager.QueryRunner {
+ ctor public LoaderQueryRunner(android.content.Context, android.app.LoaderManager);
+ method public void cancel(android.support.content.Query);
+ method public boolean isRunning(android.support.content.Query);
+ method public void query(android.support.content.Query, android.support.content.ContentPager.QueryRunner.Callback);
+ }
+
+ public final class Query {
+ method public int getId();
+ method public int getLimit();
+ method public int getOffset();
+ method public android.net.Uri getUri();
+ }
+
+}
+
diff --git a/content/build.gradle b/content/build.gradle
index 1b2d182..af33423 100644
--- a/content/build.gradle
+++ b/content/build.gradle
@@ -29,11 +29,6 @@
defaultConfig {
minSdkVersion 14
}
-
- sourceSets {
- main.java.srcDirs = ['src']
- main.res.srcDir 'res'
- }
}
supportLibrary {
diff --git a/content/src/android/support/content/ContentPager.java b/content/src/main/java/android/support/content/ContentPager.java
similarity index 100%
rename from content/src/android/support/content/ContentPager.java
rename to content/src/main/java/android/support/content/ContentPager.java
diff --git a/content/src/android/support/content/InMemoryCursor.java b/content/src/main/java/android/support/content/InMemoryCursor.java
similarity index 100%
rename from content/src/android/support/content/InMemoryCursor.java
rename to content/src/main/java/android/support/content/InMemoryCursor.java
diff --git a/content/src/android/support/content/LoaderQueryRunner.java b/content/src/main/java/android/support/content/LoaderQueryRunner.java
similarity index 100%
rename from content/src/android/support/content/LoaderQueryRunner.java
rename to content/src/main/java/android/support/content/LoaderQueryRunner.java
diff --git a/content/src/android/support/content/Query.java b/content/src/main/java/android/support/content/Query.java
similarity index 100%
rename from content/src/android/support/content/Query.java
rename to content/src/main/java/android/support/content/Query.java
diff --git a/core-ui/Android.mk b/core-ui/Android.mk
index bb7a4be..184d7be 100644
--- a/core-ui/Android.mk
+++ b/core-ui/Android.mk
@@ -26,7 +26,7 @@
LOCAL_USE_AAPT2 := true
LOCAL_MODULE := android-support-core-ui
LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_SRC_FILES := $(call all-java-files-under,java)
+LOCAL_SRC_FILES := $(call all-java-files-under,src/main/java)
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
LOCAL_SHARED_ANDROID_LIBRARIES := \
android-support-compat \
diff --git a/core-ui/AndroidManifest.xml b/core-ui/AndroidManifest.xml
index 715f92c..f498d26 100644
--- a/core-ui/AndroidManifest.xml
+++ b/core-ui/AndroidManifest.xml
@@ -16,8 +16,4 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.support.coreui">
<uses-sdk android:minSdkVersion="14"/>
- <application>
- <meta-data android:name="android.support.coreui.VERSION"
- android:value="${support-version}" />
- </application>
</manifest>
diff --git a/core-ui/api/26.1.0.txt b/core-ui/api/26.1.0.txt
new file mode 100644
index 0000000..6ae4b1a
--- /dev/null
+++ b/core-ui/api/26.1.0.txt
@@ -0,0 +1,655 @@
+package android.support.v4.app {
+
+ public deprecated class ActionBarDrawerToggle implements android.support.v4.widget.DrawerLayout.DrawerListener {
+ ctor public ActionBarDrawerToggle(android.app.Activity, android.support.v4.widget.DrawerLayout, int, int, int);
+ ctor public ActionBarDrawerToggle(android.app.Activity, android.support.v4.widget.DrawerLayout, boolean, int, int, int);
+ method public boolean isDrawerIndicatorEnabled();
+ method public void onConfigurationChanged(android.content.res.Configuration);
+ method public void onDrawerClosed(android.view.View);
+ method public void onDrawerOpened(android.view.View);
+ method public void onDrawerSlide(android.view.View, float);
+ method public void onDrawerStateChanged(int);
+ method public boolean onOptionsItemSelected(android.view.MenuItem);
+ method public void setDrawerIndicatorEnabled(boolean);
+ method public void setHomeAsUpIndicator(android.graphics.drawable.Drawable);
+ method public void setHomeAsUpIndicator(int);
+ method public void syncState();
+ }
+
+ public static abstract deprecated interface ActionBarDrawerToggle.Delegate {
+ method public abstract android.graphics.drawable.Drawable getThemeUpIndicator();
+ method public abstract void setActionBarDescription(int);
+ method public abstract void setActionBarUpIndicator(android.graphics.drawable.Drawable, int);
+ }
+
+ public static abstract deprecated interface ActionBarDrawerToggle.DelegateProvider {
+ method public abstract android.support.v4.app.ActionBarDrawerToggle.Delegate getDrawerToggleDelegate();
+ }
+
+}
+
+package android.support.v4.view {
+
+ public abstract class AbsSavedState implements android.os.Parcelable {
+ ctor protected AbsSavedState(android.os.Parcelable);
+ ctor protected AbsSavedState(android.os.Parcel);
+ ctor protected AbsSavedState(android.os.Parcel, java.lang.ClassLoader);
+ method public int describeContents();
+ method public final android.os.Parcelable getSuperState();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.view.AbsSavedState> CREATOR;
+ field public static final android.support.v4.view.AbsSavedState EMPTY_STATE;
+ }
+
+ public final class AsyncLayoutInflater {
+ ctor public AsyncLayoutInflater(android.content.Context);
+ method public void inflate(int, android.view.ViewGroup, android.support.v4.view.AsyncLayoutInflater.OnInflateFinishedListener);
+ }
+
+ public static abstract interface AsyncLayoutInflater.OnInflateFinishedListener {
+ method public abstract void onInflateFinished(android.view.View, int, android.view.ViewGroup);
+ }
+
+ public class NestedScrollingChildHelper {
+ ctor public NestedScrollingChildHelper(android.view.View);
+ method public boolean dispatchNestedFling(float, float, boolean);
+ method public boolean dispatchNestedPreFling(float, float);
+ method public boolean dispatchNestedPreScroll(int, int, int[], int[]);
+ method public boolean dispatchNestedPreScroll(int, int, int[], int[], int);
+ method public boolean dispatchNestedScroll(int, int, int, int, int[]);
+ method public boolean dispatchNestedScroll(int, int, int, int, int[], int);
+ method public boolean hasNestedScrollingParent();
+ method public boolean hasNestedScrollingParent(int);
+ method public boolean isNestedScrollingEnabled();
+ method public void onDetachedFromWindow();
+ method public void onStopNestedScroll(android.view.View);
+ method public void setNestedScrollingEnabled(boolean);
+ method public boolean startNestedScroll(int);
+ method public boolean startNestedScroll(int, int);
+ method public void stopNestedScroll();
+ method public void stopNestedScroll(int);
+ }
+
+ public class NestedScrollingParentHelper {
+ ctor public NestedScrollingParentHelper(android.view.ViewGroup);
+ method public int getNestedScrollAxes();
+ method public void onNestedScrollAccepted(android.view.View, android.view.View, int);
+ method public void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
+ method public void onStopNestedScroll(android.view.View);
+ method public void onStopNestedScroll(android.view.View, int);
+ }
+
+ public abstract class PagerAdapter {
+ ctor public PagerAdapter();
+ method public void destroyItem(android.view.ViewGroup, int, java.lang.Object);
+ method public deprecated void destroyItem(android.view.View, int, java.lang.Object);
+ method public void finishUpdate(android.view.ViewGroup);
+ method public deprecated void finishUpdate(android.view.View);
+ method public abstract int getCount();
+ method public int getItemPosition(java.lang.Object);
+ method public java.lang.CharSequence getPageTitle(int);
+ method public float getPageWidth(int);
+ method public java.lang.Object instantiateItem(android.view.ViewGroup, int);
+ method public deprecated java.lang.Object instantiateItem(android.view.View, int);
+ method public abstract boolean isViewFromObject(android.view.View, java.lang.Object);
+ method public void notifyDataSetChanged();
+ method public void registerDataSetObserver(android.database.DataSetObserver);
+ method public void restoreState(android.os.Parcelable, java.lang.ClassLoader);
+ method public android.os.Parcelable saveState();
+ method public void setPrimaryItem(android.view.ViewGroup, int, java.lang.Object);
+ method public deprecated void setPrimaryItem(android.view.View, int, java.lang.Object);
+ method public void startUpdate(android.view.ViewGroup);
+ method public deprecated void startUpdate(android.view.View);
+ method public void unregisterDataSetObserver(android.database.DataSetObserver);
+ field public static final int POSITION_NONE = -2; // 0xfffffffe
+ field public static final int POSITION_UNCHANGED = -1; // 0xffffffff
+ }
+
+ public class PagerTabStrip extends android.support.v4.view.PagerTitleStrip {
+ ctor public PagerTabStrip(android.content.Context);
+ ctor public PagerTabStrip(android.content.Context, android.util.AttributeSet);
+ method public boolean getDrawFullUnderline();
+ method public int getTabIndicatorColor();
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+ method public void setDrawFullUnderline(boolean);
+ method public void setTabIndicatorColor(int);
+ method public void setTabIndicatorColorResource(int);
+ }
+
+ public class PagerTitleStrip extends android.view.ViewGroup {
+ ctor public PagerTitleStrip(android.content.Context);
+ ctor public PagerTitleStrip(android.content.Context, android.util.AttributeSet);
+ method public int getTextSpacing();
+ method protected void onLayout(boolean, int, int, int, int);
+ method public void setGravity(int);
+ method public void setNonPrimaryAlpha(float);
+ method public void setTextColor(int);
+ method public void setTextSize(int, float);
+ method public void setTextSpacing(int);
+ }
+
+ public class ViewPager extends android.view.ViewGroup {
+ ctor public ViewPager(android.content.Context);
+ ctor public ViewPager(android.content.Context, android.util.AttributeSet);
+ method public void addOnAdapterChangeListener(android.support.v4.view.ViewPager.OnAdapterChangeListener);
+ method public void addOnPageChangeListener(android.support.v4.view.ViewPager.OnPageChangeListener);
+ method public boolean arrowScroll(int);
+ method public boolean beginFakeDrag();
+ method protected boolean canScroll(android.view.View, boolean, int, int, int);
+ method public void clearOnPageChangeListeners();
+ method public void endFakeDrag();
+ method public boolean executeKeyEvent(android.view.KeyEvent);
+ method public void fakeDragBy(float);
+ method public android.support.v4.view.PagerAdapter getAdapter();
+ method public int getCurrentItem();
+ method public int getOffscreenPageLimit();
+ method public int getPageMargin();
+ method public boolean isFakeDragging();
+ method protected void onLayout(boolean, int, int, int, int);
+ method protected void onPageScrolled(int, float, int);
+ method public void onRestoreInstanceState(android.os.Parcelable);
+ method public android.os.Parcelable onSaveInstanceState();
+ method public void removeOnAdapterChangeListener(android.support.v4.view.ViewPager.OnAdapterChangeListener);
+ method public void removeOnPageChangeListener(android.support.v4.view.ViewPager.OnPageChangeListener);
+ method public void setAdapter(android.support.v4.view.PagerAdapter);
+ method public void setCurrentItem(int);
+ method public void setCurrentItem(int, boolean);
+ method public void setOffscreenPageLimit(int);
+ method public deprecated void setOnPageChangeListener(android.support.v4.view.ViewPager.OnPageChangeListener);
+ method public void setPageMargin(int);
+ method public void setPageMarginDrawable(android.graphics.drawable.Drawable);
+ method public void setPageMarginDrawable(int);
+ method public void setPageTransformer(boolean, android.support.v4.view.ViewPager.PageTransformer);
+ method public void setPageTransformer(boolean, android.support.v4.view.ViewPager.PageTransformer, int);
+ field public static final int SCROLL_STATE_DRAGGING = 1; // 0x1
+ field public static final int SCROLL_STATE_IDLE = 0; // 0x0
+ field public static final int SCROLL_STATE_SETTLING = 2; // 0x2
+ }
+
+ public static abstract class ViewPager.DecorView implements java.lang.annotation.Annotation {
+ }
+
+ public static class ViewPager.LayoutParams extends android.view.ViewGroup.LayoutParams {
+ ctor public ViewPager.LayoutParams();
+ ctor public ViewPager.LayoutParams(android.content.Context, android.util.AttributeSet);
+ field public int gravity;
+ field public boolean isDecor;
+ }
+
+ public static abstract interface ViewPager.OnAdapterChangeListener {
+ method public abstract void onAdapterChanged(android.support.v4.view.ViewPager, android.support.v4.view.PagerAdapter, android.support.v4.view.PagerAdapter);
+ }
+
+ public static abstract interface ViewPager.OnPageChangeListener {
+ method public abstract void onPageScrollStateChanged(int);
+ method public abstract void onPageScrolled(int, float, int);
+ method public abstract void onPageSelected(int);
+ }
+
+ public static abstract interface ViewPager.PageTransformer {
+ method public abstract void transformPage(android.view.View, float);
+ }
+
+ public static class ViewPager.SavedState extends android.support.v4.view.AbsSavedState {
+ ctor public ViewPager.SavedState(android.os.Parcelable);
+ field public static final android.os.Parcelable.Creator<android.support.v4.view.ViewPager.SavedState> CREATOR;
+ }
+
+ public static class ViewPager.SimpleOnPageChangeListener implements android.support.v4.view.ViewPager.OnPageChangeListener {
+ ctor public ViewPager.SimpleOnPageChangeListener();
+ method public void onPageScrollStateChanged(int);
+ method public void onPageScrolled(int, float, int);
+ method public void onPageSelected(int);
+ }
+
+}
+
+package android.support.v4.view.animation {
+
+ public class FastOutLinearInInterpolator extends android.support.v4.view.animation.LookupTableInterpolator {
+ ctor public FastOutLinearInInterpolator();
+ }
+
+ public class FastOutSlowInInterpolator extends android.support.v4.view.animation.LookupTableInterpolator {
+ ctor public FastOutSlowInInterpolator();
+ }
+
+ public class LinearOutSlowInInterpolator extends android.support.v4.view.animation.LookupTableInterpolator {
+ ctor public LinearOutSlowInInterpolator();
+ }
+
+ abstract class LookupTableInterpolator implements android.view.animation.Interpolator {
+ ctor public LookupTableInterpolator(float[]);
+ method public float getInterpolation(float);
+ }
+
+}
+
+package android.support.v4.widget {
+
+ public abstract class AutoScrollHelper implements android.view.View.OnTouchListener {
+ ctor public AutoScrollHelper(android.view.View);
+ method public abstract boolean canTargetScrollHorizontally(int);
+ method public abstract boolean canTargetScrollVertically(int);
+ method public boolean isEnabled();
+ method public boolean isExclusive();
+ method public boolean onTouch(android.view.View, android.view.MotionEvent);
+ method public abstract void scrollTargetBy(int, int);
+ method public android.support.v4.widget.AutoScrollHelper setActivationDelay(int);
+ method public android.support.v4.widget.AutoScrollHelper setEdgeType(int);
+ method public android.support.v4.widget.AutoScrollHelper setEnabled(boolean);
+ method public android.support.v4.widget.AutoScrollHelper setExclusive(boolean);
+ method public android.support.v4.widget.AutoScrollHelper setMaximumEdges(float, float);
+ method public android.support.v4.widget.AutoScrollHelper setMaximumVelocity(float, float);
+ method public android.support.v4.widget.AutoScrollHelper setMinimumVelocity(float, float);
+ method public android.support.v4.widget.AutoScrollHelper setRampDownDuration(int);
+ method public android.support.v4.widget.AutoScrollHelper setRampUpDuration(int);
+ method public android.support.v4.widget.AutoScrollHelper setRelativeEdges(float, float);
+ method public android.support.v4.widget.AutoScrollHelper setRelativeVelocity(float, float);
+ field public static final int EDGE_TYPE_INSIDE = 0; // 0x0
+ field public static final int EDGE_TYPE_INSIDE_EXTEND = 1; // 0x1
+ field public static final int EDGE_TYPE_OUTSIDE = 2; // 0x2
+ field public static final float NO_MAX = 3.4028235E38f;
+ field public static final float NO_MIN = 0.0f;
+ field public static final float RELATIVE_UNSPECIFIED = 0.0f;
+ }
+
+ public class CircularProgressDrawable extends android.graphics.drawable.Drawable {
+ ctor public CircularProgressDrawable(android.content.Context);
+ method public void draw(android.graphics.Canvas);
+ method public boolean getArrowEnabled();
+ method public float getArrowHeight();
+ method public float getArrowScale();
+ method public float getArrowWidth();
+ method public int getBackgroundColor();
+ method public float getCenterRadius();
+ method public int[] getColorSchemeColors();
+ method public float getEndTrim();
+ method public int getOpacity();
+ method public float getProgressRotation();
+ method public float getStartTrim();
+ method public android.graphics.Paint.Cap getStrokeCap();
+ method public float getStrokeWidth();
+ method public boolean isRunning();
+ method public void setAlpha(int);
+ method public void setArrowDimensions(float, float);
+ method public void setArrowEnabled(boolean);
+ method public void setArrowScale(float);
+ method public void setBackgroundColor(int);
+ method public void setCenterRadius(float);
+ method public void setColorFilter(android.graphics.ColorFilter);
+ method public void setColorSchemeColors(int...);
+ method public void setProgressRotation(float);
+ method public void setStartEndTrim(float, float);
+ method public void setStrokeCap(android.graphics.Paint.Cap);
+ method public void setStrokeWidth(float);
+ method public void setStyle(int);
+ method public void start();
+ method public void stop();
+ field public static final int DEFAULT = 1; // 0x1
+ field public static final int LARGE = 0; // 0x0
+ }
+
+ public class ContentLoadingProgressBar extends android.widget.ProgressBar {
+ ctor public ContentLoadingProgressBar(android.content.Context);
+ ctor public ContentLoadingProgressBar(android.content.Context, android.util.AttributeSet);
+ method public void hide();
+ method public void onAttachedToWindow();
+ method public void onDetachedFromWindow();
+ method public void show();
+ }
+
+ public abstract class CursorAdapter extends android.widget.BaseAdapter {
+ ctor public deprecated CursorAdapter(android.content.Context, android.database.Cursor);
+ ctor public CursorAdapter(android.content.Context, android.database.Cursor, boolean);
+ ctor public CursorAdapter(android.content.Context, android.database.Cursor, int);
+ method public abstract void bindView(android.view.View, android.content.Context, android.database.Cursor);
+ method public void changeCursor(android.database.Cursor);
+ method public java.lang.CharSequence convertToString(android.database.Cursor);
+ method public int getCount();
+ method public android.database.Cursor getCursor();
+ method public android.widget.Filter getFilter();
+ method public android.widget.FilterQueryProvider getFilterQueryProvider();
+ method public java.lang.Object getItem(int);
+ method public long getItemId(int);
+ method public android.view.View getView(int, android.view.View, android.view.ViewGroup);
+ method protected deprecated void init(android.content.Context, android.database.Cursor, boolean);
+ method public android.view.View newDropDownView(android.content.Context, android.database.Cursor, android.view.ViewGroup);
+ method public abstract android.view.View newView(android.content.Context, android.database.Cursor, android.view.ViewGroup);
+ method protected void onContentChanged();
+ method public android.database.Cursor runQueryOnBackgroundThread(java.lang.CharSequence);
+ method public void setFilterQueryProvider(android.widget.FilterQueryProvider);
+ method public android.database.Cursor swapCursor(android.database.Cursor);
+ field public static final deprecated int FLAG_AUTO_REQUERY = 1; // 0x1
+ field public static final int FLAG_REGISTER_CONTENT_OBSERVER = 2; // 0x2
+ }
+
+ public class DrawerLayout extends android.view.ViewGroup {
+ ctor public DrawerLayout(android.content.Context);
+ ctor public DrawerLayout(android.content.Context, android.util.AttributeSet);
+ ctor public DrawerLayout(android.content.Context, android.util.AttributeSet, int);
+ method public void addDrawerListener(android.support.v4.widget.DrawerLayout.DrawerListener);
+ method public void closeDrawer(android.view.View);
+ method public void closeDrawer(android.view.View, boolean);
+ method public void closeDrawer(int);
+ method public void closeDrawer(int, boolean);
+ method public void closeDrawers();
+ method public float getDrawerElevation();
+ method public int getDrawerLockMode(int);
+ method public int getDrawerLockMode(android.view.View);
+ method public java.lang.CharSequence getDrawerTitle(int);
+ method public android.graphics.drawable.Drawable getStatusBarBackgroundDrawable();
+ method public boolean isDrawerOpen(android.view.View);
+ method public boolean isDrawerOpen(int);
+ method public boolean isDrawerVisible(android.view.View);
+ method public boolean isDrawerVisible(int);
+ method public void onDraw(android.graphics.Canvas);
+ method protected void onLayout(boolean, int, int, int, int);
+ method public void openDrawer(android.view.View);
+ method public void openDrawer(android.view.View, boolean);
+ method public void openDrawer(int);
+ method public void openDrawer(int, boolean);
+ method public void removeDrawerListener(android.support.v4.widget.DrawerLayout.DrawerListener);
+ method public void setDrawerElevation(float);
+ method public deprecated void setDrawerListener(android.support.v4.widget.DrawerLayout.DrawerListener);
+ method public void setDrawerLockMode(int);
+ method public void setDrawerLockMode(int, int);
+ method public void setDrawerLockMode(int, android.view.View);
+ method public void setDrawerShadow(android.graphics.drawable.Drawable, int);
+ method public void setDrawerShadow(int, int);
+ method public void setDrawerTitle(int, java.lang.CharSequence);
+ method public void setScrimColor(int);
+ method public void setStatusBarBackground(android.graphics.drawable.Drawable);
+ method public void setStatusBarBackground(int);
+ method public void setStatusBarBackgroundColor(int);
+ field public static final int LOCK_MODE_LOCKED_CLOSED = 1; // 0x1
+ field public static final int LOCK_MODE_LOCKED_OPEN = 2; // 0x2
+ field public static final int LOCK_MODE_UNDEFINED = 3; // 0x3
+ field public static final int LOCK_MODE_UNLOCKED = 0; // 0x0
+ field public static final int STATE_DRAGGING = 1; // 0x1
+ field public static final int STATE_IDLE = 0; // 0x0
+ field public static final int STATE_SETTLING = 2; // 0x2
+ }
+
+ public static abstract interface DrawerLayout.DrawerListener {
+ method public abstract void onDrawerClosed(android.view.View);
+ method public abstract void onDrawerOpened(android.view.View);
+ method public abstract void onDrawerSlide(android.view.View, float);
+ method public abstract void onDrawerStateChanged(int);
+ }
+
+ public static class DrawerLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+ ctor public DrawerLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
+ ctor public DrawerLayout.LayoutParams(int, int);
+ ctor public DrawerLayout.LayoutParams(int, int, int);
+ ctor public DrawerLayout.LayoutParams(android.support.v4.widget.DrawerLayout.LayoutParams);
+ ctor public DrawerLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public DrawerLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ field public int gravity;
+ }
+
+ protected static class DrawerLayout.SavedState extends android.support.v4.view.AbsSavedState {
+ ctor public DrawerLayout.SavedState(android.os.Parcel, java.lang.ClassLoader);
+ ctor public DrawerLayout.SavedState(android.os.Parcelable);
+ field public static final android.os.Parcelable.Creator<android.support.v4.widget.DrawerLayout.SavedState> CREATOR;
+ }
+
+ public static abstract class DrawerLayout.SimpleDrawerListener implements android.support.v4.widget.DrawerLayout.DrawerListener {
+ ctor public DrawerLayout.SimpleDrawerListener();
+ method public void onDrawerClosed(android.view.View);
+ method public void onDrawerOpened(android.view.View);
+ method public void onDrawerSlide(android.view.View, float);
+ method public void onDrawerStateChanged(int);
+ }
+
+ public abstract class ExploreByTouchHelper extends android.support.v4.view.AccessibilityDelegateCompat {
+ ctor public ExploreByTouchHelper(android.view.View);
+ method public final boolean clearKeyboardFocusForVirtualView(int);
+ method public final boolean dispatchHoverEvent(android.view.MotionEvent);
+ method public final boolean dispatchKeyEvent(android.view.KeyEvent);
+ method public final int getAccessibilityFocusedVirtualViewId();
+ method public deprecated int getFocusedVirtualView();
+ method public final int getKeyboardFocusedVirtualViewId();
+ method protected abstract int getVirtualViewAt(float, float);
+ method protected abstract void getVisibleVirtualViews(java.util.List<java.lang.Integer>);
+ method public final void invalidateRoot();
+ method public final void invalidateVirtualView(int);
+ method public final void invalidateVirtualView(int, int);
+ method public final void onFocusChanged(boolean, int, android.graphics.Rect);
+ method protected abstract boolean onPerformActionForVirtualView(int, int, android.os.Bundle);
+ method protected void onPopulateEventForHost(android.view.accessibility.AccessibilityEvent);
+ method protected void onPopulateEventForVirtualView(int, android.view.accessibility.AccessibilityEvent);
+ method protected void onPopulateNodeForHost(android.support.v4.view.accessibility.AccessibilityNodeInfoCompat);
+ method protected abstract void onPopulateNodeForVirtualView(int, android.support.v4.view.accessibility.AccessibilityNodeInfoCompat);
+ method protected void onVirtualViewKeyboardFocusChanged(int, boolean);
+ method public final boolean requestKeyboardFocusForVirtualView(int);
+ method public final boolean sendEventForVirtualView(int, int);
+ field public static final int HOST_ID = -1; // 0xffffffff
+ field public static final int INVALID_ID = -2147483648; // 0x80000000
+ }
+
+ public class ListViewAutoScrollHelper extends android.support.v4.widget.AutoScrollHelper {
+ ctor public ListViewAutoScrollHelper(android.widget.ListView);
+ method public boolean canTargetScrollHorizontally(int);
+ method public boolean canTargetScrollVertically(int);
+ method public void scrollTargetBy(int, int);
+ }
+
+ public class NestedScrollView extends android.widget.FrameLayout {
+ ctor public NestedScrollView(android.content.Context);
+ ctor public NestedScrollView(android.content.Context, android.util.AttributeSet);
+ ctor public NestedScrollView(android.content.Context, android.util.AttributeSet, int);
+ method public boolean arrowScroll(int);
+ method protected int computeScrollDeltaToGetChildRectOnScreen(android.graphics.Rect);
+ method public boolean dispatchNestedPreScroll(int, int, int[], int[], int);
+ method public boolean dispatchNestedScroll(int, int, int, int, int[], int);
+ method public boolean executeKeyEvent(android.view.KeyEvent);
+ method public void fling(int);
+ method public boolean fullScroll(int);
+ method public int getMaxScrollAmount();
+ method public boolean hasNestedScrollingParent(int);
+ method public boolean isFillViewport();
+ method public boolean isSmoothScrollingEnabled();
+ method public void onAttachedToWindow();
+ method public boolean pageScroll(int);
+ method public void setFillViewport(boolean);
+ method public void setOnScrollChangeListener(android.support.v4.widget.NestedScrollView.OnScrollChangeListener);
+ method public void setSmoothScrollingEnabled(boolean);
+ method public final void smoothScrollBy(int, int);
+ method public final void smoothScrollTo(int, int);
+ method public boolean startNestedScroll(int, int);
+ method public void stopNestedScroll(int);
+ }
+
+ public static abstract interface NestedScrollView.OnScrollChangeListener {
+ method public abstract void onScrollChange(android.support.v4.widget.NestedScrollView, int, int, int, int);
+ }
+
+ public abstract class ResourceCursorAdapter extends android.support.v4.widget.CursorAdapter {
+ ctor public deprecated ResourceCursorAdapter(android.content.Context, int, android.database.Cursor);
+ ctor public deprecated ResourceCursorAdapter(android.content.Context, int, android.database.Cursor, boolean);
+ ctor public ResourceCursorAdapter(android.content.Context, int, android.database.Cursor, int);
+ method public android.view.View newView(android.content.Context, android.database.Cursor, android.view.ViewGroup);
+ method public void setDropDownViewResource(int);
+ method public void setViewResource(int);
+ }
+
+ public class SimpleCursorAdapter extends android.support.v4.widget.ResourceCursorAdapter {
+ ctor public deprecated SimpleCursorAdapter(android.content.Context, int, android.database.Cursor, java.lang.String[], int[]);
+ ctor public SimpleCursorAdapter(android.content.Context, int, android.database.Cursor, java.lang.String[], int[], int);
+ method public void bindView(android.view.View, android.content.Context, android.database.Cursor);
+ method public void changeCursorAndColumns(android.database.Cursor, java.lang.String[], int[]);
+ method public android.support.v4.widget.SimpleCursorAdapter.CursorToStringConverter getCursorToStringConverter();
+ method public int getStringConversionColumn();
+ method public android.support.v4.widget.SimpleCursorAdapter.ViewBinder getViewBinder();
+ method public void setCursorToStringConverter(android.support.v4.widget.SimpleCursorAdapter.CursorToStringConverter);
+ method public void setStringConversionColumn(int);
+ method public void setViewBinder(android.support.v4.widget.SimpleCursorAdapter.ViewBinder);
+ method public void setViewImage(android.widget.ImageView, java.lang.String);
+ method public void setViewText(android.widget.TextView, java.lang.String);
+ }
+
+ public static abstract interface SimpleCursorAdapter.CursorToStringConverter {
+ method public abstract java.lang.CharSequence convertToString(android.database.Cursor);
+ }
+
+ public static abstract interface SimpleCursorAdapter.ViewBinder {
+ method public abstract boolean setViewValue(android.view.View, android.database.Cursor, int);
+ }
+
+ public class SlidingPaneLayout extends android.view.ViewGroup {
+ ctor public SlidingPaneLayout(android.content.Context);
+ ctor public SlidingPaneLayout(android.content.Context, android.util.AttributeSet);
+ ctor public SlidingPaneLayout(android.content.Context, android.util.AttributeSet, int);
+ method protected boolean canScroll(android.view.View, boolean, int, int, int);
+ method public deprecated boolean canSlide();
+ method public boolean closePane();
+ method public int getCoveredFadeColor();
+ method public int getParallaxDistance();
+ method public int getSliderFadeColor();
+ method public boolean isOpen();
+ method public boolean isSlideable();
+ method protected void onLayout(boolean, int, int, int, int);
+ method public boolean openPane();
+ method public void setCoveredFadeColor(int);
+ method public void setPanelSlideListener(android.support.v4.widget.SlidingPaneLayout.PanelSlideListener);
+ method public void setParallaxDistance(int);
+ method public deprecated void setShadowDrawable(android.graphics.drawable.Drawable);
+ method public void setShadowDrawableLeft(android.graphics.drawable.Drawable);
+ method public void setShadowDrawableRight(android.graphics.drawable.Drawable);
+ method public deprecated void setShadowResource(int);
+ method public void setShadowResourceLeft(int);
+ method public void setShadowResourceRight(int);
+ method public void setSliderFadeColor(int);
+ method public deprecated void smoothSlideClosed();
+ method public deprecated void smoothSlideOpen();
+ }
+
+ public static class SlidingPaneLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+ ctor public SlidingPaneLayout.LayoutParams();
+ ctor public SlidingPaneLayout.LayoutParams(int, int);
+ ctor public SlidingPaneLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public SlidingPaneLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ ctor public SlidingPaneLayout.LayoutParams(android.support.v4.widget.SlidingPaneLayout.LayoutParams);
+ ctor public SlidingPaneLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
+ field public float weight;
+ }
+
+ public static abstract interface SlidingPaneLayout.PanelSlideListener {
+ method public abstract void onPanelClosed(android.view.View);
+ method public abstract void onPanelOpened(android.view.View);
+ method public abstract void onPanelSlide(android.view.View, float);
+ }
+
+ public static class SlidingPaneLayout.SimplePanelSlideListener implements android.support.v4.widget.SlidingPaneLayout.PanelSlideListener {
+ ctor public SlidingPaneLayout.SimplePanelSlideListener();
+ method public void onPanelClosed(android.view.View);
+ method public void onPanelOpened(android.view.View);
+ method public void onPanelSlide(android.view.View, float);
+ }
+
+ public class Space extends android.view.View {
+ ctor public Space(android.content.Context, android.util.AttributeSet, int);
+ ctor public Space(android.content.Context, android.util.AttributeSet);
+ ctor public Space(android.content.Context);
+ }
+
+ public class SwipeRefreshLayout extends android.view.ViewGroup {
+ ctor public SwipeRefreshLayout(android.content.Context);
+ ctor public SwipeRefreshLayout(android.content.Context, android.util.AttributeSet);
+ method public boolean canChildScrollUp();
+ method public int getProgressCircleDiameter();
+ method public int getProgressViewEndOffset();
+ method public int getProgressViewStartOffset();
+ method public boolean isRefreshing();
+ method protected void onLayout(boolean, int, int, int, int);
+ method public void onMeasure(int, int);
+ method public deprecated void setColorScheme(int...);
+ method public void setColorSchemeColors(int...);
+ method public void setColorSchemeResources(int...);
+ method public void setDistanceToTriggerSync(int);
+ method public void setOnChildScrollUpCallback(android.support.v4.widget.SwipeRefreshLayout.OnChildScrollUpCallback);
+ method public void setOnRefreshListener(android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener);
+ method public deprecated void setProgressBackgroundColor(int);
+ method public void setProgressBackgroundColorSchemeColor(int);
+ method public void setProgressBackgroundColorSchemeResource(int);
+ method public void setProgressViewEndTarget(boolean, int);
+ method public void setProgressViewOffset(boolean, int, int);
+ method public void setRefreshing(boolean);
+ method public void setSize(int);
+ field public static final int DEFAULT = 1; // 0x1
+ field public static final int LARGE = 0; // 0x0
+ field protected int mFrom;
+ field protected int mOriginalOffsetTop;
+ }
+
+ public static abstract interface SwipeRefreshLayout.OnChildScrollUpCallback {
+ method public abstract boolean canChildScrollUp(android.support.v4.widget.SwipeRefreshLayout, android.view.View);
+ }
+
+ public static abstract interface SwipeRefreshLayout.OnRefreshListener {
+ method public abstract void onRefresh();
+ }
+
+ public class ViewDragHelper {
+ method public void abort();
+ method protected boolean canScroll(android.view.View, boolean, int, int, int, int);
+ method public void cancel();
+ method public void captureChildView(android.view.View, int);
+ method public boolean checkTouchSlop(int);
+ method public boolean checkTouchSlop(int, int);
+ method public boolean continueSettling(boolean);
+ method public static android.support.v4.widget.ViewDragHelper create(android.view.ViewGroup, android.support.v4.widget.ViewDragHelper.Callback);
+ method public static android.support.v4.widget.ViewDragHelper create(android.view.ViewGroup, float, android.support.v4.widget.ViewDragHelper.Callback);
+ method public android.view.View findTopChildUnder(int, int);
+ method public void flingCapturedView(int, int, int, int);
+ method public int getActivePointerId();
+ method public android.view.View getCapturedView();
+ method public int getEdgeSize();
+ method public float getMinVelocity();
+ method public int getTouchSlop();
+ method public int getViewDragState();
+ method public boolean isCapturedViewUnder(int, int);
+ method public boolean isEdgeTouched(int);
+ method public boolean isEdgeTouched(int, int);
+ method public boolean isPointerDown(int);
+ method public boolean isViewUnder(android.view.View, int, int);
+ method public void processTouchEvent(android.view.MotionEvent);
+ method public void setEdgeTrackingEnabled(int);
+ method public void setMinVelocity(float);
+ method public boolean settleCapturedViewAt(int, int);
+ method public boolean shouldInterceptTouchEvent(android.view.MotionEvent);
+ method public boolean smoothSlideViewTo(android.view.View, int, int);
+ field public static final int DIRECTION_ALL = 3; // 0x3
+ field public static final int DIRECTION_HORIZONTAL = 1; // 0x1
+ field public static final int DIRECTION_VERTICAL = 2; // 0x2
+ field public static final int EDGE_ALL = 15; // 0xf
+ field public static final int EDGE_BOTTOM = 8; // 0x8
+ field public static final int EDGE_LEFT = 1; // 0x1
+ field public static final int EDGE_RIGHT = 2; // 0x2
+ field public static final int EDGE_TOP = 4; // 0x4
+ field public static final int INVALID_POINTER = -1; // 0xffffffff
+ field public static final int STATE_DRAGGING = 1; // 0x1
+ field public static final int STATE_IDLE = 0; // 0x0
+ field public static final int STATE_SETTLING = 2; // 0x2
+ }
+
+ public static abstract class ViewDragHelper.Callback {
+ ctor public ViewDragHelper.Callback();
+ method public int clampViewPositionHorizontal(android.view.View, int, int);
+ method public int clampViewPositionVertical(android.view.View, int, int);
+ method public int getOrderedChildIndex(int);
+ method public int getViewHorizontalDragRange(android.view.View);
+ method public int getViewVerticalDragRange(android.view.View);
+ method public void onEdgeDragStarted(int, int);
+ method public boolean onEdgeLock(int);
+ method public void onEdgeTouched(int, int);
+ method public void onViewCaptured(android.view.View, int);
+ method public void onViewDragStateChanged(int);
+ method public void onViewPositionChanged(android.view.View, int, int, int, int);
+ method public void onViewReleased(android.view.View, float, float);
+ method public abstract boolean tryCaptureView(android.view.View, int);
+ }
+
+}
+
diff --git a/core-ui/api/27.0.0.txt b/core-ui/api/27.0.0.txt
new file mode 100644
index 0000000..6ae4b1a
--- /dev/null
+++ b/core-ui/api/27.0.0.txt
@@ -0,0 +1,655 @@
+package android.support.v4.app {
+
+ public deprecated class ActionBarDrawerToggle implements android.support.v4.widget.DrawerLayout.DrawerListener {
+ ctor public ActionBarDrawerToggle(android.app.Activity, android.support.v4.widget.DrawerLayout, int, int, int);
+ ctor public ActionBarDrawerToggle(android.app.Activity, android.support.v4.widget.DrawerLayout, boolean, int, int, int);
+ method public boolean isDrawerIndicatorEnabled();
+ method public void onConfigurationChanged(android.content.res.Configuration);
+ method public void onDrawerClosed(android.view.View);
+ method public void onDrawerOpened(android.view.View);
+ method public void onDrawerSlide(android.view.View, float);
+ method public void onDrawerStateChanged(int);
+ method public boolean onOptionsItemSelected(android.view.MenuItem);
+ method public void setDrawerIndicatorEnabled(boolean);
+ method public void setHomeAsUpIndicator(android.graphics.drawable.Drawable);
+ method public void setHomeAsUpIndicator(int);
+ method public void syncState();
+ }
+
+ public static abstract deprecated interface ActionBarDrawerToggle.Delegate {
+ method public abstract android.graphics.drawable.Drawable getThemeUpIndicator();
+ method public abstract void setActionBarDescription(int);
+ method public abstract void setActionBarUpIndicator(android.graphics.drawable.Drawable, int);
+ }
+
+ public static abstract deprecated interface ActionBarDrawerToggle.DelegateProvider {
+ method public abstract android.support.v4.app.ActionBarDrawerToggle.Delegate getDrawerToggleDelegate();
+ }
+
+}
+
+package android.support.v4.view {
+
+ public abstract class AbsSavedState implements android.os.Parcelable {
+ ctor protected AbsSavedState(android.os.Parcelable);
+ ctor protected AbsSavedState(android.os.Parcel);
+ ctor protected AbsSavedState(android.os.Parcel, java.lang.ClassLoader);
+ method public int describeContents();
+ method public final android.os.Parcelable getSuperState();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.view.AbsSavedState> CREATOR;
+ field public static final android.support.v4.view.AbsSavedState EMPTY_STATE;
+ }
+
+ public final class AsyncLayoutInflater {
+ ctor public AsyncLayoutInflater(android.content.Context);
+ method public void inflate(int, android.view.ViewGroup, android.support.v4.view.AsyncLayoutInflater.OnInflateFinishedListener);
+ }
+
+ public static abstract interface AsyncLayoutInflater.OnInflateFinishedListener {
+ method public abstract void onInflateFinished(android.view.View, int, android.view.ViewGroup);
+ }
+
+ public class NestedScrollingChildHelper {
+ ctor public NestedScrollingChildHelper(android.view.View);
+ method public boolean dispatchNestedFling(float, float, boolean);
+ method public boolean dispatchNestedPreFling(float, float);
+ method public boolean dispatchNestedPreScroll(int, int, int[], int[]);
+ method public boolean dispatchNestedPreScroll(int, int, int[], int[], int);
+ method public boolean dispatchNestedScroll(int, int, int, int, int[]);
+ method public boolean dispatchNestedScroll(int, int, int, int, int[], int);
+ method public boolean hasNestedScrollingParent();
+ method public boolean hasNestedScrollingParent(int);
+ method public boolean isNestedScrollingEnabled();
+ method public void onDetachedFromWindow();
+ method public void onStopNestedScroll(android.view.View);
+ method public void setNestedScrollingEnabled(boolean);
+ method public boolean startNestedScroll(int);
+ method public boolean startNestedScroll(int, int);
+ method public void stopNestedScroll();
+ method public void stopNestedScroll(int);
+ }
+
+ public class NestedScrollingParentHelper {
+ ctor public NestedScrollingParentHelper(android.view.ViewGroup);
+ method public int getNestedScrollAxes();
+ method public void onNestedScrollAccepted(android.view.View, android.view.View, int);
+ method public void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
+ method public void onStopNestedScroll(android.view.View);
+ method public void onStopNestedScroll(android.view.View, int);
+ }
+
+ public abstract class PagerAdapter {
+ ctor public PagerAdapter();
+ method public void destroyItem(android.view.ViewGroup, int, java.lang.Object);
+ method public deprecated void destroyItem(android.view.View, int, java.lang.Object);
+ method public void finishUpdate(android.view.ViewGroup);
+ method public deprecated void finishUpdate(android.view.View);
+ method public abstract int getCount();
+ method public int getItemPosition(java.lang.Object);
+ method public java.lang.CharSequence getPageTitle(int);
+ method public float getPageWidth(int);
+ method public java.lang.Object instantiateItem(android.view.ViewGroup, int);
+ method public deprecated java.lang.Object instantiateItem(android.view.View, int);
+ method public abstract boolean isViewFromObject(android.view.View, java.lang.Object);
+ method public void notifyDataSetChanged();
+ method public void registerDataSetObserver(android.database.DataSetObserver);
+ method public void restoreState(android.os.Parcelable, java.lang.ClassLoader);
+ method public android.os.Parcelable saveState();
+ method public void setPrimaryItem(android.view.ViewGroup, int, java.lang.Object);
+ method public deprecated void setPrimaryItem(android.view.View, int, java.lang.Object);
+ method public void startUpdate(android.view.ViewGroup);
+ method public deprecated void startUpdate(android.view.View);
+ method public void unregisterDataSetObserver(android.database.DataSetObserver);
+ field public static final int POSITION_NONE = -2; // 0xfffffffe
+ field public static final int POSITION_UNCHANGED = -1; // 0xffffffff
+ }
+
+ public class PagerTabStrip extends android.support.v4.view.PagerTitleStrip {
+ ctor public PagerTabStrip(android.content.Context);
+ ctor public PagerTabStrip(android.content.Context, android.util.AttributeSet);
+ method public boolean getDrawFullUnderline();
+ method public int getTabIndicatorColor();
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+ method public void setDrawFullUnderline(boolean);
+ method public void setTabIndicatorColor(int);
+ method public void setTabIndicatorColorResource(int);
+ }
+
+ public class PagerTitleStrip extends android.view.ViewGroup {
+ ctor public PagerTitleStrip(android.content.Context);
+ ctor public PagerTitleStrip(android.content.Context, android.util.AttributeSet);
+ method public int getTextSpacing();
+ method protected void onLayout(boolean, int, int, int, int);
+ method public void setGravity(int);
+ method public void setNonPrimaryAlpha(float);
+ method public void setTextColor(int);
+ method public void setTextSize(int, float);
+ method public void setTextSpacing(int);
+ }
+
+ public class ViewPager extends android.view.ViewGroup {
+ ctor public ViewPager(android.content.Context);
+ ctor public ViewPager(android.content.Context, android.util.AttributeSet);
+ method public void addOnAdapterChangeListener(android.support.v4.view.ViewPager.OnAdapterChangeListener);
+ method public void addOnPageChangeListener(android.support.v4.view.ViewPager.OnPageChangeListener);
+ method public boolean arrowScroll(int);
+ method public boolean beginFakeDrag();
+ method protected boolean canScroll(android.view.View, boolean, int, int, int);
+ method public void clearOnPageChangeListeners();
+ method public void endFakeDrag();
+ method public boolean executeKeyEvent(android.view.KeyEvent);
+ method public void fakeDragBy(float);
+ method public android.support.v4.view.PagerAdapter getAdapter();
+ method public int getCurrentItem();
+ method public int getOffscreenPageLimit();
+ method public int getPageMargin();
+ method public boolean isFakeDragging();
+ method protected void onLayout(boolean, int, int, int, int);
+ method protected void onPageScrolled(int, float, int);
+ method public void onRestoreInstanceState(android.os.Parcelable);
+ method public android.os.Parcelable onSaveInstanceState();
+ method public void removeOnAdapterChangeListener(android.support.v4.view.ViewPager.OnAdapterChangeListener);
+ method public void removeOnPageChangeListener(android.support.v4.view.ViewPager.OnPageChangeListener);
+ method public void setAdapter(android.support.v4.view.PagerAdapter);
+ method public void setCurrentItem(int);
+ method public void setCurrentItem(int, boolean);
+ method public void setOffscreenPageLimit(int);
+ method public deprecated void setOnPageChangeListener(android.support.v4.view.ViewPager.OnPageChangeListener);
+ method public void setPageMargin(int);
+ method public void setPageMarginDrawable(android.graphics.drawable.Drawable);
+ method public void setPageMarginDrawable(int);
+ method public void setPageTransformer(boolean, android.support.v4.view.ViewPager.PageTransformer);
+ method public void setPageTransformer(boolean, android.support.v4.view.ViewPager.PageTransformer, int);
+ field public static final int SCROLL_STATE_DRAGGING = 1; // 0x1
+ field public static final int SCROLL_STATE_IDLE = 0; // 0x0
+ field public static final int SCROLL_STATE_SETTLING = 2; // 0x2
+ }
+
+ public static abstract class ViewPager.DecorView implements java.lang.annotation.Annotation {
+ }
+
+ public static class ViewPager.LayoutParams extends android.view.ViewGroup.LayoutParams {
+ ctor public ViewPager.LayoutParams();
+ ctor public ViewPager.LayoutParams(android.content.Context, android.util.AttributeSet);
+ field public int gravity;
+ field public boolean isDecor;
+ }
+
+ public static abstract interface ViewPager.OnAdapterChangeListener {
+ method public abstract void onAdapterChanged(android.support.v4.view.ViewPager, android.support.v4.view.PagerAdapter, android.support.v4.view.PagerAdapter);
+ }
+
+ public static abstract interface ViewPager.OnPageChangeListener {
+ method public abstract void onPageScrollStateChanged(int);
+ method public abstract void onPageScrolled(int, float, int);
+ method public abstract void onPageSelected(int);
+ }
+
+ public static abstract interface ViewPager.PageTransformer {
+ method public abstract void transformPage(android.view.View, float);
+ }
+
+ public static class ViewPager.SavedState extends android.support.v4.view.AbsSavedState {
+ ctor public ViewPager.SavedState(android.os.Parcelable);
+ field public static final android.os.Parcelable.Creator<android.support.v4.view.ViewPager.SavedState> CREATOR;
+ }
+
+ public static class ViewPager.SimpleOnPageChangeListener implements android.support.v4.view.ViewPager.OnPageChangeListener {
+ ctor public ViewPager.SimpleOnPageChangeListener();
+ method public void onPageScrollStateChanged(int);
+ method public void onPageScrolled(int, float, int);
+ method public void onPageSelected(int);
+ }
+
+}
+
+package android.support.v4.view.animation {
+
+ public class FastOutLinearInInterpolator extends android.support.v4.view.animation.LookupTableInterpolator {
+ ctor public FastOutLinearInInterpolator();
+ }
+
+ public class FastOutSlowInInterpolator extends android.support.v4.view.animation.LookupTableInterpolator {
+ ctor public FastOutSlowInInterpolator();
+ }
+
+ public class LinearOutSlowInInterpolator extends android.support.v4.view.animation.LookupTableInterpolator {
+ ctor public LinearOutSlowInInterpolator();
+ }
+
+ abstract class LookupTableInterpolator implements android.view.animation.Interpolator {
+ ctor public LookupTableInterpolator(float[]);
+ method public float getInterpolation(float);
+ }
+
+}
+
+package android.support.v4.widget {
+
+ public abstract class AutoScrollHelper implements android.view.View.OnTouchListener {
+ ctor public AutoScrollHelper(android.view.View);
+ method public abstract boolean canTargetScrollHorizontally(int);
+ method public abstract boolean canTargetScrollVertically(int);
+ method public boolean isEnabled();
+ method public boolean isExclusive();
+ method public boolean onTouch(android.view.View, android.view.MotionEvent);
+ method public abstract void scrollTargetBy(int, int);
+ method public android.support.v4.widget.AutoScrollHelper setActivationDelay(int);
+ method public android.support.v4.widget.AutoScrollHelper setEdgeType(int);
+ method public android.support.v4.widget.AutoScrollHelper setEnabled(boolean);
+ method public android.support.v4.widget.AutoScrollHelper setExclusive(boolean);
+ method public android.support.v4.widget.AutoScrollHelper setMaximumEdges(float, float);
+ method public android.support.v4.widget.AutoScrollHelper setMaximumVelocity(float, float);
+ method public android.support.v4.widget.AutoScrollHelper setMinimumVelocity(float, float);
+ method public android.support.v4.widget.AutoScrollHelper setRampDownDuration(int);
+ method public android.support.v4.widget.AutoScrollHelper setRampUpDuration(int);
+ method public android.support.v4.widget.AutoScrollHelper setRelativeEdges(float, float);
+ method public android.support.v4.widget.AutoScrollHelper setRelativeVelocity(float, float);
+ field public static final int EDGE_TYPE_INSIDE = 0; // 0x0
+ field public static final int EDGE_TYPE_INSIDE_EXTEND = 1; // 0x1
+ field public static final int EDGE_TYPE_OUTSIDE = 2; // 0x2
+ field public static final float NO_MAX = 3.4028235E38f;
+ field public static final float NO_MIN = 0.0f;
+ field public static final float RELATIVE_UNSPECIFIED = 0.0f;
+ }
+
+ public class CircularProgressDrawable extends android.graphics.drawable.Drawable {
+ ctor public CircularProgressDrawable(android.content.Context);
+ method public void draw(android.graphics.Canvas);
+ method public boolean getArrowEnabled();
+ method public float getArrowHeight();
+ method public float getArrowScale();
+ method public float getArrowWidth();
+ method public int getBackgroundColor();
+ method public float getCenterRadius();
+ method public int[] getColorSchemeColors();
+ method public float getEndTrim();
+ method public int getOpacity();
+ method public float getProgressRotation();
+ method public float getStartTrim();
+ method public android.graphics.Paint.Cap getStrokeCap();
+ method public float getStrokeWidth();
+ method public boolean isRunning();
+ method public void setAlpha(int);
+ method public void setArrowDimensions(float, float);
+ method public void setArrowEnabled(boolean);
+ method public void setArrowScale(float);
+ method public void setBackgroundColor(int);
+ method public void setCenterRadius(float);
+ method public void setColorFilter(android.graphics.ColorFilter);
+ method public void setColorSchemeColors(int...);
+ method public void setProgressRotation(float);
+ method public void setStartEndTrim(float, float);
+ method public void setStrokeCap(android.graphics.Paint.Cap);
+ method public void setStrokeWidth(float);
+ method public void setStyle(int);
+ method public void start();
+ method public void stop();
+ field public static final int DEFAULT = 1; // 0x1
+ field public static final int LARGE = 0; // 0x0
+ }
+
+ public class ContentLoadingProgressBar extends android.widget.ProgressBar {
+ ctor public ContentLoadingProgressBar(android.content.Context);
+ ctor public ContentLoadingProgressBar(android.content.Context, android.util.AttributeSet);
+ method public void hide();
+ method public void onAttachedToWindow();
+ method public void onDetachedFromWindow();
+ method public void show();
+ }
+
+ public abstract class CursorAdapter extends android.widget.BaseAdapter {
+ ctor public deprecated CursorAdapter(android.content.Context, android.database.Cursor);
+ ctor public CursorAdapter(android.content.Context, android.database.Cursor, boolean);
+ ctor public CursorAdapter(android.content.Context, android.database.Cursor, int);
+ method public abstract void bindView(android.view.View, android.content.Context, android.database.Cursor);
+ method public void changeCursor(android.database.Cursor);
+ method public java.lang.CharSequence convertToString(android.database.Cursor);
+ method public int getCount();
+ method public android.database.Cursor getCursor();
+ method public android.widget.Filter getFilter();
+ method public android.widget.FilterQueryProvider getFilterQueryProvider();
+ method public java.lang.Object getItem(int);
+ method public long getItemId(int);
+ method public android.view.View getView(int, android.view.View, android.view.ViewGroup);
+ method protected deprecated void init(android.content.Context, android.database.Cursor, boolean);
+ method public android.view.View newDropDownView(android.content.Context, android.database.Cursor, android.view.ViewGroup);
+ method public abstract android.view.View newView(android.content.Context, android.database.Cursor, android.view.ViewGroup);
+ method protected void onContentChanged();
+ method public android.database.Cursor runQueryOnBackgroundThread(java.lang.CharSequence);
+ method public void setFilterQueryProvider(android.widget.FilterQueryProvider);
+ method public android.database.Cursor swapCursor(android.database.Cursor);
+ field public static final deprecated int FLAG_AUTO_REQUERY = 1; // 0x1
+ field public static final int FLAG_REGISTER_CONTENT_OBSERVER = 2; // 0x2
+ }
+
+ public class DrawerLayout extends android.view.ViewGroup {
+ ctor public DrawerLayout(android.content.Context);
+ ctor public DrawerLayout(android.content.Context, android.util.AttributeSet);
+ ctor public DrawerLayout(android.content.Context, android.util.AttributeSet, int);
+ method public void addDrawerListener(android.support.v4.widget.DrawerLayout.DrawerListener);
+ method public void closeDrawer(android.view.View);
+ method public void closeDrawer(android.view.View, boolean);
+ method public void closeDrawer(int);
+ method public void closeDrawer(int, boolean);
+ method public void closeDrawers();
+ method public float getDrawerElevation();
+ method public int getDrawerLockMode(int);
+ method public int getDrawerLockMode(android.view.View);
+ method public java.lang.CharSequence getDrawerTitle(int);
+ method public android.graphics.drawable.Drawable getStatusBarBackgroundDrawable();
+ method public boolean isDrawerOpen(android.view.View);
+ method public boolean isDrawerOpen(int);
+ method public boolean isDrawerVisible(android.view.View);
+ method public boolean isDrawerVisible(int);
+ method public void onDraw(android.graphics.Canvas);
+ method protected void onLayout(boolean, int, int, int, int);
+ method public void openDrawer(android.view.View);
+ method public void openDrawer(android.view.View, boolean);
+ method public void openDrawer(int);
+ method public void openDrawer(int, boolean);
+ method public void removeDrawerListener(android.support.v4.widget.DrawerLayout.DrawerListener);
+ method public void setDrawerElevation(float);
+ method public deprecated void setDrawerListener(android.support.v4.widget.DrawerLayout.DrawerListener);
+ method public void setDrawerLockMode(int);
+ method public void setDrawerLockMode(int, int);
+ method public void setDrawerLockMode(int, android.view.View);
+ method public void setDrawerShadow(android.graphics.drawable.Drawable, int);
+ method public void setDrawerShadow(int, int);
+ method public void setDrawerTitle(int, java.lang.CharSequence);
+ method public void setScrimColor(int);
+ method public void setStatusBarBackground(android.graphics.drawable.Drawable);
+ method public void setStatusBarBackground(int);
+ method public void setStatusBarBackgroundColor(int);
+ field public static final int LOCK_MODE_LOCKED_CLOSED = 1; // 0x1
+ field public static final int LOCK_MODE_LOCKED_OPEN = 2; // 0x2
+ field public static final int LOCK_MODE_UNDEFINED = 3; // 0x3
+ field public static final int LOCK_MODE_UNLOCKED = 0; // 0x0
+ field public static final int STATE_DRAGGING = 1; // 0x1
+ field public static final int STATE_IDLE = 0; // 0x0
+ field public static final int STATE_SETTLING = 2; // 0x2
+ }
+
+ public static abstract interface DrawerLayout.DrawerListener {
+ method public abstract void onDrawerClosed(android.view.View);
+ method public abstract void onDrawerOpened(android.view.View);
+ method public abstract void onDrawerSlide(android.view.View, float);
+ method public abstract void onDrawerStateChanged(int);
+ }
+
+ public static class DrawerLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+ ctor public DrawerLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
+ ctor public DrawerLayout.LayoutParams(int, int);
+ ctor public DrawerLayout.LayoutParams(int, int, int);
+ ctor public DrawerLayout.LayoutParams(android.support.v4.widget.DrawerLayout.LayoutParams);
+ ctor public DrawerLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public DrawerLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ field public int gravity;
+ }
+
+ protected static class DrawerLayout.SavedState extends android.support.v4.view.AbsSavedState {
+ ctor public DrawerLayout.SavedState(android.os.Parcel, java.lang.ClassLoader);
+ ctor public DrawerLayout.SavedState(android.os.Parcelable);
+ field public static final android.os.Parcelable.Creator<android.support.v4.widget.DrawerLayout.SavedState> CREATOR;
+ }
+
+ public static abstract class DrawerLayout.SimpleDrawerListener implements android.support.v4.widget.DrawerLayout.DrawerListener {
+ ctor public DrawerLayout.SimpleDrawerListener();
+ method public void onDrawerClosed(android.view.View);
+ method public void onDrawerOpened(android.view.View);
+ method public void onDrawerSlide(android.view.View, float);
+ method public void onDrawerStateChanged(int);
+ }
+
+ public abstract class ExploreByTouchHelper extends android.support.v4.view.AccessibilityDelegateCompat {
+ ctor public ExploreByTouchHelper(android.view.View);
+ method public final boolean clearKeyboardFocusForVirtualView(int);
+ method public final boolean dispatchHoverEvent(android.view.MotionEvent);
+ method public final boolean dispatchKeyEvent(android.view.KeyEvent);
+ method public final int getAccessibilityFocusedVirtualViewId();
+ method public deprecated int getFocusedVirtualView();
+ method public final int getKeyboardFocusedVirtualViewId();
+ method protected abstract int getVirtualViewAt(float, float);
+ method protected abstract void getVisibleVirtualViews(java.util.List<java.lang.Integer>);
+ method public final void invalidateRoot();
+ method public final void invalidateVirtualView(int);
+ method public final void invalidateVirtualView(int, int);
+ method public final void onFocusChanged(boolean, int, android.graphics.Rect);
+ method protected abstract boolean onPerformActionForVirtualView(int, int, android.os.Bundle);
+ method protected void onPopulateEventForHost(android.view.accessibility.AccessibilityEvent);
+ method protected void onPopulateEventForVirtualView(int, android.view.accessibility.AccessibilityEvent);
+ method protected void onPopulateNodeForHost(android.support.v4.view.accessibility.AccessibilityNodeInfoCompat);
+ method protected abstract void onPopulateNodeForVirtualView(int, android.support.v4.view.accessibility.AccessibilityNodeInfoCompat);
+ method protected void onVirtualViewKeyboardFocusChanged(int, boolean);
+ method public final boolean requestKeyboardFocusForVirtualView(int);
+ method public final boolean sendEventForVirtualView(int, int);
+ field public static final int HOST_ID = -1; // 0xffffffff
+ field public static final int INVALID_ID = -2147483648; // 0x80000000
+ }
+
+ public class ListViewAutoScrollHelper extends android.support.v4.widget.AutoScrollHelper {
+ ctor public ListViewAutoScrollHelper(android.widget.ListView);
+ method public boolean canTargetScrollHorizontally(int);
+ method public boolean canTargetScrollVertically(int);
+ method public void scrollTargetBy(int, int);
+ }
+
+ public class NestedScrollView extends android.widget.FrameLayout {
+ ctor public NestedScrollView(android.content.Context);
+ ctor public NestedScrollView(android.content.Context, android.util.AttributeSet);
+ ctor public NestedScrollView(android.content.Context, android.util.AttributeSet, int);
+ method public boolean arrowScroll(int);
+ method protected int computeScrollDeltaToGetChildRectOnScreen(android.graphics.Rect);
+ method public boolean dispatchNestedPreScroll(int, int, int[], int[], int);
+ method public boolean dispatchNestedScroll(int, int, int, int, int[], int);
+ method public boolean executeKeyEvent(android.view.KeyEvent);
+ method public void fling(int);
+ method public boolean fullScroll(int);
+ method public int getMaxScrollAmount();
+ method public boolean hasNestedScrollingParent(int);
+ method public boolean isFillViewport();
+ method public boolean isSmoothScrollingEnabled();
+ method public void onAttachedToWindow();
+ method public boolean pageScroll(int);
+ method public void setFillViewport(boolean);
+ method public void setOnScrollChangeListener(android.support.v4.widget.NestedScrollView.OnScrollChangeListener);
+ method public void setSmoothScrollingEnabled(boolean);
+ method public final void smoothScrollBy(int, int);
+ method public final void smoothScrollTo(int, int);
+ method public boolean startNestedScroll(int, int);
+ method public void stopNestedScroll(int);
+ }
+
+ public static abstract interface NestedScrollView.OnScrollChangeListener {
+ method public abstract void onScrollChange(android.support.v4.widget.NestedScrollView, int, int, int, int);
+ }
+
+ public abstract class ResourceCursorAdapter extends android.support.v4.widget.CursorAdapter {
+ ctor public deprecated ResourceCursorAdapter(android.content.Context, int, android.database.Cursor);
+ ctor public deprecated ResourceCursorAdapter(android.content.Context, int, android.database.Cursor, boolean);
+ ctor public ResourceCursorAdapter(android.content.Context, int, android.database.Cursor, int);
+ method public android.view.View newView(android.content.Context, android.database.Cursor, android.view.ViewGroup);
+ method public void setDropDownViewResource(int);
+ method public void setViewResource(int);
+ }
+
+ public class SimpleCursorAdapter extends android.support.v4.widget.ResourceCursorAdapter {
+ ctor public deprecated SimpleCursorAdapter(android.content.Context, int, android.database.Cursor, java.lang.String[], int[]);
+ ctor public SimpleCursorAdapter(android.content.Context, int, android.database.Cursor, java.lang.String[], int[], int);
+ method public void bindView(android.view.View, android.content.Context, android.database.Cursor);
+ method public void changeCursorAndColumns(android.database.Cursor, java.lang.String[], int[]);
+ method public android.support.v4.widget.SimpleCursorAdapter.CursorToStringConverter getCursorToStringConverter();
+ method public int getStringConversionColumn();
+ method public android.support.v4.widget.SimpleCursorAdapter.ViewBinder getViewBinder();
+ method public void setCursorToStringConverter(android.support.v4.widget.SimpleCursorAdapter.CursorToStringConverter);
+ method public void setStringConversionColumn(int);
+ method public void setViewBinder(android.support.v4.widget.SimpleCursorAdapter.ViewBinder);
+ method public void setViewImage(android.widget.ImageView, java.lang.String);
+ method public void setViewText(android.widget.TextView, java.lang.String);
+ }
+
+ public static abstract interface SimpleCursorAdapter.CursorToStringConverter {
+ method public abstract java.lang.CharSequence convertToString(android.database.Cursor);
+ }
+
+ public static abstract interface SimpleCursorAdapter.ViewBinder {
+ method public abstract boolean setViewValue(android.view.View, android.database.Cursor, int);
+ }
+
+ public class SlidingPaneLayout extends android.view.ViewGroup {
+ ctor public SlidingPaneLayout(android.content.Context);
+ ctor public SlidingPaneLayout(android.content.Context, android.util.AttributeSet);
+ ctor public SlidingPaneLayout(android.content.Context, android.util.AttributeSet, int);
+ method protected boolean canScroll(android.view.View, boolean, int, int, int);
+ method public deprecated boolean canSlide();
+ method public boolean closePane();
+ method public int getCoveredFadeColor();
+ method public int getParallaxDistance();
+ method public int getSliderFadeColor();
+ method public boolean isOpen();
+ method public boolean isSlideable();
+ method protected void onLayout(boolean, int, int, int, int);
+ method public boolean openPane();
+ method public void setCoveredFadeColor(int);
+ method public void setPanelSlideListener(android.support.v4.widget.SlidingPaneLayout.PanelSlideListener);
+ method public void setParallaxDistance(int);
+ method public deprecated void setShadowDrawable(android.graphics.drawable.Drawable);
+ method public void setShadowDrawableLeft(android.graphics.drawable.Drawable);
+ method public void setShadowDrawableRight(android.graphics.drawable.Drawable);
+ method public deprecated void setShadowResource(int);
+ method public void setShadowResourceLeft(int);
+ method public void setShadowResourceRight(int);
+ method public void setSliderFadeColor(int);
+ method public deprecated void smoothSlideClosed();
+ method public deprecated void smoothSlideOpen();
+ }
+
+ public static class SlidingPaneLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+ ctor public SlidingPaneLayout.LayoutParams();
+ ctor public SlidingPaneLayout.LayoutParams(int, int);
+ ctor public SlidingPaneLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public SlidingPaneLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ ctor public SlidingPaneLayout.LayoutParams(android.support.v4.widget.SlidingPaneLayout.LayoutParams);
+ ctor public SlidingPaneLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
+ field public float weight;
+ }
+
+ public static abstract interface SlidingPaneLayout.PanelSlideListener {
+ method public abstract void onPanelClosed(android.view.View);
+ method public abstract void onPanelOpened(android.view.View);
+ method public abstract void onPanelSlide(android.view.View, float);
+ }
+
+ public static class SlidingPaneLayout.SimplePanelSlideListener implements android.support.v4.widget.SlidingPaneLayout.PanelSlideListener {
+ ctor public SlidingPaneLayout.SimplePanelSlideListener();
+ method public void onPanelClosed(android.view.View);
+ method public void onPanelOpened(android.view.View);
+ method public void onPanelSlide(android.view.View, float);
+ }
+
+ public class Space extends android.view.View {
+ ctor public Space(android.content.Context, android.util.AttributeSet, int);
+ ctor public Space(android.content.Context, android.util.AttributeSet);
+ ctor public Space(android.content.Context);
+ }
+
+ public class SwipeRefreshLayout extends android.view.ViewGroup {
+ ctor public SwipeRefreshLayout(android.content.Context);
+ ctor public SwipeRefreshLayout(android.content.Context, android.util.AttributeSet);
+ method public boolean canChildScrollUp();
+ method public int getProgressCircleDiameter();
+ method public int getProgressViewEndOffset();
+ method public int getProgressViewStartOffset();
+ method public boolean isRefreshing();
+ method protected void onLayout(boolean, int, int, int, int);
+ method public void onMeasure(int, int);
+ method public deprecated void setColorScheme(int...);
+ method public void setColorSchemeColors(int...);
+ method public void setColorSchemeResources(int...);
+ method public void setDistanceToTriggerSync(int);
+ method public void setOnChildScrollUpCallback(android.support.v4.widget.SwipeRefreshLayout.OnChildScrollUpCallback);
+ method public void setOnRefreshListener(android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener);
+ method public deprecated void setProgressBackgroundColor(int);
+ method public void setProgressBackgroundColorSchemeColor(int);
+ method public void setProgressBackgroundColorSchemeResource(int);
+ method public void setProgressViewEndTarget(boolean, int);
+ method public void setProgressViewOffset(boolean, int, int);
+ method public void setRefreshing(boolean);
+ method public void setSize(int);
+ field public static final int DEFAULT = 1; // 0x1
+ field public static final int LARGE = 0; // 0x0
+ field protected int mFrom;
+ field protected int mOriginalOffsetTop;
+ }
+
+ public static abstract interface SwipeRefreshLayout.OnChildScrollUpCallback {
+ method public abstract boolean canChildScrollUp(android.support.v4.widget.SwipeRefreshLayout, android.view.View);
+ }
+
+ public static abstract interface SwipeRefreshLayout.OnRefreshListener {
+ method public abstract void onRefresh();
+ }
+
+ public class ViewDragHelper {
+ method public void abort();
+ method protected boolean canScroll(android.view.View, boolean, int, int, int, int);
+ method public void cancel();
+ method public void captureChildView(android.view.View, int);
+ method public boolean checkTouchSlop(int);
+ method public boolean checkTouchSlop(int, int);
+ method public boolean continueSettling(boolean);
+ method public static android.support.v4.widget.ViewDragHelper create(android.view.ViewGroup, android.support.v4.widget.ViewDragHelper.Callback);
+ method public static android.support.v4.widget.ViewDragHelper create(android.view.ViewGroup, float, android.support.v4.widget.ViewDragHelper.Callback);
+ method public android.view.View findTopChildUnder(int, int);
+ method public void flingCapturedView(int, int, int, int);
+ method public int getActivePointerId();
+ method public android.view.View getCapturedView();
+ method public int getEdgeSize();
+ method public float getMinVelocity();
+ method public int getTouchSlop();
+ method public int getViewDragState();
+ method public boolean isCapturedViewUnder(int, int);
+ method public boolean isEdgeTouched(int);
+ method public boolean isEdgeTouched(int, int);
+ method public boolean isPointerDown(int);
+ method public boolean isViewUnder(android.view.View, int, int);
+ method public void processTouchEvent(android.view.MotionEvent);
+ method public void setEdgeTrackingEnabled(int);
+ method public void setMinVelocity(float);
+ method public boolean settleCapturedViewAt(int, int);
+ method public boolean shouldInterceptTouchEvent(android.view.MotionEvent);
+ method public boolean smoothSlideViewTo(android.view.View, int, int);
+ field public static final int DIRECTION_ALL = 3; // 0x3
+ field public static final int DIRECTION_HORIZONTAL = 1; // 0x1
+ field public static final int DIRECTION_VERTICAL = 2; // 0x2
+ field public static final int EDGE_ALL = 15; // 0xf
+ field public static final int EDGE_BOTTOM = 8; // 0x8
+ field public static final int EDGE_LEFT = 1; // 0x1
+ field public static final int EDGE_RIGHT = 2; // 0x2
+ field public static final int EDGE_TOP = 4; // 0x4
+ field public static final int INVALID_POINTER = -1; // 0xffffffff
+ field public static final int STATE_DRAGGING = 1; // 0x1
+ field public static final int STATE_IDLE = 0; // 0x0
+ field public static final int STATE_SETTLING = 2; // 0x2
+ }
+
+ public static abstract class ViewDragHelper.Callback {
+ ctor public ViewDragHelper.Callback();
+ method public int clampViewPositionHorizontal(android.view.View, int, int);
+ method public int clampViewPositionVertical(android.view.View, int, int);
+ method public int getOrderedChildIndex(int);
+ method public int getViewHorizontalDragRange(android.view.View);
+ method public int getViewVerticalDragRange(android.view.View);
+ method public void onEdgeDragStarted(int, int);
+ method public boolean onEdgeLock(int);
+ method public void onEdgeTouched(int, int);
+ method public void onViewCaptured(android.view.View, int);
+ method public void onViewDragStateChanged(int);
+ method public void onViewPositionChanged(android.view.View, int, int, int, int);
+ method public void onViewReleased(android.view.View, float, float);
+ method public abstract boolean tryCaptureView(android.view.View, int);
+ }
+
+}
+
diff --git a/core-ui/build.gradle b/core-ui/build.gradle
index 46abf57..38a4fe2 100644
--- a/core-ui/build.gradle
+++ b/core-ui/build.gradle
@@ -16,12 +16,6 @@
minSdkVersion 14
}
- sourceSets {
- main.java.srcDirs = [
- 'java'
- ]
- }
-
buildTypes.all {
consumerProguardFiles 'proguard-rules.pro'
}
diff --git a/core-ui/java/android/support/v4/app/ActionBarDrawerToggle.java b/core-ui/src/main/java/android/support/v4/app/ActionBarDrawerToggle.java
similarity index 100%
rename from core-ui/java/android/support/v4/app/ActionBarDrawerToggle.java
rename to core-ui/src/main/java/android/support/v4/app/ActionBarDrawerToggle.java
diff --git a/core-ui/java/android/support/v4/app/package.html b/core-ui/src/main/java/android/support/v4/app/package.html
similarity index 100%
rename from core-ui/java/android/support/v4/app/package.html
rename to core-ui/src/main/java/android/support/v4/app/package.html
diff --git a/core-ui/java/android/support/v4/view/AbsSavedState.java b/core-ui/src/main/java/android/support/v4/view/AbsSavedState.java
similarity index 90%
rename from core-ui/java/android/support/v4/view/AbsSavedState.java
rename to core-ui/src/main/java/android/support/v4/view/AbsSavedState.java
index 4cf38ac..86f491f 100644
--- a/core-ui/java/android/support/v4/view/AbsSavedState.java
+++ b/core-ui/src/main/java/android/support/v4/view/AbsSavedState.java
@@ -18,6 +18,8 @@
import android.os.Parcel;
import android.os.Parcelable;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
/**
* A {@link Parcelable} implementation that should be used by inheritance
@@ -40,7 +42,7 @@
*
* @param superState The state of the superclass of this view
*/
- protected AbsSavedState(Parcelable superState) {
+ protected AbsSavedState(@NonNull Parcelable superState) {
if (superState == null) {
throw new IllegalArgumentException("superState must not be null");
}
@@ -52,7 +54,7 @@
*
* @param source parcel to read from
*/
- protected AbsSavedState(Parcel source) {
+ protected AbsSavedState(@NonNull Parcel source) {
this(source, null);
}
@@ -62,11 +64,12 @@
* @param source parcel to read from
* @param loader ClassLoader to use for reading
*/
- protected AbsSavedState(Parcel source, ClassLoader loader) {
+ protected AbsSavedState(@NonNull Parcel source, @Nullable ClassLoader loader) {
Parcelable superState = source.readParcelable(loader);
mSuperState = superState != null ? superState : EMPTY_STATE;
}
+ @Nullable
public final Parcelable getSuperState() {
return mSuperState;
}
diff --git a/core-ui/java/android/support/v4/view/AsyncLayoutInflater.java b/core-ui/src/main/java/android/support/v4/view/AsyncLayoutInflater.java
similarity index 98%
rename from core-ui/java/android/support/v4/view/AsyncLayoutInflater.java
rename to core-ui/src/main/java/android/support/v4/view/AsyncLayoutInflater.java
index e194a50..d26e5b8 100644
--- a/core-ui/java/android/support/v4/view/AsyncLayoutInflater.java
+++ b/core-ui/src/main/java/android/support/v4/view/AsyncLayoutInflater.java
@@ -107,7 +107,8 @@
};
public interface OnInflateFinishedListener {
- void onInflateFinished(View view, int resid, ViewGroup parent);
+ void onInflateFinished(@NonNull View view, @LayoutRes int resid,
+ @Nullable ViewGroup parent);
}
private static class InflateRequest {
diff --git a/core-ui/java/android/support/v4/view/NestedScrollingChildHelper.java b/core-ui/src/main/java/android/support/v4/view/NestedScrollingChildHelper.java
similarity index 100%
rename from core-ui/java/android/support/v4/view/NestedScrollingChildHelper.java
rename to core-ui/src/main/java/android/support/v4/view/NestedScrollingChildHelper.java
diff --git a/core-ui/java/android/support/v4/view/NestedScrollingParentHelper.java b/core-ui/src/main/java/android/support/v4/view/NestedScrollingParentHelper.java
similarity index 100%
rename from core-ui/java/android/support/v4/view/NestedScrollingParentHelper.java
rename to core-ui/src/main/java/android/support/v4/view/NestedScrollingParentHelper.java
diff --git a/core-ui/java/android/support/v4/view/PagerAdapter.java b/core-ui/src/main/java/android/support/v4/view/PagerAdapter.java
similarity index 90%
rename from core-ui/java/android/support/v4/view/PagerAdapter.java
rename to core-ui/src/main/java/android/support/v4/view/PagerAdapter.java
index 1b1dc3d..a8fb099 100644
--- a/core-ui/java/android/support/v4/view/PagerAdapter.java
+++ b/core-ui/src/main/java/android/support/v4/view/PagerAdapter.java
@@ -19,6 +19,8 @@
import android.database.DataSetObservable;
import android.database.DataSetObserver;
import android.os.Parcelable;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.view.View;
import android.view.ViewGroup;
@@ -92,7 +94,7 @@
* @param container The containing View which is displaying this adapter's
* page views.
*/
- public void startUpdate(ViewGroup container) {
+ public void startUpdate(@NonNull ViewGroup container) {
startUpdate((View) container);
}
@@ -107,7 +109,8 @@
* @return Returns an Object representing the new page. This does not
* need to be a View, but can be some other container of the page.
*/
- public Object instantiateItem(ViewGroup container, int position) {
+ @NonNull
+ public Object instantiateItem(@NonNull ViewGroup container, int position) {
return instantiateItem((View) container, position);
}
@@ -121,7 +124,7 @@
* @param object The same object that was returned by
* {@link #instantiateItem(View, int)}.
*/
- public void destroyItem(ViewGroup container, int position, Object object) {
+ public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
destroyItem((View) container, position, object);
}
@@ -134,7 +137,7 @@
* @param object The same object that was returned by
* {@link #instantiateItem(View, int)}.
*/
- public void setPrimaryItem(ViewGroup container, int position, Object object) {
+ public void setPrimaryItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
setPrimaryItem((View) container, position, object);
}
@@ -145,7 +148,7 @@
* @param container The containing View which is displaying this adapter's
* page views.
*/
- public void finishUpdate(ViewGroup container) {
+ public void finishUpdate(@NonNull ViewGroup container) {
finishUpdate((View) container);
}
@@ -157,7 +160,7 @@
* @deprecated Use {@link #startUpdate(ViewGroup)}
*/
@Deprecated
- public void startUpdate(View container) {
+ public void startUpdate(@NonNull View container) {
}
/**
@@ -174,7 +177,8 @@
* @deprecated Use {@link #instantiateItem(ViewGroup, int)}
*/
@Deprecated
- public Object instantiateItem(View container, int position) {
+ @NonNull
+ public Object instantiateItem(@NonNull View container, int position) {
throw new UnsupportedOperationException(
"Required method instantiateItem was not overridden");
}
@@ -192,7 +196,7 @@
* @deprecated Use {@link #destroyItem(ViewGroup, int, Object)}
*/
@Deprecated
- public void destroyItem(View container, int position, Object object) {
+ public void destroyItem(@NonNull View container, int position, @NonNull Object object) {
throw new UnsupportedOperationException("Required method destroyItem was not overridden");
}
@@ -208,7 +212,7 @@
* @deprecated Use {@link #setPrimaryItem(ViewGroup, int, Object)}
*/
@Deprecated
- public void setPrimaryItem(View container, int position, Object object) {
+ public void setPrimaryItem(@NonNull View container, int position, @NonNull Object object) {
}
/**
@@ -221,7 +225,7 @@
* @deprecated Use {@link #finishUpdate(ViewGroup)}
*/
@Deprecated
- public void finishUpdate(View container) {
+ public void finishUpdate(@NonNull View container) {
}
/**
@@ -233,7 +237,7 @@
* @param object Object to check for association with <code>view</code>
* @return true if <code>view</code> is associated with the key object <code>object</code>
*/
- public abstract boolean isViewFromObject(View view, Object object);
+ public abstract boolean isViewFromObject(@NonNull View view, @NonNull Object object);
/**
* Save any instance state associated with this adapter and its pages that should be
@@ -241,6 +245,7 @@
*
* @return Saved state for this adapter
*/
+ @Nullable
public Parcelable saveState() {
return null;
}
@@ -252,7 +257,7 @@
* @param state State previously saved by a call to {@link #saveState()}
* @param loader A ClassLoader that should be used to instantiate any restored objects
*/
- public void restoreState(Parcelable state, ClassLoader loader) {
+ public void restoreState(@Nullable Parcelable state, @Nullable ClassLoader loader) {
}
/**
@@ -270,7 +275,7 @@
* {@link #POSITION_UNCHANGED} if the object's position has not changed,
* or {@link #POSITION_NONE} if the item is no longer present.
*/
- public int getItemPosition(Object object) {
+ public int getItemPosition(@NonNull Object object) {
return POSITION_UNCHANGED;
}
@@ -292,7 +297,7 @@
*
* @param observer The {@link android.database.DataSetObserver} which will receive callbacks.
*/
- public void registerDataSetObserver(DataSetObserver observer) {
+ public void registerDataSetObserver(@NonNull DataSetObserver observer) {
mObservable.registerObserver(observer);
}
@@ -301,7 +306,7 @@
*
* @param observer The {@link android.database.DataSetObserver} which will be unregistered.
*/
- public void unregisterDataSetObserver(DataSetObserver observer) {
+ public void unregisterDataSetObserver(@NonNull DataSetObserver observer) {
mObservable.unregisterObserver(observer);
}
@@ -320,6 +325,7 @@
* @param position The position of the title requested
* @return A title for the requested page
*/
+ @Nullable
public CharSequence getPageTitle(int position) {
return null;
}
diff --git a/core-ui/java/android/support/v4/view/PagerTabStrip.java b/core-ui/src/main/java/android/support/v4/view/PagerTabStrip.java
similarity index 97%
rename from core-ui/java/android/support/v4/view/PagerTabStrip.java
rename to core-ui/src/main/java/android/support/v4/view/PagerTabStrip.java
index f4c0b21..6c88572 100644
--- a/core-ui/java/android/support/v4/view/PagerTabStrip.java
+++ b/core-ui/src/main/java/android/support/v4/view/PagerTabStrip.java
@@ -24,6 +24,8 @@
import android.support.annotation.ColorInt;
import android.support.annotation.ColorRes;
import android.support.annotation.DrawableRes;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.v4.content.ContextCompat;
import android.util.AttributeSet;
import android.view.MotionEvent;
@@ -76,11 +78,11 @@
private float mInitialMotionY;
private int mTouchSlop;
- public PagerTabStrip(Context context) {
+ public PagerTabStrip(@NonNull Context context) {
this(context, null);
}
- public PagerTabStrip(Context context, AttributeSet attrs) {
+ public PagerTabStrip(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
mIndicatorColor = mTextColor;
diff --git a/core-ui/java/android/support/v4/view/PagerTitleStrip.java b/core-ui/src/main/java/android/support/v4/view/PagerTitleStrip.java
similarity index 98%
rename from core-ui/java/android/support/v4/view/PagerTitleStrip.java
rename to core-ui/src/main/java/android/support/v4/view/PagerTitleStrip.java
index b63e4f4..79a6240 100644
--- a/core-ui/java/android/support/v4/view/PagerTitleStrip.java
+++ b/core-ui/src/main/java/android/support/v4/view/PagerTitleStrip.java
@@ -22,6 +22,8 @@
import android.graphics.drawable.Drawable;
import android.support.annotation.ColorInt;
import android.support.annotation.FloatRange;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.v4.widget.TextViewCompat;
import android.text.TextUtils.TruncateAt;
import android.text.method.SingleLineTransformationMethod;
@@ -102,11 +104,11 @@
text.setTransformationMethod(new SingleLineAllCapsTransform(text.getContext()));
}
- public PagerTitleStrip(Context context) {
+ public PagerTitleStrip(@NonNull Context context) {
this(context, null);
}
- public PagerTitleStrip(Context context, AttributeSet attrs) {
+ public PagerTitleStrip(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
addView(mPrevText = new TextView(context));
diff --git a/core-ui/java/android/support/v4/view/ViewPager.java b/core-ui/src/main/java/android/support/v4/view/ViewPager.java
similarity index 98%
rename from core-ui/java/android/support/v4/view/ViewPager.java
rename to core-ui/src/main/java/android/support/v4/view/ViewPager.java
index 8cd973c..36d8696 100644
--- a/core-ui/java/android/support/v4/view/ViewPager.java
+++ b/core-ui/src/main/java/android/support/v4/view/ViewPager.java
@@ -347,7 +347,7 @@
* position of the pager. 0 is front and center. 1 is one full
* page position to the right, and -1 is one page position to the left.
*/
- void transformPage(View page, float position);
+ void transformPage(@NonNull View page, float position);
}
/**
@@ -381,12 +381,12 @@
public @interface DecorView {
}
- public ViewPager(Context context) {
+ public ViewPager(@NonNull Context context) {
super(context);
initViewPager();
}
- public ViewPager(Context context, AttributeSet attrs) {
+ public ViewPager(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
initViewPager();
}
@@ -496,7 +496,7 @@
*
* @param adapter Adapter to use
*/
- public void setAdapter(PagerAdapter adapter) {
+ public void setAdapter(@Nullable PagerAdapter adapter) {
if (mAdapter != null) {
mAdapter.setViewPagerObserver(null);
mAdapter.startUpdate(this);
@@ -561,6 +561,7 @@
*
* @return The currently registered PagerAdapter
*/
+ @Nullable
public PagerAdapter getAdapter() {
return mAdapter;
}
@@ -712,7 +713,7 @@
*
* @param listener listener to add
*/
- public void addOnPageChangeListener(OnPageChangeListener listener) {
+ public void addOnPageChangeListener(@NonNull OnPageChangeListener listener) {
if (mOnPageChangeListeners == null) {
mOnPageChangeListeners = new ArrayList<>();
}
@@ -725,7 +726,7 @@
*
* @param listener listener to remove
*/
- public void removeOnPageChangeListener(OnPageChangeListener listener) {
+ public void removeOnPageChangeListener(@NonNull OnPageChangeListener listener) {
if (mOnPageChangeListeners != null) {
mOnPageChangeListeners.remove(listener);
}
@@ -757,7 +758,8 @@
* to be drawn from last to first instead of first to last.
* @param transformer PageTransformer that will modify each page's animation properties
*/
- public void setPageTransformer(boolean reverseDrawingOrder, PageTransformer transformer) {
+ public void setPageTransformer(boolean reverseDrawingOrder,
+ @Nullable PageTransformer transformer) {
setPageTransformer(reverseDrawingOrder, transformer, View.LAYER_TYPE_HARDWARE);
}
@@ -774,8 +776,8 @@
* {@link View#LAYER_TYPE_SOFTWARE}, or
* {@link View#LAYER_TYPE_NONE}.
*/
- public void setPageTransformer(boolean reverseDrawingOrder, PageTransformer transformer,
- int pageLayerType) {
+ public void setPageTransformer(boolean reverseDrawingOrder,
+ @Nullable PageTransformer transformer, int pageLayerType) {
final boolean hasTransformer = transformer != null;
final boolean needsPopulate = hasTransformer != (mPageTransformer != null);
mPageTransformer = transformer;
@@ -881,7 +883,7 @@
*
* @param d Drawable to display between pages
*/
- public void setPageMarginDrawable(Drawable d) {
+ public void setPageMarginDrawable(@Nullable Drawable d) {
mMarginDrawable = d;
if (d != null) refreshDrawableState();
setWillNotDraw(d == null);
@@ -1383,7 +1385,7 @@
Parcelable adapterState;
ClassLoader loader;
- public SavedState(Parcelable superState) {
+ public SavedState(@NonNull Parcelable superState) {
super(superState);
}
@@ -2744,7 +2746,7 @@
* @param event The key event to execute.
* @return Return true if the event was handled, else false.
*/
- public boolean executeKeyEvent(KeyEvent event) {
+ public boolean executeKeyEvent(@NonNull KeyEvent event) {
boolean handled = false;
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch (event.getKeyCode()) {
diff --git a/core-ui/java/android/support/v4/view/animation/FastOutLinearInInterpolator.java b/core-ui/src/main/java/android/support/v4/view/animation/FastOutLinearInInterpolator.java
similarity index 100%
rename from core-ui/java/android/support/v4/view/animation/FastOutLinearInInterpolator.java
rename to core-ui/src/main/java/android/support/v4/view/animation/FastOutLinearInInterpolator.java
diff --git a/core-ui/java/android/support/v4/view/animation/FastOutSlowInInterpolator.java b/core-ui/src/main/java/android/support/v4/view/animation/FastOutSlowInInterpolator.java
similarity index 100%
rename from core-ui/java/android/support/v4/view/animation/FastOutSlowInInterpolator.java
rename to core-ui/src/main/java/android/support/v4/view/animation/FastOutSlowInInterpolator.java
diff --git a/core-ui/java/android/support/v4/view/animation/LinearOutSlowInInterpolator.java b/core-ui/src/main/java/android/support/v4/view/animation/LinearOutSlowInInterpolator.java
similarity index 100%
rename from core-ui/java/android/support/v4/view/animation/LinearOutSlowInInterpolator.java
rename to core-ui/src/main/java/android/support/v4/view/animation/LinearOutSlowInInterpolator.java
diff --git a/core-ui/java/android/support/v4/view/animation/LookupTableInterpolator.java b/core-ui/src/main/java/android/support/v4/view/animation/LookupTableInterpolator.java
similarity index 100%
rename from core-ui/java/android/support/v4/view/animation/LookupTableInterpolator.java
rename to core-ui/src/main/java/android/support/v4/view/animation/LookupTableInterpolator.java
diff --git a/core-ui/java/android/support/v4/view/package.html b/core-ui/src/main/java/android/support/v4/view/package.html
similarity index 100%
rename from core-ui/java/android/support/v4/view/package.html
rename to core-ui/src/main/java/android/support/v4/view/package.html
diff --git a/core-ui/java/android/support/v4/widget/AutoScrollHelper.java b/core-ui/src/main/java/android/support/v4/widget/AutoScrollHelper.java
similarity index 99%
rename from core-ui/java/android/support/v4/widget/AutoScrollHelper.java
rename to core-ui/src/main/java/android/support/v4/widget/AutoScrollHelper.java
index d0407be..60d208d 100644
--- a/core-ui/java/android/support/v4/widget/AutoScrollHelper.java
+++ b/core-ui/src/main/java/android/support/v4/widget/AutoScrollHelper.java
@@ -18,6 +18,7 @@
import android.content.res.Resources;
import android.os.SystemClock;
+import android.support.annotation.NonNull;
import android.support.v4.view.ViewCompat;
import android.util.DisplayMetrics;
import android.view.MotionEvent;
@@ -205,7 +206,7 @@
*
* @param target The view to automatically scroll.
*/
- public AutoScrollHelper(View target) {
+ public AutoScrollHelper(@NonNull View target) {
mTarget = target;
final DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
@@ -289,6 +290,7 @@
* {@link #NO_MAX} to leave the relative value unconstrained.
* @return The scroll helper, which may used to chain setter calls.
*/
+ @NonNull
public AutoScrollHelper setMaximumVelocity(float horizontalMax, float verticalMax) {
mMaximumVelocity[HORIZONTAL] = horizontalMax / 1000f;
mMaximumVelocity[VERTICAL] = verticalMax / 1000f;
@@ -307,6 +309,7 @@
* {@link #NO_MIN} to leave the relative value unconstrained.
* @return The scroll helper, which may used to chain setter calls.
*/
+ @NonNull
public AutoScrollHelper setMinimumVelocity(float horizontalMin, float verticalMin) {
mMinimumVelocity[HORIZONTAL] = horizontalMin / 1000f;
mMinimumVelocity[VERTICAL] = verticalMin / 1000f;
@@ -328,6 +331,7 @@
* ignore.
* @return The scroll helper, which may used to chain setter calls.
*/
+ @NonNull
public AutoScrollHelper setRelativeVelocity(float horizontal, float vertical) {
mRelativeVelocity[HORIZONTAL] = horizontal / 1000f;
mRelativeVelocity[VERTICAL] = vertical / 1000f;
@@ -349,6 +353,7 @@
* @param type The type of edge to use.
* @return The scroll helper, which may used to chain setter calls.
*/
+ @NonNull
public AutoScrollHelper setEdgeType(int type) {
mEdgeType = type;
return this;
@@ -368,6 +373,7 @@
* maximum value.
* @return The scroll helper, which may used to chain setter calls.
*/
+ @NonNull
public AutoScrollHelper setRelativeEdges(float horizontal, float vertical) {
mRelativeEdges[HORIZONTAL] = horizontal;
mRelativeEdges[VERTICAL] = vertical;
@@ -390,6 +396,7 @@
* value.
* @return The scroll helper, which may used to chain setter calls.
*/
+ @NonNull
public AutoScrollHelper setMaximumEdges(float horizontalMax, float verticalMax) {
mMaximumEdges[HORIZONTAL] = horizontalMax;
mMaximumEdges[VERTICAL] = verticalMax;
@@ -407,6 +414,7 @@
* @param delayMillis The activation delay in milliseconds.
* @return The scroll helper, which may used to chain setter calls.
*/
+ @NonNull
public AutoScrollHelper setActivationDelay(int delayMillis) {
mActivationDelay = delayMillis;
return this;
@@ -422,6 +430,7 @@
* @param durationMillis The ramp-up duration in milliseconds.
* @return The scroll helper, which may used to chain setter calls.
*/
+ @NonNull
public AutoScrollHelper setRampUpDuration(int durationMillis) {
mScroller.setRampUpDuration(durationMillis);
return this;
@@ -437,6 +446,7 @@
* @param durationMillis The ramp-down duration in milliseconds.
* @return The scroll helper, which may used to chain setter calls.
*/
+ @NonNull
public AutoScrollHelper setRampDownDuration(int durationMillis) {
mScroller.setRampDownDuration(durationMillis);
return this;
diff --git a/core-ui/java/android/support/v4/widget/CircleImageView.java b/core-ui/src/main/java/android/support/v4/widget/CircleImageView.java
similarity index 100%
rename from core-ui/java/android/support/v4/widget/CircleImageView.java
rename to core-ui/src/main/java/android/support/v4/widget/CircleImageView.java
diff --git a/core-ui/java/android/support/v4/widget/CircularProgressDrawable.java b/core-ui/src/main/java/android/support/v4/widget/CircularProgressDrawable.java
similarity index 99%
rename from core-ui/java/android/support/v4/widget/CircularProgressDrawable.java
rename to core-ui/src/main/java/android/support/v4/widget/CircularProgressDrawable.java
index ac29541..2055669 100644
--- a/core-ui/java/android/support/v4/widget/CircularProgressDrawable.java
+++ b/core-ui/src/main/java/android/support/v4/widget/CircularProgressDrawable.java
@@ -132,7 +132,7 @@
/**
* @param context application context
*/
- public CircularProgressDrawable(Context context) {
+ public CircularProgressDrawable(@NonNull Context context) {
mResources = Preconditions.checkNotNull(context).getResources();
mRing = new Ring();
@@ -215,7 +215,7 @@
*
* @param strokeCap stroke cap
*/
- public void setStrokeCap(Paint.Cap strokeCap) {
+ public void setStrokeCap(@NonNull Paint.Cap strokeCap) {
mRing.setStrokeCap(strokeCap);
invalidateSelf();
}
@@ -225,6 +225,7 @@
*
* @return stroke cap
*/
+ @NonNull
public Paint.Cap getStrokeCap() {
return mRing.getStrokeCap();
}
@@ -373,6 +374,7 @@
*
* @return list of ARGB colors
*/
+ @NonNull
public int[] getColorSchemeColors() {
return mRing.getColors();
}
@@ -383,7 +385,7 @@
*
* @param colors list of ARGB colors to be used in the spinner
*/
- public void setColorSchemeColors(int... colors) {
+ public void setColorSchemeColors(@NonNull int... colors) {
mRing.setColors(colors);
mRing.setColorIndex(0);
invalidateSelf();
diff --git a/core-ui/java/android/support/v4/widget/ContentLoadingProgressBar.java b/core-ui/src/main/java/android/support/v4/widget/ContentLoadingProgressBar.java
similarity index 93%
rename from core-ui/java/android/support/v4/widget/ContentLoadingProgressBar.java
rename to core-ui/src/main/java/android/support/v4/widget/ContentLoadingProgressBar.java
index 98b63a4..356c7b9 100644
--- a/core-ui/java/android/support/v4/widget/ContentLoadingProgressBar.java
+++ b/core-ui/src/main/java/android/support/v4/widget/ContentLoadingProgressBar.java
@@ -17,6 +17,8 @@
package android.support.v4.widget;
import android.content.Context;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ProgressBar;
@@ -61,11 +63,11 @@
}
};
- public ContentLoadingProgressBar(Context context) {
+ public ContentLoadingProgressBar(@NonNull Context context) {
this(context, null);
}
- public ContentLoadingProgressBar(Context context, AttributeSet attrs) {
+ public ContentLoadingProgressBar(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs, 0);
}
diff --git a/core-ui/java/android/support/v4/widget/CursorAdapter.java b/core-ui/src/main/java/android/support/v4/widget/CursorAdapter.java
similarity index 100%
rename from core-ui/java/android/support/v4/widget/CursorAdapter.java
rename to core-ui/src/main/java/android/support/v4/widget/CursorAdapter.java
diff --git a/core-ui/java/android/support/v4/widget/CursorFilter.java b/core-ui/src/main/java/android/support/v4/widget/CursorFilter.java
similarity index 100%
rename from core-ui/java/android/support/v4/widget/CursorFilter.java
rename to core-ui/src/main/java/android/support/v4/widget/CursorFilter.java
diff --git a/core-ui/java/android/support/v4/widget/DrawerLayout.java b/core-ui/src/main/java/android/support/v4/widget/DrawerLayout.java
similarity index 98%
rename from core-ui/java/android/support/v4/widget/DrawerLayout.java
rename to core-ui/src/main/java/android/support/v4/widget/DrawerLayout.java
index c7b40e9..a73e1f1 100644
--- a/core-ui/java/android/support/v4/widget/DrawerLayout.java
+++ b/core-ui/src/main/java/android/support/v4/widget/DrawerLayout.java
@@ -248,7 +248,7 @@
* @param drawerView The child view that was moved
* @param slideOffset The new offset of this drawer within its range, from 0-1
*/
- void onDrawerSlide(View drawerView, float slideOffset);
+ void onDrawerSlide(@NonNull View drawerView, float slideOffset);
/**
* Called when a drawer has settled in a completely open state.
@@ -256,14 +256,14 @@
*
* @param drawerView Drawer view that is now open
*/
- void onDrawerOpened(View drawerView);
+ void onDrawerOpened(@NonNull View drawerView);
/**
* Called when a drawer has settled in a completely closed state.
*
* @param drawerView Drawer view that is now closed
*/
- void onDrawerClosed(View drawerView);
+ void onDrawerClosed(@NonNull View drawerView);
/**
* Called when the drawer motion state changes. The new state will
@@ -296,15 +296,15 @@
}
}
- public DrawerLayout(Context context) {
+ public DrawerLayout(@NonNull Context context) {
this(context, null);
}
- public DrawerLayout(Context context, AttributeSet attrs) {
+ public DrawerLayout(@NonNull Context context, @Nullable AttributeSet attrs) {
this(context, attrs, 0);
}
- public DrawerLayout(Context context, AttributeSet attrs, int defStyle) {
+ public DrawerLayout(@NonNull Context context, @Nullable AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
final float density = getResources().getDisplayMetrics().density;
@@ -626,7 +626,7 @@
* @see #LOCK_MODE_LOCKED_CLOSED
* @see #LOCK_MODE_LOCKED_OPEN
*/
- public void setDrawerLockMode(@LockMode int lockMode, View drawerView) {
+ public void setDrawerLockMode(@LockMode int lockMode, @NonNull View drawerView) {
if (!isDrawerView(drawerView)) {
throw new IllegalArgumentException("View " + drawerView + " is not a "
+ "drawer with appropriate layout_gravity");
@@ -700,7 +700,7 @@
* {@link #LOCK_MODE_LOCKED_OPEN}.
*/
@LockMode
- public int getDrawerLockMode(View drawerView) {
+ public int getDrawerLockMode(@NonNull View drawerView) {
if (!isDrawerView(drawerView)) {
throw new IllegalArgumentException("View " + drawerView + " is not a drawer");
}
@@ -718,7 +718,7 @@
* drawer to set the title for.
* @param title The title for the drawer.
*/
- public void setDrawerTitle(@EdgeGravity int edgeGravity, CharSequence title) {
+ public void setDrawerTitle(@EdgeGravity int edgeGravity, @Nullable CharSequence title) {
final int absGravity = GravityCompat.getAbsoluteGravity(
edgeGravity, ViewCompat.getLayoutDirection(this));
if (absGravity == Gravity.LEFT) {
@@ -1276,7 +1276,7 @@
*
* @param bg Background drawable to draw behind the status bar
*/
- public void setStatusBarBackground(Drawable bg) {
+ public void setStatusBarBackground(@Nullable Drawable bg) {
mStatusBarBackground = bg;
invalidate();
}
@@ -1286,6 +1286,7 @@
*
* @return The status bar background drawable, or null if none set
*/
+ @Nullable
public Drawable getStatusBarBackgroundDrawable() {
return mStatusBarBackground;
}
@@ -1577,7 +1578,7 @@
*
* @param drawerView Drawer view to open
*/
- public void openDrawer(View drawerView) {
+ public void openDrawer(@NonNull View drawerView) {
openDrawer(drawerView, true);
}
@@ -1587,7 +1588,7 @@
* @param drawerView Drawer view to open
* @param animate Whether opening of the drawer should be animated.
*/
- public void openDrawer(View drawerView, boolean animate) {
+ public void openDrawer(@NonNull View drawerView, boolean animate) {
if (!isDrawerView(drawerView)) {
throw new IllegalArgumentException("View " + drawerView + " is not a sliding drawer");
}
@@ -1646,7 +1647,7 @@
*
* @param drawerView Drawer view to close
*/
- public void closeDrawer(View drawerView) {
+ public void closeDrawer(@NonNull View drawerView) {
closeDrawer(drawerView, true);
}
@@ -1656,7 +1657,7 @@
* @param drawerView Drawer view to close
* @param animate Whether closing of the drawer should be animated.
*/
- public void closeDrawer(View drawerView, boolean animate) {
+ public void closeDrawer(@NonNull View drawerView, boolean animate) {
if (!isDrawerView(drawerView)) {
throw new IllegalArgumentException("View " + drawerView + " is not a sliding drawer");
}
@@ -1718,7 +1719,7 @@
* @return true if the given drawer view is in an open state
* @see #isDrawerVisible(android.view.View)
*/
- public boolean isDrawerOpen(View drawer) {
+ public boolean isDrawerOpen(@NonNull View drawer) {
if (!isDrawerView(drawer)) {
throw new IllegalArgumentException("View " + drawer + " is not a drawer");
}
@@ -1751,7 +1752,7 @@
* @return true if the given drawer is visible on-screen
* @see #isDrawerOpen(android.view.View)
*/
- public boolean isDrawerVisible(View drawer) {
+ public boolean isDrawerVisible(@NonNull View drawer) {
if (!isDrawerView(drawer)) {
throw new IllegalArgumentException("View " + drawer + " is not a drawer");
}
@@ -2001,7 +2002,7 @@
@LockMode int lockModeStart;
@LockMode int lockModeEnd;
- public SavedState(Parcel in, ClassLoader loader) {
+ public SavedState(@NonNull Parcel in, @Nullable ClassLoader loader) {
super(in, loader);
openDrawerGravity = in.readInt();
lockModeLeft = in.readInt();
@@ -2010,7 +2011,7 @@
lockModeEnd = in.readInt();
}
- public SavedState(Parcelable superState) {
+ public SavedState(@NonNull Parcelable superState) {
super(superState);
}
@@ -2218,7 +2219,7 @@
boolean isPeeking;
int openState;
- public LayoutParams(Context c, AttributeSet attrs) {
+ public LayoutParams(@NonNull Context c, @Nullable AttributeSet attrs) {
super(c, attrs);
final TypedArray a = c.obtainStyledAttributes(attrs, LAYOUT_ATTRS);
@@ -2235,16 +2236,16 @@
this.gravity = gravity;
}
- public LayoutParams(LayoutParams source) {
+ public LayoutParams(@NonNull LayoutParams source) {
super(source);
this.gravity = source.gravity;
}
- public LayoutParams(ViewGroup.LayoutParams source) {
+ public LayoutParams(@NonNull ViewGroup.LayoutParams source) {
super(source);
}
- public LayoutParams(ViewGroup.MarginLayoutParams source) {
+ public LayoutParams(@NonNull ViewGroup.MarginLayoutParams source) {
super(source);
}
}
diff --git a/core-ui/java/android/support/v4/widget/ExploreByTouchHelper.java b/core-ui/src/main/java/android/support/v4/widget/ExploreByTouchHelper.java
similarity index 98%
rename from core-ui/java/android/support/v4/widget/ExploreByTouchHelper.java
rename to core-ui/src/main/java/android/support/v4/widget/ExploreByTouchHelper.java
index 8a29eff..2b5ed0a 100644
--- a/core-ui/java/android/support/v4/widget/ExploreByTouchHelper.java
+++ b/core-ui/src/main/java/android/support/v4/widget/ExploreByTouchHelper.java
@@ -129,7 +129,7 @@
*
* @param host view whose virtual view hierarchy is exposed by this helper
*/
- public ExploreByTouchHelper(View host) {
+ public ExploreByTouchHelper(@NonNull View host) {
if (host == null) {
throw new IllegalArgumentException("View may not be null");
}
@@ -1107,7 +1107,8 @@
* populate the event
* @param event The event to populate
*/
- protected void onPopulateEventForVirtualView(int virtualViewId, AccessibilityEvent event) {
+ protected void onPopulateEventForVirtualView(int virtualViewId,
+ @NonNull AccessibilityEvent event) {
// Default implementation is no-op.
}
@@ -1119,7 +1120,7 @@
*
* @param event the event to populate with information about the host view
*/
- protected void onPopulateEventForHost(AccessibilityEvent event) {
+ protected void onPopulateEventForHost(@NonNull AccessibilityEvent event) {
// Default implementation is no-op.
}
@@ -1187,7 +1188,7 @@
* @param node The node to populate
*/
protected abstract void onPopulateNodeForVirtualView(
- int virtualViewId, AccessibilityNodeInfoCompat node);
+ int virtualViewId, @NonNull AccessibilityNodeInfoCompat node);
/**
* Populates an {@link AccessibilityNodeInfoCompat} with information
@@ -1197,7 +1198,7 @@
*
* @param node the node to populate with information about the host view
*/
- protected void onPopulateNodeForHost(AccessibilityNodeInfoCompat node) {
+ protected void onPopulateNodeForHost(@NonNull AccessibilityNodeInfoCompat node) {
// Default implementation is no-op.
}
@@ -1225,7 +1226,7 @@
* @return true if the action was performed
*/
protected abstract boolean onPerformActionForVirtualView(
- int virtualViewId, int action, Bundle arguments);
+ int virtualViewId, int action, @Nullable Bundle arguments);
/**
* Exposes a virtual view hierarchy to the accessibility framework.
diff --git a/core-ui/java/android/support/v4/widget/FocusStrategy.java b/core-ui/src/main/java/android/support/v4/widget/FocusStrategy.java
similarity index 100%
rename from core-ui/java/android/support/v4/widget/FocusStrategy.java
rename to core-ui/src/main/java/android/support/v4/widget/FocusStrategy.java
diff --git a/core-ui/java/android/support/v4/widget/ListViewAutoScrollHelper.java b/core-ui/src/main/java/android/support/v4/widget/ListViewAutoScrollHelper.java
similarity index 95%
rename from core-ui/java/android/support/v4/widget/ListViewAutoScrollHelper.java
rename to core-ui/src/main/java/android/support/v4/widget/ListViewAutoScrollHelper.java
index 73d18ce..c373f27 100644
--- a/core-ui/java/android/support/v4/widget/ListViewAutoScrollHelper.java
+++ b/core-ui/src/main/java/android/support/v4/widget/ListViewAutoScrollHelper.java
@@ -16,6 +16,7 @@
package android.support.v4.widget;
+import android.support.annotation.NonNull;
import android.view.View;
import android.widget.ListView;
@@ -26,7 +27,7 @@
public class ListViewAutoScrollHelper extends AutoScrollHelper {
private final ListView mTarget;
- public ListViewAutoScrollHelper(ListView target) {
+ public ListViewAutoScrollHelper(@NonNull ListView target) {
super(target);
mTarget = target;
diff --git a/core-ui/java/android/support/v4/widget/NestedScrollView.java b/core-ui/src/main/java/android/support/v4/widget/NestedScrollView.java
similarity index 99%
rename from core-ui/java/android/support/v4/widget/NestedScrollView.java
rename to core-ui/src/main/java/android/support/v4/widget/NestedScrollView.java
index 517686f..73ff084 100644
--- a/core-ui/java/android/support/v4/widget/NestedScrollView.java
+++ b/core-ui/src/main/java/android/support/v4/widget/NestedScrollView.java
@@ -26,6 +26,8 @@
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.annotation.RestrictTo;
import android.support.v4.view.AccessibilityDelegateCompat;
import android.support.v4.view.InputDeviceCompat;
@@ -181,15 +183,16 @@
private OnScrollChangeListener mOnScrollChangeListener;
- public NestedScrollView(Context context) {
+ public NestedScrollView(@NonNull Context context) {
this(context, null);
}
- public NestedScrollView(Context context, AttributeSet attrs) {
+ public NestedScrollView(@NonNull Context context, @Nullable AttributeSet attrs) {
this(context, attrs, 0);
}
- public NestedScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
+ public NestedScrollView(@NonNull Context context, @Nullable AttributeSet attrs,
+ int defStyleAttr) {
super(context, attrs, defStyleAttr);
initScrollView();
@@ -441,7 +444,7 @@
* @see android.view.View#getScrollX()
* @see android.view.View#getScrollY()
*/
- public void setOnScrollChangeListener(OnScrollChangeListener l) {
+ public void setOnScrollChangeListener(@Nullable OnScrollChangeListener l) {
mOnScrollChangeListener = l;
}
@@ -552,7 +555,7 @@
* @param event The key event to execute.
* @return Return true if the event was handled, else false.
*/
- public boolean executeKeyEvent(KeyEvent event) {
+ public boolean executeKeyEvent(@NonNull KeyEvent event) {
mTempRect.setEmpty();
if (!canScroll()) {
diff --git a/core-ui/java/android/support/v4/widget/ResourceCursorAdapter.java b/core-ui/src/main/java/android/support/v4/widget/ResourceCursorAdapter.java
similarity index 100%
rename from core-ui/java/android/support/v4/widget/ResourceCursorAdapter.java
rename to core-ui/src/main/java/android/support/v4/widget/ResourceCursorAdapter.java
diff --git a/core-ui/java/android/support/v4/widget/SimpleCursorAdapter.java b/core-ui/src/main/java/android/support/v4/widget/SimpleCursorAdapter.java
similarity index 100%
rename from core-ui/java/android/support/v4/widget/SimpleCursorAdapter.java
rename to core-ui/src/main/java/android/support/v4/widget/SimpleCursorAdapter.java
diff --git a/core-ui/java/android/support/v4/widget/SlidingPaneLayout.java b/core-ui/src/main/java/android/support/v4/widget/SlidingPaneLayout.java
similarity index 98%
rename from core-ui/java/android/support/v4/widget/SlidingPaneLayout.java
rename to core-ui/src/main/java/android/support/v4/widget/SlidingPaneLayout.java
index 602df70..5676ccf 100644
--- a/core-ui/java/android/support/v4/widget/SlidingPaneLayout.java
+++ b/core-ui/src/main/java/android/support/v4/widget/SlidingPaneLayout.java
@@ -30,6 +30,8 @@
import android.os.Parcelable;
import android.support.annotation.ColorInt;
import android.support.annotation.DrawableRes;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
import android.support.v4.content.ContextCompat;
import android.support.v4.view.AbsSavedState;
@@ -213,20 +215,20 @@
* @param panel The child view that was moved
* @param slideOffset The new offset of this sliding pane within its range, from 0-1
*/
- void onPanelSlide(View panel, float slideOffset);
+ void onPanelSlide(@NonNull View panel, float slideOffset);
/**
* Called when a sliding pane becomes slid completely open. The pane may or may not
* be interactive at this point depending on how much of the pane is visible.
* @param panel The child view that was slid to an open position, revealing other panes
*/
- void onPanelOpened(View panel);
+ void onPanelOpened(@NonNull View panel);
/**
* Called when a sliding pane becomes slid completely closed. The pane is now guaranteed
* to be interactive. It may now obscure other views in the layout.
* @param panel The child view that was slid to a closed position
*/
- void onPanelClosed(View panel);
+ void onPanelClosed(@NonNull View panel);
}
/**
@@ -245,15 +247,15 @@
}
}
- public SlidingPaneLayout(Context context) {
+ public SlidingPaneLayout(@NonNull Context context) {
this(context, null);
}
- public SlidingPaneLayout(Context context, AttributeSet attrs) {
+ public SlidingPaneLayout(@NonNull Context context, @Nullable AttributeSet attrs) {
this(context, attrs, 0);
}
- public SlidingPaneLayout(Context context, AttributeSet attrs, int defStyle) {
+ public SlidingPaneLayout(@NonNull Context context, @Nullable AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
final float density = context.getResources().getDisplayMetrics().density;
@@ -324,7 +326,7 @@
return mCoveredFadeColor;
}
- public void setPanelSlideListener(PanelSlideListener listener) {
+ public void setPanelSlideListener(@Nullable PanelSlideListener listener) {
mPanelSlideListener = listener;
}
@@ -1081,7 +1083,7 @@
*
* @param d drawable to use as a shadow
*/
- public void setShadowDrawableLeft(Drawable d) {
+ public void setShadowDrawableLeft(@Nullable Drawable d) {
mShadowDrawableLeft = d;
}
@@ -1091,7 +1093,7 @@
*
* @param d drawable to use as a shadow
*/
- public void setShadowDrawableRight(Drawable d) {
+ public void setShadowDrawableRight(@Nullable Drawable d) {
mShadowDrawableRight = d;
}
@@ -1410,20 +1412,20 @@
super(width, height);
}
- public LayoutParams(android.view.ViewGroup.LayoutParams source) {
+ public LayoutParams(@NonNull android.view.ViewGroup.LayoutParams source) {
super(source);
}
- public LayoutParams(MarginLayoutParams source) {
+ public LayoutParams(@NonNull MarginLayoutParams source) {
super(source);
}
- public LayoutParams(LayoutParams source) {
+ public LayoutParams(@NonNull LayoutParams source) {
super(source);
this.weight = source.weight;
}
- public LayoutParams(Context c, AttributeSet attrs) {
+ public LayoutParams(@NonNull Context c, @Nullable AttributeSet attrs) {
super(c, attrs);
final TypedArray a = c.obtainStyledAttributes(attrs, ATTRS);
diff --git a/core-ui/java/android/support/v4/widget/Space.java b/core-ui/src/main/java/android/support/v4/widget/Space.java
similarity index 88%
rename from core-ui/java/android/support/v4/widget/Space.java
rename to core-ui/src/main/java/android/support/v4/widget/Space.java
index 77a2d2e..7d37a72 100644
--- a/core-ui/java/android/support/v4/widget/Space.java
+++ b/core-ui/src/main/java/android/support/v4/widget/Space.java
@@ -19,6 +19,8 @@
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;
@@ -28,18 +30,18 @@
*/
public class Space extends View {
- public Space(Context context, AttributeSet attrs, int defStyle) {
+ public Space(@NonNull Context context, @Nullable AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
if (getVisibility() == VISIBLE) {
setVisibility(INVISIBLE);
}
}
- public Space(Context context, AttributeSet attrs) {
+ public Space(@NonNull Context context, @Nullable AttributeSet attrs) {
this(context, attrs, 0);
}
- public Space(Context context) {
+ public Space(@NonNull Context context) {
this(context, null);
}
diff --git a/core-ui/java/android/support/v4/widget/SwipeProgressBar.java b/core-ui/src/main/java/android/support/v4/widget/SwipeProgressBar.java
similarity index 100%
rename from core-ui/java/android/support/v4/widget/SwipeProgressBar.java
rename to core-ui/src/main/java/android/support/v4/widget/SwipeProgressBar.java
diff --git a/core-ui/java/android/support/v4/widget/SwipeRefreshLayout.java b/core-ui/src/main/java/android/support/v4/widget/SwipeRefreshLayout.java
similarity index 98%
rename from core-ui/java/android/support/v4/widget/SwipeRefreshLayout.java
rename to core-ui/src/main/java/android/support/v4/widget/SwipeRefreshLayout.java
index 2181bab..ca04e46 100644
--- a/core-ui/java/android/support/v4/widget/SwipeRefreshLayout.java
+++ b/core-ui/src/main/java/android/support/v4/widget/SwipeRefreshLayout.java
@@ -20,6 +20,7 @@
import android.content.res.TypedArray;
import android.support.annotation.ColorInt;
import android.support.annotation.ColorRes;
+import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.VisibleForTesting;
import android.support.v4.content.ContextCompat;
@@ -316,7 +317,7 @@
*
* @param context
*/
- public SwipeRefreshLayout(Context context) {
+ public SwipeRefreshLayout(@NonNull Context context) {
this(context, null);
}
@@ -326,7 +327,7 @@
* @param context
* @param attrs
*/
- public SwipeRefreshLayout(Context context, AttributeSet attrs) {
+ public SwipeRefreshLayout(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
@@ -387,7 +388,7 @@
* Set the listener to be notified when a refresh is triggered via the swipe
* gesture.
*/
- public void setOnRefreshListener(OnRefreshListener listener) {
+ public void setOnRefreshListener(@Nullable OnRefreshListener listener) {
mListener = listener;
}
@@ -1189,6 +1190,6 @@
*
* @return Whether it is possible for the child view of parent layout to scroll up.
*/
- boolean canChildScrollUp(SwipeRefreshLayout parent, @Nullable View child);
+ boolean canChildScrollUp(@NonNull SwipeRefreshLayout parent, @Nullable View child);
}
}
diff --git a/core-ui/java/android/support/v4/widget/ViewDragHelper.java b/core-ui/src/main/java/android/support/v4/widget/ViewDragHelper.java
similarity index 97%
rename from core-ui/java/android/support/v4/widget/ViewDragHelper.java
rename to core-ui/src/main/java/android/support/v4/widget/ViewDragHelper.java
index c222c17..09c6f66 100644
--- a/core-ui/java/android/support/v4/widget/ViewDragHelper.java
+++ b/core-ui/src/main/java/android/support/v4/widget/ViewDragHelper.java
@@ -18,6 +18,8 @@
package android.support.v4.widget;
import android.content.Context;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.v4.view.ViewCompat;
import android.util.Log;
import android.view.MotionEvent;
@@ -167,7 +169,9 @@
* @param dx Change in X position from the last call
* @param dy Change in Y position from the last call
*/
- public void onViewPositionChanged(View changedView, int left, int top, int dx, int dy) {}
+ public void onViewPositionChanged(@NonNull View changedView, int left, int top, int dx,
+ int dy) {
+ }
/**
* Called when a child view is captured for dragging or settling. The ID of the pointer
@@ -178,7 +182,7 @@
* @param capturedChild Child view that was captured
* @param activePointerId Pointer id tracking the child capture
*/
- public void onViewCaptured(View capturedChild, int activePointerId) {}
+ public void onViewCaptured(@NonNull View capturedChild, int activePointerId) {}
/**
* Called when the child view is no longer being actively dragged.
@@ -198,7 +202,7 @@
* @param xvel X velocity of the pointer as it left the screen in pixels per second.
* @param yvel Y velocity of the pointer as it left the screen in pixels per second.
*/
- public void onViewReleased(View releasedChild, float xvel, float yvel) {}
+ public void onViewReleased(@NonNull View releasedChild, float xvel, float yvel) {}
/**
* Called when one of the subscribed edges in the parent view has been touched
@@ -256,7 +260,7 @@
* @param child Child view to check
* @return range of horizontal motion in pixels
*/
- public int getViewHorizontalDragRange(View child) {
+ public int getViewHorizontalDragRange(@NonNull View child) {
return 0;
}
@@ -267,7 +271,7 @@
* @param child Child view to check
* @return range of vertical motion in pixels
*/
- public int getViewVerticalDragRange(View child) {
+ public int getViewVerticalDragRange(@NonNull View child) {
return 0;
}
@@ -287,7 +291,7 @@
* @param pointerId ID of the pointer attempting the capture
* @return true if capture should be allowed, false otherwise
*/
- public abstract boolean tryCaptureView(View child, int pointerId);
+ public abstract boolean tryCaptureView(@NonNull View child, int pointerId);
/**
* Restrict the motion of the dragged child view along the horizontal axis.
@@ -300,7 +304,7 @@
* @param dx Proposed change in position for left
* @return The new clamped position for left
*/
- public int clampViewPositionHorizontal(View child, int left, int dx) {
+ public int clampViewPositionHorizontal(@NonNull View child, int left, int dx) {
return 0;
}
@@ -315,7 +319,7 @@
* @param dy Proposed change in position for top
* @return The new clamped position for top
*/
- public int clampViewPositionVertical(View child, int top, int dy) {
+ public int clampViewPositionVertical(@NonNull View child, int top, int dy) {
return 0;
}
}
@@ -345,7 +349,7 @@
* @param cb Callback to provide information and receive events
* @return a new ViewDragHelper instance
*/
- public static ViewDragHelper create(ViewGroup forParent, Callback cb) {
+ public static ViewDragHelper create(@NonNull ViewGroup forParent, @NonNull Callback cb) {
return new ViewDragHelper(forParent.getContext(), forParent, cb);
}
@@ -358,7 +362,8 @@
* @param cb Callback to provide information and receive events
* @return a new ViewDragHelper instance
*/
- public static ViewDragHelper create(ViewGroup forParent, float sensitivity, Callback cb) {
+ public static ViewDragHelper create(@NonNull ViewGroup forParent, float sensitivity,
+ @NonNull Callback cb) {
final ViewDragHelper helper = create(forParent, cb);
helper.mTouchSlop = (int) (helper.mTouchSlop * (1 / sensitivity));
return helper;
@@ -372,7 +377,8 @@
* @param context Context to initialize config-dependent params from
* @param forParent Parent view to monitor
*/
- private ViewDragHelper(Context context, ViewGroup forParent, Callback cb) {
+ private ViewDragHelper(@NonNull Context context, @NonNull ViewGroup forParent,
+ @NonNull Callback cb) {
if (forParent == null) {
throw new IllegalArgumentException("Parent view may not be null");
}
@@ -458,7 +464,7 @@
* @param childView Child view to capture
* @param activePointerId ID of the pointer that is dragging the captured child view
*/
- public void captureChildView(View childView, int activePointerId) {
+ public void captureChildView(@NonNull View childView, int activePointerId) {
if (childView.getParent() != mParentView) {
throw new IllegalArgumentException("captureChildView: parameter must be a descendant "
+ "of the ViewDragHelper's tracked parent view (" + mParentView + ")");
@@ -473,6 +479,7 @@
/**
* @return The currently captured view, or null if no view has been captured.
*/
+ @Nullable
public View getCapturedView() {
return mCapturedView;
}
@@ -537,7 +544,7 @@
* @param finalTop Final top position of child
* @return true if animation should continue through {@link #continueSettling(boolean)} calls
*/
- public boolean smoothSlideViewTo(View child, int finalLeft, int finalTop) {
+ public boolean smoothSlideViewTo(@NonNull View child, int finalLeft, int finalTop) {
mCapturedView = child;
mActivePointerId = INVALID_POINTER;
@@ -918,7 +925,7 @@
* @param y Y coordinate of the active touch point
* @return true if child views of v can be scrolled by delta of dx.
*/
- protected boolean canScroll(View v, boolean checkV, int dx, int dy, int x, int y) {
+ protected boolean canScroll(@NonNull View v, boolean checkV, int dx, int dy, int x, int y) {
if (v instanceof ViewGroup) {
final ViewGroup group = (ViewGroup) v;
final int scrollX = v.getScrollX();
@@ -948,7 +955,7 @@
* @param ev MotionEvent provided to onInterceptTouchEvent
* @return true if the parent view should return true from onInterceptTouchEvent
*/
- public boolean shouldInterceptTouchEvent(MotionEvent ev) {
+ public boolean shouldInterceptTouchEvent(@NonNull MotionEvent ev) {
final int action = ev.getActionMasked();
final int actionIndex = ev.getActionIndex();
@@ -1082,7 +1089,7 @@
*
* @param ev The touch event received by the parent view
*/
- public void processTouchEvent(MotionEvent ev) {
+ public void processTouchEvent(@NonNull MotionEvent ev) {
final int action = ev.getActionMasked();
final int actionIndex = ev.getActionIndex();
@@ -1453,7 +1460,7 @@
* @param y Y position to test in the parent's coordinate system
* @return true if the supplied view is under the given point, false otherwise
*/
- public boolean isViewUnder(View view, int x, int y) {
+ public boolean isViewUnder(@Nullable View view, int x, int y) {
if (view == null) {
return false;
}
@@ -1471,6 +1478,7 @@
* @param y Y position to test in the parent's coordinate system
* @return The topmost child view under (x, y) or null if none found.
*/
+ @Nullable
public View findTopChildUnder(int x, int y) {
final int childCount = mParentView.getChildCount();
for (int i = childCount - 1; i >= 0; i--) {
diff --git a/core-ui/java/android/support/v4/widget/package.html b/core-ui/src/main/java/android/support/v4/widget/package.html
similarity index 100%
rename from core-ui/java/android/support/v4/widget/package.html
rename to core-ui/src/main/java/android/support/v4/widget/package.html
diff --git a/core-ui/tests/java/android/support/v4/view/BaseViewPagerTest.java b/core-ui/tests/java/android/support/v4/view/BaseViewPagerTest.java
index 10b68fa..f26942b 100644
--- a/core-ui/tests/java/android/support/v4/view/BaseViewPagerTest.java
+++ b/core-ui/tests/java/android/support/v4/view/BaseViewPagerTest.java
@@ -64,6 +64,7 @@
import android.support.coreui.test.R;
import android.support.test.espresso.ViewAction;
import android.support.test.espresso.action.EspressoKey;
+import android.support.test.filters.FlakyTest;
import android.support.test.filters.LargeTest;
import android.support.test.filters.MediumTest;
import android.support.v4.BaseInstrumentationTestCase;
@@ -1075,6 +1076,7 @@
verifyScrollCallbacksToLowerPage(wrap(swipeRight()), 0);
}
+ @FlakyTest(bugId = 38260187)
@Test
@LargeTest
public void testKeyboardNavigation() {
diff --git a/core-utils/Android.mk b/core-utils/Android.mk
index 5ea200e..a6855fc 100644
--- a/core-utils/Android.mk
+++ b/core-utils/Android.mk
@@ -27,10 +27,7 @@
LOCAL_MODULE := android-support-core-utils
LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
LOCAL_SRC_FILES := \
- $(call all-java-files-under,gingerbread) \
- $(call all-java-files-under,kitkat) \
- $(call all-java-files-under,api21) \
- $(call all-java-files-under,java)
+ $(call all-java-files-under,src/main/java)
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
LOCAL_SHARED_ANDROID_LIBRARIES := \
android-support-compat \
diff --git a/core-utils/AndroidManifest.xml b/core-utils/AndroidManifest.xml
index c24e023..248229b 100644
--- a/core-utils/AndroidManifest.xml
+++ b/core-utils/AndroidManifest.xml
@@ -16,8 +16,4 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.support.coreutils">
<uses-sdk android:minSdkVersion="14"/>
- <application>
- <meta-data android:name="android.support.coreutils.VERSION"
- android:value="${support-version}" />
- </application>
</manifest>
diff --git a/core-utils/api/26.1.0.txt b/core-utils/api/26.1.0.txt
new file mode 100644
index 0000000..d535653
--- /dev/null
+++ b/core-utils/api/26.1.0.txt
@@ -0,0 +1,321 @@
+package android.support.v4.app {
+
+ public class AppLaunchChecker {
+ ctor public AppLaunchChecker();
+ method public static boolean hasStartedFromLauncher(android.content.Context);
+ method public static void onActivityCreate(android.app.Activity);
+ }
+
+ public class FrameMetricsAggregator {
+ ctor public FrameMetricsAggregator();
+ ctor public FrameMetricsAggregator(int);
+ method public void add(android.app.Activity);
+ method public android.util.SparseIntArray[] getMetrics();
+ method public android.util.SparseIntArray[] remove(android.app.Activity);
+ method public android.util.SparseIntArray[] reset();
+ method public android.util.SparseIntArray[] stop();
+ field public static final int ANIMATION_DURATION = 256; // 0x100
+ field public static final int ANIMATION_INDEX = 8; // 0x8
+ field public static final int COMMAND_DURATION = 32; // 0x20
+ field public static final int COMMAND_INDEX = 5; // 0x5
+ field public static final int DELAY_DURATION = 128; // 0x80
+ field public static final int DELAY_INDEX = 7; // 0x7
+ field public static final int DRAW_DURATION = 8; // 0x8
+ field public static final int DRAW_INDEX = 3; // 0x3
+ field public static final int EVERY_DURATION = 511; // 0x1ff
+ field public static final int INPUT_DURATION = 2; // 0x2
+ field public static final int INPUT_INDEX = 1; // 0x1
+ field public static final int LAYOUT_MEASURE_DURATION = 4; // 0x4
+ field public static final int LAYOUT_MEASURE_INDEX = 2; // 0x2
+ field public static final int SWAP_DURATION = 64; // 0x40
+ field public static final int SWAP_INDEX = 6; // 0x6
+ field public static final int SYNC_DURATION = 16; // 0x10
+ field public static final int SYNC_INDEX = 4; // 0x4
+ field public static final int TOTAL_DURATION = 1; // 0x1
+ field public static final int TOTAL_INDEX = 0; // 0x0
+ }
+
+ public final class NavUtils {
+ method public static android.content.Intent getParentActivityIntent(android.app.Activity);
+ method public static android.content.Intent getParentActivityIntent(android.content.Context, java.lang.Class<?>) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public static android.content.Intent getParentActivityIntent(android.content.Context, android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public static java.lang.String getParentActivityName(android.app.Activity);
+ method public static java.lang.String getParentActivityName(android.content.Context, android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public static void navigateUpFromSameTask(android.app.Activity);
+ method public static void navigateUpTo(android.app.Activity, android.content.Intent);
+ method public static boolean shouldUpRecreateTask(android.app.Activity, android.content.Intent);
+ field public static final java.lang.String PARENT_ACTIVITY = "android.support.PARENT_ACTIVITY";
+ }
+
+ public final class TaskStackBuilder implements java.lang.Iterable {
+ method public android.support.v4.app.TaskStackBuilder addNextIntent(android.content.Intent);
+ method public android.support.v4.app.TaskStackBuilder addNextIntentWithParentStack(android.content.Intent);
+ method public android.support.v4.app.TaskStackBuilder addParentStack(android.app.Activity);
+ method public android.support.v4.app.TaskStackBuilder addParentStack(java.lang.Class<?>);
+ method public android.support.v4.app.TaskStackBuilder addParentStack(android.content.ComponentName);
+ method public static android.support.v4.app.TaskStackBuilder create(android.content.Context);
+ method public android.content.Intent editIntentAt(int);
+ method public static deprecated android.support.v4.app.TaskStackBuilder from(android.content.Context);
+ method public deprecated android.content.Intent getIntent(int);
+ method public int getIntentCount();
+ method public android.content.Intent[] getIntents();
+ method public android.app.PendingIntent getPendingIntent(int, int);
+ method public android.app.PendingIntent getPendingIntent(int, int, android.os.Bundle);
+ method public deprecated java.util.Iterator<android.content.Intent> iterator();
+ method public void startActivities();
+ method public void startActivities(android.os.Bundle);
+ }
+
+ public static abstract interface TaskStackBuilder.SupportParentable {
+ method public abstract android.content.Intent getSupportParentActivityIntent();
+ }
+
+}
+
+package android.support.v4.content {
+
+ public abstract class AsyncTaskLoader<D> extends android.support.v4.content.Loader {
+ ctor public AsyncTaskLoader(android.content.Context);
+ method public void cancelLoadInBackground();
+ method public boolean isLoadInBackgroundCanceled();
+ method public abstract D loadInBackground();
+ method public void onCanceled(D);
+ method protected D onLoadInBackground();
+ method public void setUpdateThrottle(long);
+ }
+
+ public class CursorLoader extends android.support.v4.content.AsyncTaskLoader {
+ ctor public CursorLoader(android.content.Context);
+ ctor public CursorLoader(android.content.Context, android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String);
+ method public void deliverResult(android.database.Cursor);
+ method public java.lang.String[] getProjection();
+ method public java.lang.String getSelection();
+ method public java.lang.String[] getSelectionArgs();
+ method public java.lang.String getSortOrder();
+ method public android.net.Uri getUri();
+ method public android.database.Cursor loadInBackground();
+ method public void onCanceled(android.database.Cursor);
+ method public void setProjection(java.lang.String[]);
+ method public void setSelection(java.lang.String);
+ method public void setSelectionArgs(java.lang.String[]);
+ method public void setSortOrder(java.lang.String);
+ method public void setUri(android.net.Uri);
+ }
+
+ public class FileProvider extends android.content.ContentProvider {
+ ctor public FileProvider();
+ method public int delete(android.net.Uri, java.lang.String, java.lang.String[]);
+ method public java.lang.String getType(android.net.Uri);
+ method public static android.net.Uri getUriForFile(android.content.Context, java.lang.String, java.io.File);
+ method public android.net.Uri insert(android.net.Uri, android.content.ContentValues);
+ method public boolean onCreate();
+ method public android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String);
+ method public int update(android.net.Uri, android.content.ContentValues, java.lang.String, java.lang.String[]);
+ }
+
+ public class Loader<D> {
+ ctor public Loader(android.content.Context);
+ method public void abandon();
+ method public boolean cancelLoad();
+ method public void commitContentChanged();
+ method public java.lang.String dataToString(D);
+ method public void deliverCancellation();
+ method public void deliverResult(D);
+ method public void dump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
+ method public void forceLoad();
+ method public android.content.Context getContext();
+ method public int getId();
+ method public boolean isAbandoned();
+ method public boolean isReset();
+ method public boolean isStarted();
+ method protected void onAbandon();
+ method protected boolean onCancelLoad();
+ method public void onContentChanged();
+ method protected void onForceLoad();
+ method protected void onReset();
+ method protected void onStartLoading();
+ method protected void onStopLoading();
+ method public void registerListener(int, android.support.v4.content.Loader.OnLoadCompleteListener<D>);
+ method public void registerOnLoadCanceledListener(android.support.v4.content.Loader.OnLoadCanceledListener<D>);
+ method public void reset();
+ method public void rollbackContentChanged();
+ method public final void startLoading();
+ method public void stopLoading();
+ method public boolean takeContentChanged();
+ method public void unregisterListener(android.support.v4.content.Loader.OnLoadCompleteListener<D>);
+ method public void unregisterOnLoadCanceledListener(android.support.v4.content.Loader.OnLoadCanceledListener<D>);
+ }
+
+ public final class Loader.ForceLoadContentObserver extends android.database.ContentObserver {
+ ctor public Loader.ForceLoadContentObserver();
+ }
+
+ public static abstract interface Loader.OnLoadCanceledListener<D> {
+ method public abstract void onLoadCanceled(android.support.v4.content.Loader<D>);
+ }
+
+ public static abstract interface Loader.OnLoadCompleteListener<D> {
+ method public abstract void onLoadComplete(android.support.v4.content.Loader<D>, D);
+ }
+
+ public final class LocalBroadcastManager {
+ method public static android.support.v4.content.LocalBroadcastManager getInstance(android.content.Context);
+ method public void registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter);
+ method public boolean sendBroadcast(android.content.Intent);
+ method public void sendBroadcastSync(android.content.Intent);
+ method public void unregisterReceiver(android.content.BroadcastReceiver);
+ }
+
+ public final class MimeTypeFilter {
+ method public static boolean matches(java.lang.String, java.lang.String);
+ method public static java.lang.String matches(java.lang.String, java.lang.String[]);
+ method public static java.lang.String matches(java.lang.String[], java.lang.String);
+ method public static java.lang.String[] matchesMany(java.lang.String[], java.lang.String);
+ }
+
+ public final class PermissionChecker {
+ method public static int checkCallingOrSelfPermission(android.content.Context, java.lang.String);
+ method public static int checkCallingPermission(android.content.Context, java.lang.String, java.lang.String);
+ method public static int checkPermission(android.content.Context, java.lang.String, int, int, java.lang.String);
+ method public static int checkSelfPermission(android.content.Context, java.lang.String);
+ field public static final int PERMISSION_DENIED = -1; // 0xffffffff
+ field public static final int PERMISSION_DENIED_APP_OP = -2; // 0xfffffffe
+ field public static final int PERMISSION_GRANTED = 0; // 0x0
+ }
+
+ public abstract deprecated class WakefulBroadcastReceiver extends android.content.BroadcastReceiver {
+ ctor public WakefulBroadcastReceiver();
+ method public static boolean completeWakefulIntent(android.content.Intent);
+ method public static android.content.ComponentName startWakefulService(android.content.Context, android.content.Intent);
+ }
+
+}
+
+package android.support.v4.graphics {
+
+ public final class ColorUtils {
+ method public static int HSLToColor(float[]);
+ method public static int LABToColor(double, double, double);
+ method public static void LABToXYZ(double, double, double, double[]);
+ method public static void RGBToHSL(int, int, int, float[]);
+ method public static void RGBToLAB(int, int, int, double[]);
+ method public static void RGBToXYZ(int, int, int, double[]);
+ method public static int XYZToColor(double, double, double);
+ method public static void XYZToLAB(double, double, double, double[]);
+ method public static int blendARGB(int, int, float);
+ method public static void blendHSL(float[], float[], float, float[]);
+ method public static void blendLAB(double[], double[], double, double[]);
+ method public static double calculateContrast(int, int);
+ method public static double calculateLuminance(int);
+ method public static int calculateMinimumAlpha(int, int, float);
+ method public static void colorToHSL(int, float[]);
+ method public static void colorToLAB(int, double[]);
+ method public static void colorToXYZ(int, double[]);
+ method public static int compositeColors(int, int);
+ method public static double distanceEuclidean(double[], double[]);
+ method public static int setAlphaComponent(int, int);
+ }
+
+}
+
+package android.support.v4.graphics.drawable {
+
+ public abstract class RoundedBitmapDrawable extends android.graphics.drawable.Drawable {
+ method public void draw(android.graphics.Canvas);
+ method public final android.graphics.Bitmap getBitmap();
+ method public float getCornerRadius();
+ method public int getGravity();
+ method public int getOpacity();
+ method public final android.graphics.Paint getPaint();
+ method public boolean hasAntiAlias();
+ method public boolean hasMipMap();
+ method public boolean isCircular();
+ method public void setAlpha(int);
+ method public void setAntiAlias(boolean);
+ method public void setCircular(boolean);
+ method public void setColorFilter(android.graphics.ColorFilter);
+ method public void setCornerRadius(float);
+ method public void setDither(boolean);
+ method public void setGravity(int);
+ method public void setMipMap(boolean);
+ method public void setTargetDensity(android.graphics.Canvas);
+ method public void setTargetDensity(android.util.DisplayMetrics);
+ method public void setTargetDensity(int);
+ }
+
+ public final class RoundedBitmapDrawableFactory {
+ method public static android.support.v4.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, android.graphics.Bitmap);
+ method public static android.support.v4.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, java.lang.String);
+ method public static android.support.v4.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, java.io.InputStream);
+ }
+
+}
+
+package android.support.v4.math {
+
+ public class MathUtils {
+ method public static float clamp(float, float, float);
+ method public static double clamp(double, double, double);
+ method public static int clamp(int, int, int);
+ }
+
+}
+
+package android.support.v4.print {
+
+ public final class PrintHelper {
+ ctor public PrintHelper(android.content.Context);
+ method public int getColorMode();
+ method public int getOrientation();
+ method public int getScaleMode();
+ method public void printBitmap(java.lang.String, android.graphics.Bitmap);
+ method public void printBitmap(java.lang.String, android.graphics.Bitmap, android.support.v4.print.PrintHelper.OnPrintFinishCallback);
+ method public void printBitmap(java.lang.String, android.net.Uri) throws java.io.FileNotFoundException;
+ method public void printBitmap(java.lang.String, android.net.Uri, android.support.v4.print.PrintHelper.OnPrintFinishCallback) throws java.io.FileNotFoundException;
+ method public void setColorMode(int);
+ method public void setOrientation(int);
+ method public void setScaleMode(int);
+ method public static boolean systemSupportsPrint();
+ field public static final int COLOR_MODE_COLOR = 2; // 0x2
+ field public static final int COLOR_MODE_MONOCHROME = 1; // 0x1
+ field public static final int ORIENTATION_LANDSCAPE = 1; // 0x1
+ field public static final int ORIENTATION_PORTRAIT = 2; // 0x2
+ field public static final int SCALE_MODE_FILL = 2; // 0x2
+ field public static final int SCALE_MODE_FIT = 1; // 0x1
+ }
+
+ public static abstract interface PrintHelper.OnPrintFinishCallback {
+ method public abstract void onFinish();
+ }
+
+}
+
+package android.support.v4.provider {
+
+ public abstract class DocumentFile {
+ method public abstract boolean canRead();
+ method public abstract boolean canWrite();
+ method public abstract android.support.v4.provider.DocumentFile createDirectory(java.lang.String);
+ method public abstract android.support.v4.provider.DocumentFile createFile(java.lang.String, java.lang.String);
+ method public abstract boolean delete();
+ method public abstract boolean exists();
+ method public android.support.v4.provider.DocumentFile findFile(java.lang.String);
+ method public static android.support.v4.provider.DocumentFile fromFile(java.io.File);
+ method public static android.support.v4.provider.DocumentFile fromSingleUri(android.content.Context, android.net.Uri);
+ method public static android.support.v4.provider.DocumentFile fromTreeUri(android.content.Context, android.net.Uri);
+ method public abstract java.lang.String getName();
+ method public android.support.v4.provider.DocumentFile getParentFile();
+ method public abstract java.lang.String getType();
+ method public abstract android.net.Uri getUri();
+ method public abstract boolean isDirectory();
+ method public static boolean isDocumentUri(android.content.Context, android.net.Uri);
+ method public abstract boolean isFile();
+ method public abstract boolean isVirtual();
+ method public abstract long lastModified();
+ method public abstract long length();
+ method public abstract android.support.v4.provider.DocumentFile[] listFiles();
+ method public abstract boolean renameTo(java.lang.String);
+ }
+
+}
+
diff --git a/core-utils/api/27.0.0.txt b/core-utils/api/27.0.0.txt
new file mode 100644
index 0000000..d535653
--- /dev/null
+++ b/core-utils/api/27.0.0.txt
@@ -0,0 +1,321 @@
+package android.support.v4.app {
+
+ public class AppLaunchChecker {
+ ctor public AppLaunchChecker();
+ method public static boolean hasStartedFromLauncher(android.content.Context);
+ method public static void onActivityCreate(android.app.Activity);
+ }
+
+ public class FrameMetricsAggregator {
+ ctor public FrameMetricsAggregator();
+ ctor public FrameMetricsAggregator(int);
+ method public void add(android.app.Activity);
+ method public android.util.SparseIntArray[] getMetrics();
+ method public android.util.SparseIntArray[] remove(android.app.Activity);
+ method public android.util.SparseIntArray[] reset();
+ method public android.util.SparseIntArray[] stop();
+ field public static final int ANIMATION_DURATION = 256; // 0x100
+ field public static final int ANIMATION_INDEX = 8; // 0x8
+ field public static final int COMMAND_DURATION = 32; // 0x20
+ field public static final int COMMAND_INDEX = 5; // 0x5
+ field public static final int DELAY_DURATION = 128; // 0x80
+ field public static final int DELAY_INDEX = 7; // 0x7
+ field public static final int DRAW_DURATION = 8; // 0x8
+ field public static final int DRAW_INDEX = 3; // 0x3
+ field public static final int EVERY_DURATION = 511; // 0x1ff
+ field public static final int INPUT_DURATION = 2; // 0x2
+ field public static final int INPUT_INDEX = 1; // 0x1
+ field public static final int LAYOUT_MEASURE_DURATION = 4; // 0x4
+ field public static final int LAYOUT_MEASURE_INDEX = 2; // 0x2
+ field public static final int SWAP_DURATION = 64; // 0x40
+ field public static final int SWAP_INDEX = 6; // 0x6
+ field public static final int SYNC_DURATION = 16; // 0x10
+ field public static final int SYNC_INDEX = 4; // 0x4
+ field public static final int TOTAL_DURATION = 1; // 0x1
+ field public static final int TOTAL_INDEX = 0; // 0x0
+ }
+
+ public final class NavUtils {
+ method public static android.content.Intent getParentActivityIntent(android.app.Activity);
+ method public static android.content.Intent getParentActivityIntent(android.content.Context, java.lang.Class<?>) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public static android.content.Intent getParentActivityIntent(android.content.Context, android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public static java.lang.String getParentActivityName(android.app.Activity);
+ method public static java.lang.String getParentActivityName(android.content.Context, android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public static void navigateUpFromSameTask(android.app.Activity);
+ method public static void navigateUpTo(android.app.Activity, android.content.Intent);
+ method public static boolean shouldUpRecreateTask(android.app.Activity, android.content.Intent);
+ field public static final java.lang.String PARENT_ACTIVITY = "android.support.PARENT_ACTIVITY";
+ }
+
+ public final class TaskStackBuilder implements java.lang.Iterable {
+ method public android.support.v4.app.TaskStackBuilder addNextIntent(android.content.Intent);
+ method public android.support.v4.app.TaskStackBuilder addNextIntentWithParentStack(android.content.Intent);
+ method public android.support.v4.app.TaskStackBuilder addParentStack(android.app.Activity);
+ method public android.support.v4.app.TaskStackBuilder addParentStack(java.lang.Class<?>);
+ method public android.support.v4.app.TaskStackBuilder addParentStack(android.content.ComponentName);
+ method public static android.support.v4.app.TaskStackBuilder create(android.content.Context);
+ method public android.content.Intent editIntentAt(int);
+ method public static deprecated android.support.v4.app.TaskStackBuilder from(android.content.Context);
+ method public deprecated android.content.Intent getIntent(int);
+ method public int getIntentCount();
+ method public android.content.Intent[] getIntents();
+ method public android.app.PendingIntent getPendingIntent(int, int);
+ method public android.app.PendingIntent getPendingIntent(int, int, android.os.Bundle);
+ method public deprecated java.util.Iterator<android.content.Intent> iterator();
+ method public void startActivities();
+ method public void startActivities(android.os.Bundle);
+ }
+
+ public static abstract interface TaskStackBuilder.SupportParentable {
+ method public abstract android.content.Intent getSupportParentActivityIntent();
+ }
+
+}
+
+package android.support.v4.content {
+
+ public abstract class AsyncTaskLoader<D> extends android.support.v4.content.Loader {
+ ctor public AsyncTaskLoader(android.content.Context);
+ method public void cancelLoadInBackground();
+ method public boolean isLoadInBackgroundCanceled();
+ method public abstract D loadInBackground();
+ method public void onCanceled(D);
+ method protected D onLoadInBackground();
+ method public void setUpdateThrottle(long);
+ }
+
+ public class CursorLoader extends android.support.v4.content.AsyncTaskLoader {
+ ctor public CursorLoader(android.content.Context);
+ ctor public CursorLoader(android.content.Context, android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String);
+ method public void deliverResult(android.database.Cursor);
+ method public java.lang.String[] getProjection();
+ method public java.lang.String getSelection();
+ method public java.lang.String[] getSelectionArgs();
+ method public java.lang.String getSortOrder();
+ method public android.net.Uri getUri();
+ method public android.database.Cursor loadInBackground();
+ method public void onCanceled(android.database.Cursor);
+ method public void setProjection(java.lang.String[]);
+ method public void setSelection(java.lang.String);
+ method public void setSelectionArgs(java.lang.String[]);
+ method public void setSortOrder(java.lang.String);
+ method public void setUri(android.net.Uri);
+ }
+
+ public class FileProvider extends android.content.ContentProvider {
+ ctor public FileProvider();
+ method public int delete(android.net.Uri, java.lang.String, java.lang.String[]);
+ method public java.lang.String getType(android.net.Uri);
+ method public static android.net.Uri getUriForFile(android.content.Context, java.lang.String, java.io.File);
+ method public android.net.Uri insert(android.net.Uri, android.content.ContentValues);
+ method public boolean onCreate();
+ method public android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String);
+ method public int update(android.net.Uri, android.content.ContentValues, java.lang.String, java.lang.String[]);
+ }
+
+ public class Loader<D> {
+ ctor public Loader(android.content.Context);
+ method public void abandon();
+ method public boolean cancelLoad();
+ method public void commitContentChanged();
+ method public java.lang.String dataToString(D);
+ method public void deliverCancellation();
+ method public void deliverResult(D);
+ method public void dump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
+ method public void forceLoad();
+ method public android.content.Context getContext();
+ method public int getId();
+ method public boolean isAbandoned();
+ method public boolean isReset();
+ method public boolean isStarted();
+ method protected void onAbandon();
+ method protected boolean onCancelLoad();
+ method public void onContentChanged();
+ method protected void onForceLoad();
+ method protected void onReset();
+ method protected void onStartLoading();
+ method protected void onStopLoading();
+ method public void registerListener(int, android.support.v4.content.Loader.OnLoadCompleteListener<D>);
+ method public void registerOnLoadCanceledListener(android.support.v4.content.Loader.OnLoadCanceledListener<D>);
+ method public void reset();
+ method public void rollbackContentChanged();
+ method public final void startLoading();
+ method public void stopLoading();
+ method public boolean takeContentChanged();
+ method public void unregisterListener(android.support.v4.content.Loader.OnLoadCompleteListener<D>);
+ method public void unregisterOnLoadCanceledListener(android.support.v4.content.Loader.OnLoadCanceledListener<D>);
+ }
+
+ public final class Loader.ForceLoadContentObserver extends android.database.ContentObserver {
+ ctor public Loader.ForceLoadContentObserver();
+ }
+
+ public static abstract interface Loader.OnLoadCanceledListener<D> {
+ method public abstract void onLoadCanceled(android.support.v4.content.Loader<D>);
+ }
+
+ public static abstract interface Loader.OnLoadCompleteListener<D> {
+ method public abstract void onLoadComplete(android.support.v4.content.Loader<D>, D);
+ }
+
+ public final class LocalBroadcastManager {
+ method public static android.support.v4.content.LocalBroadcastManager getInstance(android.content.Context);
+ method public void registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter);
+ method public boolean sendBroadcast(android.content.Intent);
+ method public void sendBroadcastSync(android.content.Intent);
+ method public void unregisterReceiver(android.content.BroadcastReceiver);
+ }
+
+ public final class MimeTypeFilter {
+ method public static boolean matches(java.lang.String, java.lang.String);
+ method public static java.lang.String matches(java.lang.String, java.lang.String[]);
+ method public static java.lang.String matches(java.lang.String[], java.lang.String);
+ method public static java.lang.String[] matchesMany(java.lang.String[], java.lang.String);
+ }
+
+ public final class PermissionChecker {
+ method public static int checkCallingOrSelfPermission(android.content.Context, java.lang.String);
+ method public static int checkCallingPermission(android.content.Context, java.lang.String, java.lang.String);
+ method public static int checkPermission(android.content.Context, java.lang.String, int, int, java.lang.String);
+ method public static int checkSelfPermission(android.content.Context, java.lang.String);
+ field public static final int PERMISSION_DENIED = -1; // 0xffffffff
+ field public static final int PERMISSION_DENIED_APP_OP = -2; // 0xfffffffe
+ field public static final int PERMISSION_GRANTED = 0; // 0x0
+ }
+
+ public abstract deprecated class WakefulBroadcastReceiver extends android.content.BroadcastReceiver {
+ ctor public WakefulBroadcastReceiver();
+ method public static boolean completeWakefulIntent(android.content.Intent);
+ method public static android.content.ComponentName startWakefulService(android.content.Context, android.content.Intent);
+ }
+
+}
+
+package android.support.v4.graphics {
+
+ public final class ColorUtils {
+ method public static int HSLToColor(float[]);
+ method public static int LABToColor(double, double, double);
+ method public static void LABToXYZ(double, double, double, double[]);
+ method public static void RGBToHSL(int, int, int, float[]);
+ method public static void RGBToLAB(int, int, int, double[]);
+ method public static void RGBToXYZ(int, int, int, double[]);
+ method public static int XYZToColor(double, double, double);
+ method public static void XYZToLAB(double, double, double, double[]);
+ method public static int blendARGB(int, int, float);
+ method public static void blendHSL(float[], float[], float, float[]);
+ method public static void blendLAB(double[], double[], double, double[]);
+ method public static double calculateContrast(int, int);
+ method public static double calculateLuminance(int);
+ method public static int calculateMinimumAlpha(int, int, float);
+ method public static void colorToHSL(int, float[]);
+ method public static void colorToLAB(int, double[]);
+ method public static void colorToXYZ(int, double[]);
+ method public static int compositeColors(int, int);
+ method public static double distanceEuclidean(double[], double[]);
+ method public static int setAlphaComponent(int, int);
+ }
+
+}
+
+package android.support.v4.graphics.drawable {
+
+ public abstract class RoundedBitmapDrawable extends android.graphics.drawable.Drawable {
+ method public void draw(android.graphics.Canvas);
+ method public final android.graphics.Bitmap getBitmap();
+ method public float getCornerRadius();
+ method public int getGravity();
+ method public int getOpacity();
+ method public final android.graphics.Paint getPaint();
+ method public boolean hasAntiAlias();
+ method public boolean hasMipMap();
+ method public boolean isCircular();
+ method public void setAlpha(int);
+ method public void setAntiAlias(boolean);
+ method public void setCircular(boolean);
+ method public void setColorFilter(android.graphics.ColorFilter);
+ method public void setCornerRadius(float);
+ method public void setDither(boolean);
+ method public void setGravity(int);
+ method public void setMipMap(boolean);
+ method public void setTargetDensity(android.graphics.Canvas);
+ method public void setTargetDensity(android.util.DisplayMetrics);
+ method public void setTargetDensity(int);
+ }
+
+ public final class RoundedBitmapDrawableFactory {
+ method public static android.support.v4.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, android.graphics.Bitmap);
+ method public static android.support.v4.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, java.lang.String);
+ method public static android.support.v4.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, java.io.InputStream);
+ }
+
+}
+
+package android.support.v4.math {
+
+ public class MathUtils {
+ method public static float clamp(float, float, float);
+ method public static double clamp(double, double, double);
+ method public static int clamp(int, int, int);
+ }
+
+}
+
+package android.support.v4.print {
+
+ public final class PrintHelper {
+ ctor public PrintHelper(android.content.Context);
+ method public int getColorMode();
+ method public int getOrientation();
+ method public int getScaleMode();
+ method public void printBitmap(java.lang.String, android.graphics.Bitmap);
+ method public void printBitmap(java.lang.String, android.graphics.Bitmap, android.support.v4.print.PrintHelper.OnPrintFinishCallback);
+ method public void printBitmap(java.lang.String, android.net.Uri) throws java.io.FileNotFoundException;
+ method public void printBitmap(java.lang.String, android.net.Uri, android.support.v4.print.PrintHelper.OnPrintFinishCallback) throws java.io.FileNotFoundException;
+ method public void setColorMode(int);
+ method public void setOrientation(int);
+ method public void setScaleMode(int);
+ method public static boolean systemSupportsPrint();
+ field public static final int COLOR_MODE_COLOR = 2; // 0x2
+ field public static final int COLOR_MODE_MONOCHROME = 1; // 0x1
+ field public static final int ORIENTATION_LANDSCAPE = 1; // 0x1
+ field public static final int ORIENTATION_PORTRAIT = 2; // 0x2
+ field public static final int SCALE_MODE_FILL = 2; // 0x2
+ field public static final int SCALE_MODE_FIT = 1; // 0x1
+ }
+
+ public static abstract interface PrintHelper.OnPrintFinishCallback {
+ method public abstract void onFinish();
+ }
+
+}
+
+package android.support.v4.provider {
+
+ public abstract class DocumentFile {
+ method public abstract boolean canRead();
+ method public abstract boolean canWrite();
+ method public abstract android.support.v4.provider.DocumentFile createDirectory(java.lang.String);
+ method public abstract android.support.v4.provider.DocumentFile createFile(java.lang.String, java.lang.String);
+ method public abstract boolean delete();
+ method public abstract boolean exists();
+ method public android.support.v4.provider.DocumentFile findFile(java.lang.String);
+ method public static android.support.v4.provider.DocumentFile fromFile(java.io.File);
+ method public static android.support.v4.provider.DocumentFile fromSingleUri(android.content.Context, android.net.Uri);
+ method public static android.support.v4.provider.DocumentFile fromTreeUri(android.content.Context, android.net.Uri);
+ method public abstract java.lang.String getName();
+ method public android.support.v4.provider.DocumentFile getParentFile();
+ method public abstract java.lang.String getType();
+ method public abstract android.net.Uri getUri();
+ method public abstract boolean isDirectory();
+ method public static boolean isDocumentUri(android.content.Context, android.net.Uri);
+ method public abstract boolean isFile();
+ method public abstract boolean isVirtual();
+ method public abstract long lastModified();
+ method public abstract long length();
+ method public abstract android.support.v4.provider.DocumentFile[] listFiles();
+ method public abstract boolean renameTo(java.lang.String);
+ }
+
+}
+
diff --git a/core-utils/build.gradle b/core-utils/build.gradle
index 0fe309b..55fe2bb 100644
--- a/core-utils/build.gradle
+++ b/core-utils/build.gradle
@@ -14,18 +14,6 @@
defaultConfig {
minSdkVersion 14
}
-
- sourceSets {
- main.java.srcDirs = [
- 'gingerbread',
- 'kitkat',
- 'api20',
- 'api21',
- 'api23',
- 'api24',
- 'java'
- ]
- }
}
supportLibrary {
diff --git a/core-utils/java/android/support/v4/app/AppLaunchChecker.java b/core-utils/src/main/java/android/support/v4/app/AppLaunchChecker.java
similarity index 90%
rename from core-utils/java/android/support/v4/app/AppLaunchChecker.java
rename to core-utils/src/main/java/android/support/v4/app/AppLaunchChecker.java
index f8beb91..af9512a 100644
--- a/core-utils/java/android/support/v4/app/AppLaunchChecker.java
+++ b/core-utils/src/main/java/android/support/v4/app/AppLaunchChecker.java
@@ -22,8 +22,8 @@
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
+import android.support.annotation.NonNull;
import android.support.v4.content.IntentCompat;
-import android.support.v4.content.SharedPreferencesCompat;
/**
* This class provides APIs for determining how an app has been launched.
@@ -46,7 +46,7 @@
* @param context Context to check
* @return true if this app has been started by the user from the launcher at least once
*/
- public static boolean hasStartedFromLauncher(Context context) {
+ public static boolean hasStartedFromLauncher(@NonNull Context context) {
return context.getSharedPreferences(SHARED_PREFS_NAME, 0)
.getBoolean(KEY_STARTED_FROM_LAUNCHER, false);
}
@@ -62,7 +62,7 @@
*
* @param activity the Activity currently running onCreate
*/
- public static void onActivityCreate(Activity activity) {
+ public static void onActivityCreate(@NonNull Activity activity) {
final SharedPreferences sp = activity.getSharedPreferences(SHARED_PREFS_NAME, 0);
if (sp.getBoolean(KEY_STARTED_FROM_LAUNCHER, false)) {
return;
@@ -76,8 +76,7 @@
if (Intent.ACTION_MAIN.equals(launchIntent.getAction())
&& (launchIntent.hasCategory(Intent.CATEGORY_LAUNCHER)
|| launchIntent.hasCategory(IntentCompat.CATEGORY_LEANBACK_LAUNCHER))) {
- SharedPreferencesCompat.EditorCompat.getInstance().apply(
- sp.edit().putBoolean(KEY_STARTED_FROM_LAUNCHER, true));
+ sp.edit().putBoolean(KEY_STARTED_FROM_LAUNCHER, true).apply();
}
}
}
diff --git a/core-utils/java/android/support/v4/app/FrameMetricsAggregator.java b/core-utils/src/main/java/android/support/v4/app/FrameMetricsAggregator.java
similarity index 100%
rename from core-utils/java/android/support/v4/app/FrameMetricsAggregator.java
rename to core-utils/src/main/java/android/support/v4/app/FrameMetricsAggregator.java
diff --git a/core-utils/java/android/support/v4/app/NavUtils.java b/core-utils/src/main/java/android/support/v4/app/NavUtils.java
similarity index 92%
rename from core-utils/java/android/support/v4/app/NavUtils.java
rename to core-utils/src/main/java/android/support/v4/app/NavUtils.java
index 99d4493..d259417 100644
--- a/core-utils/java/android/support/v4/app/NavUtils.java
+++ b/core-utils/src/main/java/android/support/v4/app/NavUtils.java
@@ -24,6 +24,7 @@
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Build;
+import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.util.Log;
@@ -53,7 +54,8 @@
* @return true if navigating up should recreate a new task stack, false if the same task
* should be used for the destination
*/
- public static boolean shouldUpRecreateTask(Activity sourceActivity, Intent targetIntent) {
+ public static boolean shouldUpRecreateTask(@NonNull Activity sourceActivity,
+ @NonNull Intent targetIntent) {
if (Build.VERSION.SDK_INT >= 16) {
return sourceActivity.shouldUpRecreateTask(targetIntent);
} else {
@@ -74,7 +76,7 @@
*
* @param sourceActivity The current activity from which the user is attempting to navigate up
*/
- public static void navigateUpFromSameTask(Activity sourceActivity) {
+ public static void navigateUpFromSameTask(@NonNull Activity sourceActivity) {
Intent upIntent = getParentActivityIntent(sourceActivity);
if (upIntent == null) {
@@ -101,7 +103,7 @@
* @param sourceActivity The current activity from which the user is attempting to navigate up
* @param upIntent An intent representing the target destination for up navigation
*/
- public static void navigateUpTo(Activity sourceActivity, Intent upIntent) {
+ public static void navigateUpTo(@NonNull Activity sourceActivity, @NonNull Intent upIntent) {
if (Build.VERSION.SDK_INT >= 16) {
sourceActivity.navigateUpTo(upIntent);
} else {
@@ -121,7 +123,8 @@
* @param sourceActivity Activity to fetch a parent intent for
* @return a new Intent targeting the defined parent activity of sourceActivity
*/
- public static Intent getParentActivityIntent(Activity sourceActivity) {
+ @Nullable
+ public static Intent getParentActivityIntent(@NonNull Activity sourceActivity) {
if (Build.VERSION.SDK_INT >= 16) {
// Prefer the "real" JB definition if available,
// else fall back to the meta-data element.
@@ -157,7 +160,9 @@
* @return a new Intent targeting the defined parent activity of sourceActivity
* @throws NameNotFoundException if the ComponentName for sourceActivityClass is invalid
*/
- public static Intent getParentActivityIntent(Context context, Class<?> sourceActivityClass)
+ @Nullable
+ public static Intent getParentActivityIntent(@NonNull Context context,
+ @NonNull Class<?> sourceActivityClass)
throws NameNotFoundException {
String parentActivity = getParentActivityName(context,
new ComponentName(context, sourceActivityClass));
@@ -182,7 +187,9 @@
* @return a new Intent targeting the defined parent activity of sourceActivity
* @throws NameNotFoundException if the ComponentName for sourceActivityClass is invalid
*/
- public static Intent getParentActivityIntent(Context context, ComponentName componentName)
+ @Nullable
+ public static Intent getParentActivityIntent(@NonNull Context context,
+ @NonNull ComponentName componentName)
throws NameNotFoundException {
String parentActivity = getParentActivityName(context, componentName);
if (parentActivity == null) return null;
@@ -207,7 +214,7 @@
* it was not specified
*/
@Nullable
- public static String getParentActivityName(Activity sourceActivity) {
+ public static String getParentActivityName(@NonNull Activity sourceActivity) {
try {
return getParentActivityName(sourceActivity, sourceActivity.getComponentName());
} catch (NameNotFoundException e) {
@@ -226,7 +233,8 @@
* it was not specified
*/
@Nullable
- public static String getParentActivityName(Context context, ComponentName componentName)
+ public static String getParentActivityName(@NonNull Context context,
+ @NonNull ComponentName componentName)
throws NameNotFoundException {
PackageManager pm = context.getPackageManager();
ActivityInfo info = pm.getActivityInfo(componentName, PackageManager.GET_META_DATA);
diff --git a/core-utils/java/android/support/v4/app/TaskStackBuilder.java b/core-utils/src/main/java/android/support/v4/app/TaskStackBuilder.java
similarity index 93%
rename from core-utils/java/android/support/v4/app/TaskStackBuilder.java
rename to core-utils/src/main/java/android/support/v4/app/TaskStackBuilder.java
index dc9a2dc..14aadce 100644
--- a/core-utils/java/android/support/v4/app/TaskStackBuilder.java
+++ b/core-utils/src/main/java/android/support/v4/app/TaskStackBuilder.java
@@ -16,7 +16,6 @@
package android.support.v4.app;
-import android.support.annotation.RequiresApi;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.ComponentName;
@@ -25,6 +24,9 @@
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Build;
import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.annotation.RequiresApi;
import android.support.v4.content.ContextCompat;
import android.util.Log;
@@ -70,6 +72,7 @@
private static final String TAG = "TaskStackBuilder";
public interface SupportParentable {
+ @Nullable
Intent getSupportParentActivityIntent();
}
@@ -117,7 +120,8 @@
* @param context The context that will launch the new task stack or generate a PendingIntent
* @return A new TaskStackBuilder
*/
- public static TaskStackBuilder create(Context context) {
+ @NonNull
+ public static TaskStackBuilder create(@NonNull Context context) {
return new TaskStackBuilder(context);
}
@@ -142,7 +146,8 @@
* @param nextIntent Intent for the next Activity in the synthesized task stack
* @return This TaskStackBuilder for method chaining
*/
- public TaskStackBuilder addNextIntent(Intent nextIntent) {
+ @NonNull
+ public TaskStackBuilder addNextIntent(@NonNull Intent nextIntent) {
mIntents.add(nextIntent);
return this;
}
@@ -159,7 +164,8 @@
* Its chain of parents as specified in the manifest will be added.
* @return This TaskStackBuilder for method chaining.
*/
- public TaskStackBuilder addNextIntentWithParentStack(Intent nextIntent) {
+ @NonNull
+ public TaskStackBuilder addNextIntentWithParentStack(@NonNull Intent nextIntent) {
ComponentName target = nextIntent.getComponent();
if (target == null) {
target = nextIntent.resolveActivity(mSourceContext.getPackageManager());
@@ -178,7 +184,8 @@
* @param sourceActivity All parents of this activity will be added
* @return This TaskStackBuilder for method chaining
*/
- public TaskStackBuilder addParentStack(Activity sourceActivity) {
+ @NonNull
+ public TaskStackBuilder addParentStack(@NonNull Activity sourceActivity) {
Intent parent = null;
if (sourceActivity instanceof SupportParentable) {
parent = ((SupportParentable) sourceActivity).getSupportParentActivityIntent();
@@ -207,7 +214,8 @@
* @param sourceActivityClass All parents of this activity will be added
* @return This TaskStackBuilder for method chaining
*/
- public TaskStackBuilder addParentStack(Class<?> sourceActivityClass) {
+ @NonNull
+ public TaskStackBuilder addParentStack(@NonNull Class<?> sourceActivityClass) {
return addParentStack(new ComponentName(mSourceContext, sourceActivityClass));
}
@@ -264,6 +272,7 @@
* @param index Index from 0-getIntentCount()
* @return the intent at position index
*/
+ @Nullable
public Intent editIntentAt(int index) {
return mIntents.get(index);
}
@@ -300,7 +309,7 @@
* @param options Additional options for how the Activity should be started.
* See {@link android.content.Context#startActivity(Intent, Bundle)}
*/
- public void startActivities(Bundle options) {
+ public void startActivities(@Nullable Bundle options) {
if (mIntents.isEmpty()) {
throw new IllegalStateException(
"No intents added to TaskStackBuilder; cannot startActivities");
@@ -325,8 +334,10 @@
* {@link PendingIntent#FLAG_UPDATE_CURRENT}, or any of the flags supported by
* {@link Intent#fillIn(Intent, int)} to control which unspecified parts of the
* intent that can be supplied when the actual send happens.
- * @return The obtained PendingIntent
+ * @return The obtained PendingIntent. May return null only if
+ * {@link PendingIntent#FLAG_NO_CREATE} has been supplied.
*/
+ @Nullable
public PendingIntent getPendingIntent(int requestCode, int flags) {
return getPendingIntent(requestCode, flags, null);
}
@@ -342,9 +353,11 @@
* intent that can be supplied when the actual send happens.
* @param options Additional options for how the Activity should be started.
* See {@link android.content.Context#startActivity(Intent, Bundle)}
- * @return The obtained PendingIntent
+ * @return The obtained PendingIntent. May return null only if
+ * {@link PendingIntent#FLAG_NO_CREATE} has been supplied.
*/
- public PendingIntent getPendingIntent(int requestCode, int flags, Bundle options) {
+ @Nullable
+ public PendingIntent getPendingIntent(int requestCode, int flags, @Nullable Bundle options) {
if (mIntents.isEmpty()) {
throw new IllegalStateException(
"No intents added to TaskStackBuilder; cannot getPendingIntent");
@@ -364,6 +377,7 @@
*
* @return An array containing the intents added to this builder.
*/
+ @NonNull
public Intent[] getIntents() {
Intent[] intents = new Intent[mIntents.size()];
if (intents.length == 0) return intents;
diff --git a/core-utils/java/android/support/v4/app/package.html b/core-utils/src/main/java/android/support/v4/app/package.html
similarity index 100%
rename from core-utils/java/android/support/v4/app/package.html
rename to core-utils/src/main/java/android/support/v4/app/package.html
diff --git a/core-utils/java/android/support/v4/content/AsyncTaskLoader.java b/core-utils/src/main/java/android/support/v4/content/AsyncTaskLoader.java
similarity index 97%
rename from core-utils/java/android/support/v4/content/AsyncTaskLoader.java
rename to core-utils/src/main/java/android/support/v4/content/AsyncTaskLoader.java
index faa13ad..5882f69 100644
--- a/core-utils/java/android/support/v4/content/AsyncTaskLoader.java
+++ b/core-utils/src/main/java/android/support/v4/content/AsyncTaskLoader.java
@@ -21,6 +21,8 @@
import android.content.Context;
import android.os.Handler;
import android.os.SystemClock;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.annotation.RestrictTo;
import android.support.v4.os.OperationCanceledException;
import android.support.v4.util.TimeUtils;
@@ -121,11 +123,11 @@
long mLastLoadCompleteTime = -10000;
Handler mHandler;
- public AsyncTaskLoader(Context context) {
+ public AsyncTaskLoader(@NonNull Context context) {
this(context, ModernAsyncTask.THREAD_POOL_EXECUTOR);
}
- private AsyncTaskLoader(Context context, Executor executor) {
+ private AsyncTaskLoader(@NonNull Context context, @NonNull Executor executor) {
super(context);
mExecutor = executor;
}
@@ -200,7 +202,7 @@
* @param data The value that was returned by {@link #loadInBackground}, or null
* if the task threw {@link OperationCanceledException}.
*/
- public void onCanceled(D data) {
+ public void onCanceled(@Nullable D data) {
}
void executePendingTask() {
@@ -284,6 +286,7 @@
* @see #cancelLoadInBackground
* @see #onCanceled
*/
+ @Nullable
public abstract D loadInBackground();
/**
@@ -298,6 +301,7 @@
*
* @see #loadInBackground
*/
+ @Nullable
protected D onLoadInBackground() {
return loadInBackground();
}
diff --git a/core-utils/java/android/support/v4/content/CursorLoader.java b/core-utils/src/main/java/android/support/v4/content/CursorLoader.java
similarity index 90%
rename from core-utils/java/android/support/v4/content/CursorLoader.java
rename to core-utils/src/main/java/android/support/v4/content/CursorLoader.java
index 503bb9c..5c6925d 100644
--- a/core-utils/java/android/support/v4/content/CursorLoader.java
+++ b/core-utils/src/main/java/android/support/v4/content/CursorLoader.java
@@ -20,6 +20,8 @@
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.v4.os.CancellationSignal;
import android.support.v4.os.OperationCanceledException;
@@ -115,7 +117,7 @@
* calls to {@link #setUri(Uri)}, {@link #setSelection(String)}, etc
* to specify the query to perform.
*/
- public CursorLoader(Context context) {
+ public CursorLoader(@NonNull Context context) {
super(context);
mObserver = new ForceLoadContentObserver();
}
@@ -126,8 +128,9 @@
* ContentResolver.query()} for documentation on the meaning of the
* parameters. These will be passed as-is to that call.
*/
- public CursorLoader(Context context, Uri uri, String[] projection, String selection,
- String[] selectionArgs, String sortOrder) {
+ public CursorLoader(@NonNull Context context, @NonNull Uri uri, @Nullable String[] projection,
+ @Nullable String selection, @Nullable String[] selectionArgs,
+ @Nullable String sortOrder) {
super(context);
mObserver = new ForceLoadContentObserver();
mUri = uri;
@@ -183,43 +186,48 @@
mCursor = null;
}
+ @NonNull
public Uri getUri() {
return mUri;
}
- public void setUri(Uri uri) {
+ public void setUri(@NonNull Uri uri) {
mUri = uri;
}
+ @Nullable
public String[] getProjection() {
return mProjection;
}
- public void setProjection(String[] projection) {
+ public void setProjection(@Nullable String[] projection) {
mProjection = projection;
}
+ @Nullable
public String getSelection() {
return mSelection;
}
- public void setSelection(String selection) {
+ public void setSelection(@Nullable String selection) {
mSelection = selection;
}
+ @Nullable
public String[] getSelectionArgs() {
return mSelectionArgs;
}
- public void setSelectionArgs(String[] selectionArgs) {
+ public void setSelectionArgs(@Nullable String[] selectionArgs) {
mSelectionArgs = selectionArgs;
}
+ @Nullable
public String getSortOrder() {
return mSortOrder;
}
- public void setSortOrder(String sortOrder) {
+ public void setSortOrder(@Nullable String sortOrder) {
mSortOrder = sortOrder;
}
diff --git a/core-utils/java/android/support/v4/content/FileProvider.java b/core-utils/src/main/java/android/support/v4/content/FileProvider.java
similarity index 97%
rename from core-utils/java/android/support/v4/content/FileProvider.java
rename to core-utils/src/main/java/android/support/v4/content/FileProvider.java
index c49fc12..8599911 100644
--- a/core-utils/java/android/support/v4/content/FileProvider.java
+++ b/core-utils/src/main/java/android/support/v4/content/FileProvider.java
@@ -33,6 +33,8 @@
import android.os.ParcelFileDescriptor;
import android.provider.OpenableColumns;
import android.support.annotation.GuardedBy;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.text.TextUtils;
import android.webkit.MimeTypeMap;
@@ -362,7 +364,7 @@
* @param info A {@link ProviderInfo} for the new provider.
*/
@Override
- public void attachInfo(Context context, ProviderInfo info) {
+ public void attachInfo(@NonNull Context context, @NonNull ProviderInfo info) {
super.attachInfo(context, info);
// Sanity check our security
@@ -396,7 +398,8 @@
* @throws IllegalArgumentException When the given {@link File} is outside
* the paths supported by the provider.
*/
- public static Uri getUriForFile(Context context, String authority, File file) {
+ public static Uri getUriForFile(@NonNull Context context, @NonNull String authority,
+ @NonNull File file) {
final PathStrategy strategy = getPathStrategy(context, authority);
return strategy.getUriForFile(file);
}
@@ -430,8 +433,9 @@
*
*/
@Override
- public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
- String sortOrder) {
+ public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection,
+ @Nullable String[] selectionArgs,
+ @Nullable String sortOrder) {
// ContentProvider has already checked granted permissions
final File file = mStrategy.getFileForUri(uri);
@@ -470,7 +474,7 @@
* extension; otherwise <code>application/octet-stream</code>.
*/
@Override
- public String getType(Uri uri) {
+ public String getType(@NonNull Uri uri) {
// ContentProvider has already checked granted permissions
final File file = mStrategy.getFileForUri(uri);
@@ -491,7 +495,7 @@
* subclass FileProvider if you want to provide different functionality.
*/
@Override
- public Uri insert(Uri uri, ContentValues values) {
+ public Uri insert(@NonNull Uri uri, ContentValues values) {
throw new UnsupportedOperationException("No external inserts");
}
@@ -500,7 +504,8 @@
* subclass FileProvider if you want to provide different functionality.
*/
@Override
- public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
+ public int update(@NonNull Uri uri, ContentValues values, @Nullable String selection,
+ @Nullable String[] selectionArgs) {
throw new UnsupportedOperationException("No external updates");
}
@@ -516,7 +521,8 @@
* @return 1 if the delete succeeds; otherwise, 0.
*/
@Override
- public int delete(Uri uri, String selection, String[] selectionArgs) {
+ public int delete(@NonNull Uri uri, @Nullable String selection,
+ @Nullable String[] selectionArgs) {
// ContentProvider has already checked granted permissions
final File file = mStrategy.getFileForUri(uri);
return file.delete() ? 1 : 0;
@@ -538,7 +544,8 @@
* @return A new {@link ParcelFileDescriptor} with which you can access the file.
*/
@Override
- public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {
+ public ParcelFileDescriptor openFile(@NonNull Uri uri, @NonNull String mode)
+ throws FileNotFoundException {
// ContentProvider has already checked granted permissions
final File file = mStrategy.getFileForUri(uri);
final int fileMode = modeToMode(mode);
diff --git a/core-utils/java/android/support/v4/content/Loader.java b/core-utils/src/main/java/android/support/v4/content/Loader.java
similarity index 96%
rename from core-utils/java/android/support/v4/content/Loader.java
rename to core-utils/src/main/java/android/support/v4/content/Loader.java
index 40b459f..2ac10d7 100644
--- a/core-utils/java/android/support/v4/content/Loader.java
+++ b/core-utils/src/main/java/android/support/v4/content/Loader.java
@@ -19,6 +19,8 @@
import android.content.Context;
import android.database.ContentObserver;
import android.os.Handler;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.v4.util.DebugUtils;
import java.io.FileDescriptor;
@@ -80,7 +82,7 @@
* @param loader the loader that completed the load
* @param data the result of the load
*/
- public void onLoadComplete(Loader<D> loader, D data);
+ void onLoadComplete(@NonNull Loader<D> loader, @Nullable D data);
}
/**
@@ -97,7 +99,7 @@
*
* @param loader the loader that canceled the load
*/
- public void onLoadCanceled(Loader<D> loader);
+ void onLoadCanceled(@NonNull Loader<D> loader);
}
/**
@@ -110,7 +112,7 @@
*
* @param context used to retrieve the application context.
*/
- public Loader(Context context) {
+ public Loader(@NonNull Context context) {
mContext = context.getApplicationContext();
}
@@ -121,7 +123,7 @@
*
* @param data the result of the load
*/
- public void deliverResult(D data) {
+ public void deliverResult(@Nullable D data) {
if (mListener != null) {
mListener.onLoadComplete(this, data);
}
@@ -142,6 +144,7 @@
/**
* @return an application context retrieved from the Context passed to the constructor.
*/
+ @NonNull
public Context getContext() {
return mContext;
}
@@ -160,7 +163,7 @@
*
* <p>Must be called from the process's main thread.
*/
- public void registerListener(int id, OnLoadCompleteListener<D> listener) {
+ public void registerListener(int id, @NonNull OnLoadCompleteListener<D> listener) {
if (mListener != null) {
throw new IllegalStateException("There is already a listener registered");
}
@@ -173,7 +176,7 @@
*
* Must be called from the process's main thread.
*/
- public void unregisterListener(OnLoadCompleteListener<D> listener) {
+ public void unregisterListener(@NonNull OnLoadCompleteListener<D> listener) {
if (mListener == null) {
throw new IllegalStateException("No listener register");
}
@@ -192,7 +195,7 @@
*
* @param listener The listener to register.
*/
- public void registerOnLoadCanceledListener(OnLoadCanceledListener<D> listener) {
+ public void registerOnLoadCanceledListener(@NonNull OnLoadCanceledListener<D> listener) {
if (mOnLoadCanceledListener != null) {
throw new IllegalStateException("There is already a listener registered");
}
@@ -207,7 +210,7 @@
*
* @param listener The listener to unregister.
*/
- public void unregisterOnLoadCanceledListener(OnLoadCanceledListener<D> listener) {
+ public void unregisterOnLoadCanceledListener(@NonNull OnLoadCanceledListener<D> listener) {
if (mOnLoadCanceledListener == null) {
throw new IllegalStateException("No listener register");
}
@@ -493,7 +496,8 @@
* For debugging, converts an instance of the Loader's data class to
* a string that can be printed. Must handle a null data.
*/
- public String dataToString(D data) {
+ @NonNull
+ public String dataToString(@Nullable D data) {
StringBuilder sb = new StringBuilder(64);
DebugUtils.buildShortClassTag(data, sb);
sb.append("}");
diff --git a/core-utils/java/android/support/v4/content/LocalBroadcastManager.java b/core-utils/src/main/java/android/support/v4/content/LocalBroadcastManager.java
similarity index 96%
rename from core-utils/java/android/support/v4/content/LocalBroadcastManager.java
rename to core-utils/src/main/java/android/support/v4/content/LocalBroadcastManager.java
index 324bb30..aaaf8be 100644
--- a/core-utils/java/android/support/v4/content/LocalBroadcastManager.java
+++ b/core-utils/src/main/java/android/support/v4/content/LocalBroadcastManager.java
@@ -16,10 +16,6 @@
package android.support.v4.content;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Set;
-
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@@ -27,8 +23,13 @@
import android.net.Uri;
import android.os.Handler;
import android.os.Message;
+import android.support.annotation.NonNull;
import android.util.Log;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Set;
+
/**
* Helper to register for and send broadcasts of Intents to local objects
* within your process. This has a number of advantages over sending
@@ -98,7 +99,8 @@
private static final Object mLock = new Object();
private static LocalBroadcastManager mInstance;
- public static LocalBroadcastManager getInstance(Context context) {
+ @NonNull
+ public static LocalBroadcastManager getInstance(@NonNull Context context) {
synchronized (mLock) {
if (mInstance == null) {
mInstance = new LocalBroadcastManager(context.getApplicationContext());
@@ -132,7 +134,8 @@
*
* @see #unregisterReceiver
*/
- public void registerReceiver(BroadcastReceiver receiver, IntentFilter filter) {
+ public void registerReceiver(@NonNull BroadcastReceiver receiver,
+ @NonNull IntentFilter filter) {
synchronized (mReceivers) {
ReceiverRecord entry = new ReceiverRecord(filter, receiver);
ArrayList<ReceiverRecord> filters = mReceivers.get(receiver);
@@ -162,7 +165,7 @@
*
* @see #registerReceiver
*/
- public void unregisterReceiver(BroadcastReceiver receiver) {
+ public void unregisterReceiver(@NonNull BroadcastReceiver receiver) {
synchronized (mReceivers) {
final ArrayList<ReceiverRecord> filters = mReceivers.remove(receiver);
if (filters == null) {
@@ -205,7 +208,7 @@
* broadcast receivers. (Note tha delivery may not ultimately take place if one of those
* receivers is unregistered before it is dispatched.)
*/
- public boolean sendBroadcast(Intent intent) {
+ public boolean sendBroadcast(@NonNull Intent intent) {
synchronized (mReceivers) {
final String action = intent.getAction();
final String type = intent.resolveTypeIfNeeded(
@@ -281,7 +284,7 @@
* the Intent this function will block and immediately dispatch them before
* returning.
*/
- public void sendBroadcastSync(Intent intent) {
+ public void sendBroadcastSync(@NonNull Intent intent) {
if (sendBroadcast(intent)) {
executePendingBroadcasts();
}
diff --git a/core-utils/java/android/support/v4/content/MimeTypeFilter.java b/core-utils/src/main/java/android/support/v4/content/MimeTypeFilter.java
similarity index 98%
rename from core-utils/java/android/support/v4/content/MimeTypeFilter.java
rename to core-utils/src/main/java/android/support/v4/content/MimeTypeFilter.java
index 8734c4d..8a90c62 100644
--- a/core-utils/java/android/support/v4/content/MimeTypeFilter.java
+++ b/core-utils/src/main/java/android/support/v4/content/MimeTypeFilter.java
@@ -87,6 +87,7 @@
* Matches one nullable MIME type against an array of MIME type filters.
* @return The first matching filter, or null if nothing matches.
*/
+ @Nullable
public static String matches(
@Nullable String mimeType, @NonNull String[] filters) {
if (mimeType == null) {
@@ -108,6 +109,7 @@
* Matches multiple MIME types against an array of MIME type filters.
* @return The first matching MIME type, or null if nothing matches.
*/
+ @Nullable
public static String matches(
@Nullable String[] mimeTypes, @NonNull String filter) {
if (mimeTypes == null) {
@@ -129,6 +131,7 @@
* Matches multiple MIME types against an array of MIME type filters.
* @return The list of matching MIME types, or empty array if nothing matches.
*/
+ @NonNull
public static String[] matchesMany(
@Nullable String[] mimeTypes, @NonNull String filter) {
if (mimeTypes == null) {
diff --git a/core-utils/java/android/support/v4/content/ModernAsyncTask.java b/core-utils/src/main/java/android/support/v4/content/ModernAsyncTask.java
similarity index 100%
rename from core-utils/java/android/support/v4/content/ModernAsyncTask.java
rename to core-utils/src/main/java/android/support/v4/content/ModernAsyncTask.java
diff --git a/core-utils/java/android/support/v4/content/PermissionChecker.java b/core-utils/src/main/java/android/support/v4/content/PermissionChecker.java
similarity index 97%
rename from core-utils/java/android/support/v4/content/PermissionChecker.java
rename to core-utils/src/main/java/android/support/v4/content/PermissionChecker.java
index 0866273..c9f18a9 100644
--- a/core-utils/java/android/support/v4/content/PermissionChecker.java
+++ b/core-utils/src/main/java/android/support/v4/content/PermissionChecker.java
@@ -24,6 +24,7 @@
import android.os.Process;
import android.support.annotation.IntDef;
import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.annotation.RestrictTo;
import android.support.v4.app.AppOpsManagerCompat;
@@ -91,7 +92,7 @@
*/
@PermissionResult
public static int checkPermission(@NonNull Context context, @NonNull String permission,
- int pid, int uid, String packageName) {
+ int pid, int uid, @Nullable String packageName) {
if (context.checkPermission(permission, pid, uid) == PackageManager.PERMISSION_DENIED) {
return PERMISSION_DENIED;
}
@@ -146,7 +147,7 @@
*/
@PermissionResult
public static int checkCallingPermission(@NonNull Context context,
- @NonNull String permission, String packageName) {
+ @NonNull String permission, @Nullable String packageName) {
if (Binder.getCallingPid() == Process.myPid()) {
return PERMISSION_DENIED;
}
diff --git a/core-utils/java/android/support/v4/content/WakefulBroadcastReceiver.java b/core-utils/src/main/java/android/support/v4/content/WakefulBroadcastReceiver.java
similarity index 95%
rename from core-utils/java/android/support/v4/content/WakefulBroadcastReceiver.java
rename to core-utils/src/main/java/android/support/v4/content/WakefulBroadcastReceiver.java
index b0cd653..8ec3eee 100644
--- a/core-utils/java/android/support/v4/content/WakefulBroadcastReceiver.java
+++ b/core-utils/src/main/java/android/support/v4/content/WakefulBroadcastReceiver.java
@@ -45,7 +45,7 @@
* {@link WakefulBroadcastReceiver#startWakefulService startWakefulService()}
* holds an extra identifying the wake lock.</p>
*
- * {@sample frameworks/support/samples/Support4Demos/src/com/example/android/supportv4/content/SimpleWakefulReceiver.java
+ * {@sample frameworks/support/samples/Support4Demos/src/main/java/com/example/android/supportv4/content/SimpleWakefulReceiver.java
* complete}
*
* <p>The service (in this example, an {@link android.app.IntentService}) does
@@ -55,7 +55,7 @@
* is the same intent that the {@link WakefulBroadcastReceiver} originally
* passed in.</p>
*
- * {@sample frameworks/support/samples/Support4Demos/src/com/example/android/supportv4/content/SimpleWakefulService.java
+ * {@sample frameworks/support/samples/Support4Demos/src/main/java/com/example/android/supportv4/content/SimpleWakefulService.java
* complete}
*
* @deprecated As of {@link android.os.Build.VERSION_CODES#O Android O}, background check
diff --git a/core-utils/java/android/support/v4/content/package.html b/core-utils/src/main/java/android/support/v4/content/package.html
similarity index 100%
rename from core-utils/java/android/support/v4/content/package.html
rename to core-utils/src/main/java/android/support/v4/content/package.html
diff --git a/core-utils/java/android/support/v4/graphics/ColorUtils.java b/core-utils/src/main/java/android/support/v4/graphics/ColorUtils.java
similarity index 100%
rename from core-utils/java/android/support/v4/graphics/ColorUtils.java
rename to core-utils/src/main/java/android/support/v4/graphics/ColorUtils.java
diff --git a/core-utils/gingerbread/android/support/v4/graphics/drawable/RoundedBitmapDrawable.java b/core-utils/src/main/java/android/support/v4/graphics/drawable/RoundedBitmapDrawable.java
similarity index 97%
rename from core-utils/gingerbread/android/support/v4/graphics/drawable/RoundedBitmapDrawable.java
rename to core-utils/src/main/java/android/support/v4/graphics/drawable/RoundedBitmapDrawable.java
index d515561..795126d 100644
--- a/core-utils/gingerbread/android/support/v4/graphics/drawable/RoundedBitmapDrawable.java
+++ b/core-utils/src/main/java/android/support/v4/graphics/drawable/RoundedBitmapDrawable.java
@@ -27,6 +27,8 @@
import android.graphics.RectF;
import android.graphics.Shader;
import android.graphics.drawable.Drawable;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
import android.util.DisplayMetrics;
import android.view.Gravity;
@@ -66,6 +68,7 @@
/**
* Returns the paint used to render this drawable.
*/
+ @NonNull
public final Paint getPaint() {
return mPaint;
}
@@ -73,6 +76,7 @@
/**
* Returns the bitmap used by this drawable to render. May be null.
*/
+ @Nullable
public final Bitmap getBitmap() {
return mBitmap;
}
@@ -92,7 +96,7 @@
* @see android.graphics.Bitmap#setDensity(int)
* @see android.graphics.Bitmap#getDensity()
*/
- public void setTargetDensity(Canvas canvas) {
+ public void setTargetDensity(@NonNull Canvas canvas) {
setTargetDensity(canvas.getDensity());
}
@@ -104,7 +108,7 @@
* @see android.graphics.Bitmap#setDensity(int)
* @see android.graphics.Bitmap#getDensity()
*/
- public void setTargetDensity(DisplayMetrics metrics) {
+ public void setTargetDensity(@NonNull DisplayMetrics metrics) {
setTargetDensity(metrics.densityDpi);
}
@@ -253,7 +257,7 @@
}
@Override
- public void draw(Canvas canvas) {
+ public void draw(@NonNull Canvas canvas) {
final Bitmap bitmap = mBitmap;
if (bitmap == null) {
return;
diff --git a/core-utils/api21/android/support/v4/graphics/drawable/RoundedBitmapDrawable21.java b/core-utils/src/main/java/android/support/v4/graphics/drawable/RoundedBitmapDrawable21.java
similarity index 100%
rename from core-utils/api21/android/support/v4/graphics/drawable/RoundedBitmapDrawable21.java
rename to core-utils/src/main/java/android/support/v4/graphics/drawable/RoundedBitmapDrawable21.java
diff --git a/core-utils/java/android/support/v4/graphics/drawable/RoundedBitmapDrawableFactory.java b/core-utils/src/main/java/android/support/v4/graphics/drawable/RoundedBitmapDrawableFactory.java
similarity index 87%
rename from core-utils/java/android/support/v4/graphics/drawable/RoundedBitmapDrawableFactory.java
rename to core-utils/src/main/java/android/support/v4/graphics/drawable/RoundedBitmapDrawableFactory.java
index 5e144c7..7790055 100644
--- a/core-utils/java/android/support/v4/graphics/drawable/RoundedBitmapDrawableFactory.java
+++ b/core-utils/src/main/java/android/support/v4/graphics/drawable/RoundedBitmapDrawableFactory.java
@@ -21,11 +21,15 @@
import android.graphics.BitmapFactory;
import android.graphics.Rect;
import android.os.Build;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.v4.graphics.BitmapCompat;
import android.support.v4.view.GravityCompat;
import android.support.v4.view.ViewCompat;
import android.util.Log;
+import java.io.InputStream;
+
/**
* Constructs {@link RoundedBitmapDrawable RoundedBitmapDrawable} objects,
* either from Bitmaps directly, or from streams and files.
@@ -63,7 +67,8 @@
* Returns a new drawable by creating it from a bitmap, setting initial target density based on
* the display metrics of the resources.
*/
- public static RoundedBitmapDrawable create(Resources res, Bitmap bitmap) {
+ @NonNull
+ public static RoundedBitmapDrawable create(@NonNull Resources res, @Nullable Bitmap bitmap) {
if (Build.VERSION.SDK_INT >= 21) {
return new RoundedBitmapDrawable21(res, bitmap);
}
@@ -73,8 +78,8 @@
/**
* Returns a new drawable, creating it by opening a given file path and decoding the bitmap.
*/
- public static RoundedBitmapDrawable create(Resources res,
- String filepath) {
+ @NonNull
+ public static RoundedBitmapDrawable create(@NonNull Resources res, @NonNull String filepath) {
final RoundedBitmapDrawable drawable = create(res, BitmapFactory.decodeFile(filepath));
if (drawable.getBitmap() == null) {
Log.w(TAG, "RoundedBitmapDrawable cannot decode " + filepath);
@@ -86,8 +91,8 @@
/**
* Returns a new drawable, creating it by decoding a bitmap from the given input stream.
*/
- public static RoundedBitmapDrawable create(Resources res,
- java.io.InputStream is) {
+ @NonNull
+ public static RoundedBitmapDrawable create(@NonNull Resources res, @NonNull InputStream is) {
final RoundedBitmapDrawable drawable = create(res, BitmapFactory.decodeStream(is));
if (drawable.getBitmap() == null) {
Log.w(TAG, "RoundedBitmapDrawable cannot decode " + is);
diff --git a/core-utils/java/android/support/v4/math/MathUtils.java b/core-utils/src/main/java/android/support/v4/math/MathUtils.java
similarity index 100%
rename from core-utils/java/android/support/v4/math/MathUtils.java
rename to core-utils/src/main/java/android/support/v4/math/MathUtils.java
diff --git a/core-utils/src/main/java/android/support/v4/print/OWNERS b/core-utils/src/main/java/android/support/v4/print/OWNERS
new file mode 100644
index 0000000..a9a2145
--- /dev/null
+++ b/core-utils/src/main/java/android/support/v4/print/OWNERS
@@ -0,0 +1,2 @@
+moltmann@google.com
+svetoslavganov@google.com
\ No newline at end of file
diff --git a/core-utils/java/android/support/v4/print/PrintHelper.java b/core-utils/src/main/java/android/support/v4/print/PrintHelper.java
similarity index 100%
rename from core-utils/java/android/support/v4/print/PrintHelper.java
rename to core-utils/src/main/java/android/support/v4/print/PrintHelper.java
diff --git a/core-utils/java/android/support/v4/provider/DocumentFile.java b/core-utils/src/main/java/android/support/v4/provider/DocumentFile.java
similarity index 100%
rename from core-utils/java/android/support/v4/provider/DocumentFile.java
rename to core-utils/src/main/java/android/support/v4/provider/DocumentFile.java
diff --git a/core-utils/kitkat/android/support/v4/provider/DocumentsContractApi19.java b/core-utils/src/main/java/android/support/v4/provider/DocumentsContractApi19.java
similarity index 100%
rename from core-utils/kitkat/android/support/v4/provider/DocumentsContractApi19.java
rename to core-utils/src/main/java/android/support/v4/provider/DocumentsContractApi19.java
diff --git a/core-utils/java/android/support/v4/provider/RawDocumentFile.java b/core-utils/src/main/java/android/support/v4/provider/RawDocumentFile.java
similarity index 100%
rename from core-utils/java/android/support/v4/provider/RawDocumentFile.java
rename to core-utils/src/main/java/android/support/v4/provider/RawDocumentFile.java
diff --git a/core-utils/java/android/support/v4/provider/SingleDocumentFile.java b/core-utils/src/main/java/android/support/v4/provider/SingleDocumentFile.java
similarity index 100%
rename from core-utils/java/android/support/v4/provider/SingleDocumentFile.java
rename to core-utils/src/main/java/android/support/v4/provider/SingleDocumentFile.java
diff --git a/core-utils/java/android/support/v4/provider/TreeDocumentFile.java b/core-utils/src/main/java/android/support/v4/provider/TreeDocumentFile.java
similarity index 100%
rename from core-utils/java/android/support/v4/provider/TreeDocumentFile.java
rename to core-utils/src/main/java/android/support/v4/provider/TreeDocumentFile.java
diff --git a/customtabs/Android.mk b/customtabs/Android.mk
index cfd9971..f9195e8 100644
--- a/customtabs/Android.mk
+++ b/customtabs/Android.mk
@@ -26,10 +26,10 @@
LOCAL_USE_AAPT2 := true
LOCAL_MODULE := android-support-customtabs
LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_AIDL_INCLUDES := $LOCAL_PATH/src
+LOCAL_AIDL_INCLUDES := $(LOCAL_PATH)/src/main/java
LOCAL_SRC_FILES := \
- $(call all-java-files-under,src) \
- $(call all-Iaidl-files-under,src)
+ $(call all-java-files-under,src/main/java) \
+ $(call all-Iaidl-files-under,src/main/java)
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
LOCAL_SHARED_ANDROID_LIBRARIES := \
android-support-annotations \
diff --git a/customtabs/AndroidManifest.xml b/customtabs/AndroidManifest.xml
index 6a25c8a..c913ad6 100644
--- a/customtabs/AndroidManifest.xml
+++ b/customtabs/AndroidManifest.xml
@@ -16,8 +16,4 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.support.customtabs">
<uses-sdk android:minSdkVersion="15"/>
- <application>
- <meta-data android:name="android.support.customtabs.VERSION"
- android:value="${support-version}" />
- </application>
</manifest>
diff --git a/customtabs/OWNERS b/customtabs/OWNERS
new file mode 100644
index 0000000..a0bf18a
--- /dev/null
+++ b/customtabs/OWNERS
@@ -0,0 +1,2 @@
+lizeb@google.com
+yusufo@google.com
\ No newline at end of file
diff --git a/customtabs/api/26.1.0.txt b/customtabs/api/26.1.0.txt
new file mode 100644
index 0000000..58cd212
--- /dev/null
+++ b/customtabs/api/26.1.0.txt
@@ -0,0 +1,142 @@
+package android.support.customtabs {
+
+ public class CustomTabsCallback {
+ ctor public CustomTabsCallback();
+ method public void extraCallback(java.lang.String, android.os.Bundle);
+ method public void onMessageChannelReady(android.os.Bundle);
+ method public void onNavigationEvent(int, android.os.Bundle);
+ method public void onPostMessage(java.lang.String, android.os.Bundle);
+ field public static final int NAVIGATION_ABORTED = 4; // 0x4
+ field public static final int NAVIGATION_FAILED = 3; // 0x3
+ field public static final int NAVIGATION_FINISHED = 2; // 0x2
+ field public static final int NAVIGATION_STARTED = 1; // 0x1
+ field public static final int TAB_HIDDEN = 6; // 0x6
+ field public static final int TAB_SHOWN = 5; // 0x5
+ }
+
+ public class CustomTabsClient {
+ method public static boolean bindCustomTabsService(android.content.Context, java.lang.String, android.support.customtabs.CustomTabsServiceConnection);
+ method public static boolean connectAndInitialize(android.content.Context, java.lang.String);
+ method public android.os.Bundle extraCommand(java.lang.String, android.os.Bundle);
+ method public static java.lang.String getPackageName(android.content.Context, java.util.List<java.lang.String>);
+ method public static java.lang.String getPackageName(android.content.Context, java.util.List<java.lang.String>, boolean);
+ method public android.support.customtabs.CustomTabsSession newSession(android.support.customtabs.CustomTabsCallback);
+ method public boolean warmup(long);
+ }
+
+ public final class CustomTabsIntent {
+ method public static int getMaxToolbarItems();
+ method public void launchUrl(android.content.Context, android.net.Uri);
+ method public static android.content.Intent setAlwaysUseBrowserUI(android.content.Intent);
+ method public static boolean shouldAlwaysUseBrowserUI(android.content.Intent);
+ field public static final java.lang.String EXTRA_ACTION_BUTTON_BUNDLE = "android.support.customtabs.extra.ACTION_BUTTON_BUNDLE";
+ field public static final java.lang.String EXTRA_CLOSE_BUTTON_ICON = "android.support.customtabs.extra.CLOSE_BUTTON_ICON";
+ field public static final java.lang.String EXTRA_DEFAULT_SHARE_MENU_ITEM = "android.support.customtabs.extra.SHARE_MENU_ITEM";
+ field public static final java.lang.String EXTRA_ENABLE_INSTANT_APPS = "android.support.customtabs.extra.EXTRA_ENABLE_INSTANT_APPS";
+ field public static final java.lang.String EXTRA_ENABLE_URLBAR_HIDING = "android.support.customtabs.extra.ENABLE_URLBAR_HIDING";
+ field public static final java.lang.String EXTRA_EXIT_ANIMATION_BUNDLE = "android.support.customtabs.extra.EXIT_ANIMATION_BUNDLE";
+ field public static final java.lang.String EXTRA_MENU_ITEMS = "android.support.customtabs.extra.MENU_ITEMS";
+ field public static final java.lang.String EXTRA_REMOTEVIEWS = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS";
+ field public static final java.lang.String EXTRA_REMOTEVIEWS_CLICKED_ID = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS_CLICKED_ID";
+ field public static final java.lang.String EXTRA_REMOTEVIEWS_PENDINGINTENT = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS_PENDINGINTENT";
+ field public static final java.lang.String EXTRA_REMOTEVIEWS_VIEW_IDS = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS_VIEW_IDS";
+ field public static final java.lang.String EXTRA_SECONDARY_TOOLBAR_COLOR = "android.support.customtabs.extra.SECONDARY_TOOLBAR_COLOR";
+ field public static final java.lang.String EXTRA_SESSION = "android.support.customtabs.extra.SESSION";
+ field public static final java.lang.String EXTRA_TINT_ACTION_BUTTON = "android.support.customtabs.extra.TINT_ACTION_BUTTON";
+ field public static final java.lang.String EXTRA_TITLE_VISIBILITY_STATE = "android.support.customtabs.extra.TITLE_VISIBILITY";
+ field public static final java.lang.String EXTRA_TOOLBAR_COLOR = "android.support.customtabs.extra.TOOLBAR_COLOR";
+ field public static final java.lang.String EXTRA_TOOLBAR_ITEMS = "android.support.customtabs.extra.TOOLBAR_ITEMS";
+ field public static final java.lang.String KEY_DESCRIPTION = "android.support.customtabs.customaction.DESCRIPTION";
+ field public static final java.lang.String KEY_ICON = "android.support.customtabs.customaction.ICON";
+ field public static final java.lang.String KEY_ID = "android.support.customtabs.customaction.ID";
+ field public static final java.lang.String KEY_MENU_ITEM_TITLE = "android.support.customtabs.customaction.MENU_ITEM_TITLE";
+ field public static final java.lang.String KEY_PENDING_INTENT = "android.support.customtabs.customaction.PENDING_INTENT";
+ field public static final int NO_TITLE = 0; // 0x0
+ field public static final int SHOW_PAGE_TITLE = 1; // 0x1
+ field public static final int TOOLBAR_ACTION_BUTTON_ID = 0; // 0x0
+ field public final android.content.Intent intent;
+ field public final android.os.Bundle startAnimationBundle;
+ }
+
+ public static final class CustomTabsIntent.Builder {
+ ctor public CustomTabsIntent.Builder();
+ ctor public CustomTabsIntent.Builder(android.support.customtabs.CustomTabsSession);
+ method public android.support.customtabs.CustomTabsIntent.Builder addDefaultShareMenuItem();
+ method public android.support.customtabs.CustomTabsIntent.Builder addMenuItem(java.lang.String, android.app.PendingIntent);
+ method public deprecated android.support.customtabs.CustomTabsIntent.Builder addToolbarItem(int, android.graphics.Bitmap, java.lang.String, android.app.PendingIntent) throws java.lang.IllegalStateException;
+ method public android.support.customtabs.CustomTabsIntent build();
+ method public android.support.customtabs.CustomTabsIntent.Builder enableUrlBarHiding();
+ method public android.support.customtabs.CustomTabsIntent.Builder setActionButton(android.graphics.Bitmap, java.lang.String, android.app.PendingIntent, boolean);
+ method public android.support.customtabs.CustomTabsIntent.Builder setActionButton(android.graphics.Bitmap, java.lang.String, android.app.PendingIntent);
+ method public android.support.customtabs.CustomTabsIntent.Builder setCloseButtonIcon(android.graphics.Bitmap);
+ method public android.support.customtabs.CustomTabsIntent.Builder setExitAnimations(android.content.Context, int, int);
+ method public android.support.customtabs.CustomTabsIntent.Builder setInstantAppsEnabled(boolean);
+ method public android.support.customtabs.CustomTabsIntent.Builder setSecondaryToolbarColor(int);
+ method public android.support.customtabs.CustomTabsIntent.Builder setSecondaryToolbarViews(android.widget.RemoteViews, int[], android.app.PendingIntent);
+ method public android.support.customtabs.CustomTabsIntent.Builder setShowTitle(boolean);
+ method public android.support.customtabs.CustomTabsIntent.Builder setStartAnimations(android.content.Context, int, int);
+ method public android.support.customtabs.CustomTabsIntent.Builder setToolbarColor(int);
+ }
+
+ public abstract class CustomTabsService extends android.app.Service {
+ ctor public CustomTabsService();
+ method protected boolean cleanUpSession(android.support.customtabs.CustomTabsSessionToken);
+ method protected abstract android.os.Bundle extraCommand(java.lang.String, android.os.Bundle);
+ method protected abstract boolean mayLaunchUrl(android.support.customtabs.CustomTabsSessionToken, android.net.Uri, android.os.Bundle, java.util.List<android.os.Bundle>);
+ method protected abstract boolean newSession(android.support.customtabs.CustomTabsSessionToken);
+ method public android.os.IBinder onBind(android.content.Intent);
+ method protected abstract int postMessage(android.support.customtabs.CustomTabsSessionToken, java.lang.String, android.os.Bundle);
+ method protected abstract boolean requestPostMessageChannel(android.support.customtabs.CustomTabsSessionToken, android.net.Uri);
+ method protected abstract boolean updateVisuals(android.support.customtabs.CustomTabsSessionToken, android.os.Bundle);
+ method protected abstract boolean warmup(long);
+ field public static final java.lang.String ACTION_CUSTOM_TABS_CONNECTION = "android.support.customtabs.action.CustomTabsService";
+ field public static final java.lang.String KEY_URL = "android.support.customtabs.otherurls.URL";
+ field public static final int RESULT_FAILURE_DISALLOWED = -1; // 0xffffffff
+ field public static final int RESULT_FAILURE_MESSAGING_ERROR = -3; // 0xfffffffd
+ field public static final int RESULT_FAILURE_REMOTE_ERROR = -2; // 0xfffffffe
+ field public static final int RESULT_SUCCESS = 0; // 0x0
+ }
+
+ public static abstract class CustomTabsService.Result implements java.lang.annotation.Annotation {
+ }
+
+ public abstract class CustomTabsServiceConnection implements android.content.ServiceConnection {
+ ctor public CustomTabsServiceConnection();
+ method public abstract void onCustomTabsServiceConnected(android.content.ComponentName, android.support.customtabs.CustomTabsClient);
+ method public final void onServiceConnected(android.content.ComponentName, android.os.IBinder);
+ }
+
+ public final class CustomTabsSession {
+ method public boolean mayLaunchUrl(android.net.Uri, android.os.Bundle, java.util.List<android.os.Bundle>);
+ method public int postMessage(java.lang.String, android.os.Bundle);
+ method public boolean requestPostMessageChannel(android.net.Uri);
+ method public boolean setActionButton(android.graphics.Bitmap, java.lang.String);
+ method public boolean setSecondaryToolbarViews(android.widget.RemoteViews, int[], android.app.PendingIntent);
+ method public deprecated boolean setToolbarItem(int, android.graphics.Bitmap, java.lang.String);
+ }
+
+ public class CustomTabsSessionToken {
+ method public android.support.customtabs.CustomTabsCallback getCallback();
+ method public static android.support.customtabs.CustomTabsSessionToken getSessionTokenFromIntent(android.content.Intent);
+ method public boolean isAssociatedWith(android.support.customtabs.CustomTabsSession);
+ }
+
+ public class PostMessageService extends android.app.Service {
+ ctor public PostMessageService();
+ method public android.os.IBinder onBind(android.content.Intent);
+ }
+
+ public abstract class PostMessageServiceConnection implements android.content.ServiceConnection {
+ ctor public PostMessageServiceConnection(android.support.customtabs.CustomTabsSessionToken);
+ method public boolean bindSessionToPostMessageService(android.content.Context, java.lang.String);
+ method public final boolean notifyMessageChannelReady(android.os.Bundle);
+ method public void onPostMessageServiceConnected();
+ method public void onPostMessageServiceDisconnected();
+ method public final void onServiceConnected(android.content.ComponentName, android.os.IBinder);
+ method public final void onServiceDisconnected(android.content.ComponentName);
+ method public final boolean postMessage(java.lang.String, android.os.Bundle);
+ method public void unbindFromContext(android.content.Context);
+ }
+
+}
+
diff --git a/customtabs/api/27.0.0.txt b/customtabs/api/27.0.0.txt
new file mode 100644
index 0000000..8494391
--- /dev/null
+++ b/customtabs/api/27.0.0.txt
@@ -0,0 +1,157 @@
+package android.support.customtabs {
+
+ public class CustomTabsCallback {
+ ctor public CustomTabsCallback();
+ method public void extraCallback(java.lang.String, android.os.Bundle);
+ method public void onMessageChannelReady(android.os.Bundle);
+ method public void onNavigationEvent(int, android.os.Bundle);
+ method public void onPostMessage(java.lang.String, android.os.Bundle);
+ method public void onRelationshipValidationResult(int, android.net.Uri, boolean, android.os.Bundle);
+ field public static final int NAVIGATION_ABORTED = 4; // 0x4
+ field public static final int NAVIGATION_FAILED = 3; // 0x3
+ field public static final int NAVIGATION_FINISHED = 2; // 0x2
+ field public static final int NAVIGATION_STARTED = 1; // 0x1
+ field public static final int TAB_HIDDEN = 6; // 0x6
+ field public static final int TAB_SHOWN = 5; // 0x5
+ }
+
+ public class CustomTabsClient {
+ method public static boolean bindCustomTabsService(android.content.Context, java.lang.String, android.support.customtabs.CustomTabsServiceConnection);
+ method public static boolean connectAndInitialize(android.content.Context, java.lang.String);
+ method public android.os.Bundle extraCommand(java.lang.String, android.os.Bundle);
+ method public static java.lang.String getPackageName(android.content.Context, java.util.List<java.lang.String>);
+ method public static java.lang.String getPackageName(android.content.Context, java.util.List<java.lang.String>, boolean);
+ method public android.support.customtabs.CustomTabsSession newSession(android.support.customtabs.CustomTabsCallback);
+ method public boolean warmup(long);
+ }
+
+ public final class CustomTabsIntent {
+ method public static int getMaxToolbarItems();
+ method public void launchUrl(android.content.Context, android.net.Uri);
+ method public static android.content.Intent setAlwaysUseBrowserUI(android.content.Intent);
+ method public static boolean shouldAlwaysUseBrowserUI(android.content.Intent);
+ field public static final java.lang.String EXTRA_ACTION_BUTTON_BUNDLE = "android.support.customtabs.extra.ACTION_BUTTON_BUNDLE";
+ field public static final java.lang.String EXTRA_CLOSE_BUTTON_ICON = "android.support.customtabs.extra.CLOSE_BUTTON_ICON";
+ field public static final java.lang.String EXTRA_DEFAULT_SHARE_MENU_ITEM = "android.support.customtabs.extra.SHARE_MENU_ITEM";
+ field public static final java.lang.String EXTRA_ENABLE_INSTANT_APPS = "android.support.customtabs.extra.EXTRA_ENABLE_INSTANT_APPS";
+ field public static final java.lang.String EXTRA_ENABLE_URLBAR_HIDING = "android.support.customtabs.extra.ENABLE_URLBAR_HIDING";
+ field public static final java.lang.String EXTRA_EXIT_ANIMATION_BUNDLE = "android.support.customtabs.extra.EXIT_ANIMATION_BUNDLE";
+ field public static final java.lang.String EXTRA_MENU_ITEMS = "android.support.customtabs.extra.MENU_ITEMS";
+ field public static final java.lang.String EXTRA_REMOTEVIEWS = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS";
+ field public static final java.lang.String EXTRA_REMOTEVIEWS_CLICKED_ID = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS_CLICKED_ID";
+ field public static final java.lang.String EXTRA_REMOTEVIEWS_PENDINGINTENT = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS_PENDINGINTENT";
+ field public static final java.lang.String EXTRA_REMOTEVIEWS_VIEW_IDS = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS_VIEW_IDS";
+ field public static final java.lang.String EXTRA_SECONDARY_TOOLBAR_COLOR = "android.support.customtabs.extra.SECONDARY_TOOLBAR_COLOR";
+ field public static final java.lang.String EXTRA_SESSION = "android.support.customtabs.extra.SESSION";
+ field public static final java.lang.String EXTRA_TINT_ACTION_BUTTON = "android.support.customtabs.extra.TINT_ACTION_BUTTON";
+ field public static final java.lang.String EXTRA_TITLE_VISIBILITY_STATE = "android.support.customtabs.extra.TITLE_VISIBILITY";
+ field public static final java.lang.String EXTRA_TOOLBAR_COLOR = "android.support.customtabs.extra.TOOLBAR_COLOR";
+ field public static final java.lang.String EXTRA_TOOLBAR_ITEMS = "android.support.customtabs.extra.TOOLBAR_ITEMS";
+ field public static final java.lang.String KEY_DESCRIPTION = "android.support.customtabs.customaction.DESCRIPTION";
+ field public static final java.lang.String KEY_ICON = "android.support.customtabs.customaction.ICON";
+ field public static final java.lang.String KEY_ID = "android.support.customtabs.customaction.ID";
+ field public static final java.lang.String KEY_MENU_ITEM_TITLE = "android.support.customtabs.customaction.MENU_ITEM_TITLE";
+ field public static final java.lang.String KEY_PENDING_INTENT = "android.support.customtabs.customaction.PENDING_INTENT";
+ field public static final int NO_TITLE = 0; // 0x0
+ field public static final int SHOW_PAGE_TITLE = 1; // 0x1
+ field public static final int TOOLBAR_ACTION_BUTTON_ID = 0; // 0x0
+ field public final android.content.Intent intent;
+ field public final android.os.Bundle startAnimationBundle;
+ }
+
+ public static final class CustomTabsIntent.Builder {
+ ctor public CustomTabsIntent.Builder();
+ ctor public CustomTabsIntent.Builder(android.support.customtabs.CustomTabsSession);
+ method public android.support.customtabs.CustomTabsIntent.Builder addDefaultShareMenuItem();
+ method public android.support.customtabs.CustomTabsIntent.Builder addMenuItem(java.lang.String, android.app.PendingIntent);
+ method public deprecated android.support.customtabs.CustomTabsIntent.Builder addToolbarItem(int, android.graphics.Bitmap, java.lang.String, android.app.PendingIntent) throws java.lang.IllegalStateException;
+ method public android.support.customtabs.CustomTabsIntent build();
+ method public android.support.customtabs.CustomTabsIntent.Builder enableUrlBarHiding();
+ method public android.support.customtabs.CustomTabsIntent.Builder setActionButton(android.graphics.Bitmap, java.lang.String, android.app.PendingIntent, boolean);
+ method public android.support.customtabs.CustomTabsIntent.Builder setActionButton(android.graphics.Bitmap, java.lang.String, android.app.PendingIntent);
+ method public android.support.customtabs.CustomTabsIntent.Builder setCloseButtonIcon(android.graphics.Bitmap);
+ method public android.support.customtabs.CustomTabsIntent.Builder setExitAnimations(android.content.Context, int, int);
+ method public android.support.customtabs.CustomTabsIntent.Builder setInstantAppsEnabled(boolean);
+ method public android.support.customtabs.CustomTabsIntent.Builder setSecondaryToolbarColor(int);
+ method public android.support.customtabs.CustomTabsIntent.Builder setSecondaryToolbarViews(android.widget.RemoteViews, int[], android.app.PendingIntent);
+ method public android.support.customtabs.CustomTabsIntent.Builder setShowTitle(boolean);
+ method public android.support.customtabs.CustomTabsIntent.Builder setStartAnimations(android.content.Context, int, int);
+ method public android.support.customtabs.CustomTabsIntent.Builder setToolbarColor(int);
+ }
+
+ public abstract class CustomTabsService extends android.app.Service {
+ ctor public CustomTabsService();
+ method protected boolean cleanUpSession(android.support.customtabs.CustomTabsSessionToken);
+ method protected abstract android.os.Bundle extraCommand(java.lang.String, android.os.Bundle);
+ method protected abstract boolean mayLaunchUrl(android.support.customtabs.CustomTabsSessionToken, android.net.Uri, android.os.Bundle, java.util.List<android.os.Bundle>);
+ method protected abstract boolean newSession(android.support.customtabs.CustomTabsSessionToken);
+ method public android.os.IBinder onBind(android.content.Intent);
+ method protected abstract int postMessage(android.support.customtabs.CustomTabsSessionToken, java.lang.String, android.os.Bundle);
+ method protected abstract boolean requestPostMessageChannel(android.support.customtabs.CustomTabsSessionToken, android.net.Uri);
+ method protected abstract boolean updateVisuals(android.support.customtabs.CustomTabsSessionToken, android.os.Bundle);
+ method protected abstract boolean validateRelationship(android.support.customtabs.CustomTabsSessionToken, int, android.net.Uri, android.os.Bundle);
+ method protected abstract boolean warmup(long);
+ field public static final java.lang.String ACTION_CUSTOM_TABS_CONNECTION = "android.support.customtabs.action.CustomTabsService";
+ field public static final java.lang.String KEY_URL = "android.support.customtabs.otherurls.URL";
+ field public static final int RELATION_HANDLE_ALL_URLS = 2; // 0x2
+ field public static final int RELATION_USE_AS_ORIGIN = 1; // 0x1
+ field public static final int RESULT_FAILURE_DISALLOWED = -1; // 0xffffffff
+ field public static final int RESULT_FAILURE_MESSAGING_ERROR = -3; // 0xfffffffd
+ field public static final int RESULT_FAILURE_REMOTE_ERROR = -2; // 0xfffffffe
+ field public static final int RESULT_SUCCESS = 0; // 0x0
+ }
+
+ public static abstract class CustomTabsService.Relation implements java.lang.annotation.Annotation {
+ }
+
+ public static abstract class CustomTabsService.Result implements java.lang.annotation.Annotation {
+ }
+
+ public abstract class CustomTabsServiceConnection implements android.content.ServiceConnection {
+ ctor public CustomTabsServiceConnection();
+ method public abstract void onCustomTabsServiceConnected(android.content.ComponentName, android.support.customtabs.CustomTabsClient);
+ method public final void onServiceConnected(android.content.ComponentName, android.os.IBinder);
+ }
+
+ public final class CustomTabsSession {
+ method public static android.support.customtabs.CustomTabsSession createMockSessionForTesting(android.content.ComponentName);
+ method public boolean mayLaunchUrl(android.net.Uri, android.os.Bundle, java.util.List<android.os.Bundle>);
+ method public int postMessage(java.lang.String, android.os.Bundle);
+ method public boolean requestPostMessageChannel(android.net.Uri);
+ method public boolean setActionButton(android.graphics.Bitmap, java.lang.String);
+ method public boolean setSecondaryToolbarViews(android.widget.RemoteViews, int[], android.app.PendingIntent);
+ method public deprecated boolean setToolbarItem(int, android.graphics.Bitmap, java.lang.String);
+ method public boolean validateRelationship(int, android.net.Uri, android.os.Bundle);
+ }
+
+ public class CustomTabsSessionToken {
+ method public static android.support.customtabs.CustomTabsSessionToken createMockSessionTokenForTesting();
+ method public android.support.customtabs.CustomTabsCallback getCallback();
+ method public static android.support.customtabs.CustomTabsSessionToken getSessionTokenFromIntent(android.content.Intent);
+ method public boolean isAssociatedWith(android.support.customtabs.CustomTabsSession);
+ }
+
+ public class PostMessageService extends android.app.Service {
+ ctor public PostMessageService();
+ method public android.os.IBinder onBind(android.content.Intent);
+ }
+
+ public abstract class PostMessageServiceConnection implements android.content.ServiceConnection {
+ ctor public PostMessageServiceConnection(android.support.customtabs.CustomTabsSessionToken);
+ method public boolean bindSessionToPostMessageService(android.content.Context, java.lang.String);
+ method public final boolean notifyMessageChannelReady(android.os.Bundle);
+ method public void onPostMessageServiceConnected();
+ method public void onPostMessageServiceDisconnected();
+ method public final void onServiceConnected(android.content.ComponentName, android.os.IBinder);
+ method public final void onServiceDisconnected(android.content.ComponentName);
+ method public final boolean postMessage(java.lang.String, android.os.Bundle);
+ method public void unbindFromContext(android.content.Context);
+ }
+
+ public class TrustedWebUtils {
+ method public static void launchAsTrustedWebActivity(android.content.Context, android.support.customtabs.CustomTabsIntent, android.net.Uri);
+ field public static final java.lang.String EXTRA_LAUNCH_AS_TRUSTED_WEB_ACTIVITY = "android.support.customtabs.extra.LAUNCH_AS_TRUSTED_WEB_ACTIVITY";
+ }
+
+}
+
diff --git a/customtabs/api/current.txt b/customtabs/api/current.txt
index 58cd212..8494391 100644
--- a/customtabs/api/current.txt
+++ b/customtabs/api/current.txt
@@ -6,6 +6,7 @@
method public void onMessageChannelReady(android.os.Bundle);
method public void onNavigationEvent(int, android.os.Bundle);
method public void onPostMessage(java.lang.String, android.os.Bundle);
+ method public void onRelationshipValidationResult(int, android.net.Uri, boolean, android.os.Bundle);
field public static final int NAVIGATION_ABORTED = 4; // 0x4
field public static final int NAVIGATION_FAILED = 3; // 0x3
field public static final int NAVIGATION_FINISHED = 2; // 0x2
@@ -88,15 +89,21 @@
method protected abstract int postMessage(android.support.customtabs.CustomTabsSessionToken, java.lang.String, android.os.Bundle);
method protected abstract boolean requestPostMessageChannel(android.support.customtabs.CustomTabsSessionToken, android.net.Uri);
method protected abstract boolean updateVisuals(android.support.customtabs.CustomTabsSessionToken, android.os.Bundle);
+ method protected abstract boolean validateRelationship(android.support.customtabs.CustomTabsSessionToken, int, android.net.Uri, android.os.Bundle);
method protected abstract boolean warmup(long);
field public static final java.lang.String ACTION_CUSTOM_TABS_CONNECTION = "android.support.customtabs.action.CustomTabsService";
field public static final java.lang.String KEY_URL = "android.support.customtabs.otherurls.URL";
+ field public static final int RELATION_HANDLE_ALL_URLS = 2; // 0x2
+ field public static final int RELATION_USE_AS_ORIGIN = 1; // 0x1
field public static final int RESULT_FAILURE_DISALLOWED = -1; // 0xffffffff
field public static final int RESULT_FAILURE_MESSAGING_ERROR = -3; // 0xfffffffd
field public static final int RESULT_FAILURE_REMOTE_ERROR = -2; // 0xfffffffe
field public static final int RESULT_SUCCESS = 0; // 0x0
}
+ public static abstract class CustomTabsService.Relation implements java.lang.annotation.Annotation {
+ }
+
public static abstract class CustomTabsService.Result implements java.lang.annotation.Annotation {
}
@@ -107,15 +114,18 @@
}
public final class CustomTabsSession {
+ method public static android.support.customtabs.CustomTabsSession createMockSessionForTesting(android.content.ComponentName);
method public boolean mayLaunchUrl(android.net.Uri, android.os.Bundle, java.util.List<android.os.Bundle>);
method public int postMessage(java.lang.String, android.os.Bundle);
method public boolean requestPostMessageChannel(android.net.Uri);
method public boolean setActionButton(android.graphics.Bitmap, java.lang.String);
method public boolean setSecondaryToolbarViews(android.widget.RemoteViews, int[], android.app.PendingIntent);
method public deprecated boolean setToolbarItem(int, android.graphics.Bitmap, java.lang.String);
+ method public boolean validateRelationship(int, android.net.Uri, android.os.Bundle);
}
public class CustomTabsSessionToken {
+ method public static android.support.customtabs.CustomTabsSessionToken createMockSessionTokenForTesting();
method public android.support.customtabs.CustomTabsCallback getCallback();
method public static android.support.customtabs.CustomTabsSessionToken getSessionTokenFromIntent(android.content.Intent);
method public boolean isAssociatedWith(android.support.customtabs.CustomTabsSession);
@@ -138,5 +148,10 @@
method public void unbindFromContext(android.content.Context);
}
+ public class TrustedWebUtils {
+ method public static void launchAsTrustedWebActivity(android.content.Context, android.support.customtabs.CustomTabsIntent, android.net.Uri);
+ field public static final java.lang.String EXTRA_LAUNCH_AS_TRUSTED_WEB_ACTIVITY = "android.support.customtabs.extra.LAUNCH_AS_TRUSTED_WEB_ACTIVITY";
+ }
+
}
diff --git a/customtabs/build.gradle b/customtabs/build.gradle
index 6cf8b77..fc90301 100644
--- a/customtabs/build.gradle
+++ b/customtabs/build.gradle
@@ -15,11 +15,7 @@
}
sourceSets {
- main.java.srcDirs = ['src']
- main.aidl.srcDirs = ['src']
- main.res.srcDir 'res'
- main.assets.srcDir 'assets'
- main.resources.srcDir 'java'
+ main.aidl.srcDirs = ['src/main/java']
}
}
diff --git a/customtabs/src/android/support/customtabs/CustomTabsCallback.java b/customtabs/src/main/java/android/support/customtabs/CustomTabsCallback.java
similarity index 79%
rename from customtabs/src/android/support/customtabs/CustomTabsCallback.java
rename to customtabs/src/main/java/android/support/customtabs/CustomTabsCallback.java
index 818118a..f8d349a 100644
--- a/customtabs/src/android/support/customtabs/CustomTabsCallback.java
+++ b/customtabs/src/main/java/android/support/customtabs/CustomTabsCallback.java
@@ -16,7 +16,9 @@
package android.support.customtabs;
+import android.net.Uri;
import android.os.Bundle;
+import android.support.customtabs.CustomTabsService.Relation;
/**
* A callback class for custom tabs client to get messages regarding events in their custom tabs. In
@@ -98,4 +100,18 @@
* @param extras Reserved for future use.
*/
public void onPostMessage(String message, Bundle extras) {}
+
+ /**
+ * Called when a relationship validation result is available.
+ *
+ * @param relation Relation for which the result is available. Value previously passed to
+ * {@link CustomTabsSession#validateRelationship(int, Uri, Bundle)}. Must be one
+ * of the {@code CustomTabsService#RELATION_* } constants.
+ * @param requestedOrigin Origin requested. Value previously passed to
+ * {@link CustomTabsSession#validateRelationship(int, Uri, Bundle)}.
+ * @param result Whether the relation was validated.
+ * @param extras Reserved for future use.
+ */
+ public void onRelationshipValidationResult(@Relation int relation, Uri requestedOrigin,
+ boolean result, Bundle extras) {}
}
diff --git a/customtabs/src/android/support/customtabs/CustomTabsClient.java b/customtabs/src/main/java/android/support/customtabs/CustomTabsClient.java
similarity index 93%
rename from customtabs/src/android/support/customtabs/CustomTabsClient.java
rename to customtabs/src/main/java/android/support/customtabs/CustomTabsClient.java
index 09f3110..2e955cb 100644
--- a/customtabs/src/android/support/customtabs/CustomTabsClient.java
+++ b/customtabs/src/main/java/android/support/customtabs/CustomTabsClient.java
@@ -31,6 +31,7 @@
import android.os.RemoteException;
import android.support.annotation.Nullable;
import android.support.annotation.RestrictTo;
+import android.support.customtabs.CustomTabsService.Relation;
import android.text.TextUtils;
import java.util.ArrayList;
@@ -234,6 +235,20 @@
}
});
}
+
+ @Override
+ public void onRelationshipValidationResult(
+ final @Relation int relation, final Uri requestedOrigin, final boolean result,
+ final @Nullable Bundle extras) throws RemoteException {
+ if (callback == null) return;
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ callback.onRelationshipValidationResult(
+ relation, requestedOrigin, result, extras);
+ }
+ });
+ }
};
try {
diff --git a/customtabs/src/android/support/customtabs/CustomTabsIntent.java b/customtabs/src/main/java/android/support/customtabs/CustomTabsIntent.java
similarity index 100%
rename from customtabs/src/android/support/customtabs/CustomTabsIntent.java
rename to customtabs/src/main/java/android/support/customtabs/CustomTabsIntent.java
diff --git a/customtabs/src/android/support/customtabs/CustomTabsService.java b/customtabs/src/main/java/android/support/customtabs/CustomTabsService.java
similarity index 85%
rename from customtabs/src/android/support/customtabs/CustomTabsService.java
rename to customtabs/src/main/java/android/support/customtabs/CustomTabsService.java
index 5a940cf..aad174c 100644
--- a/customtabs/src/android/support/customtabs/CustomTabsService.java
+++ b/customtabs/src/main/java/android/support/customtabs/CustomTabsService.java
@@ -78,6 +78,23 @@
*/
public static final int RESULT_FAILURE_MESSAGING_ERROR = -3;
+ @Retention(RetentionPolicy.SOURCE)
+ @IntDef({RELATION_USE_AS_ORIGIN, RELATION_HANDLE_ALL_URLS})
+ public @interface Relation {
+ }
+
+ /**
+ * Used for {@link CustomTabsSession#validateRelationship(int, Uri, Bundle)}. For
+ * App -> Web transitions, requests the app to use the declared origin to be used as origin for
+ * the client app in the web APIs context.
+ */
+ public static final int RELATION_USE_AS_ORIGIN = 1;
+ /**
+ * Used for {@link CustomTabsSession#validateRelationship(int, Uri, Bundle)}. Requests the
+ * ability to handle all URLs from a given origin.
+ */
+ public static final int RELATION_HANDLE_ALL_URLS = 2;
+
private final Map<IBinder, DeathRecipient> mDeathRecipientMap = new ArrayMap<>();
private ICustomTabsService.Stub mBinder = new ICustomTabsService.Stub() {
@@ -137,6 +154,13 @@
return CustomTabsService.this.postMessage(
new CustomTabsSessionToken(callback), message, extras);
}
+
+ @Override
+ public boolean validateRelationship(
+ ICustomTabsCallback callback, @Relation int relation, Uri origin, Bundle extras) {
+ return CustomTabsService.this.validateRelationship(
+ new CustomTabsSessionToken(callback), relation, origin, extras);
+ }
};
@Override
@@ -268,4 +292,23 @@
@Result
protected abstract int postMessage(
CustomTabsSessionToken sessionToken, String message, Bundle extras);
+
+ /**
+ * Request to validate a relationship between the application and an origin.
+ *
+ * If this method returns true, the validation result will be provided through
+ * {@link CustomTabsCallback#onRelationshipValidationResult(int, Uri, boolean, Bundle)}.
+ * Otherwise the request didn't succeed. The client must call
+ * {@link CustomTabsClient#warmup(long)} before this.
+ *
+ * @param sessionToken The unique identifier for the session. Can not be null.
+ * @param relation Relation to check, must be one of the {@code CustomTabsService#RELATION_* }
+ * constants.
+ * @param origin Origin for the relation query.
+ * @param extras Reserved for future use.
+ * @return true if the request has been submitted successfully.
+ */
+ protected abstract boolean validateRelationship(
+ CustomTabsSessionToken sessionToken, @Relation int relation, Uri origin,
+ Bundle extras);
}
diff --git a/customtabs/src/android/support/customtabs/CustomTabsServiceConnection.java b/customtabs/src/main/java/android/support/customtabs/CustomTabsServiceConnection.java
similarity index 100%
rename from customtabs/src/android/support/customtabs/CustomTabsServiceConnection.java
rename to customtabs/src/main/java/android/support/customtabs/CustomTabsServiceConnection.java
diff --git a/customtabs/src/android/support/customtabs/CustomTabsSession.java b/customtabs/src/main/java/android/support/customtabs/CustomTabsSession.java
similarity index 78%
rename from customtabs/src/android/support/customtabs/CustomTabsSession.java
rename to customtabs/src/main/java/android/support/customtabs/CustomTabsSession.java
index cad897c..a84d63c 100644
--- a/customtabs/src/android/support/customtabs/CustomTabsSession.java
+++ b/customtabs/src/main/java/android/support/customtabs/CustomTabsSession.java
@@ -25,6 +25,8 @@
import android.os.RemoteException;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
+import android.support.annotation.VisibleForTesting;
+import android.support.customtabs.CustomTabsService.Relation;
import android.support.customtabs.CustomTabsService.Result;
import android.view.View;
import android.widget.RemoteViews;
@@ -42,6 +44,21 @@
private final ICustomTabsCallback mCallback;
private final ComponentName mComponentName;
+ /**
+ * Provides browsers a way to generate a mock {@link CustomTabsSession} for testing
+ * purposes.
+ *
+ * @param componentName The component the session should be created for.
+ * @return A mock session with no functionality.
+ */
+ @VisibleForTesting
+ @NonNull
+ public static CustomTabsSession createMockSessionForTesting(
+ @NonNull ComponentName componentName) {
+ return new CustomTabsSession(
+ null, new CustomTabsSessionToken.MockCallback(), componentName);
+ }
+
/* package */ CustomTabsSession(
ICustomTabsService service, ICustomTabsCallback callback, ComponentName componentName) {
mService = service;
@@ -185,6 +202,39 @@
}
}
+ /**
+ * Requests to validate a relationship between the application and an origin.
+ *
+ * <p>
+ * See <a href="https://developers.google.com/digital-asset-links/v1/getting-started">here</a>
+ * for documentation about Digital Asset Links. This methods requests the browser to verify
+ * a relation with the calling application, to grant the associated rights.
+ *
+ * <p>
+ * If this method returns {@code true}, the validation result will be provided through
+ * {@link CustomTabsCallback#onRelationshipValidationResult(int, Uri, boolean, Bundle)}.
+ * Otherwise the request didn't succeed. The client must call
+ * {@link CustomTabsClient#warmup(long)} before this.
+ *
+ * @param relation Relation to check, must be one of the {@code CustomTabsService#RELATION_* }
+ * constants.
+ * @param origin Origin.
+ * @param extras Reserved for future use.
+ * @return {@code true} if the request has been submitted successfully.
+ */
+ public boolean validateRelationship(@Relation int relation, @NonNull Uri origin,
+ @Nullable Bundle extras) {
+ if (relation < CustomTabsService.RELATION_USE_AS_ORIGIN
+ || relation > CustomTabsService.RELATION_HANDLE_ALL_URLS) {
+ return false;
+ }
+ try {
+ return mService.validateRelationship(mCallback, relation, origin, extras);
+ } catch (RemoteException e) {
+ return false;
+ }
+ }
+
/* package */ IBinder getBinder() {
return mCallback.asBinder();
}
diff --git a/customtabs/src/android/support/customtabs/CustomTabsSessionToken.java b/customtabs/src/main/java/android/support/customtabs/CustomTabsSessionToken.java
similarity index 72%
rename from customtabs/src/android/support/customtabs/CustomTabsSessionToken.java
rename to customtabs/src/main/java/android/support/customtabs/CustomTabsSessionToken.java
index adfadd9..5a9e1b6 100644
--- a/customtabs/src/android/support/customtabs/CustomTabsSessionToken.java
+++ b/customtabs/src/main/java/android/support/customtabs/CustomTabsSessionToken.java
@@ -17,9 +17,12 @@
package android.support.customtabs;
import android.content.Intent;
+import android.net.Uri;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
+import android.support.annotation.NonNull;
+import android.support.customtabs.CustomTabsService.Relation;
import android.support.v4.app.BundleCompat;
import android.util.Log;
@@ -32,6 +35,29 @@
private final ICustomTabsCallback mCallbackBinder;
private final CustomTabsCallback mCallback;
+ /* package */ static class MockCallback extends ICustomTabsCallback.Stub {
+ @Override
+ public void onNavigationEvent(int navigationEvent, Bundle extras) {}
+
+ @Override
+ public void extraCallback(String callbackName, Bundle args) {}
+
+ @Override
+ public void onMessageChannelReady(Bundle extras) {}
+
+ @Override
+ public void onPostMessage(String message, Bundle extras) {}
+
+ @Override
+ public void onRelationshipValidationResult(@Relation int relation, Uri requestedOrigin,
+ boolean result, Bundle extras) {}
+
+ @Override
+ public IBinder asBinder() {
+ return this;
+ }
+ }
+
/**
* Obtain a {@link CustomTabsSessionToken} from an intent. See {@link CustomTabsIntent.Builder}
* for ways to generate an intent for custom tabs.
@@ -46,6 +72,17 @@
return new CustomTabsSessionToken(ICustomTabsCallback.Stub.asInterface(binder));
}
+ /**
+ * Provides browsers a way to generate a mock {@link CustomTabsSessionToken} for testing
+ * purposes.
+ *
+ * @return A mock token with no functionality.
+ */
+ @NonNull
+ public static CustomTabsSessionToken createMockSessionTokenForTesting() {
+ return new CustomTabsSessionToken(new MockCallback());
+ }
+
CustomTabsSessionToken(ICustomTabsCallback callbackBinder) {
mCallbackBinder = callbackBinder;
mCallback = new CustomTabsCallback() {
@@ -85,6 +122,18 @@
Log.e(TAG, "RemoteException during ICustomTabsCallback transaction");
}
}
+
+ @Override
+ public void onRelationshipValidationResult(@Relation int relation, Uri origin,
+ boolean result, Bundle extras) {
+ try {
+ mCallbackBinder.onRelationshipValidationResult(
+ relation, origin, result, extras);
+ } catch (RemoteException e) {
+ Log.e(TAG, "RemoteException during ICustomTabsCallback transaction");
+ }
+ }
+
};
}
diff --git a/customtabs/src/android/support/customtabs/ICustomTabsCallback.aidl b/customtabs/src/main/java/android/support/customtabs/ICustomTabsCallback.aidl
similarity index 90%
rename from customtabs/src/android/support/customtabs/ICustomTabsCallback.aidl
rename to customtabs/src/main/java/android/support/customtabs/ICustomTabsCallback.aidl
index 32b6e9b..3e2c48c 100644
--- a/customtabs/src/android/support/customtabs/ICustomTabsCallback.aidl
+++ b/customtabs/src/main/java/android/support/customtabs/ICustomTabsCallback.aidl
@@ -27,4 +27,5 @@
void extraCallback(String callbackName, in Bundle args) = 2;
void onMessageChannelReady(in Bundle extras) = 3;
void onPostMessage(String message, in Bundle extras) = 4;
+ void onRelationshipValidationResult(int relation, in Uri origin, boolean result, in Bundle extras) = 5;
}
diff --git a/customtabs/src/android/support/customtabs/ICustomTabsService.aidl b/customtabs/src/main/java/android/support/customtabs/ICustomTabsService.aidl
similarity index 92%
rename from customtabs/src/android/support/customtabs/ICustomTabsService.aidl
rename to customtabs/src/main/java/android/support/customtabs/ICustomTabsService.aidl
index b24b0dd..376c2a4 100644
--- a/customtabs/src/android/support/customtabs/ICustomTabsService.aidl
+++ b/customtabs/src/main/java/android/support/customtabs/ICustomTabsService.aidl
@@ -36,4 +36,5 @@
boolean updateVisuals(in ICustomTabsCallback callback, in Bundle bundle) = 5;
boolean requestPostMessageChannel(in ICustomTabsCallback callback, in Uri postMessageOrigin) = 6;
int postMessage(in ICustomTabsCallback callback, String message, in Bundle extras) = 7;
+ boolean validateRelationship(in ICustomTabsCallback callback, int relation, in Uri origin, in Bundle extras) = 8;
}
diff --git a/customtabs/src/android/support/customtabs/IPostMessageService.aidl b/customtabs/src/main/java/android/support/customtabs/IPostMessageService.aidl
similarity index 100%
rename from customtabs/src/android/support/customtabs/IPostMessageService.aidl
rename to customtabs/src/main/java/android/support/customtabs/IPostMessageService.aidl
diff --git a/customtabs/src/android/support/customtabs/PostMessageService.java b/customtabs/src/main/java/android/support/customtabs/PostMessageService.java
similarity index 100%
rename from customtabs/src/android/support/customtabs/PostMessageService.java
rename to customtabs/src/main/java/android/support/customtabs/PostMessageService.java
diff --git a/customtabs/src/android/support/customtabs/PostMessageServiceConnection.java b/customtabs/src/main/java/android/support/customtabs/PostMessageServiceConnection.java
similarity index 100%
rename from customtabs/src/android/support/customtabs/PostMessageServiceConnection.java
rename to customtabs/src/main/java/android/support/customtabs/PostMessageServiceConnection.java
diff --git a/customtabs/src/main/java/android/support/customtabs/TrustedWebUtils.java b/customtabs/src/main/java/android/support/customtabs/TrustedWebUtils.java
new file mode 100644
index 0000000..e9a2233
--- /dev/null
+++ b/customtabs/src/main/java/android/support/customtabs/TrustedWebUtils.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.customtabs;
+
+import android.content.Context;
+import android.net.Uri;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.v4.app.BundleCompat;
+
+/**
+ * Class for utilities and convenience calls for opening a qualifying web page as a
+ * Trusted Web Activity.
+ *
+ * Trusted Web Activity is a fullscreen UI with no visible browser controls that hosts web pages
+ * meeting certain criteria. The full list of qualifications is at the implementing browser's
+ * discretion, but minimum recommended set is for the web page :
+ * <ul>
+ * <li>To have declared delegate_permission/common.handle_all_urls relationship with the
+ * launching client application ensuring 1:1 trust between the Android native and web
+ * components. See https://developers.google.com/digital-asset-links/ for details.</li>
+ * <li>To work as a reliable, fast and engaging standalone component within the launching app's
+ * flow.</li>
+ * <li>To be accessible and operable even when offline.</li>
+ * </ul>
+ *
+ * Fallback behaviors may also differ with implementation. Possibilities are launching the page in
+ * a custom tab, or showing it in browser UI. Browsers are encouraged to use
+ * {@link CustomTabsCallback#onRelationshipValidationResult(int, Uri, boolean, Bundle)}
+ * for sending details of the verification results.
+ */
+public class TrustedWebUtils {
+
+ /**
+ * Boolean extra that triggers a {@link CustomTabsIntent} launch to be in a fullscreen UI with
+ * no browser controls.
+ *
+ * @see TrustedWebUtils#launchAsTrustedWebActivity(Context, CustomTabsIntent, Uri).
+ */
+ public static final String EXTRA_LAUNCH_AS_TRUSTED_WEB_ACTIVITY =
+ "android.support.customtabs.extra.LAUNCH_AS_TRUSTED_WEB_ACTIVITY";
+
+ private TrustedWebUtils() {}
+
+ /**
+ * Launch the given {@link CustomTabsIntent} as a Trusted Web Activity. The given
+ * {@link CustomTabsIntent} should have a valid {@link CustomTabsSession} associated with it
+ * during construction. Once the Trusted Web Activity is launched, browser side implementations
+ * may have their own fallback behavior (e.g. Showing the page in a custom tab UI with toolbar)
+ * based on qualifications listed above or more.
+ *
+ * @param context {@link Context} to use while launching the {@link CustomTabsIntent}.
+ * @param customTabsIntent The {@link CustomTabsIntent} to use for launching the
+ * Trusted Web Activity. Note that all customizations in the given
+ * associated with browser toolbar controls will be ignored.
+ * @param uri The web page to launch as Trusted Web Activity.
+ */
+ public static void launchAsTrustedWebActivity(@NonNull Context context,
+ @NonNull CustomTabsIntent customTabsIntent, @NonNull Uri uri) {
+ if (BundleCompat.getBinder(
+ customTabsIntent.intent.getExtras(), CustomTabsIntent.EXTRA_SESSION) == null) {
+ throw new IllegalArgumentException(
+ "Given CustomTabsIntent should be associated with a valid CustomTabsSession");
+ }
+ customTabsIntent.intent.putExtra(EXTRA_LAUNCH_AS_TRUSTED_WEB_ACTIVITY, true);
+ customTabsIntent.launchUrl(context, uri);
+ }
+}
diff --git a/customtabs/tests/src/android/support/customtabs/TestCustomTabsCallback.java b/customtabs/tests/src/android/support/customtabs/TestCustomTabsCallback.java
index 56b1817..804d354 100644
--- a/customtabs/tests/src/android/support/customtabs/TestCustomTabsCallback.java
+++ b/customtabs/tests/src/android/support/customtabs/TestCustomTabsCallback.java
@@ -16,6 +16,7 @@
package android.support.customtabs;
+import android.net.Uri;
import android.os.Bundle;
import android.os.RemoteException;
@@ -50,6 +51,13 @@
throws RemoteException {
TestCustomTabsCallback.this.onPostMessage(message, extras);
}
+
+ @Override
+ public void onRelationshipValidationResult(int relation, Uri origin, boolean result,
+ Bundle extras) throws RemoteException {
+ TestCustomTabsCallback.this.onRelationshipValidationResult(
+ relation, origin, result, extras);
+ }
};
/* package */ ICustomTabsCallback getStub() {
diff --git a/customtabs/tests/src/android/support/customtabs/TestCustomTabsService.java b/customtabs/tests/src/android/support/customtabs/TestCustomTabsService.java
index b5c5e86..e3d5fa8 100644
--- a/customtabs/tests/src/android/support/customtabs/TestCustomTabsService.java
+++ b/customtabs/tests/src/android/support/customtabs/TestCustomTabsService.java
@@ -71,4 +71,10 @@
if (!mPostMessageRequested) return CustomTabsService.RESULT_FAILURE_DISALLOWED;
return CustomTabsService.RESULT_SUCCESS;
}
+
+ @Override
+ protected boolean validateRelationship(CustomTabsSessionToken sessionToken,
+ @Relation int relation, Uri origin, Bundle extras) {
+ return false;
+ }
}
diff --git a/customtabs/tests/src/android/support/customtabs/TrustedWebUtilsTest.java b/customtabs/tests/src/android/support/customtabs/TrustedWebUtilsTest.java
new file mode 100644
index 0000000..a9a5abc
--- /dev/null
+++ b/customtabs/tests/src/android/support/customtabs/TrustedWebUtilsTest.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.customtabs;
+
+import static junit.framework.Assert.assertEquals;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import android.content.ActivityNotFoundException;
+import android.content.Intent;
+import android.net.Uri;
+import android.support.test.filters.SmallTest;
+import android.support.test.rule.ActivityTestRule;
+import android.support.test.runner.AndroidJUnit4;
+import android.support.v4.app.BundleCompat;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+/**
+ * Tests for TrustedWebUtils.
+ */
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class TrustedWebUtilsTest {
+ @Rule
+ public final ActivityTestRule<TestActivity> mActivityTestRule;
+
+ public TrustedWebUtilsTest() {
+ mActivityTestRule = new ActivityTestRule<TestActivity>(TestActivity.class);
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void testTrustedWebIntentRequiresValidSession() {
+ CustomTabsIntent customTabsIntent = new CustomTabsIntent.Builder().build();
+ TrustedWebUtils.launchAsTrustedWebActivity(
+ mActivityTestRule.getActivity(), customTabsIntent, Uri.EMPTY);
+ }
+
+ @Test(expected = ActivityNotFoundException.class)
+ public void testTrustedWebIntentContainsRequiredExtra() {
+ CustomTabsSession mockSession = CustomTabsSession.createMockSessionForTesting(
+ mActivityTestRule.getActivity().getComponentName());
+ CustomTabsIntent customTabsIntent = new CustomTabsIntent.Builder(mockSession).build();
+ TrustedWebUtils.launchAsTrustedWebActivity(
+ mActivityTestRule.getActivity(), customTabsIntent, Uri.EMPTY);
+ assertNotNull(BundleCompat.getBinder(
+ customTabsIntent.intent.getExtras(), CustomTabsIntent.EXTRA_SESSION));
+ assertEquals(customTabsIntent.intent.getAction(), Intent.ACTION_VIEW);
+ assertTrue(customTabsIntent.intent.hasExtra(
+ TrustedWebUtils.EXTRA_LAUNCH_AS_TRUSTED_WEB_ACTIVITY));
+ }
+}
diff --git a/design/AndroidManifest.xml b/design/AndroidManifest.xml
index aa02181..0eb8b85 100644
--- a/design/AndroidManifest.xml
+++ b/design/AndroidManifest.xml
@@ -16,8 +16,4 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.support.design">
<uses-sdk android:minSdkVersion="14" />
- <application>
- <meta-data android:name="android.support.design.VERSION"
- android:value="${support-version}" />
- </application>
</manifest>
diff --git a/design/api/26.1.0.txt b/design/api/26.1.0.txt
new file mode 100644
index 0000000..602ee48
--- /dev/null
+++ b/design/api/26.1.0.txt
@@ -0,0 +1,618 @@
+package android.support.design.widget {
+
+ public class AppBarLayout extends android.widget.LinearLayout {
+ ctor public AppBarLayout(android.content.Context);
+ ctor public AppBarLayout(android.content.Context, android.util.AttributeSet);
+ method public void addOnOffsetChangedListener(android.support.design.widget.AppBarLayout.OnOffsetChangedListener);
+ method protected android.support.design.widget.AppBarLayout.LayoutParams generateDefaultLayoutParams();
+ method public android.support.design.widget.AppBarLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
+ method protected android.support.design.widget.AppBarLayout.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
+ method public deprecated float getTargetElevation();
+ method public final int getTotalScrollRange();
+ method public void removeOnOffsetChangedListener(android.support.design.widget.AppBarLayout.OnOffsetChangedListener);
+ method public void setExpanded(boolean);
+ method public void setExpanded(boolean, boolean);
+ method public deprecated void setTargetElevation(float);
+ }
+
+ public static class AppBarLayout.Behavior extends android.support.design.widget.HeaderBehavior {
+ ctor public AppBarLayout.Behavior();
+ ctor public AppBarLayout.Behavior(android.content.Context, android.util.AttributeSet);
+ method public boolean onLayoutChild(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, int);
+ method public boolean onMeasureChild(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, int, int, int, int);
+ method public void onNestedPreScroll(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, android.view.View, int, int, int[], int);
+ method public void onNestedScroll(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, android.view.View, int, int, int, int, int);
+ method public void onRestoreInstanceState(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, android.os.Parcelable);
+ method public android.os.Parcelable onSaveInstanceState(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout);
+ method public boolean onStartNestedScroll(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, android.view.View, android.view.View, int, int);
+ method public void onStopNestedScroll(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, android.view.View, int);
+ method public void setDragCallback(android.support.design.widget.AppBarLayout.Behavior.DragCallback);
+ }
+
+ public static abstract class AppBarLayout.Behavior.DragCallback {
+ ctor public AppBarLayout.Behavior.DragCallback();
+ method public abstract boolean canDrag(android.support.design.widget.AppBarLayout);
+ }
+
+ protected static class AppBarLayout.Behavior.SavedState extends android.support.v4.view.AbsSavedState {
+ ctor public AppBarLayout.Behavior.SavedState(android.os.Parcel, java.lang.ClassLoader);
+ ctor public AppBarLayout.Behavior.SavedState(android.os.Parcelable);
+ field public static final android.os.Parcelable.Creator<android.support.design.widget.AppBarLayout.Behavior.SavedState> CREATOR;
+ }
+
+ public static class AppBarLayout.LayoutParams extends android.widget.LinearLayout.LayoutParams {
+ ctor public AppBarLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
+ ctor public AppBarLayout.LayoutParams(int, int);
+ ctor public AppBarLayout.LayoutParams(int, int, float);
+ ctor public AppBarLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public AppBarLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ ctor public AppBarLayout.LayoutParams(android.widget.LinearLayout.LayoutParams);
+ ctor public AppBarLayout.LayoutParams(android.support.design.widget.AppBarLayout.LayoutParams);
+ method public int getScrollFlags();
+ method public android.view.animation.Interpolator getScrollInterpolator();
+ method public void setScrollFlags(int);
+ method public void setScrollInterpolator(android.view.animation.Interpolator);
+ field public static final int SCROLL_FLAG_ENTER_ALWAYS = 4; // 0x4
+ field public static final int SCROLL_FLAG_ENTER_ALWAYS_COLLAPSED = 8; // 0x8
+ field public static final int SCROLL_FLAG_EXIT_UNTIL_COLLAPSED = 2; // 0x2
+ field public static final int SCROLL_FLAG_SCROLL = 1; // 0x1
+ field public static final int SCROLL_FLAG_SNAP = 16; // 0x10
+ }
+
+ public static abstract interface AppBarLayout.OnOffsetChangedListener {
+ method public abstract void onOffsetChanged(android.support.design.widget.AppBarLayout, int);
+ }
+
+ public static class AppBarLayout.ScrollingViewBehavior extends android.support.design.widget.HeaderScrollingViewBehavior {
+ ctor public AppBarLayout.ScrollingViewBehavior();
+ ctor public AppBarLayout.ScrollingViewBehavior(android.content.Context, android.util.AttributeSet);
+ method public boolean layoutDependsOn(android.support.design.widget.CoordinatorLayout, android.view.View, android.view.View);
+ method public boolean onDependentViewChanged(android.support.design.widget.CoordinatorLayout, android.view.View, android.view.View);
+ method public boolean onRequestChildRectangleOnScreen(android.support.design.widget.CoordinatorLayout, android.view.View, android.graphics.Rect, boolean);
+ }
+
+ public abstract class BaseTransientBottomBar<B extends android.support.design.widget.BaseTransientBottomBar<B>> {
+ ctor protected BaseTransientBottomBar(android.view.ViewGroup, android.view.View, android.support.design.widget.BaseTransientBottomBar.ContentViewCallback);
+ method public B addCallback(android.support.design.widget.BaseTransientBottomBar.BaseCallback<B>);
+ method public void dismiss();
+ method public android.content.Context getContext();
+ method public int getDuration();
+ method public android.view.View getView();
+ method public boolean isShown();
+ method public boolean isShownOrQueued();
+ method public B removeCallback(android.support.design.widget.BaseTransientBottomBar.BaseCallback<B>);
+ method public B setDuration(int);
+ method public void show();
+ field public static final int LENGTH_INDEFINITE = -2; // 0xfffffffe
+ field public static final int LENGTH_LONG = 0; // 0x0
+ field public static final int LENGTH_SHORT = -1; // 0xffffffff
+ }
+
+ public static abstract class BaseTransientBottomBar.BaseCallback<B> {
+ ctor public BaseTransientBottomBar.BaseCallback();
+ method public void onDismissed(B, int);
+ method public void onShown(B);
+ field public static final int DISMISS_EVENT_ACTION = 1; // 0x1
+ field public static final int DISMISS_EVENT_CONSECUTIVE = 4; // 0x4
+ field public static final int DISMISS_EVENT_MANUAL = 3; // 0x3
+ field public static final int DISMISS_EVENT_SWIPE = 0; // 0x0
+ field public static final int DISMISS_EVENT_TIMEOUT = 2; // 0x2
+ }
+
+ public static abstract interface BaseTransientBottomBar.ContentViewCallback {
+ method public abstract void animateContentIn(int, int);
+ method public abstract void animateContentOut(int, int);
+ }
+
+ public class BottomNavigationView extends android.widget.FrameLayout {
+ ctor public BottomNavigationView(android.content.Context);
+ ctor public BottomNavigationView(android.content.Context, android.util.AttributeSet);
+ ctor public BottomNavigationView(android.content.Context, android.util.AttributeSet, int);
+ method public int getItemBackgroundResource();
+ method public android.content.res.ColorStateList getItemIconTintList();
+ method public android.content.res.ColorStateList getItemTextColor();
+ method public int getMaxItemCount();
+ method public android.view.Menu getMenu();
+ method public int getSelectedItemId();
+ method public void inflateMenu(int);
+ method public void setItemBackgroundResource(int);
+ method public void setItemIconTintList(android.content.res.ColorStateList);
+ method public void setItemTextColor(android.content.res.ColorStateList);
+ method public void setOnNavigationItemReselectedListener(android.support.design.widget.BottomNavigationView.OnNavigationItemReselectedListener);
+ method public void setOnNavigationItemSelectedListener(android.support.design.widget.BottomNavigationView.OnNavigationItemSelectedListener);
+ method public void setSelectedItemId(int);
+ }
+
+ public static abstract interface BottomNavigationView.OnNavigationItemReselectedListener {
+ method public abstract void onNavigationItemReselected(android.view.MenuItem);
+ }
+
+ public static abstract interface BottomNavigationView.OnNavigationItemSelectedListener {
+ method public abstract boolean onNavigationItemSelected(android.view.MenuItem);
+ }
+
+ public class BottomSheetBehavior<V extends android.view.View> extends android.support.design.widget.CoordinatorLayout.Behavior {
+ ctor public BottomSheetBehavior();
+ ctor public BottomSheetBehavior(android.content.Context, android.util.AttributeSet);
+ method public static <V extends android.view.View> android.support.design.widget.BottomSheetBehavior<V> from(V);
+ method public final int getPeekHeight();
+ method public boolean getSkipCollapsed();
+ method public final int getState();
+ method public boolean isHideable();
+ method public void onNestedPreScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, int, int, int[]);
+ method public boolean onStartNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, android.view.View, int);
+ method public void onStopNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View);
+ method public void setBottomSheetCallback(android.support.design.widget.BottomSheetBehavior.BottomSheetCallback);
+ method public void setHideable(boolean);
+ method public final void setPeekHeight(int);
+ method public void setSkipCollapsed(boolean);
+ method public final void setState(int);
+ field public static final int PEEK_HEIGHT_AUTO = -1; // 0xffffffff
+ field public static final int STATE_COLLAPSED = 4; // 0x4
+ field public static final int STATE_DRAGGING = 1; // 0x1
+ field public static final int STATE_EXPANDED = 3; // 0x3
+ field public static final int STATE_HIDDEN = 5; // 0x5
+ field public static final int STATE_SETTLING = 2; // 0x2
+ }
+
+ public static abstract class BottomSheetBehavior.BottomSheetCallback {
+ ctor public BottomSheetBehavior.BottomSheetCallback();
+ method public abstract void onSlide(android.view.View, float);
+ method public abstract void onStateChanged(android.view.View, int);
+ }
+
+ protected static class BottomSheetBehavior.SavedState extends android.support.v4.view.AbsSavedState {
+ ctor public BottomSheetBehavior.SavedState(android.os.Parcel);
+ ctor public BottomSheetBehavior.SavedState(android.os.Parcel, java.lang.ClassLoader);
+ ctor public BottomSheetBehavior.SavedState(android.os.Parcelable, int);
+ field public static final android.os.Parcelable.Creator<android.support.design.widget.BottomSheetBehavior.SavedState> CREATOR;
+ }
+
+ public class BottomSheetDialog extends android.support.v7.app.AppCompatDialog {
+ ctor public BottomSheetDialog(android.content.Context);
+ ctor public BottomSheetDialog(android.content.Context, int);
+ ctor protected BottomSheetDialog(android.content.Context, boolean, android.content.DialogInterface.OnCancelListener);
+ }
+
+ public class BottomSheetDialogFragment extends android.support.v7.app.AppCompatDialogFragment {
+ ctor public BottomSheetDialogFragment();
+ }
+
+ public class CollapsingToolbarLayout extends android.widget.FrameLayout {
+ ctor public CollapsingToolbarLayout(android.content.Context);
+ ctor public CollapsingToolbarLayout(android.content.Context, android.util.AttributeSet);
+ ctor public CollapsingToolbarLayout(android.content.Context, android.util.AttributeSet, int);
+ method protected android.support.design.widget.CollapsingToolbarLayout.LayoutParams generateDefaultLayoutParams();
+ method public android.widget.FrameLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
+ method protected android.widget.FrameLayout.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
+ method public int getCollapsedTitleGravity();
+ method public android.graphics.Typeface getCollapsedTitleTypeface();
+ method public android.graphics.drawable.Drawable getContentScrim();
+ method public int getExpandedTitleGravity();
+ method public int getExpandedTitleMarginBottom();
+ method public int getExpandedTitleMarginEnd();
+ method public int getExpandedTitleMarginStart();
+ method public int getExpandedTitleMarginTop();
+ method public android.graphics.Typeface getExpandedTitleTypeface();
+ method public long getScrimAnimationDuration();
+ method public int getScrimVisibleHeightTrigger();
+ method public android.graphics.drawable.Drawable getStatusBarScrim();
+ method public java.lang.CharSequence getTitle();
+ method public boolean isTitleEnabled();
+ method public void setCollapsedTitleGravity(int);
+ method public void setCollapsedTitleTextAppearance(int);
+ method public void setCollapsedTitleTextColor(int);
+ method public void setCollapsedTitleTextColor(android.content.res.ColorStateList);
+ method public void setCollapsedTitleTypeface(android.graphics.Typeface);
+ method public void setContentScrim(android.graphics.drawable.Drawable);
+ method public void setContentScrimColor(int);
+ method public void setContentScrimResource(int);
+ method public void setExpandedTitleColor(int);
+ method public void setExpandedTitleGravity(int);
+ method public void setExpandedTitleMargin(int, int, int, int);
+ method public void setExpandedTitleMarginBottom(int);
+ method public void setExpandedTitleMarginEnd(int);
+ method public void setExpandedTitleMarginStart(int);
+ method public void setExpandedTitleMarginTop(int);
+ method public void setExpandedTitleTextAppearance(int);
+ method public void setExpandedTitleTextColor(android.content.res.ColorStateList);
+ method public void setExpandedTitleTypeface(android.graphics.Typeface);
+ method public void setScrimAnimationDuration(long);
+ method public void setScrimVisibleHeightTrigger(int);
+ method public void setScrimsShown(boolean);
+ method public void setScrimsShown(boolean, boolean);
+ method public void setStatusBarScrim(android.graphics.drawable.Drawable);
+ method public void setStatusBarScrimColor(int);
+ method public void setStatusBarScrimResource(int);
+ method public void setTitle(java.lang.CharSequence);
+ method public void setTitleEnabled(boolean);
+ }
+
+ public static class CollapsingToolbarLayout.LayoutParams extends android.widget.FrameLayout.LayoutParams {
+ ctor public CollapsingToolbarLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
+ ctor public CollapsingToolbarLayout.LayoutParams(int, int);
+ ctor public CollapsingToolbarLayout.LayoutParams(int, int, int);
+ ctor public CollapsingToolbarLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public CollapsingToolbarLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ ctor public CollapsingToolbarLayout.LayoutParams(android.widget.FrameLayout.LayoutParams);
+ method public int getCollapseMode();
+ method public float getParallaxMultiplier();
+ method public void setCollapseMode(int);
+ method public void setParallaxMultiplier(float);
+ field public static final int COLLAPSE_MODE_OFF = 0; // 0x0
+ field public static final int COLLAPSE_MODE_PARALLAX = 2; // 0x2
+ field public static final int COLLAPSE_MODE_PIN = 1; // 0x1
+ }
+
+ public class CoordinatorLayout extends android.view.ViewGroup {
+ ctor public CoordinatorLayout(android.content.Context);
+ ctor public CoordinatorLayout(android.content.Context, android.util.AttributeSet);
+ ctor public CoordinatorLayout(android.content.Context, android.util.AttributeSet, int);
+ method public void dispatchDependentViewsChanged(android.view.View);
+ method public boolean doViewsOverlap(android.view.View, android.view.View);
+ method protected android.support.design.widget.CoordinatorLayout.LayoutParams generateDefaultLayoutParams();
+ method public android.support.design.widget.CoordinatorLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
+ method protected android.support.design.widget.CoordinatorLayout.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
+ method public java.util.List<android.view.View> getDependencies(android.view.View);
+ method public java.util.List<android.view.View> getDependents(android.view.View);
+ method public android.graphics.drawable.Drawable getStatusBarBackground();
+ method public boolean isPointInChildBounds(android.view.View, int, int);
+ method public void onAttachedToWindow();
+ method public void onDetachedFromWindow();
+ method public void onDraw(android.graphics.Canvas);
+ method protected void onLayout(boolean, int, int, int, int);
+ method public void onLayoutChild(android.view.View, int);
+ method public void onMeasureChild(android.view.View, int, int, int, int);
+ method public void onNestedPreScroll(android.view.View, int, int, int[], int);
+ method public void onNestedScroll(android.view.View, int, int, int, int, int);
+ method public void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
+ method public boolean onStartNestedScroll(android.view.View, android.view.View, int, int);
+ method public void onStopNestedScroll(android.view.View, int);
+ method public void setStatusBarBackground(android.graphics.drawable.Drawable);
+ method public void setStatusBarBackgroundColor(int);
+ method public void setStatusBarBackgroundResource(int);
+ }
+
+ public static abstract class CoordinatorLayout.Behavior<V extends android.view.View> {
+ ctor public CoordinatorLayout.Behavior();
+ ctor public CoordinatorLayout.Behavior(android.content.Context, android.util.AttributeSet);
+ method public boolean blocksInteractionBelow(android.support.design.widget.CoordinatorLayout, V);
+ method public boolean getInsetDodgeRect(android.support.design.widget.CoordinatorLayout, V, android.graphics.Rect);
+ method public int getScrimColor(android.support.design.widget.CoordinatorLayout, V);
+ method public float getScrimOpacity(android.support.design.widget.CoordinatorLayout, V);
+ method public static java.lang.Object getTag(android.view.View);
+ method public boolean layoutDependsOn(android.support.design.widget.CoordinatorLayout, V, android.view.View);
+ method public android.support.v4.view.WindowInsetsCompat onApplyWindowInsets(android.support.design.widget.CoordinatorLayout, V, android.support.v4.view.WindowInsetsCompat);
+ method public void onAttachedToLayoutParams(android.support.design.widget.CoordinatorLayout.LayoutParams);
+ method public boolean onDependentViewChanged(android.support.design.widget.CoordinatorLayout, V, android.view.View);
+ method public void onDependentViewRemoved(android.support.design.widget.CoordinatorLayout, V, android.view.View);
+ method public void onDetachedFromLayoutParams();
+ method public boolean onInterceptTouchEvent(android.support.design.widget.CoordinatorLayout, V, android.view.MotionEvent);
+ method public boolean onLayoutChild(android.support.design.widget.CoordinatorLayout, V, int);
+ method public boolean onMeasureChild(android.support.design.widget.CoordinatorLayout, V, int, int, int, int);
+ method public boolean onNestedFling(android.support.design.widget.CoordinatorLayout, V, android.view.View, float, float, boolean);
+ method public boolean onNestedPreFling(android.support.design.widget.CoordinatorLayout, V, android.view.View, float, float);
+ method public deprecated void onNestedPreScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, int, int, int[]);
+ method public void onNestedPreScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, int, int, int[], int);
+ method public deprecated void onNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, int, int, int, int);
+ method public void onNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, int, int, int, int, int);
+ method public deprecated void onNestedScrollAccepted(android.support.design.widget.CoordinatorLayout, V, android.view.View, android.view.View, int);
+ method public void onNestedScrollAccepted(android.support.design.widget.CoordinatorLayout, V, android.view.View, android.view.View, int, int);
+ method public boolean onRequestChildRectangleOnScreen(android.support.design.widget.CoordinatorLayout, V, android.graphics.Rect, boolean);
+ method public void onRestoreInstanceState(android.support.design.widget.CoordinatorLayout, V, android.os.Parcelable);
+ method public android.os.Parcelable onSaveInstanceState(android.support.design.widget.CoordinatorLayout, V);
+ method public deprecated boolean onStartNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, android.view.View, int);
+ method public boolean onStartNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, android.view.View, int, int);
+ method public deprecated void onStopNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View);
+ method public void onStopNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, int);
+ method public boolean onTouchEvent(android.support.design.widget.CoordinatorLayout, V, android.view.MotionEvent);
+ method public static void setTag(android.view.View, java.lang.Object);
+ }
+
+ public static abstract class CoordinatorLayout.DefaultBehavior implements java.lang.annotation.Annotation {
+ }
+
+ public static class CoordinatorLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+ ctor public CoordinatorLayout.LayoutParams(int, int);
+ ctor public CoordinatorLayout.LayoutParams(android.support.design.widget.CoordinatorLayout.LayoutParams);
+ ctor public CoordinatorLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ ctor public CoordinatorLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+ method public int getAnchorId();
+ method public android.support.design.widget.CoordinatorLayout.Behavior getBehavior();
+ method public void setAnchorId(int);
+ method public void setBehavior(android.support.design.widget.CoordinatorLayout.Behavior);
+ field public int anchorGravity;
+ field public int dodgeInsetEdges;
+ field public int gravity;
+ field public int insetEdge;
+ field public int keyline;
+ }
+
+ protected static class CoordinatorLayout.SavedState extends android.support.v4.view.AbsSavedState {
+ ctor public CoordinatorLayout.SavedState(android.os.Parcel, java.lang.ClassLoader);
+ ctor public CoordinatorLayout.SavedState(android.os.Parcelable);
+ field public static final android.os.Parcelable.Creator<android.support.design.widget.CoordinatorLayout.SavedState> CREATOR;
+ }
+
+ public class FloatingActionButton extends android.support.design.widget.VisibilityAwareImageButton {
+ ctor public FloatingActionButton(android.content.Context);
+ ctor public FloatingActionButton(android.content.Context, android.util.AttributeSet);
+ ctor public FloatingActionButton(android.content.Context, android.util.AttributeSet, int);
+ method public float getCompatElevation();
+ method public android.graphics.drawable.Drawable getContentBackground();
+ method public boolean getContentRect(android.graphics.Rect);
+ method public int getRippleColor();
+ method public int getSize();
+ method public boolean getUseCompatPadding();
+ method public void hide();
+ method public void hide(android.support.design.widget.FloatingActionButton.OnVisibilityChangedListener);
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+ method public void setCompatElevation(float);
+ method public void setRippleColor(int);
+ method public void setSize(int);
+ method public void setUseCompatPadding(boolean);
+ method public void show();
+ method public void show(android.support.design.widget.FloatingActionButton.OnVisibilityChangedListener);
+ field public static final int SIZE_AUTO = -1; // 0xffffffff
+ field public static final int SIZE_MINI = 1; // 0x1
+ field public static final int SIZE_NORMAL = 0; // 0x0
+ }
+
+ public static class FloatingActionButton.Behavior extends android.support.design.widget.CoordinatorLayout.Behavior {
+ ctor public FloatingActionButton.Behavior();
+ ctor public FloatingActionButton.Behavior(android.content.Context, android.util.AttributeSet);
+ method public boolean getInsetDodgeRect(android.support.design.widget.CoordinatorLayout, android.support.design.widget.FloatingActionButton, android.graphics.Rect);
+ method public boolean isAutoHideEnabled();
+ method public boolean onDependentViewChanged(android.support.design.widget.CoordinatorLayout, android.support.design.widget.FloatingActionButton, android.view.View);
+ method public boolean onLayoutChild(android.support.design.widget.CoordinatorLayout, android.support.design.widget.FloatingActionButton, int);
+ method public void setAutoHideEnabled(boolean);
+ }
+
+ public static abstract class FloatingActionButton.OnVisibilityChangedListener {
+ ctor public FloatingActionButton.OnVisibilityChangedListener();
+ method public void onHidden(android.support.design.widget.FloatingActionButton);
+ method public void onShown(android.support.design.widget.FloatingActionButton);
+ }
+
+ abstract class HeaderBehavior<V extends android.view.View> extends android.support.design.widget.ViewOffsetBehavior {
+ ctor public HeaderBehavior();
+ ctor public HeaderBehavior(android.content.Context, android.util.AttributeSet);
+ }
+
+ abstract class HeaderScrollingViewBehavior extends android.support.design.widget.ViewOffsetBehavior {
+ ctor public HeaderScrollingViewBehavior();
+ ctor public HeaderScrollingViewBehavior(android.content.Context, android.util.AttributeSet);
+ method public final int getOverlayTop();
+ method protected void layoutChild(android.support.design.widget.CoordinatorLayout, android.view.View, int);
+ method public boolean onMeasureChild(android.support.design.widget.CoordinatorLayout, android.view.View, int, int, int, int);
+ method public final void setOverlayTop(int);
+ }
+
+ public class NavigationView extends android.widget.FrameLayout {
+ ctor public NavigationView(android.content.Context);
+ ctor public NavigationView(android.content.Context, android.util.AttributeSet);
+ ctor public NavigationView(android.content.Context, android.util.AttributeSet, int);
+ method public void addHeaderView(android.view.View);
+ method public int getHeaderCount();
+ method public android.view.View getHeaderView(int);
+ method public android.graphics.drawable.Drawable getItemBackground();
+ method public android.content.res.ColorStateList getItemIconTintList();
+ method public android.content.res.ColorStateList getItemTextColor();
+ method public android.view.Menu getMenu();
+ method public android.view.View inflateHeaderView(int);
+ method public void inflateMenu(int);
+ method public void removeHeaderView(android.view.View);
+ method public void setCheckedItem(int);
+ method public void setItemBackground(android.graphics.drawable.Drawable);
+ method public void setItemBackgroundResource(int);
+ method public void setItemIconTintList(android.content.res.ColorStateList);
+ method public void setItemTextAppearance(int);
+ method public void setItemTextColor(android.content.res.ColorStateList);
+ method public void setNavigationItemSelectedListener(android.support.design.widget.NavigationView.OnNavigationItemSelectedListener);
+ }
+
+ public static abstract interface NavigationView.OnNavigationItemSelectedListener {
+ method public abstract boolean onNavigationItemSelected(android.view.MenuItem);
+ }
+
+ public static class NavigationView.SavedState extends android.support.v4.view.AbsSavedState {
+ ctor public NavigationView.SavedState(android.os.Parcel, java.lang.ClassLoader);
+ ctor public NavigationView.SavedState(android.os.Parcelable);
+ field public static final android.os.Parcelable.Creator<android.support.design.widget.NavigationView.SavedState> CREATOR;
+ field public android.os.Bundle menuState;
+ }
+
+ public final class Snackbar extends android.support.design.widget.BaseTransientBottomBar {
+ method public static android.support.design.widget.Snackbar make(android.view.View, java.lang.CharSequence, int);
+ method public static android.support.design.widget.Snackbar make(android.view.View, int, int);
+ method public android.support.design.widget.Snackbar setAction(int, android.view.View.OnClickListener);
+ method public android.support.design.widget.Snackbar setAction(java.lang.CharSequence, android.view.View.OnClickListener);
+ method public android.support.design.widget.Snackbar setActionTextColor(android.content.res.ColorStateList);
+ method public android.support.design.widget.Snackbar setActionTextColor(int);
+ method public deprecated android.support.design.widget.Snackbar setCallback(android.support.design.widget.Snackbar.Callback);
+ method public android.support.design.widget.Snackbar setText(java.lang.CharSequence);
+ method public android.support.design.widget.Snackbar setText(int);
+ field public static final int LENGTH_INDEFINITE = -2; // 0xfffffffe
+ field public static final int LENGTH_LONG = 0; // 0x0
+ field public static final int LENGTH_SHORT = -1; // 0xffffffff
+ }
+
+ public static class Snackbar.Callback extends android.support.design.widget.BaseTransientBottomBar.BaseCallback {
+ ctor public Snackbar.Callback();
+ method public void onDismissed(android.support.design.widget.Snackbar, int);
+ method public void onShown(android.support.design.widget.Snackbar);
+ field public static final int DISMISS_EVENT_ACTION = 1; // 0x1
+ field public static final int DISMISS_EVENT_CONSECUTIVE = 4; // 0x4
+ field public static final int DISMISS_EVENT_MANUAL = 3; // 0x3
+ field public static final int DISMISS_EVENT_SWIPE = 0; // 0x0
+ field public static final int DISMISS_EVENT_TIMEOUT = 2; // 0x2
+ }
+
+ public class SwipeDismissBehavior<V extends android.view.View> extends android.support.design.widget.CoordinatorLayout.Behavior {
+ ctor public SwipeDismissBehavior();
+ method public boolean canSwipeDismissView(android.view.View);
+ method public int getDragState();
+ method public void setDragDismissDistance(float);
+ method public void setEndAlphaSwipeDistance(float);
+ method public void setListener(android.support.design.widget.SwipeDismissBehavior.OnDismissListener);
+ method public void setSensitivity(float);
+ method public void setStartAlphaSwipeDistance(float);
+ method public void setSwipeDirection(int);
+ field public static final int STATE_DRAGGING = 1; // 0x1
+ field public static final int STATE_IDLE = 0; // 0x0
+ field public static final int STATE_SETTLING = 2; // 0x2
+ field public static final int SWIPE_DIRECTION_ANY = 2; // 0x2
+ field public static final int SWIPE_DIRECTION_END_TO_START = 1; // 0x1
+ field public static final int SWIPE_DIRECTION_START_TO_END = 0; // 0x0
+ }
+
+ public static abstract interface SwipeDismissBehavior.OnDismissListener {
+ method public abstract void onDismiss(android.view.View);
+ method public abstract void onDragStateChanged(int);
+ }
+
+ public final class TabItem extends android.view.View {
+ ctor public TabItem(android.content.Context);
+ ctor public TabItem(android.content.Context, android.util.AttributeSet);
+ }
+
+ public class TabLayout extends android.widget.HorizontalScrollView {
+ ctor public TabLayout(android.content.Context);
+ ctor public TabLayout(android.content.Context, android.util.AttributeSet);
+ ctor public TabLayout(android.content.Context, android.util.AttributeSet, int);
+ method public void addOnTabSelectedListener(android.support.design.widget.TabLayout.OnTabSelectedListener);
+ method public void addTab(android.support.design.widget.TabLayout.Tab);
+ method public void addTab(android.support.design.widget.TabLayout.Tab, int);
+ method public void addTab(android.support.design.widget.TabLayout.Tab, boolean);
+ method public void addTab(android.support.design.widget.TabLayout.Tab, int, boolean);
+ method public void clearOnTabSelectedListeners();
+ method public android.widget.FrameLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
+ method public int getSelectedTabPosition();
+ method public android.support.design.widget.TabLayout.Tab getTabAt(int);
+ method public int getTabCount();
+ method public int getTabGravity();
+ method public int getTabMode();
+ method public android.content.res.ColorStateList getTabTextColors();
+ method public android.support.design.widget.TabLayout.Tab newTab();
+ method public void removeAllTabs();
+ method public void removeOnTabSelectedListener(android.support.design.widget.TabLayout.OnTabSelectedListener);
+ method public void removeTab(android.support.design.widget.TabLayout.Tab);
+ method public void removeTabAt(int);
+ method public deprecated void setOnTabSelectedListener(android.support.design.widget.TabLayout.OnTabSelectedListener);
+ method public void setScrollPosition(int, float, boolean);
+ method public void setSelectedTabIndicatorColor(int);
+ method public void setSelectedTabIndicatorHeight(int);
+ method public void setTabGravity(int);
+ method public void setTabMode(int);
+ method public void setTabTextColors(android.content.res.ColorStateList);
+ method public void setTabTextColors(int, int);
+ method public deprecated void setTabsFromPagerAdapter(android.support.v4.view.PagerAdapter);
+ method public void setupWithViewPager(android.support.v4.view.ViewPager);
+ method public void setupWithViewPager(android.support.v4.view.ViewPager, boolean);
+ field public static final int GRAVITY_CENTER = 1; // 0x1
+ field public static final int GRAVITY_FILL = 0; // 0x0
+ field public static final int MODE_FIXED = 1; // 0x1
+ field public static final int MODE_SCROLLABLE = 0; // 0x0
+ }
+
+ public static abstract interface TabLayout.OnTabSelectedListener {
+ method public abstract void onTabReselected(android.support.design.widget.TabLayout.Tab);
+ method public abstract void onTabSelected(android.support.design.widget.TabLayout.Tab);
+ method public abstract void onTabUnselected(android.support.design.widget.TabLayout.Tab);
+ }
+
+ public static final class TabLayout.Tab {
+ method public java.lang.CharSequence getContentDescription();
+ method public android.view.View getCustomView();
+ method public android.graphics.drawable.Drawable getIcon();
+ method public int getPosition();
+ method public java.lang.Object getTag();
+ method public java.lang.CharSequence getText();
+ method public boolean isSelected();
+ method public void select();
+ method public android.support.design.widget.TabLayout.Tab setContentDescription(int);
+ method public android.support.design.widget.TabLayout.Tab setContentDescription(java.lang.CharSequence);
+ method public android.support.design.widget.TabLayout.Tab setCustomView(android.view.View);
+ method public android.support.design.widget.TabLayout.Tab setCustomView(int);
+ method public android.support.design.widget.TabLayout.Tab setIcon(android.graphics.drawable.Drawable);
+ method public android.support.design.widget.TabLayout.Tab setIcon(int);
+ method public android.support.design.widget.TabLayout.Tab setTag(java.lang.Object);
+ method public android.support.design.widget.TabLayout.Tab setText(java.lang.CharSequence);
+ method public android.support.design.widget.TabLayout.Tab setText(int);
+ field public static final int INVALID_POSITION = -1; // 0xffffffff
+ }
+
+ public static class TabLayout.TabLayoutOnPageChangeListener implements android.support.v4.view.ViewPager.OnPageChangeListener {
+ ctor public TabLayout.TabLayoutOnPageChangeListener(android.support.design.widget.TabLayout);
+ method public void onPageScrollStateChanged(int);
+ method public void onPageScrolled(int, float, int);
+ method public void onPageSelected(int);
+ }
+
+ public static class TabLayout.ViewPagerOnTabSelectedListener implements android.support.design.widget.TabLayout.OnTabSelectedListener {
+ ctor public TabLayout.ViewPagerOnTabSelectedListener(android.support.v4.view.ViewPager);
+ method public void onTabReselected(android.support.design.widget.TabLayout.Tab);
+ method public void onTabSelected(android.support.design.widget.TabLayout.Tab);
+ method public void onTabUnselected(android.support.design.widget.TabLayout.Tab);
+ }
+
+ public class TextInputEditText extends android.support.v7.widget.AppCompatEditText {
+ ctor public TextInputEditText(android.content.Context);
+ ctor public TextInputEditText(android.content.Context, android.util.AttributeSet);
+ ctor public TextInputEditText(android.content.Context, android.util.AttributeSet, int);
+ }
+
+ public class TextInputLayout extends android.widget.LinearLayout {
+ ctor public TextInputLayout(android.content.Context);
+ ctor public TextInputLayout(android.content.Context, android.util.AttributeSet);
+ ctor public TextInputLayout(android.content.Context, android.util.AttributeSet, int);
+ method public int getCounterMaxLength();
+ method public android.widget.EditText getEditText();
+ method public java.lang.CharSequence getError();
+ method public java.lang.CharSequence getHint();
+ method public java.lang.CharSequence getPasswordVisibilityToggleContentDescription();
+ method public android.graphics.drawable.Drawable getPasswordVisibilityToggleDrawable();
+ method public android.graphics.Typeface getTypeface();
+ method public boolean isCounterEnabled();
+ method public boolean isErrorEnabled();
+ method public boolean isHintAnimationEnabled();
+ method public boolean isHintEnabled();
+ method public boolean isPasswordVisibilityToggleEnabled();
+ method public android.os.Parcelable onSaveInstanceState();
+ method public void setCounterEnabled(boolean);
+ method public void setCounterMaxLength(int);
+ method public void setError(java.lang.CharSequence);
+ method public void setErrorEnabled(boolean);
+ method public void setErrorTextAppearance(int);
+ method public void setHint(java.lang.CharSequence);
+ method public void setHintAnimationEnabled(boolean);
+ method public void setHintEnabled(boolean);
+ method public void setHintTextAppearance(int);
+ method public void setPasswordVisibilityToggleContentDescription(int);
+ method public void setPasswordVisibilityToggleContentDescription(java.lang.CharSequence);
+ method public void setPasswordVisibilityToggleDrawable(int);
+ method public void setPasswordVisibilityToggleDrawable(android.graphics.drawable.Drawable);
+ method public void setPasswordVisibilityToggleEnabled(boolean);
+ method public void setPasswordVisibilityToggleTintList(android.content.res.ColorStateList);
+ method public void setPasswordVisibilityToggleTintMode(android.graphics.PorterDuff.Mode);
+ method public void setTypeface(android.graphics.Typeface);
+ }
+
+ class ViewOffsetBehavior<V extends android.view.View> extends android.support.design.widget.CoordinatorLayout.Behavior {
+ ctor public ViewOffsetBehavior();
+ ctor public ViewOffsetBehavior(android.content.Context, android.util.AttributeSet);
+ method public int getLeftAndRightOffset();
+ method public int getTopAndBottomOffset();
+ method protected void layoutChild(android.support.design.widget.CoordinatorLayout, V, int);
+ method public boolean setLeftAndRightOffset(int);
+ method public boolean setTopAndBottomOffset(int);
+ }
+
+ class VisibilityAwareImageButton extends android.widget.ImageButton {
+ ctor public VisibilityAwareImageButton(android.content.Context);
+ ctor public VisibilityAwareImageButton(android.content.Context, android.util.AttributeSet);
+ ctor public VisibilityAwareImageButton(android.content.Context, android.util.AttributeSet, int);
+ }
+
+}
+
diff --git a/design/api/27.0.0.txt b/design/api/27.0.0.txt
new file mode 100644
index 0000000..602ee48
--- /dev/null
+++ b/design/api/27.0.0.txt
@@ -0,0 +1,618 @@
+package android.support.design.widget {
+
+ public class AppBarLayout extends android.widget.LinearLayout {
+ ctor public AppBarLayout(android.content.Context);
+ ctor public AppBarLayout(android.content.Context, android.util.AttributeSet);
+ method public void addOnOffsetChangedListener(android.support.design.widget.AppBarLayout.OnOffsetChangedListener);
+ method protected android.support.design.widget.AppBarLayout.LayoutParams generateDefaultLayoutParams();
+ method public android.support.design.widget.AppBarLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
+ method protected android.support.design.widget.AppBarLayout.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
+ method public deprecated float getTargetElevation();
+ method public final int getTotalScrollRange();
+ method public void removeOnOffsetChangedListener(android.support.design.widget.AppBarLayout.OnOffsetChangedListener);
+ method public void setExpanded(boolean);
+ method public void setExpanded(boolean, boolean);
+ method public deprecated void setTargetElevation(float);
+ }
+
+ public static class AppBarLayout.Behavior extends android.support.design.widget.HeaderBehavior {
+ ctor public AppBarLayout.Behavior();
+ ctor public AppBarLayout.Behavior(android.content.Context, android.util.AttributeSet);
+ method public boolean onLayoutChild(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, int);
+ method public boolean onMeasureChild(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, int, int, int, int);
+ method public void onNestedPreScroll(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, android.view.View, int, int, int[], int);
+ method public void onNestedScroll(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, android.view.View, int, int, int, int, int);
+ method public void onRestoreInstanceState(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, android.os.Parcelable);
+ method public android.os.Parcelable onSaveInstanceState(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout);
+ method public boolean onStartNestedScroll(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, android.view.View, android.view.View, int, int);
+ method public void onStopNestedScroll(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, android.view.View, int);
+ method public void setDragCallback(android.support.design.widget.AppBarLayout.Behavior.DragCallback);
+ }
+
+ public static abstract class AppBarLayout.Behavior.DragCallback {
+ ctor public AppBarLayout.Behavior.DragCallback();
+ method public abstract boolean canDrag(android.support.design.widget.AppBarLayout);
+ }
+
+ protected static class AppBarLayout.Behavior.SavedState extends android.support.v4.view.AbsSavedState {
+ ctor public AppBarLayout.Behavior.SavedState(android.os.Parcel, java.lang.ClassLoader);
+ ctor public AppBarLayout.Behavior.SavedState(android.os.Parcelable);
+ field public static final android.os.Parcelable.Creator<android.support.design.widget.AppBarLayout.Behavior.SavedState> CREATOR;
+ }
+
+ public static class AppBarLayout.LayoutParams extends android.widget.LinearLayout.LayoutParams {
+ ctor public AppBarLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
+ ctor public AppBarLayout.LayoutParams(int, int);
+ ctor public AppBarLayout.LayoutParams(int, int, float);
+ ctor public AppBarLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public AppBarLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ ctor public AppBarLayout.LayoutParams(android.widget.LinearLayout.LayoutParams);
+ ctor public AppBarLayout.LayoutParams(android.support.design.widget.AppBarLayout.LayoutParams);
+ method public int getScrollFlags();
+ method public android.view.animation.Interpolator getScrollInterpolator();
+ method public void setScrollFlags(int);
+ method public void setScrollInterpolator(android.view.animation.Interpolator);
+ field public static final int SCROLL_FLAG_ENTER_ALWAYS = 4; // 0x4
+ field public static final int SCROLL_FLAG_ENTER_ALWAYS_COLLAPSED = 8; // 0x8
+ field public static final int SCROLL_FLAG_EXIT_UNTIL_COLLAPSED = 2; // 0x2
+ field public static final int SCROLL_FLAG_SCROLL = 1; // 0x1
+ field public static final int SCROLL_FLAG_SNAP = 16; // 0x10
+ }
+
+ public static abstract interface AppBarLayout.OnOffsetChangedListener {
+ method public abstract void onOffsetChanged(android.support.design.widget.AppBarLayout, int);
+ }
+
+ public static class AppBarLayout.ScrollingViewBehavior extends android.support.design.widget.HeaderScrollingViewBehavior {
+ ctor public AppBarLayout.ScrollingViewBehavior();
+ ctor public AppBarLayout.ScrollingViewBehavior(android.content.Context, android.util.AttributeSet);
+ method public boolean layoutDependsOn(android.support.design.widget.CoordinatorLayout, android.view.View, android.view.View);
+ method public boolean onDependentViewChanged(android.support.design.widget.CoordinatorLayout, android.view.View, android.view.View);
+ method public boolean onRequestChildRectangleOnScreen(android.support.design.widget.CoordinatorLayout, android.view.View, android.graphics.Rect, boolean);
+ }
+
+ public abstract class BaseTransientBottomBar<B extends android.support.design.widget.BaseTransientBottomBar<B>> {
+ ctor protected BaseTransientBottomBar(android.view.ViewGroup, android.view.View, android.support.design.widget.BaseTransientBottomBar.ContentViewCallback);
+ method public B addCallback(android.support.design.widget.BaseTransientBottomBar.BaseCallback<B>);
+ method public void dismiss();
+ method public android.content.Context getContext();
+ method public int getDuration();
+ method public android.view.View getView();
+ method public boolean isShown();
+ method public boolean isShownOrQueued();
+ method public B removeCallback(android.support.design.widget.BaseTransientBottomBar.BaseCallback<B>);
+ method public B setDuration(int);
+ method public void show();
+ field public static final int LENGTH_INDEFINITE = -2; // 0xfffffffe
+ field public static final int LENGTH_LONG = 0; // 0x0
+ field public static final int LENGTH_SHORT = -1; // 0xffffffff
+ }
+
+ public static abstract class BaseTransientBottomBar.BaseCallback<B> {
+ ctor public BaseTransientBottomBar.BaseCallback();
+ method public void onDismissed(B, int);
+ method public void onShown(B);
+ field public static final int DISMISS_EVENT_ACTION = 1; // 0x1
+ field public static final int DISMISS_EVENT_CONSECUTIVE = 4; // 0x4
+ field public static final int DISMISS_EVENT_MANUAL = 3; // 0x3
+ field public static final int DISMISS_EVENT_SWIPE = 0; // 0x0
+ field public static final int DISMISS_EVENT_TIMEOUT = 2; // 0x2
+ }
+
+ public static abstract interface BaseTransientBottomBar.ContentViewCallback {
+ method public abstract void animateContentIn(int, int);
+ method public abstract void animateContentOut(int, int);
+ }
+
+ public class BottomNavigationView extends android.widget.FrameLayout {
+ ctor public BottomNavigationView(android.content.Context);
+ ctor public BottomNavigationView(android.content.Context, android.util.AttributeSet);
+ ctor public BottomNavigationView(android.content.Context, android.util.AttributeSet, int);
+ method public int getItemBackgroundResource();
+ method public android.content.res.ColorStateList getItemIconTintList();
+ method public android.content.res.ColorStateList getItemTextColor();
+ method public int getMaxItemCount();
+ method public android.view.Menu getMenu();
+ method public int getSelectedItemId();
+ method public void inflateMenu(int);
+ method public void setItemBackgroundResource(int);
+ method public void setItemIconTintList(android.content.res.ColorStateList);
+ method public void setItemTextColor(android.content.res.ColorStateList);
+ method public void setOnNavigationItemReselectedListener(android.support.design.widget.BottomNavigationView.OnNavigationItemReselectedListener);
+ method public void setOnNavigationItemSelectedListener(android.support.design.widget.BottomNavigationView.OnNavigationItemSelectedListener);
+ method public void setSelectedItemId(int);
+ }
+
+ public static abstract interface BottomNavigationView.OnNavigationItemReselectedListener {
+ method public abstract void onNavigationItemReselected(android.view.MenuItem);
+ }
+
+ public static abstract interface BottomNavigationView.OnNavigationItemSelectedListener {
+ method public abstract boolean onNavigationItemSelected(android.view.MenuItem);
+ }
+
+ public class BottomSheetBehavior<V extends android.view.View> extends android.support.design.widget.CoordinatorLayout.Behavior {
+ ctor public BottomSheetBehavior();
+ ctor public BottomSheetBehavior(android.content.Context, android.util.AttributeSet);
+ method public static <V extends android.view.View> android.support.design.widget.BottomSheetBehavior<V> from(V);
+ method public final int getPeekHeight();
+ method public boolean getSkipCollapsed();
+ method public final int getState();
+ method public boolean isHideable();
+ method public void onNestedPreScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, int, int, int[]);
+ method public boolean onStartNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, android.view.View, int);
+ method public void onStopNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View);
+ method public void setBottomSheetCallback(android.support.design.widget.BottomSheetBehavior.BottomSheetCallback);
+ method public void setHideable(boolean);
+ method public final void setPeekHeight(int);
+ method public void setSkipCollapsed(boolean);
+ method public final void setState(int);
+ field public static final int PEEK_HEIGHT_AUTO = -1; // 0xffffffff
+ field public static final int STATE_COLLAPSED = 4; // 0x4
+ field public static final int STATE_DRAGGING = 1; // 0x1
+ field public static final int STATE_EXPANDED = 3; // 0x3
+ field public static final int STATE_HIDDEN = 5; // 0x5
+ field public static final int STATE_SETTLING = 2; // 0x2
+ }
+
+ public static abstract class BottomSheetBehavior.BottomSheetCallback {
+ ctor public BottomSheetBehavior.BottomSheetCallback();
+ method public abstract void onSlide(android.view.View, float);
+ method public abstract void onStateChanged(android.view.View, int);
+ }
+
+ protected static class BottomSheetBehavior.SavedState extends android.support.v4.view.AbsSavedState {
+ ctor public BottomSheetBehavior.SavedState(android.os.Parcel);
+ ctor public BottomSheetBehavior.SavedState(android.os.Parcel, java.lang.ClassLoader);
+ ctor public BottomSheetBehavior.SavedState(android.os.Parcelable, int);
+ field public static final android.os.Parcelable.Creator<android.support.design.widget.BottomSheetBehavior.SavedState> CREATOR;
+ }
+
+ public class BottomSheetDialog extends android.support.v7.app.AppCompatDialog {
+ ctor public BottomSheetDialog(android.content.Context);
+ ctor public BottomSheetDialog(android.content.Context, int);
+ ctor protected BottomSheetDialog(android.content.Context, boolean, android.content.DialogInterface.OnCancelListener);
+ }
+
+ public class BottomSheetDialogFragment extends android.support.v7.app.AppCompatDialogFragment {
+ ctor public BottomSheetDialogFragment();
+ }
+
+ public class CollapsingToolbarLayout extends android.widget.FrameLayout {
+ ctor public CollapsingToolbarLayout(android.content.Context);
+ ctor public CollapsingToolbarLayout(android.content.Context, android.util.AttributeSet);
+ ctor public CollapsingToolbarLayout(android.content.Context, android.util.AttributeSet, int);
+ method protected android.support.design.widget.CollapsingToolbarLayout.LayoutParams generateDefaultLayoutParams();
+ method public android.widget.FrameLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
+ method protected android.widget.FrameLayout.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
+ method public int getCollapsedTitleGravity();
+ method public android.graphics.Typeface getCollapsedTitleTypeface();
+ method public android.graphics.drawable.Drawable getContentScrim();
+ method public int getExpandedTitleGravity();
+ method public int getExpandedTitleMarginBottom();
+ method public int getExpandedTitleMarginEnd();
+ method public int getExpandedTitleMarginStart();
+ method public int getExpandedTitleMarginTop();
+ method public android.graphics.Typeface getExpandedTitleTypeface();
+ method public long getScrimAnimationDuration();
+ method public int getScrimVisibleHeightTrigger();
+ method public android.graphics.drawable.Drawable getStatusBarScrim();
+ method public java.lang.CharSequence getTitle();
+ method public boolean isTitleEnabled();
+ method public void setCollapsedTitleGravity(int);
+ method public void setCollapsedTitleTextAppearance(int);
+ method public void setCollapsedTitleTextColor(int);
+ method public void setCollapsedTitleTextColor(android.content.res.ColorStateList);
+ method public void setCollapsedTitleTypeface(android.graphics.Typeface);
+ method public void setContentScrim(android.graphics.drawable.Drawable);
+ method public void setContentScrimColor(int);
+ method public void setContentScrimResource(int);
+ method public void setExpandedTitleColor(int);
+ method public void setExpandedTitleGravity(int);
+ method public void setExpandedTitleMargin(int, int, int, int);
+ method public void setExpandedTitleMarginBottom(int);
+ method public void setExpandedTitleMarginEnd(int);
+ method public void setExpandedTitleMarginStart(int);
+ method public void setExpandedTitleMarginTop(int);
+ method public void setExpandedTitleTextAppearance(int);
+ method public void setExpandedTitleTextColor(android.content.res.ColorStateList);
+ method public void setExpandedTitleTypeface(android.graphics.Typeface);
+ method public void setScrimAnimationDuration(long);
+ method public void setScrimVisibleHeightTrigger(int);
+ method public void setScrimsShown(boolean);
+ method public void setScrimsShown(boolean, boolean);
+ method public void setStatusBarScrim(android.graphics.drawable.Drawable);
+ method public void setStatusBarScrimColor(int);
+ method public void setStatusBarScrimResource(int);
+ method public void setTitle(java.lang.CharSequence);
+ method public void setTitleEnabled(boolean);
+ }
+
+ public static class CollapsingToolbarLayout.LayoutParams extends android.widget.FrameLayout.LayoutParams {
+ ctor public CollapsingToolbarLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
+ ctor public CollapsingToolbarLayout.LayoutParams(int, int);
+ ctor public CollapsingToolbarLayout.LayoutParams(int, int, int);
+ ctor public CollapsingToolbarLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public CollapsingToolbarLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ ctor public CollapsingToolbarLayout.LayoutParams(android.widget.FrameLayout.LayoutParams);
+ method public int getCollapseMode();
+ method public float getParallaxMultiplier();
+ method public void setCollapseMode(int);
+ method public void setParallaxMultiplier(float);
+ field public static final int COLLAPSE_MODE_OFF = 0; // 0x0
+ field public static final int COLLAPSE_MODE_PARALLAX = 2; // 0x2
+ field public static final int COLLAPSE_MODE_PIN = 1; // 0x1
+ }
+
+ public class CoordinatorLayout extends android.view.ViewGroup {
+ ctor public CoordinatorLayout(android.content.Context);
+ ctor public CoordinatorLayout(android.content.Context, android.util.AttributeSet);
+ ctor public CoordinatorLayout(android.content.Context, android.util.AttributeSet, int);
+ method public void dispatchDependentViewsChanged(android.view.View);
+ method public boolean doViewsOverlap(android.view.View, android.view.View);
+ method protected android.support.design.widget.CoordinatorLayout.LayoutParams generateDefaultLayoutParams();
+ method public android.support.design.widget.CoordinatorLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
+ method protected android.support.design.widget.CoordinatorLayout.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
+ method public java.util.List<android.view.View> getDependencies(android.view.View);
+ method public java.util.List<android.view.View> getDependents(android.view.View);
+ method public android.graphics.drawable.Drawable getStatusBarBackground();
+ method public boolean isPointInChildBounds(android.view.View, int, int);
+ method public void onAttachedToWindow();
+ method public void onDetachedFromWindow();
+ method public void onDraw(android.graphics.Canvas);
+ method protected void onLayout(boolean, int, int, int, int);
+ method public void onLayoutChild(android.view.View, int);
+ method public void onMeasureChild(android.view.View, int, int, int, int);
+ method public void onNestedPreScroll(android.view.View, int, int, int[], int);
+ method public void onNestedScroll(android.view.View, int, int, int, int, int);
+ method public void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
+ method public boolean onStartNestedScroll(android.view.View, android.view.View, int, int);
+ method public void onStopNestedScroll(android.view.View, int);
+ method public void setStatusBarBackground(android.graphics.drawable.Drawable);
+ method public void setStatusBarBackgroundColor(int);
+ method public void setStatusBarBackgroundResource(int);
+ }
+
+ public static abstract class CoordinatorLayout.Behavior<V extends android.view.View> {
+ ctor public CoordinatorLayout.Behavior();
+ ctor public CoordinatorLayout.Behavior(android.content.Context, android.util.AttributeSet);
+ method public boolean blocksInteractionBelow(android.support.design.widget.CoordinatorLayout, V);
+ method public boolean getInsetDodgeRect(android.support.design.widget.CoordinatorLayout, V, android.graphics.Rect);
+ method public int getScrimColor(android.support.design.widget.CoordinatorLayout, V);
+ method public float getScrimOpacity(android.support.design.widget.CoordinatorLayout, V);
+ method public static java.lang.Object getTag(android.view.View);
+ method public boolean layoutDependsOn(android.support.design.widget.CoordinatorLayout, V, android.view.View);
+ method public android.support.v4.view.WindowInsetsCompat onApplyWindowInsets(android.support.design.widget.CoordinatorLayout, V, android.support.v4.view.WindowInsetsCompat);
+ method public void onAttachedToLayoutParams(android.support.design.widget.CoordinatorLayout.LayoutParams);
+ method public boolean onDependentViewChanged(android.support.design.widget.CoordinatorLayout, V, android.view.View);
+ method public void onDependentViewRemoved(android.support.design.widget.CoordinatorLayout, V, android.view.View);
+ method public void onDetachedFromLayoutParams();
+ method public boolean onInterceptTouchEvent(android.support.design.widget.CoordinatorLayout, V, android.view.MotionEvent);
+ method public boolean onLayoutChild(android.support.design.widget.CoordinatorLayout, V, int);
+ method public boolean onMeasureChild(android.support.design.widget.CoordinatorLayout, V, int, int, int, int);
+ method public boolean onNestedFling(android.support.design.widget.CoordinatorLayout, V, android.view.View, float, float, boolean);
+ method public boolean onNestedPreFling(android.support.design.widget.CoordinatorLayout, V, android.view.View, float, float);
+ method public deprecated void onNestedPreScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, int, int, int[]);
+ method public void onNestedPreScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, int, int, int[], int);
+ method public deprecated void onNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, int, int, int, int);
+ method public void onNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, int, int, int, int, int);
+ method public deprecated void onNestedScrollAccepted(android.support.design.widget.CoordinatorLayout, V, android.view.View, android.view.View, int);
+ method public void onNestedScrollAccepted(android.support.design.widget.CoordinatorLayout, V, android.view.View, android.view.View, int, int);
+ method public boolean onRequestChildRectangleOnScreen(android.support.design.widget.CoordinatorLayout, V, android.graphics.Rect, boolean);
+ method public void onRestoreInstanceState(android.support.design.widget.CoordinatorLayout, V, android.os.Parcelable);
+ method public android.os.Parcelable onSaveInstanceState(android.support.design.widget.CoordinatorLayout, V);
+ method public deprecated boolean onStartNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, android.view.View, int);
+ method public boolean onStartNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, android.view.View, int, int);
+ method public deprecated void onStopNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View);
+ method public void onStopNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, int);
+ method public boolean onTouchEvent(android.support.design.widget.CoordinatorLayout, V, android.view.MotionEvent);
+ method public static void setTag(android.view.View, java.lang.Object);
+ }
+
+ public static abstract class CoordinatorLayout.DefaultBehavior implements java.lang.annotation.Annotation {
+ }
+
+ public static class CoordinatorLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+ ctor public CoordinatorLayout.LayoutParams(int, int);
+ ctor public CoordinatorLayout.LayoutParams(android.support.design.widget.CoordinatorLayout.LayoutParams);
+ ctor public CoordinatorLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ ctor public CoordinatorLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+ method public int getAnchorId();
+ method public android.support.design.widget.CoordinatorLayout.Behavior getBehavior();
+ method public void setAnchorId(int);
+ method public void setBehavior(android.support.design.widget.CoordinatorLayout.Behavior);
+ field public int anchorGravity;
+ field public int dodgeInsetEdges;
+ field public int gravity;
+ field public int insetEdge;
+ field public int keyline;
+ }
+
+ protected static class CoordinatorLayout.SavedState extends android.support.v4.view.AbsSavedState {
+ ctor public CoordinatorLayout.SavedState(android.os.Parcel, java.lang.ClassLoader);
+ ctor public CoordinatorLayout.SavedState(android.os.Parcelable);
+ field public static final android.os.Parcelable.Creator<android.support.design.widget.CoordinatorLayout.SavedState> CREATOR;
+ }
+
+ public class FloatingActionButton extends android.support.design.widget.VisibilityAwareImageButton {
+ ctor public FloatingActionButton(android.content.Context);
+ ctor public FloatingActionButton(android.content.Context, android.util.AttributeSet);
+ ctor public FloatingActionButton(android.content.Context, android.util.AttributeSet, int);
+ method public float getCompatElevation();
+ method public android.graphics.drawable.Drawable getContentBackground();
+ method public boolean getContentRect(android.graphics.Rect);
+ method public int getRippleColor();
+ method public int getSize();
+ method public boolean getUseCompatPadding();
+ method public void hide();
+ method public void hide(android.support.design.widget.FloatingActionButton.OnVisibilityChangedListener);
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+ method public void setCompatElevation(float);
+ method public void setRippleColor(int);
+ method public void setSize(int);
+ method public void setUseCompatPadding(boolean);
+ method public void show();
+ method public void show(android.support.design.widget.FloatingActionButton.OnVisibilityChangedListener);
+ field public static final int SIZE_AUTO = -1; // 0xffffffff
+ field public static final int SIZE_MINI = 1; // 0x1
+ field public static final int SIZE_NORMAL = 0; // 0x0
+ }
+
+ public static class FloatingActionButton.Behavior extends android.support.design.widget.CoordinatorLayout.Behavior {
+ ctor public FloatingActionButton.Behavior();
+ ctor public FloatingActionButton.Behavior(android.content.Context, android.util.AttributeSet);
+ method public boolean getInsetDodgeRect(android.support.design.widget.CoordinatorLayout, android.support.design.widget.FloatingActionButton, android.graphics.Rect);
+ method public boolean isAutoHideEnabled();
+ method public boolean onDependentViewChanged(android.support.design.widget.CoordinatorLayout, android.support.design.widget.FloatingActionButton, android.view.View);
+ method public boolean onLayoutChild(android.support.design.widget.CoordinatorLayout, android.support.design.widget.FloatingActionButton, int);
+ method public void setAutoHideEnabled(boolean);
+ }
+
+ public static abstract class FloatingActionButton.OnVisibilityChangedListener {
+ ctor public FloatingActionButton.OnVisibilityChangedListener();
+ method public void onHidden(android.support.design.widget.FloatingActionButton);
+ method public void onShown(android.support.design.widget.FloatingActionButton);
+ }
+
+ abstract class HeaderBehavior<V extends android.view.View> extends android.support.design.widget.ViewOffsetBehavior {
+ ctor public HeaderBehavior();
+ ctor public HeaderBehavior(android.content.Context, android.util.AttributeSet);
+ }
+
+ abstract class HeaderScrollingViewBehavior extends android.support.design.widget.ViewOffsetBehavior {
+ ctor public HeaderScrollingViewBehavior();
+ ctor public HeaderScrollingViewBehavior(android.content.Context, android.util.AttributeSet);
+ method public final int getOverlayTop();
+ method protected void layoutChild(android.support.design.widget.CoordinatorLayout, android.view.View, int);
+ method public boolean onMeasureChild(android.support.design.widget.CoordinatorLayout, android.view.View, int, int, int, int);
+ method public final void setOverlayTop(int);
+ }
+
+ public class NavigationView extends android.widget.FrameLayout {
+ ctor public NavigationView(android.content.Context);
+ ctor public NavigationView(android.content.Context, android.util.AttributeSet);
+ ctor public NavigationView(android.content.Context, android.util.AttributeSet, int);
+ method public void addHeaderView(android.view.View);
+ method public int getHeaderCount();
+ method public android.view.View getHeaderView(int);
+ method public android.graphics.drawable.Drawable getItemBackground();
+ method public android.content.res.ColorStateList getItemIconTintList();
+ method public android.content.res.ColorStateList getItemTextColor();
+ method public android.view.Menu getMenu();
+ method public android.view.View inflateHeaderView(int);
+ method public void inflateMenu(int);
+ method public void removeHeaderView(android.view.View);
+ method public void setCheckedItem(int);
+ method public void setItemBackground(android.graphics.drawable.Drawable);
+ method public void setItemBackgroundResource(int);
+ method public void setItemIconTintList(android.content.res.ColorStateList);
+ method public void setItemTextAppearance(int);
+ method public void setItemTextColor(android.content.res.ColorStateList);
+ method public void setNavigationItemSelectedListener(android.support.design.widget.NavigationView.OnNavigationItemSelectedListener);
+ }
+
+ public static abstract interface NavigationView.OnNavigationItemSelectedListener {
+ method public abstract boolean onNavigationItemSelected(android.view.MenuItem);
+ }
+
+ public static class NavigationView.SavedState extends android.support.v4.view.AbsSavedState {
+ ctor public NavigationView.SavedState(android.os.Parcel, java.lang.ClassLoader);
+ ctor public NavigationView.SavedState(android.os.Parcelable);
+ field public static final android.os.Parcelable.Creator<android.support.design.widget.NavigationView.SavedState> CREATOR;
+ field public android.os.Bundle menuState;
+ }
+
+ public final class Snackbar extends android.support.design.widget.BaseTransientBottomBar {
+ method public static android.support.design.widget.Snackbar make(android.view.View, java.lang.CharSequence, int);
+ method public static android.support.design.widget.Snackbar make(android.view.View, int, int);
+ method public android.support.design.widget.Snackbar setAction(int, android.view.View.OnClickListener);
+ method public android.support.design.widget.Snackbar setAction(java.lang.CharSequence, android.view.View.OnClickListener);
+ method public android.support.design.widget.Snackbar setActionTextColor(android.content.res.ColorStateList);
+ method public android.support.design.widget.Snackbar setActionTextColor(int);
+ method public deprecated android.support.design.widget.Snackbar setCallback(android.support.design.widget.Snackbar.Callback);
+ method public android.support.design.widget.Snackbar setText(java.lang.CharSequence);
+ method public android.support.design.widget.Snackbar setText(int);
+ field public static final int LENGTH_INDEFINITE = -2; // 0xfffffffe
+ field public static final int LENGTH_LONG = 0; // 0x0
+ field public static final int LENGTH_SHORT = -1; // 0xffffffff
+ }
+
+ public static class Snackbar.Callback extends android.support.design.widget.BaseTransientBottomBar.BaseCallback {
+ ctor public Snackbar.Callback();
+ method public void onDismissed(android.support.design.widget.Snackbar, int);
+ method public void onShown(android.support.design.widget.Snackbar);
+ field public static final int DISMISS_EVENT_ACTION = 1; // 0x1
+ field public static final int DISMISS_EVENT_CONSECUTIVE = 4; // 0x4
+ field public static final int DISMISS_EVENT_MANUAL = 3; // 0x3
+ field public static final int DISMISS_EVENT_SWIPE = 0; // 0x0
+ field public static final int DISMISS_EVENT_TIMEOUT = 2; // 0x2
+ }
+
+ public class SwipeDismissBehavior<V extends android.view.View> extends android.support.design.widget.CoordinatorLayout.Behavior {
+ ctor public SwipeDismissBehavior();
+ method public boolean canSwipeDismissView(android.view.View);
+ method public int getDragState();
+ method public void setDragDismissDistance(float);
+ method public void setEndAlphaSwipeDistance(float);
+ method public void setListener(android.support.design.widget.SwipeDismissBehavior.OnDismissListener);
+ method public void setSensitivity(float);
+ method public void setStartAlphaSwipeDistance(float);
+ method public void setSwipeDirection(int);
+ field public static final int STATE_DRAGGING = 1; // 0x1
+ field public static final int STATE_IDLE = 0; // 0x0
+ field public static final int STATE_SETTLING = 2; // 0x2
+ field public static final int SWIPE_DIRECTION_ANY = 2; // 0x2
+ field public static final int SWIPE_DIRECTION_END_TO_START = 1; // 0x1
+ field public static final int SWIPE_DIRECTION_START_TO_END = 0; // 0x0
+ }
+
+ public static abstract interface SwipeDismissBehavior.OnDismissListener {
+ method public abstract void onDismiss(android.view.View);
+ method public abstract void onDragStateChanged(int);
+ }
+
+ public final class TabItem extends android.view.View {
+ ctor public TabItem(android.content.Context);
+ ctor public TabItem(android.content.Context, android.util.AttributeSet);
+ }
+
+ public class TabLayout extends android.widget.HorizontalScrollView {
+ ctor public TabLayout(android.content.Context);
+ ctor public TabLayout(android.content.Context, android.util.AttributeSet);
+ ctor public TabLayout(android.content.Context, android.util.AttributeSet, int);
+ method public void addOnTabSelectedListener(android.support.design.widget.TabLayout.OnTabSelectedListener);
+ method public void addTab(android.support.design.widget.TabLayout.Tab);
+ method public void addTab(android.support.design.widget.TabLayout.Tab, int);
+ method public void addTab(android.support.design.widget.TabLayout.Tab, boolean);
+ method public void addTab(android.support.design.widget.TabLayout.Tab, int, boolean);
+ method public void clearOnTabSelectedListeners();
+ method public android.widget.FrameLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
+ method public int getSelectedTabPosition();
+ method public android.support.design.widget.TabLayout.Tab getTabAt(int);
+ method public int getTabCount();
+ method public int getTabGravity();
+ method public int getTabMode();
+ method public android.content.res.ColorStateList getTabTextColors();
+ method public android.support.design.widget.TabLayout.Tab newTab();
+ method public void removeAllTabs();
+ method public void removeOnTabSelectedListener(android.support.design.widget.TabLayout.OnTabSelectedListener);
+ method public void removeTab(android.support.design.widget.TabLayout.Tab);
+ method public void removeTabAt(int);
+ method public deprecated void setOnTabSelectedListener(android.support.design.widget.TabLayout.OnTabSelectedListener);
+ method public void setScrollPosition(int, float, boolean);
+ method public void setSelectedTabIndicatorColor(int);
+ method public void setSelectedTabIndicatorHeight(int);
+ method public void setTabGravity(int);
+ method public void setTabMode(int);
+ method public void setTabTextColors(android.content.res.ColorStateList);
+ method public void setTabTextColors(int, int);
+ method public deprecated void setTabsFromPagerAdapter(android.support.v4.view.PagerAdapter);
+ method public void setupWithViewPager(android.support.v4.view.ViewPager);
+ method public void setupWithViewPager(android.support.v4.view.ViewPager, boolean);
+ field public static final int GRAVITY_CENTER = 1; // 0x1
+ field public static final int GRAVITY_FILL = 0; // 0x0
+ field public static final int MODE_FIXED = 1; // 0x1
+ field public static final int MODE_SCROLLABLE = 0; // 0x0
+ }
+
+ public static abstract interface TabLayout.OnTabSelectedListener {
+ method public abstract void onTabReselected(android.support.design.widget.TabLayout.Tab);
+ method public abstract void onTabSelected(android.support.design.widget.TabLayout.Tab);
+ method public abstract void onTabUnselected(android.support.design.widget.TabLayout.Tab);
+ }
+
+ public static final class TabLayout.Tab {
+ method public java.lang.CharSequence getContentDescription();
+ method public android.view.View getCustomView();
+ method public android.graphics.drawable.Drawable getIcon();
+ method public int getPosition();
+ method public java.lang.Object getTag();
+ method public java.lang.CharSequence getText();
+ method public boolean isSelected();
+ method public void select();
+ method public android.support.design.widget.TabLayout.Tab setContentDescription(int);
+ method public android.support.design.widget.TabLayout.Tab setContentDescription(java.lang.CharSequence);
+ method public android.support.design.widget.TabLayout.Tab setCustomView(android.view.View);
+ method public android.support.design.widget.TabLayout.Tab setCustomView(int);
+ method public android.support.design.widget.TabLayout.Tab setIcon(android.graphics.drawable.Drawable);
+ method public android.support.design.widget.TabLayout.Tab setIcon(int);
+ method public android.support.design.widget.TabLayout.Tab setTag(java.lang.Object);
+ method public android.support.design.widget.TabLayout.Tab setText(java.lang.CharSequence);
+ method public android.support.design.widget.TabLayout.Tab setText(int);
+ field public static final int INVALID_POSITION = -1; // 0xffffffff
+ }
+
+ public static class TabLayout.TabLayoutOnPageChangeListener implements android.support.v4.view.ViewPager.OnPageChangeListener {
+ ctor public TabLayout.TabLayoutOnPageChangeListener(android.support.design.widget.TabLayout);
+ method public void onPageScrollStateChanged(int);
+ method public void onPageScrolled(int, float, int);
+ method public void onPageSelected(int);
+ }
+
+ public static class TabLayout.ViewPagerOnTabSelectedListener implements android.support.design.widget.TabLayout.OnTabSelectedListener {
+ ctor public TabLayout.ViewPagerOnTabSelectedListener(android.support.v4.view.ViewPager);
+ method public void onTabReselected(android.support.design.widget.TabLayout.Tab);
+ method public void onTabSelected(android.support.design.widget.TabLayout.Tab);
+ method public void onTabUnselected(android.support.design.widget.TabLayout.Tab);
+ }
+
+ public class TextInputEditText extends android.support.v7.widget.AppCompatEditText {
+ ctor public TextInputEditText(android.content.Context);
+ ctor public TextInputEditText(android.content.Context, android.util.AttributeSet);
+ ctor public TextInputEditText(android.content.Context, android.util.AttributeSet, int);
+ }
+
+ public class TextInputLayout extends android.widget.LinearLayout {
+ ctor public TextInputLayout(android.content.Context);
+ ctor public TextInputLayout(android.content.Context, android.util.AttributeSet);
+ ctor public TextInputLayout(android.content.Context, android.util.AttributeSet, int);
+ method public int getCounterMaxLength();
+ method public android.widget.EditText getEditText();
+ method public java.lang.CharSequence getError();
+ method public java.lang.CharSequence getHint();
+ method public java.lang.CharSequence getPasswordVisibilityToggleContentDescription();
+ method public android.graphics.drawable.Drawable getPasswordVisibilityToggleDrawable();
+ method public android.graphics.Typeface getTypeface();
+ method public boolean isCounterEnabled();
+ method public boolean isErrorEnabled();
+ method public boolean isHintAnimationEnabled();
+ method public boolean isHintEnabled();
+ method public boolean isPasswordVisibilityToggleEnabled();
+ method public android.os.Parcelable onSaveInstanceState();
+ method public void setCounterEnabled(boolean);
+ method public void setCounterMaxLength(int);
+ method public void setError(java.lang.CharSequence);
+ method public void setErrorEnabled(boolean);
+ method public void setErrorTextAppearance(int);
+ method public void setHint(java.lang.CharSequence);
+ method public void setHintAnimationEnabled(boolean);
+ method public void setHintEnabled(boolean);
+ method public void setHintTextAppearance(int);
+ method public void setPasswordVisibilityToggleContentDescription(int);
+ method public void setPasswordVisibilityToggleContentDescription(java.lang.CharSequence);
+ method public void setPasswordVisibilityToggleDrawable(int);
+ method public void setPasswordVisibilityToggleDrawable(android.graphics.drawable.Drawable);
+ method public void setPasswordVisibilityToggleEnabled(boolean);
+ method public void setPasswordVisibilityToggleTintList(android.content.res.ColorStateList);
+ method public void setPasswordVisibilityToggleTintMode(android.graphics.PorterDuff.Mode);
+ method public void setTypeface(android.graphics.Typeface);
+ }
+
+ class ViewOffsetBehavior<V extends android.view.View> extends android.support.design.widget.CoordinatorLayout.Behavior {
+ ctor public ViewOffsetBehavior();
+ ctor public ViewOffsetBehavior(android.content.Context, android.util.AttributeSet);
+ method public int getLeftAndRightOffset();
+ method public int getTopAndBottomOffset();
+ method protected void layoutChild(android.support.design.widget.CoordinatorLayout, V, int);
+ method public boolean setLeftAndRightOffset(int);
+ method public boolean setTopAndBottomOffset(int);
+ }
+
+ class VisibilityAwareImageButton extends android.widget.ImageButton {
+ ctor public VisibilityAwareImageButton(android.content.Context);
+ ctor public VisibilityAwareImageButton(android.content.Context, android.util.AttributeSet);
+ ctor public VisibilityAwareImageButton(android.content.Context, android.util.AttributeSet, int);
+ }
+
+}
+
diff --git a/dynamic-animation/Android.mk b/dynamic-animation/Android.mk
index 1b33094..11aa484 100644
--- a/dynamic-animation/Android.mk
+++ b/dynamic-animation/Android.mk
@@ -18,7 +18,7 @@
LOCAL_USE_AAPT2 := true
LOCAL_MODULE := android-support-dynamic-animation
LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_SRC_FILES := $(call all-java-files-under,src)
+LOCAL_SRC_FILES := $(call all-java-files-under,src/main/java)
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
LOCAL_SHARED_ANDROID_LIBRARIES := \
android-support-compat \
diff --git a/dynamic-animation/AndroidManifest.xml b/dynamic-animation/AndroidManifest.xml
index a46ea43..bfe97cc 100644
--- a/dynamic-animation/AndroidManifest.xml
+++ b/dynamic-animation/AndroidManifest.xml
@@ -16,8 +16,4 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.support.dynamicanimation">
<uses-sdk android:minSdkVersion="16"/>
- <application>
- <meta-data android:name="android.support.dynamicanimation.VERSION"
- android:value="${support-version}" />
- </application>
</manifest>
diff --git a/dynamic-animation/OWNERS b/dynamic-animation/OWNERS
new file mode 100644
index 0000000..20360e8
--- /dev/null
+++ b/dynamic-animation/OWNERS
@@ -0,0 +1 @@
+tianliu@google.com
\ No newline at end of file
diff --git a/dynamic-animation/api/26.1.0.txt b/dynamic-animation/api/26.1.0.txt
new file mode 100644
index 0000000..73d20b8
--- /dev/null
+++ b/dynamic-animation/api/26.1.0.txt
@@ -0,0 +1,103 @@
+package android.support.animation {
+
+ public abstract class DynamicAnimation<T extends android.support.animation.DynamicAnimation<T>> {
+ method public T addEndListener(android.support.animation.DynamicAnimation.OnAnimationEndListener);
+ method public T addUpdateListener(android.support.animation.DynamicAnimation.OnAnimationUpdateListener);
+ method public void cancel();
+ method public float getMinimumVisibleChange();
+ method public boolean isRunning();
+ method public void removeEndListener(android.support.animation.DynamicAnimation.OnAnimationEndListener);
+ method public void removeUpdateListener(android.support.animation.DynamicAnimation.OnAnimationUpdateListener);
+ method public T setMaxValue(float);
+ method public T setMinValue(float);
+ method public T setMinimumVisibleChange(float);
+ method public T setStartValue(float);
+ method public T setStartVelocity(float);
+ method public void start();
+ field public static final android.support.animation.DynamicAnimation.ViewProperty ALPHA;
+ field public static final float MIN_VISIBLE_CHANGE_ALPHA = 0.00390625f;
+ field public static final float MIN_VISIBLE_CHANGE_PIXELS = 1.0f;
+ field public static final float MIN_VISIBLE_CHANGE_ROTATION_DEGREES = 0.1f;
+ field public static final float MIN_VISIBLE_CHANGE_SCALE = 0.002f;
+ field public static final android.support.animation.DynamicAnimation.ViewProperty ROTATION;
+ field public static final android.support.animation.DynamicAnimation.ViewProperty ROTATION_X;
+ field public static final android.support.animation.DynamicAnimation.ViewProperty ROTATION_Y;
+ field public static final android.support.animation.DynamicAnimation.ViewProperty SCALE_X;
+ field public static final android.support.animation.DynamicAnimation.ViewProperty SCALE_Y;
+ field public static final android.support.animation.DynamicAnimation.ViewProperty SCROLL_X;
+ field public static final android.support.animation.DynamicAnimation.ViewProperty SCROLL_Y;
+ field public static final android.support.animation.DynamicAnimation.ViewProperty TRANSLATION_X;
+ field public static final android.support.animation.DynamicAnimation.ViewProperty TRANSLATION_Y;
+ field public static final android.support.animation.DynamicAnimation.ViewProperty TRANSLATION_Z;
+ field public static final android.support.animation.DynamicAnimation.ViewProperty X;
+ field public static final android.support.animation.DynamicAnimation.ViewProperty Y;
+ field public static final android.support.animation.DynamicAnimation.ViewProperty Z;
+ }
+
+ public static abstract interface DynamicAnimation.OnAnimationEndListener {
+ method public abstract void onAnimationEnd(android.support.animation.DynamicAnimation, boolean, float, float);
+ }
+
+ public static abstract interface DynamicAnimation.OnAnimationUpdateListener {
+ method public abstract void onAnimationUpdate(android.support.animation.DynamicAnimation, float, float);
+ }
+
+ public static abstract class DynamicAnimation.ViewProperty extends android.support.animation.FloatPropertyCompat {
+ }
+
+ public final class FlingAnimation extends android.support.animation.DynamicAnimation {
+ ctor public FlingAnimation(android.support.animation.FloatValueHolder);
+ ctor public FlingAnimation(K, android.support.animation.FloatPropertyCompat<K>);
+ method public float getFriction();
+ method public android.support.animation.FlingAnimation setFriction(float);
+ method public android.support.animation.FlingAnimation setMaxValue(float);
+ method public android.support.animation.FlingAnimation setMinValue(float);
+ method public android.support.animation.FlingAnimation setStartVelocity(float);
+ }
+
+ public abstract class FloatPropertyCompat<T> {
+ ctor public FloatPropertyCompat(java.lang.String);
+ method public static <T> android.support.animation.FloatPropertyCompat<T> createFloatPropertyCompat(android.util.FloatProperty<T>);
+ method public abstract float getValue(T);
+ method public abstract void setValue(T, float);
+ }
+
+ public final class FloatValueHolder {
+ ctor public FloatValueHolder();
+ ctor public FloatValueHolder(float);
+ method public float getValue();
+ method public void setValue(float);
+ }
+
+ public final class SpringAnimation extends android.support.animation.DynamicAnimation {
+ ctor public SpringAnimation(android.support.animation.FloatValueHolder);
+ ctor public SpringAnimation(K, android.support.animation.FloatPropertyCompat<K>);
+ ctor public SpringAnimation(K, android.support.animation.FloatPropertyCompat<K>, float);
+ method public void animateToFinalPosition(float);
+ method public boolean canSkipToEnd();
+ method public android.support.animation.SpringForce getSpring();
+ method public android.support.animation.SpringAnimation setSpring(android.support.animation.SpringForce);
+ method public void skipToEnd();
+ }
+
+ public final class SpringForce {
+ ctor public SpringForce();
+ ctor public SpringForce(float);
+ method public float getDampingRatio();
+ method public float getFinalPosition();
+ method public float getStiffness();
+ method public android.support.animation.SpringForce setDampingRatio(float);
+ method public android.support.animation.SpringForce setFinalPosition(float);
+ method public android.support.animation.SpringForce setStiffness(float);
+ field public static final float DAMPING_RATIO_HIGH_BOUNCY = 0.2f;
+ field public static final float DAMPING_RATIO_LOW_BOUNCY = 0.75f;
+ field public static final float DAMPING_RATIO_MEDIUM_BOUNCY = 0.5f;
+ field public static final float DAMPING_RATIO_NO_BOUNCY = 1.0f;
+ field public static final float STIFFNESS_HIGH = 10000.0f;
+ field public static final float STIFFNESS_LOW = 200.0f;
+ field public static final float STIFFNESS_MEDIUM = 1500.0f;
+ field public static final float STIFFNESS_VERY_LOW = 50.0f;
+ }
+
+}
+
diff --git a/dynamic-animation/api/27.0.0.txt b/dynamic-animation/api/27.0.0.txt
new file mode 100644
index 0000000..73d20b8
--- /dev/null
+++ b/dynamic-animation/api/27.0.0.txt
@@ -0,0 +1,103 @@
+package android.support.animation {
+
+ public abstract class DynamicAnimation<T extends android.support.animation.DynamicAnimation<T>> {
+ method public T addEndListener(android.support.animation.DynamicAnimation.OnAnimationEndListener);
+ method public T addUpdateListener(android.support.animation.DynamicAnimation.OnAnimationUpdateListener);
+ method public void cancel();
+ method public float getMinimumVisibleChange();
+ method public boolean isRunning();
+ method public void removeEndListener(android.support.animation.DynamicAnimation.OnAnimationEndListener);
+ method public void removeUpdateListener(android.support.animation.DynamicAnimation.OnAnimationUpdateListener);
+ method public T setMaxValue(float);
+ method public T setMinValue(float);
+ method public T setMinimumVisibleChange(float);
+ method public T setStartValue(float);
+ method public T setStartVelocity(float);
+ method public void start();
+ field public static final android.support.animation.DynamicAnimation.ViewProperty ALPHA;
+ field public static final float MIN_VISIBLE_CHANGE_ALPHA = 0.00390625f;
+ field public static final float MIN_VISIBLE_CHANGE_PIXELS = 1.0f;
+ field public static final float MIN_VISIBLE_CHANGE_ROTATION_DEGREES = 0.1f;
+ field public static final float MIN_VISIBLE_CHANGE_SCALE = 0.002f;
+ field public static final android.support.animation.DynamicAnimation.ViewProperty ROTATION;
+ field public static final android.support.animation.DynamicAnimation.ViewProperty ROTATION_X;
+ field public static final android.support.animation.DynamicAnimation.ViewProperty ROTATION_Y;
+ field public static final android.support.animation.DynamicAnimation.ViewProperty SCALE_X;
+ field public static final android.support.animation.DynamicAnimation.ViewProperty SCALE_Y;
+ field public static final android.support.animation.DynamicAnimation.ViewProperty SCROLL_X;
+ field public static final android.support.animation.DynamicAnimation.ViewProperty SCROLL_Y;
+ field public static final android.support.animation.DynamicAnimation.ViewProperty TRANSLATION_X;
+ field public static final android.support.animation.DynamicAnimation.ViewProperty TRANSLATION_Y;
+ field public static final android.support.animation.DynamicAnimation.ViewProperty TRANSLATION_Z;
+ field public static final android.support.animation.DynamicAnimation.ViewProperty X;
+ field public static final android.support.animation.DynamicAnimation.ViewProperty Y;
+ field public static final android.support.animation.DynamicAnimation.ViewProperty Z;
+ }
+
+ public static abstract interface DynamicAnimation.OnAnimationEndListener {
+ method public abstract void onAnimationEnd(android.support.animation.DynamicAnimation, boolean, float, float);
+ }
+
+ public static abstract interface DynamicAnimation.OnAnimationUpdateListener {
+ method public abstract void onAnimationUpdate(android.support.animation.DynamicAnimation, float, float);
+ }
+
+ public static abstract class DynamicAnimation.ViewProperty extends android.support.animation.FloatPropertyCompat {
+ }
+
+ public final class FlingAnimation extends android.support.animation.DynamicAnimation {
+ ctor public FlingAnimation(android.support.animation.FloatValueHolder);
+ ctor public FlingAnimation(K, android.support.animation.FloatPropertyCompat<K>);
+ method public float getFriction();
+ method public android.support.animation.FlingAnimation setFriction(float);
+ method public android.support.animation.FlingAnimation setMaxValue(float);
+ method public android.support.animation.FlingAnimation setMinValue(float);
+ method public android.support.animation.FlingAnimation setStartVelocity(float);
+ }
+
+ public abstract class FloatPropertyCompat<T> {
+ ctor public FloatPropertyCompat(java.lang.String);
+ method public static <T> android.support.animation.FloatPropertyCompat<T> createFloatPropertyCompat(android.util.FloatProperty<T>);
+ method public abstract float getValue(T);
+ method public abstract void setValue(T, float);
+ }
+
+ public final class FloatValueHolder {
+ ctor public FloatValueHolder();
+ ctor public FloatValueHolder(float);
+ method public float getValue();
+ method public void setValue(float);
+ }
+
+ public final class SpringAnimation extends android.support.animation.DynamicAnimation {
+ ctor public SpringAnimation(android.support.animation.FloatValueHolder);
+ ctor public SpringAnimation(K, android.support.animation.FloatPropertyCompat<K>);
+ ctor public SpringAnimation(K, android.support.animation.FloatPropertyCompat<K>, float);
+ method public void animateToFinalPosition(float);
+ method public boolean canSkipToEnd();
+ method public android.support.animation.SpringForce getSpring();
+ method public android.support.animation.SpringAnimation setSpring(android.support.animation.SpringForce);
+ method public void skipToEnd();
+ }
+
+ public final class SpringForce {
+ ctor public SpringForce();
+ ctor public SpringForce(float);
+ method public float getDampingRatio();
+ method public float getFinalPosition();
+ method public float getStiffness();
+ method public android.support.animation.SpringForce setDampingRatio(float);
+ method public android.support.animation.SpringForce setFinalPosition(float);
+ method public android.support.animation.SpringForce setStiffness(float);
+ field public static final float DAMPING_RATIO_HIGH_BOUNCY = 0.2f;
+ field public static final float DAMPING_RATIO_LOW_BOUNCY = 0.75f;
+ field public static final float DAMPING_RATIO_MEDIUM_BOUNCY = 0.5f;
+ field public static final float DAMPING_RATIO_NO_BOUNCY = 1.0f;
+ field public static final float STIFFNESS_HIGH = 10000.0f;
+ field public static final float STIFFNESS_LOW = 200.0f;
+ field public static final float STIFFNESS_MEDIUM = 1500.0f;
+ field public static final float STIFFNESS_VERY_LOW = 50.0f;
+ }
+
+}
+
diff --git a/dynamic-animation/build.gradle b/dynamic-animation/build.gradle
index b1557e8..220758d 100644
--- a/dynamic-animation/build.gradle
+++ b/dynamic-animation/build.gradle
@@ -13,11 +13,6 @@
defaultConfig {
minSdkVersion 14
}
-
- sourceSets {
- main.java.srcDir 'src'
- main.res.srcDirs 'res', 'res-public'
- }
}
supportLibrary {
diff --git a/dynamic-animation/src/android/support/animation/AnimationHandler.java b/dynamic-animation/src/main/java/android/support/animation/AnimationHandler.java
similarity index 100%
rename from dynamic-animation/src/android/support/animation/AnimationHandler.java
rename to dynamic-animation/src/main/java/android/support/animation/AnimationHandler.java
diff --git a/dynamic-animation/src/android/support/animation/DynamicAnimation.java b/dynamic-animation/src/main/java/android/support/animation/DynamicAnimation.java
similarity index 100%
rename from dynamic-animation/src/android/support/animation/DynamicAnimation.java
rename to dynamic-animation/src/main/java/android/support/animation/DynamicAnimation.java
diff --git a/dynamic-animation/src/android/support/animation/FlingAnimation.java b/dynamic-animation/src/main/java/android/support/animation/FlingAnimation.java
similarity index 100%
rename from dynamic-animation/src/android/support/animation/FlingAnimation.java
rename to dynamic-animation/src/main/java/android/support/animation/FlingAnimation.java
diff --git a/dynamic-animation/src/android/support/animation/FloatPropertyCompat.java b/dynamic-animation/src/main/java/android/support/animation/FloatPropertyCompat.java
similarity index 100%
rename from dynamic-animation/src/android/support/animation/FloatPropertyCompat.java
rename to dynamic-animation/src/main/java/android/support/animation/FloatPropertyCompat.java
diff --git a/dynamic-animation/src/android/support/animation/FloatValueHolder.java b/dynamic-animation/src/main/java/android/support/animation/FloatValueHolder.java
similarity index 100%
rename from dynamic-animation/src/android/support/animation/FloatValueHolder.java
rename to dynamic-animation/src/main/java/android/support/animation/FloatValueHolder.java
diff --git a/dynamic-animation/src/android/support/animation/Force.java b/dynamic-animation/src/main/java/android/support/animation/Force.java
similarity index 100%
rename from dynamic-animation/src/android/support/animation/Force.java
rename to dynamic-animation/src/main/java/android/support/animation/Force.java
diff --git a/dynamic-animation/src/android/support/animation/SpringAnimation.java b/dynamic-animation/src/main/java/android/support/animation/SpringAnimation.java
similarity index 100%
rename from dynamic-animation/src/android/support/animation/SpringAnimation.java
rename to dynamic-animation/src/main/java/android/support/animation/SpringAnimation.java
diff --git a/dynamic-animation/src/android/support/animation/SpringForce.java b/dynamic-animation/src/main/java/android/support/animation/SpringForce.java
similarity index 100%
rename from dynamic-animation/src/android/support/animation/SpringForce.java
rename to dynamic-animation/src/main/java/android/support/animation/SpringForce.java
diff --git a/emoji/OWNERS b/emoji/OWNERS
new file mode 100644
index 0000000..f52b9a6
--- /dev/null
+++ b/emoji/OWNERS
@@ -0,0 +1,2 @@
+clarabayarri@google.com
+siyamed@google.com
\ No newline at end of file
diff --git a/emoji/appcompat/Android.mk b/emoji/appcompat/Android.mk
index 54f6b14..f04d158 100644
--- a/emoji/appcompat/Android.mk
+++ b/emoji/appcompat/Android.mk
@@ -29,7 +29,7 @@
LOCAL_USE_AAPT2 := true
LOCAL_MODULE := android-support-emoji-appcompat
LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
+LOCAL_SRC_FILES := $(call all-java-files-under, src/main/java)
LOCAL_SHARED_ANDROID_LIBRARIES := \
android-support-annotations \
android-support-v7-appcompat \
diff --git a/emoji/appcompat/AndroidManifest.xml b/emoji/appcompat/AndroidManifest.xml
index 8261137..bf83391 100644
--- a/emoji/appcompat/AndroidManifest.xml
+++ b/emoji/appcompat/AndroidManifest.xml
@@ -17,8 +17,4 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.support.text.emoji.appcompat">
<uses-sdk android:minSdkVersion="14"/>
- <application>
- <meta-data android:name="android.support.text.emoji.appcompat.VERSION"
- android:value="${support-version}" />
- </application>
</manifest>
diff --git a/emoji/appcompat/api/26.1.0.txt b/emoji/appcompat/api/26.1.0.txt
new file mode 100644
index 0000000..2c5e5c0
--- /dev/null
+++ b/emoji/appcompat/api/26.1.0.txt
@@ -0,0 +1,24 @@
+package android.support.text.emoji.widget {
+
+ public class EmojiAppCompatButton extends android.support.v7.widget.AppCompatButton {
+ ctor public EmojiAppCompatButton(android.content.Context);
+ ctor public EmojiAppCompatButton(android.content.Context, android.util.AttributeSet);
+ ctor public EmojiAppCompatButton(android.content.Context, android.util.AttributeSet, int);
+ }
+
+ public class EmojiAppCompatEditText extends android.support.v7.widget.AppCompatEditText {
+ ctor public EmojiAppCompatEditText(android.content.Context);
+ ctor public EmojiAppCompatEditText(android.content.Context, android.util.AttributeSet);
+ ctor public EmojiAppCompatEditText(android.content.Context, android.util.AttributeSet, int);
+ method public int getMaxEmojiCount();
+ method public void setMaxEmojiCount(int);
+ }
+
+ public class EmojiAppCompatTextView extends android.support.v7.widget.AppCompatTextView {
+ ctor public EmojiAppCompatTextView(android.content.Context);
+ ctor public EmojiAppCompatTextView(android.content.Context, android.util.AttributeSet);
+ ctor public EmojiAppCompatTextView(android.content.Context, android.util.AttributeSet, int);
+ }
+
+}
+
diff --git a/emoji/appcompat/api/27.0.0.txt b/emoji/appcompat/api/27.0.0.txt
new file mode 100644
index 0000000..2c5e5c0
--- /dev/null
+++ b/emoji/appcompat/api/27.0.0.txt
@@ -0,0 +1,24 @@
+package android.support.text.emoji.widget {
+
+ public class EmojiAppCompatButton extends android.support.v7.widget.AppCompatButton {
+ ctor public EmojiAppCompatButton(android.content.Context);
+ ctor public EmojiAppCompatButton(android.content.Context, android.util.AttributeSet);
+ ctor public EmojiAppCompatButton(android.content.Context, android.util.AttributeSet, int);
+ }
+
+ public class EmojiAppCompatEditText extends android.support.v7.widget.AppCompatEditText {
+ ctor public EmojiAppCompatEditText(android.content.Context);
+ ctor public EmojiAppCompatEditText(android.content.Context, android.util.AttributeSet);
+ ctor public EmojiAppCompatEditText(android.content.Context, android.util.AttributeSet, int);
+ method public int getMaxEmojiCount();
+ method public void setMaxEmojiCount(int);
+ }
+
+ public class EmojiAppCompatTextView extends android.support.v7.widget.AppCompatTextView {
+ ctor public EmojiAppCompatTextView(android.content.Context);
+ ctor public EmojiAppCompatTextView(android.content.Context, android.util.AttributeSet);
+ ctor public EmojiAppCompatTextView(android.content.Context, android.util.AttributeSet, int);
+ }
+
+}
+
diff --git a/emoji/appcompat/build.gradle b/emoji/appcompat/build.gradle
index 9b6e0d4..e22000c 100644
--- a/emoji/appcompat/build.gradle
+++ b/emoji/appcompat/build.gradle
@@ -26,10 +26,6 @@
defaultConfig {
minSdkVersion 14
}
-
- sourceSets {
- main.java.srcDir 'src'
- }
}
supportLibrary {
diff --git a/emoji/appcompat/src/android/support/text/emoji/widget/EmojiAppCompatButton.java b/emoji/appcompat/src/main/java/android/support/text/emoji/widget/EmojiAppCompatButton.java
similarity index 100%
rename from emoji/appcompat/src/android/support/text/emoji/widget/EmojiAppCompatButton.java
rename to emoji/appcompat/src/main/java/android/support/text/emoji/widget/EmojiAppCompatButton.java
diff --git a/emoji/appcompat/src/android/support/text/emoji/widget/EmojiAppCompatEditText.java b/emoji/appcompat/src/main/java/android/support/text/emoji/widget/EmojiAppCompatEditText.java
similarity index 100%
rename from emoji/appcompat/src/android/support/text/emoji/widget/EmojiAppCompatEditText.java
rename to emoji/appcompat/src/main/java/android/support/text/emoji/widget/EmojiAppCompatEditText.java
diff --git a/emoji/appcompat/src/android/support/text/emoji/widget/EmojiAppCompatTextView.java b/emoji/appcompat/src/main/java/android/support/text/emoji/widget/EmojiAppCompatTextView.java
similarity index 100%
rename from emoji/appcompat/src/android/support/text/emoji/widget/EmojiAppCompatTextView.java
rename to emoji/appcompat/src/main/java/android/support/text/emoji/widget/EmojiAppCompatTextView.java
diff --git a/emoji/bundled/Android.mk b/emoji/bundled/Android.mk
index 3b6b181..29f0d58 100644
--- a/emoji/bundled/Android.mk
+++ b/emoji/bundled/Android.mk
@@ -28,7 +28,7 @@
LOCAL_USE_AAPT2 := true
LOCAL_MODULE := android-support-emoji-bundled
LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
+LOCAL_SRC_FILES := $(call all-java-files-under, src/main/java)
LOCAL_SHARED_ANDROID_LIBRARIES := \
android-support-annotations \
android-support-emoji \
diff --git a/emoji/bundled/AndroidManifest.xml b/emoji/bundled/AndroidManifest.xml
index a2b14cf..01c1713 100644
--- a/emoji/bundled/AndroidManifest.xml
+++ b/emoji/bundled/AndroidManifest.xml
@@ -16,8 +16,4 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.support.text.emoji.bundled">
<uses-sdk android:minSdkVersion="14"/>
- <application>
- <meta-data android:name="android.support.text.emoji.bundled.VERSION"
- android:value="${support-version}" />
- </application>
</manifest>
\ No newline at end of file
diff --git a/emoji/bundled/api/26.1.0.txt b/emoji/bundled/api/26.1.0.txt
new file mode 100644
index 0000000..8812247
--- /dev/null
+++ b/emoji/bundled/api/26.1.0.txt
@@ -0,0 +1,8 @@
+package android.support.text.emoji.bundled {
+
+ public class BundledEmojiCompatConfig extends android.support.text.emoji.EmojiCompat.Config {
+ ctor public BundledEmojiCompatConfig(android.content.Context);
+ }
+
+}
+
diff --git a/emoji/bundled/api/27.0.0.txt b/emoji/bundled/api/27.0.0.txt
new file mode 100644
index 0000000..8812247
--- /dev/null
+++ b/emoji/bundled/api/27.0.0.txt
@@ -0,0 +1,8 @@
+package android.support.text.emoji.bundled {
+
+ public class BundledEmojiCompatConfig extends android.support.text.emoji.EmojiCompat.Config {
+ ctor public BundledEmojiCompatConfig(android.content.Context);
+ }
+
+}
+
diff --git a/emoji/bundled/build.gradle b/emoji/bundled/build.gradle
index b882ee1..766d165 100644
--- a/emoji/bundled/build.gradle
+++ b/emoji/bundled/build.gradle
@@ -10,7 +10,6 @@
}
sourceSets {
- main.java.srcDir 'src'
main.assets.srcDirs new File(fontDir, "font").getAbsolutePath()
}
}
diff --git a/emoji/bundled/src/android/support/text/emoji/bundled/BundledEmojiCompatConfig.java b/emoji/bundled/src/main/java/android/support/text/emoji/bundled/BundledEmojiCompatConfig.java
similarity index 100%
rename from emoji/bundled/src/android/support/text/emoji/bundled/BundledEmojiCompatConfig.java
rename to emoji/bundled/src/main/java/android/support/text/emoji/bundled/BundledEmojiCompatConfig.java
diff --git a/emoji/core/Android.mk b/emoji/core/Android.mk
index 774ba29..8b7a032 100644
--- a/emoji/core/Android.mk
+++ b/emoji/core/Android.mk
@@ -27,8 +27,8 @@
LOCAL_USE_AAPT2 := true
LOCAL_MODULE := android-support-emoji
LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
+LOCAL_SRC_FILES := $(call all-java-files-under, src/main/java)
+LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/src/main/res
LOCAL_STATIC_JAVA_LIBRARIES := \
noto-emoji-compat-java
LOCAL_SHARED_ANDROID_LIBRARIES := \
diff --git a/emoji/core/AndroidManifest.xml b/emoji/core/AndroidManifest.xml
index 1143f40..d153151 100644
--- a/emoji/core/AndroidManifest.xml
+++ b/emoji/core/AndroidManifest.xml
@@ -16,8 +16,4 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.support.text.emoji">
<uses-sdk android:minSdkVersion="14"/>
- <application>
- <meta-data android:name="android.support.text.emoji.VERSION"
- android:value="${support-version}" />
- </application>
</manifest>
diff --git a/emoji/core/api/26.1.0.txt b/emoji/core/api/26.1.0.txt
new file mode 100644
index 0000000..d5ce666
--- /dev/null
+++ b/emoji/core/api/26.1.0.txt
@@ -0,0 +1,134 @@
+package android.support.text.emoji {
+
+ public class EmojiCompat {
+ method public static android.support.text.emoji.EmojiCompat get();
+ method public java.lang.String getAssetSignature();
+ method public int getLoadState();
+ method public static boolean handleDeleteSurroundingText(android.view.inputmethod.InputConnection, android.text.Editable, int, int, boolean);
+ method public static boolean handleOnKeyDown(android.text.Editable, int, android.view.KeyEvent);
+ method public boolean hasEmojiGlyph(java.lang.CharSequence);
+ method public boolean hasEmojiGlyph(java.lang.CharSequence, int);
+ method public static android.support.text.emoji.EmojiCompat init(android.support.text.emoji.EmojiCompat.Config);
+ method public java.lang.CharSequence process(java.lang.CharSequence);
+ method public java.lang.CharSequence process(java.lang.CharSequence, int, int);
+ method public java.lang.CharSequence process(java.lang.CharSequence, int, int, int);
+ method public java.lang.CharSequence process(java.lang.CharSequence, int, int, int, int);
+ method public void registerInitCallback(android.support.text.emoji.EmojiCompat.InitCallback);
+ method public void unregisterInitCallback(android.support.text.emoji.EmojiCompat.InitCallback);
+ field public static final java.lang.String EDITOR_INFO_METAVERSION_KEY = "android.support.text.emoji.emojiCompat_metadataVersion";
+ field public static final java.lang.String EDITOR_INFO_REPLACE_ALL_KEY = "android.support.text.emoji.emojiCompat_replaceAll";
+ field public static final int LOAD_STATE_FAILED = 2; // 0x2
+ field public static final int LOAD_STATE_LOADING = 0; // 0x0
+ field public static final int LOAD_STATE_SUCCEEDED = 1; // 0x1
+ field public static final int REPLACE_STRATEGY_ALL = 1; // 0x1
+ field public static final int REPLACE_STRATEGY_DEFAULT = 0; // 0x0
+ field public static final int REPLACE_STRATEGY_NON_EXISTENT = 2; // 0x2
+ }
+
+ public static abstract class EmojiCompat.Config {
+ ctor protected EmojiCompat.Config(android.support.text.emoji.EmojiCompat.MetadataRepoLoader);
+ method protected final android.support.text.emoji.EmojiCompat.MetadataRepoLoader getMetadataRepoLoader();
+ method public android.support.text.emoji.EmojiCompat.Config registerInitCallback(android.support.text.emoji.EmojiCompat.InitCallback);
+ method public android.support.text.emoji.EmojiCompat.Config setEmojiSpanIndicatorColor(int);
+ method public android.support.text.emoji.EmojiCompat.Config setEmojiSpanIndicatorEnabled(boolean);
+ method public android.support.text.emoji.EmojiCompat.Config setReplaceAll(boolean);
+ method public android.support.text.emoji.EmojiCompat.Config unregisterInitCallback(android.support.text.emoji.EmojiCompat.InitCallback);
+ }
+
+ public static abstract class EmojiCompat.InitCallback {
+ ctor public EmojiCompat.InitCallback();
+ method public void onFailed(java.lang.Throwable);
+ method public void onInitialized();
+ }
+
+ public static abstract interface EmojiCompat.MetadataRepoLoader {
+ method public abstract void load(android.support.text.emoji.EmojiCompat.MetadataRepoLoaderCallback);
+ }
+
+ public static abstract class EmojiCompat.MetadataRepoLoaderCallback {
+ ctor public EmojiCompat.MetadataRepoLoaderCallback();
+ method public abstract void onFailed(java.lang.Throwable);
+ method public abstract void onLoaded(android.support.text.emoji.MetadataRepo);
+ }
+
+ public abstract class EmojiSpan extends android.text.style.ReplacementSpan {
+ method public int getSize(android.graphics.Paint, java.lang.CharSequence, int, int, android.graphics.Paint.FontMetricsInt);
+ }
+
+ public class FontRequestEmojiCompatConfig extends android.support.text.emoji.EmojiCompat.Config {
+ ctor public FontRequestEmojiCompatConfig(android.content.Context, android.support.v4.provider.FontRequest);
+ method public android.support.text.emoji.FontRequestEmojiCompatConfig setHandler(android.os.Handler);
+ method public android.support.text.emoji.FontRequestEmojiCompatConfig setRetryPolicy(android.support.text.emoji.FontRequestEmojiCompatConfig.RetryPolicy);
+ }
+
+ public static class FontRequestEmojiCompatConfig.ExponentialBackoffRetryPolicy extends android.support.text.emoji.FontRequestEmojiCompatConfig.RetryPolicy {
+ ctor public FontRequestEmojiCompatConfig.ExponentialBackoffRetryPolicy(long);
+ method public long getRetryDelay();
+ }
+
+ public static abstract class FontRequestEmojiCompatConfig.RetryPolicy {
+ ctor public FontRequestEmojiCompatConfig.RetryPolicy();
+ method public abstract long getRetryDelay();
+ }
+
+ public final class MetadataRepo {
+ method public static android.support.text.emoji.MetadataRepo create(android.graphics.Typeface, java.io.InputStream) throws java.io.IOException;
+ method public static android.support.text.emoji.MetadataRepo create(android.graphics.Typeface, java.nio.ByteBuffer) throws java.io.IOException;
+ method public static android.support.text.emoji.MetadataRepo create(android.content.res.AssetManager, java.lang.String) throws java.io.IOException;
+ }
+
+}
+
+package android.support.text.emoji.widget {
+
+ public class EmojiButton extends android.widget.Button {
+ ctor public EmojiButton(android.content.Context);
+ ctor public EmojiButton(android.content.Context, android.util.AttributeSet);
+ ctor public EmojiButton(android.content.Context, android.util.AttributeSet, int);
+ ctor public EmojiButton(android.content.Context, android.util.AttributeSet, int, int);
+ }
+
+ public class EmojiEditText extends android.widget.EditText {
+ ctor public EmojiEditText(android.content.Context);
+ ctor public EmojiEditText(android.content.Context, android.util.AttributeSet);
+ ctor public EmojiEditText(android.content.Context, android.util.AttributeSet, int);
+ ctor public EmojiEditText(android.content.Context, android.util.AttributeSet, int, int);
+ method public int getMaxEmojiCount();
+ method public void setMaxEmojiCount(int);
+ }
+
+ public final class EmojiEditTextHelper {
+ ctor public EmojiEditTextHelper(android.widget.EditText);
+ method public android.text.method.KeyListener getKeyListener(android.text.method.KeyListener);
+ method public int getMaxEmojiCount();
+ method public android.view.inputmethod.InputConnection onCreateInputConnection(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo);
+ method public void setMaxEmojiCount(int);
+ }
+
+ public class EmojiExtractTextLayout extends android.widget.LinearLayout {
+ ctor public EmojiExtractTextLayout(android.content.Context);
+ ctor public EmojiExtractTextLayout(android.content.Context, android.util.AttributeSet);
+ ctor public EmojiExtractTextLayout(android.content.Context, android.util.AttributeSet, int);
+ ctor public EmojiExtractTextLayout(android.content.Context, android.util.AttributeSet, int, int);
+ method public int getEmojiReplaceStrategy();
+ method public void onUpdateExtractingViews(android.inputmethodservice.InputMethodService, android.view.inputmethod.EditorInfo);
+ method public void setEmojiReplaceStrategy(int);
+ }
+
+ public class EmojiTextView extends android.widget.TextView {
+ ctor public EmojiTextView(android.content.Context);
+ ctor public EmojiTextView(android.content.Context, android.util.AttributeSet);
+ ctor public EmojiTextView(android.content.Context, android.util.AttributeSet, int);
+ ctor public EmojiTextView(android.content.Context, android.util.AttributeSet, int, int);
+ }
+
+ public final class EmojiTextViewHelper {
+ ctor public EmojiTextViewHelper(android.widget.TextView);
+ method public android.text.InputFilter[] getFilters(android.text.InputFilter[]);
+ method public void setAllCaps(boolean);
+ method public void updateTransformationMethod();
+ method public android.text.method.TransformationMethod wrapTransformationMethod(android.text.method.TransformationMethod);
+ }
+
+}
+
diff --git a/emoji/core/api/27.0.0.txt b/emoji/core/api/27.0.0.txt
new file mode 100644
index 0000000..d5ce666
--- /dev/null
+++ b/emoji/core/api/27.0.0.txt
@@ -0,0 +1,134 @@
+package android.support.text.emoji {
+
+ public class EmojiCompat {
+ method public static android.support.text.emoji.EmojiCompat get();
+ method public java.lang.String getAssetSignature();
+ method public int getLoadState();
+ method public static boolean handleDeleteSurroundingText(android.view.inputmethod.InputConnection, android.text.Editable, int, int, boolean);
+ method public static boolean handleOnKeyDown(android.text.Editable, int, android.view.KeyEvent);
+ method public boolean hasEmojiGlyph(java.lang.CharSequence);
+ method public boolean hasEmojiGlyph(java.lang.CharSequence, int);
+ method public static android.support.text.emoji.EmojiCompat init(android.support.text.emoji.EmojiCompat.Config);
+ method public java.lang.CharSequence process(java.lang.CharSequence);
+ method public java.lang.CharSequence process(java.lang.CharSequence, int, int);
+ method public java.lang.CharSequence process(java.lang.CharSequence, int, int, int);
+ method public java.lang.CharSequence process(java.lang.CharSequence, int, int, int, int);
+ method public void registerInitCallback(android.support.text.emoji.EmojiCompat.InitCallback);
+ method public void unregisterInitCallback(android.support.text.emoji.EmojiCompat.InitCallback);
+ field public static final java.lang.String EDITOR_INFO_METAVERSION_KEY = "android.support.text.emoji.emojiCompat_metadataVersion";
+ field public static final java.lang.String EDITOR_INFO_REPLACE_ALL_KEY = "android.support.text.emoji.emojiCompat_replaceAll";
+ field public static final int LOAD_STATE_FAILED = 2; // 0x2
+ field public static final int LOAD_STATE_LOADING = 0; // 0x0
+ field public static final int LOAD_STATE_SUCCEEDED = 1; // 0x1
+ field public static final int REPLACE_STRATEGY_ALL = 1; // 0x1
+ field public static final int REPLACE_STRATEGY_DEFAULT = 0; // 0x0
+ field public static final int REPLACE_STRATEGY_NON_EXISTENT = 2; // 0x2
+ }
+
+ public static abstract class EmojiCompat.Config {
+ ctor protected EmojiCompat.Config(android.support.text.emoji.EmojiCompat.MetadataRepoLoader);
+ method protected final android.support.text.emoji.EmojiCompat.MetadataRepoLoader getMetadataRepoLoader();
+ method public android.support.text.emoji.EmojiCompat.Config registerInitCallback(android.support.text.emoji.EmojiCompat.InitCallback);
+ method public android.support.text.emoji.EmojiCompat.Config setEmojiSpanIndicatorColor(int);
+ method public android.support.text.emoji.EmojiCompat.Config setEmojiSpanIndicatorEnabled(boolean);
+ method public android.support.text.emoji.EmojiCompat.Config setReplaceAll(boolean);
+ method public android.support.text.emoji.EmojiCompat.Config unregisterInitCallback(android.support.text.emoji.EmojiCompat.InitCallback);
+ }
+
+ public static abstract class EmojiCompat.InitCallback {
+ ctor public EmojiCompat.InitCallback();
+ method public void onFailed(java.lang.Throwable);
+ method public void onInitialized();
+ }
+
+ public static abstract interface EmojiCompat.MetadataRepoLoader {
+ method public abstract void load(android.support.text.emoji.EmojiCompat.MetadataRepoLoaderCallback);
+ }
+
+ public static abstract class EmojiCompat.MetadataRepoLoaderCallback {
+ ctor public EmojiCompat.MetadataRepoLoaderCallback();
+ method public abstract void onFailed(java.lang.Throwable);
+ method public abstract void onLoaded(android.support.text.emoji.MetadataRepo);
+ }
+
+ public abstract class EmojiSpan extends android.text.style.ReplacementSpan {
+ method public int getSize(android.graphics.Paint, java.lang.CharSequence, int, int, android.graphics.Paint.FontMetricsInt);
+ }
+
+ public class FontRequestEmojiCompatConfig extends android.support.text.emoji.EmojiCompat.Config {
+ ctor public FontRequestEmojiCompatConfig(android.content.Context, android.support.v4.provider.FontRequest);
+ method public android.support.text.emoji.FontRequestEmojiCompatConfig setHandler(android.os.Handler);
+ method public android.support.text.emoji.FontRequestEmojiCompatConfig setRetryPolicy(android.support.text.emoji.FontRequestEmojiCompatConfig.RetryPolicy);
+ }
+
+ public static class FontRequestEmojiCompatConfig.ExponentialBackoffRetryPolicy extends android.support.text.emoji.FontRequestEmojiCompatConfig.RetryPolicy {
+ ctor public FontRequestEmojiCompatConfig.ExponentialBackoffRetryPolicy(long);
+ method public long getRetryDelay();
+ }
+
+ public static abstract class FontRequestEmojiCompatConfig.RetryPolicy {
+ ctor public FontRequestEmojiCompatConfig.RetryPolicy();
+ method public abstract long getRetryDelay();
+ }
+
+ public final class MetadataRepo {
+ method public static android.support.text.emoji.MetadataRepo create(android.graphics.Typeface, java.io.InputStream) throws java.io.IOException;
+ method public static android.support.text.emoji.MetadataRepo create(android.graphics.Typeface, java.nio.ByteBuffer) throws java.io.IOException;
+ method public static android.support.text.emoji.MetadataRepo create(android.content.res.AssetManager, java.lang.String) throws java.io.IOException;
+ }
+
+}
+
+package android.support.text.emoji.widget {
+
+ public class EmojiButton extends android.widget.Button {
+ ctor public EmojiButton(android.content.Context);
+ ctor public EmojiButton(android.content.Context, android.util.AttributeSet);
+ ctor public EmojiButton(android.content.Context, android.util.AttributeSet, int);
+ ctor public EmojiButton(android.content.Context, android.util.AttributeSet, int, int);
+ }
+
+ public class EmojiEditText extends android.widget.EditText {
+ ctor public EmojiEditText(android.content.Context);
+ ctor public EmojiEditText(android.content.Context, android.util.AttributeSet);
+ ctor public EmojiEditText(android.content.Context, android.util.AttributeSet, int);
+ ctor public EmojiEditText(android.content.Context, android.util.AttributeSet, int, int);
+ method public int getMaxEmojiCount();
+ method public void setMaxEmojiCount(int);
+ }
+
+ public final class EmojiEditTextHelper {
+ ctor public EmojiEditTextHelper(android.widget.EditText);
+ method public android.text.method.KeyListener getKeyListener(android.text.method.KeyListener);
+ method public int getMaxEmojiCount();
+ method public android.view.inputmethod.InputConnection onCreateInputConnection(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo);
+ method public void setMaxEmojiCount(int);
+ }
+
+ public class EmojiExtractTextLayout extends android.widget.LinearLayout {
+ ctor public EmojiExtractTextLayout(android.content.Context);
+ ctor public EmojiExtractTextLayout(android.content.Context, android.util.AttributeSet);
+ ctor public EmojiExtractTextLayout(android.content.Context, android.util.AttributeSet, int);
+ ctor public EmojiExtractTextLayout(android.content.Context, android.util.AttributeSet, int, int);
+ method public int getEmojiReplaceStrategy();
+ method public void onUpdateExtractingViews(android.inputmethodservice.InputMethodService, android.view.inputmethod.EditorInfo);
+ method public void setEmojiReplaceStrategy(int);
+ }
+
+ public class EmojiTextView extends android.widget.TextView {
+ ctor public EmojiTextView(android.content.Context);
+ ctor public EmojiTextView(android.content.Context, android.util.AttributeSet);
+ ctor public EmojiTextView(android.content.Context, android.util.AttributeSet, int);
+ ctor public EmojiTextView(android.content.Context, android.util.AttributeSet, int, int);
+ }
+
+ public final class EmojiTextViewHelper {
+ ctor public EmojiTextViewHelper(android.widget.TextView);
+ method public android.text.InputFilter[] getFilters(android.text.InputFilter[]);
+ method public void setAllCaps(boolean);
+ method public void updateTransformationMethod();
+ method public android.text.method.TransformationMethod wrapTransformationMethod(android.text.method.TransformationMethod);
+ }
+
+}
+
diff --git a/emoji/core/build.gradle b/emoji/core/build.gradle
index c0881d2..b4cd3fc 100644
--- a/emoji/core/build.gradle
+++ b/emoji/core/build.gradle
@@ -29,10 +29,7 @@
}
sourceSets {
- main.java {
- srcDirs = ['src']
- }
- main.res.srcDirs = ['res', 'res-public']
+ main.res.srcDirs += 'src/main/res-public'
main.resources {
srcDirs = [fontDir.getAbsolutePath()]
includes = ["LICENSE_UNICODE", "LICENSE_OFL"]
diff --git a/emoji/core/src/android/support/text/emoji/EmojiCompat.java b/emoji/core/src/main/java/android/support/text/emoji/EmojiCompat.java
similarity index 100%
rename from emoji/core/src/android/support/text/emoji/EmojiCompat.java
rename to emoji/core/src/main/java/android/support/text/emoji/EmojiCompat.java
diff --git a/emoji/core/src/android/support/text/emoji/EmojiMetadata.java b/emoji/core/src/main/java/android/support/text/emoji/EmojiMetadata.java
similarity index 100%
rename from emoji/core/src/android/support/text/emoji/EmojiMetadata.java
rename to emoji/core/src/main/java/android/support/text/emoji/EmojiMetadata.java
diff --git a/emoji/core/src/android/support/text/emoji/EmojiProcessor.java b/emoji/core/src/main/java/android/support/text/emoji/EmojiProcessor.java
similarity index 100%
rename from emoji/core/src/android/support/text/emoji/EmojiProcessor.java
rename to emoji/core/src/main/java/android/support/text/emoji/EmojiProcessor.java
diff --git a/emoji/core/src/android/support/text/emoji/EmojiSpan.java b/emoji/core/src/main/java/android/support/text/emoji/EmojiSpan.java
similarity index 100%
rename from emoji/core/src/android/support/text/emoji/EmojiSpan.java
rename to emoji/core/src/main/java/android/support/text/emoji/EmojiSpan.java
diff --git a/emoji/core/src/android/support/text/emoji/FontRequestEmojiCompatConfig.java b/emoji/core/src/main/java/android/support/text/emoji/FontRequestEmojiCompatConfig.java
similarity index 100%
rename from emoji/core/src/android/support/text/emoji/FontRequestEmojiCompatConfig.java
rename to emoji/core/src/main/java/android/support/text/emoji/FontRequestEmojiCompatConfig.java
diff --git a/emoji/core/src/android/support/text/emoji/MetadataListReader.java b/emoji/core/src/main/java/android/support/text/emoji/MetadataListReader.java
similarity index 100%
rename from emoji/core/src/android/support/text/emoji/MetadataListReader.java
rename to emoji/core/src/main/java/android/support/text/emoji/MetadataListReader.java
diff --git a/emoji/core/src/android/support/text/emoji/MetadataRepo.java b/emoji/core/src/main/java/android/support/text/emoji/MetadataRepo.java
similarity index 100%
rename from emoji/core/src/android/support/text/emoji/MetadataRepo.java
rename to emoji/core/src/main/java/android/support/text/emoji/MetadataRepo.java
diff --git a/emoji/core/src/android/support/text/emoji/TypefaceEmojiSpan.java b/emoji/core/src/main/java/android/support/text/emoji/TypefaceEmojiSpan.java
similarity index 100%
rename from emoji/core/src/android/support/text/emoji/TypefaceEmojiSpan.java
rename to emoji/core/src/main/java/android/support/text/emoji/TypefaceEmojiSpan.java
diff --git a/emoji/core/src/android/support/text/emoji/widget/EditTextAttributeHelper.java b/emoji/core/src/main/java/android/support/text/emoji/widget/EditTextAttributeHelper.java
similarity index 100%
rename from emoji/core/src/android/support/text/emoji/widget/EditTextAttributeHelper.java
rename to emoji/core/src/main/java/android/support/text/emoji/widget/EditTextAttributeHelper.java
diff --git a/emoji/core/src/android/support/text/emoji/widget/EmojiButton.java b/emoji/core/src/main/java/android/support/text/emoji/widget/EmojiButton.java
similarity index 100%
rename from emoji/core/src/android/support/text/emoji/widget/EmojiButton.java
rename to emoji/core/src/main/java/android/support/text/emoji/widget/EmojiButton.java
diff --git a/emoji/core/src/android/support/text/emoji/widget/EmojiEditText.java b/emoji/core/src/main/java/android/support/text/emoji/widget/EmojiEditText.java
similarity index 100%
rename from emoji/core/src/android/support/text/emoji/widget/EmojiEditText.java
rename to emoji/core/src/main/java/android/support/text/emoji/widget/EmojiEditText.java
diff --git a/emoji/core/src/android/support/text/emoji/widget/EmojiEditTextHelper.java b/emoji/core/src/main/java/android/support/text/emoji/widget/EmojiEditTextHelper.java
similarity index 96%
rename from emoji/core/src/android/support/text/emoji/widget/EmojiEditTextHelper.java
rename to emoji/core/src/main/java/android/support/text/emoji/widget/EmojiEditTextHelper.java
index edc511f..a999e34 100644
--- a/emoji/core/src/android/support/text/emoji/widget/EmojiEditTextHelper.java
+++ b/emoji/core/src/main/java/android/support/text/emoji/widget/EmojiEditTextHelper.java
@@ -20,6 +20,7 @@
import android.os.Build;
import android.support.annotation.IntRange;
import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
import android.support.annotation.RestrictTo;
import android.support.text.emoji.EmojiCompat;
@@ -130,7 +131,8 @@
/**
* Updates the InputConnection with emoji support. Should be called from {@link
* TextView#onCreateInputConnection(EditorInfo)}. When used on devices running API 18 or below,
- * this method returns {@code inputConnection} that is given as a parameter.
+ * this method returns {@code inputConnection} that is given as a parameter. If
+ * {@code inputConnection} is {@code null}, returns {@code null}.
*
* @param inputConnection InputConnection instance created by TextView
* @param outAttrs EditorInfo passed into
@@ -138,10 +140,10 @@
*
* @return a new InputConnection instance that wraps {@code inputConnection}
*/
- @NonNull
- public InputConnection onCreateInputConnection(@NonNull final InputConnection inputConnection,
+ @Nullable
+ public InputConnection onCreateInputConnection(@Nullable final InputConnection inputConnection,
@NonNull final EditorInfo outAttrs) {
- Preconditions.checkNotNull(inputConnection, "inputConnection cannot be null");
+ if (inputConnection == null) return null;
return mHelper.onCreateInputConnection(inputConnection, outAttrs);
}
diff --git a/emoji/core/src/android/support/text/emoji/widget/EmojiEditableFactory.java b/emoji/core/src/main/java/android/support/text/emoji/widget/EmojiEditableFactory.java
similarity index 100%
rename from emoji/core/src/android/support/text/emoji/widget/EmojiEditableFactory.java
rename to emoji/core/src/main/java/android/support/text/emoji/widget/EmojiEditableFactory.java
diff --git a/emoji/core/src/android/support/text/emoji/widget/EmojiExtractEditText.java b/emoji/core/src/main/java/android/support/text/emoji/widget/EmojiExtractEditText.java
similarity index 100%
rename from emoji/core/src/android/support/text/emoji/widget/EmojiExtractEditText.java
rename to emoji/core/src/main/java/android/support/text/emoji/widget/EmojiExtractEditText.java
diff --git a/emoji/core/src/android/support/text/emoji/widget/EmojiExtractTextLayout.java b/emoji/core/src/main/java/android/support/text/emoji/widget/EmojiExtractTextLayout.java
similarity index 100%
rename from emoji/core/src/android/support/text/emoji/widget/EmojiExtractTextLayout.java
rename to emoji/core/src/main/java/android/support/text/emoji/widget/EmojiExtractTextLayout.java
diff --git a/emoji/core/src/android/support/text/emoji/widget/EmojiInputConnection.java b/emoji/core/src/main/java/android/support/text/emoji/widget/EmojiInputConnection.java
similarity index 100%
rename from emoji/core/src/android/support/text/emoji/widget/EmojiInputConnection.java
rename to emoji/core/src/main/java/android/support/text/emoji/widget/EmojiInputConnection.java
diff --git a/emoji/core/src/android/support/text/emoji/widget/EmojiInputFilter.java b/emoji/core/src/main/java/android/support/text/emoji/widget/EmojiInputFilter.java
similarity index 100%
rename from emoji/core/src/android/support/text/emoji/widget/EmojiInputFilter.java
rename to emoji/core/src/main/java/android/support/text/emoji/widget/EmojiInputFilter.java
diff --git a/emoji/core/src/android/support/text/emoji/widget/EmojiKeyListener.java b/emoji/core/src/main/java/android/support/text/emoji/widget/EmojiKeyListener.java
similarity index 100%
rename from emoji/core/src/android/support/text/emoji/widget/EmojiKeyListener.java
rename to emoji/core/src/main/java/android/support/text/emoji/widget/EmojiKeyListener.java
diff --git a/emoji/core/src/android/support/text/emoji/widget/EmojiTextView.java b/emoji/core/src/main/java/android/support/text/emoji/widget/EmojiTextView.java
similarity index 100%
rename from emoji/core/src/android/support/text/emoji/widget/EmojiTextView.java
rename to emoji/core/src/main/java/android/support/text/emoji/widget/EmojiTextView.java
diff --git a/emoji/core/src/android/support/text/emoji/widget/EmojiTextViewHelper.java b/emoji/core/src/main/java/android/support/text/emoji/widget/EmojiTextViewHelper.java
similarity index 100%
rename from emoji/core/src/android/support/text/emoji/widget/EmojiTextViewHelper.java
rename to emoji/core/src/main/java/android/support/text/emoji/widget/EmojiTextViewHelper.java
diff --git a/emoji/core/src/android/support/text/emoji/widget/EmojiTextWatcher.java b/emoji/core/src/main/java/android/support/text/emoji/widget/EmojiTextWatcher.java
similarity index 100%
rename from emoji/core/src/android/support/text/emoji/widget/EmojiTextWatcher.java
rename to emoji/core/src/main/java/android/support/text/emoji/widget/EmojiTextWatcher.java
diff --git a/emoji/core/src/android/support/text/emoji/widget/EmojiTransformationMethod.java b/emoji/core/src/main/java/android/support/text/emoji/widget/EmojiTransformationMethod.java
similarity index 100%
rename from emoji/core/src/android/support/text/emoji/widget/EmojiTransformationMethod.java
rename to emoji/core/src/main/java/android/support/text/emoji/widget/EmojiTransformationMethod.java
diff --git a/emoji/core/src/android/support/text/emoji/widget/ExtractButtonCompat.java b/emoji/core/src/main/java/android/support/text/emoji/widget/ExtractButtonCompat.java
similarity index 100%
rename from emoji/core/src/android/support/text/emoji/widget/ExtractButtonCompat.java
rename to emoji/core/src/main/java/android/support/text/emoji/widget/ExtractButtonCompat.java
diff --git a/emoji/core/src/android/support/text/emoji/widget/SpannableBuilder.java b/emoji/core/src/main/java/android/support/text/emoji/widget/SpannableBuilder.java
similarity index 100%
rename from emoji/core/src/android/support/text/emoji/widget/SpannableBuilder.java
rename to emoji/core/src/main/java/android/support/text/emoji/widget/SpannableBuilder.java
diff --git a/emoji/core/res-public/values/public_attrs.xml b/emoji/core/src/main/res-public/values/public_attrs.xml
similarity index 100%
rename from emoji/core/res-public/values/public_attrs.xml
rename to emoji/core/src/main/res-public/values/public_attrs.xml
diff --git a/emoji/core/res/layout/input_method_extract_view.xml b/emoji/core/src/main/res/layout/input_method_extract_view.xml
similarity index 100%
rename from emoji/core/res/layout/input_method_extract_view.xml
rename to emoji/core/src/main/res/layout/input_method_extract_view.xml
diff --git a/emoji/core/res/values/attrs.xml b/emoji/core/src/main/res/values/attrs.xml
similarity index 100%
rename from emoji/core/res/values/attrs.xml
rename to emoji/core/src/main/res/values/attrs.xml
diff --git a/emoji/core/tests/java/android/support/text/emoji/widget/EmojiEditTextHelperPre19Test.java b/emoji/core/tests/java/android/support/text/emoji/widget/EmojiEditTextHelperPre19Test.java
index d2bd722..0756fa2 100644
--- a/emoji/core/tests/java/android/support/text/emoji/widget/EmojiEditTextHelperPre19Test.java
+++ b/emoji/core/tests/java/android/support/text/emoji/widget/EmojiEditTextHelperPre19Test.java
@@ -16,6 +16,7 @@
package android.support.text.emoji.widget;
+import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.mock;
@@ -28,6 +29,7 @@
import android.support.test.runner.AndroidJUnit4;
import android.text.TextWatcher;
import android.text.method.KeyListener;
+import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputConnection;
import android.widget.EditText;
@@ -61,12 +63,28 @@
public void testGetOnCreateInputConnection_returnsSameInputConnection() {
final InputConnection param = mock(InputConnection.class);
final InputConnection inputConnection = mEmojiEditTextHelper.onCreateInputConnection(param,
+ new EditorInfo());
+
+ assertSame(param, inputConnection);
+ }
+
+ @Test
+ public void testGetOnCreateInputConnection_withNullAttrs_returnsSameInputConnection() {
+ final InputConnection param = mock(InputConnection.class);
+ final InputConnection inputConnection = mEmojiEditTextHelper.onCreateInputConnection(param,
null);
assertSame(param, inputConnection);
}
@Test
+ public void testGetOnCreateInputConnection_withNullInputConnection_returnsNull() {
+ final InputConnection inputConnection = mEmojiEditTextHelper.onCreateInputConnection(null,
+ new EditorInfo());
+ assertNull(inputConnection);
+ }
+
+ @Test
public void testDoesNotAttachTextWatcher() {
final EditText editText = mock(EditText.class);
diff --git a/emoji/core/tests/java/android/support/text/emoji/widget/EmojiEditTextHelperTest.java b/emoji/core/tests/java/android/support/text/emoji/widget/EmojiEditTextHelperTest.java
index efc7ca0..626bca1 100644
--- a/emoji/core/tests/java/android/support/text/emoji/widget/EmojiEditTextHelperTest.java
+++ b/emoji/core/tests/java/android/support/text/emoji/widget/EmojiEditTextHelperTest.java
@@ -16,8 +16,11 @@
package android.support.text.emoji.widget;
+import static junit.framework.Assert.assertNotNull;
+
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.mock;
@@ -32,6 +35,7 @@
import android.support.text.emoji.EmojiCompat;
import android.text.TextWatcher;
import android.text.method.KeyListener;
+import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputConnection;
import android.widget.EditText;
@@ -76,16 +80,26 @@
assertSame(keyListener1, keyListener2);
}
- @Test(expected = NullPointerException.class)
- public void testGetOnCreateInputConnection_withNull_throwsException() {
- mEmojiEditTextHelper.onCreateInputConnection(null, null);
+ @Test
+ public void testGetOnCreateInputConnection_withNullAttrs_returnsInputConnection() {
+ final InputConnection inputConnection = mEmojiEditTextHelper.onCreateInputConnection(
+ mock(InputConnection.class), null);
+ assertNotNull(inputConnection);
+ assertThat(inputConnection, instanceOf(EmojiInputConnection.class));
+ }
+
+ @Test
+ public void testGetOnCreateInputConnection_withNullInputConnection_returnsNull() {
+ InputConnection inputConnection = mEmojiEditTextHelper.onCreateInputConnection(null,
+ new EditorInfo());
+ assertNull(inputConnection);
}
@Test
public void testGetOnCreateInputConnection_returnsEmojiInputConnection() {
final InputConnection inputConnection = mEmojiEditTextHelper.onCreateInputConnection(
mock(InputConnection.class), null);
-
+ assertNotNull(inputConnection);
assertThat(inputConnection, instanceOf(EmojiInputConnection.class));
}
diff --git a/exifinterface/Android.mk b/exifinterface/Android.mk
index 9da8bc5..4e5bdc0 100644
--- a/exifinterface/Android.mk
+++ b/exifinterface/Android.mk
@@ -23,7 +23,7 @@
LOCAL_USE_AAPT2 := true
LOCAL_MODULE := android-support-exifinterface
LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
+LOCAL_SRC_FILES := $(call all-java-files-under, src/main/java)
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
LOCAL_SHARED_ANDROID_LIBRARIES := \
android-support-annotations
diff --git a/exifinterface/AndroidManifest.xml b/exifinterface/AndroidManifest.xml
index 8c449f7..db7cabb 100644
--- a/exifinterface/AndroidManifest.xml
+++ b/exifinterface/AndroidManifest.xml
@@ -16,8 +16,4 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.support.exifinterface">
<uses-sdk android:minSdkVersion="14"/>
- <application>
- <meta-data android:name="android.support.exifinterface.VERSION"
- android:value="${support-version}" />
- </application>
</manifest>
diff --git a/exifinterface/OWNERS b/exifinterface/OWNERS
new file mode 100644
index 0000000..03f7167
--- /dev/null
+++ b/exifinterface/OWNERS
@@ -0,0 +1,3 @@
+hdmoon@google.com
+jinpark@google.com
+sungsoo@google.com
\ No newline at end of file
diff --git a/exifinterface/api/26.1.0.txt b/exifinterface/api/26.1.0.txt
new file mode 100644
index 0000000..916a769
--- /dev/null
+++ b/exifinterface/api/26.1.0.txt
@@ -0,0 +1,175 @@
+package android.support.media {
+
+ public class ExifInterface {
+ ctor public ExifInterface(java.lang.String) throws java.io.IOException;
+ ctor public ExifInterface(java.io.InputStream) throws java.io.IOException;
+ method public void flipHorizontally();
+ method public void flipVertically();
+ method public double getAltitude(double);
+ method public java.lang.String getAttribute(java.lang.String);
+ method public double getAttributeDouble(java.lang.String, double);
+ method public int getAttributeInt(java.lang.String, int);
+ method public deprecated boolean getLatLong(float[]);
+ method public double[] getLatLong();
+ method public byte[] getThumbnail();
+ method public android.graphics.Bitmap getThumbnailBitmap();
+ method public byte[] getThumbnailBytes();
+ method public long[] getThumbnailRange();
+ method public boolean hasThumbnail();
+ method public boolean isThumbnailCompressed();
+ method public void resetOrientation();
+ method public void rotate(int);
+ method public void saveAttributes() throws java.io.IOException;
+ method public void setAltitude(double);
+ method public void setAttribute(java.lang.String, java.lang.String);
+ method public void setGpsInfo(android.location.Location);
+ method public void setLatLong(double, double);
+ field public static final int ORIENTATION_FLIP_HORIZONTAL = 2; // 0x2
+ field public static final int ORIENTATION_FLIP_VERTICAL = 4; // 0x4
+ field public static final int ORIENTATION_NORMAL = 1; // 0x1
+ field public static final int ORIENTATION_ROTATE_180 = 3; // 0x3
+ field public static final int ORIENTATION_ROTATE_270 = 8; // 0x8
+ field public static final int ORIENTATION_ROTATE_90 = 6; // 0x6
+ field public static final int ORIENTATION_TRANSPOSE = 5; // 0x5
+ field public static final int ORIENTATION_TRANSVERSE = 7; // 0x7
+ field public static final int ORIENTATION_UNDEFINED = 0; // 0x0
+ field public static final java.lang.String TAG_APERTURE_VALUE = "ApertureValue";
+ field public static final java.lang.String TAG_ARTIST = "Artist";
+ field public static final java.lang.String TAG_BITS_PER_SAMPLE = "BitsPerSample";
+ field public static final java.lang.String TAG_BRIGHTNESS_VALUE = "BrightnessValue";
+ field public static final java.lang.String TAG_CFA_PATTERN = "CFAPattern";
+ field public static final java.lang.String TAG_COLOR_SPACE = "ColorSpace";
+ field public static final java.lang.String TAG_COMPONENTS_CONFIGURATION = "ComponentsConfiguration";
+ field public static final java.lang.String TAG_COMPRESSED_BITS_PER_PIXEL = "CompressedBitsPerPixel";
+ field public static final java.lang.String TAG_COMPRESSION = "Compression";
+ field public static final java.lang.String TAG_CONTRAST = "Contrast";
+ field public static final java.lang.String TAG_COPYRIGHT = "Copyright";
+ field public static final java.lang.String TAG_CUSTOM_RENDERED = "CustomRendered";
+ field public static final java.lang.String TAG_DATETIME = "DateTime";
+ field public static final java.lang.String TAG_DATETIME_DIGITIZED = "DateTimeDigitized";
+ field public static final java.lang.String TAG_DATETIME_ORIGINAL = "DateTimeOriginal";
+ field public static final java.lang.String TAG_DEFAULT_CROP_SIZE = "DefaultCropSize";
+ field public static final java.lang.String TAG_DEVICE_SETTING_DESCRIPTION = "DeviceSettingDescription";
+ field public static final java.lang.String TAG_DIGITAL_ZOOM_RATIO = "DigitalZoomRatio";
+ field public static final java.lang.String TAG_DNG_VERSION = "DNGVersion";
+ field public static final java.lang.String TAG_EXIF_VERSION = "ExifVersion";
+ field public static final java.lang.String TAG_EXPOSURE_BIAS_VALUE = "ExposureBiasValue";
+ field public static final java.lang.String TAG_EXPOSURE_INDEX = "ExposureIndex";
+ field public static final java.lang.String TAG_EXPOSURE_MODE = "ExposureMode";
+ field public static final java.lang.String TAG_EXPOSURE_PROGRAM = "ExposureProgram";
+ field public static final java.lang.String TAG_EXPOSURE_TIME = "ExposureTime";
+ field public static final java.lang.String TAG_FILE_SOURCE = "FileSource";
+ field public static final java.lang.String TAG_FLASH = "Flash";
+ field public static final java.lang.String TAG_FLASHPIX_VERSION = "FlashpixVersion";
+ field public static final java.lang.String TAG_FLASH_ENERGY = "FlashEnergy";
+ field public static final java.lang.String TAG_FOCAL_LENGTH = "FocalLength";
+ field public static final java.lang.String TAG_FOCAL_LENGTH_IN_35MM_FILM = "FocalLengthIn35mmFilm";
+ field public static final java.lang.String TAG_FOCAL_PLANE_RESOLUTION_UNIT = "FocalPlaneResolutionUnit";
+ field public static final java.lang.String TAG_FOCAL_PLANE_X_RESOLUTION = "FocalPlaneXResolution";
+ field public static final java.lang.String TAG_FOCAL_PLANE_Y_RESOLUTION = "FocalPlaneYResolution";
+ field public static final java.lang.String TAG_F_NUMBER = "FNumber";
+ field public static final java.lang.String TAG_GAIN_CONTROL = "GainControl";
+ field public static final java.lang.String TAG_GPS_ALTITUDE = "GPSAltitude";
+ field public static final java.lang.String TAG_GPS_ALTITUDE_REF = "GPSAltitudeRef";
+ field public static final java.lang.String TAG_GPS_AREA_INFORMATION = "GPSAreaInformation";
+ field public static final java.lang.String TAG_GPS_DATESTAMP = "GPSDateStamp";
+ field public static final java.lang.String TAG_GPS_DEST_BEARING = "GPSDestBearing";
+ field public static final java.lang.String TAG_GPS_DEST_BEARING_REF = "GPSDestBearingRef";
+ field public static final java.lang.String TAG_GPS_DEST_DISTANCE = "GPSDestDistance";
+ field public static final java.lang.String TAG_GPS_DEST_DISTANCE_REF = "GPSDestDistanceRef";
+ field public static final java.lang.String TAG_GPS_DEST_LATITUDE = "GPSDestLatitude";
+ field public static final java.lang.String TAG_GPS_DEST_LATITUDE_REF = "GPSDestLatitudeRef";
+ field public static final java.lang.String TAG_GPS_DEST_LONGITUDE = "GPSDestLongitude";
+ field public static final java.lang.String TAG_GPS_DEST_LONGITUDE_REF = "GPSDestLongitudeRef";
+ field public static final java.lang.String TAG_GPS_DIFFERENTIAL = "GPSDifferential";
+ field public static final java.lang.String TAG_GPS_DOP = "GPSDOP";
+ field public static final java.lang.String TAG_GPS_IMG_DIRECTION = "GPSImgDirection";
+ field public static final java.lang.String TAG_GPS_IMG_DIRECTION_REF = "GPSImgDirectionRef";
+ field public static final java.lang.String TAG_GPS_LATITUDE = "GPSLatitude";
+ field public static final java.lang.String TAG_GPS_LATITUDE_REF = "GPSLatitudeRef";
+ field public static final java.lang.String TAG_GPS_LONGITUDE = "GPSLongitude";
+ field public static final java.lang.String TAG_GPS_LONGITUDE_REF = "GPSLongitudeRef";
+ field public static final java.lang.String TAG_GPS_MAP_DATUM = "GPSMapDatum";
+ field public static final java.lang.String TAG_GPS_MEASURE_MODE = "GPSMeasureMode";
+ field public static final java.lang.String TAG_GPS_PROCESSING_METHOD = "GPSProcessingMethod";
+ field public static final java.lang.String TAG_GPS_SATELLITES = "GPSSatellites";
+ field public static final java.lang.String TAG_GPS_SPEED = "GPSSpeed";
+ field public static final java.lang.String TAG_GPS_SPEED_REF = "GPSSpeedRef";
+ field public static final java.lang.String TAG_GPS_STATUS = "GPSStatus";
+ field public static final java.lang.String TAG_GPS_TIMESTAMP = "GPSTimeStamp";
+ field public static final java.lang.String TAG_GPS_TRACK = "GPSTrack";
+ field public static final java.lang.String TAG_GPS_TRACK_REF = "GPSTrackRef";
+ field public static final java.lang.String TAG_GPS_VERSION_ID = "GPSVersionID";
+ field public static final java.lang.String TAG_IMAGE_DESCRIPTION = "ImageDescription";
+ field public static final java.lang.String TAG_IMAGE_LENGTH = "ImageLength";
+ field public static final java.lang.String TAG_IMAGE_UNIQUE_ID = "ImageUniqueID";
+ field public static final java.lang.String TAG_IMAGE_WIDTH = "ImageWidth";
+ field public static final java.lang.String TAG_INTEROPERABILITY_INDEX = "InteroperabilityIndex";
+ field public static final java.lang.String TAG_ISO_SPEED_RATINGS = "ISOSpeedRatings";
+ field public static final java.lang.String TAG_JPEG_INTERCHANGE_FORMAT = "JPEGInterchangeFormat";
+ field public static final java.lang.String TAG_JPEG_INTERCHANGE_FORMAT_LENGTH = "JPEGInterchangeFormatLength";
+ field public static final java.lang.String TAG_LIGHT_SOURCE = "LightSource";
+ field public static final java.lang.String TAG_MAKE = "Make";
+ field public static final java.lang.String TAG_MAKER_NOTE = "MakerNote";
+ field public static final java.lang.String TAG_MAX_APERTURE_VALUE = "MaxApertureValue";
+ field public static final java.lang.String TAG_METERING_MODE = "MeteringMode";
+ field public static final java.lang.String TAG_MODEL = "Model";
+ field public static final java.lang.String TAG_NEW_SUBFILE_TYPE = "NewSubfileType";
+ field public static final java.lang.String TAG_OECF = "OECF";
+ field public static final java.lang.String TAG_ORF_ASPECT_FRAME = "AspectFrame";
+ field public static final java.lang.String TAG_ORF_PREVIEW_IMAGE_LENGTH = "PreviewImageLength";
+ field public static final java.lang.String TAG_ORF_PREVIEW_IMAGE_START = "PreviewImageStart";
+ field public static final java.lang.String TAG_ORF_THUMBNAIL_IMAGE = "ThumbnailImage";
+ field public static final java.lang.String TAG_ORIENTATION = "Orientation";
+ field public static final java.lang.String TAG_PHOTOMETRIC_INTERPRETATION = "PhotometricInterpretation";
+ field public static final java.lang.String TAG_PIXEL_X_DIMENSION = "PixelXDimension";
+ field public static final java.lang.String TAG_PIXEL_Y_DIMENSION = "PixelYDimension";
+ field public static final java.lang.String TAG_PLANAR_CONFIGURATION = "PlanarConfiguration";
+ field public static final java.lang.String TAG_PRIMARY_CHROMATICITIES = "PrimaryChromaticities";
+ field public static final java.lang.String TAG_REFERENCE_BLACK_WHITE = "ReferenceBlackWhite";
+ field public static final java.lang.String TAG_RELATED_SOUND_FILE = "RelatedSoundFile";
+ field public static final java.lang.String TAG_RESOLUTION_UNIT = "ResolutionUnit";
+ field public static final java.lang.String TAG_ROWS_PER_STRIP = "RowsPerStrip";
+ field public static final java.lang.String TAG_RW2_ISO = "ISO";
+ field public static final java.lang.String TAG_RW2_JPG_FROM_RAW = "JpgFromRaw";
+ field public static final java.lang.String TAG_RW2_SENSOR_BOTTOM_BORDER = "SensorBottomBorder";
+ field public static final java.lang.String TAG_RW2_SENSOR_LEFT_BORDER = "SensorLeftBorder";
+ field public static final java.lang.String TAG_RW2_SENSOR_RIGHT_BORDER = "SensorRightBorder";
+ field public static final java.lang.String TAG_RW2_SENSOR_TOP_BORDER = "SensorTopBorder";
+ field public static final java.lang.String TAG_SAMPLES_PER_PIXEL = "SamplesPerPixel";
+ field public static final java.lang.String TAG_SATURATION = "Saturation";
+ field public static final java.lang.String TAG_SCENE_CAPTURE_TYPE = "SceneCaptureType";
+ field public static final java.lang.String TAG_SCENE_TYPE = "SceneType";
+ field public static final java.lang.String TAG_SENSING_METHOD = "SensingMethod";
+ field public static final java.lang.String TAG_SHARPNESS = "Sharpness";
+ field public static final java.lang.String TAG_SHUTTER_SPEED_VALUE = "ShutterSpeedValue";
+ field public static final java.lang.String TAG_SOFTWARE = "Software";
+ field public static final java.lang.String TAG_SPATIAL_FREQUENCY_RESPONSE = "SpatialFrequencyResponse";
+ field public static final java.lang.String TAG_SPECTRAL_SENSITIVITY = "SpectralSensitivity";
+ field public static final java.lang.String TAG_STRIP_BYTE_COUNTS = "StripByteCounts";
+ field public static final java.lang.String TAG_STRIP_OFFSETS = "StripOffsets";
+ field public static final java.lang.String TAG_SUBFILE_TYPE = "SubfileType";
+ field public static final java.lang.String TAG_SUBJECT_AREA = "SubjectArea";
+ field public static final java.lang.String TAG_SUBJECT_DISTANCE = "SubjectDistance";
+ field public static final java.lang.String TAG_SUBJECT_DISTANCE_RANGE = "SubjectDistanceRange";
+ field public static final java.lang.String TAG_SUBJECT_LOCATION = "SubjectLocation";
+ field public static final java.lang.String TAG_SUBSEC_TIME = "SubSecTime";
+ field public static final java.lang.String TAG_SUBSEC_TIME_DIGITIZED = "SubSecTimeDigitized";
+ field public static final java.lang.String TAG_SUBSEC_TIME_ORIGINAL = "SubSecTimeOriginal";
+ field public static final java.lang.String TAG_THUMBNAIL_IMAGE_LENGTH = "ThumbnailImageLength";
+ field public static final java.lang.String TAG_THUMBNAIL_IMAGE_WIDTH = "ThumbnailImageWidth";
+ field public static final java.lang.String TAG_TRANSFER_FUNCTION = "TransferFunction";
+ field public static final java.lang.String TAG_USER_COMMENT = "UserComment";
+ field public static final java.lang.String TAG_WHITE_BALANCE = "WhiteBalance";
+ field public static final java.lang.String TAG_WHITE_POINT = "WhitePoint";
+ field public static final java.lang.String TAG_X_RESOLUTION = "XResolution";
+ field public static final java.lang.String TAG_Y_CB_CR_COEFFICIENTS = "YCbCrCoefficients";
+ field public static final java.lang.String TAG_Y_CB_CR_POSITIONING = "YCbCrPositioning";
+ field public static final java.lang.String TAG_Y_CB_CR_SUB_SAMPLING = "YCbCrSubSampling";
+ field public static final java.lang.String TAG_Y_RESOLUTION = "YResolution";
+ field public static final int WHITEBALANCE_AUTO = 0; // 0x0
+ field public static final int WHITEBALANCE_MANUAL = 1; // 0x1
+ }
+
+}
+
diff --git a/exifinterface/api/27.0.0.txt b/exifinterface/api/27.0.0.txt
new file mode 100644
index 0000000..8533011
--- /dev/null
+++ b/exifinterface/api/27.0.0.txt
@@ -0,0 +1,332 @@
+package android.support.media {
+
+ public class ExifInterface {
+ ctor public ExifInterface(java.lang.String) throws java.io.IOException;
+ ctor public ExifInterface(java.io.InputStream) throws java.io.IOException;
+ method public void flipHorizontally();
+ method public void flipVertically();
+ method public double getAltitude(double);
+ method public java.lang.String getAttribute(java.lang.String);
+ method public double getAttributeDouble(java.lang.String, double);
+ method public int getAttributeInt(java.lang.String, int);
+ method public deprecated boolean getLatLong(float[]);
+ method public double[] getLatLong();
+ method public int getRotationDegrees();
+ method public byte[] getThumbnail();
+ method public android.graphics.Bitmap getThumbnailBitmap();
+ method public byte[] getThumbnailBytes();
+ method public long[] getThumbnailRange();
+ method public boolean hasThumbnail();
+ method public boolean isFlipped();
+ method public boolean isThumbnailCompressed();
+ method public void resetOrientation();
+ method public void rotate(int);
+ method public void saveAttributes() throws java.io.IOException;
+ method public void setAltitude(double);
+ method public void setAttribute(java.lang.String, java.lang.String);
+ method public void setGpsInfo(android.location.Location);
+ method public void setLatLong(double, double);
+ field public static final short ALTITUDE_ABOVE_SEA_LEVEL = 0; // 0x0
+ field public static final short ALTITUDE_BELOW_SEA_LEVEL = 1; // 0x1
+ field public static final int[] BITS_PER_SAMPLE_GREYSCALE_1;
+ field public static final int[] BITS_PER_SAMPLE_GREYSCALE_2;
+ field public static final int[] BITS_PER_SAMPLE_RGB;
+ field public static final int COLOR_SPACE_S_RGB = 1; // 0x1
+ field public static final int COLOR_SPACE_UNCALIBRATED = 65535; // 0xffff
+ field public static final short CONTRAST_HARD = 2; // 0x2
+ field public static final short CONTRAST_NORMAL = 0; // 0x0
+ field public static final short CONTRAST_SOFT = 1; // 0x1
+ field public static final int DATA_DEFLATE_ZIP = 8; // 0x8
+ field public static final int DATA_HUFFMAN_COMPRESSED = 2; // 0x2
+ field public static final int DATA_JPEG = 6; // 0x6
+ field public static final int DATA_JPEG_COMPRESSED = 7; // 0x7
+ field public static final int DATA_LOSSY_JPEG = 34892; // 0x884c
+ field public static final int DATA_PACK_BITS_COMPRESSED = 32773; // 0x8005
+ field public static final int DATA_UNCOMPRESSED = 1; // 0x1
+ field public static final short EXPOSURE_MODE_AUTO = 0; // 0x0
+ field public static final short EXPOSURE_MODE_AUTO_BRACKET = 2; // 0x2
+ field public static final short EXPOSURE_MODE_MANUAL = 1; // 0x1
+ field public static final short EXPOSURE_PROGRAM_ACTION = 6; // 0x6
+ field public static final short EXPOSURE_PROGRAM_APERTURE_PRIORITY = 3; // 0x3
+ field public static final short EXPOSURE_PROGRAM_CREATIVE = 5; // 0x5
+ field public static final short EXPOSURE_PROGRAM_LANDSCAPE_MODE = 8; // 0x8
+ field public static final short EXPOSURE_PROGRAM_MANUAL = 1; // 0x1
+ field public static final short EXPOSURE_PROGRAM_NORMAL = 2; // 0x2
+ field public static final short EXPOSURE_PROGRAM_NOT_DEFINED = 0; // 0x0
+ field public static final short EXPOSURE_PROGRAM_PORTRAIT_MODE = 7; // 0x7
+ field public static final short EXPOSURE_PROGRAM_SHUTTER_PRIORITY = 4; // 0x4
+ field public static final short FILE_SOURCE_DSC = 3; // 0x3
+ field public static final short FILE_SOURCE_OTHER = 0; // 0x0
+ field public static final short FILE_SOURCE_REFLEX_SCANNER = 2; // 0x2
+ field public static final short FILE_SOURCE_TRANSPARENT_SCANNER = 1; // 0x1
+ field public static final short FLAG_FLASH_FIRED = 1; // 0x1
+ field public static final short FLAG_FLASH_MODE_AUTO = 24; // 0x18
+ field public static final short FLAG_FLASH_MODE_COMPULSORY_FIRING = 8; // 0x8
+ field public static final short FLAG_FLASH_MODE_COMPULSORY_SUPPRESSION = 16; // 0x10
+ field public static final short FLAG_FLASH_NO_FLASH_FUNCTION = 32; // 0x20
+ field public static final short FLAG_FLASH_RED_EYE_SUPPORTED = 64; // 0x40
+ field public static final short FLAG_FLASH_RETURN_LIGHT_DETECTED = 6; // 0x6
+ field public static final short FLAG_FLASH_RETURN_LIGHT_NOT_DETECTED = 4; // 0x4
+ field public static final short FORMAT_CHUNKY = 1; // 0x1
+ field public static final short FORMAT_PLANAR = 2; // 0x2
+ field public static final short GAIN_CONTROL_HIGH_GAIN_DOWN = 4; // 0x4
+ field public static final short GAIN_CONTROL_HIGH_GAIN_UP = 2; // 0x2
+ field public static final short GAIN_CONTROL_LOW_GAIN_DOWN = 3; // 0x3
+ field public static final short GAIN_CONTROL_LOW_GAIN_UP = 1; // 0x1
+ field public static final short GAIN_CONTROL_NONE = 0; // 0x0
+ field public static final java.lang.String GPS_DIRECTION_MAGNETIC = "M";
+ field public static final java.lang.String GPS_DIRECTION_TRUE = "T";
+ field public static final java.lang.String GPS_DISTANCE_KILOMETERS = "K";
+ field public static final java.lang.String GPS_DISTANCE_MILES = "M";
+ field public static final java.lang.String GPS_DISTANCE_NAUTICAL_MILES = "N";
+ field public static final java.lang.String GPS_MEASUREMENT_2D = "2";
+ field public static final java.lang.String GPS_MEASUREMENT_3D = "3";
+ field public static final short GPS_MEASUREMENT_DIFFERENTIAL_CORRECTED = 1; // 0x1
+ field public static final java.lang.String GPS_MEASUREMENT_INTERRUPTED = "V";
+ field public static final java.lang.String GPS_MEASUREMENT_IN_PROGRESS = "A";
+ field public static final short GPS_MEASUREMENT_NO_DIFFERENTIAL = 0; // 0x0
+ field public static final java.lang.String GPS_SPEED_KILOMETERS_PER_HOUR = "K";
+ field public static final java.lang.String GPS_SPEED_KNOTS = "N";
+ field public static final java.lang.String GPS_SPEED_MILES_PER_HOUR = "M";
+ field public static final java.lang.String LATITUDE_NORTH = "N";
+ field public static final java.lang.String LATITUDE_SOUTH = "S";
+ field public static final short LIGHT_SOURCE_CLOUDY_WEATHER = 10; // 0xa
+ field public static final short LIGHT_SOURCE_COOL_WHITE_FLUORESCENT = 14; // 0xe
+ field public static final short LIGHT_SOURCE_D50 = 23; // 0x17
+ field public static final short LIGHT_SOURCE_D55 = 20; // 0x14
+ field public static final short LIGHT_SOURCE_D65 = 21; // 0x15
+ field public static final short LIGHT_SOURCE_D75 = 22; // 0x16
+ field public static final short LIGHT_SOURCE_DAYLIGHT = 1; // 0x1
+ field public static final short LIGHT_SOURCE_DAYLIGHT_FLUORESCENT = 12; // 0xc
+ field public static final short LIGHT_SOURCE_DAY_WHITE_FLUORESCENT = 13; // 0xd
+ field public static final short LIGHT_SOURCE_FINE_WEATHER = 9; // 0x9
+ field public static final short LIGHT_SOURCE_FLASH = 4; // 0x4
+ field public static final short LIGHT_SOURCE_FLUORESCENT = 2; // 0x2
+ field public static final short LIGHT_SOURCE_ISO_STUDIO_TUNGSTEN = 24; // 0x18
+ field public static final short LIGHT_SOURCE_OTHER = 255; // 0xff
+ field public static final short LIGHT_SOURCE_SHADE = 11; // 0xb
+ field public static final short LIGHT_SOURCE_STANDARD_LIGHT_A = 17; // 0x11
+ field public static final short LIGHT_SOURCE_STANDARD_LIGHT_B = 18; // 0x12
+ field public static final short LIGHT_SOURCE_STANDARD_LIGHT_C = 19; // 0x13
+ field public static final short LIGHT_SOURCE_TUNGSTEN = 3; // 0x3
+ field public static final short LIGHT_SOURCE_UNKNOWN = 0; // 0x0
+ field public static final short LIGHT_SOURCE_WARM_WHITE_FLUORESCENT = 16; // 0x10
+ field public static final short LIGHT_SOURCE_WHITE_FLUORESCENT = 15; // 0xf
+ field public static final java.lang.String LONGITUDE_EAST = "E";
+ field public static final java.lang.String LONGITUDE_WEST = "W";
+ field public static final short METERING_MODE_AVERAGE = 1; // 0x1
+ field public static final short METERING_MODE_CENTER_WEIGHT_AVERAGE = 2; // 0x2
+ field public static final short METERING_MODE_MULTI_SPOT = 4; // 0x4
+ field public static final short METERING_MODE_OTHER = 255; // 0xff
+ field public static final short METERING_MODE_PARTIAL = 6; // 0x6
+ field public static final short METERING_MODE_PATTERN = 5; // 0x5
+ field public static final short METERING_MODE_SPOT = 3; // 0x3
+ field public static final short METERING_MODE_UNKNOWN = 0; // 0x0
+ field public static final int ORIENTATION_FLIP_HORIZONTAL = 2; // 0x2
+ field public static final int ORIENTATION_FLIP_VERTICAL = 4; // 0x4
+ field public static final int ORIENTATION_NORMAL = 1; // 0x1
+ field public static final int ORIENTATION_ROTATE_180 = 3; // 0x3
+ field public static final int ORIENTATION_ROTATE_270 = 8; // 0x8
+ field public static final int ORIENTATION_ROTATE_90 = 6; // 0x6
+ field public static final int ORIENTATION_TRANSPOSE = 5; // 0x5
+ field public static final int ORIENTATION_TRANSVERSE = 7; // 0x7
+ field public static final int ORIENTATION_UNDEFINED = 0; // 0x0
+ field public static final int ORIGINAL_RESOLUTION_IMAGE = 0; // 0x0
+ field public static final int PHOTOMETRIC_INTERPRETATION_BLACK_IS_ZERO = 1; // 0x1
+ field public static final int PHOTOMETRIC_INTERPRETATION_RGB = 2; // 0x2
+ field public static final int PHOTOMETRIC_INTERPRETATION_WHITE_IS_ZERO = 0; // 0x0
+ field public static final int PHOTOMETRIC_INTERPRETATION_YCBCR = 6; // 0x6
+ field public static final int REDUCED_RESOLUTION_IMAGE = 1; // 0x1
+ field public static final short RENDERED_PROCESS_CUSTOM = 1; // 0x1
+ field public static final short RENDERED_PROCESS_NORMAL = 0; // 0x0
+ field public static final short RESOLUTION_UNIT_CENTIMETERS = 3; // 0x3
+ field public static final short RESOLUTION_UNIT_INCHES = 2; // 0x2
+ field public static final short SATURATION_HIGH = 0; // 0x0
+ field public static final short SATURATION_LOW = 0; // 0x0
+ field public static final short SATURATION_NORMAL = 0; // 0x0
+ field public static final short SCENE_CAPTURE_TYPE_LANDSCAPE = 1; // 0x1
+ field public static final short SCENE_CAPTURE_TYPE_NIGHT = 3; // 0x3
+ field public static final short SCENE_CAPTURE_TYPE_PORTRAIT = 2; // 0x2
+ field public static final short SCENE_CAPTURE_TYPE_STANDARD = 0; // 0x0
+ field public static final short SCENE_TYPE_DIRECTLY_PHOTOGRAPHED = 1; // 0x1
+ field public static final short SENSITIVITY_TYPE_ISO_SPEED = 3; // 0x3
+ field public static final short SENSITIVITY_TYPE_REI = 2; // 0x2
+ field public static final short SENSITIVITY_TYPE_REI_AND_ISO = 6; // 0x6
+ field public static final short SENSITIVITY_TYPE_SOS = 1; // 0x1
+ field public static final short SENSITIVITY_TYPE_SOS_AND_ISO = 5; // 0x5
+ field public static final short SENSITIVITY_TYPE_SOS_AND_REI = 4; // 0x4
+ field public static final short SENSITIVITY_TYPE_SOS_AND_REI_AND_ISO = 7; // 0x7
+ field public static final short SENSITIVITY_TYPE_UNKNOWN = 0; // 0x0
+ field public static final short SENSOR_TYPE_COLOR_SEQUENTIAL = 5; // 0x5
+ field public static final short SENSOR_TYPE_COLOR_SEQUENTIAL_LINEAR = 8; // 0x8
+ field public static final short SENSOR_TYPE_NOT_DEFINED = 1; // 0x1
+ field public static final short SENSOR_TYPE_ONE_CHIP = 2; // 0x2
+ field public static final short SENSOR_TYPE_THREE_CHIP = 4; // 0x4
+ field public static final short SENSOR_TYPE_TRILINEAR = 7; // 0x7
+ field public static final short SENSOR_TYPE_TWO_CHIP = 3; // 0x3
+ field public static final short SHARPNESS_HARD = 2; // 0x2
+ field public static final short SHARPNESS_NORMAL = 0; // 0x0
+ field public static final short SHARPNESS_SOFT = 1; // 0x1
+ field public static final short SUBJECT_DISTANCE_RANGE_CLOSE_VIEW = 2; // 0x2
+ field public static final short SUBJECT_DISTANCE_RANGE_DISTANT_VIEW = 3; // 0x3
+ field public static final short SUBJECT_DISTANCE_RANGE_MACRO = 1; // 0x1
+ field public static final short SUBJECT_DISTANCE_RANGE_UNKNOWN = 0; // 0x0
+ field public static final java.lang.String TAG_APERTURE_VALUE = "ApertureValue";
+ field public static final java.lang.String TAG_ARTIST = "Artist";
+ field public static final java.lang.String TAG_BITS_PER_SAMPLE = "BitsPerSample";
+ field public static final java.lang.String TAG_BODY_SERIAL_NUMBER = "BodySerialNumber";
+ field public static final java.lang.String TAG_BRIGHTNESS_VALUE = "BrightnessValue";
+ field public static final java.lang.String TAG_CAMARA_OWNER_NAME = "CameraOwnerName";
+ field public static final java.lang.String TAG_CFA_PATTERN = "CFAPattern";
+ field public static final java.lang.String TAG_COLOR_SPACE = "ColorSpace";
+ field public static final java.lang.String TAG_COMPONENTS_CONFIGURATION = "ComponentsConfiguration";
+ field public static final java.lang.String TAG_COMPRESSED_BITS_PER_PIXEL = "CompressedBitsPerPixel";
+ field public static final java.lang.String TAG_COMPRESSION = "Compression";
+ field public static final java.lang.String TAG_CONTRAST = "Contrast";
+ field public static final java.lang.String TAG_COPYRIGHT = "Copyright";
+ field public static final java.lang.String TAG_CUSTOM_RENDERED = "CustomRendered";
+ field public static final java.lang.String TAG_DATETIME = "DateTime";
+ field public static final java.lang.String TAG_DATETIME_DIGITIZED = "DateTimeDigitized";
+ field public static final java.lang.String TAG_DATETIME_ORIGINAL = "DateTimeOriginal";
+ field public static final java.lang.String TAG_DEFAULT_CROP_SIZE = "DefaultCropSize";
+ field public static final java.lang.String TAG_DEVICE_SETTING_DESCRIPTION = "DeviceSettingDescription";
+ field public static final java.lang.String TAG_DIGITAL_ZOOM_RATIO = "DigitalZoomRatio";
+ field public static final java.lang.String TAG_DNG_VERSION = "DNGVersion";
+ field public static final java.lang.String TAG_EXIF_VERSION = "ExifVersion";
+ field public static final java.lang.String TAG_EXPOSURE_BIAS_VALUE = "ExposureBiasValue";
+ field public static final java.lang.String TAG_EXPOSURE_INDEX = "ExposureIndex";
+ field public static final java.lang.String TAG_EXPOSURE_MODE = "ExposureMode";
+ field public static final java.lang.String TAG_EXPOSURE_PROGRAM = "ExposureProgram";
+ field public static final java.lang.String TAG_EXPOSURE_TIME = "ExposureTime";
+ field public static final java.lang.String TAG_FILE_SOURCE = "FileSource";
+ field public static final java.lang.String TAG_FLASH = "Flash";
+ field public static final java.lang.String TAG_FLASHPIX_VERSION = "FlashpixVersion";
+ field public static final java.lang.String TAG_FLASH_ENERGY = "FlashEnergy";
+ field public static final java.lang.String TAG_FOCAL_LENGTH = "FocalLength";
+ field public static final java.lang.String TAG_FOCAL_LENGTH_IN_35MM_FILM = "FocalLengthIn35mmFilm";
+ field public static final java.lang.String TAG_FOCAL_PLANE_RESOLUTION_UNIT = "FocalPlaneResolutionUnit";
+ field public static final java.lang.String TAG_FOCAL_PLANE_X_RESOLUTION = "FocalPlaneXResolution";
+ field public static final java.lang.String TAG_FOCAL_PLANE_Y_RESOLUTION = "FocalPlaneYResolution";
+ field public static final java.lang.String TAG_F_NUMBER = "FNumber";
+ field public static final java.lang.String TAG_GAIN_CONTROL = "GainControl";
+ field public static final java.lang.String TAG_GAMMA = "Gamma";
+ field public static final java.lang.String TAG_GPS_ALTITUDE = "GPSAltitude";
+ field public static final java.lang.String TAG_GPS_ALTITUDE_REF = "GPSAltitudeRef";
+ field public static final java.lang.String TAG_GPS_AREA_INFORMATION = "GPSAreaInformation";
+ field public static final java.lang.String TAG_GPS_DATESTAMP = "GPSDateStamp";
+ field public static final java.lang.String TAG_GPS_DEST_BEARING = "GPSDestBearing";
+ field public static final java.lang.String TAG_GPS_DEST_BEARING_REF = "GPSDestBearingRef";
+ field public static final java.lang.String TAG_GPS_DEST_DISTANCE = "GPSDestDistance";
+ field public static final java.lang.String TAG_GPS_DEST_DISTANCE_REF = "GPSDestDistanceRef";
+ field public static final java.lang.String TAG_GPS_DEST_LATITUDE = "GPSDestLatitude";
+ field public static final java.lang.String TAG_GPS_DEST_LATITUDE_REF = "GPSDestLatitudeRef";
+ field public static final java.lang.String TAG_GPS_DEST_LONGITUDE = "GPSDestLongitude";
+ field public static final java.lang.String TAG_GPS_DEST_LONGITUDE_REF = "GPSDestLongitudeRef";
+ field public static final java.lang.String TAG_GPS_DIFFERENTIAL = "GPSDifferential";
+ field public static final java.lang.String TAG_GPS_DOP = "GPSDOP";
+ field public static final java.lang.String TAG_GPS_H_POSITIONING_ERROR = "GPSHPositioningError";
+ field public static final java.lang.String TAG_GPS_IMG_DIRECTION = "GPSImgDirection";
+ field public static final java.lang.String TAG_GPS_IMG_DIRECTION_REF = "GPSImgDirectionRef";
+ field public static final java.lang.String TAG_GPS_LATITUDE = "GPSLatitude";
+ field public static final java.lang.String TAG_GPS_LATITUDE_REF = "GPSLatitudeRef";
+ field public static final java.lang.String TAG_GPS_LONGITUDE = "GPSLongitude";
+ field public static final java.lang.String TAG_GPS_LONGITUDE_REF = "GPSLongitudeRef";
+ field public static final java.lang.String TAG_GPS_MAP_DATUM = "GPSMapDatum";
+ field public static final java.lang.String TAG_GPS_MEASURE_MODE = "GPSMeasureMode";
+ field public static final java.lang.String TAG_GPS_PROCESSING_METHOD = "GPSProcessingMethod";
+ field public static final java.lang.String TAG_GPS_SATELLITES = "GPSSatellites";
+ field public static final java.lang.String TAG_GPS_SPEED = "GPSSpeed";
+ field public static final java.lang.String TAG_GPS_SPEED_REF = "GPSSpeedRef";
+ field public static final java.lang.String TAG_GPS_STATUS = "GPSStatus";
+ field public static final java.lang.String TAG_GPS_TIMESTAMP = "GPSTimeStamp";
+ field public static final java.lang.String TAG_GPS_TRACK = "GPSTrack";
+ field public static final java.lang.String TAG_GPS_TRACK_REF = "GPSTrackRef";
+ field public static final java.lang.String TAG_GPS_VERSION_ID = "GPSVersionID";
+ field public static final java.lang.String TAG_IMAGE_DESCRIPTION = "ImageDescription";
+ field public static final java.lang.String TAG_IMAGE_LENGTH = "ImageLength";
+ field public static final java.lang.String TAG_IMAGE_UNIQUE_ID = "ImageUniqueID";
+ field public static final java.lang.String TAG_IMAGE_WIDTH = "ImageWidth";
+ field public static final java.lang.String TAG_INTEROPERABILITY_INDEX = "InteroperabilityIndex";
+ field public static final java.lang.String TAG_ISO_SPEED = "ISOSpeed";
+ field public static final java.lang.String TAG_ISO_SPEED_LATITUDE_YYY = "ISOSpeedLatitudeyyy";
+ field public static final java.lang.String TAG_ISO_SPEED_LATITUDE_ZZZ = "ISOSpeedLatitudezzz";
+ field public static final deprecated java.lang.String TAG_ISO_SPEED_RATINGS = "ISOSpeedRatings";
+ field public static final java.lang.String TAG_JPEG_INTERCHANGE_FORMAT = "JPEGInterchangeFormat";
+ field public static final java.lang.String TAG_JPEG_INTERCHANGE_FORMAT_LENGTH = "JPEGInterchangeFormatLength";
+ field public static final java.lang.String TAG_LENS_MAKE = "LensMake";
+ field public static final java.lang.String TAG_LENS_MODEL = "LensModel";
+ field public static final java.lang.String TAG_LENS_SERIAL_NUMBER = "LensSerialNumber";
+ field public static final java.lang.String TAG_LENS_SPECIFICATION = "LensSpecification";
+ field public static final java.lang.String TAG_LIGHT_SOURCE = "LightSource";
+ field public static final java.lang.String TAG_MAKE = "Make";
+ field public static final java.lang.String TAG_MAKER_NOTE = "MakerNote";
+ field public static final java.lang.String TAG_MAX_APERTURE_VALUE = "MaxApertureValue";
+ field public static final java.lang.String TAG_METERING_MODE = "MeteringMode";
+ field public static final java.lang.String TAG_MODEL = "Model";
+ field public static final java.lang.String TAG_NEW_SUBFILE_TYPE = "NewSubfileType";
+ field public static final java.lang.String TAG_OECF = "OECF";
+ field public static final java.lang.String TAG_ORF_ASPECT_FRAME = "AspectFrame";
+ field public static final java.lang.String TAG_ORF_PREVIEW_IMAGE_LENGTH = "PreviewImageLength";
+ field public static final java.lang.String TAG_ORF_PREVIEW_IMAGE_START = "PreviewImageStart";
+ field public static final java.lang.String TAG_ORF_THUMBNAIL_IMAGE = "ThumbnailImage";
+ field public static final java.lang.String TAG_ORIENTATION = "Orientation";
+ field public static final java.lang.String TAG_PHOTOGRAPHIC_SENSITIVITY = "PhotographicSensitivity";
+ field public static final java.lang.String TAG_PHOTOMETRIC_INTERPRETATION = "PhotometricInterpretation";
+ field public static final java.lang.String TAG_PIXEL_X_DIMENSION = "PixelXDimension";
+ field public static final java.lang.String TAG_PIXEL_Y_DIMENSION = "PixelYDimension";
+ field public static final java.lang.String TAG_PLANAR_CONFIGURATION = "PlanarConfiguration";
+ field public static final java.lang.String TAG_PRIMARY_CHROMATICITIES = "PrimaryChromaticities";
+ field public static final java.lang.String TAG_RECOMMENDED_EXPOSURE_INDEX = "RecommendedExposureIndex";
+ field public static final java.lang.String TAG_REFERENCE_BLACK_WHITE = "ReferenceBlackWhite";
+ field public static final java.lang.String TAG_RELATED_SOUND_FILE = "RelatedSoundFile";
+ field public static final java.lang.String TAG_RESOLUTION_UNIT = "ResolutionUnit";
+ field public static final java.lang.String TAG_ROWS_PER_STRIP = "RowsPerStrip";
+ field public static final java.lang.String TAG_RW2_ISO = "ISO";
+ field public static final java.lang.String TAG_RW2_JPG_FROM_RAW = "JpgFromRaw";
+ field public static final java.lang.String TAG_RW2_SENSOR_BOTTOM_BORDER = "SensorBottomBorder";
+ field public static final java.lang.String TAG_RW2_SENSOR_LEFT_BORDER = "SensorLeftBorder";
+ field public static final java.lang.String TAG_RW2_SENSOR_RIGHT_BORDER = "SensorRightBorder";
+ field public static final java.lang.String TAG_RW2_SENSOR_TOP_BORDER = "SensorTopBorder";
+ field public static final java.lang.String TAG_SAMPLES_PER_PIXEL = "SamplesPerPixel";
+ field public static final java.lang.String TAG_SATURATION = "Saturation";
+ field public static final java.lang.String TAG_SCENE_CAPTURE_TYPE = "SceneCaptureType";
+ field public static final java.lang.String TAG_SCENE_TYPE = "SceneType";
+ field public static final java.lang.String TAG_SENSING_METHOD = "SensingMethod";
+ field public static final java.lang.String TAG_SENSITIVITY_TYPE = "SensitivityType";
+ field public static final java.lang.String TAG_SHARPNESS = "Sharpness";
+ field public static final java.lang.String TAG_SHUTTER_SPEED_VALUE = "ShutterSpeedValue";
+ field public static final java.lang.String TAG_SOFTWARE = "Software";
+ field public static final java.lang.String TAG_SPATIAL_FREQUENCY_RESPONSE = "SpatialFrequencyResponse";
+ field public static final java.lang.String TAG_SPECTRAL_SENSITIVITY = "SpectralSensitivity";
+ field public static final java.lang.String TAG_STANDARD_OUTPUT_SENSITIVITY = "StandardOutputSensitivity";
+ field public static final java.lang.String TAG_STRIP_BYTE_COUNTS = "StripByteCounts";
+ field public static final java.lang.String TAG_STRIP_OFFSETS = "StripOffsets";
+ field public static final java.lang.String TAG_SUBFILE_TYPE = "SubfileType";
+ field public static final java.lang.String TAG_SUBJECT_AREA = "SubjectArea";
+ field public static final java.lang.String TAG_SUBJECT_DISTANCE = "SubjectDistance";
+ field public static final java.lang.String TAG_SUBJECT_DISTANCE_RANGE = "SubjectDistanceRange";
+ field public static final java.lang.String TAG_SUBJECT_LOCATION = "SubjectLocation";
+ field public static final java.lang.String TAG_SUBSEC_TIME = "SubSecTime";
+ field public static final java.lang.String TAG_SUBSEC_TIME_DIGITIZED = "SubSecTimeDigitized";
+ field public static final java.lang.String TAG_SUBSEC_TIME_ORIGINAL = "SubSecTimeOriginal";
+ field public static final java.lang.String TAG_THUMBNAIL_IMAGE_LENGTH = "ThumbnailImageLength";
+ field public static final java.lang.String TAG_THUMBNAIL_IMAGE_WIDTH = "ThumbnailImageWidth";
+ field public static final java.lang.String TAG_TRANSFER_FUNCTION = "TransferFunction";
+ field public static final java.lang.String TAG_USER_COMMENT = "UserComment";
+ field public static final java.lang.String TAG_WHITE_BALANCE = "WhiteBalance";
+ field public static final java.lang.String TAG_WHITE_POINT = "WhitePoint";
+ field public static final java.lang.String TAG_X_RESOLUTION = "XResolution";
+ field public static final java.lang.String TAG_Y_CB_CR_COEFFICIENTS = "YCbCrCoefficients";
+ field public static final java.lang.String TAG_Y_CB_CR_POSITIONING = "YCbCrPositioning";
+ field public static final java.lang.String TAG_Y_CB_CR_SUB_SAMPLING = "YCbCrSubSampling";
+ field public static final java.lang.String TAG_Y_RESOLUTION = "YResolution";
+ field public static final deprecated int WHITEBALANCE_AUTO = 0; // 0x0
+ field public static final deprecated int WHITEBALANCE_MANUAL = 1; // 0x1
+ field public static final short WHITE_BALANCE_AUTO = 0; // 0x0
+ field public static final short WHITE_BALANCE_MANUAL = 1; // 0x1
+ field public static final short Y_CB_CR_POSITIONING_CENTERED = 1; // 0x1
+ field public static final short Y_CB_CR_POSITIONING_CO_SITED = 2; // 0x2
+ }
+
+}
+
diff --git a/exifinterface/build.gradle b/exifinterface/build.gradle
index b65e1e8..3e034b1 100644
--- a/exifinterface/build.gradle
+++ b/exifinterface/build.gradle
@@ -10,11 +10,6 @@
defaultConfig {
minSdkVersion 14
}
-
- sourceSets {
- main.java.srcDirs = ['src']
- main.res.srcDirs = ['res']
- }
}
supportLibrary {
diff --git a/exifinterface/src/android/support/media/ExifInterface.java b/exifinterface/src/main/java/android/support/media/ExifInterface.java
similarity index 99%
rename from exifinterface/src/android/support/media/ExifInterface.java
rename to exifinterface/src/main/java/android/support/media/ExifInterface.java
index b790cd2..72b61cb 100644
--- a/exifinterface/src/android/support/media/ExifInterface.java
+++ b/exifinterface/src/main/java/android/support/media/ExifInterface.java
@@ -22,6 +22,7 @@
import android.location.Location;
import android.support.annotation.IntDef;
import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.util.Log;
import android.util.Pair;
@@ -3699,7 +3700,7 @@
/**
* Reads Exif tags from the specified image file.
*/
- public ExifInterface(String filename) throws IOException {
+ public ExifInterface(@NonNull String filename) throws IOException {
if (filename == null) {
throw new IllegalArgumentException("filename cannot be null");
}
@@ -3720,7 +3721,7 @@
* should close the input stream after use. This constructor is not intended to be used with
* an input stream that performs any networking operations.
*/
- public ExifInterface(InputStream inputStream) throws IOException {
+ public ExifInterface(@NonNull InputStream inputStream) throws IOException {
if (inputStream == null) {
throw new IllegalArgumentException("inputStream cannot be null");
}
@@ -3739,7 +3740,8 @@
*
* @param tag the name of the tag.
*/
- private ExifAttribute getExifAttribute(String tag) {
+ @Nullable
+ private ExifAttribute getExifAttribute(@NonNull String tag) {
if (TAG_ISO_SPEED_RATINGS.equals(tag)) {
if (DEBUG) {
Log.d(TAG, "getExifAttribute: Replacing TAG_ISO_SPEED_RATINGS with "
@@ -3764,7 +3766,8 @@
*
* @param tag the name of the tag.
*/
- public String getAttribute(String tag) {
+ @Nullable
+ public String getAttribute(@NonNull String tag) {
ExifAttribute attribute = getExifAttribute(tag);
if (attribute != null) {
if (!sTagSetForCompatibility.contains(tag)) {
@@ -3804,7 +3807,7 @@
* @param tag the name of the tag.
* @param defaultValue the value to return if the tag is not available.
*/
- public int getAttributeInt(String tag, int defaultValue) {
+ public int getAttributeInt(@NonNull String tag, int defaultValue) {
ExifAttribute exifAttribute = getExifAttribute(tag);
if (exifAttribute == null) {
return defaultValue;
@@ -3825,7 +3828,7 @@
* @param tag the name of the tag.
* @param defaultValue the value to return if the tag is not available.
*/
- public double getAttributeDouble(String tag, double defaultValue) {
+ public double getAttributeDouble(@NonNull String tag, double defaultValue) {
ExifAttribute exifAttribute = getExifAttribute(tag);
if (exifAttribute == null) {
return defaultValue;
@@ -3844,7 +3847,7 @@
* @param tag the name of the tag.
* @param value the value of the tag.
*/
- public void setAttribute(String tag, String value) {
+ public void setAttribute(@NonNull String tag, @Nullable String value) {
if (TAG_ISO_SPEED_RATINGS.equals(tag)) {
if (DEBUG) {
Log.d(TAG, "setAttribute: Replacing TAG_ISO_SPEED_RATINGS with "
@@ -4320,6 +4323,7 @@
* The returned data can be decoded using
* {@link android.graphics.BitmapFactory#decodeByteArray(byte[],int,int)}
*/
+ @Nullable
public byte[] getThumbnail() {
if (mThumbnailCompression == DATA_JPEG || mThumbnailCompression == DATA_JPEG_COMPRESSED) {
return getThumbnailBytes();
@@ -4331,6 +4335,7 @@
* Returns the thumbnail bytes inside the image file, regardless of the compression type of the
* thumbnail image.
*/
+ @Nullable
public byte[] getThumbnailBytes() {
if (!mHasThumbnail) {
return null;
@@ -4379,6 +4384,7 @@
* Creates and returns a Bitmap object of the thumbnail image based on the byte array and the
* thumbnail compression value, or {@code null} if the compression type is unsupported.
*/
+ @Nullable
public Bitmap getThumbnailBitmap() {
if (!mHasThumbnail) {
return null;
@@ -4425,6 +4431,7 @@
* @return two-element array, the offset in the first value, and length in
* the second, or {@code null} if no thumbnail was found.
*/
+ @Nullable
public long[] getThumbnailRange() {
if (!mHasThumbnail) {
return null;
@@ -4462,6 +4469,7 @@
* array where the first element is the latitude and the second element is the longitude.
* Otherwise, it returns null.
*/
+ @Nullable
public double[] getLatLong() {
String latValue = getAttribute(TAG_GPS_LATITUDE);
String latRef = getAttribute(TAG_GPS_LATITUDE_REF);
diff --git a/fragment/Android.mk b/fragment/Android.mk
index cc1b5f8..efac954 100644
--- a/fragment/Android.mk
+++ b/fragment/Android.mk
@@ -30,7 +30,7 @@
LOCAL_MODULE := android-support-fragment
LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
LOCAL_SRC_FILES := \
- $(call all-java-files-under, java)
+ $(call all-java-files-under, src/main/java)
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
LOCAL_SHARED_ANDROID_LIBRARIES := \
android-support-compat \
diff --git a/fragment/AndroidManifest.xml b/fragment/AndroidManifest.xml
index 4d532bd..ec15d66 100644
--- a/fragment/AndroidManifest.xml
+++ b/fragment/AndroidManifest.xml
@@ -16,8 +16,4 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.support.fragment">
<uses-sdk android:minSdkVersion="14"/>
- <application>
- <meta-data android:name="android.support.fragment.VERSION"
- android:value="${support-version}" />
- </application>
</manifest>
diff --git a/fragment/OWNERS b/fragment/OWNERS
new file mode 100644
index 0000000..38b4f66
--- /dev/null
+++ b/fragment/OWNERS
@@ -0,0 +1,3 @@
+adamp@google.com
+ilake@google.com
+mount@google.com
\ No newline at end of file
diff --git a/fragment/api/26.1.0.txt b/fragment/api/26.1.0.txt
new file mode 100644
index 0000000..ccd6f4f
--- /dev/null
+++ b/fragment/api/26.1.0.txt
@@ -0,0 +1,397 @@
+package android.support.v4.app {
+
+ public class DialogFragment extends android.support.v4.app.Fragment implements android.content.DialogInterface.OnCancelListener android.content.DialogInterface.OnDismissListener {
+ ctor public DialogFragment();
+ method public void dismiss();
+ method public void dismissAllowingStateLoss();
+ method public android.app.Dialog getDialog();
+ method public boolean getShowsDialog();
+ method public int getTheme();
+ method public boolean isCancelable();
+ method public void onCancel(android.content.DialogInterface);
+ method public android.app.Dialog onCreateDialog(android.os.Bundle);
+ method public void onDismiss(android.content.DialogInterface);
+ method public void setCancelable(boolean);
+ method public void setShowsDialog(boolean);
+ method public void setStyle(int, int);
+ method public void show(android.support.v4.app.FragmentManager, java.lang.String);
+ method public int show(android.support.v4.app.FragmentTransaction, java.lang.String);
+ field public static final int STYLE_NORMAL = 0; // 0x0
+ field public static final int STYLE_NO_FRAME = 2; // 0x2
+ field public static final int STYLE_NO_INPUT = 3; // 0x3
+ field public static final int STYLE_NO_TITLE = 1; // 0x1
+ }
+
+ public class Fragment implements android.content.ComponentCallbacks android.view.View.OnCreateContextMenuListener {
+ ctor public Fragment();
+ method public void dump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
+ method public final boolean equals(java.lang.Object);
+ method public final android.support.v4.app.FragmentActivity getActivity();
+ method public boolean getAllowEnterTransitionOverlap();
+ method public boolean getAllowReturnTransitionOverlap();
+ method public final android.os.Bundle getArguments();
+ method public final android.support.v4.app.FragmentManager getChildFragmentManager();
+ method public android.content.Context getContext();
+ method public java.lang.Object getEnterTransition();
+ method public java.lang.Object getExitTransition();
+ method public final android.support.v4.app.FragmentManager getFragmentManager();
+ method public final java.lang.Object getHost();
+ method public final int getId();
+ method public final android.view.LayoutInflater getLayoutInflater();
+ method public android.arch.lifecycle.Lifecycle getLifecycle();
+ method public android.support.v4.app.LoaderManager getLoaderManager();
+ method public final android.support.v4.app.Fragment getParentFragment();
+ method public java.lang.Object getReenterTransition();
+ method public final android.content.res.Resources getResources();
+ method public final boolean getRetainInstance();
+ method public java.lang.Object getReturnTransition();
+ method public java.lang.Object getSharedElementEnterTransition();
+ method public java.lang.Object getSharedElementReturnTransition();
+ method public final java.lang.String getString(int);
+ method public final java.lang.String getString(int, java.lang.Object...);
+ method public final java.lang.String getTag();
+ method public final android.support.v4.app.Fragment getTargetFragment();
+ method public final int getTargetRequestCode();
+ method public final java.lang.CharSequence getText(int);
+ method public boolean getUserVisibleHint();
+ method public android.view.View getView();
+ method public final int hashCode();
+ method public static android.support.v4.app.Fragment instantiate(android.content.Context, java.lang.String);
+ method public static android.support.v4.app.Fragment instantiate(android.content.Context, java.lang.String, android.os.Bundle);
+ method public final boolean isAdded();
+ method public final boolean isDetached();
+ method public final boolean isHidden();
+ method public final boolean isInLayout();
+ method public final boolean isRemoving();
+ method public final boolean isResumed();
+ method public final boolean isStateSaved();
+ method public final boolean isVisible();
+ method public void onActivityCreated(android.os.Bundle);
+ method public void onActivityResult(int, int, android.content.Intent);
+ method public void onAttach(android.content.Context);
+ method public deprecated void onAttach(android.app.Activity);
+ method public void onAttachFragment(android.support.v4.app.Fragment);
+ method public void onConfigurationChanged(android.content.res.Configuration);
+ method public boolean onContextItemSelected(android.view.MenuItem);
+ method public void onCreate(android.os.Bundle);
+ method public android.view.animation.Animation onCreateAnimation(int, boolean, int);
+ method public android.animation.Animator onCreateAnimator(int, boolean, int);
+ method public void onCreateContextMenu(android.view.ContextMenu, android.view.View, android.view.ContextMenu.ContextMenuInfo);
+ method public void onCreateOptionsMenu(android.view.Menu, android.view.MenuInflater);
+ method public android.view.View onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
+ method public void onDestroy();
+ method public void onDestroyOptionsMenu();
+ method public void onDestroyView();
+ method public void onDetach();
+ method public android.view.LayoutInflater onGetLayoutInflater(android.os.Bundle);
+ method public void onHiddenChanged(boolean);
+ method public void onInflate(android.content.Context, android.util.AttributeSet, android.os.Bundle);
+ method public deprecated void onInflate(android.app.Activity, android.util.AttributeSet, android.os.Bundle);
+ method public void onLowMemory();
+ method public void onMultiWindowModeChanged(boolean);
+ method public boolean onOptionsItemSelected(android.view.MenuItem);
+ method public void onOptionsMenuClosed(android.view.Menu);
+ method public void onPause();
+ method public void onPictureInPictureModeChanged(boolean);
+ method public void onPrepareOptionsMenu(android.view.Menu);
+ method public void onRequestPermissionsResult(int, java.lang.String[], int[]);
+ method public void onResume();
+ method public void onSaveInstanceState(android.os.Bundle);
+ method public void onStart();
+ method public void onStop();
+ method public void onViewCreated(android.view.View, android.os.Bundle);
+ method public void onViewStateRestored(android.os.Bundle);
+ method public void postponeEnterTransition();
+ method public void registerForContextMenu(android.view.View);
+ method public final void requestPermissions(java.lang.String[], int);
+ method public void setAllowEnterTransitionOverlap(boolean);
+ method public void setAllowReturnTransitionOverlap(boolean);
+ method public void setArguments(android.os.Bundle);
+ method public void setEnterSharedElementCallback(android.support.v4.app.SharedElementCallback);
+ method public void setEnterTransition(java.lang.Object);
+ method public void setExitSharedElementCallback(android.support.v4.app.SharedElementCallback);
+ method public void setExitTransition(java.lang.Object);
+ method public void setHasOptionsMenu(boolean);
+ method public void setInitialSavedState(android.support.v4.app.Fragment.SavedState);
+ method public void setMenuVisibility(boolean);
+ method public void setReenterTransition(java.lang.Object);
+ method public void setRetainInstance(boolean);
+ method public void setReturnTransition(java.lang.Object);
+ method public void setSharedElementEnterTransition(java.lang.Object);
+ method public void setSharedElementReturnTransition(java.lang.Object);
+ method public void setTargetFragment(android.support.v4.app.Fragment, int);
+ method public void setUserVisibleHint(boolean);
+ method public boolean shouldShowRequestPermissionRationale(java.lang.String);
+ method public void startActivity(android.content.Intent);
+ method public void startActivity(android.content.Intent, android.os.Bundle);
+ method public void startActivityForResult(android.content.Intent, int);
+ method public void startActivityForResult(android.content.Intent, int, android.os.Bundle);
+ method public void startIntentSenderForResult(android.content.IntentSender, int, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException;
+ method public void startPostponedEnterTransition();
+ method public void unregisterForContextMenu(android.view.View);
+ }
+
+ public static class Fragment.InstantiationException extends java.lang.RuntimeException {
+ ctor public Fragment.InstantiationException(java.lang.String, java.lang.Exception);
+ }
+
+ public static class Fragment.SavedState implements android.os.Parcelable {
+ method public int describeContents();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.app.Fragment.SavedState> CREATOR;
+ }
+
+ public class FragmentActivity extends android.support.v4.app.SupportActivity {
+ ctor public FragmentActivity();
+ method public java.lang.Object getLastCustomNonConfigurationInstance();
+ method public android.support.v4.app.FragmentManager getSupportFragmentManager();
+ method public android.support.v4.app.LoaderManager getSupportLoaderManager();
+ method public void onAttachFragment(android.support.v4.app.Fragment);
+ method public void onMultiWindowModeChanged(boolean);
+ method public void onPictureInPictureModeChanged(boolean);
+ method protected void onResumeFragments();
+ method public java.lang.Object onRetainCustomNonConfigurationInstance();
+ method public final java.lang.Object onRetainNonConfigurationInstance();
+ method public void setEnterSharedElementCallback(android.support.v4.app.SharedElementCallback);
+ method public void setExitSharedElementCallback(android.support.v4.app.SharedElementCallback);
+ method public void startActivityFromFragment(android.support.v4.app.Fragment, android.content.Intent, int);
+ method public void startActivityFromFragment(android.support.v4.app.Fragment, android.content.Intent, int, android.os.Bundle);
+ method public void startIntentSenderFromFragment(android.support.v4.app.Fragment, android.content.IntentSender, int, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException;
+ method public void supportFinishAfterTransition();
+ method public deprecated void supportInvalidateOptionsMenu();
+ method public void supportPostponeEnterTransition();
+ method public void supportStartPostponedEnterTransition();
+ method public final void validateRequestPermissionsRequestCode(int);
+ }
+
+ public abstract class FragmentContainer {
+ ctor public FragmentContainer();
+ method public android.support.v4.app.Fragment instantiate(android.content.Context, java.lang.String, android.os.Bundle);
+ method public abstract android.view.View onFindViewById(int);
+ method public abstract boolean onHasView();
+ }
+
+ public class FragmentController {
+ method public void attachHost(android.support.v4.app.Fragment);
+ method public static final android.support.v4.app.FragmentController createController(android.support.v4.app.FragmentHostCallback<?>);
+ method public void dispatchActivityCreated();
+ method public void dispatchConfigurationChanged(android.content.res.Configuration);
+ method public boolean dispatchContextItemSelected(android.view.MenuItem);
+ method public void dispatchCreate();
+ method public boolean dispatchCreateOptionsMenu(android.view.Menu, android.view.MenuInflater);
+ method public void dispatchDestroy();
+ method public void dispatchDestroyView();
+ method public void dispatchLowMemory();
+ method public void dispatchMultiWindowModeChanged(boolean);
+ method public boolean dispatchOptionsItemSelected(android.view.MenuItem);
+ method public void dispatchOptionsMenuClosed(android.view.Menu);
+ method public void dispatchPause();
+ method public void dispatchPictureInPictureModeChanged(boolean);
+ method public boolean dispatchPrepareOptionsMenu(android.view.Menu);
+ method public void dispatchReallyStop();
+ method public void dispatchResume();
+ method public void dispatchStart();
+ method public void dispatchStop();
+ method public void doLoaderDestroy();
+ method public void doLoaderRetain();
+ method public void doLoaderStart();
+ method public void doLoaderStop(boolean);
+ method public void dumpLoaders(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
+ method public boolean execPendingActions();
+ method public android.support.v4.app.Fragment findFragmentByWho(java.lang.String);
+ method public java.util.List<android.support.v4.app.Fragment> getActiveFragments(java.util.List<android.support.v4.app.Fragment>);
+ method public int getActiveFragmentsCount();
+ method public android.support.v4.app.FragmentManager getSupportFragmentManager();
+ method public android.support.v4.app.LoaderManager getSupportLoaderManager();
+ method public void noteStateNotSaved();
+ method public android.view.View onCreateView(android.view.View, java.lang.String, android.content.Context, android.util.AttributeSet);
+ method public void reportLoaderStart();
+ method public deprecated void restoreAllState(android.os.Parcelable, java.util.List<android.support.v4.app.Fragment>);
+ method public void restoreAllState(android.os.Parcelable, android.support.v4.app.FragmentManagerNonConfig);
+ method public void restoreLoaderNonConfig(android.support.v4.util.SimpleArrayMap<java.lang.String, android.support.v4.app.LoaderManager>);
+ method public android.support.v4.util.SimpleArrayMap<java.lang.String, android.support.v4.app.LoaderManager> retainLoaderNonConfig();
+ method public android.support.v4.app.FragmentManagerNonConfig retainNestedNonConfig();
+ method public deprecated java.util.List<android.support.v4.app.Fragment> retainNonConfig();
+ method public android.os.Parcelable saveAllState();
+ }
+
+ public abstract class FragmentHostCallback<E> extends android.support.v4.app.FragmentContainer {
+ ctor public FragmentHostCallback(android.content.Context, android.os.Handler, int);
+ method public void onDump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
+ method public android.view.View onFindViewById(int);
+ method public abstract E onGetHost();
+ method public android.view.LayoutInflater onGetLayoutInflater();
+ method public int onGetWindowAnimations();
+ method public boolean onHasView();
+ method public boolean onHasWindowAnimations();
+ method public void onRequestPermissionsFromFragment(android.support.v4.app.Fragment, java.lang.String[], int);
+ method public boolean onShouldSaveFragmentState(android.support.v4.app.Fragment);
+ method public boolean onShouldShowRequestPermissionRationale(java.lang.String);
+ method public void onStartActivityFromFragment(android.support.v4.app.Fragment, android.content.Intent, int);
+ method public void onStartActivityFromFragment(android.support.v4.app.Fragment, android.content.Intent, int, android.os.Bundle);
+ method public void onStartIntentSenderFromFragment(android.support.v4.app.Fragment, android.content.IntentSender, int, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException;
+ method public void onSupportInvalidateOptionsMenu();
+ }
+
+ public abstract class FragmentManager {
+ ctor public FragmentManager();
+ method public abstract void addOnBackStackChangedListener(android.support.v4.app.FragmentManager.OnBackStackChangedListener);
+ method public abstract android.support.v4.app.FragmentTransaction beginTransaction();
+ method public abstract void dump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
+ method public static void enableDebugLogging(boolean);
+ method public abstract boolean executePendingTransactions();
+ method public abstract android.support.v4.app.Fragment findFragmentById(int);
+ method public abstract android.support.v4.app.Fragment findFragmentByTag(java.lang.String);
+ method public abstract android.support.v4.app.FragmentManager.BackStackEntry getBackStackEntryAt(int);
+ method public abstract int getBackStackEntryCount();
+ method public abstract android.support.v4.app.Fragment getFragment(android.os.Bundle, java.lang.String);
+ method public abstract java.util.List<android.support.v4.app.Fragment> getFragments();
+ method public abstract android.support.v4.app.Fragment getPrimaryNavigationFragment();
+ method public abstract boolean isDestroyed();
+ method public abstract boolean isStateSaved();
+ method public abstract void popBackStack();
+ method public abstract void popBackStack(java.lang.String, int);
+ method public abstract void popBackStack(int, int);
+ method public abstract boolean popBackStackImmediate();
+ method public abstract boolean popBackStackImmediate(java.lang.String, int);
+ method public abstract boolean popBackStackImmediate(int, int);
+ method public abstract void putFragment(android.os.Bundle, java.lang.String, android.support.v4.app.Fragment);
+ method public abstract void registerFragmentLifecycleCallbacks(android.support.v4.app.FragmentManager.FragmentLifecycleCallbacks, boolean);
+ method public abstract void removeOnBackStackChangedListener(android.support.v4.app.FragmentManager.OnBackStackChangedListener);
+ method public abstract android.support.v4.app.Fragment.SavedState saveFragmentInstanceState(android.support.v4.app.Fragment);
+ method public abstract void unregisterFragmentLifecycleCallbacks(android.support.v4.app.FragmentManager.FragmentLifecycleCallbacks);
+ field public static final int POP_BACK_STACK_INCLUSIVE = 1; // 0x1
+ }
+
+ public static abstract interface FragmentManager.BackStackEntry {
+ method public abstract java.lang.CharSequence getBreadCrumbShortTitle();
+ method public abstract int getBreadCrumbShortTitleRes();
+ method public abstract java.lang.CharSequence getBreadCrumbTitle();
+ method public abstract int getBreadCrumbTitleRes();
+ method public abstract int getId();
+ method public abstract java.lang.String getName();
+ }
+
+ public static abstract class FragmentManager.FragmentLifecycleCallbacks {
+ ctor public FragmentManager.FragmentLifecycleCallbacks();
+ method public void onFragmentActivityCreated(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment, android.os.Bundle);
+ method public void onFragmentAttached(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment, android.content.Context);
+ method public void onFragmentCreated(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment, android.os.Bundle);
+ method public void onFragmentDestroyed(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment);
+ method public void onFragmentDetached(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment);
+ method public void onFragmentPaused(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment);
+ method public void onFragmentPreAttached(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment, android.content.Context);
+ method public void onFragmentPreCreated(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment, android.os.Bundle);
+ method public void onFragmentResumed(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment);
+ method public void onFragmentSaveInstanceState(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment, android.os.Bundle);
+ method public void onFragmentStarted(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment);
+ method public void onFragmentStopped(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment);
+ method public void onFragmentViewCreated(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment, android.view.View, android.os.Bundle);
+ method public void onFragmentViewDestroyed(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment);
+ }
+
+ public static abstract interface FragmentManager.OnBackStackChangedListener {
+ method public abstract void onBackStackChanged();
+ }
+
+ public class FragmentManagerNonConfig {
+ }
+
+ public abstract class FragmentPagerAdapter extends android.support.v4.view.PagerAdapter {
+ ctor public FragmentPagerAdapter(android.support.v4.app.FragmentManager);
+ method public abstract android.support.v4.app.Fragment getItem(int);
+ method public long getItemId(int);
+ method public boolean isViewFromObject(android.view.View, java.lang.Object);
+ }
+
+ public abstract class FragmentStatePagerAdapter extends android.support.v4.view.PagerAdapter {
+ ctor public FragmentStatePagerAdapter(android.support.v4.app.FragmentManager);
+ method public abstract android.support.v4.app.Fragment getItem(int);
+ method public boolean isViewFromObject(android.view.View, java.lang.Object);
+ }
+
+ public class FragmentTabHost extends android.widget.TabHost implements android.widget.TabHost.OnTabChangeListener {
+ ctor public FragmentTabHost(android.content.Context);
+ ctor public FragmentTabHost(android.content.Context, android.util.AttributeSet);
+ method public void addTab(android.widget.TabHost.TabSpec, java.lang.Class<?>, android.os.Bundle);
+ method public void onTabChanged(java.lang.String);
+ method public deprecated void setup();
+ method public void setup(android.content.Context, android.support.v4.app.FragmentManager);
+ method public void setup(android.content.Context, android.support.v4.app.FragmentManager, int);
+ }
+
+ public abstract class FragmentTransaction {
+ ctor public FragmentTransaction();
+ method public abstract android.support.v4.app.FragmentTransaction add(android.support.v4.app.Fragment, java.lang.String);
+ method public abstract android.support.v4.app.FragmentTransaction add(int, android.support.v4.app.Fragment);
+ method public abstract android.support.v4.app.FragmentTransaction add(int, android.support.v4.app.Fragment, java.lang.String);
+ method public abstract android.support.v4.app.FragmentTransaction addSharedElement(android.view.View, java.lang.String);
+ method public abstract android.support.v4.app.FragmentTransaction addToBackStack(java.lang.String);
+ method public abstract android.support.v4.app.FragmentTransaction attach(android.support.v4.app.Fragment);
+ method public abstract int commit();
+ method public abstract int commitAllowingStateLoss();
+ method public abstract void commitNow();
+ method public abstract void commitNowAllowingStateLoss();
+ method public abstract android.support.v4.app.FragmentTransaction detach(android.support.v4.app.Fragment);
+ method public abstract android.support.v4.app.FragmentTransaction disallowAddToBackStack();
+ method public abstract android.support.v4.app.FragmentTransaction hide(android.support.v4.app.Fragment);
+ method public abstract boolean isAddToBackStackAllowed();
+ method public abstract boolean isEmpty();
+ method public abstract android.support.v4.app.FragmentTransaction remove(android.support.v4.app.Fragment);
+ method public abstract android.support.v4.app.FragmentTransaction replace(int, android.support.v4.app.Fragment);
+ method public abstract android.support.v4.app.FragmentTransaction replace(int, android.support.v4.app.Fragment, java.lang.String);
+ method public abstract android.support.v4.app.FragmentTransaction runOnCommit(java.lang.Runnable);
+ method public abstract deprecated android.support.v4.app.FragmentTransaction setAllowOptimization(boolean);
+ method public abstract android.support.v4.app.FragmentTransaction setBreadCrumbShortTitle(int);
+ method public abstract android.support.v4.app.FragmentTransaction setBreadCrumbShortTitle(java.lang.CharSequence);
+ method public abstract android.support.v4.app.FragmentTransaction setBreadCrumbTitle(int);
+ method public abstract android.support.v4.app.FragmentTransaction setBreadCrumbTitle(java.lang.CharSequence);
+ method public abstract android.support.v4.app.FragmentTransaction setCustomAnimations(int, int);
+ method public abstract android.support.v4.app.FragmentTransaction setCustomAnimations(int, int, int, int);
+ method public abstract android.support.v4.app.FragmentTransaction setPrimaryNavigationFragment(android.support.v4.app.Fragment);
+ method public abstract android.support.v4.app.FragmentTransaction setReorderingAllowed(boolean);
+ method public abstract android.support.v4.app.FragmentTransaction setTransition(int);
+ method public abstract android.support.v4.app.FragmentTransaction setTransitionStyle(int);
+ method public abstract android.support.v4.app.FragmentTransaction show(android.support.v4.app.Fragment);
+ field public static final int TRANSIT_ENTER_MASK = 4096; // 0x1000
+ field public static final int TRANSIT_EXIT_MASK = 8192; // 0x2000
+ field public static final int TRANSIT_FRAGMENT_CLOSE = 8194; // 0x2002
+ field public static final int TRANSIT_FRAGMENT_FADE = 4099; // 0x1003
+ field public static final int TRANSIT_FRAGMENT_OPEN = 4097; // 0x1001
+ field public static final int TRANSIT_NONE = 0; // 0x0
+ field public static final int TRANSIT_UNSET = -1; // 0xffffffff
+ }
+
+ public class ListFragment extends android.support.v4.app.Fragment {
+ ctor public ListFragment();
+ method public android.widget.ListAdapter getListAdapter();
+ method public android.widget.ListView getListView();
+ method public long getSelectedItemId();
+ method public int getSelectedItemPosition();
+ method public void onListItemClick(android.widget.ListView, android.view.View, int, long);
+ method public void setEmptyText(java.lang.CharSequence);
+ method public void setListAdapter(android.widget.ListAdapter);
+ method public void setListShown(boolean);
+ method public void setListShownNoAnimation(boolean);
+ method public void setSelection(int);
+ }
+
+ public abstract class LoaderManager {
+ ctor public LoaderManager();
+ method public abstract void destroyLoader(int);
+ method public abstract void dump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
+ method public static void enableDebugLogging(boolean);
+ method public abstract <D> android.support.v4.content.Loader<D> getLoader(int);
+ method public boolean hasRunningLoaders();
+ method public abstract <D> android.support.v4.content.Loader<D> initLoader(int, android.os.Bundle, android.support.v4.app.LoaderManager.LoaderCallbacks<D>);
+ method public abstract <D> android.support.v4.content.Loader<D> restartLoader(int, android.os.Bundle, android.support.v4.app.LoaderManager.LoaderCallbacks<D>);
+ }
+
+ public static abstract interface LoaderManager.LoaderCallbacks<D> {
+ method public abstract android.support.v4.content.Loader<D> onCreateLoader(int, android.os.Bundle);
+ method public abstract void onLoadFinished(android.support.v4.content.Loader<D>, D);
+ method public abstract void onLoaderReset(android.support.v4.content.Loader<D>);
+ }
+
+}
+
diff --git a/fragment/api/27.0.0.txt b/fragment/api/27.0.0.txt
new file mode 100644
index 0000000..ccd6f4f
--- /dev/null
+++ b/fragment/api/27.0.0.txt
@@ -0,0 +1,397 @@
+package android.support.v4.app {
+
+ public class DialogFragment extends android.support.v4.app.Fragment implements android.content.DialogInterface.OnCancelListener android.content.DialogInterface.OnDismissListener {
+ ctor public DialogFragment();
+ method public void dismiss();
+ method public void dismissAllowingStateLoss();
+ method public android.app.Dialog getDialog();
+ method public boolean getShowsDialog();
+ method public int getTheme();
+ method public boolean isCancelable();
+ method public void onCancel(android.content.DialogInterface);
+ method public android.app.Dialog onCreateDialog(android.os.Bundle);
+ method public void onDismiss(android.content.DialogInterface);
+ method public void setCancelable(boolean);
+ method public void setShowsDialog(boolean);
+ method public void setStyle(int, int);
+ method public void show(android.support.v4.app.FragmentManager, java.lang.String);
+ method public int show(android.support.v4.app.FragmentTransaction, java.lang.String);
+ field public static final int STYLE_NORMAL = 0; // 0x0
+ field public static final int STYLE_NO_FRAME = 2; // 0x2
+ field public static final int STYLE_NO_INPUT = 3; // 0x3
+ field public static final int STYLE_NO_TITLE = 1; // 0x1
+ }
+
+ public class Fragment implements android.content.ComponentCallbacks android.view.View.OnCreateContextMenuListener {
+ ctor public Fragment();
+ method public void dump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
+ method public final boolean equals(java.lang.Object);
+ method public final android.support.v4.app.FragmentActivity getActivity();
+ method public boolean getAllowEnterTransitionOverlap();
+ method public boolean getAllowReturnTransitionOverlap();
+ method public final android.os.Bundle getArguments();
+ method public final android.support.v4.app.FragmentManager getChildFragmentManager();
+ method public android.content.Context getContext();
+ method public java.lang.Object getEnterTransition();
+ method public java.lang.Object getExitTransition();
+ method public final android.support.v4.app.FragmentManager getFragmentManager();
+ method public final java.lang.Object getHost();
+ method public final int getId();
+ method public final android.view.LayoutInflater getLayoutInflater();
+ method public android.arch.lifecycle.Lifecycle getLifecycle();
+ method public android.support.v4.app.LoaderManager getLoaderManager();
+ method public final android.support.v4.app.Fragment getParentFragment();
+ method public java.lang.Object getReenterTransition();
+ method public final android.content.res.Resources getResources();
+ method public final boolean getRetainInstance();
+ method public java.lang.Object getReturnTransition();
+ method public java.lang.Object getSharedElementEnterTransition();
+ method public java.lang.Object getSharedElementReturnTransition();
+ method public final java.lang.String getString(int);
+ method public final java.lang.String getString(int, java.lang.Object...);
+ method public final java.lang.String getTag();
+ method public final android.support.v4.app.Fragment getTargetFragment();
+ method public final int getTargetRequestCode();
+ method public final java.lang.CharSequence getText(int);
+ method public boolean getUserVisibleHint();
+ method public android.view.View getView();
+ method public final int hashCode();
+ method public static android.support.v4.app.Fragment instantiate(android.content.Context, java.lang.String);
+ method public static android.support.v4.app.Fragment instantiate(android.content.Context, java.lang.String, android.os.Bundle);
+ method public final boolean isAdded();
+ method public final boolean isDetached();
+ method public final boolean isHidden();
+ method public final boolean isInLayout();
+ method public final boolean isRemoving();
+ method public final boolean isResumed();
+ method public final boolean isStateSaved();
+ method public final boolean isVisible();
+ method public void onActivityCreated(android.os.Bundle);
+ method public void onActivityResult(int, int, android.content.Intent);
+ method public void onAttach(android.content.Context);
+ method public deprecated void onAttach(android.app.Activity);
+ method public void onAttachFragment(android.support.v4.app.Fragment);
+ method public void onConfigurationChanged(android.content.res.Configuration);
+ method public boolean onContextItemSelected(android.view.MenuItem);
+ method public void onCreate(android.os.Bundle);
+ method public android.view.animation.Animation onCreateAnimation(int, boolean, int);
+ method public android.animation.Animator onCreateAnimator(int, boolean, int);
+ method public void onCreateContextMenu(android.view.ContextMenu, android.view.View, android.view.ContextMenu.ContextMenuInfo);
+ method public void onCreateOptionsMenu(android.view.Menu, android.view.MenuInflater);
+ method public android.view.View onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
+ method public void onDestroy();
+ method public void onDestroyOptionsMenu();
+ method public void onDestroyView();
+ method public void onDetach();
+ method public android.view.LayoutInflater onGetLayoutInflater(android.os.Bundle);
+ method public void onHiddenChanged(boolean);
+ method public void onInflate(android.content.Context, android.util.AttributeSet, android.os.Bundle);
+ method public deprecated void onInflate(android.app.Activity, android.util.AttributeSet, android.os.Bundle);
+ method public void onLowMemory();
+ method public void onMultiWindowModeChanged(boolean);
+ method public boolean onOptionsItemSelected(android.view.MenuItem);
+ method public void onOptionsMenuClosed(android.view.Menu);
+ method public void onPause();
+ method public void onPictureInPictureModeChanged(boolean);
+ method public void onPrepareOptionsMenu(android.view.Menu);
+ method public void onRequestPermissionsResult(int, java.lang.String[], int[]);
+ method public void onResume();
+ method public void onSaveInstanceState(android.os.Bundle);
+ method public void onStart();
+ method public void onStop();
+ method public void onViewCreated(android.view.View, android.os.Bundle);
+ method public void onViewStateRestored(android.os.Bundle);
+ method public void postponeEnterTransition();
+ method public void registerForContextMenu(android.view.View);
+ method public final void requestPermissions(java.lang.String[], int);
+ method public void setAllowEnterTransitionOverlap(boolean);
+ method public void setAllowReturnTransitionOverlap(boolean);
+ method public void setArguments(android.os.Bundle);
+ method public void setEnterSharedElementCallback(android.support.v4.app.SharedElementCallback);
+ method public void setEnterTransition(java.lang.Object);
+ method public void setExitSharedElementCallback(android.support.v4.app.SharedElementCallback);
+ method public void setExitTransition(java.lang.Object);
+ method public void setHasOptionsMenu(boolean);
+ method public void setInitialSavedState(android.support.v4.app.Fragment.SavedState);
+ method public void setMenuVisibility(boolean);
+ method public void setReenterTransition(java.lang.Object);
+ method public void setRetainInstance(boolean);
+ method public void setReturnTransition(java.lang.Object);
+ method public void setSharedElementEnterTransition(java.lang.Object);
+ method public void setSharedElementReturnTransition(java.lang.Object);
+ method public void setTargetFragment(android.support.v4.app.Fragment, int);
+ method public void setUserVisibleHint(boolean);
+ method public boolean shouldShowRequestPermissionRationale(java.lang.String);
+ method public void startActivity(android.content.Intent);
+ method public void startActivity(android.content.Intent, android.os.Bundle);
+ method public void startActivityForResult(android.content.Intent, int);
+ method public void startActivityForResult(android.content.Intent, int, android.os.Bundle);
+ method public void startIntentSenderForResult(android.content.IntentSender, int, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException;
+ method public void startPostponedEnterTransition();
+ method public void unregisterForContextMenu(android.view.View);
+ }
+
+ public static class Fragment.InstantiationException extends java.lang.RuntimeException {
+ ctor public Fragment.InstantiationException(java.lang.String, java.lang.Exception);
+ }
+
+ public static class Fragment.SavedState implements android.os.Parcelable {
+ method public int describeContents();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.app.Fragment.SavedState> CREATOR;
+ }
+
+ public class FragmentActivity extends android.support.v4.app.SupportActivity {
+ ctor public FragmentActivity();
+ method public java.lang.Object getLastCustomNonConfigurationInstance();
+ method public android.support.v4.app.FragmentManager getSupportFragmentManager();
+ method public android.support.v4.app.LoaderManager getSupportLoaderManager();
+ method public void onAttachFragment(android.support.v4.app.Fragment);
+ method public void onMultiWindowModeChanged(boolean);
+ method public void onPictureInPictureModeChanged(boolean);
+ method protected void onResumeFragments();
+ method public java.lang.Object onRetainCustomNonConfigurationInstance();
+ method public final java.lang.Object onRetainNonConfigurationInstance();
+ method public void setEnterSharedElementCallback(android.support.v4.app.SharedElementCallback);
+ method public void setExitSharedElementCallback(android.support.v4.app.SharedElementCallback);
+ method public void startActivityFromFragment(android.support.v4.app.Fragment, android.content.Intent, int);
+ method public void startActivityFromFragment(android.support.v4.app.Fragment, android.content.Intent, int, android.os.Bundle);
+ method public void startIntentSenderFromFragment(android.support.v4.app.Fragment, android.content.IntentSender, int, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException;
+ method public void supportFinishAfterTransition();
+ method public deprecated void supportInvalidateOptionsMenu();
+ method public void supportPostponeEnterTransition();
+ method public void supportStartPostponedEnterTransition();
+ method public final void validateRequestPermissionsRequestCode(int);
+ }
+
+ public abstract class FragmentContainer {
+ ctor public FragmentContainer();
+ method public android.support.v4.app.Fragment instantiate(android.content.Context, java.lang.String, android.os.Bundle);
+ method public abstract android.view.View onFindViewById(int);
+ method public abstract boolean onHasView();
+ }
+
+ public class FragmentController {
+ method public void attachHost(android.support.v4.app.Fragment);
+ method public static final android.support.v4.app.FragmentController createController(android.support.v4.app.FragmentHostCallback<?>);
+ method public void dispatchActivityCreated();
+ method public void dispatchConfigurationChanged(android.content.res.Configuration);
+ method public boolean dispatchContextItemSelected(android.view.MenuItem);
+ method public void dispatchCreate();
+ method public boolean dispatchCreateOptionsMenu(android.view.Menu, android.view.MenuInflater);
+ method public void dispatchDestroy();
+ method public void dispatchDestroyView();
+ method public void dispatchLowMemory();
+ method public void dispatchMultiWindowModeChanged(boolean);
+ method public boolean dispatchOptionsItemSelected(android.view.MenuItem);
+ method public void dispatchOptionsMenuClosed(android.view.Menu);
+ method public void dispatchPause();
+ method public void dispatchPictureInPictureModeChanged(boolean);
+ method public boolean dispatchPrepareOptionsMenu(android.view.Menu);
+ method public void dispatchReallyStop();
+ method public void dispatchResume();
+ method public void dispatchStart();
+ method public void dispatchStop();
+ method public void doLoaderDestroy();
+ method public void doLoaderRetain();
+ method public void doLoaderStart();
+ method public void doLoaderStop(boolean);
+ method public void dumpLoaders(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
+ method public boolean execPendingActions();
+ method public android.support.v4.app.Fragment findFragmentByWho(java.lang.String);
+ method public java.util.List<android.support.v4.app.Fragment> getActiveFragments(java.util.List<android.support.v4.app.Fragment>);
+ method public int getActiveFragmentsCount();
+ method public android.support.v4.app.FragmentManager getSupportFragmentManager();
+ method public android.support.v4.app.LoaderManager getSupportLoaderManager();
+ method public void noteStateNotSaved();
+ method public android.view.View onCreateView(android.view.View, java.lang.String, android.content.Context, android.util.AttributeSet);
+ method public void reportLoaderStart();
+ method public deprecated void restoreAllState(android.os.Parcelable, java.util.List<android.support.v4.app.Fragment>);
+ method public void restoreAllState(android.os.Parcelable, android.support.v4.app.FragmentManagerNonConfig);
+ method public void restoreLoaderNonConfig(android.support.v4.util.SimpleArrayMap<java.lang.String, android.support.v4.app.LoaderManager>);
+ method public android.support.v4.util.SimpleArrayMap<java.lang.String, android.support.v4.app.LoaderManager> retainLoaderNonConfig();
+ method public android.support.v4.app.FragmentManagerNonConfig retainNestedNonConfig();
+ method public deprecated java.util.List<android.support.v4.app.Fragment> retainNonConfig();
+ method public android.os.Parcelable saveAllState();
+ }
+
+ public abstract class FragmentHostCallback<E> extends android.support.v4.app.FragmentContainer {
+ ctor public FragmentHostCallback(android.content.Context, android.os.Handler, int);
+ method public void onDump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
+ method public android.view.View onFindViewById(int);
+ method public abstract E onGetHost();
+ method public android.view.LayoutInflater onGetLayoutInflater();
+ method public int onGetWindowAnimations();
+ method public boolean onHasView();
+ method public boolean onHasWindowAnimations();
+ method public void onRequestPermissionsFromFragment(android.support.v4.app.Fragment, java.lang.String[], int);
+ method public boolean onShouldSaveFragmentState(android.support.v4.app.Fragment);
+ method public boolean onShouldShowRequestPermissionRationale(java.lang.String);
+ method public void onStartActivityFromFragment(android.support.v4.app.Fragment, android.content.Intent, int);
+ method public void onStartActivityFromFragment(android.support.v4.app.Fragment, android.content.Intent, int, android.os.Bundle);
+ method public void onStartIntentSenderFromFragment(android.support.v4.app.Fragment, android.content.IntentSender, int, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException;
+ method public void onSupportInvalidateOptionsMenu();
+ }
+
+ public abstract class FragmentManager {
+ ctor public FragmentManager();
+ method public abstract void addOnBackStackChangedListener(android.support.v4.app.FragmentManager.OnBackStackChangedListener);
+ method public abstract android.support.v4.app.FragmentTransaction beginTransaction();
+ method public abstract void dump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
+ method public static void enableDebugLogging(boolean);
+ method public abstract boolean executePendingTransactions();
+ method public abstract android.support.v4.app.Fragment findFragmentById(int);
+ method public abstract android.support.v4.app.Fragment findFragmentByTag(java.lang.String);
+ method public abstract android.support.v4.app.FragmentManager.BackStackEntry getBackStackEntryAt(int);
+ method public abstract int getBackStackEntryCount();
+ method public abstract android.support.v4.app.Fragment getFragment(android.os.Bundle, java.lang.String);
+ method public abstract java.util.List<android.support.v4.app.Fragment> getFragments();
+ method public abstract android.support.v4.app.Fragment getPrimaryNavigationFragment();
+ method public abstract boolean isDestroyed();
+ method public abstract boolean isStateSaved();
+ method public abstract void popBackStack();
+ method public abstract void popBackStack(java.lang.String, int);
+ method public abstract void popBackStack(int, int);
+ method public abstract boolean popBackStackImmediate();
+ method public abstract boolean popBackStackImmediate(java.lang.String, int);
+ method public abstract boolean popBackStackImmediate(int, int);
+ method public abstract void putFragment(android.os.Bundle, java.lang.String, android.support.v4.app.Fragment);
+ method public abstract void registerFragmentLifecycleCallbacks(android.support.v4.app.FragmentManager.FragmentLifecycleCallbacks, boolean);
+ method public abstract void removeOnBackStackChangedListener(android.support.v4.app.FragmentManager.OnBackStackChangedListener);
+ method public abstract android.support.v4.app.Fragment.SavedState saveFragmentInstanceState(android.support.v4.app.Fragment);
+ method public abstract void unregisterFragmentLifecycleCallbacks(android.support.v4.app.FragmentManager.FragmentLifecycleCallbacks);
+ field public static final int POP_BACK_STACK_INCLUSIVE = 1; // 0x1
+ }
+
+ public static abstract interface FragmentManager.BackStackEntry {
+ method public abstract java.lang.CharSequence getBreadCrumbShortTitle();
+ method public abstract int getBreadCrumbShortTitleRes();
+ method public abstract java.lang.CharSequence getBreadCrumbTitle();
+ method public abstract int getBreadCrumbTitleRes();
+ method public abstract int getId();
+ method public abstract java.lang.String getName();
+ }
+
+ public static abstract class FragmentManager.FragmentLifecycleCallbacks {
+ ctor public FragmentManager.FragmentLifecycleCallbacks();
+ method public void onFragmentActivityCreated(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment, android.os.Bundle);
+ method public void onFragmentAttached(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment, android.content.Context);
+ method public void onFragmentCreated(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment, android.os.Bundle);
+ method public void onFragmentDestroyed(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment);
+ method public void onFragmentDetached(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment);
+ method public void onFragmentPaused(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment);
+ method public void onFragmentPreAttached(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment, android.content.Context);
+ method public void onFragmentPreCreated(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment, android.os.Bundle);
+ method public void onFragmentResumed(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment);
+ method public void onFragmentSaveInstanceState(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment, android.os.Bundle);
+ method public void onFragmentStarted(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment);
+ method public void onFragmentStopped(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment);
+ method public void onFragmentViewCreated(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment, android.view.View, android.os.Bundle);
+ method public void onFragmentViewDestroyed(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment);
+ }
+
+ public static abstract interface FragmentManager.OnBackStackChangedListener {
+ method public abstract void onBackStackChanged();
+ }
+
+ public class FragmentManagerNonConfig {
+ }
+
+ public abstract class FragmentPagerAdapter extends android.support.v4.view.PagerAdapter {
+ ctor public FragmentPagerAdapter(android.support.v4.app.FragmentManager);
+ method public abstract android.support.v4.app.Fragment getItem(int);
+ method public long getItemId(int);
+ method public boolean isViewFromObject(android.view.View, java.lang.Object);
+ }
+
+ public abstract class FragmentStatePagerAdapter extends android.support.v4.view.PagerAdapter {
+ ctor public FragmentStatePagerAdapter(android.support.v4.app.FragmentManager);
+ method public abstract android.support.v4.app.Fragment getItem(int);
+ method public boolean isViewFromObject(android.view.View, java.lang.Object);
+ }
+
+ public class FragmentTabHost extends android.widget.TabHost implements android.widget.TabHost.OnTabChangeListener {
+ ctor public FragmentTabHost(android.content.Context);
+ ctor public FragmentTabHost(android.content.Context, android.util.AttributeSet);
+ method public void addTab(android.widget.TabHost.TabSpec, java.lang.Class<?>, android.os.Bundle);
+ method public void onTabChanged(java.lang.String);
+ method public deprecated void setup();
+ method public void setup(android.content.Context, android.support.v4.app.FragmentManager);
+ method public void setup(android.content.Context, android.support.v4.app.FragmentManager, int);
+ }
+
+ public abstract class FragmentTransaction {
+ ctor public FragmentTransaction();
+ method public abstract android.support.v4.app.FragmentTransaction add(android.support.v4.app.Fragment, java.lang.String);
+ method public abstract android.support.v4.app.FragmentTransaction add(int, android.support.v4.app.Fragment);
+ method public abstract android.support.v4.app.FragmentTransaction add(int, android.support.v4.app.Fragment, java.lang.String);
+ method public abstract android.support.v4.app.FragmentTransaction addSharedElement(android.view.View, java.lang.String);
+ method public abstract android.support.v4.app.FragmentTransaction addToBackStack(java.lang.String);
+ method public abstract android.support.v4.app.FragmentTransaction attach(android.support.v4.app.Fragment);
+ method public abstract int commit();
+ method public abstract int commitAllowingStateLoss();
+ method public abstract void commitNow();
+ method public abstract void commitNowAllowingStateLoss();
+ method public abstract android.support.v4.app.FragmentTransaction detach(android.support.v4.app.Fragment);
+ method public abstract android.support.v4.app.FragmentTransaction disallowAddToBackStack();
+ method public abstract android.support.v4.app.FragmentTransaction hide(android.support.v4.app.Fragment);
+ method public abstract boolean isAddToBackStackAllowed();
+ method public abstract boolean isEmpty();
+ method public abstract android.support.v4.app.FragmentTransaction remove(android.support.v4.app.Fragment);
+ method public abstract android.support.v4.app.FragmentTransaction replace(int, android.support.v4.app.Fragment);
+ method public abstract android.support.v4.app.FragmentTransaction replace(int, android.support.v4.app.Fragment, java.lang.String);
+ method public abstract android.support.v4.app.FragmentTransaction runOnCommit(java.lang.Runnable);
+ method public abstract deprecated android.support.v4.app.FragmentTransaction setAllowOptimization(boolean);
+ method public abstract android.support.v4.app.FragmentTransaction setBreadCrumbShortTitle(int);
+ method public abstract android.support.v4.app.FragmentTransaction setBreadCrumbShortTitle(java.lang.CharSequence);
+ method public abstract android.support.v4.app.FragmentTransaction setBreadCrumbTitle(int);
+ method public abstract android.support.v4.app.FragmentTransaction setBreadCrumbTitle(java.lang.CharSequence);
+ method public abstract android.support.v4.app.FragmentTransaction setCustomAnimations(int, int);
+ method public abstract android.support.v4.app.FragmentTransaction setCustomAnimations(int, int, int, int);
+ method public abstract android.support.v4.app.FragmentTransaction setPrimaryNavigationFragment(android.support.v4.app.Fragment);
+ method public abstract android.support.v4.app.FragmentTransaction setReorderingAllowed(boolean);
+ method public abstract android.support.v4.app.FragmentTransaction setTransition(int);
+ method public abstract android.support.v4.app.FragmentTransaction setTransitionStyle(int);
+ method public abstract android.support.v4.app.FragmentTransaction show(android.support.v4.app.Fragment);
+ field public static final int TRANSIT_ENTER_MASK = 4096; // 0x1000
+ field public static final int TRANSIT_EXIT_MASK = 8192; // 0x2000
+ field public static final int TRANSIT_FRAGMENT_CLOSE = 8194; // 0x2002
+ field public static final int TRANSIT_FRAGMENT_FADE = 4099; // 0x1003
+ field public static final int TRANSIT_FRAGMENT_OPEN = 4097; // 0x1001
+ field public static final int TRANSIT_NONE = 0; // 0x0
+ field public static final int TRANSIT_UNSET = -1; // 0xffffffff
+ }
+
+ public class ListFragment extends android.support.v4.app.Fragment {
+ ctor public ListFragment();
+ method public android.widget.ListAdapter getListAdapter();
+ method public android.widget.ListView getListView();
+ method public long getSelectedItemId();
+ method public int getSelectedItemPosition();
+ method public void onListItemClick(android.widget.ListView, android.view.View, int, long);
+ method public void setEmptyText(java.lang.CharSequence);
+ method public void setListAdapter(android.widget.ListAdapter);
+ method public void setListShown(boolean);
+ method public void setListShownNoAnimation(boolean);
+ method public void setSelection(int);
+ }
+
+ public abstract class LoaderManager {
+ ctor public LoaderManager();
+ method public abstract void destroyLoader(int);
+ method public abstract void dump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
+ method public static void enableDebugLogging(boolean);
+ method public abstract <D> android.support.v4.content.Loader<D> getLoader(int);
+ method public boolean hasRunningLoaders();
+ method public abstract <D> android.support.v4.content.Loader<D> initLoader(int, android.os.Bundle, android.support.v4.app.LoaderManager.LoaderCallbacks<D>);
+ method public abstract <D> android.support.v4.content.Loader<D> restartLoader(int, android.os.Bundle, android.support.v4.app.LoaderManager.LoaderCallbacks<D>);
+ }
+
+ public static abstract interface LoaderManager.LoaderCallbacks<D> {
+ method public abstract android.support.v4.content.Loader<D> onCreateLoader(int, android.os.Bundle);
+ method public abstract void onLoadFinished(android.support.v4.content.Loader<D>, D);
+ method public abstract void onLoaderReset(android.support.v4.content.Loader<D>);
+ }
+
+}
+
diff --git a/fragment/build.gradle b/fragment/build.gradle
index 954cdd8..3a86f38 100644
--- a/fragment/build.gradle
+++ b/fragment/build.gradle
@@ -16,10 +16,6 @@
defaultConfig {
minSdkVersion 14
}
-
- sourceSets {
- main.java.srcDirs = ['java']
- }
}
supportLibrary {
diff --git a/fragment/java/android/support/v4/app/BackStackRecord.java b/fragment/src/main/java/android/support/v4/app/BackStackRecord.java
similarity index 100%
rename from fragment/java/android/support/v4/app/BackStackRecord.java
rename to fragment/src/main/java/android/support/v4/app/BackStackRecord.java
diff --git a/fragment/java/android/support/v4/app/BaseFragmentActivityApi14.java b/fragment/src/main/java/android/support/v4/app/BaseFragmentActivityApi14.java
similarity index 100%
rename from fragment/java/android/support/v4/app/BaseFragmentActivityApi14.java
rename to fragment/src/main/java/android/support/v4/app/BaseFragmentActivityApi14.java
diff --git a/fragment/java/android/support/v4/app/BaseFragmentActivityApi16.java b/fragment/src/main/java/android/support/v4/app/BaseFragmentActivityApi16.java
similarity index 100%
rename from fragment/java/android/support/v4/app/BaseFragmentActivityApi16.java
rename to fragment/src/main/java/android/support/v4/app/BaseFragmentActivityApi16.java
diff --git a/fragment/java/android/support/v4/app/DialogFragment.java b/fragment/src/main/java/android/support/v4/app/DialogFragment.java
similarity index 100%
rename from fragment/java/android/support/v4/app/DialogFragment.java
rename to fragment/src/main/java/android/support/v4/app/DialogFragment.java
diff --git a/fragment/java/android/support/v4/app/Fragment.java b/fragment/src/main/java/android/support/v4/app/Fragment.java
similarity index 97%
rename from fragment/java/android/support/v4/app/Fragment.java
rename to fragment/src/main/java/android/support/v4/app/Fragment.java
index ba74521..e734a27 100644
--- a/fragment/java/android/support/v4/app/Fragment.java
+++ b/fragment/src/main/java/android/support/v4/app/Fragment.java
@@ -463,6 +463,7 @@
/**
* Get the tag name of the fragment, if specified.
*/
+ @Nullable
final public String getTag() {
return mTag;
}
@@ -474,7 +475,7 @@
* <p>This method cannot be called if the fragment is added to a FragmentManager and
* if {@link #isStateSaved()} would return true.</p>
*/
- public void setArguments(Bundle args) {
+ public void setArguments(@Nullable Bundle args) {
if (mIndex >= 0 && isStateSaved()) {
throw new IllegalStateException("Fragment already active and state has been saved");
}
@@ -485,6 +486,7 @@
* Return the arguments supplied when the fragment was instantiated,
* if any.
*/
+ @Nullable
final public Bundle getArguments() {
return mArguments;
}
@@ -512,7 +514,7 @@
*
* @param state The state the fragment should be restored from.
*/
- public void setInitialSavedState(SavedState state) {
+ public void setInitialSavedState(@Nullable SavedState state) {
if (mIndex >= 0) {
throw new IllegalStateException("Fragment already active");
}
@@ -532,7 +534,7 @@
* are going to call back with {@link #onActivityResult(int, int, Intent)}.
*/
@SuppressWarnings("ReferenceEquality")
- public void setTargetFragment(Fragment fragment, int requestCode) {
+ public void setTargetFragment(@Nullable Fragment fragment, int requestCode) {
// Don't allow a caller to set a target fragment in another FragmentManager,
// but there's a snag: people do set target fragments before fragments get added.
// We'll have the FragmentManager check that for validity when we move
@@ -558,6 +560,7 @@
/**
* Return the target fragment set by {@link #setTargetFragment}.
*/
+ @Nullable
final public Fragment getTargetFragment() {
return mTarget;
}
@@ -572,6 +575,7 @@
/**
* Return the {@link Context} this fragment is currently associated with.
*/
+ @Nullable
public Context getContext() {
return mHost == null ? null : mHost.getContext();
}
@@ -581,6 +585,7 @@
* May return {@code null} if the fragment is associated with a {@link Context}
* instead.
*/
+ @Nullable
final public FragmentActivity getActivity() {
return mHost == null ? null : (FragmentActivity) mHost.getActivity();
}
@@ -589,6 +594,7 @@
* Return the host object of this fragment. May return {@code null} if the fragment
* isn't currently being hosted.
*/
+ @Nullable
final public Object getHost() {
return mHost == null ? null : mHost.onGetHost();
}
@@ -596,6 +602,7 @@
/**
* Return <code>getActivity().getResources()</code>.
*/
+ @NonNull
final public Resources getResources() {
if (mHost == null) {
throw new IllegalStateException("Fragment " + this + " not attached to Activity");
@@ -609,6 +616,7 @@
*
* @param resId Resource id for the CharSequence text
*/
+ @NonNull
public final CharSequence getText(@StringRes int resId) {
return getResources().getText(resId);
}
@@ -619,6 +627,7 @@
*
* @param resId Resource id for the string
*/
+ @NonNull
public final String getString(@StringRes int resId) {
return getResources().getString(resId);
}
@@ -631,7 +640,7 @@
* @param resId Resource id for the format string
* @param formatArgs The format arguments that will be used for substitution.
*/
-
+ @NonNull
public final String getString(@StringRes int resId, Object... formatArgs) {
return getResources().getString(resId, formatArgs);
}
@@ -646,6 +655,7 @@
* <p>If this Fragment is a child of another Fragment, the FragmentManager
* returned here will be the parent's {@link #getChildFragmentManager()}.
*/
+ @Nullable
final public FragmentManager getFragmentManager() {
return mFragmentManager;
}
@@ -654,6 +664,7 @@
* Return a private FragmentManager for placing and managing Fragments
* inside of this Fragment.
*/
+ @NonNull
final public FragmentManager getChildFragmentManager() {
if (mChildFragmentManager == null) {
instantiateChildFragmentManager();
@@ -674,6 +685,7 @@
* Return this fragment's child FragmentManager one has been previously created,
* otherwise null.
*/
+ @Nullable
FragmentManager peekChildFragmentManager() {
return mChildFragmentManager;
}
@@ -682,6 +694,7 @@
* Returns the parent Fragment containing this Fragment. If this Fragment
* is attached directly to an Activity, returns null.
*/
+ @Nullable
final public Fragment getParentFragment() {
return mParentFragment;
}
@@ -1082,7 +1095,8 @@
* a previous saved state, this is the state.
* @return The LayoutInflater used to inflate Views of this Fragment.
*/
- public LayoutInflater onGetLayoutInflater(Bundle savedInstanceState) {
+ @NonNull
+ public LayoutInflater onGetLayoutInflater(@Nullable Bundle savedInstanceState) {
// TODO: move the implementation in getLayoutInflater to here
return getLayoutInflater(savedInstanceState);
}
@@ -1113,7 +1127,8 @@
* a previous saved state, this is the state.
* @return The LayoutInflater used to inflate Views of this Fragment.
*/
- LayoutInflater performGetLayoutInflater(Bundle savedInstanceState) {
+ @NonNull
+ LayoutInflater performGetLayoutInflater(@Nullable Bundle savedInstanceState) {
LayoutInflater layoutInflater = onGetLayoutInflater(savedInstanceState);
mLayoutInflater = layoutInflater;
return mLayoutInflater;
@@ -1129,8 +1144,9 @@
* {@link #getLayoutInflater()} instead of this method.
*/
@Deprecated
+ @NonNull
@RestrictTo(LIBRARY_GROUP)
- public LayoutInflater getLayoutInflater(Bundle savedFragmentState) {
+ public LayoutInflater getLayoutInflater(@Nullable Bundle savedFragmentState) {
if (mHost == null) {
throw new IllegalStateException("onGetLayoutInflater() cannot be executed until the "
+ "Fragment is attached to the FragmentManager.");
@@ -1157,24 +1173,24 @@
* <p>Here is a typical implementation of a fragment that can take parameters
* both through attributes supplied here as well from {@link #getArguments()}:</p>
*
- * {@sample frameworks/support/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentArgumentsSupport.java
+ * {@sample frameworks/support/samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentArgumentsSupport.java
* fragment}
*
* <p>Note that parsing the XML attributes uses a "styleable" resource. The
* declaration for the styleable used here is:</p>
*
- * {@sample frameworks/support/samples/Support4Demos/res/values/attrs.xml fragment_arguments}
+ * {@sample frameworks/support/samples/Support4Demos/src/main/res/values/attrs.xml fragment_arguments}
*
* <p>The fragment can then be declared within its activity's content layout
* through a tag like this:</p>
*
- * {@sample frameworks/support/samples/Support4Demos/res/layout/fragment_arguments_support.xml from_attributes}
+ * {@sample frameworks/support/samples/Support4Demos/src/main/res/layout/fragment_arguments_support.xml from_attributes}
*
* <p>This fragment can also be created dynamically from arguments given
* at runtime in the arguments Bundle; here is an example of doing so at
* creation of the containing activity:</p>
*
- * {@sample frameworks/support/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentArgumentsSupport.java
+ * {@sample frameworks/support/samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentArgumentsSupport.java
* create}
*
* @param context The Activity that is inflating this fragment.
@@ -1356,7 +1372,7 @@
* @return Return the View for the fragment's UI, or null.
*/
@Nullable
- public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
+ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
return null;
}
@@ -1371,7 +1387,7 @@
* @param savedInstanceState If non-null, this fragment is being re-constructed
* from a previous saved state as given here.
*/
- public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
}
/**
@@ -1469,7 +1485,7 @@
*
* @param outState Bundle in which to place your saved state.
*/
- public void onSaveInstanceState(Bundle outState) {
+ public void onSaveInstanceState(@NonNull Bundle outState) {
}
/**
@@ -1768,7 +1784,7 @@
*
* @param transition The Transition to use to move Views into the initial Scene.
*/
- public void setEnterTransition(Object transition) {
+ public void setEnterTransition(@Nullable Object transition) {
ensureAnimationInfo().mEnterTransition = transition;
}
@@ -1781,6 +1797,7 @@
*
* @return the Transition to use to move Views into the initial Scene.
*/
+ @Nullable
public Object getEnterTransition() {
if (mAnimationInfo == null) {
return null;
@@ -1802,7 +1819,7 @@
* is preparing to close. <code>transition</code> must be an
* android.transition.Transition.
*/
- public void setReturnTransition(Object transition) {
+ public void setReturnTransition(@Nullable Object transition) {
ensureAnimationInfo().mReturnTransition = transition;
}
@@ -1818,6 +1835,7 @@
* @return the Transition to use to move Views out of the Scene when the Fragment
* is preparing to close.
*/
+ @Nullable
public Object getReturnTransition() {
if (mAnimationInfo == null) {
return null;
@@ -1839,7 +1857,7 @@
* is being closed not due to popping the back stack. <code>transition</code>
* must be an android.transition.Transition.
*/
- public void setExitTransition(Object transition) {
+ public void setExitTransition(@Nullable Object transition) {
ensureAnimationInfo().mExitTransition = transition;
}
@@ -1855,6 +1873,7 @@
* @return the Transition to use to move Views out of the Scene when the Fragment
* is being closed not due to popping the back stack.
*/
+ @Nullable
public Object getExitTransition() {
if (mAnimationInfo == null) {
return null;
@@ -1875,7 +1894,7 @@
* previously-started Activity. <code>transition</code>
* must be an android.transition.Transition.
*/
- public void setReenterTransition(Object transition) {
+ public void setReenterTransition(@Nullable Object transition) {
ensureAnimationInfo().mReenterTransition = transition;
}
@@ -1908,7 +1927,7 @@
* @param transition The Transition to use for shared elements transferred into the content
* Scene. <code>transition</code> must be an android.transition.Transition.
*/
- public void setSharedElementEnterTransition(Object transition) {
+ public void setSharedElementEnterTransition(@Nullable Object transition) {
ensureAnimationInfo().mSharedElementEnterTransition = transition;
}
@@ -1921,6 +1940,7 @@
* @return The Transition to use for shared elements transferred into the content
* Scene.
*/
+ @Nullable
public Object getSharedElementEnterTransition() {
if (mAnimationInfo == null) {
return null;
@@ -1940,7 +1960,7 @@
* @param transition The Transition to use for shared elements transferred out of the content
* Scene. <code>transition</code> must be an android.transition.Transition.
*/
- public void setSharedElementReturnTransition(Object transition) {
+ public void setSharedElementReturnTransition(@Nullable Object transition) {
ensureAnimationInfo().mSharedElementReturnTransition = transition;
}
@@ -1956,6 +1976,7 @@
* @return The Transition to use for shared elements transferred out of the content
* Scene.
*/
+ @Nullable
public Object getSharedElementReturnTransition() {
if (mAnimationInfo == null) {
return null;
@@ -2231,8 +2252,8 @@
mLifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_CREATE);
}
- View performCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
+ View performCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
+ @Nullable Bundle savedInstanceState) {
if (mChildFragmentManager != null) {
mChildFragmentManager.noteStateNotSaved();
}
diff --git a/fragment/java/android/support/v4/app/FragmentActivity.java b/fragment/src/main/java/android/support/v4/app/FragmentActivity.java
similarity index 98%
rename from fragment/java/android/support/v4/app/FragmentActivity.java
rename to fragment/src/main/java/android/support/v4/app/FragmentActivity.java
index e513ff7..614ff35 100644
--- a/fragment/java/android/support/v4/app/FragmentActivity.java
+++ b/fragment/src/main/java/android/support/v4/app/FragmentActivity.java
@@ -153,6 +153,13 @@
return;
}
+ ActivityCompat.PermissionCompatDelegate delegate =
+ ActivityCompat.getPermissionCompatDelegate();
+ if (delegate != null && delegate.onActivityResult(this, requestCode, resultCode, data)) {
+ // Delegate has handled the activity result
+ return;
+ }
+
super.onActivityResult(requestCode, resultCode, data);
}
@@ -760,6 +767,7 @@
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
+ mFragments.noteStateNotSaved();
int index = (requestCode >> 16) & 0xffff;
if (index != 0) {
index--;
@@ -969,7 +977,11 @@
continue;
}
fragment.mLifecycleRegistry.markState(state);
- markState(fragment.getChildFragmentManager(), state);
+
+ FragmentManager childFragmentManager = fragment.peekChildFragmentManager();
+ if (childFragmentManager != null) {
+ markState(childFragmentManager, state);
+ }
}
}
}
diff --git a/fragment/java/android/support/v4/app/FragmentContainer.java b/fragment/src/main/java/android/support/v4/app/FragmentContainer.java
similarity index 100%
rename from fragment/java/android/support/v4/app/FragmentContainer.java
rename to fragment/src/main/java/android/support/v4/app/FragmentContainer.java
diff --git a/fragment/java/android/support/v4/app/FragmentController.java b/fragment/src/main/java/android/support/v4/app/FragmentController.java
similarity index 100%
rename from fragment/java/android/support/v4/app/FragmentController.java
rename to fragment/src/main/java/android/support/v4/app/FragmentController.java
diff --git a/fragment/java/android/support/v4/app/FragmentHostCallback.java b/fragment/src/main/java/android/support/v4/app/FragmentHostCallback.java
similarity index 98%
rename from fragment/java/android/support/v4/app/FragmentHostCallback.java
rename to fragment/src/main/java/android/support/v4/app/FragmentHostCallback.java
index 7dc9f59..eeae62a 100644
--- a/fragment/java/android/support/v4/app/FragmentHostCallback.java
+++ b/fragment/src/main/java/android/support/v4/app/FragmentHostCallback.java
@@ -94,8 +94,9 @@
* Return a {@link LayoutInflater}.
* See {@link Activity#getLayoutInflater()}.
*/
+ @NonNull
public LayoutInflater onGetLayoutInflater() {
- return (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ return LayoutInflater.from(mContext);
}
/**
diff --git a/fragment/java/android/support/v4/app/FragmentManager.java b/fragment/src/main/java/android/support/v4/app/FragmentManager.java
similarity index 99%
rename from fragment/java/android/support/v4/app/FragmentManager.java
rename to fragment/src/main/java/android/support/v4/app/FragmentManager.java
index 6e6caa0..16103f8 100644
--- a/fragment/java/android/support/v4/app/FragmentManager.java
+++ b/fragment/src/main/java/android/support/v4/app/FragmentManager.java
@@ -1605,12 +1605,21 @@
@Override
public void onAnimationEnd(Animation animation) {
super.onAnimationEnd(animation);
- container.endViewTransition(viewToAnimate);
+ // onAnimationEnd() comes during draw(), so there can still be some
+ // draw events happening after this call. We don't want to detach
+ // the view until after the onAnimationEnd()
+ container.post(new Runnable() {
+ @Override
+ public void run() {
+ container.endViewTransition(viewToAnimate);
- if (fragment.getAnimatingAway() != null) {
- fragment.setAnimatingAway(null);
- moveToState(fragment, fragment.getStateAfterAnimating(), 0, 0, false);
- }
+ if (fragment.getAnimatingAway() != null) {
+ fragment.setAnimatingAway(null);
+ moveToState(fragment, fragment.getStateAfterAnimating(), 0, 0,
+ false);
+ }
+ }
+ });
}
});
setHWLayerAnimListenerIfAlpha(viewToAnimate, anim);
diff --git a/fragment/java/android/support/v4/app/FragmentManagerNonConfig.java b/fragment/src/main/java/android/support/v4/app/FragmentManagerNonConfig.java
similarity index 100%
rename from fragment/java/android/support/v4/app/FragmentManagerNonConfig.java
rename to fragment/src/main/java/android/support/v4/app/FragmentManagerNonConfig.java
diff --git a/fragment/java/android/support/v4/app/FragmentPagerAdapter.java b/fragment/src/main/java/android/support/v4/app/FragmentPagerAdapter.java
similarity index 94%
rename from fragment/java/android/support/v4/app/FragmentPagerAdapter.java
rename to fragment/src/main/java/android/support/v4/app/FragmentPagerAdapter.java
index 61b181d..6b25d2f 100644
--- a/fragment/java/android/support/v4/app/FragmentPagerAdapter.java
+++ b/fragment/src/main/java/android/support/v4/app/FragmentPagerAdapter.java
@@ -44,18 +44,18 @@
* <p>Here is an example implementation of a pager containing fragments of
* lists:
*
- * {@sample frameworks/support/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentPagerSupport.java
+ * {@sample frameworks/support/samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentPagerSupport.java
* complete}
*
* <p>The <code>R.layout.fragment_pager</code> resource of the top-level fragment is:
*
- * {@sample frameworks/support/samples/Support4Demos/res/layout/fragment_pager.xml
+ * {@sample frameworks/support/samples/Support4Demos/src/main/res/layout/fragment_pager.xml
* complete}
*
* <p>The <code>R.layout.fragment_pager_list</code> resource containing each
* individual fragment's layout is:
*
- * {@sample frameworks/support/samples/Support4Demos/res/layout/fragment_pager_list.xml
+ * {@sample frameworks/support/samples/Support4Demos/src/main/res/layout/fragment_pager_list.xml
* complete}
*/
public abstract class FragmentPagerAdapter extends PagerAdapter {
diff --git a/fragment/java/android/support/v4/app/FragmentState.java b/fragment/src/main/java/android/support/v4/app/FragmentState.java
similarity index 100%
rename from fragment/java/android/support/v4/app/FragmentState.java
rename to fragment/src/main/java/android/support/v4/app/FragmentState.java
diff --git a/fragment/java/android/support/v4/app/FragmentStatePagerAdapter.java b/fragment/src/main/java/android/support/v4/app/FragmentStatePagerAdapter.java
similarity index 95%
rename from fragment/java/android/support/v4/app/FragmentStatePagerAdapter.java
rename to fragment/src/main/java/android/support/v4/app/FragmentStatePagerAdapter.java
index fc27c4f..040f2db 100644
--- a/fragment/java/android/support/v4/app/FragmentStatePagerAdapter.java
+++ b/fragment/src/main/java/android/support/v4/app/FragmentStatePagerAdapter.java
@@ -47,18 +47,18 @@
* <p>Here is an example implementation of a pager containing fragments of
* lists:
*
- * {@sample frameworks/support/samples/Support13Demos/src/com/example/android/supportv13/app/FragmentStatePagerSupport.java
+ * {@sample frameworks/support/samples/Support13Demos/src/main/java/com/example/android/supportv13/app/FragmentStatePagerSupport.java
* complete}
*
* <p>The <code>R.layout.fragment_pager</code> resource of the top-level fragment is:
*
- * {@sample frameworks/support/samples/Support13Demos/res/layout/fragment_pager.xml
+ * {@sample frameworks/support/samples/Support13Demos/src/main/res/layout/fragment_pager.xml
* complete}
*
* <p>The <code>R.layout.fragment_pager_list</code> resource containing each
* individual fragment's layout is:
*
- * {@sample frameworks/support/samples/Support13Demos/res/layout/fragment_pager_list.xml
+ * {@sample frameworks/support/samples/Support13Demos/src/main/res/layout/fragment_pager_list.xml
* complete}
*/
public abstract class FragmentStatePagerAdapter extends PagerAdapter {
diff --git a/fragment/java/android/support/v4/app/FragmentTabHost.java b/fragment/src/main/java/android/support/v4/app/FragmentTabHost.java
similarity index 97%
rename from fragment/java/android/support/v4/app/FragmentTabHost.java
rename to fragment/src/main/java/android/support/v4/app/FragmentTabHost.java
index 09b89b7..6b914fe 100644
--- a/fragment/java/android/support/v4/app/FragmentTabHost.java
+++ b/fragment/src/main/java/android/support/v4/app/FragmentTabHost.java
@@ -41,12 +41,12 @@
*
* <p>Here is a simple example of using a FragmentTabHost in an Activity:
*
- * {@sample frameworks/support/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentTabs.java
+ * {@sample frameworks/support/samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentTabs.java
* complete}
*
* <p>This can also be used inside of a fragment through fragment nesting:
*
- * {@sample frameworks/support/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentTabsFragmentSupport.java
+ * {@sample frameworks/support/samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentTabsFragmentSupport.java
* complete}
*/
public class FragmentTabHost extends TabHost
diff --git a/fragment/java/android/support/v4/app/FragmentTransaction.java b/fragment/src/main/java/android/support/v4/app/FragmentTransaction.java
similarity index 100%
rename from fragment/java/android/support/v4/app/FragmentTransaction.java
rename to fragment/src/main/java/android/support/v4/app/FragmentTransaction.java
diff --git a/fragment/java/android/support/v4/app/FragmentTransition.java b/fragment/src/main/java/android/support/v4/app/FragmentTransition.java
similarity index 100%
rename from fragment/java/android/support/v4/app/FragmentTransition.java
rename to fragment/src/main/java/android/support/v4/app/FragmentTransition.java
diff --git a/fragment/java/android/support/v4/app/FragmentTransitionCompat21.java b/fragment/src/main/java/android/support/v4/app/FragmentTransitionCompat21.java
similarity index 100%
rename from fragment/java/android/support/v4/app/FragmentTransitionCompat21.java
rename to fragment/src/main/java/android/support/v4/app/FragmentTransitionCompat21.java
diff --git a/fragment/java/android/support/v4/app/FragmentTransitionImpl.java b/fragment/src/main/java/android/support/v4/app/FragmentTransitionImpl.java
similarity index 100%
rename from fragment/java/android/support/v4/app/FragmentTransitionImpl.java
rename to fragment/src/main/java/android/support/v4/app/FragmentTransitionImpl.java
diff --git a/fragment/java/android/support/v4/app/ListFragment.java b/fragment/src/main/java/android/support/v4/app/ListFragment.java
similarity index 98%
rename from fragment/java/android/support/v4/app/ListFragment.java
rename to fragment/src/main/java/android/support/v4/app/ListFragment.java
index 21617ad..496bd8e 100644
--- a/fragment/java/android/support/v4/app/ListFragment.java
+++ b/fragment/src/main/java/android/support/v4/app/ListFragment.java
@@ -19,6 +19,8 @@
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
@@ -142,7 +144,7 @@
* Attach to list view once the view hierarchy has been created.
*/
@Override
- public void onViewCreated(View view, Bundle savedInstanceState) {
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
ensureList();
}
diff --git a/fragment/java/android/support/v4/app/LoaderManager.java b/fragment/src/main/java/android/support/v4/app/LoaderManager.java
similarity index 100%
rename from fragment/java/android/support/v4/app/LoaderManager.java
rename to fragment/src/main/java/android/support/v4/app/LoaderManager.java
diff --git a/fragment/java/android/support/v4/app/OneShotPreDrawListener.java b/fragment/src/main/java/android/support/v4/app/OneShotPreDrawListener.java
similarity index 100%
rename from fragment/java/android/support/v4/app/OneShotPreDrawListener.java
rename to fragment/src/main/java/android/support/v4/app/OneShotPreDrawListener.java
diff --git a/fragment/java/android/support/v4/app/SuperNotCalledException.java b/fragment/src/main/java/android/support/v4/app/SuperNotCalledException.java
similarity index 100%
rename from fragment/java/android/support/v4/app/SuperNotCalledException.java
rename to fragment/src/main/java/android/support/v4/app/SuperNotCalledException.java
diff --git a/fragment/java/android/support/v4/app/package.html b/fragment/src/main/java/android/support/v4/app/package.html
similarity index 100%
rename from fragment/java/android/support/v4/app/package.html
rename to fragment/src/main/java/android/support/v4/app/package.html
diff --git a/fragment/tests/AndroidManifest.xml b/fragment/tests/AndroidManifest.xml
index e6a520e..4b38f23 100644
--- a/fragment/tests/AndroidManifest.xml
+++ b/fragment/tests/AndroidManifest.xml
@@ -38,6 +38,7 @@
android:launchMode="singleInstance"/>
<activity android:name="android.support.v4.app.test.NonConfigOnStopActivity"/>
+ <activity android:name="android.support.v4.app.test.HangingFragmentActivity"/>
</application>
</manifest>
diff --git a/fragment/tests/java/android/support/v4/app/FragmentReceiveResultTest.java b/fragment/tests/java/android/support/v4/app/FragmentReceiveResultTest.java
index 6a8ac05..f1fb929 100644
--- a/fragment/tests/java/android/support/v4/app/FragmentReceiveResultTest.java
+++ b/fragment/tests/java/android/support/v4/app/FragmentReceiveResultTest.java
@@ -19,6 +19,12 @@
import static junit.framework.TestCase.assertTrue;
import static junit.framework.TestCase.fail;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.ArgumentMatchers.same;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+
import android.app.Activity;
import android.app.PendingIntent;
import android.content.Intent;
@@ -102,6 +108,25 @@
assertEquals("content 40", mFragment.mResultContent);
}
+ @Test
+ @SmallTest
+ public void testActivityResult_withDelegate() {
+ ActivityCompat.PermissionCompatDelegate
+ delegate = mock(ActivityCompat.PermissionCompatDelegate.class);
+
+ Intent data = new Intent();
+ ActivityCompat.setPermissionCompatDelegate(delegate);
+
+ mActivityRule.getActivity().onActivityResult(42, 43, data);
+
+ verify(delegate).onActivityResult(same(mActivityRule.getActivity()), eq(42), eq(43),
+ same(data));
+
+ ActivityCompat.setPermissionCompatDelegate(null);
+ mActivityRule.getActivity().onActivityResult(42, 43, data);
+ verifyNoMoreInteractions(delegate);
+ }
+
private TestFragment attachTestFragment() throws Throwable {
final TestFragment fragment = new TestFragment();
mActivityRule.runOnUiThread(new Runnable() {
diff --git a/fragment/tests/java/android/support/v4/app/HangingFragmentTest.java b/fragment/tests/java/android/support/v4/app/HangingFragmentTest.java
new file mode 100644
index 0000000..e124b67
--- /dev/null
+++ b/fragment/tests/java/android/support/v4/app/HangingFragmentTest.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v4.app;
+
+import android.support.test.filters.SmallTest;
+import android.support.test.rule.ActivityTestRule;
+import android.support.test.runner.AndroidJUnit4;
+import android.support.v4.app.test.HangingFragmentActivity;
+
+import org.junit.Assert;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class HangingFragmentTest {
+
+ @Rule
+ public ActivityTestRule<HangingFragmentActivity> mActivityRule =
+ new ActivityTestRule<>(HangingFragmentActivity.class);
+
+ @Test
+ public void testNoCrash() throws InterruptedException {
+ HangingFragmentActivity newActivity = FragmentTestUtil.recreateActivity(
+ mActivityRule, mActivityRule.getActivity());
+ Assert.assertNotNull(newActivity);
+ }
+}
diff --git a/fragment/tests/java/android/support/v4/app/test/HangingFragmentActivity.java b/fragment/tests/java/android/support/v4/app/test/HangingFragmentActivity.java
new file mode 100644
index 0000000..9fab4df
--- /dev/null
+++ b/fragment/tests/java/android/support/v4/app/test/HangingFragmentActivity.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v4.app.test;
+
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.fragment.test.R;
+
+public class HangingFragmentActivity extends RecreatedActivity {
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(savedInstanceState == null ? R.layout.activity_inflated_fragment
+ : R.layout.activity_content);
+ }
+}
diff --git a/fragment/tests/res/layout/activity_inflated_fragment.xml b/fragment/tests/res/layout/activity_inflated_fragment.xml
new file mode 100644
index 0000000..867c96c
--- /dev/null
+++ b/fragment/tests/res/layout/activity_inflated_fragment.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2017 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+ <fragment android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:id="@+id/inflated_fragment"
+ android:name="android.support.v4.app.StrictViewFragment"/>
+</LinearLayout>
\ No newline at end of file
diff --git a/graphics/OWNERS b/graphics/OWNERS
new file mode 100644
index 0000000..4e6deac
--- /dev/null
+++ b/graphics/OWNERS
@@ -0,0 +1 @@
+ztenghui@google.com
\ No newline at end of file
diff --git a/graphics/drawable/Android.mk b/graphics/drawable/Android.mk
index b06fd76..b1f0b38 100644
--- a/graphics/drawable/Android.mk
+++ b/graphics/drawable/Android.mk
@@ -23,7 +23,7 @@
LOCAL_USE_AAPT2 := true
LOCAL_MODULE := android-support-vectordrawable
LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_SRC_FILES := $(call all-java-files-under, static/src)
+LOCAL_SRC_FILES := $(call all-java-files-under, static/src/main/java)
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/static/res
LOCAL_MANIFEST_FILE := static/AndroidManifest.xml
LOCAL_SHARED_ANDROID_LIBRARIES := \
@@ -42,7 +42,7 @@
LOCAL_USE_AAPT2 := true
LOCAL_MODULE := android-support-animatedvectordrawable
LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_SRC_FILES := $(call all-java-files-under, animated/src)
+LOCAL_SRC_FILES := $(call all-java-files-under, animated/src/main/java)
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/animated/res
LOCAL_MANIFEST_FILE := animated/AndroidManifest.xml
LOCAL_SHARED_ANDROID_LIBRARIES := \
diff --git a/graphics/drawable/AndroidManifest.xml b/graphics/drawable/AndroidManifest.xml
deleted file mode 100644
index 83124c7..0000000
--- a/graphics/drawable/AndroidManifest.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="android.support.graphics.drawable">
- <application />
-</manifest>
diff --git a/graphics/drawable/animated/AndroidManifest.xml b/graphics/drawable/animated/AndroidManifest.xml
index ec4a4a6..166b786 100644
--- a/graphics/drawable/animated/AndroidManifest.xml
+++ b/graphics/drawable/animated/AndroidManifest.xml
@@ -16,8 +16,4 @@
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.support.graphics.drawable.animated">
- <application>
- <meta-data android:name="android.support.graphics.drawable.animated.VERSION"
- android:value="${support-version}" />
- </application>
</manifest>
diff --git a/graphics/drawable/animated/api/26.1.0.txt b/graphics/drawable/animated/api/26.1.0.txt
new file mode 100644
index 0000000..f2601de
--- /dev/null
+++ b/graphics/drawable/animated/api/26.1.0.txt
@@ -0,0 +1,34 @@
+package android.support.graphics.drawable {
+
+ public abstract interface Animatable2Compat {
+ method public abstract void clearAnimationCallbacks();
+ method public abstract void registerAnimationCallback(android.support.graphics.drawable.Animatable2Compat.AnimationCallback);
+ method public abstract boolean unregisterAnimationCallback(android.support.graphics.drawable.Animatable2Compat.AnimationCallback);
+ }
+
+ public static abstract class Animatable2Compat.AnimationCallback {
+ ctor public Animatable2Compat.AnimationCallback();
+ method public void onAnimationEnd(android.graphics.drawable.Drawable);
+ method public void onAnimationStart(android.graphics.drawable.Drawable);
+ }
+
+ public class AnimatedVectorDrawableCompat extends android.support.graphics.drawable.VectorDrawableCommon implements android.support.graphics.drawable.Animatable2Compat {
+ method public void clearAnimationCallbacks();
+ method public static void clearAnimationCallbacks(android.graphics.drawable.Drawable);
+ method public static android.support.graphics.drawable.AnimatedVectorDrawableCompat create(android.content.Context, int);
+ method public static android.support.graphics.drawable.AnimatedVectorDrawableCompat createFromXmlInner(android.content.Context, android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet, android.content.res.Resources.Theme) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+ method public void draw(android.graphics.Canvas);
+ method public int getOpacity();
+ method public boolean isRunning();
+ method public void registerAnimationCallback(android.support.graphics.drawable.Animatable2Compat.AnimationCallback);
+ method public static void registerAnimationCallback(android.graphics.drawable.Drawable, android.support.graphics.drawable.Animatable2Compat.AnimationCallback);
+ method public void setAlpha(int);
+ method public void setColorFilter(android.graphics.ColorFilter);
+ method public void start();
+ method public void stop();
+ method public boolean unregisterAnimationCallback(android.support.graphics.drawable.Animatable2Compat.AnimationCallback);
+ method public static boolean unregisterAnimationCallback(android.graphics.drawable.Drawable, android.support.graphics.drawable.Animatable2Compat.AnimationCallback);
+ }
+
+}
+
diff --git a/graphics/drawable/animated/api/27.0.0.txt b/graphics/drawable/animated/api/27.0.0.txt
new file mode 100644
index 0000000..f2601de
--- /dev/null
+++ b/graphics/drawable/animated/api/27.0.0.txt
@@ -0,0 +1,34 @@
+package android.support.graphics.drawable {
+
+ public abstract interface Animatable2Compat {
+ method public abstract void clearAnimationCallbacks();
+ method public abstract void registerAnimationCallback(android.support.graphics.drawable.Animatable2Compat.AnimationCallback);
+ method public abstract boolean unregisterAnimationCallback(android.support.graphics.drawable.Animatable2Compat.AnimationCallback);
+ }
+
+ public static abstract class Animatable2Compat.AnimationCallback {
+ ctor public Animatable2Compat.AnimationCallback();
+ method public void onAnimationEnd(android.graphics.drawable.Drawable);
+ method public void onAnimationStart(android.graphics.drawable.Drawable);
+ }
+
+ public class AnimatedVectorDrawableCompat extends android.support.graphics.drawable.VectorDrawableCommon implements android.support.graphics.drawable.Animatable2Compat {
+ method public void clearAnimationCallbacks();
+ method public static void clearAnimationCallbacks(android.graphics.drawable.Drawable);
+ method public static android.support.graphics.drawable.AnimatedVectorDrawableCompat create(android.content.Context, int);
+ method public static android.support.graphics.drawable.AnimatedVectorDrawableCompat createFromXmlInner(android.content.Context, android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet, android.content.res.Resources.Theme) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+ method public void draw(android.graphics.Canvas);
+ method public int getOpacity();
+ method public boolean isRunning();
+ method public void registerAnimationCallback(android.support.graphics.drawable.Animatable2Compat.AnimationCallback);
+ method public static void registerAnimationCallback(android.graphics.drawable.Drawable, android.support.graphics.drawable.Animatable2Compat.AnimationCallback);
+ method public void setAlpha(int);
+ method public void setColorFilter(android.graphics.ColorFilter);
+ method public void start();
+ method public void stop();
+ method public boolean unregisterAnimationCallback(android.support.graphics.drawable.Animatable2Compat.AnimationCallback);
+ method public static boolean unregisterAnimationCallback(android.graphics.drawable.Drawable, android.support.graphics.drawable.Animatable2Compat.AnimationCallback);
+ }
+
+}
+
diff --git a/graphics/drawable/animated/build.gradle b/graphics/drawable/animated/build.gradle
index 29aeb3b..6036284 100644
--- a/graphics/drawable/animated/build.gradle
+++ b/graphics/drawable/animated/build.gradle
@@ -15,10 +15,6 @@
generatedDensities = []
}
- sourceSets {
- main.java.srcDir 'src'
- }
-
aaptOptions {
additionalParameters "--no-version-vectors"
}
diff --git a/graphics/drawable/animated/lint-baseline.xml b/graphics/drawable/animated/lint-baseline.xml
index eab8464..9fbd83c 100644
--- a/graphics/drawable/animated/lint-baseline.xml
+++ b/graphics/drawable/animated/lint-baseline.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<issues format="4" by="lint 3.0.0-alpha9">
+<issues format="4" by="lint 3.0.0-beta6">
<issue
id="ResourceType"
@@ -7,7 +7,7 @@
errorLine1=" parser = resources.getAnimation(id);"
errorLine2=" ~~">
<location
- file="src/android/support/graphics/drawable/AnimatorInflaterCompat.java"
+ file="src/main/java/android/support/graphics/drawable/AnimatorInflaterCompat.java"
line="130"
column="45"/>
</issue>
diff --git a/graphics/drawable/animated/src/android/support/graphics/drawable/Animatable2Compat.java b/graphics/drawable/animated/src/main/java/android/support/graphics/drawable/Animatable2Compat.java
similarity index 100%
rename from graphics/drawable/animated/src/android/support/graphics/drawable/Animatable2Compat.java
rename to graphics/drawable/animated/src/main/java/android/support/graphics/drawable/Animatable2Compat.java
diff --git a/graphics/drawable/animated/src/android/support/graphics/drawable/AnimatedVectorDrawableCompat.java b/graphics/drawable/animated/src/main/java/android/support/graphics/drawable/AnimatedVectorDrawableCompat.java
similarity index 100%
rename from graphics/drawable/animated/src/android/support/graphics/drawable/AnimatedVectorDrawableCompat.java
rename to graphics/drawable/animated/src/main/java/android/support/graphics/drawable/AnimatedVectorDrawableCompat.java
diff --git a/graphics/drawable/animated/src/android/support/graphics/drawable/AnimationUtilsCompat.java b/graphics/drawable/animated/src/main/java/android/support/graphics/drawable/AnimationUtilsCompat.java
similarity index 100%
rename from graphics/drawable/animated/src/android/support/graphics/drawable/AnimationUtilsCompat.java
rename to graphics/drawable/animated/src/main/java/android/support/graphics/drawable/AnimationUtilsCompat.java
diff --git a/graphics/drawable/animated/src/android/support/graphics/drawable/AnimatorInflaterCompat.java b/graphics/drawable/animated/src/main/java/android/support/graphics/drawable/AnimatorInflaterCompat.java
similarity index 100%
rename from graphics/drawable/animated/src/android/support/graphics/drawable/AnimatorInflaterCompat.java
rename to graphics/drawable/animated/src/main/java/android/support/graphics/drawable/AnimatorInflaterCompat.java
diff --git a/graphics/drawable/animated/src/android/support/graphics/drawable/ArgbEvaluator.java b/graphics/drawable/animated/src/main/java/android/support/graphics/drawable/ArgbEvaluator.java
similarity index 100%
rename from graphics/drawable/animated/src/android/support/graphics/drawable/ArgbEvaluator.java
rename to graphics/drawable/animated/src/main/java/android/support/graphics/drawable/ArgbEvaluator.java
diff --git a/graphics/drawable/animated/src/android/support/graphics/drawable/PathInterpolatorCompat.java b/graphics/drawable/animated/src/main/java/android/support/graphics/drawable/PathInterpolatorCompat.java
similarity index 100%
rename from graphics/drawable/animated/src/android/support/graphics/drawable/PathInterpolatorCompat.java
rename to graphics/drawable/animated/src/main/java/android/support/graphics/drawable/PathInterpolatorCompat.java
diff --git a/graphics/drawable/static/AndroidManifest.xml b/graphics/drawable/static/AndroidManifest.xml
index d8427ca..97b2f72 100644
--- a/graphics/drawable/static/AndroidManifest.xml
+++ b/graphics/drawable/static/AndroidManifest.xml
@@ -16,8 +16,4 @@
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.support.graphics.drawable">
- <application>
- <meta-data android:name="android.support.graphics.drawable.VERSION"
- android:value="${support-version}" />
- </application>
</manifest>
diff --git a/graphics/drawable/static/api/26.1.0.txt b/graphics/drawable/static/api/26.1.0.txt
new file mode 100644
index 0000000..db07bf2
--- /dev/null
+++ b/graphics/drawable/static/api/26.1.0.txt
@@ -0,0 +1,16 @@
+package android.support.graphics.drawable {
+
+ abstract class VectorDrawableCommon extends android.graphics.drawable.Drawable {
+ }
+
+ public class VectorDrawableCompat extends android.support.graphics.drawable.VectorDrawableCommon {
+ method public static android.support.graphics.drawable.VectorDrawableCompat create(android.content.res.Resources, int, android.content.res.Resources.Theme);
+ method public static android.support.graphics.drawable.VectorDrawableCompat createFromXmlInner(android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet, android.content.res.Resources.Theme) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+ method public void draw(android.graphics.Canvas);
+ method public int getOpacity();
+ method public void setAlpha(int);
+ method public void setColorFilter(android.graphics.ColorFilter);
+ }
+
+}
+
diff --git a/graphics/drawable/static/api/27.0.0.txt b/graphics/drawable/static/api/27.0.0.txt
new file mode 100644
index 0000000..db07bf2
--- /dev/null
+++ b/graphics/drawable/static/api/27.0.0.txt
@@ -0,0 +1,16 @@
+package android.support.graphics.drawable {
+
+ abstract class VectorDrawableCommon extends android.graphics.drawable.Drawable {
+ }
+
+ public class VectorDrawableCompat extends android.support.graphics.drawable.VectorDrawableCommon {
+ method public static android.support.graphics.drawable.VectorDrawableCompat create(android.content.res.Resources, int, android.content.res.Resources.Theme);
+ method public static android.support.graphics.drawable.VectorDrawableCompat createFromXmlInner(android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet, android.content.res.Resources.Theme) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+ method public void draw(android.graphics.Canvas);
+ method public int getOpacity();
+ method public void setAlpha(int);
+ method public void setColorFilter(android.graphics.ColorFilter);
+ }
+
+}
+
diff --git a/graphics/drawable/static/build.gradle b/graphics/drawable/static/build.gradle
index ee24ad5..949ba89 100644
--- a/graphics/drawable/static/build.gradle
+++ b/graphics/drawable/static/build.gradle
@@ -14,10 +14,6 @@
generatedDensities = []
}
- sourceSets {
- main.java.srcDir 'src'
- }
-
aaptOptions {
additionalParameters "--no-version-vectors"
}
diff --git a/graphics/drawable/static/src/android/support/graphics/drawable/AndroidResources.java b/graphics/drawable/static/src/main/java/android/support/graphics/drawable/AndroidResources.java
similarity index 100%
rename from graphics/drawable/static/src/android/support/graphics/drawable/AndroidResources.java
rename to graphics/drawable/static/src/main/java/android/support/graphics/drawable/AndroidResources.java
diff --git a/graphics/drawable/static/src/android/support/graphics/drawable/VectorDrawableCommon.java b/graphics/drawable/static/src/main/java/android/support/graphics/drawable/VectorDrawableCommon.java
similarity index 100%
rename from graphics/drawable/static/src/android/support/graphics/drawable/VectorDrawableCommon.java
rename to graphics/drawable/static/src/main/java/android/support/graphics/drawable/VectorDrawableCommon.java
diff --git a/graphics/drawable/static/src/android/support/graphics/drawable/VectorDrawableCompat.java b/graphics/drawable/static/src/main/java/android/support/graphics/drawable/VectorDrawableCompat.java
similarity index 100%
rename from graphics/drawable/static/src/android/support/graphics/drawable/VectorDrawableCompat.java
rename to graphics/drawable/static/src/main/java/android/support/graphics/drawable/VectorDrawableCompat.java
diff --git a/lifecycle/OWNERS b/lifecycle/OWNERS
new file mode 100644
index 0000000..fc51372
--- /dev/null
+++ b/lifecycle/OWNERS
@@ -0,0 +1,2 @@
+sergeyv@google.com
+yboyar@google.com
\ No newline at end of file
diff --git a/lifecycle/common-java8/src/main/java/android/arch/lifecycle/DefaultLifecycleObserver.java b/lifecycle/common-java8/src/main/java/android/arch/lifecycle/DefaultLifecycleObserver.java
index 77a7dfd..b6f468c 100644
--- a/lifecycle/common-java8/src/main/java/android/arch/lifecycle/DefaultLifecycleObserver.java
+++ b/lifecycle/common-java8/src/main/java/android/arch/lifecycle/DefaultLifecycleObserver.java
@@ -16,6 +16,8 @@
package android.arch.lifecycle;
+import android.support.annotation.NonNull;
+
/**
* Callback interface for listening to {@link LifecycleOwner} state changes.
* <p>
@@ -33,7 +35,7 @@
* @param owner the component, whose state was changed
*/
@Override
- default void onCreate(LifecycleOwner owner) {
+ default void onCreate(@NonNull LifecycleOwner owner) {
}
/**
@@ -44,7 +46,7 @@
* @param owner the component, whose state was changed
*/
@Override
- default void onStart(LifecycleOwner owner) {
+ default void onStart(@NonNull LifecycleOwner owner) {
}
/**
@@ -56,7 +58,7 @@
* @param owner the component, whose state was changed
*/
@Override
- default void onResume(LifecycleOwner owner) {
+ default void onResume(@NonNull LifecycleOwner owner) {
}
/**
@@ -68,7 +70,7 @@
* @param owner the component, whose state was changed
*/
@Override
- default void onPause(LifecycleOwner owner) {
+ default void onPause(@NonNull LifecycleOwner owner) {
}
/**
@@ -80,7 +82,7 @@
* @param owner the component, whose state was changed
*/
@Override
- default void onStop(LifecycleOwner owner) {
+ default void onStop(@NonNull LifecycleOwner owner) {
}
/**
@@ -92,7 +94,7 @@
* @param owner the component, whose state was changed
*/
@Override
- default void onDestroy(LifecycleOwner owner) {
+ default void onDestroy(@NonNull LifecycleOwner owner) {
}
}
diff --git a/lifecycle/common/src/main/java/android/arch/lifecycle/ClassesInfoCache.java b/lifecycle/common/src/main/java/android/arch/lifecycle/ClassesInfoCache.java
new file mode 100644
index 0000000..d88e276
--- /dev/null
+++ b/lifecycle/common/src/main/java/android/arch/lifecycle/ClassesInfoCache.java
@@ -0,0 +1,249 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.arch.lifecycle;
+
+import android.support.annotation.Nullable;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Reflection is expensive, so we cache information about methods
+ * for {@link ReflectiveGenericLifecycleObserver}, so it can call them,
+ * and for {@link Lifecycling} to determine which observer adapter to use.
+ */
+class ClassesInfoCache {
+
+ static ClassesInfoCache sInstance = new ClassesInfoCache();
+
+ private static final int CALL_TYPE_NO_ARG = 0;
+ private static final int CALL_TYPE_PROVIDER = 1;
+ private static final int CALL_TYPE_PROVIDER_WITH_EVENT = 2;
+
+ private final Map<Class, CallbackInfo> mCallbackMap = new HashMap<>();
+ private final Map<Class, Boolean> mHasLifecycleMethods = new HashMap<>();
+
+ boolean hasLifecycleMethods(Class klass) {
+ if (mHasLifecycleMethods.containsKey(klass)) {
+ return mHasLifecycleMethods.get(klass);
+ }
+
+ Method[] methods = getDeclaredMethods(klass);
+ for (Method method : methods) {
+ OnLifecycleEvent annotation = method.getAnnotation(OnLifecycleEvent.class);
+ if (annotation != null) {
+ // Optimization for reflection, we know that this method is called
+ // when there is no generated adapter. But there are methods with @OnLifecycleEvent
+ // so we know that will use ReflectiveGenericLifecycleObserver,
+ // so we createInfo in advance.
+ // CreateInfo always initialize mHasLifecycleMethods for a class, so we don't do it
+ // here.
+ createInfo(klass, methods);
+ return true;
+ }
+ }
+ mHasLifecycleMethods.put(klass, false);
+ return false;
+ }
+
+ private Method[] getDeclaredMethods(Class klass) {
+ try {
+ return klass.getDeclaredMethods();
+ } catch (NoClassDefFoundError e) {
+ throw new IllegalArgumentException("The observer class has some methods that use "
+ + "newer APIs which are not available in the current OS version. Lifecycles "
+ + "cannot access even other methods so you should make sure that your "
+ + "observer classes only access framework classes that are available "
+ + "in your min API level OR use lifecycle:compiler annotation processor.", e);
+ }
+ }
+
+ CallbackInfo getInfo(Class klass) {
+ CallbackInfo existing = mCallbackMap.get(klass);
+ if (existing != null) {
+ return existing;
+ }
+ existing = createInfo(klass, null);
+ return existing;
+ }
+
+ private void verifyAndPutHandler(Map<MethodReference, Lifecycle.Event> handlers,
+ MethodReference newHandler, Lifecycle.Event newEvent, Class klass) {
+ Lifecycle.Event event = handlers.get(newHandler);
+ if (event != null && newEvent != event) {
+ Method method = newHandler.mMethod;
+ throw new IllegalArgumentException(
+ "Method " + method.getName() + " in " + klass.getName()
+ + " already declared with different @OnLifecycleEvent value: previous"
+ + " value " + event + ", new value " + newEvent);
+ }
+ if (event == null) {
+ handlers.put(newHandler, newEvent);
+ }
+ }
+
+ private CallbackInfo createInfo(Class klass, @Nullable Method[] declaredMethods) {
+ Class superclass = klass.getSuperclass();
+ Map<MethodReference, Lifecycle.Event> handlerToEvent = new HashMap<>();
+ if (superclass != null) {
+ CallbackInfo superInfo = getInfo(superclass);
+ if (superInfo != null) {
+ handlerToEvent.putAll(superInfo.mHandlerToEvent);
+ }
+ }
+
+ Class[] interfaces = klass.getInterfaces();
+ for (Class intrfc : interfaces) {
+ for (Map.Entry<MethodReference, Lifecycle.Event> entry : getInfo(
+ intrfc).mHandlerToEvent.entrySet()) {
+ verifyAndPutHandler(handlerToEvent, entry.getKey(), entry.getValue(), klass);
+ }
+ }
+
+ Method[] methods = declaredMethods != null ? declaredMethods : getDeclaredMethods(klass);
+ boolean hasLifecycleMethods = false;
+ for (Method method : methods) {
+ OnLifecycleEvent annotation = method.getAnnotation(OnLifecycleEvent.class);
+ if (annotation == null) {
+ continue;
+ }
+ hasLifecycleMethods = true;
+ Class<?>[] params = method.getParameterTypes();
+ int callType = CALL_TYPE_NO_ARG;
+ if (params.length > 0) {
+ callType = CALL_TYPE_PROVIDER;
+ if (!params[0].isAssignableFrom(LifecycleOwner.class)) {
+ throw new IllegalArgumentException(
+ "invalid parameter type. Must be one and instanceof LifecycleOwner");
+ }
+ }
+ Lifecycle.Event event = annotation.value();
+
+ if (params.length > 1) {
+ callType = CALL_TYPE_PROVIDER_WITH_EVENT;
+ if (!params[1].isAssignableFrom(Lifecycle.Event.class)) {
+ throw new IllegalArgumentException(
+ "invalid parameter type. second arg must be an event");
+ }
+ if (event != Lifecycle.Event.ON_ANY) {
+ throw new IllegalArgumentException(
+ "Second arg is supported only for ON_ANY value");
+ }
+ }
+ if (params.length > 2) {
+ throw new IllegalArgumentException("cannot have more than 2 params");
+ }
+ MethodReference methodReference = new MethodReference(callType, method);
+ verifyAndPutHandler(handlerToEvent, methodReference, event, klass);
+ }
+ CallbackInfo info = new CallbackInfo(handlerToEvent);
+ mCallbackMap.put(klass, info);
+ mHasLifecycleMethods.put(klass, hasLifecycleMethods);
+ return info;
+ }
+
+ @SuppressWarnings("WeakerAccess")
+ static class CallbackInfo {
+ final Map<Lifecycle.Event, List<MethodReference>> mEventToHandlers;
+ final Map<MethodReference, Lifecycle.Event> mHandlerToEvent;
+
+ CallbackInfo(Map<MethodReference, Lifecycle.Event> handlerToEvent) {
+ mHandlerToEvent = handlerToEvent;
+ mEventToHandlers = new HashMap<>();
+ for (Map.Entry<MethodReference, Lifecycle.Event> entry : handlerToEvent.entrySet()) {
+ Lifecycle.Event event = entry.getValue();
+ List<MethodReference> methodReferences = mEventToHandlers.get(event);
+ if (methodReferences == null) {
+ methodReferences = new ArrayList<>();
+ mEventToHandlers.put(event, methodReferences);
+ }
+ methodReferences.add(entry.getKey());
+ }
+ }
+
+ @SuppressWarnings("ConstantConditions")
+ void invokeCallbacks(LifecycleOwner source, Lifecycle.Event event, Object target) {
+ invokeMethodsForEvent(mEventToHandlers.get(event), source, event, target);
+ invokeMethodsForEvent(mEventToHandlers.get(Lifecycle.Event.ON_ANY), source, event,
+ target);
+ }
+
+ private static void invokeMethodsForEvent(List<MethodReference> handlers,
+ LifecycleOwner source, Lifecycle.Event event, Object mWrapped) {
+ if (handlers != null) {
+ for (int i = handlers.size() - 1; i >= 0; i--) {
+ handlers.get(i).invokeCallback(source, event, mWrapped);
+ }
+ }
+ }
+ }
+
+ @SuppressWarnings("WeakerAccess")
+ static class MethodReference {
+ final int mCallType;
+ final Method mMethod;
+
+ MethodReference(int callType, Method method) {
+ mCallType = callType;
+ mMethod = method;
+ mMethod.setAccessible(true);
+ }
+
+ void invokeCallback(LifecycleOwner source, Lifecycle.Event event, Object target) {
+ //noinspection TryWithIdenticalCatches
+ try {
+ switch (mCallType) {
+ case CALL_TYPE_NO_ARG:
+ mMethod.invoke(target);
+ break;
+ case CALL_TYPE_PROVIDER:
+ mMethod.invoke(target, source);
+ break;
+ case CALL_TYPE_PROVIDER_WITH_EVENT:
+ mMethod.invoke(target, source, event);
+ break;
+ }
+ } catch (InvocationTargetException e) {
+ throw new RuntimeException("Failed to call observer method", e.getCause());
+ } catch (IllegalAccessException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ MethodReference that = (MethodReference) o;
+ return mCallType == that.mCallType && mMethod.getName().equals(that.mMethod.getName());
+ }
+
+ @Override
+ public int hashCode() {
+ return 31 * mCallType + mMethod.getName().hashCode();
+ }
+ }
+}
diff --git a/lifecycle/common/src/main/java/android/arch/lifecycle/CompositeGeneratedAdaptersObserver.java b/lifecycle/common/src/main/java/android/arch/lifecycle/CompositeGeneratedAdaptersObserver.java
new file mode 100644
index 0000000..e8cbe7c
--- /dev/null
+++ b/lifecycle/common/src/main/java/android/arch/lifecycle/CompositeGeneratedAdaptersObserver.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.arch.lifecycle;
+
+
+import android.support.annotation.RestrictTo;
+
+/**
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public class CompositeGeneratedAdaptersObserver implements GenericLifecycleObserver {
+
+ private final GeneratedAdapter[] mGeneratedAdapters;
+
+ CompositeGeneratedAdaptersObserver(GeneratedAdapter[] generatedAdapters) {
+ mGeneratedAdapters = generatedAdapters;
+ }
+
+ @Override
+ public void onStateChanged(LifecycleOwner source, Lifecycle.Event event) {
+ MethodCallsLogger logger = new MethodCallsLogger();
+ for (GeneratedAdapter mGenerated: mGeneratedAdapters) {
+ mGenerated.callMethods(source, event, false, logger);
+ }
+ for (GeneratedAdapter mGenerated: mGeneratedAdapters) {
+ mGenerated.callMethods(source, event, true, logger);
+ }
+ }
+}
diff --git a/lifecycle/common/src/main/java/android/arch/lifecycle/GeneratedAdapter.java b/lifecycle/common/src/main/java/android/arch/lifecycle/GeneratedAdapter.java
new file mode 100644
index 0000000..a8862da
--- /dev/null
+++ b/lifecycle/common/src/main/java/android/arch/lifecycle/GeneratedAdapter.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.arch.lifecycle;
+
+import android.support.annotation.RestrictTo;
+
+/**
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public interface GeneratedAdapter {
+
+ /**
+ * Called when a state transition event happens.
+ *
+ * @param source The source of the event
+ * @param event The event
+ * @param onAny approveCall onAny handlers
+ * @param logger if passed, used to track called methods and prevent calling the same method
+ * twice
+ */
+ void callMethods(LifecycleOwner source, Lifecycle.Event event, boolean onAny,
+ MethodCallsLogger logger);
+}
diff --git a/lifecycle/common/src/main/java/android/arch/lifecycle/Lifecycle.java b/lifecycle/common/src/main/java/android/arch/lifecycle/Lifecycle.java
index 02db5ff..c0a2090 100644
--- a/lifecycle/common/src/main/java/android/arch/lifecycle/Lifecycle.java
+++ b/lifecycle/common/src/main/java/android/arch/lifecycle/Lifecycle.java
@@ -17,6 +17,7 @@
package android.arch.lifecycle;
import android.support.annotation.MainThread;
+import android.support.annotation.NonNull;
/**
* Defines an object that has an Android Lifecycle. {@link android.support.v4.app.Fragment Fragment}
@@ -83,7 +84,7 @@
* @param observer The observer to notify.
*/
@MainThread
- public abstract void addObserver(LifecycleObserver observer);
+ public abstract void addObserver(@NonNull LifecycleObserver observer);
/**
* Removes the given observer from the observers list.
@@ -99,7 +100,7 @@
* @param observer The observer to be removed.
*/
@MainThread
- public abstract void removeObserver(LifecycleObserver observer);
+ public abstract void removeObserver(@NonNull LifecycleObserver observer);
/**
* Returns the current state of the Lifecycle.
@@ -193,7 +194,7 @@
* @param state State to compare with
* @return true if this State is greater or equal to the given {@code state}
*/
- public boolean isAtLeast(State state) {
+ public boolean isAtLeast(@NonNull State state) {
return compareTo(state) >= 0;
}
}
diff --git a/lifecycle/common/src/main/java/android/arch/lifecycle/LifecycleOwner.java b/lifecycle/common/src/main/java/android/arch/lifecycle/LifecycleOwner.java
index 934cf3a..068bac1 100644
--- a/lifecycle/common/src/main/java/android/arch/lifecycle/LifecycleOwner.java
+++ b/lifecycle/common/src/main/java/android/arch/lifecycle/LifecycleOwner.java
@@ -16,6 +16,8 @@
package android.arch.lifecycle;
+import android.support.annotation.NonNull;
+
/**
* A class that has an Android lifecycle. These events can be used by custom components to
* handle lifecycle changes without implementing any code inside the Activity or the Fragment.
@@ -29,5 +31,6 @@
*
* @return The lifecycle of the provider.
*/
+ @NonNull
Lifecycle getLifecycle();
}
diff --git a/lifecycle/common/src/main/java/android/arch/lifecycle/Lifecycling.java b/lifecycle/common/src/main/java/android/arch/lifecycle/Lifecycling.java
index 0dfa2e1..7d6b37f 100644
--- a/lifecycle/common/src/main/java/android/arch/lifecycle/Lifecycling.java
+++ b/lifecycle/common/src/main/java/android/arch/lifecycle/Lifecycling.java
@@ -22,27 +22,25 @@
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
/**
* Internal class to handle lifecycle conversion etc.
+ *
* @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-class Lifecycling {
- private static Constructor<? extends GenericLifecycleObserver> sREFLECTIVE;
+public class Lifecycling {
- static {
- try {
- sREFLECTIVE = ReflectiveGenericLifecycleObserver.class
- .getDeclaredConstructor(Object.class);
- } catch (NoSuchMethodException ignored) {
+ private static final int REFLECTIVE_CALLBACK = 1;
+ private static final int GENERATED_CALLBACK = 2;
- }
- }
-
- private static Map<Class, Constructor<? extends GenericLifecycleObserver>> sCallbackCache =
+ private static Map<Class, Integer> sCallbackCache = new HashMap<>();
+ private static Map<Class, List<Constructor<? extends GeneratedAdapter>>> sClassToAdapters =
new HashMap<>();
@NonNull
@@ -54,24 +52,31 @@
if (object instanceof GenericLifecycleObserver) {
return (GenericLifecycleObserver) object;
}
+
+ final Class<?> klass = object.getClass();
+ int type = getObserverConstructorType(klass);
+ if (type == GENERATED_CALLBACK) {
+ List<Constructor<? extends GeneratedAdapter>> constructors =
+ sClassToAdapters.get(klass);
+ if (constructors.size() == 1) {
+ GeneratedAdapter generatedAdapter = createGeneratedAdapter(
+ constructors.get(0), object);
+ return new SingleGeneratedAdapterObserver(generatedAdapter);
+ }
+ GeneratedAdapter[] adapters = new GeneratedAdapter[constructors.size()];
+ for (int i = 0; i < constructors.size(); i++) {
+ adapters[i] = createGeneratedAdapter(constructors.get(i), object);
+ }
+ return new CompositeGeneratedAdaptersObserver(adapters);
+ }
+ return new ReflectiveGenericLifecycleObserver(object);
+ }
+
+ private static GeneratedAdapter createGeneratedAdapter(
+ Constructor<? extends GeneratedAdapter> constructor, Object object) {
//noinspection TryWithIdenticalCatches
try {
- final Class<?> klass = object.getClass();
- Constructor<? extends GenericLifecycleObserver> cachedConstructor = sCallbackCache.get(
- klass);
- if (cachedConstructor != null) {
- return cachedConstructor.newInstance(object);
- }
- cachedConstructor = getGeneratedAdapterConstructor(klass);
- if (cachedConstructor != null) {
- if (!cachedConstructor.isAccessible()) {
- cachedConstructor.setAccessible(true);
- }
- } else {
- cachedConstructor = sREFLECTIVE;
- }
- sCallbackCache.put(klass, cachedConstructor);
- return cachedConstructor.newInstance(object);
+ return constructor.newInstance(object);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
} catch (InstantiationException e) {
@@ -82,37 +87,95 @@
}
@Nullable
- private static Constructor<? extends GenericLifecycleObserver> getGeneratedAdapterConstructor(
- Class<?> klass) {
- Package aPackage = klass.getPackage();
- final String fullPackage = aPackage != null ? aPackage.getName() : "";
-
- String name = klass.getCanonicalName();
- // anonymous class bug:35073837
- if (name == null) {
- return null;
- }
- final String adapterName = getAdapterName(fullPackage.isEmpty() ? name :
- name.substring(fullPackage.length() + 1));
+ private static Constructor<? extends GeneratedAdapter> generatedConstructor(Class<?> klass) {
try {
- @SuppressWarnings("unchecked")
- final Class<? extends GenericLifecycleObserver> aClass =
- (Class<? extends GenericLifecycleObserver>) Class.forName(
+ Package aPackage = klass.getPackage();
+ String name = klass.getCanonicalName();
+ final String fullPackage = aPackage != null ? aPackage.getName() : "";
+ final String adapterName = getAdapterName(fullPackage.isEmpty() ? name :
+ name.substring(fullPackage.length() + 1));
+
+ @SuppressWarnings("unchecked") final Class<? extends GeneratedAdapter> aClass =
+ (Class<? extends GeneratedAdapter>) Class.forName(
fullPackage.isEmpty() ? adapterName : fullPackage + "." + adapterName);
- return aClass.getDeclaredConstructor(klass);
- } catch (ClassNotFoundException e) {
- final Class<?> superclass = klass.getSuperclass();
- if (superclass != null) {
- return getGeneratedAdapterConstructor(superclass);
+ Constructor<? extends GeneratedAdapter> constructor =
+ aClass.getDeclaredConstructor(klass);
+ if (!constructor.isAccessible()) {
+ constructor.setAccessible(true);
}
+ return constructor;
+ } catch (ClassNotFoundException e) {
+ return null;
} catch (NoSuchMethodException e) {
// this should not happen
throw new RuntimeException(e);
}
- return null;
}
- static String getAdapterName(String className) {
+ private static int getObserverConstructorType(Class<?> klass) {
+ if (sCallbackCache.containsKey(klass)) {
+ return sCallbackCache.get(klass);
+ }
+ int type = resolveObserverCallbackType(klass);
+ sCallbackCache.put(klass, type);
+ return type;
+ }
+
+ private static int resolveObserverCallbackType(Class<?> klass) {
+ // anonymous class bug:35073837
+ if (klass.getCanonicalName() == null) {
+ return REFLECTIVE_CALLBACK;
+ }
+
+ Constructor<? extends GeneratedAdapter> constructor = generatedConstructor(klass);
+ if (constructor != null) {
+ sClassToAdapters.put(klass, Collections
+ .<Constructor<? extends GeneratedAdapter>>singletonList(constructor));
+ return GENERATED_CALLBACK;
+ }
+
+ boolean hasLifecycleMethods = ClassesInfoCache.sInstance.hasLifecycleMethods(klass);
+ if (hasLifecycleMethods) {
+ return REFLECTIVE_CALLBACK;
+ }
+
+ Class<?> superclass = klass.getSuperclass();
+ List<Constructor<? extends GeneratedAdapter>> adapterConstructors = null;
+ if (isLifecycleParent(superclass)) {
+ if (getObserverConstructorType(superclass) == REFLECTIVE_CALLBACK) {
+ return REFLECTIVE_CALLBACK;
+ }
+ adapterConstructors = new ArrayList<>(sClassToAdapters.get(superclass));
+ }
+
+ for (Class<?> intrface : klass.getInterfaces()) {
+ if (!isLifecycleParent(intrface)) {
+ continue;
+ }
+ if (getObserverConstructorType(intrface) == REFLECTIVE_CALLBACK) {
+ return REFLECTIVE_CALLBACK;
+ }
+ if (adapterConstructors == null) {
+ adapterConstructors = new ArrayList<>();
+ }
+ adapterConstructors.addAll(sClassToAdapters.get(intrface));
+ }
+ if (adapterConstructors != null) {
+ sClassToAdapters.put(klass, adapterConstructors);
+ return GENERATED_CALLBACK;
+ }
+
+ return REFLECTIVE_CALLBACK;
+ }
+
+ private static boolean isLifecycleParent(Class<?> klass) {
+ return klass != null && LifecycleObserver.class.isAssignableFrom(klass);
+ }
+
+ /**
+ * Create a name for an adapter class.
+ */
+ public static String getAdapterName(String className) {
return className.replace(".", "_") + "_LifecycleAdapter";
}
}
diff --git a/lifecycle/common/src/main/java/android/arch/lifecycle/MethodCallsLogger.java b/lifecycle/common/src/main/java/android/arch/lifecycle/MethodCallsLogger.java
new file mode 100644
index 0000000..031e43e
--- /dev/null
+++ b/lifecycle/common/src/main/java/android/arch/lifecycle/MethodCallsLogger.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.arch.lifecycle;
+
+import android.support.annotation.RestrictTo;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public class MethodCallsLogger {
+ private Map<String, Integer> mCalledMethods = new HashMap<>();
+
+ /**
+ * @hide
+ */
+ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+ public boolean approveCall(String name, int type) {
+ Integer nullableMask = mCalledMethods.get(name);
+ int mask = nullableMask != null ? nullableMask : 0;
+ boolean wasCalled = (mask & type) != 0;
+ mCalledMethods.put(name, mask | type);
+ return !wasCalled;
+ }
+}
diff --git a/lifecycle/common/src/main/java/android/arch/lifecycle/ReflectiveGenericLifecycleObserver.java b/lifecycle/common/src/main/java/android/arch/lifecycle/ReflectiveGenericLifecycleObserver.java
index 44815e6..f010ed8 100644
--- a/lifecycle/common/src/main/java/android/arch/lifecycle/ReflectiveGenericLifecycleObserver.java
+++ b/lifecycle/common/src/main/java/android/arch/lifecycle/ReflectiveGenericLifecycleObserver.java
@@ -16,204 +16,23 @@
package android.arch.lifecycle;
+import android.arch.lifecycle.ClassesInfoCache.CallbackInfo;
import android.arch.lifecycle.Lifecycle.Event;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-
/**
* An internal implementation of {@link GenericLifecycleObserver} that relies on reflection.
*/
class ReflectiveGenericLifecycleObserver implements GenericLifecycleObserver {
private final Object mWrapped;
private final CallbackInfo mInfo;
- @SuppressWarnings("WeakerAccess")
- static final Map<Class, CallbackInfo> sInfoCache = new HashMap<>();
ReflectiveGenericLifecycleObserver(Object wrapped) {
mWrapped = wrapped;
- mInfo = getInfo(mWrapped.getClass());
+ mInfo = ClassesInfoCache.sInstance.getInfo(mWrapped.getClass());
}
@Override
public void onStateChanged(LifecycleOwner source, Event event) {
- invokeCallbacks(mInfo, source, event);
+ mInfo.invokeCallbacks(source, event, mWrapped);
}
-
- private void invokeMethodsForEvent(List<MethodReference> handlers, LifecycleOwner source,
- Event event) {
- if (handlers != null) {
- for (int i = handlers.size() - 1; i >= 0; i--) {
- MethodReference reference = handlers.get(i);
- invokeCallback(reference, source, event);
- }
- }
- }
-
- @SuppressWarnings("ConstantConditions")
- private void invokeCallbacks(CallbackInfo info, LifecycleOwner source, Event event) {
- invokeMethodsForEvent(info.mEventToHandlers.get(event), source, event);
- invokeMethodsForEvent(info.mEventToHandlers.get(Event.ON_ANY), source, event);
- }
-
- private void invokeCallback(MethodReference reference, LifecycleOwner source, Event event) {
- //noinspection TryWithIdenticalCatches
- try {
- switch (reference.mCallType) {
- case CALL_TYPE_NO_ARG:
- reference.mMethod.invoke(mWrapped);
- break;
- case CALL_TYPE_PROVIDER:
- reference.mMethod.invoke(mWrapped, source);
- break;
- case CALL_TYPE_PROVIDER_WITH_EVENT:
- reference.mMethod.invoke(mWrapped, source, event);
- break;
- }
- } catch (InvocationTargetException e) {
- throw new RuntimeException("Failed to call observer method", e.getCause());
- } catch (IllegalAccessException e) {
- throw new RuntimeException(e);
- }
- }
-
- private static CallbackInfo getInfo(Class klass) {
- CallbackInfo existing = sInfoCache.get(klass);
- if (existing != null) {
- return existing;
- }
- existing = createInfo(klass);
- return existing;
- }
-
- private static void verifyAndPutHandler(Map<MethodReference, Event> handlers,
- MethodReference newHandler, Event newEvent, Class klass) {
- Event event = handlers.get(newHandler);
- if (event != null && newEvent != event) {
- Method method = newHandler.mMethod;
- throw new IllegalArgumentException(
- "Method " + method.getName() + " in " + klass.getName()
- + " already declared with different @OnLifecycleEvent value: previous"
- + " value " + event + ", new value " + newEvent);
- }
- if (event == null) {
- handlers.put(newHandler, newEvent);
- }
- }
-
- private static CallbackInfo createInfo(Class klass) {
- Class superclass = klass.getSuperclass();
- Map<MethodReference, Event> handlerToEvent = new HashMap<>();
- if (superclass != null) {
- CallbackInfo superInfo = getInfo(superclass);
- if (superInfo != null) {
- handlerToEvent.putAll(superInfo.mHandlerToEvent);
- }
- }
-
- Method[] methods = klass.getDeclaredMethods();
-
- Class[] interfaces = klass.getInterfaces();
- for (Class intrfc : interfaces) {
- for (Entry<MethodReference, Event> entry : getInfo(intrfc).mHandlerToEvent.entrySet()) {
- verifyAndPutHandler(handlerToEvent, entry.getKey(), entry.getValue(), klass);
- }
- }
-
- for (Method method : methods) {
- OnLifecycleEvent annotation = method.getAnnotation(OnLifecycleEvent.class);
- if (annotation == null) {
- continue;
- }
- Class<?>[] params = method.getParameterTypes();
- int callType = CALL_TYPE_NO_ARG;
- if (params.length > 0) {
- callType = CALL_TYPE_PROVIDER;
- if (!params[0].isAssignableFrom(LifecycleOwner.class)) {
- throw new IllegalArgumentException(
- "invalid parameter type. Must be one and instanceof LifecycleOwner");
- }
- }
- Event event = annotation.value();
-
- if (params.length > 1) {
- callType = CALL_TYPE_PROVIDER_WITH_EVENT;
- if (!params[1].isAssignableFrom(Event.class)) {
- throw new IllegalArgumentException(
- "invalid parameter type. second arg must be an event");
- }
- if (event != Event.ON_ANY) {
- throw new IllegalArgumentException(
- "Second arg is supported only for ON_ANY value");
- }
- }
- if (params.length > 2) {
- throw new IllegalArgumentException("cannot have more than 2 params");
- }
- MethodReference methodReference = new MethodReference(callType, method);
- verifyAndPutHandler(handlerToEvent, methodReference, event, klass);
- }
- CallbackInfo info = new CallbackInfo(handlerToEvent);
- sInfoCache.put(klass, info);
- return info;
- }
-
- @SuppressWarnings("WeakerAccess")
- static class CallbackInfo {
- final Map<Event, List<MethodReference>> mEventToHandlers;
- final Map<MethodReference, Event> mHandlerToEvent;
-
- CallbackInfo(Map<MethodReference, Event> handlerToEvent) {
- mHandlerToEvent = handlerToEvent;
- mEventToHandlers = new HashMap<>();
- for (Entry<MethodReference, Event> entry : handlerToEvent.entrySet()) {
- Event event = entry.getValue();
- List<MethodReference> methodReferences = mEventToHandlers.get(event);
- if (methodReferences == null) {
- methodReferences = new ArrayList<>();
- mEventToHandlers.put(event, methodReferences);
- }
- methodReferences.add(entry.getKey());
- }
- }
- }
-
- @SuppressWarnings("WeakerAccess")
- static class MethodReference {
- final int mCallType;
- final Method mMethod;
-
- MethodReference(int callType, Method method) {
- mCallType = callType;
- mMethod = method;
- mMethod.setAccessible(true);
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
- if (o == null || getClass() != o.getClass()) {
- return false;
- }
-
- MethodReference that = (MethodReference) o;
- return mCallType == that.mCallType && mMethod.getName().equals(that.mMethod.getName());
- }
-
- @Override
- public int hashCode() {
- return 31 * mCallType + mMethod.getName().hashCode();
- }
- }
-
- private static final int CALL_TYPE_NO_ARG = 0;
- private static final int CALL_TYPE_PROVIDER = 1;
- private static final int CALL_TYPE_PROVIDER_WITH_EVENT = 2;
}
diff --git a/lifecycle/common/src/main/java/android/arch/lifecycle/SingleGeneratedAdapterObserver.java b/lifecycle/common/src/main/java/android/arch/lifecycle/SingleGeneratedAdapterObserver.java
new file mode 100644
index 0000000..d176a3a
--- /dev/null
+++ b/lifecycle/common/src/main/java/android/arch/lifecycle/SingleGeneratedAdapterObserver.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.arch.lifecycle;
+
+import android.support.annotation.RestrictTo;
+
+/**
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public class SingleGeneratedAdapterObserver implements GenericLifecycleObserver {
+
+ private final GeneratedAdapter mGeneratedAdapter;
+
+ SingleGeneratedAdapterObserver(GeneratedAdapter generatedAdapter) {
+ mGeneratedAdapter = generatedAdapter;
+ }
+
+ @Override
+ public void onStateChanged(LifecycleOwner source, Lifecycle.Event event) {
+ mGeneratedAdapter.callMethods(source, event, false, null);
+ mGeneratedAdapter.callMethods(source, event, true, null);
+ }
+}
diff --git a/lifecycle/common/src/test/java/android/arch/lifecycle/LifecyclingTest.java b/lifecycle/common/src/test/java/android/arch/lifecycle/LifecyclingTest.java
new file mode 100644
index 0000000..70ce84c
--- /dev/null
+++ b/lifecycle/common/src/test/java/android/arch/lifecycle/LifecyclingTest.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.arch.lifecycle;
+
+import static org.hamcrest.CoreMatchers.instanceOf;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+import android.arch.lifecycle.observers.DerivedSequence1;
+import android.arch.lifecycle.observers.DerivedSequence2;
+import android.arch.lifecycle.observers.DerivedWithNewMethods;
+import android.arch.lifecycle.observers.DerivedWithNoNewMethods;
+import android.arch.lifecycle.observers.DerivedWithOverridenMethodsWithLfAnnotation;
+import android.arch.lifecycle.observers.InterfaceImpl1;
+import android.arch.lifecycle.observers.InterfaceImpl2;
+import android.arch.lifecycle.observers.InterfaceImpl3;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+@RunWith(JUnit4.class)
+public class LifecyclingTest {
+
+ @Test
+ public void testDerivedWithNewLfMethodsNoGeneratedAdapter() {
+ GenericLifecycleObserver callback = Lifecycling.getCallback(new DerivedWithNewMethods());
+ assertThat(callback, instanceOf(ReflectiveGenericLifecycleObserver.class));
+ }
+
+ @Test
+ public void testDerivedWithNoNewLfMethodsNoGeneratedAdapter() {
+ GenericLifecycleObserver callback = Lifecycling.getCallback(new DerivedWithNoNewMethods());
+ assertThat(callback, instanceOf(SingleGeneratedAdapterObserver.class));
+ }
+
+ @Test
+ public void testDerivedWithOverridenMethodsNoGeneratedAdapter() {
+ GenericLifecycleObserver callback = Lifecycling.getCallback(
+ new DerivedWithOverridenMethodsWithLfAnnotation());
+ // that is not effective but...
+ assertThat(callback, instanceOf(ReflectiveGenericLifecycleObserver.class));
+ }
+
+ @Test
+ public void testInterfaceImpl1NoGeneratedAdapter() {
+ GenericLifecycleObserver callback = Lifecycling.getCallback(new InterfaceImpl1());
+ assertThat(callback, instanceOf(SingleGeneratedAdapterObserver.class));
+ }
+
+ @Test
+ public void testInterfaceImpl2NoGeneratedAdapter() {
+ GenericLifecycleObserver callback = Lifecycling.getCallback(new InterfaceImpl2());
+ assertThat(callback, instanceOf(CompositeGeneratedAdaptersObserver.class));
+ }
+
+ @Test
+ public void testInterfaceImpl3NoGeneratedAdapter() {
+ GenericLifecycleObserver callback = Lifecycling.getCallback(new InterfaceImpl3());
+ assertThat(callback, instanceOf(CompositeGeneratedAdaptersObserver.class));
+ }
+
+ @Test
+ public void testDerivedSequence() {
+ GenericLifecycleObserver callback2 = Lifecycling.getCallback(new DerivedSequence2());
+ assertThat(callback2, instanceOf(ReflectiveGenericLifecycleObserver.class));
+ GenericLifecycleObserver callback1 = Lifecycling.getCallback(new DerivedSequence1());
+ assertThat(callback1, instanceOf(SingleGeneratedAdapterObserver.class));
+ }
+}
diff --git a/paging/runtime/src/androidTest/java/android/arch/paging/StringPagedList.java b/lifecycle/common/src/test/java/android/arch/lifecycle/observers/Base.java
similarity index 66%
copy from paging/runtime/src/androidTest/java/android/arch/paging/StringPagedList.java
copy to lifecycle/common/src/test/java/android/arch/lifecycle/observers/Base.java
index 5318d38..08919d4 100644
--- a/paging/runtime/src/androidTest/java/android/arch/paging/StringPagedList.java
+++ b/lifecycle/common/src/test/java/android/arch/lifecycle/observers/Base.java
@@ -14,12 +14,15 @@
* limitations under the License.
*/
-package android.arch.paging;
+package android.arch.lifecycle.observers;
-import java.util.Arrays;
+import android.arch.lifecycle.Lifecycle;
+import android.arch.lifecycle.LifecycleObserver;
+import android.arch.lifecycle.OnLifecycleEvent;
-public class StringPagedList extends NullPaddedList<String> {
- public StringPagedList(int leadingNulls, int trailingNulls, String... items) {
- super(leadingNulls, Arrays.asList(items), trailingNulls);
+public class Base implements LifecycleObserver {
+
+ @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
+ public void onCreate() {
}
}
diff --git a/lifecycle/common/src/test/java/android/arch/lifecycle/observers/Base_LifecycleAdapter.java b/lifecycle/common/src/test/java/android/arch/lifecycle/observers/Base_LifecycleAdapter.java
new file mode 100644
index 0000000..4218b96
--- /dev/null
+++ b/lifecycle/common/src/test/java/android/arch/lifecycle/observers/Base_LifecycleAdapter.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.arch.lifecycle.observers;
+
+import android.arch.lifecycle.GeneratedAdapter;
+import android.arch.lifecycle.Lifecycle;
+import android.arch.lifecycle.LifecycleOwner;
+import android.arch.lifecycle.MethodCallsLogger;
+
+public class Base_LifecycleAdapter implements GeneratedAdapter {
+
+ public Base_LifecycleAdapter(Base base) {
+ }
+
+ @Override
+ public void callMethods(LifecycleOwner source, Lifecycle.Event event, boolean onAny,
+ MethodCallsLogger logger) {
+
+ }
+}
diff --git a/paging/runtime/src/androidTest/java/android/arch/paging/StringPagedList.java b/lifecycle/common/src/test/java/android/arch/lifecycle/observers/DerivedSequence1.java
similarity index 69%
copy from paging/runtime/src/androidTest/java/android/arch/paging/StringPagedList.java
copy to lifecycle/common/src/test/java/android/arch/lifecycle/observers/DerivedSequence1.java
index 5318d38..9db37f1 100644
--- a/paging/runtime/src/androidTest/java/android/arch/paging/StringPagedList.java
+++ b/lifecycle/common/src/test/java/android/arch/lifecycle/observers/DerivedSequence1.java
@@ -14,12 +14,10 @@
* limitations under the License.
*/
-package android.arch.paging;
+package android.arch.lifecycle.observers;
-import java.util.Arrays;
+public class DerivedSequence1 extends Base {
-public class StringPagedList extends NullPaddedList<String> {
- public StringPagedList(int leadingNulls, int trailingNulls, String... items) {
- super(leadingNulls, Arrays.asList(items), trailingNulls);
+ public void something() {
}
}
diff --git a/paging/runtime/src/androidTest/java/android/arch/paging/StringPagedList.java b/lifecycle/common/src/test/java/android/arch/lifecycle/observers/DerivedSequence2.java
similarity index 69%
copy from paging/runtime/src/androidTest/java/android/arch/paging/StringPagedList.java
copy to lifecycle/common/src/test/java/android/arch/lifecycle/observers/DerivedSequence2.java
index 5318d38..f2ef943 100644
--- a/paging/runtime/src/androidTest/java/android/arch/paging/StringPagedList.java
+++ b/lifecycle/common/src/test/java/android/arch/lifecycle/observers/DerivedSequence2.java
@@ -14,12 +14,15 @@
* limitations under the License.
*/
-package android.arch.paging;
+package android.arch.lifecycle.observers;
-import java.util.Arrays;
+import android.arch.lifecycle.Lifecycle;
+import android.arch.lifecycle.OnLifecycleEvent;
-public class StringPagedList extends NullPaddedList<String> {
- public StringPagedList(int leadingNulls, int trailingNulls, String... items) {
- super(leadingNulls, Arrays.asList(items), trailingNulls);
+public class DerivedSequence2 extends DerivedSequence1 {
+
+ @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
+ void onStop() {
+
}
}
diff --git a/paging/runtime/src/androidTest/java/android/arch/paging/StringPagedList.java b/lifecycle/common/src/test/java/android/arch/lifecycle/observers/DerivedWithNewMethods.java
similarity index 69%
copy from paging/runtime/src/androidTest/java/android/arch/paging/StringPagedList.java
copy to lifecycle/common/src/test/java/android/arch/lifecycle/observers/DerivedWithNewMethods.java
index 5318d38..b1eaef0 100644
--- a/paging/runtime/src/androidTest/java/android/arch/paging/StringPagedList.java
+++ b/lifecycle/common/src/test/java/android/arch/lifecycle/observers/DerivedWithNewMethods.java
@@ -14,12 +14,15 @@
* limitations under the License.
*/
-package android.arch.paging;
+package android.arch.lifecycle.observers;
-import java.util.Arrays;
+import android.arch.lifecycle.Lifecycle;
+import android.arch.lifecycle.OnLifecycleEvent;
-public class StringPagedList extends NullPaddedList<String> {
- public StringPagedList(int leadingNulls, int trailingNulls, String... items) {
- super(leadingNulls, Arrays.asList(items), trailingNulls);
+public class DerivedWithNewMethods extends Base {
+
+ @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
+ void onStop() {
+
}
}
diff --git a/paging/runtime/src/androidTest/java/android/arch/paging/StringPagedList.java b/lifecycle/common/src/test/java/android/arch/lifecycle/observers/DerivedWithNoNewMethods.java
similarity index 69%
rename from paging/runtime/src/androidTest/java/android/arch/paging/StringPagedList.java
rename to lifecycle/common/src/test/java/android/arch/lifecycle/observers/DerivedWithNoNewMethods.java
index 5318d38..cb1afb8 100644
--- a/paging/runtime/src/androidTest/java/android/arch/paging/StringPagedList.java
+++ b/lifecycle/common/src/test/java/android/arch/lifecycle/observers/DerivedWithNoNewMethods.java
@@ -14,12 +14,7 @@
* limitations under the License.
*/
-package android.arch.paging;
+package android.arch.lifecycle.observers;
-import java.util.Arrays;
-
-public class StringPagedList extends NullPaddedList<String> {
- public StringPagedList(int leadingNulls, int trailingNulls, String... items) {
- super(leadingNulls, Arrays.asList(items), trailingNulls);
- }
+public class DerivedWithNoNewMethods extends Base {
}
diff --git a/paging/common/src/test/java/android/arch/paging/User.java b/lifecycle/common/src/test/java/android/arch/lifecycle/observers/DerivedWithOverridenMethodsWithLfAnnotation.java
similarity index 67%
copy from paging/common/src/test/java/android/arch/paging/User.java
copy to lifecycle/common/src/test/java/android/arch/lifecycle/observers/DerivedWithOverridenMethodsWithLfAnnotation.java
index a6d965a..40c7c9a 100644
--- a/paging/common/src/test/java/android/arch/paging/User.java
+++ b/lifecycle/common/src/test/java/android/arch/lifecycle/observers/DerivedWithOverridenMethodsWithLfAnnotation.java
@@ -14,19 +14,16 @@
* limitations under the License.
*/
-package android.arch.paging;
+package android.arch.lifecycle.observers;
-public class User {
- public final String name;
- public final String info;
+import android.arch.lifecycle.Lifecycle;
+import android.arch.lifecycle.OnLifecycleEvent;
- public User(String name, String info) {
- this.name = name;
- this.info = info;
- }
+public class DerivedWithOverridenMethodsWithLfAnnotation extends Base {
+ @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
@Override
- public String toString() {
- return name;
+ public void onCreate() {
+ super.onCreate();
}
}
diff --git a/paging/runtime/src/androidTest/java/android/arch/paging/StringPagedList.java b/lifecycle/common/src/test/java/android/arch/lifecycle/observers/Interface1.java
similarity index 66%
copy from paging/runtime/src/androidTest/java/android/arch/paging/StringPagedList.java
copy to lifecycle/common/src/test/java/android/arch/lifecycle/observers/Interface1.java
index 5318d38..e193de9 100644
--- a/paging/runtime/src/androidTest/java/android/arch/paging/StringPagedList.java
+++ b/lifecycle/common/src/test/java/android/arch/lifecycle/observers/Interface1.java
@@ -14,12 +14,14 @@
* limitations under the License.
*/
-package android.arch.paging;
+package android.arch.lifecycle.observers;
-import java.util.Arrays;
+import android.arch.lifecycle.Lifecycle;
+import android.arch.lifecycle.LifecycleObserver;
+import android.arch.lifecycle.OnLifecycleEvent;
-public class StringPagedList extends NullPaddedList<String> {
- public StringPagedList(int leadingNulls, int trailingNulls, String... items) {
- super(leadingNulls, Arrays.asList(items), trailingNulls);
- }
+public interface Interface1 extends LifecycleObserver {
+
+ @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
+ void onCreate();
}
diff --git a/lifecycle/common/src/test/java/android/arch/lifecycle/observers/Interface1_LifecycleAdapter.java b/lifecycle/common/src/test/java/android/arch/lifecycle/observers/Interface1_LifecycleAdapter.java
new file mode 100644
index 0000000..c597b1c
--- /dev/null
+++ b/lifecycle/common/src/test/java/android/arch/lifecycle/observers/Interface1_LifecycleAdapter.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.arch.lifecycle.observers;
+
+import android.arch.lifecycle.GeneratedAdapter;
+import android.arch.lifecycle.Lifecycle;
+import android.arch.lifecycle.LifecycleOwner;
+import android.arch.lifecycle.MethodCallsLogger;
+
+public class Interface1_LifecycleAdapter implements GeneratedAdapter {
+
+ public Interface1_LifecycleAdapter(Interface1 base) {
+ }
+
+ @Override
+ public void callMethods(LifecycleOwner source, Lifecycle.Event event, boolean onAny,
+ MethodCallsLogger logger) {
+
+ }
+}
diff --git a/paging/runtime/src/androidTest/java/android/arch/paging/StringPagedList.java b/lifecycle/common/src/test/java/android/arch/lifecycle/observers/Interface2.java
similarity index 61%
copy from paging/runtime/src/androidTest/java/android/arch/paging/StringPagedList.java
copy to lifecycle/common/src/test/java/android/arch/lifecycle/observers/Interface2.java
index 5318d38..1056fcb 100644
--- a/paging/runtime/src/androidTest/java/android/arch/paging/StringPagedList.java
+++ b/lifecycle/common/src/test/java/android/arch/lifecycle/observers/Interface2.java
@@ -14,12 +14,17 @@
* limitations under the License.
*/
-package android.arch.paging;
+package android.arch.lifecycle.observers;
-import java.util.Arrays;
+import android.arch.lifecycle.Lifecycle;
+import android.arch.lifecycle.LifecycleObserver;
+import android.arch.lifecycle.OnLifecycleEvent;
-public class StringPagedList extends NullPaddedList<String> {
- public StringPagedList(int leadingNulls, int trailingNulls, String... items) {
- super(leadingNulls, Arrays.asList(items), trailingNulls);
- }
+public interface Interface2 extends LifecycleObserver {
+
+ @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
+ void onCreate();
+
+ @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
+ void onDestroy();
}
diff --git a/lifecycle/common/src/test/java/android/arch/lifecycle/observers/Interface2_LifecycleAdapter.java b/lifecycle/common/src/test/java/android/arch/lifecycle/observers/Interface2_LifecycleAdapter.java
new file mode 100644
index 0000000..b05b41a
--- /dev/null
+++ b/lifecycle/common/src/test/java/android/arch/lifecycle/observers/Interface2_LifecycleAdapter.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.arch.lifecycle.observers;
+
+import android.arch.lifecycle.GeneratedAdapter;
+import android.arch.lifecycle.Lifecycle;
+import android.arch.lifecycle.LifecycleOwner;
+import android.arch.lifecycle.MethodCallsLogger;
+
+public class Interface2_LifecycleAdapter implements GeneratedAdapter {
+
+ public Interface2_LifecycleAdapter(Interface2 base) {
+ }
+
+ @Override
+ public void callMethods(LifecycleOwner source, Lifecycle.Event event, boolean onAny,
+ MethodCallsLogger logger) {
+
+ }
+}
diff --git a/paging/common/src/test/java/android/arch/paging/User.java b/lifecycle/common/src/test/java/android/arch/lifecycle/observers/InterfaceImpl1.java
similarity index 70%
copy from paging/common/src/test/java/android/arch/paging/User.java
copy to lifecycle/common/src/test/java/android/arch/lifecycle/observers/InterfaceImpl1.java
index a6d965a..2f03393 100644
--- a/paging/common/src/test/java/android/arch/paging/User.java
+++ b/lifecycle/common/src/test/java/android/arch/lifecycle/observers/InterfaceImpl1.java
@@ -14,19 +14,10 @@
* limitations under the License.
*/
-package android.arch.paging;
+package android.arch.lifecycle.observers;
-public class User {
- public final String name;
- public final String info;
-
- public User(String name, String info) {
- this.name = name;
- this.info = info;
- }
-
+public class InterfaceImpl1 implements Interface1 {
@Override
- public String toString() {
- return name;
+ public void onCreate() {
}
}
diff --git a/paging/common/src/test/java/android/arch/paging/User.java b/lifecycle/common/src/test/java/android/arch/lifecycle/observers/InterfaceImpl2.java
similarity index 71%
rename from paging/common/src/test/java/android/arch/paging/User.java
rename to lifecycle/common/src/test/java/android/arch/lifecycle/observers/InterfaceImpl2.java
index a6d965a..eef8ce4 100644
--- a/paging/common/src/test/java/android/arch/paging/User.java
+++ b/lifecycle/common/src/test/java/android/arch/lifecycle/observers/InterfaceImpl2.java
@@ -14,19 +14,15 @@
* limitations under the License.
*/
-package android.arch.paging;
+package android.arch.lifecycle.observers;
-public class User {
- public final String name;
- public final String info;
-
- public User(String name, String info) {
- this.name = name;
- this.info = info;
+public class InterfaceImpl2 implements Interface1, Interface2 {
+ @Override
+ public void onCreate() {
}
@Override
- public String toString() {
- return name;
+ public void onDestroy() {
+
}
}
diff --git a/paging/common/src/test/java/android/arch/paging/User.java b/lifecycle/common/src/test/java/android/arch/lifecycle/observers/InterfaceImpl3.java
similarity index 70%
copy from paging/common/src/test/java/android/arch/paging/User.java
copy to lifecycle/common/src/test/java/android/arch/lifecycle/observers/InterfaceImpl3.java
index a6d965a..8f31808 100644
--- a/paging/common/src/test/java/android/arch/paging/User.java
+++ b/lifecycle/common/src/test/java/android/arch/lifecycle/observers/InterfaceImpl3.java
@@ -14,19 +14,10 @@
* limitations under the License.
*/
-package android.arch.paging;
+package android.arch.lifecycle.observers;
-public class User {
- public final String name;
- public final String info;
-
- public User(String name, String info) {
- this.name = name;
- this.info = info;
- }
-
+public class InterfaceImpl3 extends Base implements Interface1 {
@Override
- public String toString() {
- return name;
+ public void onCreate() {
}
}
diff --git a/lifecycle/compiler/build.gradle b/lifecycle/compiler/build.gradle
index 44bf15d..e784f80 100644
--- a/lifecycle/compiler/build.gradle
+++ b/lifecycle/compiler/build.gradle
@@ -26,6 +26,19 @@
version = LibraryVersions.LIFECYCLES_EXT.toString()
createKotlinCheckstyle(project)
+// we actually need to compile :lifecycle:common, but compileJava is easier
+task compileTestLibrarySource(type: JavaCompile, dependsOn: compileJava) {
+ source "src/tests/test-data/lib/src"
+ classpath = project.compileJava.classpath
+ destinationDir = new File(project.buildDir, 'test-data/lib/classes')
+}
+
+task jarTestLibrarySource(type: Jar, dependsOn: compileTestLibrarySource) {
+ from compileTestLibrarySource.destinationDir
+ archiveName = "test-library.jar"
+ destinationDir = file("src/tests/test-data/lib/")
+}
+
supportLibrary {
name 'Android Lifecycles Compiler'
publish true
diff --git a/lifecycle/compiler/src/main/kotlin/android/arch/lifecycle/ErrorMessages.kt b/lifecycle/compiler/src/main/kotlin/android/arch/lifecycle/ErrorMessages.kt
index 8dac863..2f300e7 100644
--- a/lifecycle/compiler/src/main/kotlin/android/arch/lifecycle/ErrorMessages.kt
+++ b/lifecycle/compiler/src/main/kotlin/android/arch/lifecycle/ErrorMessages.kt
@@ -16,6 +16,9 @@
package android.arch.lifecycle
+import android.arch.lifecycle.model.EventMethod
+import javax.lang.model.element.TypeElement
+
object ErrorMessages {
const val TOO_MANY_ARGS = "callback method cannot have more than 2 parameters"
const val TOO_MANY_ARGS_NOT_ON_ANY = "only callback annotated with ON_ANY " +
@@ -34,4 +37,9 @@
"Parent of OnLifecycleEvent should be a class or interface"
const val INVALID_ANNOTATED_ELEMENT = "OnLifecycleEvent can only be added to methods"
+ fun failedToGenerateAdapter(type: TypeElement, failureReason: EventMethod) =
+ """
+ Failed to generate an Adapter for $type, because it needs to be able to access to
+ package private method ${failureReason.method.name()} from ${failureReason.type}
+ """.trim()
}
diff --git a/lifecycle/compiler/src/main/kotlin/android/arch/lifecycle/elements_ext.kt b/lifecycle/compiler/src/main/kotlin/android/arch/lifecycle/elements_ext.kt
index eedb3af..ed20c54 100644
--- a/lifecycle/compiler/src/main/kotlin/android/arch/lifecycle/elements_ext.kt
+++ b/lifecycle/compiler/src/main/kotlin/android/arch/lifecycle/elements_ext.kt
@@ -21,6 +21,8 @@
import javax.lang.model.element.ExecutableElement
import javax.lang.model.element.Modifier
import javax.lang.model.element.PackageElement
+import javax.lang.model.element.TypeElement
+import javax.lang.model.util.ElementFilter
fun Element.getPackage(): PackageElement = MoreElements.getPackage(this)
@@ -33,3 +35,12 @@
}
fun ExecutableElement.isProtected() = modifiers.contains(Modifier.PROTECTED)
+
+fun TypeElement.methods(): List<ExecutableElement> = ElementFilter.methodsIn(enclosedElements)
+
+private const val SYNTHETIC = "__synthetic_"
+
+fun syntheticName(method: ExecutableElement) = "$SYNTHETIC${method.simpleName}"
+
+fun isSyntheticMethod(method: ExecutableElement) = method.name().startsWith(SYNTHETIC)
+
diff --git a/lifecycle/compiler/src/main/kotlin/android/arch/lifecycle/input_collector.kt b/lifecycle/compiler/src/main/kotlin/android/arch/lifecycle/input_collector.kt
index 5183df5..843ac4e 100644
--- a/lifecycle/compiler/src/main/kotlin/android/arch/lifecycle/input_collector.kt
+++ b/lifecycle/compiler/src/main/kotlin/android/arch/lifecycle/input_collector.kt
@@ -17,7 +17,9 @@
package android.arch.lifecycle
import android.arch.lifecycle.model.EventMethod
+import android.arch.lifecycle.model.InputModel
import android.arch.lifecycle.model.LifecycleObserverInfo
+import android.arch.lifecycle.model.getAdapterName
import com.google.auto.common.MoreElements
import com.google.auto.common.MoreTypes
import javax.annotation.processing.ProcessingEnvironment
@@ -28,32 +30,85 @@
import javax.lang.model.element.Modifier
import javax.lang.model.element.TypeElement
import javax.lang.model.element.VariableElement
+import javax.lang.model.type.TypeMirror
+import javax.lang.model.util.Elements
+import javax.lang.model.util.Types
import javax.tools.Diagnostic
fun collectAndVerifyInput(processingEnv: ProcessingEnvironment,
- roundEnv: RoundEnvironment): Map<TypeElement, LifecycleObserverInfo> {
+ roundEnv: RoundEnvironment): InputModel {
val validator = Validator(processingEnv)
-
- return roundEnv.getElementsAnnotatedWith(OnLifecycleEvent::class.java).map { elem ->
+ val worldCollector = ObserversCollector(processingEnv)
+ val roots = roundEnv.getElementsAnnotatedWith(OnLifecycleEvent::class.java).map { elem ->
if (elem.kind != ElementKind.METHOD) {
validator.printErrorMessage(ErrorMessages.INVALID_ANNOTATED_ELEMENT, elem)
null
} else {
val enclosingElement = elem.enclosingElement
- val onState = elem.getAnnotation(OnLifecycleEvent::class.java)
- val method = MoreElements.asExecutable(elem)
- if (validator.validateClass(enclosingElement)
- && validator.validateMethod(method, onState.value)) {
- EventMethod(method, onState, MoreElements.asType(enclosingElement))
+ if (validator.validateClass(enclosingElement)) {
+ MoreElements.asType(enclosingElement)
} else {
null
}
}
- }
- .filterNotNull()
- .groupBy { MoreElements.asType(it.method.enclosingElement) }
- .mapValues { entry -> LifecycleObserverInfo(entry.key, entry.value) }
+ }.filterNotNull().toSet()
+ roots.forEach { worldCollector.collect(it) }
+ val observersInfo = worldCollector.observers
+ val generatedAdapters = worldCollector.observers.keys
+ .mapNotNull { type ->
+ worldCollector.generatedAdapterInfoFor(type)?.let { type to it }
+ }.toMap()
+ return InputModel(roots, observersInfo, generatedAdapters)
+}
+class ObserversCollector(processingEnv: ProcessingEnvironment) {
+ val typeUtils: Types = processingEnv.typeUtils
+ val elementUtils: Elements = processingEnv.elementUtils
+ val lifecycleObserverTypeMirror: TypeMirror =
+ elementUtils.getTypeElement(LifecycleObserver::class.java.canonicalName).asType()
+ val validator = Validator(processingEnv)
+ val observers: MutableMap<TypeElement, LifecycleObserverInfo> = mutableMapOf()
+
+ fun collect(type: TypeElement): LifecycleObserverInfo? {
+ if (type in observers) {
+ return observers[type]
+ }
+ val parents = (listOf(type.superclass) + type.interfaces)
+ .filter { typeUtils.isAssignable(it, lifecycleObserverTypeMirror) }
+ .filterNot { typeUtils.isSameType(it, lifecycleObserverTypeMirror) }
+ .map { collect(MoreTypes.asTypeElement(it)) }
+ .filterNotNull()
+ val info = createObserverInfo(type, parents)
+ if (info != null) {
+ observers[type] = info
+ }
+ return info
+ }
+
+ fun generatedAdapterInfoFor(type: TypeElement): List<ExecutableElement>? {
+ val packageName = if (type.getPackageQName().isEmpty()) "" else "${type.getPackageQName()}."
+ val adapterType = elementUtils.getTypeElement(packageName + getAdapterName(type))
+ return adapterType?.methods()
+ ?.filter { executable -> isSyntheticMethod(executable) }
+ }
+
+ private fun createObserverInfo(typeElement: TypeElement,
+ parents: List<LifecycleObserverInfo>): LifecycleObserverInfo? {
+ if (!validator.validateClass(typeElement)) {
+ return null
+ }
+ val methods = typeElement.methods().filter { executable ->
+ MoreElements.isAnnotationPresent(executable, OnLifecycleEvent::class.java)
+ }.map { executable ->
+ val onState = executable.getAnnotation(OnLifecycleEvent::class.java)
+ if (validator.validateMethod(executable, onState.value)) {
+ EventMethod(executable, onState, typeElement)
+ } else {
+ null
+ }
+ }.filterNotNull()
+ return LifecycleObserverInfo(typeElement, methods, parents)
+ }
}
class Validator(val processingEnv: ProcessingEnvironment) {
@@ -100,7 +155,7 @@
}
fun validateClass(classElement: Element): Boolean {
- if (classElement.kind != ElementKind.CLASS && classElement.kind != ElementKind.INTERFACE) {
+ if (!MoreElements.isType(classElement)) {
printErrorMessage(ErrorMessages.INVALID_ENCLOSING_ELEMENT, classElement)
return false
}
diff --git a/lifecycle/compiler/src/main/kotlin/android/arch/lifecycle/model/AdapterClass.kt b/lifecycle/compiler/src/main/kotlin/android/arch/lifecycle/model/AdapterClass.kt
index 1e76fa8..bd7759a 100644
--- a/lifecycle/compiler/src/main/kotlin/android/arch/lifecycle/model/AdapterClass.kt
+++ b/lifecycle/compiler/src/main/kotlin/android/arch/lifecycle/model/AdapterClass.kt
@@ -16,9 +16,19 @@
package android.arch.lifecycle.model
+import android.arch.lifecycle.Lifecycling
+import android.arch.lifecycle.getPackage
import javax.lang.model.element.ExecutableElement
import javax.lang.model.element.TypeElement
data class AdapterClass(val type: TypeElement,
val calls: List<EventMethodCall>,
- val syntheticMethods: Set<ExecutableElement>)
\ No newline at end of file
+ val syntheticMethods: Set<ExecutableElement>)
+
+fun getAdapterName(type: TypeElement): String {
+ val packageElement = type.getPackage()
+ val qName = type.qualifiedName.toString()
+ val partialName = if (packageElement.isUnnamed) qName else qName.substring(
+ packageElement.qualifiedName.toString().length + 1)
+ return Lifecycling.getAdapterName(partialName)
+}
diff --git a/lifecycle/compiler/src/main/kotlin/android/arch/lifecycle/model/InputModel.kt b/lifecycle/compiler/src/main/kotlin/android/arch/lifecycle/model/InputModel.kt
new file mode 100644
index 0000000..c1e5d2b
--- /dev/null
+++ b/lifecycle/compiler/src/main/kotlin/android/arch/lifecycle/model/InputModel.kt
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.arch.lifecycle.model
+
+import android.arch.lifecycle.name
+import android.arch.lifecycle.syntheticName
+import javax.lang.model.element.ExecutableElement
+import javax.lang.model.element.TypeElement
+
+data class InputModel(
+ // all java files with lifecycle annotations excluding classes from classpath
+ private val rootTypes: Set<TypeElement>,
+ // info about all lifecycle observers including classes from classpath
+ val observersInfo: Map<TypeElement, LifecycleObserverInfo>,
+ // info about generated adapters from class path
+ val generatedAdapters: Map<TypeElement, List<ExecutableElement>>) {
+
+ /**
+ * Root class is class defined in currently processed module, not in classpath
+ */
+ fun isRootType(type: TypeElement) = type in rootTypes
+
+ fun hasSyntheticAccessorFor(eventMethod: EventMethod): Boolean {
+ val syntheticMethods = generatedAdapters[eventMethod.type] ?: return false
+ return syntheticMethods.any { executable ->
+ executable.name() == syntheticName(eventMethod.method)
+ // same number + receiver object
+ && (eventMethod.method.parameters.size + 1) == executable.parameters.size
+ }
+ }
+}
\ No newline at end of file
diff --git a/lifecycle/compiler/src/main/kotlin/android/arch/lifecycle/model/LifecycleObserverInfo.kt b/lifecycle/compiler/src/main/kotlin/android/arch/lifecycle/model/LifecycleObserverInfo.kt
index d8bc364..1477cbf 100644
--- a/lifecycle/compiler/src/main/kotlin/android/arch/lifecycle/model/LifecycleObserverInfo.kt
+++ b/lifecycle/compiler/src/main/kotlin/android/arch/lifecycle/model/LifecycleObserverInfo.kt
@@ -20,4 +20,5 @@
data class LifecycleObserverInfo(
val type: TypeElement,
- val methods: List<EventMethod>)
\ No newline at end of file
+ val methods: List<EventMethod>,
+ val parents: List<LifecycleObserverInfo> = listOf())
\ No newline at end of file
diff --git a/lifecycle/compiler/src/main/kotlin/android/arch/lifecycle/transformation.kt b/lifecycle/compiler/src/main/kotlin/android/arch/lifecycle/transformation.kt
index 66fabf7..4b93472 100644
--- a/lifecycle/compiler/src/main/kotlin/android/arch/lifecycle/transformation.kt
+++ b/lifecycle/compiler/src/main/kotlin/android/arch/lifecycle/transformation.kt
@@ -19,40 +19,13 @@
import android.arch.lifecycle.model.AdapterClass
import android.arch.lifecycle.model.EventMethod
import android.arch.lifecycle.model.EventMethodCall
+import android.arch.lifecycle.model.InputModel
import android.arch.lifecycle.model.LifecycleObserverInfo
-import com.google.auto.common.MoreTypes
import com.google.common.collect.HashMultimap
-import java.util.LinkedList
import javax.annotation.processing.ProcessingEnvironment
import javax.lang.model.element.TypeElement
-import javax.lang.model.type.NoType
-import javax.lang.model.type.TypeMirror
import javax.tools.Diagnostic
-
-private fun superObservers(world: Map<TypeElement, LifecycleObserverInfo>,
- observer: LifecycleObserverInfo): List<LifecycleObserverInfo> {
- val stack = LinkedList<TypeMirror>()
- stack += observer.type.interfaces.reversed()
- stack += observer.type.superclass
- val result = mutableListOf<LifecycleObserverInfo>()
- while (stack.isNotEmpty()) {
- val typeMirror = stack.removeLast()
- if (typeMirror is NoType) {
- continue
- }
- val type = MoreTypes.asTypeElement(typeMirror)
- val currentObserver = world[type]
- if (currentObserver != null) {
- result.add(currentObserver)
- } else {
- stack += type.interfaces.reversed()
- stack += type.superclass
- }
- }
- return result
-}
-
private fun mergeAndVerifyMethods(processingEnv: ProcessingEnvironment,
type: TypeElement,
classMethods: List<EventMethod>,
@@ -80,22 +53,21 @@
fun flattenObservers(processingEnv: ProcessingEnvironment,
world: Map<TypeElement, LifecycleObserverInfo>): List<LifecycleObserverInfo> {
val flattened: MutableMap<LifecycleObserverInfo, LifecycleObserverInfo> = mutableMapOf()
- val superObservers = world.mapValues { superObservers(world, it.value) }
fun traverse(observer: LifecycleObserverInfo) {
if (observer in flattened) {
return
}
- val observers = superObservers[observer.type]!!
- if (observers.isEmpty()) {
+ if (observer.parents.isEmpty()) {
flattened[observer] = observer
return
}
- observers.filter { it !in flattened }.forEach(::traverse)
- val methods = observers
+ observer.parents.forEach(::traverse)
+ val methods = observer.parents
.map(flattened::get)
.fold(emptyList<EventMethod>()) { list, parentObserver ->
- mergeAndVerifyMethods(processingEnv, observer.type, parentObserver!!.methods, list)
+ mergeAndVerifyMethods(processingEnv, observer.type,
+ parentObserver!!.methods, list)
}
flattened[observer] = LifecycleObserverInfo(observer.type,
@@ -106,29 +78,66 @@
return flattened.values.toList()
}
-fun transformToOutput(processingEnv: ProcessingEnvironment,
- world: Map<TypeElement, LifecycleObserverInfo>): List<AdapterClass> {
- val flatObservers = flattenObservers(processingEnv, world)
- val syntheticMethods = HashMultimap.create<TypeElement, EventMethodCall>()
- val adapterCalls = flatObservers.map { (type, methods) ->
- val calls = methods.map { eventMethod ->
- val executable = eventMethod.method
- if (type.getPackageQName() != eventMethod.packageName()
- && (executable.isPackagePrivate() || executable.isProtected())) {
- EventMethodCall(eventMethod, eventMethod.type)
- } else {
- EventMethodCall(eventMethod)
- }
- }
- calls.filter { it.syntheticAccess != null }.forEach { eventMethod ->
- syntheticMethods.put(eventMethod.method.type, eventMethod)
- }
- type to calls
- }.toMap()
+private fun needsSyntheticAccess(type: TypeElement, eventMethod: EventMethod): Boolean {
+ val executable = eventMethod.method
+ return type.getPackageQName() != eventMethod.packageName()
+ && (executable.isPackagePrivate() || executable.isProtected())
+}
- return adapterCalls.map { (type, calls) ->
- val methods = syntheticMethods.get(type) ?: setOf()
- val synthetic = methods.map { eventMethod -> eventMethod!!.method.method }.toSet()
- AdapterClass(type, calls, synthetic)
+private fun validateMethod(processingEnv: ProcessingEnvironment,
+ world: InputModel, type: TypeElement,
+ eventMethod: EventMethod): Boolean {
+ if (!needsSyntheticAccess(type, eventMethod)) {
+ // no synthetic calls - no problems
+ return true
}
+
+ if (world.isRootType(eventMethod.type)) {
+ // we will generate adapters for them, so we can generate all accessors
+ return true
+ }
+
+ if (world.hasSyntheticAccessorFor(eventMethod)) {
+ // previously generated adapter already has synthetic
+ return true
+ }
+
+ processingEnv.messager.printMessage(Diagnostic.Kind.WARNING,
+ ErrorMessages.failedToGenerateAdapter(type, eventMethod), type)
+ return false
+}
+
+fun transformToOutput(processingEnv: ProcessingEnvironment,
+ world: InputModel): List<AdapterClass> {
+ val flatObservers = flattenObservers(processingEnv, world.observersInfo)
+ val syntheticMethods = HashMultimap.create<TypeElement, EventMethodCall>()
+ val adapterCalls = flatObservers
+ // filter out everything that arrived from jars
+ .filter { (type) -> world.isRootType(type) }
+ // filter out if it needs SYNTHETIC access and we can't generate adapter for it
+ .filter { (type, methods) ->
+ methods.all { eventMethod ->
+ validateMethod(processingEnv, world, type, eventMethod)
+ }
+ }
+ .map { (type, methods) ->
+ val calls = methods.map { eventMethod ->
+ if (needsSyntheticAccess(type, eventMethod)) {
+ EventMethodCall(eventMethod, eventMethod.type)
+ } else {
+ EventMethodCall(eventMethod)
+ }
+ }
+ calls.filter { it.syntheticAccess != null }.forEach { eventMethod ->
+ syntheticMethods.put(eventMethod.method.type, eventMethod)
+ }
+ type to calls
+ }.toMap()
+
+ return adapterCalls
+ .map { (type, calls) ->
+ val methods = syntheticMethods.get(type) ?: emptySet()
+ val synthetic = methods.map { eventMethod -> eventMethod!!.method.method }.toSet()
+ AdapterClass(type, calls, synthetic)
+ }
}
diff --git a/lifecycle/compiler/src/main/kotlin/android/arch/lifecycle/writer.kt b/lifecycle/compiler/src/main/kotlin/android/arch/lifecycle/writer.kt
index 4f12ff4..00549ee 100644
--- a/lifecycle/compiler/src/main/kotlin/android/arch/lifecycle/writer.kt
+++ b/lifecycle/compiler/src/main/kotlin/android/arch/lifecycle/writer.kt
@@ -18,6 +18,7 @@
import android.arch.lifecycle.model.AdapterClass
import android.arch.lifecycle.model.EventMethodCall
+import android.arch.lifecycle.model.getAdapterName
import com.squareup.javapoet.AnnotationSpec
import com.squareup.javapoet.ClassName
import com.squareup.javapoet.FieldSpec
@@ -36,10 +37,8 @@
infos.forEach({ writeAdapter(it, processingEnv) })
}
-
private val GENERATED_PACKAGE = "javax.annotation"
private val GENERATED_NAME = "Generated"
-private val LIFECYCLE_OWNER = ClassName.get(LifecycleOwner::class.java)
private val LIFECYCLE_EVENT = Lifecycle.Event::class.java
private val T = "\$T"
@@ -47,32 +46,42 @@
private val L = "\$L"
private val S = "\$S"
-private fun writeAdapter(adapter: AdapterClass, processingEnv: ProcessingEnvironment) {
- val ownerParam = ParameterSpec.builder(LIFECYCLE_OWNER, "owner").build()
- val eventParam = ParameterSpec.builder(ClassName.get(LIFECYCLE_EVENT), "event").build()
- val receiverName = "mReceiver"
- val receiverField = FieldSpec.builder(ClassName.get(adapter.type), receiverName,
- Modifier.FINAL).build()
+private val OWNER_PARAM: ParameterSpec = ParameterSpec.builder(
+ ClassName.get(LifecycleOwner::class.java), "owner").build()
+private val EVENT_PARAM: ParameterSpec = ParameterSpec.builder(
+ ClassName.get(LIFECYCLE_EVENT), "event").build()
+private val ON_ANY_PARAM: ParameterSpec = ParameterSpec.builder(TypeName.BOOLEAN, "onAny").build()
- val dispatchMethodBuilder = MethodSpec.methodBuilder("onStateChanged")
+private val METHODS_LOGGER: ParameterSpec = ParameterSpec.builder(
+ ClassName.get(MethodCallsLogger::class.java), "logger").build()
+
+private const val HAS_LOGGER_VAR = "hasLogger"
+
+private fun writeAdapter(adapter: AdapterClass, processingEnv: ProcessingEnvironment) {
+ val receiverField: FieldSpec = FieldSpec.builder(ClassName.get(adapter.type), "mReceiver",
+ Modifier.FINAL).build()
+ val dispatchMethodBuilder = MethodSpec.methodBuilder("callMethods")
.returns(TypeName.VOID)
- .addParameter(ownerParam)
- .addParameter(eventParam)
+ .addParameter(OWNER_PARAM)
+ .addParameter(EVENT_PARAM)
+ .addParameter(ON_ANY_PARAM)
+ .addParameter(METHODS_LOGGER)
.addModifiers(Modifier.PUBLIC)
.addAnnotation(Override::class.java)
val dispatchMethod = dispatchMethodBuilder.apply {
- adapter.calls
- .groupBy { (eventMethod) -> eventMethod.onLifecycleEvent.value }
- .forEach { entry ->
- val event = entry.key
- val calls = entry.value
- if (event == Lifecycle.Event.ON_ANY) {
- writeMethodCalls(eventParam, calls, ownerParam, receiverField)
- } else {
- beginControlFlow("if ($N == $T.$L)", eventParam, LIFECYCLE_EVENT, event)
- .writeMethodCalls(eventParam, calls, ownerParam, receiverField)
- endControlFlow()
- }
+
+ addStatement("boolean $L = $N != null", HAS_LOGGER_VAR, METHODS_LOGGER)
+ val callsByEventType = adapter.calls.groupBy { it.method.onLifecycleEvent.value }
+ beginControlFlow("if ($N)", ON_ANY_PARAM).apply {
+ writeMethodCalls(callsByEventType[Lifecycle.Event.ON_ANY] ?: emptyList(), receiverField)
+ }.endControlFlow()
+
+ callsByEventType
+ .filterKeys { key -> key != Lifecycle.Event.ON_ANY }
+ .forEach { (event, calls) ->
+ beginControlFlow("if ($N == $T.$L)", EVENT_PARAM, LIFECYCLE_EVENT, event)
+ writeMethodCalls(calls, receiverField)
+ endControlFlow()
}
}.build()
@@ -86,16 +95,16 @@
.addModifiers(Modifier.STATIC)
.addParameter(receiverParam)
if (it.parameters.size >= 1) {
- method.addParameter(ownerParam)
+ method.addParameter(OWNER_PARAM)
}
if (it.parameters.size == 2) {
- method.addParameter(eventParam)
+ method.addParameter(EVENT_PARAM)
}
val count = it.parameters.size
val paramString = generateParamString(count)
method.addStatement("$N.$L($paramString)", receiverParam, it.name(),
- *takeParams(count, ownerParam, eventParam))
+ *takeParams(count, OWNER_PARAM, EVENT_PARAM))
method.build()
}
@@ -107,7 +116,7 @@
val adapterName = getAdapterName(adapter.type)
val adapterTypeSpecBuilder = TypeSpec.classBuilder(adapterName)
.addModifiers(Modifier.PUBLIC)
- .addSuperinterface(ClassName.get(GenericLifecycleObserver::class.java))
+ .addSuperinterface(ClassName.get(GeneratedAdapter::class.java))
.addField(receiverField)
.addMethod(constructor)
.addMethod(dispatchMethod)
@@ -122,16 +131,16 @@
}
private fun addGeneratedAnnotationIfAvailable(adapterTypeSpecBuilder: TypeSpec.Builder,
- processingEnv: ProcessingEnvironment) {
+ processingEnv: ProcessingEnvironment) {
val generatedAnnotationAvailable = processingEnv
.elementUtils
.getTypeElement(GENERATED_PACKAGE + "." + GENERATED_NAME) != null
if (generatedAnnotationAvailable) {
val generatedAnnotationSpec =
AnnotationSpec.builder(ClassName.get(GENERATED_PACKAGE, GENERATED_NAME)).addMember(
- "value",
- S,
- LifecycleProcessor::class.java.canonicalName).build()
+ "value",
+ S,
+ LifecycleProcessor::class.java.canonicalName).build()
adapterTypeSpecBuilder.addAnnotation(generatedAnnotationSpec)
}
}
@@ -155,41 +164,35 @@
out.openWriter().use { it.write(keepRule) }
}
-private fun MethodSpec.Builder.writeMethodCalls(eventParam: ParameterSpec,
- calls: List<EventMethodCall>,
- ownerParam: ParameterSpec,
+private fun MethodSpec.Builder.writeMethodCalls(calls: List<EventMethodCall>,
receiverField: FieldSpec) {
calls.forEach { (method, syntheticAccess) ->
val count = method.method.parameters.size
- if (syntheticAccess == null) {
- val paramString = generateParamString(count)
- addStatement("$N.$L($paramString)", receiverField,
- method.method.name(),
- *takeParams(count, ownerParam, eventParam))
+ val callType = 1 shl count
+ val methodName = method.method.name()
+ beginControlFlow("if (!$L || $N.approveCall($S, $callType))",
+ HAS_LOGGER_VAR, METHODS_LOGGER, methodName).apply {
- } else {
- val originalType = syntheticAccess
- val paramString = generateParamString(count + 1)
- val className = ClassName.get(originalType.getPackageQName(),
- getAdapterName(originalType))
- addStatement("$T.$L($paramString)", className,
- syntheticName(method.method),
- *takeParams(count + 1, receiverField, ownerParam,
- eventParam))
- }
+ if (syntheticAccess == null) {
+ val paramString = generateParamString(count)
+ addStatement("$N.$L($paramString)", receiverField,
+ methodName,
+ *takeParams(count, OWNER_PARAM, EVENT_PARAM))
+
+ } else {
+ val originalType = syntheticAccess
+ val paramString = generateParamString(count + 1)
+ val className = ClassName.get(originalType.getPackageQName(),
+ getAdapterName(originalType))
+ addStatement("$T.$L($paramString)", className,
+ syntheticName(method.method),
+ *takeParams(count + 1, receiverField, OWNER_PARAM, EVENT_PARAM))
+ }
+ }.endControlFlow()
}
+ addStatement("return")
}
-private fun syntheticName(method: ExecutableElement) = "__synthetic_" + method.simpleName
-
private fun takeParams(count: Int, vararg params: Any) = params.take(count).toTypedArray()
-private fun generateParamString(count: Int) = (0..(count - 1)).joinToString(",") { N }
-
-private fun getAdapterName(type: TypeElement): String {
- val packageElement = type.getPackage()
- val qName = type.qualifiedName.toString()
- val partialName = if (packageElement.isUnnamed) qName else qName.substring(
- packageElement.qualifiedName.toString().length + 1)
- return Lifecycling.getAdapterName(partialName)
-}
+private fun generateParamString(count: Int) = (0 until count).joinToString(",") { N }
\ No newline at end of file
diff --git a/lifecycle/compiler/src/tests/kotlin/android/arch/lifecycle/ValidCasesTest.kt b/lifecycle/compiler/src/tests/kotlin/android/arch/lifecycle/ValidCasesTest.kt
index 247d416..83d69e0 100644
--- a/lifecycle/compiler/src/tests/kotlin/android/arch/lifecycle/ValidCasesTest.kt
+++ b/lifecycle/compiler/src/tests/kotlin/android/arch/lifecycle/ValidCasesTest.kt
@@ -19,9 +19,13 @@
import android.arch.lifecycle.utils.load
import android.arch.lifecycle.utils.processClass
import com.google.testing.compile.CompileTester
+import com.google.testing.compile.JavaSourcesSubject
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
+import java.io.File
+import java.lang.Exception
+import java.net.URLClassLoader
import javax.tools.StandardLocation
@RunWith(JUnit4::class)
@@ -69,7 +73,7 @@
}
@Test
- fun testInterface1(){
+ fun testInterface1() {
processClass("foo.InterfaceOk1").compilesWithoutError()
}
@@ -112,4 +116,40 @@
CompileTester.SuccessfulFileClause<T> {
return generatesFileNamed(StandardLocation.CLASS_OUTPUT, "", "META-INF/proguard/$name")
}
+
+ @Test
+ fun testJar() {
+ JavaSourcesSubject.assertThat(load("foo.DerivedFromJar", ""))
+ .withClasspathFrom(libraryClassLoader())
+ .processedWith(LifecycleProcessor())
+ .compilesWithoutError().and()
+ .generatesSources(load("foo.DerivedFromJar_LifecycleAdapter", "expected"))
+ }
+
+ @Test
+ fun testExtendFromJarFailToGenerateAdapter() {
+ val compileTester = JavaSourcesSubject.assertThat(load("foo.DerivedFromJar1", ""))
+ .withClasspathFrom(libraryClassLoader())
+ .processedWith(LifecycleProcessor())
+ .compilesWithoutError()
+ compileTester.withWarningContaining("Failed to generate an Adapter for")
+ doesntGenerateClass(compileTester, "test.library", "ObserverNoAdapter_LifecycleAdapter")
+ doesntGenerateClass(compileTester, "foo", "DerivedFromJar1_LifecycleAdapter")
+ }
+
+ // compile-testing has fancy, but not always convenient API
+ private fun doesntGenerateClass(compile: CompileTester.SuccessfulCompilationClause,
+ packageName: String, className: String) {
+ try {
+ compile.and().generatesFileNamed(StandardLocation.CLASS_OUTPUT,
+ packageName, "$className.class")
+ throw Exception("$packageName.$className shouldn't be generated")
+ } catch (e: AssertionError) {
+ }
+ }
+
+ private fun libraryClassLoader(): URLClassLoader {
+ val jarUrl = File("src/tests/test-data/lib/test-library.jar").toURI().toURL()
+ return URLClassLoader(arrayOf(jarUrl), this.javaClass.classLoader)
+ }
}
diff --git a/lifecycle/compiler/src/tests/test-data/Bar.java b/lifecycle/compiler/src/tests/test-data/Bar.java
index 773948e..cfc41ca 100644
--- a/lifecycle/compiler/src/tests/test-data/Bar.java
+++ b/lifecycle/compiler/src/tests/test-data/Bar.java
@@ -4,10 +4,11 @@
import static android.arch.lifecycle.Lifecycle.Event.ON_STOP;
import android.arch.lifecycle.Lifecycle.Event;
+import android.arch.lifecycle.LifecycleObserver;
import android.arch.lifecycle.LifecycleOwner;
import android.arch.lifecycle.OnLifecycleEvent;
-public class Bar {
+public class Bar implements LifecycleObserver {
@OnLifecycleEvent(ON_START)
public void doOnStart() {
}
@@ -20,17 +21,17 @@
public void doOnStop2Args(LifecycleOwner provider) {
}
- public static class Inner1 {
+ public static class Inner1 implements LifecycleObserver {
@OnLifecycleEvent(ON_START)
public void doOnStart() {
}
- public static class Inner2 {
+ public static class Inner2 implements LifecycleObserver {
@OnLifecycleEvent(ON_START)
public void doOnStart() {
}
- public static class Inner3 {
+ public static class Inner3 implements LifecycleObserver {
@OnLifecycleEvent(ON_START)
public void doOnStart() {
}
diff --git a/lifecycle/compiler/src/tests/test-data/DerivedFromJar.java b/lifecycle/compiler/src/tests/test-data/DerivedFromJar.java
new file mode 100644
index 0000000..d503903
--- /dev/null
+++ b/lifecycle/compiler/src/tests/test-data/DerivedFromJar.java
@@ -0,0 +1,12 @@
+package foo;
+
+import static android.arch.lifecycle.Lifecycle.Event.ON_START;
+
+import android.arch.lifecycle.Lifecycle.Event;
+import android.arch.lifecycle.OnLifecycleEvent;
+
+public class DerivedFromJar extends test.library.LibraryBaseObserver {
+ @OnLifecycleEvent(ON_START)
+ public void doAnother() {
+ }
+}
diff --git a/paging/runtime/src/androidTest/java/android/arch/paging/StringPagedList.java b/lifecycle/compiler/src/tests/test-data/DerivedFromJar1.java
similarity index 66%
copy from paging/runtime/src/androidTest/java/android/arch/paging/StringPagedList.java
copy to lifecycle/compiler/src/tests/test-data/DerivedFromJar1.java
index 5318d38..efcfaff 100644
--- a/paging/runtime/src/androidTest/java/android/arch/paging/StringPagedList.java
+++ b/lifecycle/compiler/src/tests/test-data/DerivedFromJar1.java
@@ -14,12 +14,15 @@
* limitations under the License.
*/
-package android.arch.paging;
+package foo;
-import java.util.Arrays;
+import static android.arch.lifecycle.Lifecycle.Event.ON_START;
-public class StringPagedList extends NullPaddedList<String> {
- public StringPagedList(int leadingNulls, int trailingNulls, String... items) {
- super(leadingNulls, Arrays.asList(items), trailingNulls);
+import android.arch.lifecycle.Lifecycle.Event;
+import android.arch.lifecycle.OnLifecycleEvent;
+
+public class DerivedFromJar1 extends test.library.PPObserverNoAdapter {
+ @OnLifecycleEvent(ON_START)
+ public void doAnother() {
}
}
diff --git a/lifecycle/compiler/src/tests/test-data/DifferentPackagesBase1.java b/lifecycle/compiler/src/tests/test-data/DifferentPackagesBase1.java
index cc9d5d5..fb0966d 100644
--- a/lifecycle/compiler/src/tests/test-data/DifferentPackagesBase1.java
+++ b/lifecycle/compiler/src/tests/test-data/DifferentPackagesBase1.java
@@ -19,10 +19,11 @@
import static android.arch.lifecycle.Lifecycle.Event.ON_STOP;
import android.arch.lifecycle.Lifecycle.Event;
+import android.arch.lifecycle.LifecycleObserver;
import android.arch.lifecycle.LifecycleOwner;
import android.arch.lifecycle.OnLifecycleEvent;
-public class DifferentPackagesBase1 {
+public class DifferentPackagesBase1 implements LifecycleObserver {
@OnLifecycleEvent(ON_STOP)
void onStop(LifecycleOwner provider){}
}
diff --git a/lifecycle/compiler/src/tests/test-data/DifferentPackagesBase2.java b/lifecycle/compiler/src/tests/test-data/DifferentPackagesBase2.java
index e31921a..1c3ea72 100644
--- a/lifecycle/compiler/src/tests/test-data/DifferentPackagesBase2.java
+++ b/lifecycle/compiler/src/tests/test-data/DifferentPackagesBase2.java
@@ -19,10 +19,11 @@
import static android.arch.lifecycle.Lifecycle.Event.ON_STOP;
import android.arch.lifecycle.Lifecycle.Event;
+import android.arch.lifecycle.LifecycleObserver;
import android.arch.lifecycle.LifecycleOwner;
import android.arch.lifecycle.OnLifecycleEvent;
-class DifferentPackagesPreBase2 {
+class DifferentPackagesPreBase2 implements LifecycleObserver {
@OnLifecycleEvent(ON_STOP)
void onStop(LifecycleOwner provider){}
}
diff --git a/lifecycle/compiler/src/tests/test-data/InheritanceOk1.java b/lifecycle/compiler/src/tests/test-data/InheritanceOk1.java
index 79c2151..889c463 100644
--- a/lifecycle/compiler/src/tests/test-data/InheritanceOk1.java
+++ b/lifecycle/compiler/src/tests/test-data/InheritanceOk1.java
@@ -19,10 +19,11 @@
import static android.arch.lifecycle.Lifecycle.Event.ON_STOP;
import android.arch.lifecycle.Lifecycle.Event;
+import android.arch.lifecycle.LifecycleObserver;
import android.arch.lifecycle.LifecycleOwner;
import android.arch.lifecycle.OnLifecycleEvent;
-class Base1 {
+class Base1 implements LifecycleObserver {
@OnLifecycleEvent(ON_STOP)
public void onStop(LifecycleOwner provider) {
}
@@ -43,7 +44,7 @@
}
}
-class Base2 {
+class Base2 implements LifecycleObserver {
@OnLifecycleEvent(ON_STOP)
public void onStop(LifecycleOwner provider) {
}
diff --git a/lifecycle/compiler/src/tests/test-data/InheritanceOk2.java b/lifecycle/compiler/src/tests/test-data/InheritanceOk2.java
index 31f0a41..bb00cca 100644
--- a/lifecycle/compiler/src/tests/test-data/InheritanceOk2.java
+++ b/lifecycle/compiler/src/tests/test-data/InheritanceOk2.java
@@ -3,10 +3,11 @@
import static android.arch.lifecycle.Lifecycle.Event.ON_STOP;
import android.arch.lifecycle.Lifecycle.Event;
+import android.arch.lifecycle.LifecycleObserver;
import android.arch.lifecycle.LifecycleOwner;
import android.arch.lifecycle.OnLifecycleEvent;
-class InheritanceOk2Base {
+class InheritanceOk2Base implements LifecycleObserver {
@OnLifecycleEvent(ON_STOP)
public void onStop(LifecycleOwner provider) {
}
diff --git a/lifecycle/compiler/src/tests/test-data/InheritanceOk3.java b/lifecycle/compiler/src/tests/test-data/InheritanceOk3.java
index 50c4623..5a3c91d 100644
--- a/lifecycle/compiler/src/tests/test-data/InheritanceOk3.java
+++ b/lifecycle/compiler/src/tests/test-data/InheritanceOk3.java
@@ -19,10 +19,11 @@
import static android.arch.lifecycle.Lifecycle.Event.ON_STOP;
import android.arch.lifecycle.Lifecycle.Event;
+import android.arch.lifecycle.LifecycleObserver;
import android.arch.lifecycle.LifecycleOwner;
import android.arch.lifecycle.OnLifecycleEvent;
-class InheritanceOk3Base {
+class InheritanceOk3Base implements LifecycleObserver {
@OnLifecycleEvent(ON_STOP)
public void onStop(LifecycleOwner provider) {
}
diff --git a/lifecycle/compiler/src/tests/test-data/InterfaceOk1.java b/lifecycle/compiler/src/tests/test-data/InterfaceOk1.java
index 3584f6d..8450302 100644
--- a/lifecycle/compiler/src/tests/test-data/InterfaceOk1.java
+++ b/lifecycle/compiler/src/tests/test-data/InterfaceOk1.java
@@ -17,10 +17,11 @@
import static android.arch.lifecycle.Lifecycle.Event.ON_STOP;
import android.arch.lifecycle.Lifecycle.Event;
+import android.arch.lifecycle.LifecycleObserver;
import android.arch.lifecycle.LifecycleOwner;
import android.arch.lifecycle.OnLifecycleEvent;
-interface InterfaceOk1 {
+interface InterfaceOk1 extends LifecycleObserver {
@OnLifecycleEvent(ON_STOP)
void onStop(LifecycleOwner provider);
}
diff --git a/lifecycle/compiler/src/tests/test-data/InterfaceOk2.java b/lifecycle/compiler/src/tests/test-data/InterfaceOk2.java
index 58688d3..fee5b10 100644
--- a/lifecycle/compiler/src/tests/test-data/InterfaceOk2.java
+++ b/lifecycle/compiler/src/tests/test-data/InterfaceOk2.java
@@ -19,16 +19,17 @@
import static android.arch.lifecycle.Lifecycle.Event.ON_STOP;
import android.arch.lifecycle.Lifecycle.Event;
+import android.arch.lifecycle.LifecycleObserver;
import android.arch.lifecycle.LifecycleOwner;
import android.arch.lifecycle.OnLifecycleEvent;
-class InterfaceOk2Base {
+class InterfaceOk2Base implements LifecycleObserver {
@OnLifecycleEvent(ON_STOP)
public void onStop1(LifecycleOwner provider) {
}
}
-interface InterfaceOk2Interface {
+interface InterfaceOk2Interface extends LifecycleObserver {
@OnLifecycleEvent(ON_STOP)
void onStop2(LifecycleOwner provider);
}
diff --git a/lifecycle/compiler/src/tests/test-data/InvalidClassModifier.java b/lifecycle/compiler/src/tests/test-data/InvalidClassModifier.java
index 4c30bb6..919bb8c 100644
--- a/lifecycle/compiler/src/tests/test-data/InvalidClassModifier.java
+++ b/lifecycle/compiler/src/tests/test-data/InvalidClassModifier.java
@@ -19,10 +19,11 @@
import static android.arch.lifecycle.Lifecycle.Event.ON_STOP;
import android.arch.lifecycle.Lifecycle.Event;
+import android.arch.lifecycle.LifecycleObserver;
import android.arch.lifecycle.OnLifecycleEvent;
public class InvalidClassModifier {
- private static class Inner {
+ private static class Inner implements LifecycleObserver {
@OnLifecycleEvent(ON_STOP)
private void onStop() {
}
diff --git a/lifecycle/compiler/src/tests/test-data/InvalidFirstArg1.java b/lifecycle/compiler/src/tests/test-data/InvalidFirstArg1.java
index 26bfc23..b028443 100644
--- a/lifecycle/compiler/src/tests/test-data/InvalidFirstArg1.java
+++ b/lifecycle/compiler/src/tests/test-data/InvalidFirstArg1.java
@@ -3,9 +3,10 @@
import static android.arch.lifecycle.Lifecycle.Event.ON_STOP;
import android.arch.lifecycle.Lifecycle.Event;
+import android.arch.lifecycle.LifecycleObserver;
import android.arch.lifecycle.OnLifecycleEvent;
-public class InvalidFirstArg1 {
+public class InvalidFirstArg1 implements LifecycleObserver {
@OnLifecycleEvent(ON_STOP)
public void onStop(Event event) {
}
diff --git a/lifecycle/compiler/src/tests/test-data/InvalidFirstArg2.java b/lifecycle/compiler/src/tests/test-data/InvalidFirstArg2.java
index 459c316..d9937ac 100644
--- a/lifecycle/compiler/src/tests/test-data/InvalidFirstArg2.java
+++ b/lifecycle/compiler/src/tests/test-data/InvalidFirstArg2.java
@@ -3,9 +3,10 @@
import static android.arch.lifecycle.Lifecycle.Event.ON_ANY;
import android.arch.lifecycle.Lifecycle.Event;
+import android.arch.lifecycle.LifecycleObserver;
import android.arch.lifecycle.OnLifecycleEvent;
-public class InvalidFirstArg2 {
+public class InvalidFirstArg2 implements LifecycleObserver {
@OnLifecycleEvent(ON_ANY)
public void onStop(Event e2, Event event) {
}
diff --git a/lifecycle/compiler/src/tests/test-data/InvalidInheritance1.java b/lifecycle/compiler/src/tests/test-data/InvalidInheritance1.java
index 69f6bb2..d8f0f62 100644
--- a/lifecycle/compiler/src/tests/test-data/InvalidInheritance1.java
+++ b/lifecycle/compiler/src/tests/test-data/InvalidInheritance1.java
@@ -19,9 +19,10 @@
import static android.arch.lifecycle.Lifecycle.Event.ON_START;
import static android.arch.lifecycle.Lifecycle.Event.ON_STOP;
+import android.arch.lifecycle.LifecycleObserver;
import android.arch.lifecycle.OnLifecycleEvent;
-class Base {
+class Base implements LifecycleObserver {
@OnLifecycleEvent(ON_STOP)
void foo() {
}
diff --git a/lifecycle/compiler/src/tests/test-data/InvalidInheritance2.java b/lifecycle/compiler/src/tests/test-data/InvalidInheritance2.java
index b714e47..b63ad44 100644
--- a/lifecycle/compiler/src/tests/test-data/InvalidInheritance2.java
+++ b/lifecycle/compiler/src/tests/test-data/InvalidInheritance2.java
@@ -19,10 +19,10 @@
import static android.arch.lifecycle.Lifecycle.Event.ON_START;
import static android.arch.lifecycle.Lifecycle.Event.ON_STOP;
-import android.arch.lifecycle.LifecycleOwner;
+import android.arch.lifecycle.LifecycleObserver;
import android.arch.lifecycle.OnLifecycleEvent;
-interface Base {
+interface Base extends LifecycleObserver {
@OnLifecycleEvent(ON_STOP)
void foo();
}
diff --git a/lifecycle/compiler/src/tests/test-data/InvalidMethodModifier.java b/lifecycle/compiler/src/tests/test-data/InvalidMethodModifier.java
index 6540333..5eed7b8 100644
--- a/lifecycle/compiler/src/tests/test-data/InvalidMethodModifier.java
+++ b/lifecycle/compiler/src/tests/test-data/InvalidMethodModifier.java
@@ -19,9 +19,10 @@
import static android.arch.lifecycle.Lifecycle.Event.ON_STOP;
import android.arch.lifecycle.Lifecycle.Event;
+import android.arch.lifecycle.LifecycleObserver;
import android.arch.lifecycle.OnLifecycleEvent;
-public class InvalidMethodModifier {
+public class InvalidMethodModifier implements LifecycleObserver {
@OnLifecycleEvent(ON_STOP)
private void onStop() {
}
diff --git a/lifecycle/compiler/src/tests/test-data/InvalidSecondArg.java b/lifecycle/compiler/src/tests/test-data/InvalidSecondArg.java
index e98d915..60ad464 100644
--- a/lifecycle/compiler/src/tests/test-data/InvalidSecondArg.java
+++ b/lifecycle/compiler/src/tests/test-data/InvalidSecondArg.java
@@ -2,10 +2,11 @@
import static android.arch.lifecycle.Lifecycle.Event.ON_ANY;
+import android.arch.lifecycle.LifecycleObserver;
import android.arch.lifecycle.LifecycleOwner;
import android.arch.lifecycle.OnLifecycleEvent;
-public class InvalidSecondArg {
+public class InvalidSecondArg implements LifecycleObserver {
@OnLifecycleEvent(ON_ANY)
public void onStop(LifecycleOwner provider, Object lastEvent) {
}
diff --git a/lifecycle/compiler/src/tests/test-data/NoPackageOk.java b/lifecycle/compiler/src/tests/test-data/NoPackageOk.java
index a00283d..e7a84ef 100644
--- a/lifecycle/compiler/src/tests/test-data/NoPackageOk.java
+++ b/lifecycle/compiler/src/tests/test-data/NoPackageOk.java
@@ -17,10 +17,11 @@
import static android.arch.lifecycle.Lifecycle.Event.ON_STOP;
import android.arch.lifecycle.Lifecycle.Event;
+import android.arch.lifecycle.LifecycleObserver;
import android.arch.lifecycle.LifecycleOwner;
import android.arch.lifecycle.OnLifecycleEvent;
-class NoPackageOk {
+class NoPackageOk implements LifecycleObserver {
@OnLifecycleEvent(ON_STOP)
void onStop(LifecycleOwner provider){}
}
diff --git a/lifecycle/compiler/src/tests/test-data/OnAnyMethod.java b/lifecycle/compiler/src/tests/test-data/OnAnyMethod.java
index f03f1cd..8761774 100644
--- a/lifecycle/compiler/src/tests/test-data/OnAnyMethod.java
+++ b/lifecycle/compiler/src/tests/test-data/OnAnyMethod.java
@@ -20,10 +20,11 @@
import static android.arch.lifecycle.Lifecycle.Event.ON_STOP;
import android.arch.lifecycle.Lifecycle.Event;
+import android.arch.lifecycle.LifecycleObserver;
import android.arch.lifecycle.LifecycleOwner;
import android.arch.lifecycle.OnLifecycleEvent;
-public class OnAnyMethod {
+public class OnAnyMethod implements LifecycleObserver {
@OnLifecycleEvent(ON_STOP)
void onStop(LifecycleOwner provider){}
@@ -31,7 +32,6 @@
@OnLifecycleEvent(ON_ANY)
void any(LifecycleOwner provider){}
-
@OnLifecycleEvent(ON_ANY)
void any(LifecycleOwner provider, Event event){}
}
diff --git a/lifecycle/compiler/src/tests/test-data/TooManyArgs1.java b/lifecycle/compiler/src/tests/test-data/TooManyArgs1.java
index 0d65098..cdcff60 100644
--- a/lifecycle/compiler/src/tests/test-data/TooManyArgs1.java
+++ b/lifecycle/compiler/src/tests/test-data/TooManyArgs1.java
@@ -3,10 +3,11 @@
import static android.arch.lifecycle.Lifecycle.Event.ON_ANY;
import android.arch.lifecycle.Lifecycle.Event;
+import android.arch.lifecycle.LifecycleObserver;
import android.arch.lifecycle.LifecycleOwner;
import android.arch.lifecycle.OnLifecycleEvent;
-public class TooManyArgs1 {
+public class TooManyArgs1 implements LifecycleObserver {
@OnLifecycleEvent(ON_ANY)
public void onAny(LifecycleOwner provider, Event event, int x) {
}
diff --git a/lifecycle/compiler/src/tests/test-data/TooManyArgs2.java b/lifecycle/compiler/src/tests/test-data/TooManyArgs2.java
index f332d0b..b38d906 100644
--- a/lifecycle/compiler/src/tests/test-data/TooManyArgs2.java
+++ b/lifecycle/compiler/src/tests/test-data/TooManyArgs2.java
@@ -3,10 +3,11 @@
import static android.arch.lifecycle.Lifecycle.Event.ON_STOP;
import android.arch.lifecycle.Lifecycle.Event;
+import android.arch.lifecycle.LifecycleObserver;
import android.arch.lifecycle.LifecycleOwner;
import android.arch.lifecycle.OnLifecycleEvent;
-public class TooManyArgs2 {
+public class TooManyArgs2 implements LifecycleObserver {
@OnLifecycleEvent(ON_STOP)
public void onStop(LifecycleOwner provider, Event event) {
}
diff --git a/lifecycle/compiler/src/tests/test-data/expected/DerivedFromJar1_LifecycleAdapter.java b/lifecycle/compiler/src/tests/test-data/expected/DerivedFromJar1_LifecycleAdapter.java
new file mode 100644
index 0000000..2ff2db2
--- /dev/null
+++ b/lifecycle/compiler/src/tests/test-data/expected/DerivedFromJar1_LifecycleAdapter.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package foo;
+
+import android.arch.lifecycle.GeneratedAdapter;
+import android.arch.lifecycle.Lifecycle;
+import android.arch.lifecycle.LifecycleOwner;
+import android.arch.lifecycle.MethodCallsLogger;
+import java.lang.Override;
+import javax.annotation.Generated;
+
+@Generated("android.arch.lifecycle.LifecycleProcessor")
+public class DerivedFromJar1_LifecycleAdapter implements GeneratedAdapter {
+ final DerivedFromJar1 mReceiver;
+
+ DerivedFromJar_LifecycleAdapter(DerivedFromJar1 receiver) {
+ this.mReceiver = receiver;
+ }
+
+ @Override
+ public void callMethods(LifecycleOwner owner, Lifecycle.Event event, boolean onAny,
+ MethodCallsLogger logger) {
+ boolean hasLogger = logger != null;
+ if (onAny) {
+ return;
+ }
+ if (event == Lifecycle.Event.ON_STOP) {
+ if (!hasLogger || logger.approveCall("doOnStop", 1)) {
+ mReceiver.doOnStop();
+ }
+ return;
+ }
+ if (event == Lifecycle.Event.ON_START) {
+ if (!hasLogger || logger.approveCall("doAnother", 1)) {
+ mReceiver.doAnother();
+ }
+ return;
+ }
+ }
+}
diff --git a/lifecycle/compiler/src/tests/test-data/expected/DerivedFromJar_LifecycleAdapter.java b/lifecycle/compiler/src/tests/test-data/expected/DerivedFromJar_LifecycleAdapter.java
new file mode 100644
index 0000000..191499d
--- /dev/null
+++ b/lifecycle/compiler/src/tests/test-data/expected/DerivedFromJar_LifecycleAdapter.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package foo;
+
+import android.arch.lifecycle.GeneratedAdapter;
+import android.arch.lifecycle.Lifecycle;
+import android.arch.lifecycle.LifecycleOwner;
+import android.arch.lifecycle.MethodCallsLogger;
+import java.lang.Override;
+import javax.annotation.Generated;
+import test.library.LibraryBaseObserver_LifecycleAdapter;
+
+@Generated("android.arch.lifecycle.LifecycleProcessor")
+public class DerivedFromJar_LifecycleAdapter implements GeneratedAdapter {
+ final DerivedFromJar mReceiver;
+
+ DerivedFromJar_LifecycleAdapter(DerivedFromJar receiver) {
+ this.mReceiver = receiver;
+ }
+
+ @Override
+ public void callMethods(LifecycleOwner owner, Lifecycle.Event event, boolean onAny,
+ MethodCallsLogger logger) {
+ boolean hasLogger = logger != null;
+ if (onAny) {
+ return;
+ }
+ if (event == Lifecycle.Event.ON_START) {
+ if (!hasLogger || logger.approveCall("doOnStart", 1)) {
+ mReceiver.doOnStart();
+ }
+ if (!hasLogger || logger.approveCall("doAnother", 1)) {
+ mReceiver.doAnother();
+ }
+ return;
+ }
+ if (event == Lifecycle.Event.ON_PAUSE) {
+ if (!hasLogger || logger.approveCall("doOnPause", 2)) {
+ LibraryBaseObserver_LifecycleAdapter.__synthetic_doOnPause(mReceiver,owner);
+ }
+ return;
+ }
+ }
+}
\ No newline at end of file
diff --git a/lifecycle/compiler/src/tests/test-data/expected/DifferentPackagesBase1_LifecycleAdapter.java b/lifecycle/compiler/src/tests/test-data/expected/DifferentPackagesBase1_LifecycleAdapter.java
index 834805a..9b9c9ea 100644
--- a/lifecycle/compiler/src/tests/test-data/expected/DifferentPackagesBase1_LifecycleAdapter.java
+++ b/lifecycle/compiler/src/tests/test-data/expected/DifferentPackagesBase1_LifecycleAdapter.java
@@ -16,14 +16,15 @@
package foo;
-import android.arch.lifecycle.GenericLifecycleObserver;
+import android.arch.lifecycle.GeneratedAdapter;
import android.arch.lifecycle.Lifecycle;
import android.arch.lifecycle.LifecycleOwner;
+import android.arch.lifecycle.MethodCallsLogger;
import java.lang.Override;
import javax.annotation.Generated;
@Generated("android.arch.lifecycle.LifecycleProcessor")
-public class DifferentPackagesBase1_LifecycleAdapter implements GenericLifecycleObserver {
+public class DifferentPackagesBase1_LifecycleAdapter implements GeneratedAdapter {
final DifferentPackagesBase1 mReceiver;
DifferentPackagesBase1_LifecycleAdapter(DifferentPackagesBase1 receiver) {
@@ -31,9 +32,17 @@
}
@Override
- public void onStateChanged(LifecycleOwner owner, Lifecycle.Event event) {
+ public void callMethods(LifecycleOwner owner, Lifecycle.Event event, boolean onAny,
+ MethodCallsLogger logger) {
+ boolean hasLogger = logger != null;
+ if (onAny) {
+ return;
+ }
if (event == Lifecycle.Event.ON_STOP) {
- mReceiver.onStop(owner);
+ if (!hasLogger || logger.approveCall("onStop", 2)) {
+ mReceiver.onStop(owner);
+ }
+ return;
}
}
diff --git a/lifecycle/compiler/src/tests/test-data/expected/DifferentPackagesBase2_LifecycleAdapter.java b/lifecycle/compiler/src/tests/test-data/expected/DifferentPackagesBase2_LifecycleAdapter.java
index 355d14e..d98b5e4 100644
--- a/lifecycle/compiler/src/tests/test-data/expected/DifferentPackagesBase2_LifecycleAdapter.java
+++ b/lifecycle/compiler/src/tests/test-data/expected/DifferentPackagesBase2_LifecycleAdapter.java
@@ -16,14 +16,15 @@
package foo;
-import android.arch.lifecycle.GenericLifecycleObserver;
+import android.arch.lifecycle.GeneratedAdapter;
import android.arch.lifecycle.Lifecycle;
import android.arch.lifecycle.LifecycleOwner;
+import android.arch.lifecycle.MethodCallsLogger;
import java.lang.Override;
import javax.annotation.Generated;
@Generated("android.arch.lifecycle.LifecycleProcessor")
-public class DifferentPackagesBase2_LifecycleAdapter implements GenericLifecycleObserver {
+public class DifferentPackagesBase2_LifecycleAdapter implements GeneratedAdapter {
final DifferentPackagesBase2 mReceiver;
DifferentPackagesBase2_LifecycleAdapter(DifferentPackagesBase2 receiver) {
@@ -31,9 +32,17 @@
}
@Override
- public void onStateChanged(LifecycleOwner owner, Lifecycle.Event event) {
+ public void callMethods(LifecycleOwner owner, Lifecycle.Event event, boolean onAny,
+ MethodCallsLogger logger) {
+ boolean hasLogger = logger != null;
+ if (onAny) {
+ return;
+ }
if (event == Lifecycle.Event.ON_STOP) {
- mReceiver.onStop(owner);
+ if (!hasLogger || logger.approveCall("onStop", 2)) {
+ mReceiver.onStop(owner);
+ }
+ return;
}
}
}
diff --git a/lifecycle/compiler/src/tests/test-data/expected/DifferentPackagesDerived1_LifecycleAdapter.java b/lifecycle/compiler/src/tests/test-data/expected/DifferentPackagesDerived1_LifecycleAdapter.java
index 835fe52..4ff134f 100644
--- a/lifecycle/compiler/src/tests/test-data/expected/DifferentPackagesDerived1_LifecycleAdapter.java
+++ b/lifecycle/compiler/src/tests/test-data/expected/DifferentPackagesDerived1_LifecycleAdapter.java
@@ -16,15 +16,16 @@
package bar;
-import android.arch.lifecycle.GenericLifecycleObserver;
+import android.arch.lifecycle.GeneratedAdapter;
import android.arch.lifecycle.Lifecycle;
import android.arch.lifecycle.LifecycleOwner;
+import android.arch.lifecycle.MethodCallsLogger;
import foo.DifferentPackagesBase1_LifecycleAdapter;
import java.lang.Override;
import javax.annotation.Generated;
@Generated("android.arch.lifecycle.LifecycleProcessor")
-public class DifferentPackagesDerived1_LifecycleAdapter implements GenericLifecycleObserver {
+public class DifferentPackagesDerived1_LifecycleAdapter implements GeneratedAdapter {
final DifferentPackagesDerived1 mReceiver;
DifferentPackagesDerived1_LifecycleAdapter(DifferentPackagesDerived1 receiver) {
@@ -32,10 +33,20 @@
}
@Override
- public void onStateChanged(LifecycleOwner owner, Lifecycle.Event event) {
+ public void callMethods(LifecycleOwner owner, Lifecycle.Event event, boolean onAny,
+ MethodCallsLogger logger) {
+ boolean hasLogger = logger != null;
+ if (onAny) {
+ return;
+ }
if (event == Lifecycle.Event.ON_STOP) {
- DifferentPackagesBase1_LifecycleAdapter.__synthetic_onStop(mReceiver,owner);
- mReceiver.onStop2(owner);
+ if (!hasLogger || logger.approveCall("onStop", 2)) {
+ DifferentPackagesBase1_LifecycleAdapter.__synthetic_onStop(mReceiver,owner);
+ }
+ if (!hasLogger || logger.approveCall("onStop2", 2)) {
+ mReceiver.onStop2(owner);
+ }
+ return;
}
}
}
diff --git a/lifecycle/compiler/src/tests/test-data/expected/DifferentPackagesDerived2_LifecycleAdapter.java b/lifecycle/compiler/src/tests/test-data/expected/DifferentPackagesDerived2_LifecycleAdapter.java
index f697460..4132f95 100644
--- a/lifecycle/compiler/src/tests/test-data/expected/DifferentPackagesDerived2_LifecycleAdapter.java
+++ b/lifecycle/compiler/src/tests/test-data/expected/DifferentPackagesDerived2_LifecycleAdapter.java
@@ -16,14 +16,15 @@
package bar;
-import android.arch.lifecycle.GenericLifecycleObserver;
+import android.arch.lifecycle.GeneratedAdapter;
import android.arch.lifecycle.Lifecycle;
import android.arch.lifecycle.LifecycleOwner;
+import android.arch.lifecycle.MethodCallsLogger;
import java.lang.Override;
import javax.annotation.Generated;
@Generated("android.arch.lifecycle.LifecycleProcessor")
-public class DifferentPackagesDerived2_LifecycleAdapter implements GenericLifecycleObserver {
+public class DifferentPackagesDerived2_LifecycleAdapter implements GeneratedAdapter {
final DifferentPackagesDerived2 mReceiver;
DifferentPackagesDerived2_LifecycleAdapter(DifferentPackagesDerived2 receiver) {
@@ -31,10 +32,20 @@
}
@Override
- public void onStateChanged(LifecycleOwner owner, Lifecycle.Event event) {
+ public void callMethods(LifecycleOwner owner, Lifecycle.Event event, boolean onAny,
+ MethodCallsLogger logger) {
+ boolean hasLogger = logger != null;
+ if (onAny) {
+ return;
+ }
if (event == Lifecycle.Event.ON_STOP) {
- mReceiver.onStop(owner);
- mReceiver.onStop2(owner);
+ if (!hasLogger || logger.approveCall("onStop", 2)) {
+ mReceiver.onStop(owner);
+ }
+ if (!hasLogger || logger.approveCall("onStop2", 2)) {
+ mReceiver.onStop2(owner);
+ }
+ return;
}
}
}
diff --git a/lifecycle/compiler/src/tests/test-data/expected/InheritanceOk2Base_LifecycleAdapter.java b/lifecycle/compiler/src/tests/test-data/expected/InheritanceOk2Base_LifecycleAdapter.java
index 953d351..2013e46 100644
--- a/lifecycle/compiler/src/tests/test-data/expected/InheritanceOk2Base_LifecycleAdapter.java
+++ b/lifecycle/compiler/src/tests/test-data/expected/InheritanceOk2Base_LifecycleAdapter.java
@@ -16,14 +16,15 @@
package foo;
-import android.arch.lifecycle.GenericLifecycleObserver;
+import android.arch.lifecycle.GeneratedAdapter;
import android.arch.lifecycle.Lifecycle;
import android.arch.lifecycle.LifecycleOwner;
+import android.arch.lifecycle.MethodCallsLogger;
import java.lang.Override;
import javax.annotation.Generated;
@Generated("android.arch.lifecycle.LifecycleProcessor")
-public class InheritanceOk2Base_LifecycleAdapter implements GenericLifecycleObserver {
+public class InheritanceOk2Base_LifecycleAdapter implements GeneratedAdapter {
final InheritanceOk2Base mReceiver;
InheritanceOk2Base_LifecycleAdapter(InheritanceOk2Base receiver) {
@@ -31,9 +32,17 @@
}
@Override
- public void onStateChanged(LifecycleOwner owner, Lifecycle.Event event) {
+ public void callMethods(LifecycleOwner owner, Lifecycle.Event event, boolean onAny,
+ MethodCallsLogger logger) {
+ boolean hasLogger = logger != null;
+ if (onAny) {
+ return;
+ }
if (event == Lifecycle.Event.ON_STOP) {
- mReceiver.onStop(owner);
+ if (!hasLogger || logger.approveCall("onStop", 2)) {
+ mReceiver.onStop(owner);
+ }
+ return;
}
}
}
diff --git a/lifecycle/compiler/src/tests/test-data/expected/InheritanceOk2Derived_LifecycleAdapter.java b/lifecycle/compiler/src/tests/test-data/expected/InheritanceOk2Derived_LifecycleAdapter.java
index a1d8a0b..62a631f 100644
--- a/lifecycle/compiler/src/tests/test-data/expected/InheritanceOk2Derived_LifecycleAdapter.java
+++ b/lifecycle/compiler/src/tests/test-data/expected/InheritanceOk2Derived_LifecycleAdapter.java
@@ -16,14 +16,15 @@
package foo;
-import android.arch.lifecycle.GenericLifecycleObserver;
+import android.arch.lifecycle.GeneratedAdapter;
import android.arch.lifecycle.Lifecycle;
import android.arch.lifecycle.LifecycleOwner;
+import android.arch.lifecycle.MethodCallsLogger;
import java.lang.Override;
import javax.annotation.Generated;
@Generated("android.arch.lifecycle.LifecycleProcessor")
-public class InheritanceOk2Derived_LifecycleAdapter implements GenericLifecycleObserver {
+public class InheritanceOk2Derived_LifecycleAdapter implements GeneratedAdapter {
final InheritanceOk2Derived mReceiver;
InheritanceOk2Derived_LifecycleAdapter(InheritanceOk2Derived receiver) {
@@ -31,10 +32,20 @@
}
@Override
- public void onStateChanged(LifecycleOwner owner, Lifecycle.Event event) {
+ public void callMethods(LifecycleOwner owner, Lifecycle.Event event, boolean onAny,
+ MethodCallsLogger logger) {
+ boolean hasLogger = logger != null;
+ if (onAny) {
+ return;
+ }
if (event == Lifecycle.Event.ON_STOP) {
- mReceiver.onStop(owner);
- mReceiver.onStop2(owner);
+ if (!hasLogger || logger.approveCall("onStop", 2)) {
+ mReceiver.onStop(owner);
+ }
+ if (!hasLogger || logger.approveCall("onStop2", 2)) {
+ mReceiver.onStop2(owner);
+ }
+ return;
}
}
}
diff --git a/lifecycle/compiler/src/tests/test-data/expected/InheritanceOk3Base_LifecycleAdapter.java b/lifecycle/compiler/src/tests/test-data/expected/InheritanceOk3Base_LifecycleAdapter.java
index 41cf958..4b545d9 100644
--- a/lifecycle/compiler/src/tests/test-data/expected/InheritanceOk3Base_LifecycleAdapter.java
+++ b/lifecycle/compiler/src/tests/test-data/expected/InheritanceOk3Base_LifecycleAdapter.java
@@ -16,14 +16,15 @@
package foo;
-import android.arch.lifecycle.GenericLifecycleObserver;
+import android.arch.lifecycle.GeneratedAdapter;
import android.arch.lifecycle.Lifecycle;
import android.arch.lifecycle.LifecycleOwner;
+import android.arch.lifecycle.MethodCallsLogger;
import java.lang.Override;
import javax.annotation.Generated;
@Generated("android.arch.lifecycle.LifecycleProcessor")
-public class InheritanceOk3Base_LifecycleAdapter implements GenericLifecycleObserver {
+public class InheritanceOk3Base_LifecycleAdapter implements GeneratedAdapter {
final InheritanceOk3Base mReceiver;
InheritanceOk3Base_LifecycleAdapter(InheritanceOk3Base receiver) {
@@ -31,9 +32,17 @@
}
@Override
- public void onStateChanged(LifecycleOwner owner, Lifecycle.Event event) {
+ public void callMethods(LifecycleOwner owner, Lifecycle.Event event, boolean onAny,
+ MethodCallsLogger logger) {
+ boolean hasLogger = logger != null;
+ if (onAny) {
+ return;
+ }
if (event == Lifecycle.Event.ON_STOP) {
- mReceiver.onStop(owner);
+ if (!hasLogger || logger.approveCall("onStop", 2)) {
+ mReceiver.onStop(owner);
+ }
+ return;
}
}
}
diff --git a/lifecycle/compiler/src/tests/test-data/expected/InheritanceOk3Derived_LifecycleAdapter.java b/lifecycle/compiler/src/tests/test-data/expected/InheritanceOk3Derived_LifecycleAdapter.java
index 74e7aa5..643617c 100644
--- a/lifecycle/compiler/src/tests/test-data/expected/InheritanceOk3Derived_LifecycleAdapter.java
+++ b/lifecycle/compiler/src/tests/test-data/expected/InheritanceOk3Derived_LifecycleAdapter.java
@@ -16,14 +16,15 @@
package foo;
-import android.arch.lifecycle.GenericLifecycleObserver;
+import android.arch.lifecycle.GeneratedAdapter;
import android.arch.lifecycle.Lifecycle;
import android.arch.lifecycle.LifecycleOwner;
+import android.arch.lifecycle.MethodCallsLogger;
import java.lang.Override;
import javax.annotation.Generated;
@Generated("android.arch.lifecycle.LifecycleProcessor")
-public class InheritanceOk3Derived_LifecycleAdapter implements GenericLifecycleObserver {
+public class InheritanceOk3Derived_LifecycleAdapter implements GeneratedAdapter {
final InheritanceOk3Derived mReceiver;
InheritanceOk3Derived_LifecycleAdapter(InheritanceOk3Derived receiver) {
@@ -31,9 +32,17 @@
}
@Override
- public void onStateChanged(LifecycleOwner owner, Lifecycle.Event event) {
+ public void callMethods(LifecycleOwner owner, Lifecycle.Event event, boolean onAny,
+ MethodCallsLogger logger) {
+ boolean hasLogger = logger != null;
+ if (onAny) {
+ return;
+ }
if (event == Lifecycle.Event.ON_STOP) {
- mReceiver.onStop(owner);
+ if (!hasLogger || logger.approveCall("onStop", 2)) {
+ mReceiver.onStop(owner);
+ }
+ return;
}
}
}
diff --git a/lifecycle/compiler/src/tests/test-data/expected/InterfaceOk2Base_LifecycleAdapter.java b/lifecycle/compiler/src/tests/test-data/expected/InterfaceOk2Base_LifecycleAdapter.java
index ab9ff21..59aa5a2 100644
--- a/lifecycle/compiler/src/tests/test-data/expected/InterfaceOk2Base_LifecycleAdapter.java
+++ b/lifecycle/compiler/src/tests/test-data/expected/InterfaceOk2Base_LifecycleAdapter.java
@@ -16,14 +16,15 @@
package foo;
-import android.arch.lifecycle.GenericLifecycleObserver;
+import android.arch.lifecycle.GeneratedAdapter;
import android.arch.lifecycle.Lifecycle;
import android.arch.lifecycle.LifecycleOwner;
+import android.arch.lifecycle.MethodCallsLogger;
import java.lang.Override;
import javax.annotation.Generated;
@Generated("android.arch.lifecycle.LifecycleProcessor")
-public class InterfaceOk2Base_LifecycleAdapter implements GenericLifecycleObserver {
+public class InterfaceOk2Base_LifecycleAdapter implements GeneratedAdapter {
final InterfaceOk2Base mReceiver;
InterfaceOk2Base_LifecycleAdapter(InterfaceOk2Base receiver) {
@@ -31,9 +32,17 @@
}
@Override
- public void onStateChanged(LifecycleOwner owner, Lifecycle.Event event) {
+ public void callMethods(LifecycleOwner owner, Lifecycle.Event event, boolean onAny,
+ MethodCallsLogger logger) {
+ boolean hasLogger = logger != null;
+ if (onAny) {
+ return;
+ }
if (event == Lifecycle.Event.ON_STOP) {
- mReceiver.onStop1(owner);
+ if (!hasLogger || logger.approveCall("onStop1", 2)) {
+ mReceiver.onStop1(owner);
+ }
+ return;
}
}
}
diff --git a/lifecycle/compiler/src/tests/test-data/expected/InterfaceOk2Derived_LifecycleAdapter.java b/lifecycle/compiler/src/tests/test-data/expected/InterfaceOk2Derived_LifecycleAdapter.java
index 288e47e..e04dec6 100644
--- a/lifecycle/compiler/src/tests/test-data/expected/InterfaceOk2Derived_LifecycleAdapter.java
+++ b/lifecycle/compiler/src/tests/test-data/expected/InterfaceOk2Derived_LifecycleAdapter.java
@@ -16,14 +16,15 @@
package foo;
-import android.arch.lifecycle.GenericLifecycleObserver;
+import android.arch.lifecycle.GeneratedAdapter;
import android.arch.lifecycle.Lifecycle;
import android.arch.lifecycle.LifecycleOwner;
+import android.arch.lifecycle.MethodCallsLogger;
import java.lang.Override;
import javax.annotation.Generated;
@Generated("android.arch.lifecycle.LifecycleProcessor")
-public class InterfaceOk2Derived_LifecycleAdapter implements GenericLifecycleObserver {
+public class InterfaceOk2Derived_LifecycleAdapter implements GeneratedAdapter {
final InterfaceOk2Derived mReceiver;
InterfaceOk2Derived_LifecycleAdapter(InterfaceOk2Derived receiver) {
@@ -31,11 +32,23 @@
}
@Override
- public void onStateChanged(LifecycleOwner owner, Lifecycle.Event event) {
+ public void callMethods(LifecycleOwner owner, Lifecycle.Event event, boolean onAny,
+ MethodCallsLogger logger) {
+ boolean hasLogger = logger != null;
+ if (onAny) {
+ return;
+ }
if (event == Lifecycle.Event.ON_STOP) {
- mReceiver.onStop1(owner);
- mReceiver.onStop2(owner);
- mReceiver.onStop3(owner);
+ if (!hasLogger || logger.approveCall("onStop1", 2)) {
+ mReceiver.onStop1(owner);
+ }
+ if (!hasLogger || logger.approveCall("onStop2", 2)) {
+ mReceiver.onStop2(owner);
+ }
+ if (!hasLogger || logger.approveCall("onStop3", 2)) {
+ mReceiver.onStop3(owner);
+ }
+ return;
}
}
}
diff --git a/lifecycle/compiler/src/tests/test-data/expected/InterfaceOk2Interface_LifecycleAdapter.java b/lifecycle/compiler/src/tests/test-data/expected/InterfaceOk2Interface_LifecycleAdapter.java
index 2cfba33..268f68b 100644
--- a/lifecycle/compiler/src/tests/test-data/expected/InterfaceOk2Interface_LifecycleAdapter.java
+++ b/lifecycle/compiler/src/tests/test-data/expected/InterfaceOk2Interface_LifecycleAdapter.java
@@ -16,14 +16,15 @@
package foo;
-import android.arch.lifecycle.GenericLifecycleObserver;
+import android.arch.lifecycle.GeneratedAdapter;
import android.arch.lifecycle.Lifecycle;
import android.arch.lifecycle.LifecycleOwner;
+import android.arch.lifecycle.MethodCallsLogger;
import java.lang.Override;
import javax.annotation.Generated;
@Generated("android.arch.lifecycle.LifecycleProcessor")
-public class InterfaceOk2Interface_LifecycleAdapter implements GenericLifecycleObserver {
+public class InterfaceOk2Interface_LifecycleAdapter implements GeneratedAdapter {
final InterfaceOk2Interface mReceiver;
InterfaceOk2Interface_LifecycleAdapter(InterfaceOk2Interface receiver) {
@@ -31,9 +32,17 @@
}
@Override
- public void onStateChanged(LifecycleOwner owner, Lifecycle.Event event) {
+ public void callMethods(LifecycleOwner owner, Lifecycle.Event event, boolean onAny,
+ MethodCallsLogger logger) {
+ boolean hasLogger = logger != null;
+ if (onAny) {
+ return;
+ }
if (event == Lifecycle.Event.ON_STOP) {
- mReceiver.onStop2(owner);
+ if (!hasLogger || logger.approveCall("onStop2", 2)) {
+ mReceiver.onStop2(owner);
+ }
+ return;
}
}
}
diff --git a/lifecycle/compiler/src/tests/test-data/expected/ObserverNoAdapter_LifecycleAdapter.java b/lifecycle/compiler/src/tests/test-data/expected/ObserverNoAdapter_LifecycleAdapter.java
new file mode 100644
index 0000000..c2dc1b6
--- /dev/null
+++ b/lifecycle/compiler/src/tests/test-data/expected/ObserverNoAdapter_LifecycleAdapter.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package test.library;
+
+import android.arch.lifecycle.GeneratedAdapter;
+import android.arch.lifecycle.Lifecycle;
+import android.arch.lifecycle.LifecycleOwner;
+import android.arch.lifecycle.MethodCallsLogger;
+import java.lang.Override;
+import javax.annotation.Generated;
+
+@Generated("android.arch.lifecycle.LifecycleProcessor")
+public class ObserverNoAdapter_LifecycleAdapter implements GeneratedAdapter {
+ final ObserverNoAdapter mReceiver;
+
+ ObserverNoAdapter_LifecycleAdapter(ObserverNoAdapter receiver) {
+ this.mReceiver = receiver;
+ }
+
+ @Override
+ public void callMethods(LifecycleOwner owner, Lifecycle.Event event, boolean onAny,
+ MethodCallsLogger logger) {
+ boolean hasLogger = logger != null;
+ if (onAny) {
+ return;
+ }
+ if (event == Lifecycle.Event.ON_STOP) {
+ if (!hasLogger || logger.approveCall("doOnStop", 1)) {
+ mReceiver.doOnStop();
+ }
+ return;
+ }
+ }
+}
diff --git a/lifecycle/compiler/src/tests/test-data/expected/OnAnyMethod_LifecycleAdapter.java b/lifecycle/compiler/src/tests/test-data/expected/OnAnyMethod_LifecycleAdapter.java
index 3e0b958..ba7ccc1 100644
--- a/lifecycle/compiler/src/tests/test-data/expected/OnAnyMethod_LifecycleAdapter.java
+++ b/lifecycle/compiler/src/tests/test-data/expected/OnAnyMethod_LifecycleAdapter.java
@@ -16,14 +16,15 @@
package foo;
-import android.arch.lifecycle.GenericLifecycleObserver;
+import android.arch.lifecycle.GeneratedAdapter;
import android.arch.lifecycle.Lifecycle;
import android.arch.lifecycle.LifecycleOwner;
+import android.arch.lifecycle.MethodCallsLogger;
import java.lang.Override;
import javax.annotation.Generated;
@Generated("android.arch.lifecycle.LifecycleProcessor")
-public class OnAnyMethod_LifecycleAdapter implements GenericLifecycleObserver {
+public class OnAnyMethod_LifecycleAdapter implements GeneratedAdapter {
final OnAnyMethod mReceiver;
OnAnyMethod_LifecycleAdapter(OnAnyMethod receiver) {
@@ -31,11 +32,23 @@
}
@Override
- public void onStateChanged(LifecycleOwner owner, Lifecycle.Event event) {
- if (event == Lifecycle.Event.ON_STOP) {
- mReceiver.onStop(owner);
+ public void callMethods(LifecycleOwner owner, Lifecycle.Event event, boolean onAny,
+ MethodCallsLogger logger) {
+ boolean hasLogger = logger != null;
+ if (onAny) {
+ if (!hasLogger || logger.approveCall("any", 2)) {
+ mReceiver.any(owner);
+ }
+ if (!hasLogger || logger.approveCall("any", 4)) {
+ mReceiver.any(owner,event);
+ }
+ return;
}
- mReceiver.any(owner);
- mReceiver.any(owner,event);
+ if (event == Lifecycle.Event.ON_STOP) {
+ if (!hasLogger || logger.approveCall("onStop", 2)) {
+ mReceiver.onStop(owner);
+ }
+ return;
+ }
}
}
diff --git a/lifecycle/compiler/src/tests/test-data/lib/src/test/library/LibraryBaseObserver.java b/lifecycle/compiler/src/tests/test-data/lib/src/test/library/LibraryBaseObserver.java
new file mode 100644
index 0000000..c3e83e7
--- /dev/null
+++ b/lifecycle/compiler/src/tests/test-data/lib/src/test/library/LibraryBaseObserver.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package test.library;
+
+import static android.arch.lifecycle.Lifecycle.Event.ON_START;
+import static android.arch.lifecycle.Lifecycle.Event.ON_PAUSE;
+
+import android.arch.lifecycle.Lifecycle.Event;
+import android.arch.lifecycle.LifecycleObserver;
+import android.arch.lifecycle.LifecycleOwner;
+import android.arch.lifecycle.OnLifecycleEvent;
+
+public class LibraryBaseObserver implements LifecycleObserver {
+ @OnLifecycleEvent(ON_START)
+ public void doOnStart() {
+ }
+
+ @OnLifecycleEvent(ON_PAUSE)
+ protected void doOnPause(LifecycleOwner owner) {
+ }
+}
diff --git a/lifecycle/compiler/src/tests/test-data/lib/src/test/library/LibraryBaseObserver_LifecycleAdapter.java b/lifecycle/compiler/src/tests/test-data/lib/src/test/library/LibraryBaseObserver_LifecycleAdapter.java
new file mode 100644
index 0000000..ea7e631
--- /dev/null
+++ b/lifecycle/compiler/src/tests/test-data/lib/src/test/library/LibraryBaseObserver_LifecycleAdapter.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package test.library;
+
+import android.arch.lifecycle.GenericLifecycleObserver;
+import android.arch.lifecycle.Lifecycle;
+import android.arch.lifecycle.LifecycleOwner;
+import java.lang.Override;
+import javax.annotation.Generated;
+
+@Generated("android.arch.lifecycle.LifecycleProcessor")
+public class LibraryBaseObserver_LifecycleAdapter implements GenericLifecycleObserver {
+ final LibraryBaseObserver mReceiver;
+
+ LibraryBaseObserver_LifecycleAdapter(LibraryBaseObserver receiver) {
+ this.mReceiver = receiver;
+ }
+
+ @Override
+ public void onStateChanged(LifecycleOwner owner, Lifecycle.Event event) {
+ // fake adapter
+ }
+
+ public static void __synthetic_doOnPause(LibraryBaseObserver receiver, LifecycleOwner owner) {
+ receiver.doOnPause(owner);
+ }
+}
diff --git a/paging/common/src/test/java/android/arch/paging/User.java b/lifecycle/compiler/src/tests/test-data/lib/src/test/library/ObserverNoAdapter.java
similarity index 61%
copy from paging/common/src/test/java/android/arch/paging/User.java
copy to lifecycle/compiler/src/tests/test-data/lib/src/test/library/ObserverNoAdapter.java
index a6d965a..ea000f7 100644
--- a/paging/common/src/test/java/android/arch/paging/User.java
+++ b/lifecycle/compiler/src/tests/test-data/lib/src/test/library/ObserverNoAdapter.java
@@ -14,19 +14,17 @@
* limitations under the License.
*/
-package android.arch.paging;
+package test.library;
-public class User {
- public final String name;
- public final String info;
+import static android.arch.lifecycle.Lifecycle.Event.ON_STOP;
- public User(String name, String info) {
- this.name = name;
- this.info = info;
- }
+import android.arch.lifecycle.Lifecycle.Event;
+import android.arch.lifecycle.LifecycleObserver;
+import android.arch.lifecycle.LifecycleOwner;
+import android.arch.lifecycle.OnLifecycleEvent;
- @Override
- public String toString() {
- return name;
+public class ObserverNoAdapter implements LifecycleObserver {
+ @OnLifecycleEvent(ON_STOP)
+ public void doOnStop() {
}
}
diff --git a/lifecycle/compiler/src/tests/test-data/lib/src/test/library/PPObserverNoAdapter.java b/lifecycle/compiler/src/tests/test-data/lib/src/test/library/PPObserverNoAdapter.java
new file mode 100644
index 0000000..06e10b5
--- /dev/null
+++ b/lifecycle/compiler/src/tests/test-data/lib/src/test/library/PPObserverNoAdapter.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package test.library;
+
+import static android.arch.lifecycle.Lifecycle.Event.ON_START;
+import static android.arch.lifecycle.Lifecycle.Event.ON_STOP;
+
+import android.arch.lifecycle.Lifecycle.Event;
+import android.arch.lifecycle.LifecycleObserver;
+import android.arch.lifecycle.LifecycleOwner;
+import android.arch.lifecycle.OnLifecycleEvent;
+
+public class PPObserverNoAdapter implements LifecycleObserver {
+ @OnLifecycleEvent(ON_START)
+ protected void doOnStart() {
+ }
+
+ @OnLifecycleEvent(ON_STOP)
+ protected void doOnStop() {
+ }
+}
diff --git a/lifecycle/compiler/src/tests/test-data/lib/src/test/library/PPObserverWithAdapter.java b/lifecycle/compiler/src/tests/test-data/lib/src/test/library/PPObserverWithAdapter.java
new file mode 100644
index 0000000..25a9b5d
--- /dev/null
+++ b/lifecycle/compiler/src/tests/test-data/lib/src/test/library/PPObserverWithAdapter.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package test.library;
+
+import static android.arch.lifecycle.Lifecycle.Event.ON_START;
+import static android.arch.lifecycle.Lifecycle.Event.ON_STOP;
+
+import android.arch.lifecycle.Lifecycle.Event;
+import android.arch.lifecycle.LifecycleObserver;
+import android.arch.lifecycle.LifecycleOwner;
+import android.arch.lifecycle.OnLifecycleEvent;
+
+public class PPObserverWithAdapter implements LifecycleObserver {
+ @OnLifecycleEvent(ON_START)
+ protected void doOnStart() {
+ }
+
+ @OnLifecycleEvent(ON_STOP)
+ protected void doOnStop() {
+ }
+}
diff --git a/lifecycle/compiler/src/tests/test-data/lib/test-library.jar b/lifecycle/compiler/src/tests/test-data/lib/test-library.jar
new file mode 100644
index 0000000..cd9ac8b
--- /dev/null
+++ b/lifecycle/compiler/src/tests/test-data/lib/test-library.jar
Binary files differ
diff --git a/lifecycle/extensions/build.gradle b/lifecycle/extensions/build.gradle
index 241e99a..79be36c 100644
--- a/lifecycle/extensions/build.gradle
+++ b/lifecycle/extensions/build.gradle
@@ -39,13 +39,11 @@
}
}
dependencies {
- compile project(":lifecycle:common")
compile project(":lifecycle:runtime")
compile project(":arch:common")
compile project(":arch:runtime")
compile libs.support.fragments, libs.support_exclude_config
-
- annotationProcessor project(":lifecycle:compiler")
+ compile project(":lifecycle:common")
testCompile project(":arch:core-testing")
testCompile libs.junit
diff --git a/lifecycle/extensions/src/androidTest/java/android/arch/lifecycle/FragmentOperationsLifecycleTest.java b/lifecycle/extensions/src/androidTest/java/android/arch/lifecycle/FragmentOperationsLifecycleTest.java
index be062cb..3e61277 100644
--- a/lifecycle/extensions/src/androidTest/java/android/arch/lifecycle/FragmentOperationsLifecycleTest.java
+++ b/lifecycle/extensions/src/androidTest/java/android/arch/lifecycle/FragmentOperationsLifecycleTest.java
@@ -34,6 +34,7 @@
import android.support.test.filters.MediumTest;
import android.support.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;
+import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import org.junit.Rule;
@@ -55,7 +56,7 @@
@UiThreadTest
public void addRemoveFragment() {
EmptyActivity activity = mActivityTestRule.getActivity();
- LifecycleFragment fragment = new LifecycleFragment();
+ Fragment fragment = new Fragment();
FragmentManager fm = activity.getSupportFragmentManager();
fm.beginTransaction().add(fragment, "tag").commitNow();
CollectingObserver observer = observeAndCollectIn(fragment);
@@ -70,7 +71,7 @@
@UiThreadTest
public void fragmentInBackstack() {
EmptyActivity activity = mActivityTestRule.getActivity();
- LifecycleFragment fragment1 = new LifecycleFragment();
+ Fragment fragment1 = new Fragment();
FragmentManager fm = activity.getSupportFragmentManager();
fm.beginTransaction().add(R.id.fragment_container, fragment1, "tag").addToBackStack(null)
.commit();
@@ -78,7 +79,7 @@
CollectingObserver observer1 = observeAndCollectIn(fragment1);
assertThat(observer1.getEventsAndReset(), is(asList(ON_CREATE, ON_START, ON_RESUME)));
- LifecycleFragment fragment2 = new LifecycleFragment();
+ Fragment fragment2 = new Fragment();
fm.beginTransaction().replace(R.id.fragment_container, fragment2).addToBackStack(null)
.commit();
fm.executePendingTransactions();
@@ -95,7 +96,7 @@
assertThat(observer1.getEventsAndReset(), is(asList(ON_PAUSE, ON_STOP, ON_DESTROY)));
}
- private static CollectingObserver observeAndCollectIn(LifecycleFragment fragment) {
+ private static CollectingObserver observeAndCollectIn(Fragment fragment) {
CollectingObserver observer = new CollectingObserver();
fragment.getLifecycle().addObserver(observer);
return observer;
diff --git a/lifecycle/extensions/src/androidTest/java/android/arch/lifecycle/ViewModelTest.java b/lifecycle/extensions/src/androidTest/java/android/arch/lifecycle/ViewModelTest.java
index 98ce027..03ebdf3 100644
--- a/lifecycle/extensions/src/androidTest/java/android/arch/lifecycle/ViewModelTest.java
+++ b/lifecycle/extensions/src/androidTest/java/android/arch/lifecycle/ViewModelTest.java
@@ -32,6 +32,7 @@
import android.support.test.filters.MediumTest;
import android.support.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;
+import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
@@ -120,7 +121,7 @@
void onResume() {
try {
final FragmentManager manager = activity.getSupportFragmentManager();
- LifecycleFragment fragment = new LifecycleFragment();
+ Fragment fragment = new Fragment();
manager.beginTransaction().add(fragment, "temp").commitNow();
ViewModel1 vm = ViewModelProviders.of(fragment).get(ViewModel1.class);
assertThat(vm.mCleared, is(false));
diff --git a/lifecycle/extensions/src/androidTest/java/android/arch/lifecycle/activity/EmptyActivity.java b/lifecycle/extensions/src/androidTest/java/android/arch/lifecycle/activity/EmptyActivity.java
index 017fff4..c32c898 100644
--- a/lifecycle/extensions/src/androidTest/java/android/arch/lifecycle/activity/EmptyActivity.java
+++ b/lifecycle/extensions/src/androidTest/java/android/arch/lifecycle/activity/EmptyActivity.java
@@ -16,13 +16,12 @@
package android.arch.lifecycle.activity;
+import android.arch.lifecycle.extensions.test.R;
import android.os.Bundle;
import android.support.annotation.Nullable;
+import android.support.v4.app.FragmentActivity;
-import android.arch.lifecycle.LifecycleActivity;
-import android.arch.lifecycle.extensions.test.R;
-
-public class EmptyActivity extends LifecycleActivity {
+public class EmptyActivity extends FragmentActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
diff --git a/lifecycle/extensions/src/androidTest/java/android/arch/lifecycle/activity/FragmentLifecycleActivity.java b/lifecycle/extensions/src/androidTest/java/android/arch/lifecycle/activity/FragmentLifecycleActivity.java
index f4485e8..2eb1cc2 100644
--- a/lifecycle/extensions/src/androidTest/java/android/arch/lifecycle/activity/FragmentLifecycleActivity.java
+++ b/lifecycle/extensions/src/androidTest/java/android/arch/lifecycle/activity/FragmentLifecycleActivity.java
@@ -17,7 +17,6 @@
package android.arch.lifecycle.activity;
import android.arch.lifecycle.Lifecycle;
-import android.arch.lifecycle.LifecycleFragment;
import android.arch.lifecycle.LifecycleObserver;
import android.arch.lifecycle.LifecycleOwner;
import android.arch.lifecycle.OnLifecycleEvent;
@@ -26,6 +25,7 @@
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
+import android.support.v4.app.Fragment;
import android.support.v7.app.AppCompatActivity;
import java.util.ArrayList;
@@ -70,9 +70,9 @@
mLoggedEvents.clear();
}
- public static class MainFragment extends LifecycleFragment {
+ public static class MainFragment extends Fragment {
@Nullable
- LifecycleFragment mNestedFragment;
+ Fragment mNestedFragment;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
@@ -85,7 +85,7 @@
}
}
- public static class NestedFragment extends LifecycleFragment {
+ public static class NestedFragment extends Fragment {
}
public static Intent intentFor(Context context, boolean nested) {
@@ -98,7 +98,8 @@
mObservedOwner = provider;
provider.getLifecycle().addObserver(new LifecycleObserver() {
@OnLifecycleEvent(Lifecycle.Event.ON_ANY)
- public void anyEvent(LifecycleOwner owner, Lifecycle.Event event) {
+ public void anyEvent(@SuppressWarnings("unused") LifecycleOwner owner,
+ Lifecycle.Event event) {
mLoggedEvents.add(event);
}
});
diff --git a/lifecycle/extensions/src/androidTest/java/android/arch/lifecycle/viewmodeltest/ViewModelActivity.java b/lifecycle/extensions/src/androidTest/java/android/arch/lifecycle/viewmodeltest/ViewModelActivity.java
index 5ef9f16..1f9f100 100644
--- a/lifecycle/extensions/src/androidTest/java/android/arch/lifecycle/viewmodeltest/ViewModelActivity.java
+++ b/lifecycle/extensions/src/androidTest/java/android/arch/lifecycle/viewmodeltest/ViewModelActivity.java
@@ -16,15 +16,14 @@
package android.arch.lifecycle.viewmodeltest;
+import android.arch.lifecycle.ViewModelProviders;
import android.arch.lifecycle.extensions.test.R;
import android.os.Bundle;
import android.support.annotation.Nullable;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentActivity;
-import android.arch.lifecycle.LifecycleActivity;
-import android.arch.lifecycle.LifecycleFragment;
-import android.arch.lifecycle.ViewModelProviders;
-
-public class ViewModelActivity extends LifecycleActivity {
+public class ViewModelActivity extends FragmentActivity {
public static final String KEY_FRAGMENT_MODEL = "fragment-model";
public static final String KEY_ACTIVITY_MODEL = "activity-model";
public static final String FRAGMENT_TAG_1 = "f1";
@@ -47,7 +46,7 @@
defaultActivityModel = ViewModelProviders.of(this).get(TestViewModel.class);
}
- public static class ViewModelFragment extends LifecycleFragment {
+ public static class ViewModelFragment extends Fragment {
public TestViewModel fragmentModel;
public TestViewModel activityModel;
public TestViewModel defaultActivityModel;
diff --git a/lifecycle/extensions/src/main/AndroidManifest.xml b/lifecycle/extensions/src/main/AndroidManifest.xml
index f7698eb..f8a5c48 100644
--- a/lifecycle/extensions/src/main/AndroidManifest.xml
+++ b/lifecycle/extensions/src/main/AndroidManifest.xml
@@ -20,6 +20,6 @@
<provider android:authorities="${applicationId}.lifecycle-trojan"
android:multiprocess="true"
android:exported="false"
- android:name="android.arch.lifecycle.LifecycleRuntimeTrojanProvider"/>
+ android:name="android.arch.lifecycle.ProcessLifecycleOwnerInitializer"/>
</application>
</manifest>
diff --git a/lifecycle/extensions/src/main/java/android/arch/lifecycle/AndroidViewModel.java b/lifecycle/extensions/src/main/java/android/arch/lifecycle/AndroidViewModel.java
index 2c7e173..106b2ef 100644
--- a/lifecycle/extensions/src/main/java/android/arch/lifecycle/AndroidViewModel.java
+++ b/lifecycle/extensions/src/main/java/android/arch/lifecycle/AndroidViewModel.java
@@ -16,7 +16,9 @@
package android.arch.lifecycle;
+import android.annotation.SuppressLint;
import android.app.Application;
+import android.support.annotation.NonNull;
/**
* Application context aware {@link ViewModel}.
@@ -25,16 +27,19 @@
* <p>
*/
public class AndroidViewModel extends ViewModel {
+ @SuppressLint("StaticFieldLeak")
private Application mApplication;
- public AndroidViewModel(Application application) {
+ public AndroidViewModel(@NonNull Application application) {
mApplication = application;
}
/**
* Return the application.
*/
+ @NonNull
public <T extends Application> T getApplication() {
+ //noinspection unchecked
return (T) mApplication;
}
}
diff --git a/lifecycle/extensions/src/main/java/android/arch/lifecycle/ComputableLiveData.java b/lifecycle/extensions/src/main/java/android/arch/lifecycle/ComputableLiveData.java
index fe18243..1ddcb1a 100644
--- a/lifecycle/extensions/src/main/java/android/arch/lifecycle/ComputableLiveData.java
+++ b/lifecycle/extensions/src/main/java/android/arch/lifecycle/ComputableLiveData.java
@@ -16,7 +16,7 @@
package android.arch.lifecycle;
-import android.arch.core.executor.AppToolkitTaskExecutor;
+import android.arch.core.executor.ArchTaskExecutor;
import android.support.annotation.MainThread;
import android.support.annotation.NonNull;
import android.support.annotation.RestrictTo;
@@ -53,7 +53,7 @@
@Override
protected void onActive() {
// TODO if we make this class public, we should accept an executor
- AppToolkitTaskExecutor.getInstance().executeOnDiskIO(mRefreshRunnable);
+ ArchTaskExecutor.getInstance().executeOnDiskIO(mRefreshRunnable);
}
};
}
@@ -115,7 +115,7 @@
if (mInvalid.compareAndSet(false, true)) {
if (isActive) {
// TODO if we make this class public, we should accept an executor.
- AppToolkitTaskExecutor.getInstance().executeOnDiskIO(mRefreshRunnable);
+ ArchTaskExecutor.getInstance().executeOnDiskIO(mRefreshRunnable);
}
}
}
@@ -127,7 +127,7 @@
* When there are active observers, this will trigger a call to {@link #compute()}.
*/
public void invalidate() {
- AppToolkitTaskExecutor.getInstance().executeOnMainThread(mInvalidationRunnable);
+ ArchTaskExecutor.getInstance().executeOnMainThread(mInvalidationRunnable);
}
@SuppressWarnings("WeakerAccess")
diff --git a/lifecycle/extensions/src/main/java/android/arch/lifecycle/LiveData.java b/lifecycle/extensions/src/main/java/android/arch/lifecycle/LiveData.java
index 99d859c..5b09c32 100644
--- a/lifecycle/extensions/src/main/java/android/arch/lifecycle/LiveData.java
+++ b/lifecycle/extensions/src/main/java/android/arch/lifecycle/LiveData.java
@@ -19,10 +19,11 @@
import static android.arch.lifecycle.Lifecycle.State.DESTROYED;
import static android.arch.lifecycle.Lifecycle.State.STARTED;
-import android.arch.core.executor.AppToolkitTaskExecutor;
+import android.arch.core.executor.ArchTaskExecutor;
import android.arch.core.internal.SafeIterableMap;
import android.arch.lifecycle.Lifecycle.State;
import android.support.annotation.MainThread;
+import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import java.util.Iterator;
@@ -53,7 +54,7 @@
* but can also be used for sharing data between different modules in your application
* in a decoupled fashion.
*
- * @param <T> The type of data hold by this instance
+ * @param <T> The type of data held by this instance
* @see ViewModel
*/
@SuppressWarnings({"WeakerAccess", "unused"})
@@ -119,6 +120,7 @@
// the observer moved to an active state, if we've not received that event, we better not
// notify for a more predictable notification order.
if (!isActiveState(observer.owner.getLifecycle().getCurrentState())) {
+ observer.activeStateChanged(false);
return;
}
if (observer.lastVersion >= mVersion) {
@@ -182,7 +184,7 @@
* @param observer The observer that will receive the events
*/
@MainThread
- public void observe(LifecycleOwner owner, Observer<T> observer) {
+ public void observe(@NonNull LifecycleOwner owner, @NonNull Observer<T> observer) {
if (owner.getLifecycle().getCurrentState() == DESTROYED) {
// ignore
return;
@@ -197,7 +199,6 @@
return;
}
owner.getLifecycle().addObserver(wrapper);
- wrapper.activeStateChanged(isActiveState(owner.getLifecycle().getCurrentState()));
}
/**
@@ -215,7 +216,7 @@
* @param observer The observer that will receive the events
*/
@MainThread
- public void observeForever(Observer<T> observer) {
+ public void observeForever(@NonNull Observer<T> observer) {
observe(ALWAYS_ON, observer);
}
@@ -225,7 +226,7 @@
* @param observer The Observer to receive events.
*/
@MainThread
- public void removeObserver(final Observer<T> observer) {
+ public void removeObserver(@NonNull final Observer<T> observer) {
assertMainThread("removeObserver");
LifecycleBoundObserver removed = mObservers.remove(observer);
if (removed == null) {
@@ -241,7 +242,7 @@
* @param owner The {@code LifecycleOwner} scope for the observers to be removed.
*/
@MainThread
- public void removeObservers(final LifecycleOwner owner) {
+ public void removeObservers(@NonNull final LifecycleOwner owner) {
assertMainThread("removeObservers");
for (Map.Entry<Observer<T>, LifecycleBoundObserver> entry : mObservers) {
if (entry.getValue().owner == owner) {
@@ -274,7 +275,7 @@
if (!postTask) {
return;
}
- AppToolkitTaskExecutor.getInstance().postToMainThread(mPostValueRunnable);
+ ArchTaskExecutor.getInstance().postToMainThread(mPostValueRunnable);
}
/**
@@ -355,7 +356,7 @@
return mActiveCount > 0;
}
- class LifecycleBoundObserver implements LifecycleObserver {
+ class LifecycleBoundObserver implements GenericLifecycleObserver {
public final LifecycleOwner owner;
public final Observer<T> observer;
public boolean active;
@@ -366,9 +367,8 @@
this.observer = observer;
}
- @SuppressWarnings("unused")
- @OnLifecycleEvent(Lifecycle.Event.ON_ANY)
- void onStateChange() {
+ @Override
+ public void onStateChanged(LifecycleOwner source, Lifecycle.Event event) {
if (owner.getLifecycle().getCurrentState() == DESTROYED) {
removeObserver(observer);
return;
@@ -376,7 +376,6 @@
// immediately set active state, so we'd never dispatch anything to inactive
// owner
activeStateChanged(isActiveState(owner.getLifecycle().getCurrentState()));
-
}
void activeStateChanged(boolean newActive) {
@@ -403,7 +402,7 @@
}
private void assertMainThread(String methodName) {
- if (!AppToolkitTaskExecutor.getInstance().isMainThread()) {
+ if (!ArchTaskExecutor.getInstance().isMainThread()) {
throw new IllegalStateException("Cannot invoke " + methodName + " on a background"
+ " thread");
}
diff --git a/lifecycle/extensions/src/main/java/android/arch/lifecycle/MediatorLiveData.java b/lifecycle/extensions/src/main/java/android/arch/lifecycle/MediatorLiveData.java
index 672b3a3..5864739 100644
--- a/lifecycle/extensions/src/main/java/android/arch/lifecycle/MediatorLiveData.java
+++ b/lifecycle/extensions/src/main/java/android/arch/lifecycle/MediatorLiveData.java
@@ -19,16 +19,49 @@
import android.arch.core.internal.SafeIterableMap;
import android.support.annotation.CallSuper;
import android.support.annotation.MainThread;
+import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import java.util.Map;
/**
- * {@link LiveData} subclass which may observer other {@code LiveData} objects and react on
+ * {@link LiveData} subclass which may observe other {@code LiveData} objects and react on
* {@code OnChanged} events from them.
* <p>
* This class correctly propagates its active/inactive states down to source {@code LiveData}
* objects.
+ * <p>
+ * Consider the following scenario: we have 2 instances of {@code LiveData}, let's name them
+ * {@code liveData1} and {@code liveData2}, and we want to merge their emissions in one object:
+ * {@code liveDataMerger}. Then, {@code liveData1} and {@code liveData2} will become sources for
+ * the {@code MediatorLiveData liveDataMerger} and every time {@code onChanged} callback
+ * is called for either of them, we set a new value in {@code liveDataMerger}.
+ *
+ * <pre>
+ * LiveData<Integer> liveData1 = ...;
+ * LiveData<Integer> liveData2 = ...;
+ *
+ * MediatorLiveData<Integer> liveDataMerger = new MediatorLiveData<>();
+ * liveDataMerger.addSource(liveData1, value -> liveDataMerger.setValue(value));
+ * liveDataMerger.addSource(liveData2, value -> liveDataMerger.setValue(value));
+ * </pre>
+ * <p>
+ * Let's consider that we only want 10 values emitted by {@code liveData1}, to be
+ * merged in the {@code liveDataMerger}. Then, after 10 values, we can stop listening to {@code
+ * liveData1} and remove it as a source.
+ * <pre>
+ * liveDataMerger.addSource(liveData1, new Observer<Integer>() {
+ * private int count = 1;
+ *
+ * {@literal @}Override public void onChanged(@Nullable Integer s) {
+ * count++;
+ * liveDataMerger.setValue(s);
+ * if (count > 10) {
+ * liveDataMerger.removeSource(liveData1);
+ * }
+ * }
+ * });
+ * </pre>
*
* @param <T> The type of data hold by this instance
*/
@@ -49,7 +82,7 @@
* @param <S> The type of data hold by {@code source} LiveData
*/
@MainThread
- public <S> void addSource(LiveData<S> source, Observer<S> onChanged) {
+ public <S> void addSource(@NonNull LiveData<S> source, @NonNull Observer<S> onChanged) {
Source<S> e = new Source<>(source, onChanged);
Source<?> existing = mSources.putIfAbsent(source, e);
if (existing != null && existing.mObserver != onChanged) {
@@ -71,7 +104,7 @@
* @param <S> the type of data hold by {@code source} LiveData
*/
@MainThread
- public <S> void removeSource(LiveData<S> toRemote) {
+ public <S> void removeSource(@NonNull LiveData<S> toRemote) {
Source<?> source = mSources.remove(toRemote);
if (source != null) {
source.unplug();
diff --git a/lifecycle/extensions/src/main/java/android/arch/lifecycle/ProcessLifecycleOwner.java b/lifecycle/extensions/src/main/java/android/arch/lifecycle/ProcessLifecycleOwner.java
index e2a1256..74ea97f 100644
--- a/lifecycle/extensions/src/main/java/android/arch/lifecycle/ProcessLifecycleOwner.java
+++ b/lifecycle/extensions/src/main/java/android/arch/lifecycle/ProcessLifecycleOwner.java
@@ -22,6 +22,7 @@
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
+import android.support.annotation.NonNull;
import android.support.annotation.VisibleForTesting;
/**
@@ -156,7 +157,7 @@
app.registerActivityLifecycleCallbacks(new EmptyActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
- ReportFragment .get(activity).setProcessListener(mInitializationListener);
+ ReportFragment.get(activity).setProcessListener(mInitializationListener);
}
@Override
@@ -171,6 +172,7 @@
});
}
+ @NonNull
@Override
public Lifecycle getLifecycle() {
return mRegistry;
diff --git a/lifecycle/extensions/src/main/java/android/arch/lifecycle/LifecycleRuntimeTrojanProvider.java b/lifecycle/extensions/src/main/java/android/arch/lifecycle/ProcessLifecycleOwnerInitializer.java
similarity index 95%
rename from lifecycle/extensions/src/main/java/android/arch/lifecycle/LifecycleRuntimeTrojanProvider.java
rename to lifecycle/extensions/src/main/java/android/arch/lifecycle/ProcessLifecycleOwnerInitializer.java
index ac278c0..6cf80d2 100644
--- a/lifecycle/extensions/src/main/java/android/arch/lifecycle/LifecycleRuntimeTrojanProvider.java
+++ b/lifecycle/extensions/src/main/java/android/arch/lifecycle/ProcessLifecycleOwnerInitializer.java
@@ -29,7 +29,7 @@
* @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-public class LifecycleRuntimeTrojanProvider extends ContentProvider {
+public class ProcessLifecycleOwnerInitializer extends ContentProvider {
@Override
public boolean onCreate() {
LifecycleDispatcher.init(getContext());
diff --git a/lifecycle/extensions/src/main/java/android/arch/lifecycle/Transformations.java b/lifecycle/extensions/src/main/java/android/arch/lifecycle/Transformations.java
index c316563..c735f8b 100644
--- a/lifecycle/extensions/src/main/java/android/arch/lifecycle/Transformations.java
+++ b/lifecycle/extensions/src/main/java/android/arch/lifecycle/Transformations.java
@@ -18,10 +18,17 @@
import android.arch.core.util.Function;
import android.support.annotation.MainThread;
+import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
/**
* Transformations for a {@link LiveData} class.
+ * <p>
+ * You can use transformation methods to carry information across the observer's lifecycle. The
+ * transformations aren't calculated unless an observer is observing the returned LiveData object.
+ * <p>
+ * Because the transformations are calculated lazily, lifecycle-related behavior is implicitly
+ * passed down without requiring additional explicit calls or dependencies.
*/
@SuppressWarnings("WeakerAccess")
public class Transformations {
@@ -34,6 +41,18 @@
* LiveData and returns LiveData, which emits resulting values.
* <p>
* The given function {@code func} will be executed on the main thread.
+ * <p>
+ * Suppose that you have a LiveData, named {@code userLiveData}, that contains user data and you
+ * need to display the user name, created by concatenating the first and the last
+ * name of the user. You can define a function that handles the name creation, that will be
+ * applied to every value emitted by {@code useLiveData}.
+ *
+ * <pre>
+ * LiveData<User> userLiveData = ...;
+ * LiveData<String> userName = Transformations.map(userLiveData, user -> {
+ * return user.firstName + " " + user.lastName
+ * });
+ * </pre>
*
* @param source a {@code LiveData} to listen to
* @param func a function to apply
@@ -42,7 +61,8 @@
* @return a LiveData which emits resulting values
*/
@MainThread
- public static <X, Y> LiveData<Y> map(LiveData<X> source, final Function<X, Y> func) {
+ public static <X, Y> LiveData<Y> map(@NonNull LiveData<X> source,
+ @NonNull final Function<X, Y> func) {
final MediatorLiveData<Y> result = new MediatorLiveData<>();
result.addSource(source, new Observer<X>() {
@Override
@@ -63,17 +83,47 @@
* <p>
* If the given function returns null, then {@code swLiveData} is not "backed" by any other
* LiveData.
+ *
* <p>
* The given function {@code func} will be executed on the main thread.
*
+ * <p>
+ * Consider the case where you have a LiveData containing a user id. Every time there's a new
+ * user id emitted, you want to trigger a request to get the user object corresponding to that
+ * id, from a repository that also returns a LiveData.
+ * <p>
+ * The {@code userIdLiveData} is the trigger and the LiveData returned by the {@code
+ * repository.getUserById} is the "backing" LiveData.
+ * <p>
+ * In a scenario where the repository contains User(1, "Jane") and User(2, "John"), when the
+ * userIdLiveData value is set to "1", the {@code switchMap} will call {@code getUser(1)},
+ * that will return a LiveData containing the value User(1, "Jane"). So now, the userLiveData
+ * will emit User(1, "Jane"). When the user in the repository gets updated to User(1, "Sarah"),
+ * the {@code userLiveData} gets automatically notified and will emit User(1, "Sarah").
+ * <p>
+ * When the {@code setUserId} method is called with userId = "2", the value of the {@code
+ * userIdLiveData} changes and automatically triggers a request for getting the user with id
+ * "2" from the repository. So, the {@code userLiveData} emits User(2, "John"). The LiveData
+ * returned by {@code repository.getUserById(1)} is removed as a source.
+ *
+ * <pre>
+ * MutableLiveData<String> userIdLiveData = ...;
+ * LiveData<User> userLiveData = Transformations.switchMap(userIdLiveData, id ->
+ * repository.getUserById(id));
+ *
+ * void setUserId(String userId) {
+ * this.userIdLiveData.setValue(userId);
+ * }
+ * </pre>
+ *
* @param trigger a {@code LiveData} to listen to
* @param func a function which creates "backing" LiveData
* @param <X> a type of {@code source} LiveData
* @param <Y> a type of resulting LiveData
*/
@MainThread
- public static <X, Y> LiveData<Y> switchMap(LiveData<X> trigger,
- final Function<X, LiveData<Y>> func) {
+ public static <X, Y> LiveData<Y> switchMap(@NonNull LiveData<X> trigger,
+ @NonNull final Function<X, LiveData<Y>> func) {
final MediatorLiveData<Y> result = new MediatorLiveData<>();
result.addSource(trigger, new Observer<X>() {
LiveData<Y> mSource;
diff --git a/lifecycle/extensions/src/main/java/android/arch/lifecycle/ViewModelProvider.java b/lifecycle/extensions/src/main/java/android/arch/lifecycle/ViewModelProvider.java
index 7ef591f..29cbab8 100644
--- a/lifecycle/extensions/src/main/java/android/arch/lifecycle/ViewModelProvider.java
+++ b/lifecycle/extensions/src/main/java/android/arch/lifecycle/ViewModelProvider.java
@@ -43,7 +43,8 @@
* @param <T> The type parameter for the ViewModel.
* @return a newly created ViewModel
*/
- <T extends ViewModel> T create(Class<T> modelClass);
+ @NonNull
+ <T extends ViewModel> T create(@NonNull Class<T> modelClass);
}
private final Factory mFactory;
@@ -70,7 +71,7 @@
* @param factory factory a {@code Factory} which will be used to instantiate
* new {@code ViewModels}
*/
- public ViewModelProvider(ViewModelStore store, Factory factory) {
+ public ViewModelProvider(@NonNull ViewModelStore store, @NonNull Factory factory) {
mFactory = factory;
this.mViewModelStore = store;
}
@@ -88,7 +89,8 @@
* @param <T> The type parameter for the ViewModel.
* @return A ViewModel that is an instance of the given type {@code T}.
*/
- public <T extends ViewModel> T get(Class<T> modelClass) {
+ @NonNull
+ public <T extends ViewModel> T get(@NonNull Class<T> modelClass) {
String canonicalName = modelClass.getCanonicalName();
if (canonicalName == null) {
throw new IllegalArgumentException("Local and anonymous classes can not be ViewModels");
@@ -136,8 +138,9 @@
*/
public static class NewInstanceFactory implements Factory {
+ @NonNull
@Override
- public <T extends ViewModel> T create(Class<T> modelClass) {
+ public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
//noinspection TryWithIdenticalCatches
try {
return modelClass.newInstance();
diff --git a/lifecycle/extensions/src/main/java/android/arch/lifecycle/ViewModelProviders.java b/lifecycle/extensions/src/main/java/android/arch/lifecycle/ViewModelProviders.java
index f64365b..b4b20aa 100644
--- a/lifecycle/extensions/src/main/java/android/arch/lifecycle/ViewModelProviders.java
+++ b/lifecycle/extensions/src/main/java/android/arch/lifecycle/ViewModelProviders.java
@@ -17,6 +17,7 @@
package android.arch.lifecycle;
import android.annotation.SuppressLint;
+import android.app.Activity;
import android.app.Application;
import android.arch.lifecycle.ViewModelProvider.Factory;
import android.support.annotation.MainThread;
@@ -40,6 +41,23 @@
}
}
+ private static Application checkApplication(Activity activity) {
+ Application application = activity.getApplication();
+ if (application == null) {
+ throw new IllegalStateException("Your activity/fragment is not yet attached to "
+ + "Application. You can't request ViewModel before onCreate call.");
+ }
+ return application;
+ }
+
+ private static Activity checkActivity(Fragment fragment) {
+ Activity activity = fragment.getActivity();
+ if (activity == null) {
+ throw new IllegalStateException("Can't create ViewModelProvider for detached fragment");
+ }
+ return activity;
+ }
+
/**
* Creates a {@link ViewModelProvider}, which retains ViewModels while a scope of given
* {@code fragment} is alive. More detailed explanation is in {@link ViewModel}.
@@ -51,12 +69,7 @@
*/
@MainThread
public static ViewModelProvider of(@NonNull Fragment fragment) {
- FragmentActivity activity = fragment.getActivity();
- if (activity == null) {
- throw new IllegalArgumentException(
- "Can't create ViewModelProvider for detached fragment");
- }
- initializeFactoryIfNeeded(activity.getApplication());
+ initializeFactoryIfNeeded(checkApplication(checkActivity(fragment)));
return new ViewModelProvider(ViewModelStores.of(fragment), sDefaultFactory);
}
@@ -71,7 +84,7 @@
*/
@MainThread
public static ViewModelProvider of(@NonNull FragmentActivity activity) {
- initializeFactoryIfNeeded(activity.getApplication());
+ initializeFactoryIfNeeded(checkApplication(activity));
return new ViewModelProvider(ViewModelStores.of(activity), sDefaultFactory);
}
@@ -87,6 +100,7 @@
*/
@MainThread
public static ViewModelProvider of(@NonNull Fragment fragment, @NonNull Factory factory) {
+ checkApplication(checkActivity(fragment));
return new ViewModelProvider(ViewModelStores.of(fragment), factory);
}
@@ -103,6 +117,7 @@
@MainThread
public static ViewModelProvider of(@NonNull FragmentActivity activity,
@NonNull Factory factory) {
+ checkApplication(activity);
return new ViewModelProvider(ViewModelStores.of(activity), factory);
}
@@ -124,8 +139,9 @@
mApplication = application;
}
+ @NonNull
@Override
- public <T extends ViewModel> T create(Class<T> modelClass) {
+ public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
if (AndroidViewModel.class.isAssignableFrom(modelClass)) {
//noinspection TryWithIdenticalCatches
try {
diff --git a/lifecycle/extensions/src/main/java/android/arch/lifecycle/ViewModelStoreOwner.java b/lifecycle/extensions/src/main/java/android/arch/lifecycle/ViewModelStoreOwner.java
index 5058305..e26fa32 100644
--- a/lifecycle/extensions/src/main/java/android/arch/lifecycle/ViewModelStoreOwner.java
+++ b/lifecycle/extensions/src/main/java/android/arch/lifecycle/ViewModelStoreOwner.java
@@ -16,6 +16,8 @@
package android.arch.lifecycle;
+import android.support.annotation.NonNull;
+
/**
* A scope that owns {@link ViewModelStore}.
* <p>
@@ -30,5 +32,6 @@
*
* @return a {@code ViewModelStore}
*/
+ @NonNull
ViewModelStore getViewModelStore();
}
diff --git a/lifecycle/extensions/src/main/java/android/arch/lifecycle/ViewModelStores.java b/lifecycle/extensions/src/main/java/android/arch/lifecycle/ViewModelStores.java
index 8c17dd9..d7d769d 100644
--- a/lifecycle/extensions/src/main/java/android/arch/lifecycle/ViewModelStores.java
+++ b/lifecycle/extensions/src/main/java/android/arch/lifecycle/ViewModelStores.java
@@ -19,6 +19,7 @@
import static android.arch.lifecycle.HolderFragment.holderFragmentFor;
import android.support.annotation.MainThread;
+import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
@@ -38,7 +39,7 @@
* @return a {@code ViewModelStore}
*/
@MainThread
- public static ViewModelStore of(FragmentActivity activity) {
+ public static ViewModelStore of(@NonNull FragmentActivity activity) {
return holderFragmentFor(activity).getViewModelStore();
}
@@ -49,7 +50,7 @@
* @return a {@code ViewModelStore}
*/
@MainThread
- public static ViewModelStore of(Fragment fragment) {
+ public static ViewModelStore of(@NonNull Fragment fragment) {
return holderFragmentFor(fragment).getViewModelStore();
}
}
diff --git a/lifecycle/extensions/src/test/java/android/arch/lifecycle/ComputableLiveDataTest.java b/lifecycle/extensions/src/test/java/android/arch/lifecycle/ComputableLiveDataTest.java
index 0a3fbed..eb89d8d 100644
--- a/lifecycle/extensions/src/test/java/android/arch/lifecycle/ComputableLiveDataTest.java
+++ b/lifecycle/extensions/src/test/java/android/arch/lifecycle/ComputableLiveDataTest.java
@@ -27,7 +27,7 @@
import static org.mockito.Mockito.timeout;
import static org.mockito.Mockito.verify;
-import android.arch.core.executor.AppToolkitTaskExecutor;
+import android.arch.core.executor.ArchTaskExecutor;
import android.arch.core.executor.TaskExecutor;
import android.arch.core.executor.TaskExecutorWithFakeMainThread;
import android.arch.lifecycle.util.InstantTaskExecutor;
@@ -58,12 +58,12 @@
@Before
public void swapExecutorDelegate() {
mTaskExecutor = spy(new InstantTaskExecutor());
- AppToolkitTaskExecutor.getInstance().setDelegate(mTaskExecutor);
+ ArchTaskExecutor.getInstance().setDelegate(mTaskExecutor);
}
@After
public void removeExecutorDelegate() {
- AppToolkitTaskExecutor.getInstance().setDelegate(null);
+ ArchTaskExecutor.getInstance().setDelegate(null);
}
@Test
@@ -76,7 +76,7 @@
@Test
public void noConcurrentCompute() throws InterruptedException {
TaskExecutorWithFakeMainThread executor = new TaskExecutorWithFakeMainThread(2);
- AppToolkitTaskExecutor.getInstance().setDelegate(executor);
+ ArchTaskExecutor.getInstance().setDelegate(executor);
try {
// # of compute calls
final Semaphore computeCounter = new Semaphore(0);
@@ -121,7 +121,7 @@
// assert no other results arrive
verify(observer, never()).onChanged(anyInt());
} finally {
- AppToolkitTaskExecutor.getInstance().setDelegate(null);
+ ArchTaskExecutor.getInstance().setDelegate(null);
}
}
diff --git a/lifecycle/extensions/src/test/java/android/arch/lifecycle/LiveDataTest.java b/lifecycle/extensions/src/test/java/android/arch/lifecycle/LiveDataTest.java
index ed2a35d..647d5d7 100644
--- a/lifecycle/extensions/src/test/java/android/arch/lifecycle/LiveDataTest.java
+++ b/lifecycle/extensions/src/test/java/android/arch/lifecycle/LiveDataTest.java
@@ -36,42 +36,57 @@
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when;
-import android.arch.core.executor.AppToolkitTaskExecutor;
+import android.arch.core.executor.ArchTaskExecutor;
import android.arch.lifecycle.util.InstantTaskExecutor;
import android.support.annotation.Nullable;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+import org.mockito.InOrder;
import org.mockito.Mockito;
@SuppressWarnings({"unchecked"})
+@RunWith(JUnit4.class)
public class LiveDataTest {
private PublicLiveData<String> mLiveData;
private LifecycleOwner mOwner;
+ private LifecycleOwner mOwner2;
private LifecycleRegistry mRegistry;
+ private LifecycleRegistry mRegistry2;
private MethodExec mActiveObserversChanged;
private boolean mInObserver;
@Before
public void init() {
mLiveData = new PublicLiveData<>();
- mOwner = mock(LifecycleOwner.class);
- mRegistry = new LifecycleRegistry(mOwner);
- when(mOwner.getLifecycle()).thenReturn(mRegistry);
+
mActiveObserversChanged = mock(MethodExec.class);
mLiveData.activeObserversChanged = mActiveObserversChanged;
+
+ mOwner = mock(LifecycleOwner.class);
+
+ mRegistry = new LifecycleRegistry(mOwner);
+ when(mOwner.getLifecycle()).thenReturn(mRegistry);
+
+ mOwner2 = mock(LifecycleOwner.class);
+
+ mRegistry2 = new LifecycleRegistry(mOwner2);
+ when(mOwner2.getLifecycle()).thenReturn(mRegistry2);
+
mInObserver = false;
}
@Before
public void swapExecutorDelegate() {
- AppToolkitTaskExecutor.getInstance().setDelegate(new InstantTaskExecutor());
+ ArchTaskExecutor.getInstance().setDelegate(new InstantTaskExecutor());
}
@After
public void removeExecutorDelegate() {
- AppToolkitTaskExecutor.getInstance().setDelegate(null);
+ ArchTaskExecutor.getInstance().setDelegate(null);
}
@Test
@@ -155,14 +170,11 @@
@Test
public void testAddSameObserverIn2LifecycleOwners() {
Observer<String> observer = (Observer<String>) mock(Observer.class);
- LifecycleOwner owner2 = mock(LifecycleOwner.class);
- LifecycleRegistry registry2 = new LifecycleRegistry(owner2);
- when(owner2.getLifecycle()).thenReturn(registry2);
mLiveData.observe(mOwner, observer);
Throwable throwable = null;
try {
- mLiveData.observe(owner2, observer);
+ mLiveData.observe(mOwner2, observer);
} catch (Throwable t) {
throwable = t;
}
@@ -418,6 +430,244 @@
verify(mActiveObserversChanged, never()).onCall(anyBoolean());
}
+ @Test
+ public void testRemoveDuringAddition() {
+ mRegistry.handleLifecycleEvent(ON_START);
+ mLiveData.setValue("bla");
+ mLiveData.observeForever(new Observer<String>() {
+ @Override
+ public void onChanged(@Nullable String s) {
+ mLiveData.removeObserver(this);
+ }
+ });
+ assertThat(mLiveData.hasActiveObservers(), is(false));
+ InOrder inOrder = Mockito.inOrder(mActiveObserversChanged);
+ inOrder.verify(mActiveObserversChanged).onCall(true);
+ inOrder.verify(mActiveObserversChanged).onCall(false);
+ inOrder.verifyNoMoreInteractions();
+ }
+
+ @Test
+ public void testRemoveDuringBringingUpToState() {
+ mLiveData.setValue("bla");
+ mLiveData.observeForever(new Observer<String>() {
+ @Override
+ public void onChanged(@Nullable String s) {
+ mLiveData.removeObserver(this);
+ }
+ });
+ mRegistry.handleLifecycleEvent(ON_RESUME);
+ assertThat(mLiveData.hasActiveObservers(), is(false));
+ InOrder inOrder = Mockito.inOrder(mActiveObserversChanged);
+ inOrder.verify(mActiveObserversChanged).onCall(true);
+ inOrder.verify(mActiveObserversChanged).onCall(false);
+ inOrder.verifyNoMoreInteractions();
+ }
+
+ @Test
+ public void setValue_neverActive_observerOnChangedNotCalled() {
+ Observer<String> observer = (Observer<String>) mock(Observer.class);
+ mLiveData.observe(mOwner, observer);
+
+ mLiveData.setValue("1");
+
+ verify(observer, never()).onChanged(anyString());
+ }
+
+ @Test
+ public void setValue_twoObserversTwoStartedOwners_onChangedCalledOnBoth() {
+ Observer<String> observer1 = mock(Observer.class);
+ Observer<String> observer2 = mock(Observer.class);
+
+ mLiveData.observe(mOwner, observer1);
+ mLiveData.observe(mOwner2, observer2);
+
+ mRegistry.handleLifecycleEvent(Lifecycle.Event.ON_START);
+ mRegistry2.handleLifecycleEvent(Lifecycle.Event.ON_START);
+
+ mLiveData.setValue("1");
+
+ verify(observer1).onChanged("1");
+ verify(observer2).onChanged("1");
+ }
+
+ @Test
+ public void setValue_twoObserversOneStartedOwner_onChangedCalledOnOneCorrectObserver() {
+ Observer<String> observer1 = mock(Observer.class);
+ Observer<String> observer2 = mock(Observer.class);
+
+ mLiveData.observe(mOwner, observer1);
+ mLiveData.observe(mOwner2, observer2);
+
+ mRegistry.handleLifecycleEvent(Lifecycle.Event.ON_START);
+
+ mLiveData.setValue("1");
+
+ verify(observer1).onChanged("1");
+ verify(observer2, never()).onChanged(anyString());
+ }
+
+ @Test
+ public void setValue_twoObserversBothStartedAfterSetValue_onChangedCalledOnBoth() {
+ Observer<String> observer1 = mock(Observer.class);
+ Observer<String> observer2 = mock(Observer.class);
+
+ mLiveData.observe(mOwner, observer1);
+ mLiveData.observe(mOwner2, observer2);
+
+ mLiveData.setValue("1");
+
+ mRegistry.handleLifecycleEvent(Lifecycle.Event.ON_START);
+ mRegistry2.handleLifecycleEvent(Lifecycle.Event.ON_START);
+
+ verify(observer1).onChanged("1");
+ verify(observer1).onChanged("1");
+ }
+
+ @Test
+ public void setValue_twoObserversOneStartedAfterSetValue_onChangedCalledOnCorrectObserver() {
+ Observer<String> observer1 = mock(Observer.class);
+ Observer<String> observer2 = mock(Observer.class);
+
+ mLiveData.observe(mOwner, observer1);
+ mLiveData.observe(mOwner2, observer2);
+
+ mLiveData.setValue("1");
+
+ mRegistry.handleLifecycleEvent(Lifecycle.Event.ON_START);
+
+ verify(observer1).onChanged("1");
+ verify(observer2, never()).onChanged(anyString());
+ }
+
+ @Test
+ public void setValue_twoObserversOneStarted_liveDataBecomesActive() {
+ Observer<String> observer1 = mock(Observer.class);
+ Observer<String> observer2 = mock(Observer.class);
+
+ mLiveData.observe(mOwner, observer1);
+ mLiveData.observe(mOwner2, observer2);
+
+ mRegistry.handleLifecycleEvent(Lifecycle.Event.ON_START);
+
+ verify(mActiveObserversChanged).onCall(true);
+ }
+
+ @Test
+ public void setValue_twoObserversOneStopped_liveDataStaysActive() {
+ Observer<String> observer1 = mock(Observer.class);
+ Observer<String> observer2 = mock(Observer.class);
+
+ mLiveData.observe(mOwner, observer1);
+ mLiveData.observe(mOwner2, observer2);
+
+ mRegistry.handleLifecycleEvent(Lifecycle.Event.ON_START);
+ mRegistry2.handleLifecycleEvent(Lifecycle.Event.ON_START);
+
+ verify(mActiveObserversChanged).onCall(true);
+
+ reset(mActiveObserversChanged);
+ mRegistry.handleLifecycleEvent(Lifecycle.Event.ON_STOP);
+
+ verify(mActiveObserversChanged, never()).onCall(anyBoolean());
+ }
+
+ /**
+ * Verifies that if a lifecycle's state changes without an event, and changes to something that
+ * LiveData would become inactive in response to, LiveData will detect the change upon new data
+ * being set and become inactive. Also verifies that once the lifecycle enters into a state
+ * that LiveData should become active to, that it does indeed become active.
+ */
+ @Test
+ public void liveDataActiveStateIsManagedCorrectlyWithoutEvent_oneObserver() {
+ Observer<String> observer = (Observer<String>) mock(Observer.class);
+ mLiveData.observe(mOwner, observer);
+
+ mRegistry.handleLifecycleEvent(Lifecycle.Event.ON_START);
+
+ // Marking state as CREATED should call onInactive.
+ reset(mActiveObserversChanged);
+ mRegistry.markState(Lifecycle.State.CREATED);
+ verify(mActiveObserversChanged).onCall(false);
+ reset(mActiveObserversChanged);
+
+ // Setting a new value should trigger LiveData to realize the Lifecycle it is observing
+ // is in a state where the LiveData should be inactive, so the LiveData will call onInactive
+ // and the Observer shouldn't be affected.
+ mLiveData.setValue("1");
+
+ // state is already CREATED so should not call again
+ verify(mActiveObserversChanged, never()).onCall(anyBoolean());
+ verify(observer, never()).onChanged(anyString());
+
+ // Sanity check. Because we've only marked the state as CREATED, sending ON_START
+ // should re-dispatch events.
+ reset(mActiveObserversChanged);
+ reset(observer);
+ mRegistry.handleLifecycleEvent(Lifecycle.Event.ON_START);
+ verify(mActiveObserversChanged).onCall(true);
+ verify(observer).onChanged("1");
+ }
+
+ /**
+ * This test verifies that LiveData will detect changes in LifecycleState that would make it
+ * inactive upon the setting of new data, but only if all of the Lifecycles it's observing
+ * are all in those states. It also makes sure that once it is inactive, that it will become
+ * active again once one of the lifecycles it's observing moves to an appropriate state.
+ */
+ @Test
+ public void liveDataActiveStateIsManagedCorrectlyWithoutEvent_twoObservers() {
+ Observer<String> observer1 = mock(Observer.class);
+ Observer<String> observer2 = mock(Observer.class);
+
+ mLiveData.observe(mOwner, observer1);
+ mLiveData.observe(mOwner2, observer2);
+
+ mRegistry.handleLifecycleEvent(Lifecycle.Event.ON_START);
+ mRegistry2.handleLifecycleEvent(Lifecycle.Event.ON_START);
+
+ // Marking the state to created won't change LiveData to be inactive.
+ reset(mActiveObserversChanged);
+ mRegistry.markState(Lifecycle.State.CREATED);
+ verify(mActiveObserversChanged, never()).onCall(anyBoolean());
+
+ // After setting a value, the LiveData will stay active because there is still a STARTED
+ // lifecycle being observed. The one Observer associated with the STARTED lifecycle will
+ // also have been called, but the other Observer will not have been called.
+ reset(observer1);
+ reset(observer2);
+ mLiveData.setValue("1");
+ verify(mActiveObserversChanged, never()).onCall(anyBoolean());
+ verify(observer1, never()).onChanged(anyString());
+ verify(observer2).onChanged("1");
+
+ // Now we set the other Lifecycle to be inactive, live data should become inactive.
+ reset(observer1);
+ reset(observer2);
+ mRegistry2.markState(Lifecycle.State.CREATED);
+ verify(mActiveObserversChanged).onCall(false);
+ verify(observer1, never()).onChanged(anyString());
+ verify(observer2, never()).onChanged(anyString());
+
+ // Now we post another value, because both lifecycles are in the Created state, live data
+ // will not dispatch any values
+ reset(mActiveObserversChanged);
+ mLiveData.setValue("2");
+ verify(mActiveObserversChanged, never()).onCall(anyBoolean());
+ verify(observer1, never()).onChanged(anyString());
+ verify(observer2, never()).onChanged(anyString());
+
+ // Now that the first Lifecycle has been moved back to the Resumed state, the LiveData will
+ // be made active and it's associated Observer will be called with the new value, but the
+ // Observer associated with the Lifecycle that is still in the Created state won't be
+ // called.
+ reset(mActiveObserversChanged);
+ mRegistry.handleLifecycleEvent(Lifecycle.Event.ON_RESUME);
+ verify(mActiveObserversChanged).onCall(true);
+ verify(observer1).onChanged("2");
+ verify(observer2, never()).onChanged(anyString());
+ }
+
@SuppressWarnings("WeakerAccess")
static class PublicLiveData<T> extends LiveData<T> {
// cannot spy due to internal calls
diff --git a/lifecycle/extensions/src/test/java/android/arch/lifecycle/MediatorLiveDataTest.java b/lifecycle/extensions/src/test/java/android/arch/lifecycle/MediatorLiveDataTest.java
index 3de3eee..e2eadbe 100644
--- a/lifecycle/extensions/src/test/java/android/arch/lifecycle/MediatorLiveDataTest.java
+++ b/lifecycle/extensions/src/test/java/android/arch/lifecycle/MediatorLiveDataTest.java
@@ -25,7 +25,7 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import android.arch.core.executor.AppToolkitTaskExecutor;
+import android.arch.core.executor.ArchTaskExecutor;
import android.arch.lifecycle.util.InstantTaskExecutor;
import android.support.annotation.Nullable;
@@ -69,7 +69,7 @@
@Before
public void swapExecutorDelegate() {
- AppToolkitTaskExecutor.getInstance().setDelegate(new InstantTaskExecutor());
+ ArchTaskExecutor.getInstance().setDelegate(new InstantTaskExecutor());
}
@Test
diff --git a/lifecycle/extensions/src/test/java/android/arch/lifecycle/TransformationsTest.java b/lifecycle/extensions/src/test/java/android/arch/lifecycle/TransformationsTest.java
index e92ecca..940a3e8 100644
--- a/lifecycle/extensions/src/test/java/android/arch/lifecycle/TransformationsTest.java
+++ b/lifecycle/extensions/src/test/java/android/arch/lifecycle/TransformationsTest.java
@@ -25,7 +25,7 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import android.arch.core.executor.AppToolkitTaskExecutor;
+import android.arch.core.executor.ArchTaskExecutor;
import android.arch.core.util.Function;
import android.arch.lifecycle.util.InstantTaskExecutor;
@@ -42,7 +42,7 @@
@Before
public void swapExecutorDelegate() {
- AppToolkitTaskExecutor.getInstance().setDelegate(new InstantTaskExecutor());
+ ArchTaskExecutor.getInstance().setDelegate(new InstantTaskExecutor());
}
@Before
diff --git a/lifecycle/extensions/src/test/java/android/arch/lifecycle/ViewModelProviderTest.java b/lifecycle/extensions/src/test/java/android/arch/lifecycle/ViewModelProviderTest.java
index 61760fc..8877357 100644
--- a/lifecycle/extensions/src/test/java/android/arch/lifecycle/ViewModelProviderTest.java
+++ b/lifecycle/extensions/src/test/java/android/arch/lifecycle/ViewModelProviderTest.java
@@ -21,6 +21,8 @@
import static org.hamcrest.MatcherAssert.assertThat;
import android.arch.lifecycle.ViewModelProvider.NewInstanceFactory;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentActivity;
import org.junit.Assert;
import org.junit.Before;
@@ -82,6 +84,18 @@
assertThat(viewModel, is(provider.get(ViewModel1.class)));
}
+ @Test(expected = IllegalStateException.class)
+ public void testNotAttachedActivity() {
+ // This is similar to call ViewModelProviders.of in Activity's constructor
+ ViewModelProviders.of(new FragmentActivity());
+ }
+
+ @Test(expected = IllegalStateException.class)
+ public void testNotAttachedFragment() {
+ // This is similar to call ViewModelProviders.of in Activity's constructor
+ ViewModelProviders.of(new Fragment());
+ }
+
public static class ViewModel1 extends ViewModel {
boolean mCleared;
diff --git a/lifecycle/integration-tests/testapp/build.gradle b/lifecycle/integration-tests/testapp/build.gradle
index dca413b..a1a16cb 100644
--- a/lifecycle/integration-tests/testapp/build.gradle
+++ b/lifecycle/integration-tests/testapp/build.gradle
@@ -65,6 +65,8 @@
exclude group: 'com.android.support', module: 'support-annotations'
})
testCompile libs.junit
+ testCompile libs.mockito_core
+ testAnnotationProcessor project(":lifecycle:compiler")
}
createAndroidCheckstyle(project)
diff --git a/lifecycle/integration-tests/testapp/src/androidTest/java/android/arch/lifecycle/ActivityFullLifecycleTest.java b/lifecycle/integration-tests/testapp/src/androidTest/java/android/arch/lifecycle/ActivityFullLifecycleTest.java
index ee4e661..78dd015 100644
--- a/lifecycle/integration-tests/testapp/src/androidTest/java/android/arch/lifecycle/ActivityFullLifecycleTest.java
+++ b/lifecycle/integration-tests/testapp/src/androidTest/java/android/arch/lifecycle/ActivityFullLifecycleTest.java
@@ -16,48 +16,43 @@
package android.arch.lifecycle;
-import static android.arch.lifecycle.Lifecycle.Event.ON_CREATE;
-import static android.arch.lifecycle.Lifecycle.Event.ON_DESTROY;
-import static android.arch.lifecycle.Lifecycle.Event.ON_PAUSE;
-import static android.arch.lifecycle.Lifecycle.Event.ON_RESUME;
-import static android.arch.lifecycle.Lifecycle.Event.ON_START;
-import static android.arch.lifecycle.Lifecycle.Event.ON_STOP;
-import static android.arch.lifecycle.testapp.TestEvent.ACTIVITY_CALLBACK;
-import static android.arch.lifecycle.testapp.TestEvent.LIFECYCLE_EVENT;
+import static android.arch.lifecycle.TestUtils.OrderedTuples.CREATE;
+import static android.arch.lifecycle.TestUtils.OrderedTuples.DESTROY;
+import static android.arch.lifecycle.TestUtils.OrderedTuples.PAUSE;
+import static android.arch.lifecycle.TestUtils.OrderedTuples.RESUME;
+import static android.arch.lifecycle.TestUtils.OrderedTuples.START;
+import static android.arch.lifecycle.TestUtils.OrderedTuples.STOP;
+import static android.arch.lifecycle.TestUtils.flatMap;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
import android.app.Activity;
import android.arch.lifecycle.Lifecycle.Event;
-import android.arch.lifecycle.testapp.CollectingActivity;
+import android.arch.lifecycle.testapp.CollectingLifecycleOwner;
+import android.arch.lifecycle.testapp.CollectingSupportActivity;
import android.arch.lifecycle.testapp.FrameworkLifecycleRegistryActivity;
-import android.arch.lifecycle.testapp.FullLifecycleTestActivity;
-import android.arch.lifecycle.testapp.SupportLifecycleRegistryActivity;
import android.arch.lifecycle.testapp.TestEvent;
import android.support.test.filters.SmallTest;
import android.support.test.rule.ActivityTestRule;
-import android.util.Pair;
+import android.support.v4.util.Pair;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
-import java.util.ArrayList;
import java.util.List;
@SmallTest
@RunWith(Parameterized.class)
public class ActivityFullLifecycleTest {
@Rule
- public ActivityTestRule activityTestRule =
- new ActivityTestRule<>(FullLifecycleTestActivity.class);
+ public final ActivityTestRule<? extends CollectingLifecycleOwner> activityTestRule;
@Parameterized.Parameters
public static Class[] params() {
- return new Class[]{FullLifecycleTestActivity.class,
- SupportLifecycleRegistryActivity.class,
+ return new Class[]{CollectingSupportActivity.class,
FrameworkLifecycleRegistryActivity.class};
}
@@ -68,28 +63,13 @@
@Test
- public void testFullLifecycle() throws InterruptedException {
- Activity activity = activityTestRule.getActivity();
- List<Pair<TestEvent, Event>> results = ((CollectingActivity) activity)
- .waitForCollectedEvents();
+ public void testFullLifecycle() throws Throwable {
+ CollectingLifecycleOwner owner = activityTestRule.getActivity();
+ TestUtils.waitTillResumed(owner, activityTestRule);
+ activityTestRule.finishActivity();
- Event[] expectedEvents =
- new Event[]{ON_CREATE, ON_START, ON_RESUME, ON_PAUSE, ON_STOP, ON_DESTROY};
-
- List<Pair<TestEvent, Event>> expected = new ArrayList<>();
- boolean beforeResume = true;
- for (Event i : expectedEvents) {
- if (beforeResume) {
- expected.add(new Pair<>(ACTIVITY_CALLBACK, i));
- expected.add(new Pair<>(LIFECYCLE_EVENT, i));
- } else {
- expected.add(new Pair<>(LIFECYCLE_EVENT, i));
- expected.add(new Pair<>(ACTIVITY_CALLBACK, i));
- }
- if (i == ON_RESUME) {
- beforeResume = false;
- }
- }
- assertThat(results, is(expected));
+ TestUtils.waitTillDestroyed(owner, activityTestRule);
+ List<Pair<TestEvent, Event>> results = owner.copyCollectedEvents();
+ assertThat(results, is(flatMap(CREATE, START, RESUME, PAUSE, STOP, DESTROY)));
}
}
diff --git a/lifecycle/integration-tests/testapp/src/androidTest/java/android/arch/lifecycle/FragmentInBackStackLifecycleTest.java b/lifecycle/integration-tests/testapp/src/androidTest/java/android/arch/lifecycle/FragmentInBackStackLifecycleTest.java
index 3397f5f..f48f788 100644
--- a/lifecycle/integration-tests/testapp/src/androidTest/java/android/arch/lifecycle/FragmentInBackStackLifecycleTest.java
+++ b/lifecycle/integration-tests/testapp/src/androidTest/java/android/arch/lifecycle/FragmentInBackStackLifecycleTest.java
@@ -37,6 +37,7 @@
import android.support.test.filters.SmallTest;
import android.support.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;
+import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
@@ -58,20 +59,20 @@
final ArrayList<Event> collectedEvents = new ArrayList<>();
LifecycleObserver collectingObserver = new LifecycleObserver() {
@OnLifecycleEvent(Event.ON_ANY)
- void onAny(LifecycleOwner owner, Event event) {
+ void onAny(@SuppressWarnings("unused") LifecycleOwner owner, Event event) {
collectedEvents.add(event);
}
};
final FragmentActivity activity = activityTestRule.getActivity();
activityTestRule.runOnUiThread(() -> {
FragmentManager fm = activity.getSupportFragmentManager();
- LifecycleFragment fragment = new LifecycleFragment();
+ Fragment fragment = new Fragment();
fm.beginTransaction().add(R.id.fragment_container, fragment, "tag").addToBackStack(null)
.commit();
fm.executePendingTransactions();
fragment.getLifecycle().addObserver(collectingObserver);
- LifecycleFragment fragment2 = new LifecycleFragment();
+ Fragment fragment2 = new Fragment();
fm.beginTransaction().replace(R.id.fragment_container, fragment2).addToBackStack(null)
.commit();
fm.executePendingTransactions();
@@ -82,12 +83,13 @@
EmptyActivity newActivity = recreateActivity(activityTestRule.getActivity(),
activityTestRule);
+ //noinspection ArraysAsListWithZeroOrOneArgument
assertThat(collectedEvents, is(asList(ON_DESTROY)));
collectedEvents.clear();
EmptyActivity lastActivity = recreateActivity(newActivity, activityTestRule);
activityTestRule.runOnUiThread(() -> {
FragmentManager fm = lastActivity.getSupportFragmentManager();
- LifecycleFragment fragment = (LifecycleFragment) fm.findFragmentByTag("tag");
+ Fragment fragment = fm.findFragmentByTag("tag");
fragment.getLifecycle().addObserver(collectingObserver);
assertThat(collectedEvents, iterableWithSize(0));
fm.popBackStackImmediate();
diff --git a/lifecycle/integration-tests/testapp/src/androidTest/java/android/arch/lifecycle/LiveDataOnSaveInstanceStateTest.java b/lifecycle/integration-tests/testapp/src/androidTest/java/android/arch/lifecycle/LiveDataOnSaveInstanceStateTest.java
new file mode 100644
index 0000000..836cfff
--- /dev/null
+++ b/lifecycle/integration-tests/testapp/src/androidTest/java/android/arch/lifecycle/LiveDataOnSaveInstanceStateTest.java
@@ -0,0 +1,177 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.arch.lifecycle;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+import android.app.Instrumentation;
+import android.arch.lifecycle.testapp.CollectingSupportActivity;
+import android.arch.lifecycle.testapp.CollectingSupportFragment;
+import android.arch.lifecycle.testapp.NavigationDialogActivity;
+import android.content.Intent;
+import android.os.Build;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.SdkSuppress;
+import android.support.test.filters.SmallTest;
+import android.support.test.rule.ActivityTestRule;
+import android.support.test.runner.AndroidJUnit4;
+import android.support.v4.app.FragmentActivity;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.concurrent.atomic.AtomicInteger;
+
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class LiveDataOnSaveInstanceStateTest {
+ @Rule
+ public ActivityTestRule<CollectingSupportActivity> mActivityTestRule =
+ new ActivityTestRule<>(CollectingSupportActivity.class);
+
+ @Test
+ @SdkSuppress(maxSdkVersion = Build.VERSION_CODES.M)
+ public void liveData_partiallyObscuredActivity_maxSdkM() throws Throwable {
+ CollectingSupportActivity activity = mActivityTestRule.getActivity();
+
+ liveData_partiallyObscuredLifecycleOwner_maxSdkM(activity);
+ }
+
+ @Test
+ @SdkSuppress(maxSdkVersion = Build.VERSION_CODES.M)
+ public void liveData_partiallyObscuredActivityWithFragment_maxSdkM() throws Throwable {
+ CollectingSupportActivity activity = mActivityTestRule.getActivity();
+ CollectingSupportFragment fragment = new CollectingSupportFragment();
+ mActivityTestRule.runOnUiThread(() -> activity.replaceFragment(fragment));
+
+ liveData_partiallyObscuredLifecycleOwner_maxSdkM(fragment);
+ }
+
+ @Test
+ @SdkSuppress(maxSdkVersion = Build.VERSION_CODES.M)
+ public void liveData_partiallyObscuredActivityFragmentInFragment_maxSdkM() throws Throwable {
+ CollectingSupportActivity activity = mActivityTestRule.getActivity();
+ CollectingSupportFragment fragment = new CollectingSupportFragment();
+ CollectingSupportFragment fragment2 = new CollectingSupportFragment();
+ mActivityTestRule.runOnUiThread(() -> {
+ activity.replaceFragment(fragment);
+ fragment.replaceFragment(fragment2);
+ });
+
+ liveData_partiallyObscuredLifecycleOwner_maxSdkM(fragment2);
+ }
+
+ @Test
+ @SdkSuppress(minSdkVersion = Build.VERSION_CODES.N)
+ public void liveData_partiallyObscuredActivity_minSdkN() throws Throwable {
+ CollectingSupportActivity activity = mActivityTestRule.getActivity();
+
+ liveData_partiallyObscuredLifecycleOwner_minSdkN(activity);
+ }
+
+ @Test
+ @SdkSuppress(minSdkVersion = Build.VERSION_CODES.N)
+ public void liveData_partiallyObscuredActivityWithFragment_minSdkN() throws Throwable {
+ CollectingSupportActivity activity = mActivityTestRule.getActivity();
+ CollectingSupportFragment fragment = new CollectingSupportFragment();
+ mActivityTestRule.runOnUiThread(() -> activity.replaceFragment(fragment));
+
+ liveData_partiallyObscuredLifecycleOwner_minSdkN(fragment);
+ }
+
+ @Test
+ @SdkSuppress(minSdkVersion = Build.VERSION_CODES.N)
+ public void liveData_partiallyObscuredActivityFragmentInFragment_minSdkN() throws Throwable {
+ CollectingSupportActivity activity = mActivityTestRule.getActivity();
+ CollectingSupportFragment fragment = new CollectingSupportFragment();
+ CollectingSupportFragment fragment2 = new CollectingSupportFragment();
+ mActivityTestRule.runOnUiThread(() -> {
+ activity.replaceFragment(fragment);
+ fragment.replaceFragment(fragment2);
+ });
+
+ liveData_partiallyObscuredLifecycleOwner_minSdkN(fragment2);
+ }
+
+ private void liveData_partiallyObscuredLifecycleOwner_maxSdkM(LifecycleOwner lifecycleOwner)
+ throws Throwable {
+ final AtomicInteger atomicInteger = new AtomicInteger(0);
+ MutableLiveData<Integer> mutableLiveData = new MutableLiveData<>();
+ mActivityTestRule.runOnUiThread(() -> mutableLiveData.setValue(0));
+
+ TestUtils.waitTillResumed(lifecycleOwner, mActivityTestRule);
+
+ mutableLiveData.observe(lifecycleOwner, atomicInteger::set);
+
+ final FragmentActivity dialogActivity = launchDialog();
+
+ TestUtils.waitTillCreated(lifecycleOwner, mActivityTestRule);
+
+ // Change the LiveData value and assert that the observer is not called given that the
+ // lifecycle is in the CREATED state.
+ mActivityTestRule.runOnUiThread(() -> mutableLiveData.setValue(1));
+ assertThat(atomicInteger.get(), is(0));
+
+ // Finish the dialog Activity, wait for the main activity to be resumed, and assert that
+ // the observer's onChanged method is called.
+ mActivityTestRule.runOnUiThread(dialogActivity::finish);
+ TestUtils.waitTillResumed(lifecycleOwner, mActivityTestRule);
+ assertThat(atomicInteger.get(), is(1));
+ }
+
+ private void liveData_partiallyObscuredLifecycleOwner_minSdkN(LifecycleOwner lifecycleOwner)
+ throws Throwable {
+ final AtomicInteger atomicInteger = new AtomicInteger(0);
+ MutableLiveData<Integer> mutableLiveData = new MutableLiveData<>();
+ mActivityTestRule.runOnUiThread(() -> mutableLiveData.setValue(0));
+
+ TestUtils.waitTillResumed(lifecycleOwner, mActivityTestRule);
+
+ mutableLiveData.observe(lifecycleOwner, atomicInteger::set);
+
+ // Launch the NavigationDialogActivity, partially obscuring the activity, and wait for the
+ // lifecycleOwner to hit onPause (or enter the STARTED state). On API 24 and above, this
+ // onPause should be the last lifecycle method called (and the STARTED state should be the
+ // final resting state).
+ launchDialog();
+ TestUtils.waitTillStarted(lifecycleOwner, mActivityTestRule);
+
+ // Change the LiveData's value and verify that the observer's onChanged method is called
+ // since we are in the STARTED state.
+ mActivityTestRule.runOnUiThread(() -> mutableLiveData.setValue(1));
+ assertThat(atomicInteger.get(), is(1));
+ }
+
+ private FragmentActivity launchDialog() throws Throwable {
+ Instrumentation.ActivityMonitor monitor = new Instrumentation.ActivityMonitor(
+ NavigationDialogActivity.class.getCanonicalName(), null, false);
+ Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation();
+ instrumentation.addMonitor(monitor);
+
+ FragmentActivity activity = mActivityTestRule.getActivity();
+ // helps with less flaky API 16 tests
+ Intent intent = new Intent(activity, NavigationDialogActivity.class);
+ intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
+ intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ activity.startActivity(intent);
+ FragmentActivity fragmentActivity = (FragmentActivity) monitor.waitForActivity();
+ TestUtils.waitTillResumed(fragmentActivity, mActivityTestRule);
+ return fragmentActivity;
+ }
+}
diff --git a/lifecycle/integration-tests/testapp/src/androidTest/java/android/arch/lifecycle/PartiallyCoveredActivityTest.java b/lifecycle/integration-tests/testapp/src/androidTest/java/android/arch/lifecycle/PartiallyCoveredActivityTest.java
new file mode 100644
index 0000000..07a9dc5
--- /dev/null
+++ b/lifecycle/integration-tests/testapp/src/androidTest/java/android/arch/lifecycle/PartiallyCoveredActivityTest.java
@@ -0,0 +1,200 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.arch.lifecycle;
+
+import static android.arch.lifecycle.Lifecycle.Event.ON_RESUME;
+import static android.arch.lifecycle.Lifecycle.Event.ON_START;
+import static android.arch.lifecycle.Lifecycle.Event.ON_STOP;
+import static android.arch.lifecycle.TestUtils.OrderedTuples.CREATE;
+import static android.arch.lifecycle.TestUtils.OrderedTuples.DESTROY;
+import static android.arch.lifecycle.TestUtils.OrderedTuples.PAUSE;
+import static android.arch.lifecycle.TestUtils.OrderedTuples.RESUME;
+import static android.arch.lifecycle.TestUtils.OrderedTuples.START;
+import static android.arch.lifecycle.TestUtils.OrderedTuples.STOP;
+import static android.arch.lifecycle.TestUtils.flatMap;
+import static android.arch.lifecycle.testapp.TestEvent.LIFECYCLE_EVENT;
+import static android.arch.lifecycle.testapp.TestEvent.OWNER_CALLBACK;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+import static java.util.Arrays.asList;
+import static java.util.Collections.singletonList;
+
+import android.app.Instrumentation;
+import android.arch.lifecycle.testapp.CollectingLifecycleOwner;
+import android.arch.lifecycle.testapp.CollectingSupportActivity;
+import android.arch.lifecycle.testapp.CollectingSupportFragment;
+import android.arch.lifecycle.testapp.NavigationDialogActivity;
+import android.arch.lifecycle.testapp.TestEvent;
+import android.content.Intent;
+import android.os.Build;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.LargeTest;
+import android.support.test.rule.ActivityTestRule;
+import android.support.v4.app.FragmentActivity;
+import android.support.v4.util.Pair;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+import java.util.List;
+import java.util.concurrent.ExecutionException;
+
+/**
+ * Runs tests about the state when an activity is partially covered by another activity. Pre
+ * API 24, framework behavior changes so the test rely on whether state is saved or not and makes
+ * assertions accordingly.
+ */
+@SuppressWarnings("unchecked")
+@RunWith(Parameterized.class)
+@LargeTest
+public class PartiallyCoveredActivityTest {
+ private static final List[] IF_SAVED = new List[]{
+ // when overlaid
+ flatMap(CREATE, START, RESUME, PAUSE,
+ singletonList(new Pair<>(LIFECYCLE_EVENT, ON_STOP))),
+ // post dialog dismiss
+ asList(new Pair<>(OWNER_CALLBACK, ON_RESUME),
+ new Pair<>(LIFECYCLE_EVENT, ON_START),
+ new Pair<>(LIFECYCLE_EVENT, ON_RESUME)),
+ // post finish
+ flatMap(PAUSE, STOP, DESTROY)};
+
+ private static final List[] IF_NOT_SAVED = new List[]{
+ // when overlaid
+ flatMap(CREATE, START, RESUME, PAUSE),
+ // post dialog dismiss
+ flatMap(RESUME),
+ // post finish
+ flatMap(PAUSE, STOP, DESTROY)};
+
+ private static final boolean sShouldSave = Build.VERSION.SDK_INT < Build.VERSION_CODES.N;
+ private static final List<Pair<TestEvent, Lifecycle.Event>>[] EXPECTED =
+ sShouldSave ? IF_SAVED : IF_NOT_SAVED;
+
+ @Rule
+ public ActivityTestRule<CollectingSupportActivity> activityRule =
+ new ActivityTestRule<CollectingSupportActivity>(
+ CollectingSupportActivity.class) {
+ @Override
+ protected Intent getActivityIntent() {
+ // helps with less flaky API 16 tests
+ Intent intent = new Intent(InstrumentationRegistry.getTargetContext(),
+ CollectingSupportActivity.class);
+ intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ return intent;
+ }
+ };
+ private final boolean mDismissDialog;
+
+ @Parameterized.Parameters(name = "dismissDialog_{0}")
+ public static List<Boolean> dismissDialog() {
+ return asList(true, false);
+ }
+
+ public PartiallyCoveredActivityTest(boolean dismissDialog) {
+ mDismissDialog = dismissDialog;
+ }
+
+ @Test
+ public void coveredWithDialog_activity() throws Throwable {
+ final CollectingSupportActivity activity = activityRule.getActivity();
+ runTest(activity);
+ }
+
+ @Test
+ public void coveredWithDialog_fragment() throws Throwable {
+ CollectingSupportFragment fragment = new CollectingSupportFragment();
+ activityRule.runOnUiThread(() -> activityRule.getActivity().replaceFragment(fragment));
+ runTest(fragment);
+ }
+
+ @Test
+ public void coveredWithDialog_childFragment() throws Throwable {
+ CollectingSupportFragment parentFragment = new CollectingSupportFragment();
+ CollectingSupportFragment childFragment = new CollectingSupportFragment();
+ activityRule.runOnUiThread(() -> {
+ activityRule.getActivity().replaceFragment(parentFragment);
+ parentFragment.replaceFragment(childFragment);
+ });
+ runTest(childFragment);
+ }
+
+ private void runTest(CollectingLifecycleOwner owner) throws Throwable {
+ TestUtils.waitTillResumed(owner, activityRule);
+ FragmentActivity dialog = launchDialog();
+ assertStateSaving();
+ waitForIdle();
+ assertThat(owner.copyCollectedEvents(), is(EXPECTED[0]));
+ List<Pair<TestEvent, Lifecycle.Event>> expected;
+ if (mDismissDialog) {
+ dialog.finish();
+ TestUtils.waitTillResumed(activityRule.getActivity(), activityRule);
+ assertThat(owner.copyCollectedEvents(), is(flatMap(EXPECTED[0], EXPECTED[1])));
+ expected = flatMap(EXPECTED[0], EXPECTED[1], EXPECTED[2]);
+ } else {
+ expected = flatMap(CREATE, START, RESUME, PAUSE, STOP, DESTROY);
+ }
+ CollectingSupportActivity activity = activityRule.getActivity();
+ activityRule.finishActivity();
+ TestUtils.waitTillDestroyed(activity, activityRule);
+ assertThat(owner.copyCollectedEvents(), is(expected));
+ }
+
+ // test sanity
+ private void assertStateSaving() throws ExecutionException, InterruptedException {
+ final CollectingSupportActivity activity = activityRule.getActivity();
+ if (sShouldSave) {
+ // state should be saved. wait for it to be saved
+ assertThat("test sanity",
+ activity.waitForStateSave(20), is(true));
+ assertThat("test sanity", activity.getSupportFragmentManager()
+ .isStateSaved(), is(true));
+ } else {
+ // should should not be saved
+ assertThat("test sanity", activity.getSupportFragmentManager()
+ .isStateSaved(), is(false));
+ }
+ }
+
+ private void waitForIdle() {
+ InstrumentationRegistry.getInstrumentation().waitForIdleSync();
+ }
+
+ private FragmentActivity launchDialog() throws Throwable {
+ Instrumentation.ActivityMonitor monitor = new Instrumentation.ActivityMonitor(
+ NavigationDialogActivity.class.getCanonicalName(), null, false);
+ Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation();
+ instrumentation.addMonitor(monitor);
+
+ FragmentActivity activity = activityRule.getActivity();
+
+ Intent intent = new Intent(activity, NavigationDialogActivity.class);
+ // disabling animations helps with less flaky API 16 tests
+ intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
+ intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ activity.startActivity(intent);
+ FragmentActivity fragmentActivity = (FragmentActivity) monitor.waitForActivity();
+ TestUtils.waitTillResumed(fragmentActivity, activityRule);
+ return fragmentActivity;
+ }
+}
diff --git a/lifecycle/integration-tests/testapp/src/androidTest/java/android/arch/lifecycle/ProcessOwnerTest.java b/lifecycle/integration-tests/testapp/src/androidTest/java/android/arch/lifecycle/ProcessOwnerTest.java
index e80e11c..77baf94 100644
--- a/lifecycle/integration-tests/testapp/src/androidTest/java/android/arch/lifecycle/ProcessOwnerTest.java
+++ b/lifecycle/integration-tests/testapp/src/androidTest/java/android/arch/lifecycle/ProcessOwnerTest.java
@@ -31,12 +31,14 @@
import android.arch.lifecycle.testapp.NavigationDialogActivity;
import android.arch.lifecycle.testapp.NavigationTestActivityFirst;
import android.arch.lifecycle.testapp.NavigationTestActivitySecond;
+import android.arch.lifecycle.testapp.NonSupportActivity;
import android.content.Context;
import android.content.Intent;
import android.support.test.InstrumentationRegistry;
import android.support.test.filters.SmallTest;
import android.support.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;
+import android.support.v4.app.FragmentActivity;
import org.junit.After;
import org.junit.Rule;
@@ -78,7 +80,7 @@
@Test
public void testNavigation() throws Throwable {
- LifecycleActivity firstActivity = setupObserverOnResume();
+ FragmentActivity firstActivity = setupObserverOnResume();
Instrumentation.ActivityMonitor monitor = new Instrumentation.ActivityMonitor(
NavigationTestActivitySecond.class.getCanonicalName(), null, false);
Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation();
@@ -88,15 +90,31 @@
firstActivity.finish();
firstActivity.startActivity(intent);
- LifecycleActivity secondActivity = (LifecycleActivity) monitor.waitForActivity();
+ FragmentActivity secondActivity = (FragmentActivity) monitor.waitForActivity();
+ assertThat("Failed to navigate", secondActivity, notNullValue());
+ checkProcessObserverSilent(secondActivity);
+ }
+
+ @Test
+ public void testNavigationToNonSupport() throws Throwable {
+ FragmentActivity firstActivity = setupObserverOnResume();
+ Instrumentation.ActivityMonitor monitor = new Instrumentation.ActivityMonitor(
+ NonSupportActivity.class.getCanonicalName(), null, false);
+ Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation();
+ instrumentation.addMonitor(monitor);
+
+ Intent intent = new Intent(firstActivity, NonSupportActivity.class);
+ firstActivity.finish();
+ firstActivity.startActivity(intent);
+ NonSupportActivity secondActivity = (NonSupportActivity) monitor.waitForActivity();
assertThat("Failed to navigate", secondActivity, notNullValue());
checkProcessObserverSilent(secondActivity);
}
@Test
public void testRecreation() throws Throwable {
- LifecycleActivity activity = setupObserverOnResume();
- LifecycleActivity recreated = TestUtils.recreateActivity(activity, activityTestRule);
+ FragmentActivity activity = setupObserverOnResume();
+ FragmentActivity recreated = TestUtils.recreateActivity(activity, activityTestRule);
assertThat("Failed to recreate", recreated, notNullValue());
checkProcessObserverSilent(recreated);
}
@@ -112,14 +130,15 @@
NavigationTestActivityFirst activity = activityTestRule.getActivity();
activity.startActivity(new Intent(activity, NavigationDialogActivity.class));
- LifecycleActivity dialogActivity = (LifecycleActivity) monitor.waitForActivity();
+ FragmentActivity dialogActivity = (FragmentActivity) monitor.waitForActivity();
checkProcessObserverSilent(dialogActivity);
List<Event> events = Collections.synchronizedList(new ArrayList<>());
LifecycleObserver collectingObserver = new LifecycleObserver() {
@OnLifecycleEvent(Event.ON_ANY)
- public void onStateChanged(LifecycleOwner provider, Event event) {
+ public void onStateChanged(@SuppressWarnings("unused") LifecycleOwner provider,
+ Event event) {
events.add(event);
}
};
@@ -138,8 +157,8 @@
dialogActivity.finish();
}
- private LifecycleActivity setupObserverOnResume() throws Throwable {
- LifecycleActivity firstActivity = activityTestRule.getActivity();
+ private FragmentActivity setupObserverOnResume() throws Throwable {
+ FragmentActivity firstActivity = activityTestRule.getActivity();
waitTillResumed(firstActivity, activityTestRule);
addProcessObserver(mObserver);
mObserver.mChangedState = false;
@@ -156,10 +175,17 @@
ProcessLifecycleOwner.get().getLifecycle().removeObserver(observer));
}
- private void checkProcessObserverSilent(LifecycleActivity activity) throws Throwable {
+ private void checkProcessObserverSilent(FragmentActivity activity) throws Throwable {
waitTillResumed(activity, activityTestRule);
assertThat(mObserver.mChangedState, is(false));
activityTestRule.runOnUiThread(() ->
ProcessLifecycleOwner.get().getLifecycle().removeObserver(mObserver));
}
+
+ private void checkProcessObserverSilent(NonSupportActivity activity) throws Throwable {
+ assertThat(activity.awaitResumedState(), is(true));
+ assertThat(mObserver.mChangedState, is(false));
+ activityTestRule.runOnUiThread(() ->
+ ProcessLifecycleOwner.get().getLifecycle().removeObserver(mObserver));
+ }
}
diff --git a/lifecycle/integration-tests/testapp/src/androidTest/java/android/arch/lifecycle/TestUtils.java b/lifecycle/integration-tests/testapp/src/androidTest/java/android/arch/lifecycle/TestUtils.java
index c5a520f..f7f9bbe 100644
--- a/lifecycle/integration-tests/testapp/src/androidTest/java/android/arch/lifecycle/TestUtils.java
+++ b/lifecycle/integration-tests/testapp/src/androidTest/java/android/arch/lifecycle/TestUtils.java
@@ -16,22 +16,42 @@
package android.arch.lifecycle;
+import static android.arch.lifecycle.Lifecycle.Event.ON_CREATE;
+import static android.arch.lifecycle.Lifecycle.Event.ON_DESTROY;
+import static android.arch.lifecycle.Lifecycle.Event.ON_PAUSE;
+import static android.arch.lifecycle.Lifecycle.Event.ON_RESUME;
+import static android.arch.lifecycle.Lifecycle.Event.ON_START;
+import static android.arch.lifecycle.Lifecycle.Event.ON_STOP;
+import static android.arch.lifecycle.Lifecycle.State.CREATED;
+import static android.arch.lifecycle.Lifecycle.State.DESTROYED;
import static android.arch.lifecycle.Lifecycle.State.RESUMED;
+import static android.arch.lifecycle.Lifecycle.State.STARTED;
+import static android.arch.lifecycle.testapp.TestEvent.LIFECYCLE_EVENT;
+import static android.arch.lifecycle.testapp.TestEvent.OWNER_CALLBACK;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
import android.app.Activity;
import android.app.Instrumentation;
import android.app.Instrumentation.ActivityMonitor;
+import android.arch.lifecycle.testapp.TestEvent;
import android.support.test.InstrumentationRegistry;
import android.support.test.rule.ActivityTestRule;
+import android.support.v4.util.Pair;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
-public class TestUtils {
+class TestUtils {
private static final long TIMEOUT_MS = 2000;
@SuppressWarnings("unchecked")
- public static <T extends Activity> T recreateActivity(final T activity, ActivityTestRule rule)
+ static <T extends Activity> T recreateActivity(final T activity, ActivityTestRule rule)
throws Throwable {
ActivityMonitor monitor = new ActivityMonitor(
activity.getClass().getCanonicalName(), null, false);
@@ -60,23 +80,88 @@
return result;
}
- static void waitTillResumed(final LifecycleActivity a, ActivityTestRule<?> activityRule)
+ static void waitTillCreated(final LifecycleOwner owner, ActivityTestRule<?> activityRule)
+ throws Throwable {
+ waitTillState(owner, activityRule, CREATED);
+ }
+
+ static void waitTillStarted(final LifecycleOwner owner, ActivityTestRule<?> activityRule)
+ throws Throwable {
+ waitTillState(owner, activityRule, STARTED);
+ }
+
+ static void waitTillResumed(final LifecycleOwner owner, ActivityTestRule<?> activityRule)
+ throws Throwable {
+ waitTillState(owner, activityRule, RESUMED);
+ }
+
+ static void waitTillDestroyed(final LifecycleOwner owner, ActivityTestRule<?> activityRule)
+ throws Throwable {
+ waitTillState(owner, activityRule, DESTROYED);
+ }
+
+ static void waitTillState(final LifecycleOwner owner, ActivityTestRule<?> activityRule,
+ Lifecycle.State state)
throws Throwable {
final CountDownLatch latch = new CountDownLatch(1);
activityRule.runOnUiThread(() -> {
- Lifecycle.State currentState = a.getLifecycle().getCurrentState();
- if (currentState == RESUMED) {
+ Lifecycle.State currentState = owner.getLifecycle().getCurrentState();
+ if (currentState == state) {
latch.countDown();
+ } else {
+ owner.getLifecycle().addObserver(new LifecycleObserver() {
+ @OnLifecycleEvent(Lifecycle.Event.ON_ANY)
+ public void onStateChanged(LifecycleOwner provider) {
+ if (provider.getLifecycle().getCurrentState() == state) {
+ latch.countDown();
+ provider.getLifecycle().removeObserver(this);
+ }
+ }
+ });
}
- a.getLifecycle().addObserver(new LifecycleObserver() {
- @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
- public void onStateChanged(LifecycleOwner provider) {
- latch.countDown();
- provider.getLifecycle().removeObserver(this);
- }
- });
});
- latch.await();
+ boolean latchResult = latch.await(1, TimeUnit.MINUTES);
+ assertThat("expected " + state + " never happened. Current state:"
+ + owner.getLifecycle().getCurrentState(), latchResult, is(true));
+
+ // wait for another loop to ensure all observers are called
+ activityRule.runOnUiThread(() -> {
+ // do nothing
+ });
}
+ @SafeVarargs
+ static <T> List<T> flatMap(List<T>... items) {
+ ArrayList<T> result = new ArrayList<>();
+ for (List<T> item : items) {
+ result.addAll(item);
+ }
+ return result;
+ }
+
+ /**
+ * Event tuples of {@link TestEvent} and {@link Lifecycle.Event}
+ * in the order they should arrive.
+ */
+ @SuppressWarnings("unchecked")
+ static class OrderedTuples {
+ static final List<Pair<TestEvent, Lifecycle.Event>> CREATE =
+ Arrays.asList(new Pair(OWNER_CALLBACK, ON_CREATE),
+ new Pair(LIFECYCLE_EVENT, ON_CREATE));
+ static final List<Pair<TestEvent, Lifecycle.Event>> START =
+ Arrays.asList(new Pair(OWNER_CALLBACK, ON_START),
+ new Pair(LIFECYCLE_EVENT, ON_START));
+ static final List<Pair<TestEvent, Lifecycle.Event>> RESUME =
+ Arrays.asList(new Pair(OWNER_CALLBACK, ON_RESUME),
+ new Pair(LIFECYCLE_EVENT, ON_RESUME));
+ static final List<Pair<TestEvent, Lifecycle.Event>> PAUSE =
+ Arrays.asList(new Pair(LIFECYCLE_EVENT, ON_PAUSE),
+ new Pair(OWNER_CALLBACK, ON_PAUSE));
+ static final List<Pair<TestEvent, Lifecycle.Event>> STOP =
+ Arrays.asList(new Pair(LIFECYCLE_EVENT, ON_STOP),
+ new Pair(OWNER_CALLBACK, ON_STOP));
+ static final List<Pair<TestEvent, Lifecycle.Event>> DESTROY =
+ Arrays.asList(new Pair(LIFECYCLE_EVENT, ON_DESTROY),
+ new Pair(OWNER_CALLBACK, ON_DESTROY));
+ }
}
diff --git a/lifecycle/integration-tests/testapp/src/main/AndroidManifest.xml b/lifecycle/integration-tests/testapp/src/main/AndroidManifest.xml
index bf88f97..5e1d0a0 100644
--- a/lifecycle/integration-tests/testapp/src/main/AndroidManifest.xml
+++ b/lifecycle/integration-tests/testapp/src/main/AndroidManifest.xml
@@ -15,12 +15,6 @@
<application android:allowBackup="true" android:label="Test App" android:supportsRtl="true"
tools:ignore="AllowBackup,GoogleAppIndexingWarning,MissingApplicationIcon">
- <activity android:name="android.arch.lifecycle.testapp.MainActivity">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
<activity android:name="android.arch.lifecycle.testapp.LifecycleTestActivity">
<intent-filter>
@@ -28,13 +22,7 @@
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
- <activity android:name="android.arch.lifecycle.testapp.FullLifecycleTestActivity">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- <activity android:name="android.arch.lifecycle.testapp.SupportLifecycleRegistryActivity">
+ <activity android:name="android.arch.lifecycle.testapp.CollectingSupportActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
@@ -71,5 +59,6 @@
<activity android:name=".NavigationDialogActivity"
android:launchMode="singleTask"
android:theme="@android:style/Theme.DeviceDefault.Dialog" />
+ <activity android:name=".NonSupportActivity"/>
</application>
</manifest>
diff --git a/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/CollectingActivity.java b/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/CollectingLifecycleOwner.java
similarity index 76%
rename from lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/CollectingActivity.java
rename to lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/CollectingLifecycleOwner.java
index 6e243b6..4213cab 100644
--- a/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/CollectingActivity.java
+++ b/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/CollectingLifecycleOwner.java
@@ -17,21 +17,20 @@
package android.arch.lifecycle.testapp;
import android.arch.lifecycle.Lifecycle;
-import android.util.Pair;
+import android.arch.lifecycle.LifecycleOwner;
+import android.support.v4.util.Pair;
import java.util.List;
/**
* For activities that collect their events.
*/
-public interface CollectingActivity {
- long TIMEOUT = 5;
-
+public interface CollectingLifecycleOwner extends LifecycleOwner {
/**
- * Return collected events
+ * Return a copy of currently collected events
*
* @return The list of collected events.
* @throws InterruptedException
*/
- List<Pair<TestEvent, Lifecycle.Event>> waitForCollectedEvents() throws InterruptedException;
+ List<Pair<TestEvent, Lifecycle.Event>> copyCollectedEvents();
}
diff --git a/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/CollectingSupportActivity.java b/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/CollectingSupportActivity.java
new file mode 100644
index 0000000..f38d422
--- /dev/null
+++ b/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/CollectingSupportActivity.java
@@ -0,0 +1,113 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.arch.lifecycle.testapp;
+
+import static android.arch.lifecycle.testapp.TestEvent.OWNER_CALLBACK;
+
+import android.arch.lifecycle.Lifecycle.Event;
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentActivity;
+import android.support.v4.util.Pair;
+import android.widget.FrameLayout;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * LifecycleRegistryOwner that extends FragmentActivity.
+ */
+public class CollectingSupportActivity extends FragmentActivity implements
+ CollectingLifecycleOwner {
+
+ private final List<Pair<TestEvent, Event>> mCollectedEvents = new ArrayList<>();
+ private TestObserver mTestObserver = new TestObserver(mCollectedEvents);
+ private CountDownLatch mSavedStateLatch = new CountDownLatch(1);
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ FrameLayout layout = new FrameLayout(this);
+ layout.setId(R.id.fragment_container);
+ setContentView(layout);
+ mCollectedEvents.add(new Pair<>(OWNER_CALLBACK, Event.ON_CREATE));
+ getLifecycle().addObserver(mTestObserver);
+ }
+
+ /**
+ * replaces the main content fragment w/ the given fragment.
+ */
+ public void replaceFragment(Fragment fragment) {
+ getSupportFragmentManager()
+ .beginTransaction()
+ .add(R.id.fragment_container, fragment)
+ .commitNow();
+ }
+
+ @Override
+ protected void onStart() {
+ super.onStart();
+ mCollectedEvents.add(new Pair<>(OWNER_CALLBACK, Event.ON_START));
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ mCollectedEvents.add(new Pair<>(OWNER_CALLBACK, Event.ON_RESUME));
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ mCollectedEvents.add(new Pair<>(OWNER_CALLBACK, Event.ON_DESTROY));
+ }
+
+ @Override
+ protected void onStop() {
+ super.onStop();
+ mCollectedEvents.add(new Pair<>(OWNER_CALLBACK, Event.ON_STOP));
+ }
+
+ @Override
+ protected void onPause() {
+ super.onPause();
+ mCollectedEvents.add(new Pair<>(OWNER_CALLBACK, Event.ON_PAUSE));
+ // helps with less flaky API 16 tests.
+ overridePendingTransition(0, 0);
+ }
+
+ @Override
+ public List<Pair<TestEvent, Event>> copyCollectedEvents() {
+ return new ArrayList<>(mCollectedEvents);
+ }
+
+ @Override
+ protected void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+ mSavedStateLatch.countDown();
+ }
+
+ /**
+ * Waits for onSaveInstanceState to be called.
+ */
+ public boolean waitForStateSave(@SuppressWarnings("SameParameterValue") int seconds)
+ throws InterruptedException {
+ return mSavedStateLatch.await(seconds, TimeUnit.SECONDS);
+ }
+}
diff --git a/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/CollectingSupportFragment.java b/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/CollectingSupportFragment.java
new file mode 100644
index 0000000..9bbbe16
--- /dev/null
+++ b/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/CollectingSupportFragment.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.arch.lifecycle.testapp;
+
+import static android.arch.lifecycle.testapp.TestEvent.OWNER_CALLBACK;
+
+import android.annotation.SuppressLint;
+import android.arch.lifecycle.Lifecycle;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.v4.app.Fragment;
+import android.support.v4.util.Pair;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * A support fragment that collects all of its events.
+ */
+@SuppressLint("ValidFragment")
+public class CollectingSupportFragment extends Fragment implements CollectingLifecycleOwner {
+ private final List<Pair<TestEvent, Lifecycle.Event>> mCollectedEvents =
+ new ArrayList<>();
+ private TestObserver mTestObserver = new TestObserver(mCollectedEvents);
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ mCollectedEvents.add(new Pair<>(OWNER_CALLBACK, Lifecycle.Event.ON_CREATE));
+ getLifecycle().addObserver(mTestObserver);
+ }
+
+ @Nullable
+ @Override
+ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
+ @Nullable Bundle savedInstanceState) {
+ //noinspection ConstantConditions
+ FrameLayout layout = new FrameLayout(container.getContext());
+ layout.setId(R.id.child_fragment_container);
+ return layout;
+ }
+
+ /**
+ * Runs a replace fragment transaction with 'fragment' on this Fragment.
+ */
+ public void replaceFragment(Fragment fragment) {
+ getChildFragmentManager()
+ .beginTransaction()
+ .add(R.id.child_fragment_container, fragment)
+ .commitNow();
+ }
+
+ @Override
+ public void onStart() {
+ super.onStart();
+ mCollectedEvents.add(new Pair<>(OWNER_CALLBACK, Lifecycle.Event.ON_START));
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ mCollectedEvents.add(new Pair<>(OWNER_CALLBACK, Lifecycle.Event.ON_RESUME));
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ mCollectedEvents.add(new Pair<>(OWNER_CALLBACK, Lifecycle.Event.ON_DESTROY));
+ }
+
+ @Override
+ public void onStop() {
+ super.onStop();
+ mCollectedEvents.add(new Pair<>(OWNER_CALLBACK, Lifecycle.Event.ON_STOP));
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+ mCollectedEvents.add(new Pair<>(OWNER_CALLBACK, Lifecycle.Event.ON_PAUSE));
+ }
+
+ @Override
+ public List<Pair<TestEvent, Lifecycle.Event>> copyCollectedEvents() {
+ return new ArrayList<>(mCollectedEvents);
+ }
+}
diff --git a/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/FrameworkLifecycleRegistryActivity.java b/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/FrameworkLifecycleRegistryActivity.java
index d8f4fb3..cdf577c 100644
--- a/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/FrameworkLifecycleRegistryActivity.java
+++ b/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/FrameworkLifecycleRegistryActivity.java
@@ -16,27 +16,29 @@
package android.arch.lifecycle.testapp;
-import static android.arch.lifecycle.testapp.TestEvent.ACTIVITY_CALLBACK;
+import static android.arch.lifecycle.testapp.TestEvent.OWNER_CALLBACK;
import android.app.Activity;
import android.arch.lifecycle.Lifecycle;
import android.arch.lifecycle.LifecycleRegistry;
import android.arch.lifecycle.LifecycleRegistryOwner;
import android.os.Bundle;
-import android.util.Pair;
+import android.support.annotation.NonNull;
+import android.support.v4.util.Pair;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
/**
* LifecycleRegistryOwner that extends framework activity.
*/
+@SuppressWarnings("deprecation")
public class FrameworkLifecycleRegistryActivity extends Activity implements
- LifecycleRegistryOwner, CollectingActivity {
+ LifecycleRegistryOwner, CollectingLifecycleOwner {
private LifecycleRegistry mLifecycleRegistry = new LifecycleRegistry(this);
+ @NonNull
@Override
public LifecycleRegistry getLifecycle() {
return mLifecycleRegistry;
@@ -49,49 +51,43 @@
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- mCollectedEvents.add(new Pair<>(ACTIVITY_CALLBACK, Lifecycle.Event.ON_CREATE));
+ mCollectedEvents.add(new Pair<>(OWNER_CALLBACK, Lifecycle.Event.ON_CREATE));
getLifecycle().addObserver(mTestObserver);
}
@Override
protected void onStart() {
super.onStart();
- mCollectedEvents.add(new Pair<>(ACTIVITY_CALLBACK, Lifecycle.Event.ON_START));
+ mCollectedEvents.add(new Pair<>(OWNER_CALLBACK, Lifecycle.Event.ON_START));
}
@Override
protected void onResume() {
super.onResume();
- mCollectedEvents.add(new Pair<>(ACTIVITY_CALLBACK, Lifecycle.Event.ON_RESUME));
- finish();
+ mCollectedEvents.add(new Pair<>(OWNER_CALLBACK, Lifecycle.Event.ON_RESUME));
}
@Override
protected void onDestroy() {
super.onDestroy();
- mCollectedEvents.add(new Pair<>(ACTIVITY_CALLBACK, Lifecycle.Event.ON_DESTROY));
+ mCollectedEvents.add(new Pair<>(OWNER_CALLBACK, Lifecycle.Event.ON_DESTROY));
mLatch.countDown();
}
@Override
protected void onStop() {
super.onStop();
- mCollectedEvents.add(new Pair<>(ACTIVITY_CALLBACK, Lifecycle.Event.ON_STOP));
+ mCollectedEvents.add(new Pair<>(OWNER_CALLBACK, Lifecycle.Event.ON_STOP));
}
@Override
protected void onPause() {
super.onPause();
- mCollectedEvents.add(new Pair<>(ACTIVITY_CALLBACK, Lifecycle.Event.ON_PAUSE));
+ mCollectedEvents.add(new Pair<>(OWNER_CALLBACK, Lifecycle.Event.ON_PAUSE));
}
- /**
- * awaits for all events and returns them.
- */
@Override
- public List<Pair<TestEvent, Lifecycle.Event>> waitForCollectedEvents()
- throws InterruptedException {
- mLatch.await(TIMEOUT, TimeUnit.SECONDS);
- return mCollectedEvents;
+ public List<Pair<TestEvent, Lifecycle.Event>> copyCollectedEvents() {
+ return new ArrayList<>(mCollectedEvents);
}
}
diff --git a/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/FullLifecycleTestActivity.java b/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/FullLifecycleTestActivity.java
deleted file mode 100644
index 5972b16..0000000
--- a/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/FullLifecycleTestActivity.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (C) 2016 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 android.arch.lifecycle.testapp;
-
-import static android.arch.lifecycle.testapp.TestEvent.ACTIVITY_CALLBACK;
-
-import android.arch.lifecycle.Lifecycle;
-import android.arch.lifecycle.LifecycleActivity;
-import android.os.Bundle;
-import android.util.Pair;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-
-/**
- * Activity for testing full lifecycle
- */
-public class FullLifecycleTestActivity extends LifecycleActivity implements CollectingActivity {
-
- private List<Pair<TestEvent, Lifecycle.Event>> mCollectedEvents = new ArrayList<>();
- private TestObserver mTestObserver = new TestObserver(mCollectedEvents);
- private CountDownLatch mLatch = new CountDownLatch(1);
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- mCollectedEvents.add(new Pair<>(ACTIVITY_CALLBACK, Lifecycle.Event.ON_CREATE));
- getLifecycle().addObserver(mTestObserver);
- }
-
- @Override
- protected void onStart() {
- super.onStart();
- mCollectedEvents.add(new Pair<>(ACTIVITY_CALLBACK, Lifecycle.Event.ON_START));
- }
-
- @Override
- protected void onResume() {
- super.onResume();
- mCollectedEvents.add(new Pair<>(ACTIVITY_CALLBACK, Lifecycle.Event.ON_RESUME));
- finish();
- }
-
- @Override
- protected void onDestroy() {
- super.onDestroy();
- mCollectedEvents.add(new Pair<>(ACTIVITY_CALLBACK, Lifecycle.Event.ON_DESTROY));
- mLatch.countDown();
- }
-
- @Override
- protected void onStop() {
- super.onStop();
- mCollectedEvents.add(new Pair<>(ACTIVITY_CALLBACK, Lifecycle.Event.ON_STOP));
- }
-
- @Override
- protected void onPause() {
- super.onPause();
- mCollectedEvents.add(new Pair<>(ACTIVITY_CALLBACK, Lifecycle.Event.ON_PAUSE));
- }
-
- /**
- * awaits for all events and returns them.
- */
- @Override
- public List<Pair<TestEvent, Lifecycle.Event>> waitForCollectedEvents()
- throws InterruptedException {
- mLatch.await(TIMEOUT, TimeUnit.SECONDS);
- return mCollectedEvents;
- }
-}
diff --git a/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/LifecycleTestActivity.java b/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/LifecycleTestActivity.java
index 093ec7f..cf07aee 100644
--- a/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/LifecycleTestActivity.java
+++ b/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/LifecycleTestActivity.java
@@ -16,13 +16,13 @@
package android.arch.lifecycle.testapp;
-import android.arch.lifecycle.LifecycleActivity;
import android.os.Bundle;
+import android.support.v4.app.FragmentActivity;
/**
* Activity for testing events by themselves
*/
-public class LifecycleTestActivity extends LifecycleActivity {
+public class LifecycleTestActivity extends FragmentActivity {
/**
* identifies that
diff --git a/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/MainActivity.java b/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/MainActivity.java
deleted file mode 100644
index b9d5914..0000000
--- a/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/MainActivity.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2016 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 android.arch.lifecycle.testapp;
-
-import android.os.Bundle;
-import android.support.v4.app.FragmentActivity;
-
-/**
- * Simple test activity
- */
-public class MainActivity extends FragmentActivity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity);
- }
-}
diff --git a/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/NavigationDialogActivity.java b/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/NavigationDialogActivity.java
index 709bd8d..7d53528 100644
--- a/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/NavigationDialogActivity.java
+++ b/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/NavigationDialogActivity.java
@@ -16,10 +16,16 @@
package android.arch.lifecycle.testapp;
-import android.arch.lifecycle.LifecycleActivity;
+import android.support.v4.app.FragmentActivity;
/**
* an activity with Dialog theme.
*/
-public class NavigationDialogActivity extends LifecycleActivity {
+public class NavigationDialogActivity extends FragmentActivity {
+ @Override
+ protected void onPause() {
+ super.onPause();
+ // helps with less flaky API 16 tests
+ overridePendingTransition(0, 0);
+ }
}
diff --git a/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/NavigationTestActivityFirst.java b/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/NavigationTestActivityFirst.java
index f1847c9..69fd478 100644
--- a/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/NavigationTestActivityFirst.java
+++ b/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/NavigationTestActivityFirst.java
@@ -16,10 +16,10 @@
package android.arch.lifecycle.testapp;
-import android.arch.lifecycle.LifecycleActivity;
+import android.support.v4.app.FragmentActivity;
/**
* Activity for ProcessOwnerTest
*/
-public class NavigationTestActivityFirst extends LifecycleActivity {
+public class NavigationTestActivityFirst extends FragmentActivity {
}
diff --git a/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/NavigationTestActivitySecond.java b/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/NavigationTestActivitySecond.java
index 221e927..0f9a4c9 100644
--- a/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/NavigationTestActivitySecond.java
+++ b/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/NavigationTestActivitySecond.java
@@ -16,10 +16,10 @@
package android.arch.lifecycle.testapp;
-import android.arch.lifecycle.LifecycleActivity;
+import android.support.v4.app.FragmentActivity;
/**
* Activity for ProcessOwnerTest
*/
-public class NavigationTestActivitySecond extends LifecycleActivity {
+public class NavigationTestActivitySecond extends FragmentActivity {
}
diff --git a/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/NonSupportActivity.java b/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/NonSupportActivity.java
new file mode 100644
index 0000000..835d846
--- /dev/null
+++ b/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/NonSupportActivity.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.arch.lifecycle.testapp;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.Condition;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
+/**
+ * Activity which doesn't extend FragmentActivity, to test ProcessLifecycleOwner because it
+ * should work anyway.
+ */
+public class NonSupportActivity extends Activity {
+
+ private static final int TIMEOUT = 1; //secs
+ private final Lock mLock = new ReentrantLock();
+ private Condition mIsResumedCondition = mLock.newCondition();
+ private boolean mIsResumed = false;
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ mLock.lock();
+ try {
+ mIsResumed = true;
+ mIsResumedCondition.signalAll();
+ } finally {
+ mLock.unlock();
+ }
+ }
+
+ @Override
+ protected void onPause() {
+ super.onPause();
+ mLock.lock();
+ try {
+ mIsResumed = false;
+ } finally {
+ mLock.unlock();
+ }
+ }
+
+ /**
+ * awaits resumed state
+ * @return
+ * @throws InterruptedException
+ */
+ public boolean awaitResumedState() throws InterruptedException {
+ mLock.lock();
+ try {
+ while (!mIsResumed) {
+ if (!mIsResumedCondition.await(TIMEOUT, TimeUnit.SECONDS)) {
+ return false;
+ }
+ }
+ return true;
+ } finally {
+ mLock.unlock();
+ }
+ }
+}
diff --git a/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/SimpleAppLifecycleTestActivity.java b/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/SimpleAppLifecycleTestActivity.java
index 6d61c5e..77bd99f 100644
--- a/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/SimpleAppLifecycleTestActivity.java
+++ b/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/SimpleAppLifecycleTestActivity.java
@@ -17,12 +17,12 @@
package android.arch.lifecycle.testapp;
import android.arch.lifecycle.Lifecycle;
-import android.arch.lifecycle.LifecycleActivity;
import android.arch.lifecycle.LifecycleObserver;
import android.arch.lifecycle.LifecycleOwner;
import android.arch.lifecycle.OnLifecycleEvent;
import android.arch.lifecycle.ProcessLifecycleOwner;
import android.os.Bundle;
+import android.support.v4.app.FragmentActivity;
import android.util.Pair;
import java.util.ArrayList;
@@ -33,7 +33,7 @@
/**
* Activity for SimpleAppFullLifecycleTest
*/
-public class SimpleAppLifecycleTestActivity extends LifecycleActivity {
+public class SimpleAppLifecycleTestActivity extends FragmentActivity {
public enum TestEventType {
PROCESS_EVENT,
diff --git a/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/SupportLifecycleRegistryActivity.java b/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/SupportLifecycleRegistryActivity.java
deleted file mode 100644
index c46c6d3..0000000
--- a/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/SupportLifecycleRegistryActivity.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.arch.lifecycle.testapp;
-
-import static android.arch.lifecycle.testapp.TestEvent.ACTIVITY_CALLBACK;
-
-import android.arch.lifecycle.Lifecycle.Event;
-import android.arch.lifecycle.LifecycleRegistry;
-import android.arch.lifecycle.LifecycleRegistryOwner;
-import android.os.Bundle;
-import android.support.v4.app.FragmentActivity;
-import android.util.Pair;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-
-/**
- * LifecycleRegistryOwner that extends FragmentActivity.
- */
-public class SupportLifecycleRegistryActivity extends FragmentActivity implements
- LifecycleRegistryOwner, CollectingActivity {
- private LifecycleRegistry mLifecycleRegistry = new LifecycleRegistry(this);
- @Override
- public LifecycleRegistry getLifecycle() {
- return mLifecycleRegistry;
- }
-
- private List<Pair<TestEvent, Event>> mCollectedEvents = new ArrayList<>();
- private TestObserver mTestObserver = new TestObserver(mCollectedEvents);
- private CountDownLatch mLatch = new CountDownLatch(1);
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- mCollectedEvents.add(new Pair<>(ACTIVITY_CALLBACK, Event.ON_CREATE));
- getLifecycle().addObserver(mTestObserver);
- }
-
- @Override
- protected void onStart() {
- super.onStart();
- mCollectedEvents.add(new Pair<>(ACTIVITY_CALLBACK, Event.ON_START));
- }
-
- @Override
- protected void onResume() {
- super.onResume();
- mCollectedEvents.add(new Pair<>(ACTIVITY_CALLBACK, Event.ON_RESUME));
- finish();
- }
-
- @Override
- protected void onDestroy() {
- super.onDestroy();
- mCollectedEvents.add(new Pair<>(ACTIVITY_CALLBACK, Event.ON_DESTROY));
- mLatch.countDown();
- }
-
- @Override
- protected void onStop() {
- super.onStop();
- mCollectedEvents.add(new Pair<>(ACTIVITY_CALLBACK, Event.ON_STOP));
- }
-
- @Override
- protected void onPause() {
- super.onPause();
- mCollectedEvents.add(new Pair<>(ACTIVITY_CALLBACK, Event.ON_PAUSE));
- }
-
- /**
- * awaits for all events and returns them.
- */
- @Override
- public List<Pair<TestEvent, Event>> waitForCollectedEvents() throws InterruptedException {
- mLatch.await(TIMEOUT, TimeUnit.SECONDS);
- return mCollectedEvents;
- }
-}
diff --git a/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/TestEvent.java b/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/TestEvent.java
index 0929f84..788045a 100644
--- a/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/TestEvent.java
+++ b/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/TestEvent.java
@@ -17,6 +17,6 @@
package android.arch.lifecycle.testapp;
public enum TestEvent {
- ACTIVITY_CALLBACK,
- LIFECYCLE_EVENT
+ OWNER_CALLBACK,
+ LIFECYCLE_EVENT,
}
diff --git a/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/TestObserver.java b/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/TestObserver.java
index c611239..00b8e16 100644
--- a/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/TestObserver.java
+++ b/lifecycle/integration-tests/testapp/src/main/java/android/arch/lifecycle/testapp/TestObserver.java
@@ -28,7 +28,7 @@
import android.arch.lifecycle.LifecycleObserver;
import android.arch.lifecycle.LifecycleOwner;
import android.arch.lifecycle.OnLifecycleEvent;
-import android.util.Pair;
+import android.support.v4.util.Pair;
import java.util.List;
diff --git a/lifecycle/integration-tests/testapp/src/main/res/layout/activity.xml b/lifecycle/integration-tests/testapp/src/main/res/layout/activity.xml
deleted file mode 100644
index a4e9513..0000000
--- a/lifecycle/integration-tests/testapp/src/main/res/layout/activity.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- ~ Copyright (C) 2015 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.
- -->
-<FrameLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- <FrameLayout
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:id="@+id/root">
- <fragment
- android:id="@+id/main_fragment"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:tag="fragment_tag"
- android:name="android.arch.lifecycle.testapp.UsualFragment"
- tools:context="android.arch.lifecycle.testapp.MainActivity">
- </fragment>
- </FrameLayout>
-</FrameLayout>
diff --git a/lifecycle/integration-tests/testapp/src/main/res/layout/fragment.xml b/lifecycle/integration-tests/testapp/src/main/res/layout/fragment.xml
new file mode 100644
index 0000000..a977ceb
--- /dev/null
+++ b/lifecycle/integration-tests/testapp/src/main/res/layout/fragment.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2017 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+<FrameLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/fragmentFrameLayout"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+</FrameLayout>
diff --git a/lifecycle/integration-tests/testapp/src/main/res/values/values.xml b/lifecycle/integration-tests/testapp/src/main/res/values/values.xml
new file mode 100644
index 0000000..5041a76
--- /dev/null
+++ b/lifecycle/integration-tests/testapp/src/main/res/values/values.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2017 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources>
+ <item name="child_fragment_container" type="id"/>
+</resources>
diff --git a/lifecycle/integration-tests/testapp/src/test/java/android/arch/lifecycle/GeneratedAdaptersTest.java b/lifecycle/integration-tests/testapp/src/test/java/android/arch/lifecycle/GeneratedAdaptersTest.java
new file mode 100644
index 0000000..2abb511
--- /dev/null
+++ b/lifecycle/integration-tests/testapp/src/test/java/android/arch/lifecycle/GeneratedAdaptersTest.java
@@ -0,0 +1,212 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.arch.lifecycle;
+
+import static android.arch.lifecycle.Lifecycle.Event.ON_ANY;
+import static android.arch.lifecycle.Lifecycle.Event.ON_RESUME;
+
+import static org.hamcrest.CoreMatchers.instanceOf;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import static java.util.Arrays.asList;
+import static java.util.Collections.singletonList;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@RunWith(JUnit4.class)
+public class GeneratedAdaptersTest {
+
+ private LifecycleOwner mOwner;
+ @SuppressWarnings("FieldCanBeLocal")
+ private Lifecycle mLifecycle;
+
+ @Before
+ public void initMocks() {
+ mOwner = mock(LifecycleOwner.class);
+ mLifecycle = mock(Lifecycle.class);
+ when(mOwner.getLifecycle()).thenReturn(mLifecycle);
+ }
+
+ static class SimpleObserver implements LifecycleObserver {
+ List<String> mLog;
+
+ SimpleObserver(List<String> log) {
+ mLog = log;
+ }
+
+ @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
+ void onCreate() {
+ mLog.add("onCreate");
+ }
+ }
+
+ @Test
+ public void testSimpleSingleGeneratedAdapter() {
+ List<String> actual = new ArrayList<>();
+ GenericLifecycleObserver callback = Lifecycling.getCallback(new SimpleObserver(actual));
+ callback.onStateChanged(mOwner, Lifecycle.Event.ON_CREATE);
+ assertThat(callback, instanceOf(SingleGeneratedAdapterObserver.class));
+ assertThat(actual, is(singletonList("onCreate")));
+ }
+
+ static class TestObserver implements LifecycleObserver {
+ List<String> mLog;
+
+ TestObserver(List<String> log) {
+ mLog = log;
+ }
+
+ @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
+ void onCreate() {
+ mLog.add("onCreate");
+ }
+
+ @OnLifecycleEvent(ON_ANY)
+ void onAny() {
+ mLog.add("onAny");
+ }
+ }
+
+ @Test
+ public void testOnAny() {
+ List<String> actual = new ArrayList<>();
+ GenericLifecycleObserver callback = Lifecycling.getCallback(new TestObserver(actual));
+ callback.onStateChanged(mOwner, Lifecycle.Event.ON_CREATE);
+ assertThat(callback, instanceOf(SingleGeneratedAdapterObserver.class));
+ assertThat(actual, is(asList("onCreate", "onAny")));
+ }
+
+ interface OnPauses extends LifecycleObserver {
+ @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
+ void onPause();
+
+ @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
+ void onPause(LifecycleOwner owner);
+ }
+
+ interface OnPauseResume extends LifecycleObserver {
+ @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
+ void onPause();
+
+ @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
+ void onResume();
+ }
+
+ class Impl1 implements OnPauses, OnPauseResume {
+
+ List<String> mLog;
+
+ Impl1(List<String> log) {
+ mLog = log;
+ }
+
+ @Override
+ public void onPause() {
+ mLog.add("onPause_0");
+ }
+
+ @Override
+ public void onResume() {
+ mLog.add("onResume");
+ }
+
+ @Override
+ public void onPause(LifecycleOwner owner) {
+ mLog.add("onPause_1");
+ }
+ }
+
+ @Test
+ public void testClashingInterfaces() {
+ List<String> actual = new ArrayList<>();
+ GenericLifecycleObserver callback = Lifecycling.getCallback(new Impl1(actual));
+ callback.onStateChanged(mOwner, Lifecycle.Event.ON_PAUSE);
+ assertThat(callback, instanceOf(CompositeGeneratedAdaptersObserver.class));
+ assertThat(actual, is(asList("onPause_0", "onPause_1")));
+ actual.clear();
+ callback.onStateChanged(mOwner, Lifecycle.Event.ON_RESUME);
+ assertThat(actual, is(singletonList("onResume")));
+ }
+
+ class Base implements LifecycleObserver {
+
+ List<String> mLog;
+
+ Base(List<String> log) {
+ mLog = log;
+ }
+
+ @OnLifecycleEvent(ON_ANY)
+ void onAny() {
+ mLog.add("onAny_0");
+ }
+
+ @OnLifecycleEvent(ON_ANY)
+ void onAny(LifecycleOwner owner) {
+ mLog.add("onAny_1");
+ }
+
+ @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
+ void onResume() {
+ mLog.add("onResume");
+ }
+ }
+
+ interface OnAny extends LifecycleObserver {
+ @OnLifecycleEvent(ON_ANY)
+ void onAny();
+
+ @OnLifecycleEvent(ON_ANY)
+ void onAny(LifecycleOwner owner, Lifecycle.Event event);
+ }
+
+ class Derived extends Base implements OnAny {
+ Derived(List<String> log) {
+ super(log);
+ }
+
+ @Override
+ public void onAny() {
+ super.onAny();
+ }
+
+ @Override
+ public void onAny(LifecycleOwner owner, Lifecycle.Event event) {
+ mLog.add("onAny_2");
+ assertThat(event, is(ON_RESUME));
+ }
+ }
+
+ @Test
+ public void testClashingClassAndInterface() {
+ List<String> actual = new ArrayList<>();
+ GenericLifecycleObserver callback = Lifecycling.getCallback(new Derived(actual));
+ callback.onStateChanged(mOwner, Lifecycle.Event.ON_RESUME);
+ assertThat(callback, instanceOf(CompositeGeneratedAdaptersObserver.class));
+ assertThat(actual, is(asList("onResume", "onAny_0", "onAny_1", "onAny_2")));
+ }
+
+}
diff --git a/lifecycle/reactivestreams/src/main/AndroidManifest.xml b/lifecycle/reactivestreams/src/main/AndroidManifest.xml
index c7b09a2..2210041 100644
--- a/lifecycle/reactivestreams/src/main/AndroidManifest.xml
+++ b/lifecycle/reactivestreams/src/main/AndroidManifest.xml
@@ -16,8 +16,4 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.arch.lifecycle.reactivestreams">
- <application>
- <meta-data android:name="android.arch.lifecycle.reactivestreams.VERSION"
- android:value="${version}" />
- </application>
</manifest>
diff --git a/lifecycle/reactivestreams/src/main/java/android/arch/lifecycle/LiveDataReactiveStreams.java b/lifecycle/reactivestreams/src/main/java/android/arch/lifecycle/LiveDataReactiveStreams.java
index 0be0149..2b25bc9 100644
--- a/lifecycle/reactivestreams/src/main/java/android/arch/lifecycle/LiveDataReactiveStreams.java
+++ b/lifecycle/reactivestreams/src/main/java/android/arch/lifecycle/LiveDataReactiveStreams.java
@@ -16,7 +16,8 @@
package android.arch.lifecycle;
-import android.arch.core.executor.AppToolkitTaskExecutor;
+import android.arch.core.executor.ArchTaskExecutor;
+import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import org.reactivestreams.Publisher;
@@ -85,7 +86,7 @@
if (n < 0 || mCanceled) {
return;
}
- AppToolkitTaskExecutor.getInstance().executeOnMainThread(new Runnable() {
+ ArchTaskExecutor.getInstance().executeOnMainThread(new Runnable() {
@Override
public void run() {
if (mCanceled) {
@@ -110,7 +111,7 @@
if (mCanceled) {
return;
}
- AppToolkitTaskExecutor.getInstance().executeOnMainThread(new Runnable() {
+ ArchTaskExecutor.getInstance().executeOnMainThread(new Runnable() {
@Override
public void run() {
if (mCanceled) {
@@ -133,40 +134,101 @@
/**
* Creates an Observable {@link LiveData} stream from a ReactiveStreams publisher.
+ *
+ * <p>
+ * When the LiveData becomes active, it subscribes to the emissions from the Publisher.
+ *
+ * <p>
+ * When the LiveData becomes inactive, the subscription is cleared.
+ * LiveData holds the last value emitted by the Publisher when the LiveData was active.
+ * <p>
+ * Therefore, in the case of a hot RxJava Observable, when a new LiveData {@link Observer} is
+ * added, it will automatically notify with the last value held in LiveData,
+ * which might not be the last value emitted by the Publisher.
+ *
+ * @param <T> The type of data hold by this instance.
*/
public static <T> LiveData<T> fromPublisher(final Publisher<T> publisher) {
- MutableLiveData<T> liveData = new MutableLiveData<>();
- // Since we don't have a way to directly observe cancels, weakly hold the live data.
- final WeakReference<MutableLiveData<T>> liveDataRef = new WeakReference<>(liveData);
-
- publisher.subscribe(new Subscriber<T>() {
- @Override
- public void onSubscribe(Subscription s) {
- // Don't worry about backpressure. If the stream is too noisy then backpressure can
- // be handled upstream.
- s.request(Long.MAX_VALUE);
- }
-
- @Override
- public void onNext(final T t) {
- final LiveData<T> liveData = liveDataRef.get();
- if (liveData != null) {
- liveData.postValue(t);
- }
- }
-
- @Override
- public void onError(Throwable t) {
- // Errors should be handled upstream, so propagate as a crash.
- throw new RuntimeException(t);
- }
-
- @Override
- public void onComplete() {
- }
- });
-
- return liveData;
+ return new PublisherLiveData<>(publisher);
}
+ /**
+ * Defines a {@link LiveData} object that wraps a {@link Publisher}.
+ *
+ * <p>
+ * When the LiveData becomes active, it subscribes to the emissions from the Publisher.
+ *
+ * <p>
+ * When the LiveData becomes inactive, the subscription is cleared.
+ * LiveData holds the last value emitted by the Publisher when the LiveData was active.
+ * <p>
+ * Therefore, in the case of a hot RxJava Observable, when a new LiveData {@link Observer} is
+ * added, it will automatically notify with the last value held in LiveData,
+ * which might not be the last value emitted by the Publisher.
+ *
+ * @param <T> The type of data hold by this instance.
+ */
+ private static class PublisherLiveData<T> extends LiveData<T> {
+ private WeakReference<Subscription> mSubscriptionRef;
+ private final Publisher mPublisher;
+ private final Object mLock = new Object();
+
+ PublisherLiveData(@NonNull final Publisher publisher) {
+ mPublisher = publisher;
+ }
+
+ @Override
+ protected void onActive() {
+ super.onActive();
+
+ mPublisher.subscribe(new Subscriber<T>() {
+ @Override
+ public void onSubscribe(Subscription s) {
+ // Don't worry about backpressure. If the stream is too noisy then
+ // backpressure can be handled upstream.
+ synchronized (mLock) {
+ s.request(Long.MAX_VALUE);
+ mSubscriptionRef = new WeakReference<>(s);
+ }
+ }
+
+ @Override
+ public void onNext(final T t) {
+ postValue(t);
+ }
+
+ @Override
+ public void onError(Throwable t) {
+ synchronized (mLock) {
+ mSubscriptionRef = null;
+ }
+ // Errors should be handled upstream, so propagate as a crash.
+ throw new RuntimeException(t);
+ }
+
+ @Override
+ public void onComplete() {
+ synchronized (mLock) {
+ mSubscriptionRef = null;
+ }
+ }
+ });
+
+ }
+
+ @Override
+ protected void onInactive() {
+ super.onInactive();
+ synchronized (mLock) {
+ WeakReference<Subscription> subscriptionRef = mSubscriptionRef;
+ if (subscriptionRef != null) {
+ Subscription subscription = subscriptionRef.get();
+ if (subscription != null) {
+ subscription.cancel();
+ }
+ mSubscriptionRef = null;
+ }
+ }
+ }
+ }
}
diff --git a/lifecycle/reactivestreams/src/test/java/android/arch/lifecycle/LiveDataReactiveStreamsTest.java b/lifecycle/reactivestreams/src/test/java/android/arch/lifecycle/LiveDataReactiveStreamsTest.java
index 87fba27..7278847 100644
--- a/lifecycle/reactivestreams/src/test/java/android/arch/lifecycle/LiveDataReactiveStreamsTest.java
+++ b/lifecycle/reactivestreams/src/test/java/android/arch/lifecycle/LiveDataReactiveStreamsTest.java
@@ -16,12 +16,10 @@
package android.arch.lifecycle;
-import static android.arch.lifecycle.Lifecycle.State.RESUMED;
-
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
-import android.arch.core.executor.AppToolkitTaskExecutor;
+import android.arch.core.executor.ArchTaskExecutor;
import android.arch.core.executor.TaskExecutor;
import android.support.annotation.Nullable;
import android.support.test.filters.SmallTest;
@@ -47,28 +45,7 @@
@SmallTest
public class LiveDataReactiveStreamsTest {
- private static final Lifecycle sLifecycle = new Lifecycle() {
- @Override
- public void addObserver(LifecycleObserver observer) {
- }
-
- @Override
- public void removeObserver(LifecycleObserver observer) {
- }
-
- @Override
- public State getCurrentState() {
- return RESUMED;
- }
- };
- private static final LifecycleOwner S_LIFECYCLE_OWNER = new LifecycleOwner() {
-
- @Override
- public Lifecycle getLifecycle() {
- return sLifecycle;
- }
-
- };
+ private LifecycleOwner mLifecycleOwner;
private final List<String> mLiveDataOutput = new ArrayList<>();
private final Observer<String> mObserver = new Observer<String>() {
@@ -85,8 +62,19 @@
@Before
public void init() {
+ mLifecycleOwner = new LifecycleOwner() {
+ LifecycleRegistry mRegistry = new LifecycleRegistry(this);
+ {
+ mRegistry.handleLifecycleEvent(Lifecycle.Event.ON_RESUME);
+ }
+
+ @Override
+ public Lifecycle getLifecycle() {
+ return mRegistry;
+ }
+ };
mTestThread = Thread.currentThread();
- AppToolkitTaskExecutor.getInstance().setDelegate(new TaskExecutor() {
+ ArchTaskExecutor.getInstance().setDelegate(new TaskExecutor() {
@Override
public void executeOnDiskIO(Runnable runnable) {
@@ -109,7 +97,7 @@
@After
public void removeExecutorDelegate() {
- AppToolkitTaskExecutor.getInstance().setDelegate(null);
+ ArchTaskExecutor.getInstance().setDelegate(null);
}
@Test
@@ -117,7 +105,7 @@
PublishProcessor<String> processor = PublishProcessor.create();
LiveData<String> liveData = LiveDataReactiveStreams.fromPublisher(processor);
- liveData.observe(S_LIFECYCLE_OWNER, mObserver);
+ liveData.observe(mLifecycleOwner, mObserver);
processor.onNext("foo");
processor.onNext("bar");
@@ -132,13 +120,13 @@
PublishProcessor<String> processor = PublishProcessor.create();
LiveData<String> liveData = LiveDataReactiveStreams.fromPublisher(processor);
- liveData.observe(S_LIFECYCLE_OWNER, mObserver);
+ liveData.observe(mLifecycleOwner, mObserver);
processor.onNext("foo");
processor.onNext("bar");
// The second mObserver should only get the newest value and any later values.
- liveData.observe(S_LIFECYCLE_OWNER, new Observer<String>() {
+ liveData.observe(mLifecycleOwner, new Observer<String>() {
@Override
public void onChanged(@Nullable String s) {
output2.add(s);
@@ -152,12 +140,44 @@
}
@Test
+ public void convertsFromPublisherAfterInactive() {
+ PublishProcessor<String> processor = PublishProcessor.create();
+ LiveData<String> liveData = LiveDataReactiveStreams.fromPublisher(processor);
+
+ liveData.observe(mLifecycleOwner, mObserver);
+ processor.onNext("foo");
+ liveData.removeObserver(mObserver);
+ processor.onNext("bar");
+
+ liveData.observe(mLifecycleOwner, mObserver);
+ processor.onNext("baz");
+
+ assertThat(mLiveDataOutput, is(Arrays.asList("foo", "foo", "baz")));
+ }
+
+ @Test
+ public void convertsFromPublisherManagesSubcriptions() {
+ PublishProcessor<String> processor = PublishProcessor.create();
+ LiveData<String> liveData = LiveDataReactiveStreams.fromPublisher(processor);
+
+ assertThat(processor.hasSubscribers(), is(false));
+ liveData.observe(mLifecycleOwner, mObserver);
+
+ // once the live data is active, there's a subscriber
+ assertThat(processor.hasSubscribers(), is(true));
+
+ liveData.removeObserver(mObserver);
+ // once the live data is inactive, the subscriber is removed
+ assertThat(processor.hasSubscribers(), is(false));
+ }
+
+ @Test
public void convertsFromAsyncPublisher() {
Flowable<String> input = Flowable.just("foo")
.concatWith(Flowable.just("bar", "baz").observeOn(sBackgroundScheduler));
LiveData<String> liveData = LiveDataReactiveStreams.fromPublisher(input);
- liveData.observe(S_LIFECYCLE_OWNER, mObserver);
+ liveData.observe(mLifecycleOwner, mObserver);
assertThat(mLiveDataOutput, is(Collections.singletonList("foo")));
sBackgroundScheduler.triggerActions();
@@ -170,7 +190,7 @@
liveData.setValue("foo");
assertThat(liveData.getValue(), is("foo"));
- Flowable.fromPublisher(LiveDataReactiveStreams.toPublisher(S_LIFECYCLE_OWNER, liveData))
+ Flowable.fromPublisher(LiveDataReactiveStreams.toPublisher(mLifecycleOwner, liveData))
.subscribe(mOutputProcessor);
liveData.setValue("bar");
@@ -188,7 +208,7 @@
assertThat(liveData.getValue(), is("foo"));
Disposable disposable = Flowable
- .fromPublisher(LiveDataReactiveStreams.toPublisher(S_LIFECYCLE_OWNER, liveData))
+ .fromPublisher(LiveDataReactiveStreams.toPublisher(mLifecycleOwner, liveData))
.subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
@@ -216,7 +236,7 @@
final AsyncSubject<Subscription> subscriptionSubject = AsyncSubject.create();
- Flowable.fromPublisher(LiveDataReactiveStreams.toPublisher(S_LIFECYCLE_OWNER, liveData))
+ Flowable.fromPublisher(LiveDataReactiveStreams.toPublisher(mLifecycleOwner, liveData))
.subscribe(new Subscriber<String>() {
@Override
public void onSubscribe(Subscription s) {
@@ -275,7 +295,7 @@
public void convertsToPublisherWithAsyncData() {
MutableLiveData<String> liveData = new MutableLiveData<>();
- Flowable.fromPublisher(LiveDataReactiveStreams.toPublisher(S_LIFECYCLE_OWNER, liveData))
+ Flowable.fromPublisher(LiveDataReactiveStreams.toPublisher(mLifecycleOwner, liveData))
.observeOn(sBackgroundScheduler)
.subscribe(mOutputProcessor);
diff --git a/lifecycle/runtime/build.gradle b/lifecycle/runtime/build.gradle
index 7678e95..111429c 100644
--- a/lifecycle/runtime/build.gradle
+++ b/lifecycle/runtime/build.gradle
@@ -32,6 +32,9 @@
testCompile libs.junit
testCompile libs.mockito_core
+
+ androidTestImplementation libs.junit
+ androidTestImplementation libs.test_runner, { exclude module: 'support-annotations' }
}
createAndroidCheckstyle(project)
diff --git a/lifecycle/runtime/proguard-rules.pro b/lifecycle/runtime/proguard-rules.pro
index 25f3e87..5e61405 100644
--- a/lifecycle/runtime/proguard-rules.pro
+++ b/lifecycle/runtime/proguard-rules.pro
@@ -7,7 +7,7 @@
-keep class * implements android.arch.lifecycle.LifecycleObserver {
}
--keep class * implements android.arch.lifecycle.GenericLifecycleObserver {
+-keep class * implements android.arch.lifecycle.GeneratedAdapter {
<init>(...);
}
diff --git a/lifecycle/runtime/src/androidTest/java/android/arch/lifecycle/MissingClassTest.java b/lifecycle/runtime/src/androidTest/java/android/arch/lifecycle/MissingClassTest.java
new file mode 100644
index 0000000..81a0756
--- /dev/null
+++ b/lifecycle/runtime/src/androidTest/java/android/arch/lifecycle/MissingClassTest.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.arch.lifecycle;
+
+import android.app.PictureInPictureParams;
+import android.os.Build;
+import android.support.test.filters.SdkSuppress;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+@SdkSuppress(maxSdkVersion = Build.VERSION_CODES.N_MR1)
+@SmallTest
+public class MissingClassTest {
+ public static class ObserverWithMissingClasses {
+ @SuppressWarnings("unused")
+ public void newApiMethod(PictureInPictureParams params) {}
+
+ @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
+ public void onResume() {}
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void testMissingApi() {
+ new ReflectiveGenericLifecycleObserver(new ObserverWithMissingClasses());
+ }
+}
diff --git a/lifecycle/runtime/src/main/AndroidManifest.xml b/lifecycle/runtime/src/main/AndroidManifest.xml
index 5641eac..274a076 100644
--- a/lifecycle/runtime/src/main/AndroidManifest.xml
+++ b/lifecycle/runtime/src/main/AndroidManifest.xml
@@ -17,8 +17,4 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.arch.lifecycle">
- <application>
- <meta-data android:name="android.arch.lifecycle.VERSION"
- android:value="${version}" />
- </application>
</manifest>
diff --git a/lifecycle/runtime/src/main/java/android/arch/lifecycle/LifecycleRegistry.java b/lifecycle/runtime/src/main/java/android/arch/lifecycle/LifecycleRegistry.java
index b83e6b8..bf8aff7 100644
--- a/lifecycle/runtime/src/main/java/android/arch/lifecycle/LifecycleRegistry.java
+++ b/lifecycle/runtime/src/main/java/android/arch/lifecycle/LifecycleRegistry.java
@@ -29,9 +29,12 @@
import static android.arch.lifecycle.Lifecycle.State.STARTED;
import android.arch.core.internal.FastSafeIterableMap;
+import android.support.annotation.MainThread;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
+import android.util.Log;
+import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Map.Entry;
@@ -44,6 +47,8 @@
*/
public class LifecycleRegistry extends Lifecycle {
+ private static final String LOG_TAG = "LifecycleRegistry";
+
/**
* Custom list that keeps observers and can handle removals / additions during traversal.
*
@@ -59,8 +64,12 @@
private State mState;
/**
* The provider that owns this Lifecycle.
+ * Only WeakReference on LifecycleOwner is kept, so if somebody leaks Lifecycle, they won't leak
+ * the whole Fragment / Activity. However, to leak Lifecycle object isn't great idea neither,
+ * because it keeps strong references on all other listeners, so you'll leak all of them as
+ * well.
*/
- private final LifecycleOwner mLifecycleOwner;
+ private final WeakReference<LifecycleOwner> mLifecycleOwner;
private int mAddingObserverCounter = 0;
@@ -86,19 +95,19 @@
* @param provider The owner LifecycleOwner
*/
public LifecycleRegistry(@NonNull LifecycleOwner provider) {
- mLifecycleOwner = provider;
+ mLifecycleOwner = new WeakReference<>(provider);
mState = INITIALIZED;
}
/**
- * Only marks the current state as the given value. It doesn't dispatch any event to its
- * listeners.
+ * Moves the Lifecycle to the given state and dispatches necessary events to the observers.
*
* @param state new state
*/
@SuppressWarnings("WeakerAccess")
- public void markState(State state) {
- mState = state;
+ @MainThread
+ public void markState(@NonNull State state) {
+ moveToState(state);
}
/**
@@ -109,8 +118,16 @@
*
* @param event The event that was received
*/
- public void handleLifecycleEvent(Lifecycle.Event event) {
- mState = getStateAfter(event);
+ public void handleLifecycleEvent(@NonNull Lifecycle.Event event) {
+ State next = getStateAfter(event);
+ moveToState(next);
+ }
+
+ private void moveToState(State next) {
+ if (mState == next) {
+ return;
+ }
+ mState = next;
if (mHandlingEvent || mAddingObserverCounter != 0) {
mNewEventOccurred = true;
// we will figure out what to do on upper level.
@@ -140,7 +157,7 @@
}
@Override
- public void addObserver(LifecycleObserver observer) {
+ public void addObserver(@NonNull LifecycleObserver observer) {
State initialState = mState == DESTROYED ? DESTROYED : INITIALIZED;
ObserverWithState statefulObserver = new ObserverWithState(observer, initialState);
ObserverWithState previous = mObserverMap.putIfAbsent(observer, statefulObserver);
@@ -148,15 +165,19 @@
if (previous != null) {
return;
}
+ LifecycleOwner lifecycleOwner = mLifecycleOwner.get();
+ if (lifecycleOwner == null) {
+ // it is null we should be destroyed. Fallback quickly
+ return;
+ }
boolean isReentrance = mAddingObserverCounter != 0 || mHandlingEvent;
-
State targetState = calculateTargetState(observer);
mAddingObserverCounter++;
while ((statefulObserver.mState.compareTo(targetState) < 0
&& mObserverMap.contains(observer))) {
pushParentState(statefulObserver.mState);
- statefulObserver.dispatchEvent(mLifecycleOwner, upEvent(statefulObserver.mState));
+ statefulObserver.dispatchEvent(lifecycleOwner, upEvent(statefulObserver.mState));
popParentState();
// mState / subling may have been changed recalculate
targetState = calculateTargetState(observer);
@@ -178,7 +199,7 @@
}
@Override
- public void removeObserver(LifecycleObserver observer) {
+ public void removeObserver(@NonNull LifecycleObserver observer) {
// we consciously decided not to send destruction events here in opposition to addObserver.
// Our reasons for that:
// 1. These events haven't yet happened at all. In contrast to events in addObservers, that
@@ -258,7 +279,7 @@
throw new IllegalArgumentException("Unexpected state value " + state);
}
- private void forwardPass() {
+ private void forwardPass(LifecycleOwner lifecycleOwner) {
Iterator<Entry<LifecycleObserver, ObserverWithState>> ascendingIterator =
mObserverMap.iteratorWithAdditions();
while (ascendingIterator.hasNext() && !mNewEventOccurred) {
@@ -267,13 +288,13 @@
while ((observer.mState.compareTo(mState) < 0 && !mNewEventOccurred
&& mObserverMap.contains(entry.getKey()))) {
pushParentState(observer.mState);
- observer.dispatchEvent(mLifecycleOwner, upEvent(observer.mState));
+ observer.dispatchEvent(lifecycleOwner, upEvent(observer.mState));
popParentState();
}
}
}
- private void backwardPass() {
+ private void backwardPass(LifecycleOwner lifecycleOwner) {
Iterator<Entry<LifecycleObserver, ObserverWithState>> descendingIterator =
mObserverMap.descendingIterator();
while (descendingIterator.hasNext() && !mNewEventOccurred) {
@@ -283,7 +304,7 @@
&& mObserverMap.contains(entry.getKey()))) {
Event event = downEvent(observer.mState);
pushParentState(getStateAfter(event));
- observer.dispatchEvent(mLifecycleOwner, event);
+ observer.dispatchEvent(lifecycleOwner, event);
popParentState();
}
}
@@ -292,16 +313,22 @@
// happens only on the top of stack (never in reentrance),
// so it doesn't have to take in account parents
private void sync() {
+ LifecycleOwner lifecycleOwner = mLifecycleOwner.get();
+ if (lifecycleOwner == null) {
+ Log.w(LOG_TAG, "LifecycleOwner is garbage collected, you shouldn't try dispatch "
+ + "new events from it.");
+ return;
+ }
while (!isSynced()) {
mNewEventOccurred = false;
// no need to check eldest for nullability, because isSynced does it for us.
if (mState.compareTo(mObserverMap.eldest().getValue().mState) < 0) {
- backwardPass();
+ backwardPass(lifecycleOwner);
}
Entry<LifecycleObserver, ObserverWithState> newest = mObserverMap.newest();
if (!mNewEventOccurred && newest != null
&& mState.compareTo(newest.getValue().mState) > 0) {
- forwardPass();
+ forwardPass(lifecycleOwner);
}
}
mNewEventOccurred = false;
diff --git a/lifecycle/runtime/src/main/java/android/arch/lifecycle/LifecycleRegistryOwner.java b/lifecycle/runtime/src/main/java/android/arch/lifecycle/LifecycleRegistryOwner.java
index 38eeb6d..0c67fef 100644
--- a/lifecycle/runtime/src/main/java/android/arch/lifecycle/LifecycleRegistryOwner.java
+++ b/lifecycle/runtime/src/main/java/android/arch/lifecycle/LifecycleRegistryOwner.java
@@ -16,6 +16,8 @@
package android.arch.lifecycle;
+import android.support.annotation.NonNull;
+
/**
* @deprecated Use {@code android.support.v7.app.AppCompatActivity}
* which extends {@link LifecycleOwner}, so there are no use cases for this class.
@@ -23,6 +25,7 @@
@SuppressWarnings({"WeakerAccess", "unused"})
@Deprecated
public interface LifecycleRegistryOwner extends LifecycleOwner {
+ @NonNull
@Override
LifecycleRegistry getLifecycle();
}
diff --git a/lifecycle/runtime/src/main/java/android/arch/lifecycle/ReportFragment.java b/lifecycle/runtime/src/main/java/android/arch/lifecycle/ReportFragment.java
index 3e4ece8..16a89ce 100644
--- a/lifecycle/runtime/src/main/java/android/arch/lifecycle/ReportFragment.java
+++ b/lifecycle/runtime/src/main/java/android/arch/lifecycle/ReportFragment.java
@@ -28,7 +28,6 @@
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public class ReportFragment extends Fragment {
-
private static final String REPORT_FRAGMENT_TAG = "android.arch.lifecycle"
+ ".LifecycleDispatcher.report_fragment_tag";
diff --git a/lifecycle/runtime/src/test/java/android/arch/lifecycle/LifecycleRegistryTest.java b/lifecycle/runtime/src/test/java/android/arch/lifecycle/LifecycleRegistryTest.java
index 6506454..2a7bbad 100644
--- a/lifecycle/runtime/src/test/java/android/arch/lifecycle/LifecycleRegistryTest.java
+++ b/lifecycle/runtime/src/test/java/android/arch/lifecycle/LifecycleRegistryTest.java
@@ -566,6 +566,25 @@
verify(observer).onCreate();
}
+ private static void forceGc() {
+ Runtime.getRuntime().gc();
+ Runtime.getRuntime().runFinalization();
+ Runtime.getRuntime().gc();
+ Runtime.getRuntime().runFinalization();
+ }
+
+ @Test
+ public void goneLifecycleOwner() {
+ fullyInitializeRegistry();
+ mLifecycleOwner = null;
+ forceGc();
+ TestObserver observer = mock(TestObserver.class);
+ mRegistry.addObserver(observer);
+ verify(observer, never()).onCreate();
+ verify(observer, never()).onStart();
+ verify(observer, never()).onResume();
+ }
+
private void dispatchEvent(Lifecycle.Event event) {
when(mLifecycle.getCurrentState()).thenReturn(LifecycleRegistry.getStateAfter(event));
mRegistry.handleLifecycleEvent(event);
diff --git a/media-compat-test-client/OWNERS b/media-compat-test-client/OWNERS
new file mode 100644
index 0000000..5529026
--- /dev/null
+++ b/media-compat-test-client/OWNERS
@@ -0,0 +1,2 @@
+hdmoon@google.com
+sungsoo@google.com
\ No newline at end of file
diff --git a/media-compat-test-lib/OWNERS b/media-compat-test-lib/OWNERS
new file mode 100644
index 0000000..5529026
--- /dev/null
+++ b/media-compat-test-lib/OWNERS
@@ -0,0 +1,2 @@
+hdmoon@google.com
+sungsoo@google.com
\ No newline at end of file
diff --git a/media-compat-test-service/OWNERS b/media-compat-test-service/OWNERS
new file mode 100644
index 0000000..5529026
--- /dev/null
+++ b/media-compat-test-service/OWNERS
@@ -0,0 +1,2 @@
+hdmoon@google.com
+sungsoo@google.com
\ No newline at end of file
diff --git a/media-compat/Android.mk b/media-compat/Android.mk
index 02ed90d..4a4cd02 100644
--- a/media-compat/Android.mk
+++ b/media-compat/Android.mk
@@ -28,7 +28,6 @@
LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
LOCAL_AIDL_INCLUDES := $(LOCAL_PATH)/java
LOCAL_SRC_FILES := \
- $(call all-java-files-under,kitkat) \
$(call all-java-files-under,api21) \
$(call all-java-files-under,api22) \
$(call all-java-files-under,api23) \
diff --git a/media-compat/AndroidManifest.xml b/media-compat/AndroidManifest.xml
index 8a65eba..cd3e5e2 100644
--- a/media-compat/AndroidManifest.xml
+++ b/media-compat/AndroidManifest.xml
@@ -16,8 +16,4 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.support.mediacompat">
<uses-sdk android:minSdkVersion="14"/>
- <application>
- <meta-data android:name="android.support.mediacompat.VERSION"
- android:value="${support-version}" />
- </application>
</manifest>
diff --git a/media-compat/OWNERS b/media-compat/OWNERS
new file mode 100644
index 0000000..1cf305a
--- /dev/null
+++ b/media-compat/OWNERS
@@ -0,0 +1,7 @@
+akersten@google.com
+hdmoon@google.com
+insun@google.com
+jaewan@google.com
+jinpark@google.com
+juliacr@google.com
+sungsoo@google.com
\ No newline at end of file
diff --git a/media-compat/api/26.1.0.txt b/media-compat/api/26.1.0.txt
new file mode 100644
index 0000000..d40ad7f
--- /dev/null
+++ b/media-compat/api/26.1.0.txt
@@ -0,0 +1,649 @@
+package android.support.v4.media {
+
+ public class AudioAttributesCompat {
+ method public int getContentType();
+ method public int getFlags();
+ method public int getLegacyStreamType();
+ method public int getUsage();
+ method public int getVolumeControlStream();
+ method public java.lang.Object unwrap();
+ method public static android.support.v4.media.AudioAttributesCompat wrap(java.lang.Object);
+ field public static final int CONTENT_TYPE_MOVIE = 3; // 0x3
+ field public static final int CONTENT_TYPE_MUSIC = 2; // 0x2
+ field public static final int CONTENT_TYPE_SONIFICATION = 4; // 0x4
+ field public static final int CONTENT_TYPE_SPEECH = 1; // 0x1
+ field public static final int CONTENT_TYPE_UNKNOWN = 0; // 0x0
+ field public static final int FLAG_AUDIBILITY_ENFORCED = 1; // 0x1
+ field public static final int FLAG_HW_AV_SYNC = 16; // 0x10
+ field public static final int USAGE_ALARM = 4; // 0x4
+ field public static final int USAGE_ASSISTANCE_ACCESSIBILITY = 11; // 0xb
+ field public static final int USAGE_ASSISTANCE_NAVIGATION_GUIDANCE = 12; // 0xc
+ field public static final int USAGE_ASSISTANCE_SONIFICATION = 13; // 0xd
+ field public static final int USAGE_ASSISTANT = 16; // 0x10
+ field public static final int USAGE_GAME = 14; // 0xe
+ field public static final int USAGE_MEDIA = 1; // 0x1
+ field public static final int USAGE_NOTIFICATION = 5; // 0x5
+ field public static final int USAGE_NOTIFICATION_COMMUNICATION_DELAYED = 9; // 0x9
+ field public static final int USAGE_NOTIFICATION_COMMUNICATION_INSTANT = 8; // 0x8
+ field public static final int USAGE_NOTIFICATION_COMMUNICATION_REQUEST = 7; // 0x7
+ field public static final int USAGE_NOTIFICATION_EVENT = 10; // 0xa
+ field public static final int USAGE_NOTIFICATION_RINGTONE = 6; // 0x6
+ field public static final int USAGE_UNKNOWN = 0; // 0x0
+ field public static final int USAGE_VOICE_COMMUNICATION = 2; // 0x2
+ field public static final int USAGE_VOICE_COMMUNICATION_SIGNALLING = 3; // 0x3
+ }
+
+ public static class AudioAttributesCompat.Builder {
+ ctor public AudioAttributesCompat.Builder();
+ ctor public AudioAttributesCompat.Builder(android.support.v4.media.AudioAttributesCompat);
+ method public android.support.v4.media.AudioAttributesCompat build();
+ method public android.support.v4.media.AudioAttributesCompat.Builder setContentType(int);
+ method public android.support.v4.media.AudioAttributesCompat.Builder setFlags(int);
+ method public android.support.v4.media.AudioAttributesCompat.Builder setLegacyStreamType(int);
+ method public android.support.v4.media.AudioAttributesCompat.Builder setUsage(int);
+ }
+
+ public final class MediaBrowserCompat {
+ ctor public MediaBrowserCompat(android.content.Context, android.content.ComponentName, android.support.v4.media.MediaBrowserCompat.ConnectionCallback, android.os.Bundle);
+ method public void connect();
+ method public void disconnect();
+ method public android.os.Bundle getExtras();
+ method public void getItem(java.lang.String, android.support.v4.media.MediaBrowserCompat.ItemCallback);
+ method public java.lang.String getRoot();
+ method public android.content.ComponentName getServiceComponent();
+ method public android.support.v4.media.session.MediaSessionCompat.Token getSessionToken();
+ method public boolean isConnected();
+ method public void search(java.lang.String, android.os.Bundle, android.support.v4.media.MediaBrowserCompat.SearchCallback);
+ method public void sendCustomAction(java.lang.String, android.os.Bundle, android.support.v4.media.MediaBrowserCompat.CustomActionCallback);
+ method public void subscribe(java.lang.String, android.support.v4.media.MediaBrowserCompat.SubscriptionCallback);
+ method public void subscribe(java.lang.String, android.os.Bundle, android.support.v4.media.MediaBrowserCompat.SubscriptionCallback);
+ method public void unsubscribe(java.lang.String);
+ method public void unsubscribe(java.lang.String, android.support.v4.media.MediaBrowserCompat.SubscriptionCallback);
+ field public static final java.lang.String CUSTOM_ACTION_DOWNLOAD = "android.support.v4.media.action.DOWNLOAD";
+ field public static final java.lang.String CUSTOM_ACTION_REMOVE_DOWNLOADED_FILE = "android.support.v4.media.action.REMOVE_DOWNLOADED_FILE";
+ field public static final java.lang.String EXTRA_DOWNLOAD_PROGRESS = "android.media.browse.extra.DOWNLOAD_PROGRESS";
+ field public static final java.lang.String EXTRA_MEDIA_ID = "android.media.browse.extra.MEDIA_ID";
+ field public static final java.lang.String EXTRA_PAGE = "android.media.browse.extra.PAGE";
+ field public static final java.lang.String EXTRA_PAGE_SIZE = "android.media.browse.extra.PAGE_SIZE";
+ }
+
+ public static class MediaBrowserCompat.ConnectionCallback {
+ ctor public MediaBrowserCompat.ConnectionCallback();
+ method public void onConnected();
+ method public void onConnectionFailed();
+ method public void onConnectionSuspended();
+ }
+
+ public static abstract class MediaBrowserCompat.CustomActionCallback {
+ ctor public MediaBrowserCompat.CustomActionCallback();
+ method public void onError(java.lang.String, android.os.Bundle, android.os.Bundle);
+ method public void onProgressUpdate(java.lang.String, android.os.Bundle, android.os.Bundle);
+ method public void onResult(java.lang.String, android.os.Bundle, android.os.Bundle);
+ }
+
+ public static abstract class MediaBrowserCompat.ItemCallback {
+ ctor public MediaBrowserCompat.ItemCallback();
+ method public void onError(java.lang.String);
+ method public void onItemLoaded(android.support.v4.media.MediaBrowserCompat.MediaItem);
+ }
+
+ public static class MediaBrowserCompat.MediaItem implements android.os.Parcelable {
+ ctor public MediaBrowserCompat.MediaItem(android.support.v4.media.MediaDescriptionCompat, int);
+ method public int describeContents();
+ method public static android.support.v4.media.MediaBrowserCompat.MediaItem fromMediaItem(java.lang.Object);
+ method public static java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem> fromMediaItemList(java.util.List<?>);
+ method public android.support.v4.media.MediaDescriptionCompat getDescription();
+ method public int getFlags();
+ method public java.lang.String getMediaId();
+ method public boolean isBrowsable();
+ method public boolean isPlayable();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.MediaBrowserCompat.MediaItem> CREATOR;
+ field public static final int FLAG_BROWSABLE = 1; // 0x1
+ field public static final int FLAG_PLAYABLE = 2; // 0x2
+ }
+
+ public static abstract class MediaBrowserCompat.SearchCallback {
+ ctor public MediaBrowserCompat.SearchCallback();
+ method public void onError(java.lang.String, android.os.Bundle);
+ method public void onSearchResult(java.lang.String, android.os.Bundle, java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem>);
+ }
+
+ public static abstract class MediaBrowserCompat.SubscriptionCallback {
+ ctor public MediaBrowserCompat.SubscriptionCallback();
+ method public void onChildrenLoaded(java.lang.String, java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem>);
+ method public void onChildrenLoaded(java.lang.String, java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem>, android.os.Bundle);
+ method public void onError(java.lang.String);
+ method public void onError(java.lang.String, android.os.Bundle);
+ }
+
+ public abstract class MediaBrowserServiceCompat extends android.app.Service {
+ ctor public MediaBrowserServiceCompat();
+ method public void dump(java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
+ method public final android.os.Bundle getBrowserRootHints();
+ method public android.support.v4.media.session.MediaSessionCompat.Token getSessionToken();
+ method public void notifyChildrenChanged(java.lang.String);
+ method public void notifyChildrenChanged(java.lang.String, android.os.Bundle);
+ method public android.os.IBinder onBind(android.content.Intent);
+ method public void onCustomAction(java.lang.String, android.os.Bundle, android.support.v4.media.MediaBrowserServiceCompat.Result<android.os.Bundle>);
+ method public abstract android.support.v4.media.MediaBrowserServiceCompat.BrowserRoot onGetRoot(java.lang.String, int, android.os.Bundle);
+ method public abstract void onLoadChildren(java.lang.String, android.support.v4.media.MediaBrowserServiceCompat.Result<java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem>>);
+ method public void onLoadChildren(java.lang.String, android.support.v4.media.MediaBrowserServiceCompat.Result<java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem>>, android.os.Bundle);
+ method public void onLoadItem(java.lang.String, android.support.v4.media.MediaBrowserServiceCompat.Result<android.support.v4.media.MediaBrowserCompat.MediaItem>);
+ method public void onSearch(java.lang.String, android.os.Bundle, android.support.v4.media.MediaBrowserServiceCompat.Result<java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem>>);
+ method public void setSessionToken(android.support.v4.media.session.MediaSessionCompat.Token);
+ field public static final java.lang.String SERVICE_INTERFACE = "android.media.browse.MediaBrowserService";
+ }
+
+ public static final class MediaBrowserServiceCompat.BrowserRoot {
+ ctor public MediaBrowserServiceCompat.BrowserRoot(java.lang.String, android.os.Bundle);
+ method public android.os.Bundle getExtras();
+ method public java.lang.String getRootId();
+ field public static final java.lang.String EXTRA_OFFLINE = "android.service.media.extra.OFFLINE";
+ field public static final java.lang.String EXTRA_RECENT = "android.service.media.extra.RECENT";
+ field public static final java.lang.String EXTRA_SUGGESTED = "android.service.media.extra.SUGGESTED";
+ field public static final deprecated java.lang.String EXTRA_SUGGESTION_KEYWORDS = "android.service.media.extra.SUGGESTION_KEYWORDS";
+ }
+
+ public static class MediaBrowserServiceCompat.Result<T> {
+ method public void detach();
+ method public void sendError(android.os.Bundle);
+ method public void sendProgressUpdate(android.os.Bundle);
+ method public void sendResult(T);
+ }
+
+ public final class MediaDescriptionCompat implements android.os.Parcelable {
+ method public int describeContents();
+ method public static android.support.v4.media.MediaDescriptionCompat fromMediaDescription(java.lang.Object);
+ method public java.lang.CharSequence getDescription();
+ method public android.os.Bundle getExtras();
+ method public android.graphics.Bitmap getIconBitmap();
+ method public android.net.Uri getIconUri();
+ method public java.lang.Object getMediaDescription();
+ method public java.lang.String getMediaId();
+ method public android.net.Uri getMediaUri();
+ method public java.lang.CharSequence getSubtitle();
+ method public java.lang.CharSequence getTitle();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final long BT_FOLDER_TYPE_ALBUMS = 2L; // 0x2L
+ field public static final long BT_FOLDER_TYPE_ARTISTS = 3L; // 0x3L
+ field public static final long BT_FOLDER_TYPE_GENRES = 4L; // 0x4L
+ field public static final long BT_FOLDER_TYPE_MIXED = 0L; // 0x0L
+ field public static final long BT_FOLDER_TYPE_PLAYLISTS = 5L; // 0x5L
+ field public static final long BT_FOLDER_TYPE_TITLES = 1L; // 0x1L
+ field public static final long BT_FOLDER_TYPE_YEARS = 6L; // 0x6L
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.MediaDescriptionCompat> CREATOR;
+ field public static final java.lang.String EXTRA_BT_FOLDER_TYPE = "android.media.extra.BT_FOLDER_TYPE";
+ field public static final java.lang.String EXTRA_DOWNLOAD_STATUS = "android.media.extra.DOWNLOAD_STATUS";
+ field public static final long STATUS_DOWNLOADED = 2L; // 0x2L
+ field public static final long STATUS_DOWNLOADING = 1L; // 0x1L
+ field public static final long STATUS_NOT_DOWNLOADED = 0L; // 0x0L
+ }
+
+ public static final class MediaDescriptionCompat.Builder {
+ ctor public MediaDescriptionCompat.Builder();
+ method public android.support.v4.media.MediaDescriptionCompat build();
+ method public android.support.v4.media.MediaDescriptionCompat.Builder setDescription(java.lang.CharSequence);
+ method public android.support.v4.media.MediaDescriptionCompat.Builder setExtras(android.os.Bundle);
+ method public android.support.v4.media.MediaDescriptionCompat.Builder setIconBitmap(android.graphics.Bitmap);
+ method public android.support.v4.media.MediaDescriptionCompat.Builder setIconUri(android.net.Uri);
+ method public android.support.v4.media.MediaDescriptionCompat.Builder setMediaId(java.lang.String);
+ method public android.support.v4.media.MediaDescriptionCompat.Builder setMediaUri(android.net.Uri);
+ method public android.support.v4.media.MediaDescriptionCompat.Builder setSubtitle(java.lang.CharSequence);
+ method public android.support.v4.media.MediaDescriptionCompat.Builder setTitle(java.lang.CharSequence);
+ }
+
+ public final class MediaMetadataCompat implements android.os.Parcelable {
+ method public boolean containsKey(java.lang.String);
+ method public int describeContents();
+ method public static android.support.v4.media.MediaMetadataCompat fromMediaMetadata(java.lang.Object);
+ method public android.graphics.Bitmap getBitmap(java.lang.String);
+ method public android.os.Bundle getBundle();
+ method public android.support.v4.media.MediaDescriptionCompat getDescription();
+ method public long getLong(java.lang.String);
+ method public java.lang.Object getMediaMetadata();
+ method public android.support.v4.media.RatingCompat getRating(java.lang.String);
+ method public java.lang.String getString(java.lang.String);
+ method public java.lang.CharSequence getText(java.lang.String);
+ method public java.util.Set<java.lang.String> keySet();
+ method public int size();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.MediaMetadataCompat> CREATOR;
+ field public static final java.lang.String METADATA_KEY_ADVERTISEMENT = "android.media.metadata.ADVERTISEMENT";
+ field public static final java.lang.String METADATA_KEY_ALBUM = "android.media.metadata.ALBUM";
+ field public static final java.lang.String METADATA_KEY_ALBUM_ART = "android.media.metadata.ALBUM_ART";
+ field public static final java.lang.String METADATA_KEY_ALBUM_ARTIST = "android.media.metadata.ALBUM_ARTIST";
+ field public static final java.lang.String METADATA_KEY_ALBUM_ART_URI = "android.media.metadata.ALBUM_ART_URI";
+ field public static final java.lang.String METADATA_KEY_ART = "android.media.metadata.ART";
+ field public static final java.lang.String METADATA_KEY_ARTIST = "android.media.metadata.ARTIST";
+ field public static final java.lang.String METADATA_KEY_ART_URI = "android.media.metadata.ART_URI";
+ field public static final java.lang.String METADATA_KEY_AUTHOR = "android.media.metadata.AUTHOR";
+ field public static final java.lang.String METADATA_KEY_BT_FOLDER_TYPE = "android.media.metadata.BT_FOLDER_TYPE";
+ field public static final java.lang.String METADATA_KEY_COMPILATION = "android.media.metadata.COMPILATION";
+ field public static final java.lang.String METADATA_KEY_COMPOSER = "android.media.metadata.COMPOSER";
+ field public static final java.lang.String METADATA_KEY_DATE = "android.media.metadata.DATE";
+ field public static final java.lang.String METADATA_KEY_DISC_NUMBER = "android.media.metadata.DISC_NUMBER";
+ field public static final java.lang.String METADATA_KEY_DISPLAY_DESCRIPTION = "android.media.metadata.DISPLAY_DESCRIPTION";
+ field public static final java.lang.String METADATA_KEY_DISPLAY_ICON = "android.media.metadata.DISPLAY_ICON";
+ field public static final java.lang.String METADATA_KEY_DISPLAY_ICON_URI = "android.media.metadata.DISPLAY_ICON_URI";
+ field public static final java.lang.String METADATA_KEY_DISPLAY_SUBTITLE = "android.media.metadata.DISPLAY_SUBTITLE";
+ field public static final java.lang.String METADATA_KEY_DISPLAY_TITLE = "android.media.metadata.DISPLAY_TITLE";
+ field public static final java.lang.String METADATA_KEY_DOWNLOAD_STATUS = "android.media.metadata.DOWNLOAD_STATUS";
+ field public static final java.lang.String METADATA_KEY_DURATION = "android.media.metadata.DURATION";
+ field public static final java.lang.String METADATA_KEY_GENRE = "android.media.metadata.GENRE";
+ field public static final java.lang.String METADATA_KEY_MEDIA_ID = "android.media.metadata.MEDIA_ID";
+ field public static final java.lang.String METADATA_KEY_MEDIA_URI = "android.media.metadata.MEDIA_URI";
+ field public static final java.lang.String METADATA_KEY_NUM_TRACKS = "android.media.metadata.NUM_TRACKS";
+ field public static final java.lang.String METADATA_KEY_RATING = "android.media.metadata.RATING";
+ field public static final java.lang.String METADATA_KEY_TITLE = "android.media.metadata.TITLE";
+ field public static final java.lang.String METADATA_KEY_TRACK_NUMBER = "android.media.metadata.TRACK_NUMBER";
+ field public static final java.lang.String METADATA_KEY_USER_RATING = "android.media.metadata.USER_RATING";
+ field public static final java.lang.String METADATA_KEY_WRITER = "android.media.metadata.WRITER";
+ field public static final java.lang.String METADATA_KEY_YEAR = "android.media.metadata.YEAR";
+ }
+
+ public static final class MediaMetadataCompat.Builder {
+ ctor public MediaMetadataCompat.Builder();
+ ctor public MediaMetadataCompat.Builder(android.support.v4.media.MediaMetadataCompat);
+ method public android.support.v4.media.MediaMetadataCompat build();
+ method public android.support.v4.media.MediaMetadataCompat.Builder putBitmap(java.lang.String, android.graphics.Bitmap);
+ method public android.support.v4.media.MediaMetadataCompat.Builder putLong(java.lang.String, long);
+ method public android.support.v4.media.MediaMetadataCompat.Builder putRating(java.lang.String, android.support.v4.media.RatingCompat);
+ method public android.support.v4.media.MediaMetadataCompat.Builder putString(java.lang.String, java.lang.String);
+ method public android.support.v4.media.MediaMetadataCompat.Builder putText(java.lang.String, java.lang.CharSequence);
+ }
+
+ public final class RatingCompat implements android.os.Parcelable {
+ method public int describeContents();
+ method public static android.support.v4.media.RatingCompat fromRating(java.lang.Object);
+ method public float getPercentRating();
+ method public java.lang.Object getRating();
+ method public int getRatingStyle();
+ method public float getStarRating();
+ method public boolean hasHeart();
+ method public boolean isRated();
+ method public boolean isThumbUp();
+ method public static android.support.v4.media.RatingCompat newHeartRating(boolean);
+ method public static android.support.v4.media.RatingCompat newPercentageRating(float);
+ method public static android.support.v4.media.RatingCompat newStarRating(int, float);
+ method public static android.support.v4.media.RatingCompat newThumbRating(boolean);
+ method public static android.support.v4.media.RatingCompat newUnratedRating(int);
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.RatingCompat> CREATOR;
+ field public static final int RATING_3_STARS = 3; // 0x3
+ field public static final int RATING_4_STARS = 4; // 0x4
+ field public static final int RATING_5_STARS = 5; // 0x5
+ field public static final int RATING_HEART = 1; // 0x1
+ field public static final int RATING_NONE = 0; // 0x0
+ field public static final int RATING_PERCENTAGE = 6; // 0x6
+ field public static final int RATING_THUMB_UP_DOWN = 2; // 0x2
+ }
+
+ public abstract class VolumeProviderCompat {
+ ctor public VolumeProviderCompat(int, int, int);
+ method public final int getCurrentVolume();
+ method public final int getMaxVolume();
+ method public final int getVolumeControl();
+ method public java.lang.Object getVolumeProvider();
+ method public void onAdjustVolume(int);
+ method public void onSetVolumeTo(int);
+ method public void setCallback(android.support.v4.media.VolumeProviderCompat.Callback);
+ method public final void setCurrentVolume(int);
+ field public static final int VOLUME_CONTROL_ABSOLUTE = 2; // 0x2
+ field public static final int VOLUME_CONTROL_FIXED = 0; // 0x0
+ field public static final int VOLUME_CONTROL_RELATIVE = 1; // 0x1
+ }
+
+ public static abstract class VolumeProviderCompat.Callback {
+ ctor public VolumeProviderCompat.Callback();
+ method public abstract void onVolumeChanged(android.support.v4.media.VolumeProviderCompat);
+ }
+
+}
+
+package android.support.v4.media.app {
+
+ public class NotificationCompat {
+ }
+
+ public static class NotificationCompat.DecoratedMediaCustomViewStyle extends android.support.v4.media.app.NotificationCompat.MediaStyle {
+ ctor public NotificationCompat.DecoratedMediaCustomViewStyle();
+ }
+
+ public static class NotificationCompat.MediaStyle extends android.support.v4.app.NotificationCompat.Style {
+ ctor public NotificationCompat.MediaStyle();
+ ctor public NotificationCompat.MediaStyle(android.support.v4.app.NotificationCompat.Builder);
+ method public static android.support.v4.media.session.MediaSessionCompat.Token getMediaSession(android.app.Notification);
+ method public android.support.v4.media.app.NotificationCompat.MediaStyle setCancelButtonIntent(android.app.PendingIntent);
+ method public android.support.v4.media.app.NotificationCompat.MediaStyle setMediaSession(android.support.v4.media.session.MediaSessionCompat.Token);
+ method public android.support.v4.media.app.NotificationCompat.MediaStyle setShowActionsInCompactView(int...);
+ method public android.support.v4.media.app.NotificationCompat.MediaStyle setShowCancelButton(boolean);
+ }
+
+}
+
+package android.support.v4.media.session {
+
+ public class MediaButtonReceiver extends android.content.BroadcastReceiver {
+ ctor public MediaButtonReceiver();
+ method public static android.app.PendingIntent buildMediaButtonPendingIntent(android.content.Context, long);
+ method public static android.app.PendingIntent buildMediaButtonPendingIntent(android.content.Context, android.content.ComponentName, long);
+ method public static android.view.KeyEvent handleIntent(android.support.v4.media.session.MediaSessionCompat, android.content.Intent);
+ method public void onReceive(android.content.Context, android.content.Intent);
+ }
+
+ public final class MediaControllerCompat {
+ ctor public MediaControllerCompat(android.content.Context, android.support.v4.media.session.MediaSessionCompat);
+ ctor public MediaControllerCompat(android.content.Context, android.support.v4.media.session.MediaSessionCompat.Token) throws android.os.RemoteException;
+ method public void addQueueItem(android.support.v4.media.MediaDescriptionCompat);
+ method public void addQueueItem(android.support.v4.media.MediaDescriptionCompat, int);
+ method public void adjustVolume(int, int);
+ method public boolean dispatchMediaButtonEvent(android.view.KeyEvent);
+ method public android.os.Bundle getExtras();
+ method public long getFlags();
+ method public static android.support.v4.media.session.MediaControllerCompat getMediaController(android.app.Activity);
+ method public java.lang.Object getMediaController();
+ method public android.support.v4.media.MediaMetadataCompat getMetadata();
+ method public java.lang.String getPackageName();
+ method public android.support.v4.media.session.MediaControllerCompat.PlaybackInfo getPlaybackInfo();
+ method public android.support.v4.media.session.PlaybackStateCompat getPlaybackState();
+ method public java.util.List<android.support.v4.media.session.MediaSessionCompat.QueueItem> getQueue();
+ method public java.lang.CharSequence getQueueTitle();
+ method public int getRatingType();
+ method public int getRepeatMode();
+ method public android.app.PendingIntent getSessionActivity();
+ method public android.support.v4.media.session.MediaSessionCompat.Token getSessionToken();
+ method public int getShuffleMode();
+ method public android.support.v4.media.session.MediaControllerCompat.TransportControls getTransportControls();
+ method public boolean isCaptioningEnabled();
+ method public deprecated boolean isShuffleModeEnabled();
+ method public void registerCallback(android.support.v4.media.session.MediaControllerCompat.Callback);
+ method public void registerCallback(android.support.v4.media.session.MediaControllerCompat.Callback, android.os.Handler);
+ method public void removeQueueItem(android.support.v4.media.MediaDescriptionCompat);
+ method public deprecated void removeQueueItemAt(int);
+ method public void sendCommand(java.lang.String, android.os.Bundle, android.os.ResultReceiver);
+ method public static void setMediaController(android.app.Activity, android.support.v4.media.session.MediaControllerCompat);
+ method public void setVolumeTo(int, int);
+ method public void unregisterCallback(android.support.v4.media.session.MediaControllerCompat.Callback);
+ }
+
+ public static abstract class MediaControllerCompat.Callback implements android.os.IBinder.DeathRecipient {
+ ctor public MediaControllerCompat.Callback();
+ method public void binderDied();
+ method public void onAudioInfoChanged(android.support.v4.media.session.MediaControllerCompat.PlaybackInfo);
+ method public void onCaptioningEnabledChanged(boolean);
+ method public void onExtrasChanged(android.os.Bundle);
+ method public void onMetadataChanged(android.support.v4.media.MediaMetadataCompat);
+ method public void onPlaybackStateChanged(android.support.v4.media.session.PlaybackStateCompat);
+ method public void onQueueChanged(java.util.List<android.support.v4.media.session.MediaSessionCompat.QueueItem>);
+ method public void onQueueTitleChanged(java.lang.CharSequence);
+ method public void onRepeatModeChanged(int);
+ method public void onSessionDestroyed();
+ method public void onSessionEvent(java.lang.String, android.os.Bundle);
+ method public deprecated void onShuffleModeChanged(boolean);
+ method public void onShuffleModeChanged(int);
+ }
+
+ public static final class MediaControllerCompat.PlaybackInfo {
+ method public int getAudioStream();
+ method public int getCurrentVolume();
+ method public int getMaxVolume();
+ method public int getPlaybackType();
+ method public int getVolumeControl();
+ field public static final int PLAYBACK_TYPE_LOCAL = 1; // 0x1
+ field public static final int PLAYBACK_TYPE_REMOTE = 2; // 0x2
+ }
+
+ public static abstract class MediaControllerCompat.TransportControls {
+ method public abstract void fastForward();
+ method public abstract void pause();
+ method public abstract void play();
+ method public abstract void playFromMediaId(java.lang.String, android.os.Bundle);
+ method public abstract void playFromSearch(java.lang.String, android.os.Bundle);
+ method public abstract void playFromUri(android.net.Uri, android.os.Bundle);
+ method public abstract void prepare();
+ method public abstract void prepareFromMediaId(java.lang.String, android.os.Bundle);
+ method public abstract void prepareFromSearch(java.lang.String, android.os.Bundle);
+ method public abstract void prepareFromUri(android.net.Uri, android.os.Bundle);
+ method public abstract void rewind();
+ method public abstract void seekTo(long);
+ method public abstract void sendCustomAction(android.support.v4.media.session.PlaybackStateCompat.CustomAction, android.os.Bundle);
+ method public abstract void sendCustomAction(java.lang.String, android.os.Bundle);
+ method public abstract void setCaptioningEnabled(boolean);
+ method public abstract void setRating(android.support.v4.media.RatingCompat);
+ method public abstract void setRating(android.support.v4.media.RatingCompat, android.os.Bundle);
+ method public abstract void setRepeatMode(int);
+ method public abstract void setShuffleMode(int);
+ method public abstract deprecated void setShuffleModeEnabled(boolean);
+ method public abstract void skipToNext();
+ method public abstract void skipToPrevious();
+ method public abstract void skipToQueueItem(long);
+ method public abstract void stop();
+ field public static final java.lang.String EXTRA_LEGACY_STREAM_TYPE = "android.media.session.extra.LEGACY_STREAM_TYPE";
+ }
+
+ public class MediaSessionCompat {
+ ctor public MediaSessionCompat(android.content.Context, java.lang.String);
+ ctor public MediaSessionCompat(android.content.Context, java.lang.String, android.content.ComponentName, android.app.PendingIntent);
+ method public void addOnActiveChangeListener(android.support.v4.media.session.MediaSessionCompat.OnActiveChangeListener);
+ method public static android.support.v4.media.session.MediaSessionCompat fromMediaSession(android.content.Context, java.lang.Object);
+ method public android.support.v4.media.session.MediaControllerCompat getController();
+ method public java.lang.Object getMediaSession();
+ method public java.lang.Object getRemoteControlClient();
+ method public android.support.v4.media.session.MediaSessionCompat.Token getSessionToken();
+ method public boolean isActive();
+ method public void release();
+ method public void removeOnActiveChangeListener(android.support.v4.media.session.MediaSessionCompat.OnActiveChangeListener);
+ method public void sendSessionEvent(java.lang.String, android.os.Bundle);
+ method public void setActive(boolean);
+ method public void setCallback(android.support.v4.media.session.MediaSessionCompat.Callback);
+ method public void setCallback(android.support.v4.media.session.MediaSessionCompat.Callback, android.os.Handler);
+ method public void setCaptioningEnabled(boolean);
+ method public void setExtras(android.os.Bundle);
+ method public void setFlags(int);
+ method public void setMediaButtonReceiver(android.app.PendingIntent);
+ method public void setMetadata(android.support.v4.media.MediaMetadataCompat);
+ method public void setPlaybackState(android.support.v4.media.session.PlaybackStateCompat);
+ method public void setPlaybackToLocal(int);
+ method public void setPlaybackToRemote(android.support.v4.media.VolumeProviderCompat);
+ method public void setQueue(java.util.List<android.support.v4.media.session.MediaSessionCompat.QueueItem>);
+ method public void setQueueTitle(java.lang.CharSequence);
+ method public void setRatingType(int);
+ method public void setRepeatMode(int);
+ method public void setSessionActivity(android.app.PendingIntent);
+ method public void setShuffleMode(int);
+ method public deprecated void setShuffleModeEnabled(boolean);
+ field public static final java.lang.String ACTION_FLAG_AS_INAPPROPRIATE = "android.support.v4.media.session.action.FLAG_AS_INAPPROPRIATE";
+ field public static final java.lang.String ACTION_FOLLOW = "android.support.v4.media.session.action.FOLLOW";
+ field public static final java.lang.String ACTION_SKIP_AD = "android.support.v4.media.session.action.SKIP_AD";
+ field public static final java.lang.String ACTION_UNFOLLOW = "android.support.v4.media.session.action.UNFOLLOW";
+ field public static final java.lang.String ARGUMENT_MEDIA_ATTRIBUTE = "android.support.v4.media.session.ARGUMENT_MEDIA_ATTRIBUTE";
+ field public static final java.lang.String ARGUMENT_MEDIA_ATTRIBUTE_VALUE = "android.support.v4.media.session.ARGUMENT_MEDIA_ATTRIBUTE_VALUE";
+ field public static final int FLAG_HANDLES_MEDIA_BUTTONS = 1; // 0x1
+ field public static final int FLAG_HANDLES_QUEUE_COMMANDS = 4; // 0x4
+ field public static final int FLAG_HANDLES_TRANSPORT_CONTROLS = 2; // 0x2
+ field public static final int MEDIA_ATTRIBUTE_ALBUM = 1; // 0x1
+ field public static final int MEDIA_ATTRIBUTE_ARTIST = 0; // 0x0
+ field public static final int MEDIA_ATTRIBUTE_PLAYLIST = 2; // 0x2
+ }
+
+ public static abstract class MediaSessionCompat.Callback {
+ ctor public MediaSessionCompat.Callback();
+ method public void onAddQueueItem(android.support.v4.media.MediaDescriptionCompat);
+ method public void onAddQueueItem(android.support.v4.media.MediaDescriptionCompat, int);
+ method public void onCommand(java.lang.String, android.os.Bundle, android.os.ResultReceiver);
+ method public void onCustomAction(java.lang.String, android.os.Bundle);
+ method public void onFastForward();
+ method public boolean onMediaButtonEvent(android.content.Intent);
+ method public void onPause();
+ method public void onPlay();
+ method public void onPlayFromMediaId(java.lang.String, android.os.Bundle);
+ method public void onPlayFromSearch(java.lang.String, android.os.Bundle);
+ method public void onPlayFromUri(android.net.Uri, android.os.Bundle);
+ method public void onPrepare();
+ method public void onPrepareFromMediaId(java.lang.String, android.os.Bundle);
+ method public void onPrepareFromSearch(java.lang.String, android.os.Bundle);
+ method public void onPrepareFromUri(android.net.Uri, android.os.Bundle);
+ method public void onRemoveQueueItem(android.support.v4.media.MediaDescriptionCompat);
+ method public deprecated void onRemoveQueueItemAt(int);
+ method public void onRewind();
+ method public void onSeekTo(long);
+ method public void onSetCaptioningEnabled(boolean);
+ method public void onSetRating(android.support.v4.media.RatingCompat);
+ method public void onSetRating(android.support.v4.media.RatingCompat, android.os.Bundle);
+ method public void onSetRepeatMode(int);
+ method public void onSetShuffleMode(int);
+ method public deprecated void onSetShuffleModeEnabled(boolean);
+ method public void onSkipToNext();
+ method public void onSkipToPrevious();
+ method public void onSkipToQueueItem(long);
+ method public void onStop();
+ }
+
+ public static abstract interface MediaSessionCompat.OnActiveChangeListener {
+ method public abstract void onActiveChanged();
+ }
+
+ public static final class MediaSessionCompat.QueueItem implements android.os.Parcelable {
+ ctor public MediaSessionCompat.QueueItem(android.support.v4.media.MediaDescriptionCompat, long);
+ method public int describeContents();
+ method public static android.support.v4.media.session.MediaSessionCompat.QueueItem fromQueueItem(java.lang.Object);
+ method public static java.util.List<android.support.v4.media.session.MediaSessionCompat.QueueItem> fromQueueItemList(java.util.List<?>);
+ method public android.support.v4.media.MediaDescriptionCompat getDescription();
+ method public long getQueueId();
+ method public java.lang.Object getQueueItem();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.session.MediaSessionCompat.QueueItem> CREATOR;
+ field public static final int UNKNOWN_ID = -1; // 0xffffffff
+ }
+
+ public static final class MediaSessionCompat.Token implements android.os.Parcelable {
+ method public int describeContents();
+ method public static android.support.v4.media.session.MediaSessionCompat.Token fromToken(java.lang.Object);
+ method public java.lang.Object getToken();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.session.MediaSessionCompat.Token> CREATOR;
+ }
+
+ public class ParcelableVolumeInfo implements android.os.Parcelable {
+ ctor public ParcelableVolumeInfo(int, int, int, int, int);
+ ctor public ParcelableVolumeInfo(android.os.Parcel);
+ method public int describeContents();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.session.ParcelableVolumeInfo> CREATOR;
+ field public int audioStream;
+ field public int controlType;
+ field public int currentVolume;
+ field public int maxVolume;
+ field public int volumeType;
+ }
+
+ public final class PlaybackStateCompat implements android.os.Parcelable {
+ method public int describeContents();
+ method public static android.support.v4.media.session.PlaybackStateCompat fromPlaybackState(java.lang.Object);
+ method public long getActions();
+ method public long getActiveQueueItemId();
+ method public long getBufferedPosition();
+ method public java.util.List<android.support.v4.media.session.PlaybackStateCompat.CustomAction> getCustomActions();
+ method public int getErrorCode();
+ method public java.lang.CharSequence getErrorMessage();
+ method public android.os.Bundle getExtras();
+ method public long getLastPositionUpdateTime();
+ method public float getPlaybackSpeed();
+ method public java.lang.Object getPlaybackState();
+ method public long getPosition();
+ method public int getState();
+ method public static int toKeyCode(long);
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final long ACTION_FAST_FORWARD = 64L; // 0x40L
+ field public static final long ACTION_PAUSE = 2L; // 0x2L
+ field public static final long ACTION_PLAY = 4L; // 0x4L
+ field public static final long ACTION_PLAY_FROM_MEDIA_ID = 1024L; // 0x400L
+ field public static final long ACTION_PLAY_FROM_SEARCH = 2048L; // 0x800L
+ field public static final long ACTION_PLAY_FROM_URI = 8192L; // 0x2000L
+ field public static final long ACTION_PLAY_PAUSE = 512L; // 0x200L
+ field public static final long ACTION_PREPARE = 16384L; // 0x4000L
+ field public static final long ACTION_PREPARE_FROM_MEDIA_ID = 32768L; // 0x8000L
+ field public static final long ACTION_PREPARE_FROM_SEARCH = 65536L; // 0x10000L
+ field public static final long ACTION_PREPARE_FROM_URI = 131072L; // 0x20000L
+ field public static final long ACTION_REWIND = 8L; // 0x8L
+ field public static final long ACTION_SEEK_TO = 256L; // 0x100L
+ field public static final long ACTION_SET_CAPTIONING_ENABLED = 1048576L; // 0x100000L
+ field public static final long ACTION_SET_RATING = 128L; // 0x80L
+ field public static final long ACTION_SET_REPEAT_MODE = 262144L; // 0x40000L
+ field public static final long ACTION_SET_SHUFFLE_MODE_ENABLED = 524288L; // 0x80000L
+ field public static final long ACTION_SKIP_TO_NEXT = 32L; // 0x20L
+ field public static final long ACTION_SKIP_TO_PREVIOUS = 16L; // 0x10L
+ field public static final long ACTION_SKIP_TO_QUEUE_ITEM = 4096L; // 0x1000L
+ field public static final long ACTION_STOP = 1L; // 0x1L
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.session.PlaybackStateCompat> CREATOR;
+ field public static final int ERROR_CODE_ACTION_ABORTED = 10; // 0xa
+ field public static final int ERROR_CODE_APP_ERROR = 1; // 0x1
+ field public static final int ERROR_CODE_AUTHENTICATION_EXPIRED = 3; // 0x3
+ field public static final int ERROR_CODE_CONCURRENT_STREAM_LIMIT = 5; // 0x5
+ field public static final int ERROR_CODE_CONTENT_ALREADY_PLAYING = 8; // 0x8
+ field public static final int ERROR_CODE_END_OF_QUEUE = 11; // 0xb
+ field public static final int ERROR_CODE_NOT_AVAILABLE_IN_REGION = 7; // 0x7
+ field public static final int ERROR_CODE_NOT_SUPPORTED = 2; // 0x2
+ field public static final int ERROR_CODE_PARENTAL_CONTROL_RESTRICTED = 6; // 0x6
+ field public static final int ERROR_CODE_PREMIUM_ACCOUNT_REQUIRED = 4; // 0x4
+ field public static final int ERROR_CODE_SKIP_LIMIT_REACHED = 9; // 0x9
+ field public static final int ERROR_CODE_UNKNOWN_ERROR = 0; // 0x0
+ field public static final long PLAYBACK_POSITION_UNKNOWN = -1L; // 0xffffffffffffffffL
+ field public static final int REPEAT_MODE_ALL = 2; // 0x2
+ field public static final int REPEAT_MODE_GROUP = 3; // 0x3
+ field public static final int REPEAT_MODE_NONE = 0; // 0x0
+ field public static final int REPEAT_MODE_ONE = 1; // 0x1
+ field public static final int SHUFFLE_MODE_ALL = 1; // 0x1
+ field public static final int SHUFFLE_MODE_GROUP = 2; // 0x2
+ field public static final int SHUFFLE_MODE_NONE = 0; // 0x0
+ field public static final int STATE_BUFFERING = 6; // 0x6
+ field public static final int STATE_CONNECTING = 8; // 0x8
+ field public static final int STATE_ERROR = 7; // 0x7
+ field public static final int STATE_FAST_FORWARDING = 4; // 0x4
+ field public static final int STATE_NONE = 0; // 0x0
+ field public static final int STATE_PAUSED = 2; // 0x2
+ field public static final int STATE_PLAYING = 3; // 0x3
+ field public static final int STATE_REWINDING = 5; // 0x5
+ field public static final int STATE_SKIPPING_TO_NEXT = 10; // 0xa
+ field public static final int STATE_SKIPPING_TO_PREVIOUS = 9; // 0x9
+ field public static final int STATE_SKIPPING_TO_QUEUE_ITEM = 11; // 0xb
+ field public static final int STATE_STOPPED = 1; // 0x1
+ }
+
+ public static final class PlaybackStateCompat.Builder {
+ ctor public PlaybackStateCompat.Builder();
+ ctor public PlaybackStateCompat.Builder(android.support.v4.media.session.PlaybackStateCompat);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder addCustomAction(java.lang.String, java.lang.String, int);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder addCustomAction(android.support.v4.media.session.PlaybackStateCompat.CustomAction);
+ method public android.support.v4.media.session.PlaybackStateCompat build();
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder setActions(long);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder setActiveQueueItemId(long);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder setBufferedPosition(long);
+ method public deprecated android.support.v4.media.session.PlaybackStateCompat.Builder setErrorMessage(java.lang.CharSequence);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder setErrorMessage(int, java.lang.CharSequence);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder setExtras(android.os.Bundle);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder setState(int, long, float);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder setState(int, long, float, long);
+ }
+
+ public static final class PlaybackStateCompat.CustomAction implements android.os.Parcelable {
+ method public int describeContents();
+ method public static android.support.v4.media.session.PlaybackStateCompat.CustomAction fromCustomAction(java.lang.Object);
+ method public java.lang.String getAction();
+ method public java.lang.Object getCustomAction();
+ method public android.os.Bundle getExtras();
+ method public int getIcon();
+ method public java.lang.CharSequence getName();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.session.PlaybackStateCompat.CustomAction> CREATOR;
+ }
+
+ public static final class PlaybackStateCompat.CustomAction.Builder {
+ ctor public PlaybackStateCompat.CustomAction.Builder(java.lang.String, java.lang.CharSequence, int);
+ method public android.support.v4.media.session.PlaybackStateCompat.CustomAction build();
+ method public android.support.v4.media.session.PlaybackStateCompat.CustomAction.Builder setExtras(android.os.Bundle);
+ }
+
+}
+
diff --git a/media-compat/api/27.0.0.txt b/media-compat/api/27.0.0.txt
new file mode 100644
index 0000000..b53de68
--- /dev/null
+++ b/media-compat/api/27.0.0.txt
@@ -0,0 +1,649 @@
+package android.support.v4.media {
+
+ public class AudioAttributesCompat {
+ method public int getContentType();
+ method public int getFlags();
+ method public int getLegacyStreamType();
+ method public int getUsage();
+ method public int getVolumeControlStream();
+ method public java.lang.Object unwrap();
+ method public static android.support.v4.media.AudioAttributesCompat wrap(java.lang.Object);
+ field public static final int CONTENT_TYPE_MOVIE = 3; // 0x3
+ field public static final int CONTENT_TYPE_MUSIC = 2; // 0x2
+ field public static final int CONTENT_TYPE_SONIFICATION = 4; // 0x4
+ field public static final int CONTENT_TYPE_SPEECH = 1; // 0x1
+ field public static final int CONTENT_TYPE_UNKNOWN = 0; // 0x0
+ field public static final int FLAG_AUDIBILITY_ENFORCED = 1; // 0x1
+ field public static final int FLAG_HW_AV_SYNC = 16; // 0x10
+ field public static final int USAGE_ALARM = 4; // 0x4
+ field public static final int USAGE_ASSISTANCE_ACCESSIBILITY = 11; // 0xb
+ field public static final int USAGE_ASSISTANCE_NAVIGATION_GUIDANCE = 12; // 0xc
+ field public static final int USAGE_ASSISTANCE_SONIFICATION = 13; // 0xd
+ field public static final int USAGE_ASSISTANT = 16; // 0x10
+ field public static final int USAGE_GAME = 14; // 0xe
+ field public static final int USAGE_MEDIA = 1; // 0x1
+ field public static final int USAGE_NOTIFICATION = 5; // 0x5
+ field public static final int USAGE_NOTIFICATION_COMMUNICATION_DELAYED = 9; // 0x9
+ field public static final int USAGE_NOTIFICATION_COMMUNICATION_INSTANT = 8; // 0x8
+ field public static final int USAGE_NOTIFICATION_COMMUNICATION_REQUEST = 7; // 0x7
+ field public static final int USAGE_NOTIFICATION_EVENT = 10; // 0xa
+ field public static final int USAGE_NOTIFICATION_RINGTONE = 6; // 0x6
+ field public static final int USAGE_UNKNOWN = 0; // 0x0
+ field public static final int USAGE_VOICE_COMMUNICATION = 2; // 0x2
+ field public static final int USAGE_VOICE_COMMUNICATION_SIGNALLING = 3; // 0x3
+ }
+
+ public static class AudioAttributesCompat.Builder {
+ ctor public AudioAttributesCompat.Builder();
+ ctor public AudioAttributesCompat.Builder(android.support.v4.media.AudioAttributesCompat);
+ method public android.support.v4.media.AudioAttributesCompat build();
+ method public android.support.v4.media.AudioAttributesCompat.Builder setContentType(int);
+ method public android.support.v4.media.AudioAttributesCompat.Builder setFlags(int);
+ method public android.support.v4.media.AudioAttributesCompat.Builder setLegacyStreamType(int);
+ method public android.support.v4.media.AudioAttributesCompat.Builder setUsage(int);
+ }
+
+ public final class MediaBrowserCompat {
+ ctor public MediaBrowserCompat(android.content.Context, android.content.ComponentName, android.support.v4.media.MediaBrowserCompat.ConnectionCallback, android.os.Bundle);
+ method public void connect();
+ method public void disconnect();
+ method public android.os.Bundle getExtras();
+ method public void getItem(java.lang.String, android.support.v4.media.MediaBrowserCompat.ItemCallback);
+ method public java.lang.String getRoot();
+ method public android.content.ComponentName getServiceComponent();
+ method public android.support.v4.media.session.MediaSessionCompat.Token getSessionToken();
+ method public boolean isConnected();
+ method public void search(java.lang.String, android.os.Bundle, android.support.v4.media.MediaBrowserCompat.SearchCallback);
+ method public void sendCustomAction(java.lang.String, android.os.Bundle, android.support.v4.media.MediaBrowserCompat.CustomActionCallback);
+ method public void subscribe(java.lang.String, android.support.v4.media.MediaBrowserCompat.SubscriptionCallback);
+ method public void subscribe(java.lang.String, android.os.Bundle, android.support.v4.media.MediaBrowserCompat.SubscriptionCallback);
+ method public void unsubscribe(java.lang.String);
+ method public void unsubscribe(java.lang.String, android.support.v4.media.MediaBrowserCompat.SubscriptionCallback);
+ field public static final java.lang.String CUSTOM_ACTION_DOWNLOAD = "android.support.v4.media.action.DOWNLOAD";
+ field public static final java.lang.String CUSTOM_ACTION_REMOVE_DOWNLOADED_FILE = "android.support.v4.media.action.REMOVE_DOWNLOADED_FILE";
+ field public static final java.lang.String EXTRA_DOWNLOAD_PROGRESS = "android.media.browse.extra.DOWNLOAD_PROGRESS";
+ field public static final java.lang.String EXTRA_MEDIA_ID = "android.media.browse.extra.MEDIA_ID";
+ field public static final java.lang.String EXTRA_PAGE = "android.media.browse.extra.PAGE";
+ field public static final java.lang.String EXTRA_PAGE_SIZE = "android.media.browse.extra.PAGE_SIZE";
+ }
+
+ public static class MediaBrowserCompat.ConnectionCallback {
+ ctor public MediaBrowserCompat.ConnectionCallback();
+ method public void onConnected();
+ method public void onConnectionFailed();
+ method public void onConnectionSuspended();
+ }
+
+ public static abstract class MediaBrowserCompat.CustomActionCallback {
+ ctor public MediaBrowserCompat.CustomActionCallback();
+ method public void onError(java.lang.String, android.os.Bundle, android.os.Bundle);
+ method public void onProgressUpdate(java.lang.String, android.os.Bundle, android.os.Bundle);
+ method public void onResult(java.lang.String, android.os.Bundle, android.os.Bundle);
+ }
+
+ public static abstract class MediaBrowserCompat.ItemCallback {
+ ctor public MediaBrowserCompat.ItemCallback();
+ method public void onError(java.lang.String);
+ method public void onItemLoaded(android.support.v4.media.MediaBrowserCompat.MediaItem);
+ }
+
+ public static class MediaBrowserCompat.MediaItem implements android.os.Parcelable {
+ ctor public MediaBrowserCompat.MediaItem(android.support.v4.media.MediaDescriptionCompat, int);
+ method public int describeContents();
+ method public static android.support.v4.media.MediaBrowserCompat.MediaItem fromMediaItem(java.lang.Object);
+ method public static java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem> fromMediaItemList(java.util.List<?>);
+ method public android.support.v4.media.MediaDescriptionCompat getDescription();
+ method public int getFlags();
+ method public java.lang.String getMediaId();
+ method public boolean isBrowsable();
+ method public boolean isPlayable();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.MediaBrowserCompat.MediaItem> CREATOR;
+ field public static final int FLAG_BROWSABLE = 1; // 0x1
+ field public static final int FLAG_PLAYABLE = 2; // 0x2
+ }
+
+ public static abstract class MediaBrowserCompat.SearchCallback {
+ ctor public MediaBrowserCompat.SearchCallback();
+ method public void onError(java.lang.String, android.os.Bundle);
+ method public void onSearchResult(java.lang.String, android.os.Bundle, java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem>);
+ }
+
+ public static abstract class MediaBrowserCompat.SubscriptionCallback {
+ ctor public MediaBrowserCompat.SubscriptionCallback();
+ method public void onChildrenLoaded(java.lang.String, java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem>);
+ method public void onChildrenLoaded(java.lang.String, java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem>, android.os.Bundle);
+ method public void onError(java.lang.String);
+ method public void onError(java.lang.String, android.os.Bundle);
+ }
+
+ public abstract class MediaBrowserServiceCompat extends android.app.Service {
+ ctor public MediaBrowserServiceCompat();
+ method public void dump(java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
+ method public final android.os.Bundle getBrowserRootHints();
+ method public android.support.v4.media.session.MediaSessionCompat.Token getSessionToken();
+ method public void notifyChildrenChanged(java.lang.String);
+ method public void notifyChildrenChanged(java.lang.String, android.os.Bundle);
+ method public android.os.IBinder onBind(android.content.Intent);
+ method public void onCustomAction(java.lang.String, android.os.Bundle, android.support.v4.media.MediaBrowserServiceCompat.Result<android.os.Bundle>);
+ method public abstract android.support.v4.media.MediaBrowserServiceCompat.BrowserRoot onGetRoot(java.lang.String, int, android.os.Bundle);
+ method public abstract void onLoadChildren(java.lang.String, android.support.v4.media.MediaBrowserServiceCompat.Result<java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem>>);
+ method public void onLoadChildren(java.lang.String, android.support.v4.media.MediaBrowserServiceCompat.Result<java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem>>, android.os.Bundle);
+ method public void onLoadItem(java.lang.String, android.support.v4.media.MediaBrowserServiceCompat.Result<android.support.v4.media.MediaBrowserCompat.MediaItem>);
+ method public void onSearch(java.lang.String, android.os.Bundle, android.support.v4.media.MediaBrowserServiceCompat.Result<java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem>>);
+ method public void setSessionToken(android.support.v4.media.session.MediaSessionCompat.Token);
+ field public static final java.lang.String SERVICE_INTERFACE = "android.media.browse.MediaBrowserService";
+ }
+
+ public static final class MediaBrowserServiceCompat.BrowserRoot {
+ ctor public MediaBrowserServiceCompat.BrowserRoot(java.lang.String, android.os.Bundle);
+ method public android.os.Bundle getExtras();
+ method public java.lang.String getRootId();
+ field public static final java.lang.String EXTRA_OFFLINE = "android.service.media.extra.OFFLINE";
+ field public static final java.lang.String EXTRA_RECENT = "android.service.media.extra.RECENT";
+ field public static final java.lang.String EXTRA_SUGGESTED = "android.service.media.extra.SUGGESTED";
+ field public static final deprecated java.lang.String EXTRA_SUGGESTION_KEYWORDS = "android.service.media.extra.SUGGESTION_KEYWORDS";
+ }
+
+ public static class MediaBrowserServiceCompat.Result<T> {
+ method public void detach();
+ method public void sendError(android.os.Bundle);
+ method public void sendProgressUpdate(android.os.Bundle);
+ method public void sendResult(T);
+ }
+
+ public final class MediaDescriptionCompat implements android.os.Parcelable {
+ method public int describeContents();
+ method public static android.support.v4.media.MediaDescriptionCompat fromMediaDescription(java.lang.Object);
+ method public java.lang.CharSequence getDescription();
+ method public android.os.Bundle getExtras();
+ method public android.graphics.Bitmap getIconBitmap();
+ method public android.net.Uri getIconUri();
+ method public java.lang.Object getMediaDescription();
+ method public java.lang.String getMediaId();
+ method public android.net.Uri getMediaUri();
+ method public java.lang.CharSequence getSubtitle();
+ method public java.lang.CharSequence getTitle();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final long BT_FOLDER_TYPE_ALBUMS = 2L; // 0x2L
+ field public static final long BT_FOLDER_TYPE_ARTISTS = 3L; // 0x3L
+ field public static final long BT_FOLDER_TYPE_GENRES = 4L; // 0x4L
+ field public static final long BT_FOLDER_TYPE_MIXED = 0L; // 0x0L
+ field public static final long BT_FOLDER_TYPE_PLAYLISTS = 5L; // 0x5L
+ field public static final long BT_FOLDER_TYPE_TITLES = 1L; // 0x1L
+ field public static final long BT_FOLDER_TYPE_YEARS = 6L; // 0x6L
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.MediaDescriptionCompat> CREATOR;
+ field public static final java.lang.String EXTRA_BT_FOLDER_TYPE = "android.media.extra.BT_FOLDER_TYPE";
+ field public static final java.lang.String EXTRA_DOWNLOAD_STATUS = "android.media.extra.DOWNLOAD_STATUS";
+ field public static final long STATUS_DOWNLOADED = 2L; // 0x2L
+ field public static final long STATUS_DOWNLOADING = 1L; // 0x1L
+ field public static final long STATUS_NOT_DOWNLOADED = 0L; // 0x0L
+ }
+
+ public static final class MediaDescriptionCompat.Builder {
+ ctor public MediaDescriptionCompat.Builder();
+ method public android.support.v4.media.MediaDescriptionCompat build();
+ method public android.support.v4.media.MediaDescriptionCompat.Builder setDescription(java.lang.CharSequence);
+ method public android.support.v4.media.MediaDescriptionCompat.Builder setExtras(android.os.Bundle);
+ method public android.support.v4.media.MediaDescriptionCompat.Builder setIconBitmap(android.graphics.Bitmap);
+ method public android.support.v4.media.MediaDescriptionCompat.Builder setIconUri(android.net.Uri);
+ method public android.support.v4.media.MediaDescriptionCompat.Builder setMediaId(java.lang.String);
+ method public android.support.v4.media.MediaDescriptionCompat.Builder setMediaUri(android.net.Uri);
+ method public android.support.v4.media.MediaDescriptionCompat.Builder setSubtitle(java.lang.CharSequence);
+ method public android.support.v4.media.MediaDescriptionCompat.Builder setTitle(java.lang.CharSequence);
+ }
+
+ public final class MediaMetadataCompat implements android.os.Parcelable {
+ method public boolean containsKey(java.lang.String);
+ method public int describeContents();
+ method public static android.support.v4.media.MediaMetadataCompat fromMediaMetadata(java.lang.Object);
+ method public android.graphics.Bitmap getBitmap(java.lang.String);
+ method public android.os.Bundle getBundle();
+ method public android.support.v4.media.MediaDescriptionCompat getDescription();
+ method public long getLong(java.lang.String);
+ method public java.lang.Object getMediaMetadata();
+ method public android.support.v4.media.RatingCompat getRating(java.lang.String);
+ method public java.lang.String getString(java.lang.String);
+ method public java.lang.CharSequence getText(java.lang.String);
+ method public java.util.Set<java.lang.String> keySet();
+ method public int size();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.MediaMetadataCompat> CREATOR;
+ field public static final java.lang.String METADATA_KEY_ADVERTISEMENT = "android.media.metadata.ADVERTISEMENT";
+ field public static final java.lang.String METADATA_KEY_ALBUM = "android.media.metadata.ALBUM";
+ field public static final java.lang.String METADATA_KEY_ALBUM_ART = "android.media.metadata.ALBUM_ART";
+ field public static final java.lang.String METADATA_KEY_ALBUM_ARTIST = "android.media.metadata.ALBUM_ARTIST";
+ field public static final java.lang.String METADATA_KEY_ALBUM_ART_URI = "android.media.metadata.ALBUM_ART_URI";
+ field public static final java.lang.String METADATA_KEY_ART = "android.media.metadata.ART";
+ field public static final java.lang.String METADATA_KEY_ARTIST = "android.media.metadata.ARTIST";
+ field public static final java.lang.String METADATA_KEY_ART_URI = "android.media.metadata.ART_URI";
+ field public static final java.lang.String METADATA_KEY_AUTHOR = "android.media.metadata.AUTHOR";
+ field public static final java.lang.String METADATA_KEY_BT_FOLDER_TYPE = "android.media.metadata.BT_FOLDER_TYPE";
+ field public static final java.lang.String METADATA_KEY_COMPILATION = "android.media.metadata.COMPILATION";
+ field public static final java.lang.String METADATA_KEY_COMPOSER = "android.media.metadata.COMPOSER";
+ field public static final java.lang.String METADATA_KEY_DATE = "android.media.metadata.DATE";
+ field public static final java.lang.String METADATA_KEY_DISC_NUMBER = "android.media.metadata.DISC_NUMBER";
+ field public static final java.lang.String METADATA_KEY_DISPLAY_DESCRIPTION = "android.media.metadata.DISPLAY_DESCRIPTION";
+ field public static final java.lang.String METADATA_KEY_DISPLAY_ICON = "android.media.metadata.DISPLAY_ICON";
+ field public static final java.lang.String METADATA_KEY_DISPLAY_ICON_URI = "android.media.metadata.DISPLAY_ICON_URI";
+ field public static final java.lang.String METADATA_KEY_DISPLAY_SUBTITLE = "android.media.metadata.DISPLAY_SUBTITLE";
+ field public static final java.lang.String METADATA_KEY_DISPLAY_TITLE = "android.media.metadata.DISPLAY_TITLE";
+ field public static final java.lang.String METADATA_KEY_DOWNLOAD_STATUS = "android.media.metadata.DOWNLOAD_STATUS";
+ field public static final java.lang.String METADATA_KEY_DURATION = "android.media.metadata.DURATION";
+ field public static final java.lang.String METADATA_KEY_GENRE = "android.media.metadata.GENRE";
+ field public static final java.lang.String METADATA_KEY_MEDIA_ID = "android.media.metadata.MEDIA_ID";
+ field public static final java.lang.String METADATA_KEY_MEDIA_URI = "android.media.metadata.MEDIA_URI";
+ field public static final java.lang.String METADATA_KEY_NUM_TRACKS = "android.media.metadata.NUM_TRACKS";
+ field public static final java.lang.String METADATA_KEY_RATING = "android.media.metadata.RATING";
+ field public static final java.lang.String METADATA_KEY_TITLE = "android.media.metadata.TITLE";
+ field public static final java.lang.String METADATA_KEY_TRACK_NUMBER = "android.media.metadata.TRACK_NUMBER";
+ field public static final java.lang.String METADATA_KEY_USER_RATING = "android.media.metadata.USER_RATING";
+ field public static final java.lang.String METADATA_KEY_WRITER = "android.media.metadata.WRITER";
+ field public static final java.lang.String METADATA_KEY_YEAR = "android.media.metadata.YEAR";
+ }
+
+ public static final class MediaMetadataCompat.Builder {
+ ctor public MediaMetadataCompat.Builder();
+ ctor public MediaMetadataCompat.Builder(android.support.v4.media.MediaMetadataCompat);
+ method public android.support.v4.media.MediaMetadataCompat build();
+ method public android.support.v4.media.MediaMetadataCompat.Builder putBitmap(java.lang.String, android.graphics.Bitmap);
+ method public android.support.v4.media.MediaMetadataCompat.Builder putLong(java.lang.String, long);
+ method public android.support.v4.media.MediaMetadataCompat.Builder putRating(java.lang.String, android.support.v4.media.RatingCompat);
+ method public android.support.v4.media.MediaMetadataCompat.Builder putString(java.lang.String, java.lang.String);
+ method public android.support.v4.media.MediaMetadataCompat.Builder putText(java.lang.String, java.lang.CharSequence);
+ }
+
+ public final class RatingCompat implements android.os.Parcelable {
+ method public int describeContents();
+ method public static android.support.v4.media.RatingCompat fromRating(java.lang.Object);
+ method public float getPercentRating();
+ method public java.lang.Object getRating();
+ method public int getRatingStyle();
+ method public float getStarRating();
+ method public boolean hasHeart();
+ method public boolean isRated();
+ method public boolean isThumbUp();
+ method public static android.support.v4.media.RatingCompat newHeartRating(boolean);
+ method public static android.support.v4.media.RatingCompat newPercentageRating(float);
+ method public static android.support.v4.media.RatingCompat newStarRating(int, float);
+ method public static android.support.v4.media.RatingCompat newThumbRating(boolean);
+ method public static android.support.v4.media.RatingCompat newUnratedRating(int);
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.RatingCompat> CREATOR;
+ field public static final int RATING_3_STARS = 3; // 0x3
+ field public static final int RATING_4_STARS = 4; // 0x4
+ field public static final int RATING_5_STARS = 5; // 0x5
+ field public static final int RATING_HEART = 1; // 0x1
+ field public static final int RATING_NONE = 0; // 0x0
+ field public static final int RATING_PERCENTAGE = 6; // 0x6
+ field public static final int RATING_THUMB_UP_DOWN = 2; // 0x2
+ }
+
+ public abstract class VolumeProviderCompat {
+ ctor public VolumeProviderCompat(int, int, int);
+ method public final int getCurrentVolume();
+ method public final int getMaxVolume();
+ method public final int getVolumeControl();
+ method public java.lang.Object getVolumeProvider();
+ method public void onAdjustVolume(int);
+ method public void onSetVolumeTo(int);
+ method public void setCallback(android.support.v4.media.VolumeProviderCompat.Callback);
+ method public final void setCurrentVolume(int);
+ field public static final int VOLUME_CONTROL_ABSOLUTE = 2; // 0x2
+ field public static final int VOLUME_CONTROL_FIXED = 0; // 0x0
+ field public static final int VOLUME_CONTROL_RELATIVE = 1; // 0x1
+ }
+
+ public static abstract class VolumeProviderCompat.Callback {
+ ctor public VolumeProviderCompat.Callback();
+ method public abstract void onVolumeChanged(android.support.v4.media.VolumeProviderCompat);
+ }
+
+}
+
+package android.support.v4.media.app {
+
+ public class NotificationCompat {
+ }
+
+ public static class NotificationCompat.DecoratedMediaCustomViewStyle extends android.support.v4.media.app.NotificationCompat.MediaStyle {
+ ctor public NotificationCompat.DecoratedMediaCustomViewStyle();
+ }
+
+ public static class NotificationCompat.MediaStyle extends android.support.v4.app.NotificationCompat.Style {
+ ctor public NotificationCompat.MediaStyle();
+ ctor public NotificationCompat.MediaStyle(android.support.v4.app.NotificationCompat.Builder);
+ method public static android.support.v4.media.session.MediaSessionCompat.Token getMediaSession(android.app.Notification);
+ method public android.support.v4.media.app.NotificationCompat.MediaStyle setCancelButtonIntent(android.app.PendingIntent);
+ method public android.support.v4.media.app.NotificationCompat.MediaStyle setMediaSession(android.support.v4.media.session.MediaSessionCompat.Token);
+ method public android.support.v4.media.app.NotificationCompat.MediaStyle setShowActionsInCompactView(int...);
+ method public android.support.v4.media.app.NotificationCompat.MediaStyle setShowCancelButton(boolean);
+ }
+
+}
+
+package android.support.v4.media.session {
+
+ public class MediaButtonReceiver extends android.content.BroadcastReceiver {
+ ctor public MediaButtonReceiver();
+ method public static android.app.PendingIntent buildMediaButtonPendingIntent(android.content.Context, long);
+ method public static android.app.PendingIntent buildMediaButtonPendingIntent(android.content.Context, android.content.ComponentName, long);
+ method public static android.view.KeyEvent handleIntent(android.support.v4.media.session.MediaSessionCompat, android.content.Intent);
+ method public void onReceive(android.content.Context, android.content.Intent);
+ }
+
+ public final class MediaControllerCompat {
+ ctor public MediaControllerCompat(android.content.Context, android.support.v4.media.session.MediaSessionCompat);
+ ctor public MediaControllerCompat(android.content.Context, android.support.v4.media.session.MediaSessionCompat.Token) throws android.os.RemoteException;
+ method public void addQueueItem(android.support.v4.media.MediaDescriptionCompat);
+ method public void addQueueItem(android.support.v4.media.MediaDescriptionCompat, int);
+ method public void adjustVolume(int, int);
+ method public boolean dispatchMediaButtonEvent(android.view.KeyEvent);
+ method public android.os.Bundle getExtras();
+ method public long getFlags();
+ method public static android.support.v4.media.session.MediaControllerCompat getMediaController(android.app.Activity);
+ method public java.lang.Object getMediaController();
+ method public android.support.v4.media.MediaMetadataCompat getMetadata();
+ method public java.lang.String getPackageName();
+ method public android.support.v4.media.session.MediaControllerCompat.PlaybackInfo getPlaybackInfo();
+ method public android.support.v4.media.session.PlaybackStateCompat getPlaybackState();
+ method public java.util.List<android.support.v4.media.session.MediaSessionCompat.QueueItem> getQueue();
+ method public java.lang.CharSequence getQueueTitle();
+ method public int getRatingType();
+ method public int getRepeatMode();
+ method public android.app.PendingIntent getSessionActivity();
+ method public android.support.v4.media.session.MediaSessionCompat.Token getSessionToken();
+ method public int getShuffleMode();
+ method public android.support.v4.media.session.MediaControllerCompat.TransportControls getTransportControls();
+ method public boolean isCaptioningEnabled();
+ method public boolean isSessionReady();
+ method public void registerCallback(android.support.v4.media.session.MediaControllerCompat.Callback);
+ method public void registerCallback(android.support.v4.media.session.MediaControllerCompat.Callback, android.os.Handler);
+ method public void removeQueueItem(android.support.v4.media.MediaDescriptionCompat);
+ method public deprecated void removeQueueItemAt(int);
+ method public void sendCommand(java.lang.String, android.os.Bundle, android.os.ResultReceiver);
+ method public static void setMediaController(android.app.Activity, android.support.v4.media.session.MediaControllerCompat);
+ method public void setVolumeTo(int, int);
+ method public void unregisterCallback(android.support.v4.media.session.MediaControllerCompat.Callback);
+ }
+
+ public static abstract class MediaControllerCompat.Callback implements android.os.IBinder.DeathRecipient {
+ ctor public MediaControllerCompat.Callback();
+ method public void binderDied();
+ method public void onAudioInfoChanged(android.support.v4.media.session.MediaControllerCompat.PlaybackInfo);
+ method public void onCaptioningEnabledChanged(boolean);
+ method public void onExtrasChanged(android.os.Bundle);
+ method public void onMetadataChanged(android.support.v4.media.MediaMetadataCompat);
+ method public void onPlaybackStateChanged(android.support.v4.media.session.PlaybackStateCompat);
+ method public void onQueueChanged(java.util.List<android.support.v4.media.session.MediaSessionCompat.QueueItem>);
+ method public void onQueueTitleChanged(java.lang.CharSequence);
+ method public void onRepeatModeChanged(int);
+ method public void onSessionDestroyed();
+ method public void onSessionEvent(java.lang.String, android.os.Bundle);
+ method public void onSessionReady();
+ method public void onShuffleModeChanged(int);
+ }
+
+ public static final class MediaControllerCompat.PlaybackInfo {
+ method public int getAudioStream();
+ method public int getCurrentVolume();
+ method public int getMaxVolume();
+ method public int getPlaybackType();
+ method public int getVolumeControl();
+ field public static final int PLAYBACK_TYPE_LOCAL = 1; // 0x1
+ field public static final int PLAYBACK_TYPE_REMOTE = 2; // 0x2
+ }
+
+ public static abstract class MediaControllerCompat.TransportControls {
+ method public abstract void fastForward();
+ method public abstract void pause();
+ method public abstract void play();
+ method public abstract void playFromMediaId(java.lang.String, android.os.Bundle);
+ method public abstract void playFromSearch(java.lang.String, android.os.Bundle);
+ method public abstract void playFromUri(android.net.Uri, android.os.Bundle);
+ method public abstract void prepare();
+ method public abstract void prepareFromMediaId(java.lang.String, android.os.Bundle);
+ method public abstract void prepareFromSearch(java.lang.String, android.os.Bundle);
+ method public abstract void prepareFromUri(android.net.Uri, android.os.Bundle);
+ method public abstract void rewind();
+ method public abstract void seekTo(long);
+ method public abstract void sendCustomAction(android.support.v4.media.session.PlaybackStateCompat.CustomAction, android.os.Bundle);
+ method public abstract void sendCustomAction(java.lang.String, android.os.Bundle);
+ method public abstract void setCaptioningEnabled(boolean);
+ method public abstract void setRating(android.support.v4.media.RatingCompat);
+ method public abstract void setRating(android.support.v4.media.RatingCompat, android.os.Bundle);
+ method public abstract void setRepeatMode(int);
+ method public abstract void setShuffleMode(int);
+ method public abstract void skipToNext();
+ method public abstract void skipToPrevious();
+ method public abstract void skipToQueueItem(long);
+ method public abstract void stop();
+ field public static final java.lang.String EXTRA_LEGACY_STREAM_TYPE = "android.media.session.extra.LEGACY_STREAM_TYPE";
+ }
+
+ public class MediaSessionCompat {
+ ctor public MediaSessionCompat(android.content.Context, java.lang.String);
+ ctor public MediaSessionCompat(android.content.Context, java.lang.String, android.content.ComponentName, android.app.PendingIntent);
+ method public void addOnActiveChangeListener(android.support.v4.media.session.MediaSessionCompat.OnActiveChangeListener);
+ method public static android.support.v4.media.session.MediaSessionCompat fromMediaSession(android.content.Context, java.lang.Object);
+ method public android.support.v4.media.session.MediaControllerCompat getController();
+ method public java.lang.Object getMediaSession();
+ method public java.lang.Object getRemoteControlClient();
+ method public android.support.v4.media.session.MediaSessionCompat.Token getSessionToken();
+ method public boolean isActive();
+ method public void release();
+ method public void removeOnActiveChangeListener(android.support.v4.media.session.MediaSessionCompat.OnActiveChangeListener);
+ method public void sendSessionEvent(java.lang.String, android.os.Bundle);
+ method public void setActive(boolean);
+ method public void setCallback(android.support.v4.media.session.MediaSessionCompat.Callback);
+ method public void setCallback(android.support.v4.media.session.MediaSessionCompat.Callback, android.os.Handler);
+ method public void setCaptioningEnabled(boolean);
+ method public void setExtras(android.os.Bundle);
+ method public void setFlags(int);
+ method public void setMediaButtonReceiver(android.app.PendingIntent);
+ method public void setMetadata(android.support.v4.media.MediaMetadataCompat);
+ method public void setPlaybackState(android.support.v4.media.session.PlaybackStateCompat);
+ method public void setPlaybackToLocal(int);
+ method public void setPlaybackToRemote(android.support.v4.media.VolumeProviderCompat);
+ method public void setQueue(java.util.List<android.support.v4.media.session.MediaSessionCompat.QueueItem>);
+ method public void setQueueTitle(java.lang.CharSequence);
+ method public void setRatingType(int);
+ method public void setRepeatMode(int);
+ method public void setSessionActivity(android.app.PendingIntent);
+ method public void setShuffleMode(int);
+ field public static final java.lang.String ACTION_FLAG_AS_INAPPROPRIATE = "android.support.v4.media.session.action.FLAG_AS_INAPPROPRIATE";
+ field public static final java.lang.String ACTION_FOLLOW = "android.support.v4.media.session.action.FOLLOW";
+ field public static final java.lang.String ACTION_SKIP_AD = "android.support.v4.media.session.action.SKIP_AD";
+ field public static final java.lang.String ACTION_UNFOLLOW = "android.support.v4.media.session.action.UNFOLLOW";
+ field public static final java.lang.String ARGUMENT_MEDIA_ATTRIBUTE = "android.support.v4.media.session.ARGUMENT_MEDIA_ATTRIBUTE";
+ field public static final java.lang.String ARGUMENT_MEDIA_ATTRIBUTE_VALUE = "android.support.v4.media.session.ARGUMENT_MEDIA_ATTRIBUTE_VALUE";
+ field public static final int FLAG_HANDLES_MEDIA_BUTTONS = 1; // 0x1
+ field public static final int FLAG_HANDLES_QUEUE_COMMANDS = 4; // 0x4
+ field public static final int FLAG_HANDLES_TRANSPORT_CONTROLS = 2; // 0x2
+ field public static final int MEDIA_ATTRIBUTE_ALBUM = 1; // 0x1
+ field public static final int MEDIA_ATTRIBUTE_ARTIST = 0; // 0x0
+ field public static final int MEDIA_ATTRIBUTE_PLAYLIST = 2; // 0x2
+ }
+
+ public static abstract class MediaSessionCompat.Callback {
+ ctor public MediaSessionCompat.Callback();
+ method public void onAddQueueItem(android.support.v4.media.MediaDescriptionCompat);
+ method public void onAddQueueItem(android.support.v4.media.MediaDescriptionCompat, int);
+ method public void onCommand(java.lang.String, android.os.Bundle, android.os.ResultReceiver);
+ method public void onCustomAction(java.lang.String, android.os.Bundle);
+ method public void onFastForward();
+ method public boolean onMediaButtonEvent(android.content.Intent);
+ method public void onPause();
+ method public void onPlay();
+ method public void onPlayFromMediaId(java.lang.String, android.os.Bundle);
+ method public void onPlayFromSearch(java.lang.String, android.os.Bundle);
+ method public void onPlayFromUri(android.net.Uri, android.os.Bundle);
+ method public void onPrepare();
+ method public void onPrepareFromMediaId(java.lang.String, android.os.Bundle);
+ method public void onPrepareFromSearch(java.lang.String, android.os.Bundle);
+ method public void onPrepareFromUri(android.net.Uri, android.os.Bundle);
+ method public void onRemoveQueueItem(android.support.v4.media.MediaDescriptionCompat);
+ method public deprecated void onRemoveQueueItemAt(int);
+ method public void onRewind();
+ method public void onSeekTo(long);
+ method public void onSetCaptioningEnabled(boolean);
+ method public void onSetRating(android.support.v4.media.RatingCompat);
+ method public void onSetRating(android.support.v4.media.RatingCompat, android.os.Bundle);
+ method public void onSetRepeatMode(int);
+ method public void onSetShuffleMode(int);
+ method public void onSkipToNext();
+ method public void onSkipToPrevious();
+ method public void onSkipToQueueItem(long);
+ method public void onStop();
+ }
+
+ public static abstract interface MediaSessionCompat.OnActiveChangeListener {
+ method public abstract void onActiveChanged();
+ }
+
+ public static final class MediaSessionCompat.QueueItem implements android.os.Parcelable {
+ ctor public MediaSessionCompat.QueueItem(android.support.v4.media.MediaDescriptionCompat, long);
+ method public int describeContents();
+ method public static android.support.v4.media.session.MediaSessionCompat.QueueItem fromQueueItem(java.lang.Object);
+ method public static java.util.List<android.support.v4.media.session.MediaSessionCompat.QueueItem> fromQueueItemList(java.util.List<?>);
+ method public android.support.v4.media.MediaDescriptionCompat getDescription();
+ method public long getQueueId();
+ method public java.lang.Object getQueueItem();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.session.MediaSessionCompat.QueueItem> CREATOR;
+ field public static final int UNKNOWN_ID = -1; // 0xffffffff
+ }
+
+ public static final class MediaSessionCompat.Token implements android.os.Parcelable {
+ method public int describeContents();
+ method public static android.support.v4.media.session.MediaSessionCompat.Token fromToken(java.lang.Object);
+ method public java.lang.Object getToken();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.session.MediaSessionCompat.Token> CREATOR;
+ }
+
+ public class ParcelableVolumeInfo implements android.os.Parcelable {
+ ctor public ParcelableVolumeInfo(int, int, int, int, int);
+ ctor public ParcelableVolumeInfo(android.os.Parcel);
+ method public int describeContents();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.session.ParcelableVolumeInfo> CREATOR;
+ field public int audioStream;
+ field public int controlType;
+ field public int currentVolume;
+ field public int maxVolume;
+ field public int volumeType;
+ }
+
+ public final class PlaybackStateCompat implements android.os.Parcelable {
+ method public int describeContents();
+ method public static android.support.v4.media.session.PlaybackStateCompat fromPlaybackState(java.lang.Object);
+ method public long getActions();
+ method public long getActiveQueueItemId();
+ method public long getBufferedPosition();
+ method public java.util.List<android.support.v4.media.session.PlaybackStateCompat.CustomAction> getCustomActions();
+ method public int getErrorCode();
+ method public java.lang.CharSequence getErrorMessage();
+ method public android.os.Bundle getExtras();
+ method public long getLastPositionUpdateTime();
+ method public float getPlaybackSpeed();
+ method public java.lang.Object getPlaybackState();
+ method public long getPosition();
+ method public int getState();
+ method public static int toKeyCode(long);
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final long ACTION_FAST_FORWARD = 64L; // 0x40L
+ field public static final long ACTION_PAUSE = 2L; // 0x2L
+ field public static final long ACTION_PLAY = 4L; // 0x4L
+ field public static final long ACTION_PLAY_FROM_MEDIA_ID = 1024L; // 0x400L
+ field public static final long ACTION_PLAY_FROM_SEARCH = 2048L; // 0x800L
+ field public static final long ACTION_PLAY_FROM_URI = 8192L; // 0x2000L
+ field public static final long ACTION_PLAY_PAUSE = 512L; // 0x200L
+ field public static final long ACTION_PREPARE = 16384L; // 0x4000L
+ field public static final long ACTION_PREPARE_FROM_MEDIA_ID = 32768L; // 0x8000L
+ field public static final long ACTION_PREPARE_FROM_SEARCH = 65536L; // 0x10000L
+ field public static final long ACTION_PREPARE_FROM_URI = 131072L; // 0x20000L
+ field public static final long ACTION_REWIND = 8L; // 0x8L
+ field public static final long ACTION_SEEK_TO = 256L; // 0x100L
+ field public static final long ACTION_SET_CAPTIONING_ENABLED = 1048576L; // 0x100000L
+ field public static final long ACTION_SET_RATING = 128L; // 0x80L
+ field public static final long ACTION_SET_REPEAT_MODE = 262144L; // 0x40000L
+ field public static final long ACTION_SET_SHUFFLE_MODE = 2097152L; // 0x200000L
+ field public static final deprecated long ACTION_SET_SHUFFLE_MODE_ENABLED = 524288L; // 0x80000L
+ field public static final long ACTION_SKIP_TO_NEXT = 32L; // 0x20L
+ field public static final long ACTION_SKIP_TO_PREVIOUS = 16L; // 0x10L
+ field public static final long ACTION_SKIP_TO_QUEUE_ITEM = 4096L; // 0x1000L
+ field public static final long ACTION_STOP = 1L; // 0x1L
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.session.PlaybackStateCompat> CREATOR;
+ field public static final int ERROR_CODE_ACTION_ABORTED = 10; // 0xa
+ field public static final int ERROR_CODE_APP_ERROR = 1; // 0x1
+ field public static final int ERROR_CODE_AUTHENTICATION_EXPIRED = 3; // 0x3
+ field public static final int ERROR_CODE_CONCURRENT_STREAM_LIMIT = 5; // 0x5
+ field public static final int ERROR_CODE_CONTENT_ALREADY_PLAYING = 8; // 0x8
+ field public static final int ERROR_CODE_END_OF_QUEUE = 11; // 0xb
+ field public static final int ERROR_CODE_NOT_AVAILABLE_IN_REGION = 7; // 0x7
+ field public static final int ERROR_CODE_NOT_SUPPORTED = 2; // 0x2
+ field public static final int ERROR_CODE_PARENTAL_CONTROL_RESTRICTED = 6; // 0x6
+ field public static final int ERROR_CODE_PREMIUM_ACCOUNT_REQUIRED = 4; // 0x4
+ field public static final int ERROR_CODE_SKIP_LIMIT_REACHED = 9; // 0x9
+ field public static final int ERROR_CODE_UNKNOWN_ERROR = 0; // 0x0
+ field public static final long PLAYBACK_POSITION_UNKNOWN = -1L; // 0xffffffffffffffffL
+ field public static final int REPEAT_MODE_ALL = 2; // 0x2
+ field public static final int REPEAT_MODE_GROUP = 3; // 0x3
+ field public static final int REPEAT_MODE_INVALID = -1; // 0xffffffff
+ field public static final int REPEAT_MODE_NONE = 0; // 0x0
+ field public static final int REPEAT_MODE_ONE = 1; // 0x1
+ field public static final int SHUFFLE_MODE_ALL = 1; // 0x1
+ field public static final int SHUFFLE_MODE_GROUP = 2; // 0x2
+ field public static final int SHUFFLE_MODE_INVALID = -1; // 0xffffffff
+ field public static final int SHUFFLE_MODE_NONE = 0; // 0x0
+ field public static final int STATE_BUFFERING = 6; // 0x6
+ field public static final int STATE_CONNECTING = 8; // 0x8
+ field public static final int STATE_ERROR = 7; // 0x7
+ field public static final int STATE_FAST_FORWARDING = 4; // 0x4
+ field public static final int STATE_NONE = 0; // 0x0
+ field public static final int STATE_PAUSED = 2; // 0x2
+ field public static final int STATE_PLAYING = 3; // 0x3
+ field public static final int STATE_REWINDING = 5; // 0x5
+ field public static final int STATE_SKIPPING_TO_NEXT = 10; // 0xa
+ field public static final int STATE_SKIPPING_TO_PREVIOUS = 9; // 0x9
+ field public static final int STATE_SKIPPING_TO_QUEUE_ITEM = 11; // 0xb
+ field public static final int STATE_STOPPED = 1; // 0x1
+ }
+
+ public static final class PlaybackStateCompat.Builder {
+ ctor public PlaybackStateCompat.Builder();
+ ctor public PlaybackStateCompat.Builder(android.support.v4.media.session.PlaybackStateCompat);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder addCustomAction(java.lang.String, java.lang.String, int);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder addCustomAction(android.support.v4.media.session.PlaybackStateCompat.CustomAction);
+ method public android.support.v4.media.session.PlaybackStateCompat build();
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder setActions(long);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder setActiveQueueItemId(long);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder setBufferedPosition(long);
+ method public deprecated android.support.v4.media.session.PlaybackStateCompat.Builder setErrorMessage(java.lang.CharSequence);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder setErrorMessage(int, java.lang.CharSequence);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder setExtras(android.os.Bundle);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder setState(int, long, float);
+ method public android.support.v4.media.session.PlaybackStateCompat.Builder setState(int, long, float, long);
+ }
+
+ public static final class PlaybackStateCompat.CustomAction implements android.os.Parcelable {
+ method public int describeContents();
+ method public static android.support.v4.media.session.PlaybackStateCompat.CustomAction fromCustomAction(java.lang.Object);
+ method public java.lang.String getAction();
+ method public java.lang.Object getCustomAction();
+ method public android.os.Bundle getExtras();
+ method public int getIcon();
+ method public java.lang.CharSequence getName();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.session.PlaybackStateCompat.CustomAction> CREATOR;
+ }
+
+ public static final class PlaybackStateCompat.CustomAction.Builder {
+ ctor public PlaybackStateCompat.CustomAction.Builder(java.lang.String, java.lang.CharSequence, int);
+ method public android.support.v4.media.session.PlaybackStateCompat.CustomAction build();
+ method public android.support.v4.media.session.PlaybackStateCompat.CustomAction.Builder setExtras(android.os.Bundle);
+ }
+
+}
+
diff --git a/media-compat/api/current.txt b/media-compat/api/current.txt
index e804e1e..b53de68 100644
--- a/media-compat/api/current.txt
+++ b/media-compat/api/current.txt
@@ -357,7 +357,6 @@
method public android.support.v4.media.session.MediaControllerCompat.TransportControls getTransportControls();
method public boolean isCaptioningEnabled();
method public boolean isSessionReady();
- method public deprecated boolean isShuffleModeEnabled();
method public void registerCallback(android.support.v4.media.session.MediaControllerCompat.Callback);
method public void registerCallback(android.support.v4.media.session.MediaControllerCompat.Callback, android.os.Handler);
method public void removeQueueItem(android.support.v4.media.MediaDescriptionCompat);
@@ -382,7 +381,6 @@
method public void onSessionDestroyed();
method public void onSessionEvent(java.lang.String, android.os.Bundle);
method public void onSessionReady();
- method public deprecated void onShuffleModeChanged(boolean);
method public void onShuffleModeChanged(int);
}
@@ -416,7 +414,6 @@
method public abstract void setRating(android.support.v4.media.RatingCompat, android.os.Bundle);
method public abstract void setRepeatMode(int);
method public abstract void setShuffleMode(int);
- method public abstract deprecated void setShuffleModeEnabled(boolean);
method public abstract void skipToNext();
method public abstract void skipToPrevious();
method public abstract void skipToQueueItem(long);
@@ -454,7 +451,6 @@
method public void setRepeatMode(int);
method public void setSessionActivity(android.app.PendingIntent);
method public void setShuffleMode(int);
- method public deprecated void setShuffleModeEnabled(boolean);
field public static final java.lang.String ACTION_FLAG_AS_INAPPROPRIATE = "android.support.v4.media.session.action.FLAG_AS_INAPPROPRIATE";
field public static final java.lang.String ACTION_FOLLOW = "android.support.v4.media.session.action.FOLLOW";
field public static final java.lang.String ACTION_SKIP_AD = "android.support.v4.media.session.action.SKIP_AD";
@@ -495,7 +491,6 @@
method public void onSetRating(android.support.v4.media.RatingCompat, android.os.Bundle);
method public void onSetRepeatMode(int);
method public void onSetShuffleMode(int);
- method public deprecated void onSetShuffleModeEnabled(boolean);
method public void onSkipToNext();
method public void onSkipToPrevious();
method public void onSkipToQueueItem(long);
diff --git a/media-compat/build.gradle b/media-compat/build.gradle
index 2ea2483..c504996 100644
--- a/media-compat/build.gradle
+++ b/media-compat/build.gradle
@@ -18,8 +18,6 @@
sourceSets {
main.java.srcDirs = [
- 'jellybean-mr2',
- 'kitkat',
'api21',
'api22',
'api23',
diff --git a/media-compat/java/android/support/v4/media/RatingCompat.java b/media-compat/java/android/support/v4/media/RatingCompat.java
index b538cac..e70243f 100644
--- a/media-compat/java/android/support/v4/media/RatingCompat.java
+++ b/media-compat/java/android/support/v4/media/RatingCompat.java
@@ -18,6 +18,7 @@
import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
+import android.media.Rating;
import android.os.Build;
import android.os.Parcel;
import android.os.Parcelable;
@@ -326,25 +327,25 @@
*/
public static RatingCompat fromRating(Object ratingObj) {
if (ratingObj != null && Build.VERSION.SDK_INT >= 19) {
- final int ratingStyle = RatingCompatKitkat.getRatingStyle(ratingObj);
+ final int ratingStyle = ((Rating) ratingObj).getRatingStyle();
final RatingCompat rating;
- if (RatingCompatKitkat.isRated(ratingObj)) {
+ if (((Rating) ratingObj).isRated()) {
switch (ratingStyle) {
case RATING_HEART:
- rating = newHeartRating(RatingCompatKitkat.hasHeart(ratingObj));
+ rating = newHeartRating(((Rating) ratingObj).hasHeart());
break;
case RATING_THUMB_UP_DOWN:
- rating = newThumbRating(RatingCompatKitkat.isThumbUp(ratingObj));
+ rating = newThumbRating(((Rating) ratingObj).isThumbUp());
break;
case RATING_3_STARS:
case RATING_4_STARS:
case RATING_5_STARS:
rating = newStarRating(ratingStyle,
- RatingCompatKitkat.getStarRating(ratingObj));
+ ((Rating) ratingObj).getStarRating());
break;
case RATING_PERCENTAGE:
rating = newPercentageRating(
- RatingCompatKitkat.getPercentRating(ratingObj));
+ ((Rating) ratingObj).getPercentRating());
break;
default:
return null;
@@ -372,25 +373,25 @@
if (isRated()) {
switch (mRatingStyle) {
case RATING_HEART:
- mRatingObj = RatingCompatKitkat.newHeartRating(hasHeart());
+ mRatingObj = Rating.newHeartRating(hasHeart());
break;
case RATING_THUMB_UP_DOWN:
- mRatingObj = RatingCompatKitkat.newThumbRating(isThumbUp());
+ mRatingObj = Rating.newThumbRating(isThumbUp());
break;
case RATING_3_STARS:
case RATING_4_STARS:
case RATING_5_STARS:
- mRatingObj = RatingCompatKitkat.newStarRating(mRatingStyle,
+ mRatingObj = Rating.newStarRating(mRatingStyle,
getStarRating());
break;
case RATING_PERCENTAGE:
- mRatingObj = RatingCompatKitkat.newPercentageRating(getPercentRating());
+ mRatingObj = Rating.newPercentageRating(getPercentRating());
break;
default:
return null;
}
} else {
- mRatingObj = RatingCompatKitkat.newUnratedRating(mRatingStyle);
+ mRatingObj = Rating.newUnratedRating(mRatingStyle);
}
}
return mRatingObj;
diff --git a/media-compat/java/android/support/v4/media/session/IMediaControllerCallback.aidl b/media-compat/java/android/support/v4/media/session/IMediaControllerCallback.aidl
index aeadff6..6777a3f 100644
--- a/media-compat/java/android/support/v4/media/session/IMediaControllerCallback.aidl
+++ b/media-compat/java/android/support/v4/media/session/IMediaControllerCallback.aidl
@@ -38,7 +38,7 @@
void onExtrasChanged(in Bundle extras);
void onVolumeInfoChanged(in ParcelableVolumeInfo info);
void onRepeatModeChanged(int repeatMode);
- void onShuffleModeChangedDeprecated(boolean enabled);
+ void onShuffleModeChangedRemoved(boolean enabled);
void onCaptioningEnabledChanged(boolean enabled);
void onShuffleModeChanged(int shuffleMode);
void onSessionReady();
diff --git a/media-compat/java/android/support/v4/media/session/IMediaSession.aidl b/media-compat/java/android/support/v4/media/session/IMediaSession.aidl
index 3926ac2..56c04ac 100644
--- a/media-compat/java/android/support/v4/media/session/IMediaSession.aidl
+++ b/media-compat/java/android/support/v4/media/session/IMediaSession.aidl
@@ -55,7 +55,7 @@
int getRatingType() = 31;
boolean isCaptioningEnabled() = 44;
int getRepeatMode() = 36;
- boolean isShuffleModeEnabledDeprecated() = 37;
+ boolean isShuffleModeEnabledRemoved() = 37;
int getShuffleMode() = 46;
void addQueueItem(in MediaDescriptionCompat description) = 40;
void addQueueItemAt(in MediaDescriptionCompat description, int index) = 41;
@@ -83,7 +83,7 @@
void rateWithExtras(in RatingCompat rating, in Bundle extras) = 50;
void setCaptioningEnabled(boolean enabled) = 45;
void setRepeatMode(int repeatMode) = 38;
- void setShuffleModeEnabledDeprecated(boolean shuffleMode) = 39;
+ void setShuffleModeEnabledRemoved(boolean shuffleMode) = 39;
void setShuffleMode(int shuffleMode) = 47;
void sendCustomAction(String action, in Bundle args) = 25;
}
diff --git a/media-compat/java/android/support/v4/media/session/MediaControllerCompat.java b/media-compat/java/android/support/v4/media/session/MediaControllerCompat.java
index cea4771..2509cd4 100644
--- a/media-compat/java/android/support/v4/media/session/MediaControllerCompat.java
+++ b/media-compat/java/android/support/v4/media/session/MediaControllerCompat.java
@@ -70,7 +70,7 @@
* <li>{@link #getPlaybackState()}.{@link PlaybackStateCompat#getExtras() getExtras()}</li>
* <li>{@link #isCaptioningEnabled()}</li>
* <li>{@link #getRepeatMode()}</li>
- * <li>{@link #isShuffleModeEnabled()}</li>
+ * <li>{@link #getShuffleMode()}</li>
* </ul></p>
*
* <div class="special reference">
@@ -439,18 +439,6 @@
}
/**
- * Returns whether the shuffle mode is enabled for this session.
- *
- * @return {@code true} if the shuffle mode is enabled, {@code false} if it is disabled, not
- * set, or the session is not ready.
- * @deprecated Use {@link #getShuffleMode} instead.
- */
- @Deprecated
- public boolean isShuffleModeEnabled() {
- return mImpl.isShuffleModeEnabled();
- }
-
- /**
* Gets the shuffle mode for this session.
*
* @return The latest shuffle mode set to the session, or
@@ -760,16 +748,6 @@
/**
* Override to handle changes to the shuffle mode.
*
- * @param enabled {@code true} if the shuffle mode is enabled, {@code false} otherwise.
- * @deprecated Use {@link #onShuffleModeChanged(int)} instead.
- */
- @Deprecated
- public void onShuffleModeChanged(boolean enabled) {
- }
-
- /**
- * Override to handle changes to the shuffle mode.
- *
* @param shuffleMode The shuffle mode. Must be one of the followings:
* {@link PlaybackStateCompat#SHUFFLE_MODE_NONE},
* {@link PlaybackStateCompat#SHUFFLE_MODE_ALL},
@@ -963,12 +941,8 @@
}
@Override
- public void onShuffleModeChangedDeprecated(boolean enabled) throws RemoteException {
- MediaControllerCompat.Callback callback = mCallback.get();
- if (callback != null) {
- callback.postToHandler(
- MessageHandler.MSG_UPDATE_SHUFFLE_MODE_DEPRECATED, enabled, null);
- }
+ public void onShuffleModeChangedRemoved(boolean enabled) throws RemoteException {
+ // Do nothing.
}
@Override
@@ -1020,7 +994,6 @@
private static final int MSG_UPDATE_EXTRAS = 7;
private static final int MSG_DESTROYED = 8;
private static final int MSG_UPDATE_REPEAT_MODE = 9;
- private static final int MSG_UPDATE_SHUFFLE_MODE_DEPRECATED = 10;
private static final int MSG_UPDATE_CAPTIONING_ENABLED = 11;
private static final int MSG_UPDATE_SHUFFLE_MODE = 12;
private static final int MSG_SESSION_READY = 13;
@@ -1058,9 +1031,6 @@
case MSG_UPDATE_REPEAT_MODE:
onRepeatModeChanged((int) msg.obj);
break;
- case MSG_UPDATE_SHUFFLE_MODE_DEPRECATED:
- onShuffleModeChanged((boolean) msg.obj);
- break;
case MSG_UPDATE_SHUFFLE_MODE:
onShuffleModeChanged((int) msg.obj);
break;
@@ -1264,15 +1234,6 @@
/**
* Sets the shuffle mode for this session.
*
- * @param enabled {@code true} to enable the shuffle mode, {@code false} to disable.
- * @deprecated Use {@link #setShuffleMode} instead.
- */
- @Deprecated
- public abstract void setShuffleModeEnabled(boolean enabled);
-
- /**
- * Sets the shuffle mode for this session.
- *
* @param shuffleMode The shuffle mode. Must be one of the followings:
* {@link PlaybackStateCompat#SHUFFLE_MODE_NONE},
* {@link PlaybackStateCompat#SHUFFLE_MODE_ALL},
@@ -1414,7 +1375,6 @@
int getRatingType();
boolean isCaptioningEnabled();
int getRepeatMode();
- boolean isShuffleModeEnabled();
int getShuffleMode();
long getFlags();
PlaybackInfo getPlaybackInfo();
@@ -1610,16 +1570,6 @@
}
@Override
- public boolean isShuffleModeEnabled() {
- try {
- return mBinder.isShuffleModeEnabledDeprecated();
- } catch (RemoteException e) {
- Log.e(TAG, "Dead object in isShuffleModeEnabled.", e);
- }
- return false;
- }
-
- @Override
public int getShuffleMode() {
try {
return mBinder.getShuffleMode();
@@ -1899,15 +1849,6 @@
}
@Override
- public void setShuffleModeEnabled(boolean enabled) {
- try {
- mBinder.setShuffleModeEnabledDeprecated(enabled);
- } catch (RemoteException e) {
- Log.e(TAG, "Dead object in setShuffleModeEnabled.", e);
- }
- }
-
- @Override
public void setShuffleMode(@PlaybackStateCompat.ShuffleMode int shuffleMode) {
try {
mBinder.setShuffleMode(shuffleMode);
@@ -2122,18 +2063,6 @@
}
@Override
- public boolean isShuffleModeEnabled() {
- if (mExtraBinder != null) {
- try {
- return mExtraBinder.isShuffleModeEnabledDeprecated();
- } catch (RemoteException e) {
- Log.e(TAG, "Dead object in isShuffleModeEnabled.", e);
- }
- }
- return false;
- }
-
- @Override
public int getShuffleMode() {
if (mExtraBinder != null) {
try {
@@ -2391,13 +2320,6 @@
}
@Override
- public void setShuffleModeEnabled(boolean enabled) {
- Bundle bundle = new Bundle();
- bundle.putBoolean(MediaSessionCompat.ACTION_ARGUMENT_SHUFFLE_MODE_ENABLED, enabled);
- sendCustomAction(MediaSessionCompat.ACTION_SET_SHUFFLE_MODE_ENABLED, bundle);
- }
-
- @Override
public void setShuffleMode(@PlaybackStateCompat.ShuffleMode int shuffleMode) {
Bundle bundle = new Bundle();
bundle.putInt(MediaSessionCompat.ACTION_ARGUMENT_SHUFFLE_MODE, shuffleMode);
diff --git a/media-compat/java/android/support/v4/media/session/MediaSessionCompat.java b/media-compat/java/android/support/v4/media/session/MediaSessionCompat.java
index ea5beda..8b91413 100644
--- a/media-compat/java/android/support/v4/media/session/MediaSessionCompat.java
+++ b/media-compat/java/android/support/v4/media/session/MediaSessionCompat.java
@@ -259,12 +259,6 @@
"android.support.v4.media.session.action.SET_REPEAT_MODE";
/**
- * Custom action to invoke setShuffleModeEnabled() for the forward compatibility.
- */
- static final String ACTION_SET_SHUFFLE_MODE_ENABLED =
- "android.support.v4.media.session.action.SET_SHUFFLE_MODE_ENABLED";
-
- /**
* Custom action to invoke setShuffleMode() for the forward compatibility.
*/
static final String ACTION_SET_SHUFFLE_MODE =
@@ -321,13 +315,6 @@
"android.support.v4.media.session.action.ARGUMENT_REPEAT_MODE";
/**
- * Argument for use with {@link #ACTION_SET_SHUFFLE_MODE_ENABLED} indicating that shuffle mode
- * is enabled.
- */
- static final String ACTION_ARGUMENT_SHUFFLE_MODE_ENABLED =
- "android.support.v4.media.session.action.ARGUMENT_SHUFFLE_MODE_ENABLED";
-
- /**
* Argument for use with {@link #ACTION_SET_SHUFFLE_MODE} indicating shuffle mode.
*/
static final String ACTION_ARGUMENT_SHUFFLE_MODE =
@@ -704,20 +691,6 @@
/**
* Sets the shuffle mode for this session.
* <p>
- * Note that if this method is not called before,
- * {@link MediaControllerCompat#isShuffleModeEnabled} will return {@code false}.
- *
- * @param enabled {@code true} to enable the shuffle mode, {@code false} to disable.
- * @deprecated Use {@link #setShuffleMode} instead.
- */
- @Deprecated
- public void setShuffleModeEnabled(boolean enabled) {
- mImpl.setShuffleModeEnabled(enabled);
- }
-
- /**
- * Sets the shuffle mode for this session.
- * <p>
* Note that if this method is not called before, {@link MediaControllerCompat#getShuffleMode}
* will return {@link PlaybackStateCompat#SHUFFLE_MODE_NONE}.
*
@@ -1134,20 +1107,6 @@
/**
* Override to handle the setting of the shuffle mode.
* <p>
- * You should call {@link #setShuffleModeEnabled} before the end of this method in order to
- * notify the change to the {@link MediaControllerCompat}, or
- * {@link MediaControllerCompat#isShuffleModeEnabled} could return an invalid value.
- *
- * @param enabled true when the shuffle mode is enabled, false otherwise.
- * @deprecated Use {@link #onSetShuffleMode} instead.
- */
- @Deprecated
- public void onSetShuffleModeEnabled(boolean enabled) {
- }
-
- /**
- * Override to handle the setting of the shuffle mode.
- * <p>
* You should call {@link #setShuffleMode} before the end of this method in order to
* notify the change to the {@link MediaControllerCompat}, or
* {@link MediaControllerCompat#getShuffleMode} could return an invalid value.
@@ -1386,9 +1345,6 @@
} else if (action.equals(ACTION_SET_REPEAT_MODE)) {
int repeatMode = extras.getInt(ACTION_ARGUMENT_REPEAT_MODE);
Callback.this.onSetRepeatMode(repeatMode);
- } else if (action.equals(ACTION_SET_SHUFFLE_MODE_ENABLED)) {
- boolean enabled = extras.getBoolean(ACTION_ARGUMENT_SHUFFLE_MODE_ENABLED);
- Callback.this.onSetShuffleModeEnabled(enabled);
} else if (action.equals(ACTION_SET_SHUFFLE_MODE)) {
int shuffleMode = extras.getInt(ACTION_ARGUMENT_SHUFFLE_MODE);
Callback.this.onSetShuffleMode(shuffleMode);
@@ -1797,7 +1753,6 @@
void setRatingType(@RatingCompat.Style int type);
void setCaptioningEnabled(boolean enabled);
void setRepeatMode(@PlaybackStateCompat.RepeatMode int repeatMode);
- void setShuffleModeEnabled(boolean enabled);
void setShuffleMode(@PlaybackStateCompat.ShuffleMode int shuffleMode);
void setExtras(Bundle extras);
@@ -1844,7 +1799,6 @@
boolean mCaptioningEnabled;
@PlaybackStateCompat.RepeatMode int mRepeatMode;
@PlaybackStateCompat.ShuffleMode int mShuffleMode;
- boolean mShuffleModeEnabled;
Bundle mExtras;
int mVolumeType;
@@ -2254,14 +2208,6 @@
}
@Override
- public void setShuffleModeEnabled(boolean enabled) {
- if (mShuffleModeEnabled != enabled) {
- mShuffleModeEnabled = enabled;
- sendShuffleModeEnabled(enabled);
- }
- }
-
- @Override
public void setShuffleMode(@PlaybackStateCompat.ShuffleMode int shuffleMode) {
if (mShuffleMode != shuffleMode) {
mShuffleMode = shuffleMode;
@@ -2460,18 +2406,6 @@
mControllerCallbacks.finishBroadcast();
}
- private void sendShuffleModeEnabled(boolean enabled) {
- int size = mControllerCallbacks.beginBroadcast();
- for (int i = size - 1; i >= 0; i--) {
- IMediaControllerCallback cb = mControllerCallbacks.getBroadcastItem(i);
- try {
- cb.onShuffleModeChangedDeprecated(enabled);
- } catch (RemoteException e) {
- }
- }
- mControllerCallbacks.finishBroadcast();
- }
-
private void sendShuffleMode(int shuffleMode) {
int size = mControllerCallbacks.beginBroadcast();
for (int i = size - 1; i >= 0; i--) {
@@ -2695,8 +2629,8 @@
}
@Override
- public void setShuffleModeEnabledDeprecated(boolean enabled) throws RemoteException {
- postToHandler(MessageHandler.MSG_SET_SHUFFLE_MODE_ENABLED, enabled);
+ public void setShuffleModeEnabledRemoved(boolean enabled) throws RemoteException {
+ // Do nothing.
}
@Override
@@ -2783,8 +2717,8 @@
}
@Override
- public boolean isShuffleModeEnabledDeprecated() {
- return mShuffleModeEnabled;
+ public boolean isShuffleModeEnabledRemoved() {
+ return false;
}
@Override
@@ -2837,7 +2771,6 @@
private static final int MSG_MEDIA_BUTTON = 21;
private static final int MSG_SET_VOLUME = 22;
private static final int MSG_SET_REPEAT_MODE = 23;
- private static final int MSG_SET_SHUFFLE_MODE_ENABLED = 24;
private static final int MSG_ADD_QUEUE_ITEM = 25;
private static final int MSG_ADD_QUEUE_ITEM_AT = 26;
private static final int MSG_REMOVE_QUEUE_ITEM = 27;
@@ -2978,9 +2911,6 @@
case MSG_SET_REPEAT_MODE:
cb.onSetRepeatMode(msg.arg1);
break;
- case MSG_SET_SHUFFLE_MODE_ENABLED:
- cb.onSetShuffleModeEnabled((boolean) msg.obj);
- break;
case MSG_SET_SHUFFLE_MODE:
cb.onSetShuffleMode(msg.arg1);
break;
@@ -3206,7 +3136,6 @@
@RatingCompat.Style int mRatingType;
boolean mCaptioningEnabled;
@PlaybackStateCompat.RepeatMode int mRepeatMode;
- boolean mShuffleModeEnabled;
@PlaybackStateCompat.ShuffleMode int mShuffleMode;
public MediaSessionImplApi21(Context context, String tag) {
@@ -3381,22 +3310,6 @@
}
@Override
- public void setShuffleModeEnabled(boolean enabled) {
- if (mShuffleModeEnabled != enabled) {
- mShuffleModeEnabled = enabled;
- int size = mExtraControllerCallbacks.beginBroadcast();
- for (int i = size - 1; i >= 0; i--) {
- IMediaControllerCallback cb = mExtraControllerCallbacks.getBroadcastItem(i);
- try {
- cb.onShuffleModeChangedDeprecated(enabled);
- } catch (RemoteException e) {
- }
- }
- mExtraControllerCallbacks.finishBroadcast();
- }
- }
-
- @Override
public void setShuffleMode(@PlaybackStateCompat.ShuffleMode int shuffleMode) {
if (mShuffleMode != shuffleMode) {
mShuffleMode = shuffleMode;
@@ -3625,9 +3538,8 @@
}
@Override
- public void setShuffleModeEnabledDeprecated(boolean enabled) throws RemoteException {
- // Will not be called.
- throw new AssertionError();
+ public void setShuffleModeEnabledRemoved(boolean enabled) throws RemoteException {
+ // Do nothing.
}
@Override
@@ -3713,8 +3625,8 @@
}
@Override
- public boolean isShuffleModeEnabledDeprecated() {
- return mShuffleModeEnabled;
+ public boolean isShuffleModeEnabledRemoved() {
+ return false;
}
@Override
diff --git a/media-compat/java/android/support/v4/media/session/PlaybackStateCompat.java b/media-compat/java/android/support/v4/media/session/PlaybackStateCompat.java
index eee09c5..d7634b0 100644
--- a/media-compat/java/android/support/v4/media/session/PlaybackStateCompat.java
+++ b/media-compat/java/android/support/v4/media/session/PlaybackStateCompat.java
@@ -202,6 +202,7 @@
* @see Builder#setActions(long)
* @deprecated Use {@link #ACTION_SET_SHUFFLE_MODE} instead.
*/
+ @Deprecated
public static final long ACTION_SET_SHUFFLE_MODE_ENABLED = 1 << 19;
/**
diff --git a/media-compat/kitkat/android/support/v4/media/RatingCompatKitkat.java b/media-compat/kitkat/android/support/v4/media/RatingCompatKitkat.java
deleted file mode 100644
index 1d3fa50..0000000
--- a/media-compat/kitkat/android/support/v4/media/RatingCompatKitkat.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.v4.media;
-
-import android.media.Rating;
-import android.support.annotation.RequiresApi;
-
-@RequiresApi(19)
-class RatingCompatKitkat {
- public static Object newUnratedRating(int ratingStyle) {
- return Rating.newUnratedRating(ratingStyle);
- }
-
- public static Object newHeartRating(boolean hasHeart) {
- return Rating.newHeartRating(hasHeart);
- }
-
- public static Object newThumbRating(boolean thumbIsUp) {
- return Rating.newThumbRating(thumbIsUp);
- }
-
- public static Object newStarRating(int starRatingStyle, float starRating) {
- return Rating.newStarRating(starRatingStyle, starRating);
- }
-
- public static Object newPercentageRating(float percent) {
- return Rating.newPercentageRating(percent);
- }
-
- public static boolean isRated(Object ratingObj) {
- return ((Rating)ratingObj).isRated();
- }
-
- public static int getRatingStyle(Object ratingObj) {
- return ((Rating)ratingObj).getRatingStyle();
- }
-
- public static boolean hasHeart(Object ratingObj) {
- return ((Rating)ratingObj).hasHeart();
- }
-
- public static boolean isThumbUp(Object ratingObj) {
- return ((Rating)ratingObj).isThumbUp();
- }
-
- public static float getStarRating(Object ratingObj) {
- return ((Rating)ratingObj).getStarRating();
- }
-
- public static float getPercentRating(Object ratingObj) {
- return ((Rating)ratingObj).getPercentRating();
- }
-}
diff --git a/media-compat/tests/src/android/support/v4/media/session/MediaControllerCompatTest.java b/media-compat/tests/src/android/support/v4/media/session/MediaControllerCompatTest.java
index 41784b7..53d7e47 100644
--- a/media-compat/tests/src/android/support/v4/media/session/MediaControllerCompatTest.java
+++ b/media-compat/tests/src/android/support/v4/media/session/MediaControllerCompatTest.java
@@ -396,12 +396,6 @@
assertEquals(repeatMode, mCallback.mRepeatMode);
mCallback.reset();
- controls.setShuffleModeEnabled(ENABLED);
- mWaitLock.wait(TIME_OUT_MS);
- assertTrue(mCallback.mOnSetShuffleModeEnabledCalled);
- assertEquals(ENABLED, mCallback.mShuffleModeEnabled);
-
- mCallback.reset();
controls.setShuffleMode(PlaybackStateCompat.SHUFFLE_MODE_ALL);
mWaitLock.wait(TIME_OUT_MS);
assertTrue(mCallback.mOnSetShuffleModeCalled);
@@ -475,7 +469,6 @@
private ResultReceiver mCommandCallback;
private boolean mCaptioningEnabled;
private int mRepeatMode;
- private boolean mShuffleModeEnabled;
private int mShuffleMode;
private int mQueueIndex;
private MediaDescriptionCompat mQueueDescription;
@@ -502,7 +495,6 @@
private boolean mOnPrepareFromUriCalled;
private boolean mOnSetCaptioningEnabledCalled;
private boolean mOnSetRepeatModeCalled;
- private boolean mOnSetShuffleModeEnabledCalled;
private boolean mOnSetShuffleModeCalled;
private boolean mOnAddQueueItemCalled;
private boolean mOnAddQueueItemAtCalled;
@@ -520,7 +512,6 @@
mCommand = null;
mCommandCallback = null;
mCaptioningEnabled = false;
- mShuffleModeEnabled = false;
mRepeatMode = PlaybackStateCompat.REPEAT_MODE_NONE;
mShuffleMode = PlaybackStateCompat.SHUFFLE_MODE_NONE;
mQueueIndex = -1;
@@ -547,7 +538,6 @@
mOnPrepareFromUriCalled = false;
mOnSetCaptioningEnabledCalled = false;
mOnSetRepeatModeCalled = false;
- mOnSetShuffleModeEnabledCalled = false;
mOnSetShuffleModeCalled = false;
mOnAddQueueItemCalled = false;
mOnAddQueueItemAtCalled = false;
@@ -794,15 +784,6 @@
}
@Override
- public void onSetShuffleModeEnabled(boolean enabled) {
- synchronized (mWaitLock) {
- mOnSetShuffleModeEnabledCalled = true;
- mShuffleModeEnabled = enabled;
- mWaitLock.notify();
- }
- }
-
- @Override
public void onSetShuffleMode(int shuffleMode) {
synchronized (mWaitLock) {
mOnSetShuffleModeCalled = true;
diff --git a/media-compat/tests/src/android/support/v4/media/session/MediaSessionCompatTest.java b/media-compat/tests/src/android/support/v4/media/session/MediaSessionCompatTest.java
index b44a085..2cda242 100644
--- a/media-compat/tests/src/android/support/v4/media/session/MediaSessionCompatTest.java
+++ b/media-compat/tests/src/android/support/v4/media/session/MediaSessionCompatTest.java
@@ -446,25 +446,6 @@
}
/**
- * Tests {@link MediaSessionCompat#setShuffleModeEnabled}.
- */
- @Test
- @SmallTest
- public void testSetShuffleModeEnabled() throws Exception {
- final boolean shuffleModeEnabled = true;
- MediaControllerCompat controller = mSession.getController();
- controller.registerCallback(mCallback, mHandler);
- synchronized (mWaitLock) {
- mCallback.resetLocked();
- mSession.setShuffleModeEnabled(shuffleModeEnabled);
- mWaitLock.wait(TIME_OUT_MS);
- assertTrue(mCallback.mOnShuffleModeChangedDeprecatedCalled);
- assertEquals(shuffleModeEnabled, mCallback.mShuffleModeEnabled);
- assertEquals(shuffleModeEnabled, controller.isShuffleModeEnabled());
- }
- }
-
- /**
* Tests {@link MediaSessionCompat#setShuffleMode}.
*/
@Test
@@ -837,7 +818,6 @@
private volatile boolean mOnSessionEventCalled;
private volatile boolean mOnCaptioningEnabledChangedCalled;
private volatile boolean mOnRepeatModeChangedCalled;
- private volatile boolean mOnShuffleModeChangedDeprecatedCalled;
private volatile boolean mOnShuffleModeChangedCalled;
private volatile PlaybackStateCompat mPlaybackState;
@@ -849,7 +829,6 @@
private volatile MediaControllerCompat.PlaybackInfo mPlaybackInfo;
private volatile boolean mCaptioningEnabled;
private volatile int mRepeatMode;
- private volatile boolean mShuffleModeEnabled;
private volatile int mShuffleMode;
public void resetLocked() {
@@ -862,7 +841,6 @@
mOnSessionDestroyedCalled = false;
mOnSessionEventCalled = false;
mOnRepeatModeChangedCalled = false;
- mOnShuffleModeChangedDeprecatedCalled = false;
mOnShuffleModeChangedCalled = false;
mPlaybackState = null;
@@ -873,7 +851,6 @@
mPlaybackInfo = null;
mCaptioningEnabled = false;
mRepeatMode = PlaybackStateCompat.REPEAT_MODE_NONE;
- mShuffleModeEnabled = false;
mShuffleMode = PlaybackStateCompat.SHUFFLE_MODE_NONE;
}
@@ -968,15 +945,6 @@
}
@Override
- public void onShuffleModeChanged(boolean enabled) {
- synchronized (mWaitLock) {
- mOnShuffleModeChangedDeprecatedCalled = true;
- mShuffleModeEnabled = enabled;
- mWaitLock.notify();
- }
- }
-
- @Override
public void onShuffleModeChanged(int shuffleMode) {
synchronized (mWaitLock) {
mOnShuffleModeChangedCalled = true;
diff --git a/paging/OWNERS b/paging/OWNERS
new file mode 100644
index 0000000..bd5d7e4
--- /dev/null
+++ b/paging/OWNERS
@@ -0,0 +1 @@
+ccraik@google.com
\ No newline at end of file
diff --git a/paging/common/src/main/java/android/arch/paging/BoundedDataSource.java b/paging/common/src/main/java/android/arch/paging/BoundedDataSource.java
index 664ab16..0656490 100644
--- a/paging/common/src/main/java/android/arch/paging/BoundedDataSource.java
+++ b/paging/common/src/main/java/android/arch/paging/BoundedDataSource.java
@@ -21,7 +21,6 @@
import android.support.annotation.WorkerThread;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.List;
/**
@@ -75,7 +74,6 @@
if (result.size() != loadSize) {
throw new IllegalStateException("invalid number of items returned.");
}
- Collections.reverse(result);
}
return result;
}
diff --git a/paging/common/src/main/java/android/arch/paging/ContiguousDataSource.java b/paging/common/src/main/java/android/arch/paging/ContiguousDataSource.java
index 9ff1117..414c4ff 100644
--- a/paging/common/src/main/java/android/arch/paging/ContiguousDataSource.java
+++ b/paging/common/src/main/java/android/arch/paging/ContiguousDataSource.java
@@ -18,100 +18,59 @@
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
-import android.support.annotation.RestrictTo;
-import android.support.annotation.WorkerThread;
import java.util.List;
-/** @hide */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-public abstract class ContiguousDataSource<Key, Value> extends DataSource<Key, Value> {
- /**
- * Number of items that this DataSource can provide in total, or COUNT_UNDEFINED.
- *
- * @return number of items that this DataSource can provide in total, or COUNT_UNDEFINED
- * if difficult or undesired to compute.
- */
- public int countItems() {
- return COUNT_UNDEFINED;
- }
-
+abstract class ContiguousDataSource<Key, Value> extends DataSource<Key, Value> {
@Override
boolean isContiguous() {
return true;
}
- @WorkerThread
- @Nullable
- public abstract NullPaddedList<Value> loadInitial(
- Key key, int initialLoadSize, boolean enablePlaceholders);
+ abstract void loadInitial(Key key, int initialLoadSize, boolean enablePlaceholders,
+ @NonNull PageResult.Receiver<Key, Value> receiver);
+
+ void loadAfter(int currentEndIndex, @NonNull Value currentEndItem, int pageSize,
+ @NonNull PageResult.Receiver<Key, Value> receiver) {
+ if (!isInvalid()) {
+ List<Value> list = loadAfterImpl(currentEndIndex, currentEndItem, pageSize);
+
+ if (list != null && !isInvalid()) {
+ receiver.postOnPageResult(new PageResult<>(
+ PageResult.APPEND, new Page<Key, Value>(list), 0, 0, 0));
+ return;
+ }
+ }
+ receiver.postOnPageResult(new PageResult<Key, Value>(PageResult.APPEND));
+ }
+
+ void loadBefore(int currentBeginIndex, @NonNull Value currentBeginItem, int pageSize,
+ @NonNull PageResult.Receiver<Key, Value> receiver) {
+ if (!isInvalid()) {
+ List<Value> list = loadBeforeImpl(currentBeginIndex, currentBeginItem, pageSize);
+
+ if (list != null && !isInvalid()) {
+ receiver.postOnPageResult(new PageResult<>(
+ PageResult.PREPEND, new Page<Key, Value>(list), 0, 0, 0));
+ return;
+ }
+ }
+ receiver.postOnPageResult(new PageResult<Key, Value>(PageResult.PREPEND));
+ }
/**
- * Load data after the given position / item.
+ * Get the key from either the position, or item, or null if position/item invalid.
* <p>
- * It's valid to return a different list size than the page size, if it's easier for this data
- * source. It is generally safer to increase number loaded than reduce.
- *
- * @param currentEndIndex Load items after this index, starting with currentEndIndex + 1.
- * @param currentEndItem Load items after this item, can be used for precise querying based on
- * item contents.
- * @param pageSize Suggested number of items to load.
- * @return List of items, starting at position currentEndIndex + 1. Null if the data source is
- * no longer valid, and should not be queried again.
+ * Position may not match passed item's position - if trying to query the key from a position
+ * that isn't yet loaded, a fallback item (last loaded item accessed) will be passed.
*/
- @WorkerThread
- @Nullable
- public final List<Value> loadAfter(int currentEndIndex,
- @NonNull Value currentEndItem, int pageSize) {
- if (isInvalid()) {
- return null;
- }
- List<Value> list = loadAfterImpl(currentEndIndex, currentEndItem, pageSize);
- if (isInvalid()) {
- return null;
- }
- return list;
- }
+ abstract Key getKey(int position, Value item);
@Nullable
abstract List<Value> loadAfterImpl(int currentEndIndex,
@NonNull Value currentEndItem, int pageSize);
- /**
- * Load data before the given position / item.
- * <p>
- * It's valid to return a different list size than the page size, if it's easier for this data
- * source. It is generally safer to increase number loaded than reduce.
- *
- * @param currentBeginIndex Load items before this index, starting with currentBeginIndex - 1.
- * @param currentBeginItem Load items after this item, can be used for precise querying based
- * on item contents.
- * @param pageSize Suggested number of items to load.
- * @return List of items, in descending order, starting at position currentBeginIndex - 1.
- */
- @WorkerThread
- @Nullable
- public final List<Value> loadBefore(int currentBeginIndex,
- @NonNull Value currentBeginItem, int pageSize) {
- if (isInvalid()) {
- return null;
- }
- List<Value> list = loadBeforeImpl(currentBeginIndex, currentBeginItem, pageSize);
- if (isInvalid()) {
- return null;
- }
- return list;
-
- }
-
@Nullable
abstract List<Value> loadBeforeImpl(int currentBeginIndex,
@NonNull Value currentBeginItem, int pageSize);
-
- /**
- * Get the key from either the position, or item. Position may not match passed item's position,
- * if trying to query the key from a position that isn't yet loaded, so a fallback item must be
- * used.
- */
- abstract Key getKey(int position, Value item);
}
diff --git a/paging/common/src/main/java/android/arch/paging/ContiguousPagedList.java b/paging/common/src/main/java/android/arch/paging/ContiguousPagedList.java
index d8907c3..cdff391 100644
--- a/paging/common/src/main/java/android/arch/paging/ContiguousPagedList.java
+++ b/paging/common/src/main/java/android/arch/paging/ContiguousPagedList.java
@@ -16,101 +16,151 @@
package android.arch.paging;
+import android.support.annotation.AnyThread;
import android.support.annotation.MainThread;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
-import android.support.annotation.RestrictTo;
-import android.support.annotation.WorkerThread;
-import java.lang.ref.WeakReference;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
import java.util.concurrent.Executor;
-import java.util.concurrent.atomic.AtomicBoolean;
-/** @hide */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-class ContiguousPagedList<T> extends NullPaddedList<T> {
-
- private final ContiguousDataSource<?, T> mDataSource;
- private final Executor mMainThreadExecutor;
- private final Executor mBackgroundThreadExecutor;
- private final Config mConfig;
-
+class ContiguousPagedList<K, V> extends PagedList<V> implements PagedStorage.Callback {
+ private final ContiguousDataSource<K, V> mDataSource;
private boolean mPrependWorkerRunning = false;
private boolean mAppendWorkerRunning = false;
private int mPrependItemsRequested = 0;
private int mAppendItemsRequested = 0;
- private int mLastLoad = 0;
- private T mLastItem = null;
+ @SuppressWarnings("unchecked")
+ private final PagedStorage<K, V> mKeyedStorage = (PagedStorage<K, V>) mStorage;
- private AtomicBoolean mDetached = new AtomicBoolean(false);
+ private final PageResult.Receiver<K, V> mReceiver = new PageResult.Receiver<K, V>() {
+ @AnyThread
+ @Override
+ public void postOnPageResult(@NonNull final PageResult<K, V> pageResult) {
+ // NOTE: if we're already on main thread, this can delay page receive by a frame
+ mMainThreadExecutor.execute(new Runnable() {
+ @Override
+ public void run() {
+ onPageResult(pageResult);
+ }
+ });
+ }
- private ArrayList<WeakReference<Callback>> mCallbacks = new ArrayList<>();
+ // Creation thread for initial synchronous load, otherwise main thread
+ // Safe to access main thread only state - no other thread has reference during construction
+ @AnyThread
+ @Override
+ public void onPageResult(@NonNull PageResult<K, V> pageResult) {
+ if (pageResult.page == null) {
+ detach();
+ return;
+ }
- @WorkerThread
- <K> ContiguousPagedList(@NonNull ContiguousDataSource<K, T> dataSource,
+ if (isDetached()) {
+ // No op, have detached
+ return;
+ }
+
+ Page<K, V> page = pageResult.page;
+ if (pageResult.type == PageResult.INIT) {
+ mKeyedStorage.init(pageResult.leadingNulls, page, pageResult.trailingNulls,
+ pageResult.positionOffset, ContiguousPagedList.this);
+ notifyInserted(0, mKeyedStorage.size());
+ } else if (pageResult.type == PageResult.APPEND) {
+ mKeyedStorage.appendPage(page, ContiguousPagedList.this);
+ } else if (pageResult.type == PageResult.PREPEND) {
+ mKeyedStorage.prependPage(page, ContiguousPagedList.this);
+ }
+
+ if (mBoundaryCallback != null) {
+ boolean deferEmpty = mStorage.size() == 0;
+ boolean deferBegin = !deferEmpty
+ && pageResult.type == PageResult.PREPEND
+ && pageResult.page.items.size() == 0;
+ boolean deferEnd = !deferEmpty
+ && pageResult.type == PageResult.APPEND
+ && pageResult.page.items.size() == 0;
+ deferBoundaryCallbacks(deferEmpty, deferBegin, deferEnd);
+ }
+ }
+ };
+
+ ContiguousPagedList(
+ @NonNull ContiguousDataSource<K, V> dataSource,
@NonNull Executor mainThreadExecutor,
@NonNull Executor backgroundThreadExecutor,
- Config config,
- @Nullable K key) {
- super();
-
+ @Nullable BoundaryCallback<V> boundaryCallback,
+ @NonNull Config config,
+ final @Nullable K key) {
+ super(new PagedStorage<K, V>(), mainThreadExecutor, backgroundThreadExecutor,
+ boundaryCallback, config);
mDataSource = dataSource;
- mMainThreadExecutor = mainThreadExecutor;
- mBackgroundThreadExecutor = backgroundThreadExecutor;
- mConfig = config;
- NullPaddedList<T> initialState = dataSource.loadInitial(
- key, config.mInitialLoadSizeHint, config.mEnablePlaceholders);
- if (initialState != null) {
- mPositionOffset = initialState.getPositionOffset();
+ // blocking init just triggers the initial load on the construction thread -
+ // Could still be posted with callback, if desired.
+ mDataSource.loadInitial(key,
+ mConfig.initialLoadSizeHint,
+ mConfig.enablePlaceholders,
+ mReceiver);
+ }
- mLeadingNullCount = initialState.getLeadingNullCount();
- mList = new ArrayList<>(initialState.mList);
- mTrailingNullCount = initialState.getTrailingNullCount();
+ @MainThread
+ @Override
+ void dispatchUpdatesSinceSnapshot(
+ @NonNull PagedList<V> pagedListSnapshot, @NonNull Callback callback) {
- if (initialState.getLeadingNullCount() == 0
- && initialState.getTrailingNullCount() == 0
- && config.mPrefetchDistance < 1) {
- throw new IllegalArgumentException("Null padding is required to support the 0"
- + " prefetch case - require either null items or prefetching to fetch"
- + " beyond initial load.");
- }
+ final PagedStorage<?, V> snapshot = pagedListSnapshot.mStorage;
- if (initialState.size() != 0) {
- mLastLoad = mLeadingNullCount + mList.size() / 2;
- mLastItem = mList.get(mList.size() / 2);
- }
- } else {
- mList = new ArrayList<>();
- detach();
+ final int newlyAppended = mStorage.getNumberAppended() - snapshot.getNumberAppended();
+ final int newlyPrepended = mStorage.getNumberPrepended() - snapshot.getNumberPrepended();
+
+ final int previousTrailing = snapshot.getTrailingNullCount();
+ final int previousLeading = snapshot.getLeadingNullCount();
+
+ // Validate that the snapshot looks like a previous version of this list - if it's not,
+ // we can't be sure we'll dispatch callbacks safely
+ if (newlyAppended < 0
+ || newlyPrepended < 0
+ || mStorage.getTrailingNullCount() != Math.max(previousTrailing - newlyAppended, 0)
+ || mStorage.getLeadingNullCount() != Math.max(previousLeading - newlyPrepended, 0)
+ || (mStorage.getStorageCount()
+ != snapshot.getStorageCount() + newlyAppended + newlyPrepended)) {
+ throw new IllegalArgumentException("Invalid snapshot provided - doesn't appear"
+ + " to be a snapshot of this PagedList");
}
- if (mList.size() == 0) {
- // Empty initial state, so don't try and fetch data.
- mPrependWorkerRunning = true;
- mAppendWorkerRunning = true;
+
+ if (newlyAppended != 0) {
+ final int changedCount = Math.min(previousTrailing, newlyAppended);
+ final int addedCount = newlyAppended - changedCount;
+
+ final int endPosition = snapshot.getLeadingNullCount() + snapshot.getStorageCount();
+ if (changedCount != 0) {
+ callback.onChanged(endPosition, changedCount);
+ }
+ if (addedCount != 0) {
+ callback.onInserted(endPosition + changedCount, addedCount);
+ }
+ }
+ if (newlyPrepended != 0) {
+ final int changedCount = Math.min(previousLeading, newlyPrepended);
+ final int addedCount = newlyPrepended - changedCount;
+
+ if (changedCount != 0) {
+ callback.onChanged(previousLeading, changedCount);
+ }
+ if (addedCount != 0) {
+ callback.onInserted(0, addedCount);
+ }
}
}
+ @MainThread
@Override
- public T get(int index) {
- T item = super.get(index);
- if (item != null) {
- mLastItem = item;
- }
- return item;
- }
-
- @Override
- public void loadAround(int index) {
- mLastLoad = index + mPositionOffset;
-
- int prependItems = mConfig.mPrefetchDistance - (index - mLeadingNullCount);
- int appendItems = index + mConfig.mPrefetchDistance - (mLeadingNullCount + mList.size());
+ protected void loadAroundInternal(int index) {
+ int prependItems = mConfig.prefetchDistance - (index - mStorage.getLeadingNullCount());
+ int appendItems = index + mConfig.prefetchDistance
+ - (mStorage.getLeadingNullCount() + mStorage.getStorageCount());
mPrependItemsRequested = Math.max(prependItems, mPrependItemsRequested);
if (mPrependItemsRequested > 0) {
@@ -123,21 +173,6 @@
}
}
- @Override
- public int getLoadedCount() {
- return mList.size();
- }
-
- @Override
- public int getLeadingNullCount() {
- return mLeadingNullCount;
- }
-
- @Override
- public int getTrailingNullCount() {
- return mTrailingNullCount;
- }
-
@MainThread
private void schedulePrepend() {
if (mPrependWorkerRunning) {
@@ -145,29 +180,17 @@
}
mPrependWorkerRunning = true;
- final int position = mLeadingNullCount + mPositionOffset;
- final T item = mList.get(0);
+ final int position = mStorage.getLeadingNullCount() + mStorage.getPositionOffset();
+
+ // safe to access first item here - mStorage can't be empty if we're prepending
+ final V item = mStorage.getFirstLoadedItem();
mBackgroundThreadExecutor.execute(new Runnable() {
@Override
public void run() {
- if (mDetached.get()) {
+ if (isDetached()) {
return;
}
-
- final List<T> data = mDataSource.loadBefore(position, item, mConfig.mPageSize);
- if (data != null) {
- mMainThreadExecutor.execute(new Runnable() {
- @Override
- public void run() {
- if (mDetached.get()) {
- return;
- }
- prependImpl(data);
- }
- });
- } else {
- detach();
- }
+ mDataSource.loadBefore(position, item, mConfig.pageSize, mReceiver);
}
});
}
@@ -179,56 +202,44 @@
}
mAppendWorkerRunning = true;
- final int position = mLeadingNullCount + mList.size() - 1 + mPositionOffset;
- final T item = mList.get(mList.size() - 1);
+ final int position = mStorage.getLeadingNullCount()
+ + mStorage.getStorageCount() - 1 + mStorage.getPositionOffset();
+
+ // safe to access first item here - mStorage can't be empty if we're appending
+ final V item = mStorage.getLastLoadedItem();
mBackgroundThreadExecutor.execute(new Runnable() {
@Override
public void run() {
- if (mDetached.get()) {
+ if (isDetached()) {
return;
}
-
- final List<T> data = mDataSource.loadAfter(position, item, mConfig.mPageSize);
- if (data != null) {
- mMainThreadExecutor.execute(new Runnable() {
- @Override
- public void run() {
- if (mDetached.get()) {
- return;
- }
- appendImpl(data);
- }
- });
- } else {
- detach();
- }
+ mDataSource.loadAfter(position, item, mConfig.pageSize, mReceiver);
}
});
}
+ @Override
+ boolean isContiguous() {
+ return true;
+ }
+
+ @Nullable
+ @Override
+ public Object getLastKey() {
+ return mDataSource.getKey(mLastLoad, mLastItem);
+ }
+
@MainThread
- private void prependImpl(List<T> before) {
- final int count = before.size();
- if (count == 0) {
- // Nothing returned from source, stop loading in this direction
- return;
- }
+ @Override
+ public void onInitialized(int count) {
+ notifyInserted(0, count);
+ }
- Collections.reverse(before);
- mList.addAll(0, before);
-
- final int changedCount = Math.min(mLeadingNullCount, count);
- final int addedCount = count - changedCount;
-
- if (changedCount != 0) {
- mLeadingNullCount -= changedCount;
- }
- mPositionOffset -= addedCount;
- mNumberPrepended += count;
-
-
- // only try to post more work after fully prepended (with offsets / null counts updated)
- mPrependItemsRequested -= count;
+ @MainThread
+ @Override
+ public void onPagePrepended(int leadingNulls, int changedCount, int addedCount) {
+ // consider whether to post more work, now that a page is fully prepended
+ mPrependItemsRequested = mPrependItemsRequested - changedCount - addedCount;
mPrependWorkerRunning = false;
if (mPrependItemsRequested > 0) {
// not done prepending, keep going
@@ -236,39 +247,18 @@
}
// finally dispatch callbacks, after prepend may have already been scheduled
- for (WeakReference<Callback> weakRef : mCallbacks) {
- Callback callback = weakRef.get();
- if (callback != null) {
- if (changedCount != 0) {
- callback.onChanged(mLeadingNullCount, changedCount);
- }
- if (addedCount != 0) {
- callback.onInserted(0, addedCount);
- }
- }
- }
+ notifyChanged(leadingNulls, changedCount);
+ notifyInserted(0, addedCount);
+
+ offsetBoundaryAccessIndices(addedCount);
}
@MainThread
- private void appendImpl(List<T> after) {
- final int count = after.size();
- if (count == 0) {
- // Nothing returned from source, stop loading in this direction
- return;
- }
+ @Override
+ public void onPageAppended(int endPosition, int changedCount, int addedCount) {
+ // consider whether to post more work, now that a page is fully appended
- mList.addAll(after);
-
- final int changedCount = Math.min(mTrailingNullCount, count);
- final int addedCount = count - changedCount;
-
- if (changedCount != 0) {
- mTrailingNullCount -= changedCount;
- }
- mNumberAppended += count;
-
- // only try to post more work after fully appended (with null counts updated)
- mAppendItemsRequested -= count;
+ mAppendItemsRequested = mAppendItemsRequested - changedCount - addedCount;
mAppendWorkerRunning = false;
if (mAppendItemsRequested > 0) {
// not done appending, keep going
@@ -276,100 +266,19 @@
}
// finally dispatch callbacks, after append may have already been scheduled
- for (WeakReference<Callback> weakRef : mCallbacks) {
- Callback callback = weakRef.get();
- if (callback != null) {
- final int endPosition = mLeadingNullCount + mList.size() - count;
- if (changedCount != 0) {
- callback.onChanged(endPosition, changedCount);
- }
- if (addedCount != 0) {
- callback.onInserted(endPosition + changedCount, addedCount);
- }
- }
- }
+ notifyChanged(endPosition, changedCount);
+ notifyInserted(endPosition + changedCount, addedCount);
}
+ @MainThread
@Override
- public boolean isImmutable() {
- // TODO: return true if had nulls, and now getLoadedCount() == size(). Is that safe?
- // Currently we don't prevent DataSources from returning more items than their null counts
- return isDetached();
+ public void onPagePlaceholderInserted(int pageIndex) {
+ throw new IllegalStateException("Tiled callback on ContiguousPagedList");
}
+ @MainThread
@Override
- public void addWeakCallback(@Nullable PagedList<T> previousSnapshot,
- @NonNull Callback callback) {
- NullPaddedList<T> snapshot = (NullPaddedList<T>) previousSnapshot;
- if (snapshot != this && snapshot != null) {
- final int newlyAppended = mNumberAppended - snapshot.getNumberAppended();
- final int newlyPrepended = mNumberPrepended - snapshot.getNumberPrepended();
-
- final int previousTrailing = snapshot.getTrailingNullCount();
- final int previousLeading = snapshot.getLeadingNullCount();
-
- // Validate that the snapshot looks like a previous version of this list - if it's not,
- // we can't be sure we'll dispatch callbacks safely
- if (newlyAppended < 0
- || newlyPrepended < 0
- || mTrailingNullCount != Math.max(previousTrailing - newlyAppended, 0)
- || mLeadingNullCount != Math.max(previousLeading - newlyPrepended, 0)
- || snapshot.getLoadedCount() + newlyAppended + newlyPrepended != mList.size()) {
- throw new IllegalArgumentException("Invalid snapshot provided - doesn't appear"
- + " to be a snapshot of this list");
- }
-
- if (newlyAppended != 0) {
- final int changedCount = Math.min(previousTrailing, newlyAppended);
- final int addedCount = newlyAppended - changedCount;
-
- final int endPosition =
- snapshot.getLeadingNullCount() + snapshot.getLoadedCount();
- if (changedCount != 0) {
- callback.onChanged(endPosition, changedCount);
- }
- if (addedCount != 0) {
- callback.onInserted(endPosition + changedCount, addedCount);
- }
- }
- if (newlyPrepended != 0) {
- final int changedCount = Math.min(previousLeading, newlyPrepended);
- final int addedCount = newlyPrepended - changedCount;
-
- if (changedCount != 0) {
- callback.onChanged(previousLeading, changedCount);
- }
- if (addedCount != 0) {
- callback.onInserted(0, addedCount);
- }
- }
- }
- mCallbacks.add(new WeakReference<>(callback));
- }
-
- @Override
- public void removeWeakCallback(@NonNull Callback callback) {
- for (int i = mCallbacks.size() - 1; i >= 0; i--) {
- Callback currentCallback = mCallbacks.get(i).get();
- if (currentCallback == null || currentCallback == callback) {
- mCallbacks.remove(i);
- }
- }
- }
-
- @Override
- public boolean isDetached() {
- return mDetached.get();
- }
-
- @SuppressWarnings("WeakerAccess")
- public void detach() {
- mDetached.set(true);
- }
-
- @Nullable
- @Override
- public Object getLastKey() {
- return mDataSource.getKey(mLastLoad, mLastItem);
+ public void onPageInserted(int start, int count) {
+ throw new IllegalStateException("Tiled callback on ContiguousPagedList");
}
}
diff --git a/paging/common/src/main/java/android/arch/paging/DataSource.java b/paging/common/src/main/java/android/arch/paging/DataSource.java
index 48fbec5..ff44521 100644
--- a/paging/common/src/main/java/android/arch/paging/DataSource.java
+++ b/paging/common/src/main/java/android/arch/paging/DataSource.java
@@ -17,6 +17,7 @@
package android.arch.paging;
import android.support.annotation.AnyThread;
+import android.support.annotation.NonNull;
import android.support.annotation.WorkerThread;
import java.util.concurrent.CopyOnWriteArrayList;
@@ -47,6 +48,10 @@
@SuppressWarnings("unused") // suppress warning to remove Key/Value, needed for subclass type safety
public abstract class DataSource<Key, Value> {
+ public interface Factory<Key, Value> {
+ DataSource<Key, Value> create();
+ }
+
// Since we currently rely on implementation details of two implementations,
// prevent external subclassing, except through exposed subclasses
DataSource() {
@@ -60,15 +65,6 @@
public static int COUNT_UNDEFINED = -1;
/**
- * Number of items that this DataSource can provide in total, or {@link #COUNT_UNDEFINED}.
- *
- * @return number of items that this DataSource can provide in total, or
- * {@link #COUNT_UNDEFINED} if expensive or undesired to compute.
- */
- @WorkerThread
- public abstract int countItems();
-
- /**
* Returns true if the data source guaranteed to produce a contiguous set of items,
* never producing gaps.
*/
@@ -111,7 +107,7 @@
*/
@AnyThread
@SuppressWarnings("WeakerAccess")
- public void addInvalidatedCallback(InvalidatedCallback onInvalidatedCallback) {
+ public void addInvalidatedCallback(@NonNull InvalidatedCallback onInvalidatedCallback) {
mOnInvalidatedCallbacks.add(onInvalidatedCallback);
}
@@ -122,7 +118,7 @@
*/
@AnyThread
@SuppressWarnings("WeakerAccess")
- public void removeInvalidatedCallback(InvalidatedCallback onInvalidatedCallback) {
+ public void removeInvalidatedCallback(@NonNull InvalidatedCallback onInvalidatedCallback) {
mOnInvalidatedCallbacks.remove(onInvalidatedCallback);
}
diff --git a/paging/common/src/main/java/android/arch/paging/KeyedDataSource.java b/paging/common/src/main/java/android/arch/paging/KeyedDataSource.java
index 3109f64..3214a4e 100644
--- a/paging/common/src/main/java/android/arch/paging/KeyedDataSource.java
+++ b/paging/common/src/main/java/android/arch/paging/KeyedDataSource.java
@@ -19,7 +19,6 @@
import android.support.annotation.AnyThread;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
-import android.support.annotation.RestrictTo;
import android.support.annotation.WorkerThread;
import java.util.ArrayList;
@@ -55,7 +54,7 @@
* {@literal @}SuppressWarnings("FieldCanBeLocal")
* private final InvalidationTracker.Observer mObserver;
*
- * public OffsetUserQueryDataSource(MyDatabase db) {
+ * public KeyedUserQueryDataSource(MyDatabase db) {
* mDb = db;
* mUserDao = db.getUserDao();
* mObserver = new InvalidationTracker.Observer("user") {
@@ -86,11 +85,15 @@
*
* {@literal @}Override
* public List<User> loadBefore({@literal @}NonNull String userName, int pageSize) {
+ * // Return items adjacent to 'userName' in reverse order
+ * // it's valid to return a different-sized list of items than pageSize, if it's easier
* return mUserDao.userNameLoadBefore(userName, pageSize);
* }
*
* {@literal @}Override
* public List<User> loadAfter({@literal @}Nullable String userName, int pageSize) {
+ * // Return items adjacent to 'userName'
+ * // it's valid to return a different-sized list of items than pageSize, if it's easier
* return mUserDao.userNameLoadAfter(userName, pageSize);
* }
* }</pre>
@@ -99,10 +102,6 @@
* @param <Value> Type of items being loaded by the DataSource.
*/
public abstract class KeyedDataSource<Key, Value> extends ContiguousDataSource<Key, Value> {
- @Override
- public final int countItems() {
- return 0; // method not called, can't be overridden
- }
@Nullable
@Override
@@ -114,12 +113,43 @@
@Override
List<Value> loadBeforeImpl(
int currentBeginIndex, @NonNull Value currentBeginItem, int pageSize) {
- return loadBefore(getKey(currentBeginItem), pageSize);
+ List<Value> list = loadBefore(getKey(currentBeginItem), pageSize);
+
+ if (list != null && list.size() > 1) {
+ // TODO: move out of keyed entirely, into the DB DataSource.
+ list = new ArrayList<>(list);
+ Collections.reverse(list);
+ }
+ return list;
}
+
+ @Override
+ void loadInitial(Key key, int initialLoadSize, boolean enablePlaceholders,
+ @NonNull PageResult.Receiver<Key, Value> receiver) {
+
+ PageResult<Key, Value> pageResult =
+ loadInitialInternal(key, initialLoadSize, enablePlaceholders);
+ if (pageResult == null) {
+ // loading failed, return empty page
+ receiver.onPageResult(new PageResult<Key, Value>(PageResult.INIT));
+ } else {
+ receiver.onPageResult(pageResult);
+ }
+ }
+
+ /**
+ * Try initial load, and either return the successful initial load to the receiver,
+ * or null if unsuccessful.
+ */
@Nullable
- private NullPaddedList<Value> loadInitialInternal(
+ private PageResult<Key, Value> loadInitialInternal(
@Nullable Key key, int initialLoadSize, boolean enablePlaceholders) {
+ // check if invalid at beginning, and before returning a valid list
+ if (isInvalid()) {
+ return null;
+ }
+
List<Value> list;
if (key == null) {
// no key, so load initial.
@@ -164,9 +194,14 @@
}
}
+ final Page<Key, Value> page = new Page<>(list);
+
if (list.isEmpty()) {
- // wasn't able to load any items, so publish an unpadded empty list.
- return new NullPaddedList<>(0, Collections.<Value>emptyList());
+ if (isInvalid()) {
+ return null;
+ }
+ // wasn't able to load any items, but not invalid - return an empty page.
+ return new PageResult<>(PageResult.INIT, page, 0, 0, 0);
}
int itemsBefore = COUNT_UNDEFINED;
@@ -174,29 +209,21 @@
if (enablePlaceholders) {
itemsBefore = countItemsBefore(getKey(list.get(0)));
itemsAfter = countItemsAfter(getKey(list.get(list.size() - 1)));
- if (isInvalid()) {
- return null;
- }
}
- if (itemsBefore == COUNT_UNDEFINED || itemsAfter == COUNT_UNDEFINED) {
- return new NullPaddedList<>(0, list, 0);
- } else {
- return new NullPaddedList<>(itemsBefore, list, itemsAfter);
- }
- }
- /** @hide */
- @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
- public NullPaddedList<Value> loadInitial(
- @Nullable Key key, int initialLoadSize, boolean enablePlaceholders) {
if (isInvalid()) {
return null;
}
- NullPaddedList<Value> list = loadInitialInternal(key, initialLoadSize, enablePlaceholders);
- if (list == null || isInvalid()) {
- return null;
+ if (itemsBefore == COUNT_UNDEFINED || itemsAfter == COUNT_UNDEFINED) {
+ itemsBefore = 0;
+ itemsAfter = 0;
}
- return list;
+ return new PageResult<>(
+ PageResult.INIT,
+ page,
+ itemsBefore,
+ itemsAfter,
+ 0);
}
/**
@@ -283,10 +310,17 @@
public abstract List<Value> loadAfter(@NonNull Key currentEndKey, int pageSize);
/**
- * Load data before the currently loaded content, starting at the provided index.
+ * Load data before the currently loaded content, starting at the provided index,
+ * in reverse-display order.
* <p>
* It's valid to return a different list size than the page size, if it's easier for this data
* source. It is generally safer to increase the number loaded than reduce.
+ * <p class="note"><strong>Note:</strong> Items returned from loadBefore <em>must</em> be in
+ * reverse order from how they will be presented in the list. The first item in the return list
+ * will be prepended immediately before the current beginning of the list. This is so that the
+ * KeyedDataSource may return a different number of items from the requested {@code pageSize} by
+ * shortening or lengthening the return list as it desires.
+ * <p>
*
* @param currentBeginKey Load items before this key.
* @param pageSize Suggested number of items to load.
diff --git a/paging/runtime/src/androidTest/java/android/arch/paging/ListDataSource.java b/paging/common/src/main/java/android/arch/paging/ListDataSource.java
similarity index 87%
rename from paging/runtime/src/androidTest/java/android/arch/paging/ListDataSource.java
rename to paging/common/src/main/java/android/arch/paging/ListDataSource.java
index f3e83d0..d3a171e 100644
--- a/paging/runtime/src/androidTest/java/android/arch/paging/ListDataSource.java
+++ b/paging/common/src/main/java/android/arch/paging/ListDataSource.java
@@ -16,13 +16,14 @@
package android.arch.paging;
+import java.util.ArrayList;
import java.util.List;
public class ListDataSource<T> extends TiledDataSource<T> {
- private List<T> mList;
+ private final List<T> mList;
- ListDataSource(List<T> data) {
- mList = data;
+ public ListDataSource(List<T> list) {
+ mList = new ArrayList<>(list);
}
@Override
diff --git a/paging/common/src/main/java/android/arch/paging/NullPaddedList.java b/paging/common/src/main/java/android/arch/paging/NullPaddedList.java
deleted file mode 100644
index 4300030..0000000
--- a/paging/common/src/main/java/android/arch/paging/NullPaddedList.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.arch.paging;
-
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.RestrictTo;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * NullPaddedList is a simple list, with optional null padding on the beginning and end.
- *
- * @param <Type> The type of the entries in the list.
- *
- * @hide
- */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-public class NullPaddedList<Type> extends PagedList<Type> {
- List<Type> mList;
- int mTrailingNullCount;
- int mLeadingNullCount;
- int mPositionOffset;
-
- // track the items prepended/appended since the PagedList was initialized
- int mNumberPrepended;
- int mNumberAppended;
-
- NullPaddedList() {
- }
-
- @Override
- public String toString() {
- return "NullPaddedList " + mLeadingNullCount
- + ", " + mList.size()
- + ", " + mTrailingNullCount;
- }
-
- /**
- * Create a static, immutable NullPaddedList with the specified list,
- *
- * @param leadingNullCount Number of empty items in advance of the passed list.
- * @param list List of items.
- * @param trailingNullCount Number of empty items following the passed list.
- */
- NullPaddedList(int leadingNullCount, List<Type> list, int trailingNullCount) {
- if (leadingNullCount < 0 || trailingNullCount < 0) {
- throw new IllegalArgumentException("leading/trailing null count must be non-negative");
- }
- if (list == null) {
- throw new IllegalArgumentException("list must be non-null");
- }
- mList = list;
- mLeadingNullCount = leadingNullCount;
- mTrailingNullCount = trailingNullCount;
- }
-
- NullPaddedList(int leadingNullCount, int totalCount, List<Type> list) {
- if (list == null) {
- throw new IllegalArgumentException("list must be non-null");
- }
-
- int trailingNullCount = totalCount - (leadingNullCount) - list.size();
-
- mList = list;
- mLeadingNullCount = leadingNullCount;
- mTrailingNullCount = trailingNullCount;
- }
-
- NullPaddedList(int positionOffset, List<Type> list) {
- if (list == null) {
- throw new IllegalArgumentException("list must be non-null");
- }
-
- mList = list;
- mPositionOffset = positionOffset;
- }
-
- /**
- * Create a copy of the passed NullPaddedList.
- *
- * @param other Other list to copy.
- */
- NullPaddedList(NullPaddedList<Type> other) {
- mLeadingNullCount = other.getLeadingNullCount();
- mList = other.isImmutable() ? other.mList : new ArrayList<>(other.mList);
- mTrailingNullCount = other.getTrailingNullCount();
-
- mNumberPrepended = other.getNumberPrepended();
- mNumberAppended = other.getNumberAppended();
- }
-
- // --------------- PagedList API ---------------
-
- @Override
- public Type get(int index) {
- if (index < 0 || index >= size()) {
- throw new IndexOutOfBoundsException();
- }
-
- index -= mLeadingNullCount;
- if (index < 0) {
- return null;
- }
- if (index >= mList.size()) {
- return null;
- }
- return mList.get(index);
- }
-
- @Override
- public void loadAround(int index) {
- // do nothing - immutable, so no fetching will be done
- }
-
- @Override
- public final int size() {
- return getLoadedCount() + getLeadingNullCount() + getTrailingNullCount();
- }
-
- public boolean isImmutable() {
- return true;
- }
-
- @Override
- public PagedList<Type> snapshot() {
- if (isImmutable()) {
- return this;
- }
- return new NullPaddedList<>(this);
- }
-
- @Override
- boolean isContiguous() {
- return true;
- }
-
- @Override
- public void addWeakCallback(@Nullable PagedList<Type> previousSnapshot,
- @NonNull Callback callback) {
- // no op, immutable
- }
-
- @Override
- public void removeWeakCallback(Callback callback) {
- // no op, immutable
- }
-
- // --------------- Contiguous API ---------------
-
- @Override
- public int getPositionOffset() {
- return mPositionOffset;
- }
-
- /**
- * Number of loaded items. This does not account for leading or trailing null padding.
- *
- * @return Number of loaded items.
- */
- public int getLoadedCount() {
- return mList.size();
- }
-
- /**
- * Number of empty, unloaded items ahead of the loaded item region.
- *
- * @return Number of nulls before the loaded list.
- */
- public int getLeadingNullCount() {
- return mLeadingNullCount;
- }
-
- /**
- * Number of empty, unloaded items behind the loaded item region.
- *
- * @return Number of nulls after the loaded list.
- */
- public int getTrailingNullCount() {
- return mTrailingNullCount;
- }
-
- int getNumberPrepended() {
- return mNumberPrepended;
- }
-
- int getNumberAppended() {
- return mNumberAppended;
- }
-}
diff --git a/paging/common/src/main/java/android/arch/paging/Page.java b/paging/common/src/main/java/android/arch/paging/Page.java
new file mode 100644
index 0000000..e9890ed
--- /dev/null
+++ b/paging/common/src/main/java/android/arch/paging/Page.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.arch.paging;
+
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+
+import java.util.List;
+
+/**
+ * Immutable class representing a page of data loaded from a DataSource.
+ * <p>
+ * Optionally stores before/after keys for cases where they cannot be computed, but the DataSource
+ * can provide them as part of loading a page.
+ * <p>
+ * A page's list must never be modified.
+ */
+class Page<K, V> {
+ @SuppressWarnings("WeakerAccess")
+ @Nullable
+ public final K beforeKey;
+ @NonNull
+ public final List<V> items;
+ @SuppressWarnings("WeakerAccess")
+ @Nullable
+ public K afterKey;
+
+ Page(@NonNull List<V> items) {
+ this(null, items, null);
+ }
+
+ Page(@Nullable K beforeKey, @NonNull List<V> items, @Nullable K afterKey) {
+ this.beforeKey = beforeKey;
+ this.items = items;
+ this.afterKey = afterKey;
+ }
+}
diff --git a/paging/common/src/main/java/android/arch/paging/PageArrayList.java b/paging/common/src/main/java/android/arch/paging/PageArrayList.java
deleted file mode 100644
index b90d055..0000000
--- a/paging/common/src/main/java/android/arch/paging/PageArrayList.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.arch.paging;
-
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.RestrictTo;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/** @hide */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-class PageArrayList<T> extends PagedList<T> {
- // partial list of pages, doesn't include pages below the lowest accessed, or above the highest
- final ArrayList<List<T>> mPages;
-
- // to access page at index N, do mPages.get(N - mPageIndexOffset), but do bounds checking first!
- int mPageIndexOffset;
-
- final int mPageSize;
- final int mCount;
- final int mMaxPageCount;
-
- PageArrayList(int pageSize, int count) {
- mPages = new ArrayList<>();
- mPageSize = pageSize;
- mCount = count;
- mMaxPageCount = (mCount + mPageSize - 1) / mPageSize;
- }
-
- private PageArrayList(PageArrayList<T> other) {
- mPages = other.isImmutable() ? other.mPages : new ArrayList<>(other.mPages);
- mPageIndexOffset = other.mPageIndexOffset;
- mPageSize = other.mPageSize;
- mCount = other.size();
- mMaxPageCount = other.mMaxPageCount;
- }
-
- @Override
- public T get(int index) {
- if (index < 0 || index >= mCount) {
- throw new IllegalArgumentException();
- }
-
- int localPageIndex = getLocalPageIndex(index);
-
- List<T> page = getPage(localPageIndex);
-
- if (page == null) {
- // page empty
- return null;
- }
-
- return page.get(index % mPageSize);
- }
-
- @Nullable
- private List<T> getPage(int localPageIndex) {
- if (localPageIndex < 0 || localPageIndex >= mPages.size()) {
- // page not present
- return null;
- }
-
- return mPages.get(localPageIndex);
- }
-
- private int getLocalPageIndex(int index) {
- return index / mPageSize - mPageIndexOffset;
- }
-
- @Override
- public void loadAround(int index) {
- // do nothing - immutable, so no fetching will be done
- }
-
- @Override
- public int size() {
- return mCount;
- }
-
- @Override
- public boolean isImmutable() {
- return true;
- }
-
- boolean hasPage(int pageIndex) {
- final int localPageIndex = pageIndex - mPageIndexOffset;
- List<T> page = getPage(localPageIndex);
- return page != null && page.size() != 0;
- }
-
- @Override
- public PagedList<T> snapshot() {
- if (isImmutable()) {
- return this;
- }
- return new PageArrayList<>(this);
- }
-
- @Override
- boolean isContiguous() {
- return false;
- }
-
- @Override
- public void addWeakCallback(@Nullable PagedList<T> previousSnapshot,
- @NonNull Callback callback) {
- // no op, immutable
- }
-
- @Override
- public void removeWeakCallback(Callback callback) {
- // no op, immutable
- }
-}
diff --git a/paging/common/src/main/java/android/arch/paging/PageResult.java b/paging/common/src/main/java/android/arch/paging/PageResult.java
new file mode 100644
index 0000000..55d5fb7
--- /dev/null
+++ b/paging/common/src/main/java/android/arch/paging/PageResult.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.arch.paging;
+
+import android.support.annotation.AnyThread;
+import android.support.annotation.MainThread;
+import android.support.annotation.NonNull;
+
+class PageResult<K, V> {
+ static final int INIT = 0;
+
+ // contiguous results
+ static final int APPEND = 1;
+ static final int PREPEND = 2;
+
+ // non-contiguous, tile result
+ static final int TILE = 3;
+
+ public final int type;
+ public final Page<K, V> page;
+ @SuppressWarnings("WeakerAccess")
+ public final int leadingNulls;
+ @SuppressWarnings("WeakerAccess")
+ public final int trailingNulls;
+ @SuppressWarnings("WeakerAccess")
+ public final int positionOffset;
+
+ PageResult(int type, Page<K, V> page, int leadingNulls, int trailingNulls, int positionOffset) {
+ this.type = type;
+ this.page = page;
+ this.leadingNulls = leadingNulls;
+ this.trailingNulls = trailingNulls;
+ this.positionOffset = positionOffset;
+ }
+
+ PageResult(int type) {
+ this.type = type;
+ this.page = null;
+ this.leadingNulls = 0;
+ this.trailingNulls = 0;
+ this.positionOffset = 0;
+ }
+
+ interface Receiver<K, V> {
+ @AnyThread
+ void postOnPageResult(@NonNull PageResult<K, V> pageResult);
+ @MainThread
+ void onPageResult(@NonNull PageResult<K, V> pageResult);
+ }
+}
diff --git a/paging/common/src/main/java/android/arch/paging/PagedList.java b/paging/common/src/main/java/android/arch/paging/PagedList.java
index 6a31b68..f18e108 100644
--- a/paging/common/src/main/java/android/arch/paging/PagedList.java
+++ b/paging/common/src/main/java/android/arch/paging/PagedList.java
@@ -16,13 +16,18 @@
package android.arch.paging;
+import android.support.annotation.AnyThread;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
+import android.support.annotation.RestrictTo;
import android.support.annotation.WorkerThread;
+import java.lang.ref.WeakReference;
import java.util.AbstractList;
+import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executor;
+import java.util.concurrent.atomic.AtomicBoolean;
/**
* Lazy loading list that pages in content from a {@link DataSource}.
@@ -90,9 +95,44 @@
* @param <T> The type of the entries in the list.
*/
public abstract class PagedList<T> extends AbstractList<T> {
- // Since we currently rely on implementation details of two implementations,
- // prevent external subclassing
- PagedList() {
+ @NonNull
+ final Executor mMainThreadExecutor;
+ @NonNull
+ final Executor mBackgroundThreadExecutor;
+ @Nullable
+ final BoundaryCallback<T> mBoundaryCallback;
+ @NonNull
+ final Config mConfig;
+ @NonNull
+ final PagedStorage<?, T> mStorage;
+
+ int mLastLoad = 0;
+ T mLastItem = null;
+
+ // if set to true, mBoundaryCallback is non-null, and should
+ // be dispatched when nearby load has occurred
+ private boolean mBoundaryCallbackBeginDeferred = false;
+ private boolean mBoundaryCallbackEndDeferred = false;
+
+ // lowest and highest index accessed by loadAround. Used to
+ // decide when mBoundaryCallback should be dispatched
+ private int mLowestIndexAccessed = Integer.MAX_VALUE;
+ private int mHighestIndexAccessed = Integer.MIN_VALUE;
+
+ private final AtomicBoolean mDetached = new AtomicBoolean(false);
+
+ protected final ArrayList<WeakReference<Callback>> mCallbacks = new ArrayList<>();
+
+ PagedList(@NonNull PagedStorage<?, T> storage,
+ @NonNull Executor mainThreadExecutor,
+ @NonNull Executor backgroundThreadExecutor,
+ @Nullable BoundaryCallback<T> boundaryCallback,
+ @NonNull Config config) {
+ mStorage = storage;
+ mMainThreadExecutor = mainThreadExecutor;
+ mBackgroundThreadExecutor = backgroundThreadExecutor;
+ mBoundaryCallback = boundaryCallback;
+ mConfig = config;
}
/**
@@ -105,6 +145,7 @@
* Generally, this is the UI/main thread.
* @param backgroundThreadExecutor Data loading will be done via this executor - should be a
* background thread.
+ * @param boundaryCallback Optional boundary callback to attach to the list.
* @param config PagedList Config, which defines how the PagedList will load data.
* @param <K> Key type that indicates to the DataSource what data to load.
* @param <T> Type of items to be held and loaded by the PagedList.
@@ -115,9 +156,10 @@
private static <K, T> PagedList<T> create(@NonNull DataSource<K, T> dataSource,
@NonNull Executor mainThreadExecutor,
@NonNull Executor backgroundThreadExecutor,
+ @Nullable BoundaryCallback<T> boundaryCallback,
@NonNull Config config,
@Nullable K key) {
- if (dataSource.isContiguous() || !config.mEnablePlaceholders) {
+ if (dataSource.isContiguous() || !config.enablePlaceholders) {
if (!dataSource.isContiguous()) {
//noinspection unchecked
dataSource = (DataSource<K, T>) ((TiledDataSource<T>) dataSource).getAsContiguous();
@@ -126,12 +168,14 @@
return new ContiguousPagedList<>(contigDataSource,
mainThreadExecutor,
backgroundThreadExecutor,
+ boundaryCallback,
config,
key);
} else {
return new TiledPagedList<>((TiledDataSource<T>) dataSource,
mainThreadExecutor,
backgroundThreadExecutor,
+ boundaryCallback,
config,
(key != null) ? (Integer) key : 0);
}
@@ -162,6 +206,7 @@
private DataSource<Key, Value> mDataSource;
private Executor mMainThreadExecutor;
private Executor mBackgroundThreadExecutor;
+ private BoundaryCallback mBoundaryCallback;
private Config mConfig;
private Key mInitialKey;
@@ -205,6 +250,14 @@
return this;
}
+ @NonNull
+ public Builder<Key, Value> setBoundaryCallback(
+ @Nullable BoundaryCallback boundaryCallback) {
+ mBoundaryCallback = boundaryCallback;
+ return this;
+ }
+
+
/**
* The Config defining how the PagedList should load from the DataSource.
*
@@ -260,10 +313,12 @@
throw new IllegalArgumentException("Config required");
}
+ //noinspection unchecked
return PagedList.create(
mDataSource,
mMainThreadExecutor,
mBackgroundThreadExecutor,
+ mBoundaryCallback,
mConfig,
mInitialKey);
}
@@ -280,16 +335,138 @@
*/
@Override
@Nullable
- public abstract T get(int index);
-
+ public T get(int index) {
+ T item = mStorage.get(index);
+ if (item != null) {
+ mLastItem = item;
+ }
+ return item;
+ }
/**
* Load adjacent items to passed index.
*
* @param index Index at which to load.
*/
- public abstract void loadAround(int index);
+ public void loadAround(int index) {
+ mLastLoad = index + getPositionOffset();
+ loadAroundInternal(index);
+ mLowestIndexAccessed = Math.min(mLowestIndexAccessed, index);
+ mHighestIndexAccessed = Math.max(mHighestIndexAccessed, index);
+
+ /*
+ * mLowestIndexAccessed / mHighestIndexAccessed have been updated, so check if we need to
+ * dispatch boundary callbacks. Boundary callbacks are deferred until last items are loaded,
+ * and accesses happen near the boundaries.
+ *
+ * Note: we post here, since RecyclerView may want to add items in response, and this
+ * call occurs in PagedListAdapter bind.
+ */
+ tryDispatchBoundaryCallbacks(true);
+ }
+
+ // Creation thread for initial synchronous load, otherwise main thread
+ // Safe to access main thread only state - no other thread has reference during construction
+ @AnyThread
+ void deferBoundaryCallbacks(final boolean deferEmpty,
+ final boolean deferBegin, final boolean deferEnd) {
+ if (mBoundaryCallback == null) {
+ throw new IllegalStateException("Computing boundary");
+ }
+
+ /*
+ * If lowest/highest haven't been initialized, set them to storage size,
+ * since placeholders must already be computed by this point.
+ *
+ * This is just a minor optimization so that BoundaryCallback callbacks are sent immediately
+ * if the initial load size is smaller than the prefetch window (see
+ * TiledPagedListTest#boundaryCallback_immediate())
+ */
+ if (mLowestIndexAccessed == Integer.MAX_VALUE) {
+ mLowestIndexAccessed = mStorage.size();
+ }
+ if (mHighestIndexAccessed == Integer.MIN_VALUE) {
+ mHighestIndexAccessed = 0;
+ }
+
+ if (deferEmpty || deferBegin || deferEnd) {
+ // Post to the main thread, since we may be on creation thread currently
+ mMainThreadExecutor.execute(new Runnable() {
+ @Override
+ public void run() {
+ // on is dispatched immediately, since items won't be accessed
+ //noinspection ConstantConditions
+ if (deferEmpty) {
+ mBoundaryCallback.onZeroItemsLoaded();
+ }
+
+ // for other callbacks, mark deferred, and only dispatch if loadAround
+ // has been called near to the position
+ if (deferBegin) {
+ mBoundaryCallbackBeginDeferred = true;
+ }
+ if (deferEnd) {
+ mBoundaryCallbackEndDeferred = true;
+ }
+ tryDispatchBoundaryCallbacks(false);
+ }
+ });
+ }
+ }
+
+ /**
+ * Call this when mLowest/HighestIndexAccessed are changed, or
+ * mBoundaryCallbackBegin/EndDeferred is set.
+ */
+ private void tryDispatchBoundaryCallbacks(boolean post) {
+ final boolean dispatchBegin = mBoundaryCallbackBeginDeferred
+ && mLowestIndexAccessed <= mConfig.prefetchDistance;
+ final boolean dispatchEnd = mBoundaryCallbackEndDeferred
+ && mHighestIndexAccessed >= size() - mConfig.prefetchDistance;
+
+ if (!dispatchBegin && !dispatchEnd) {
+ return;
+ }
+
+ if (dispatchBegin) {
+ mBoundaryCallbackBeginDeferred = false;
+ }
+ if (dispatchEnd) {
+ mBoundaryCallbackEndDeferred = false;
+ }
+ if (post) {
+ mMainThreadExecutor.execute(new Runnable() {
+ @Override
+ public void run() {
+ dispatchBoundaryCallbacks(dispatchBegin, dispatchEnd);
+ }
+ });
+ } else {
+ dispatchBoundaryCallbacks(dispatchBegin, dispatchEnd);
+ }
+ }
+
+ private void dispatchBoundaryCallbacks(boolean begin, boolean end) {
+ // safe to deref mBoundaryCallback here, since we only defer if mBoundaryCallback present
+ if (begin) {
+ //noinspection ConstantConditions
+ mBoundaryCallback.onItemAtFrontLoaded(
+ snapshot(), mStorage.getFirstLoadedItem(), mStorage.size());
+ }
+ if (end) {
+ //noinspection ConstantConditions
+ mBoundaryCallback.onItemAtEndLoaded(
+ snapshot(), mStorage.getLastLoadedItem(), mStorage.size());
+ }
+ }
+
+ /** @hide */
+ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+ void offsetBoundaryAccessIndices(int offset) {
+ mLowestIndexAccessed += offset;
+ mHighestIndexAccessed += offset;
+ }
/**
* Returns size of the list, including any not-yet-loaded null padding.
@@ -297,7 +474,9 @@
* @return Current total size of the list.
*/
@Override
- public abstract int size();
+ public int size() {
+ return mStorage.size();
+ }
/**
* Returns whether the list is immutable. Immutable lists may not become mutable again, and may
@@ -305,19 +484,40 @@
*
* @return True if the PagedList is immutable.
*/
- public abstract boolean isImmutable();
+ @SuppressWarnings("WeakerAccess")
+ public boolean isImmutable() {
+ return isDetached();
+ }
/**
* Returns an immutable snapshot of the PagedList. If this PagedList is already
* immutable, it will be returned.
*
- * @return Immutable snapshot of PagedList, which may be the PagedList itself.
+ * @return Immutable snapshot of PagedList data.
*/
- public abstract List<T> snapshot();
+ @SuppressWarnings("WeakerAccess")
+ @NonNull
+ public List<T> snapshot() {
+ if (isImmutable()) {
+ return this;
+ }
+
+ return new SnapshotPagedList<>(this);
+ }
abstract boolean isContiguous();
/**
+ * Return the Config used to construct this PagedList.
+ *
+ * @return the Config of this PagedList
+ */
+ @NonNull
+ public Config getConfig() {
+ return mConfig;
+ }
+
+ /**
* Return the key for the position passed most recently to {@link #loadAround(int)}.
* <p>
* When a PagedList is invalidated, you can pass the key returned by this function to initialize
@@ -328,9 +528,7 @@
* @return Key of position most recently passed to {@link #loadAround(int)}.
*/
@Nullable
- public Object getLastKey() {
- return null;
- }
+ public abstract Object getLastKey();
/**
* True if the PagedList has detached the DataSource it was loading from, and will no longer
@@ -338,8 +536,9 @@
*
* @return True if the data source is detached.
*/
+ @SuppressWarnings("WeakerAccess")
public boolean isDetached() {
- return true;
+ return mDetached.get();
}
/**
@@ -349,7 +548,9 @@
* signal to stop loading. The PagedList will continue to present existing data, but will not
* initiate new loads.
*/
+ @SuppressWarnings("WeakerAccess")
public void detach() {
+ mDetached.set(true);
}
/**
@@ -361,7 +562,7 @@
* If the DataSource is a {@link KeyedDataSource}, and thus doesn't use positions, returns 0.
*/
public int getPositionOffset() {
- return 0;
+ return mStorage.getPositionOffset();
}
/**
@@ -385,16 +586,69 @@
* @param callback Callback to dispatch to.
* @see #removeWeakCallback(Callback)
*/
- public abstract void addWeakCallback(@Nullable PagedList<T> previousSnapshot,
- @NonNull Callback callback);
+ @SuppressWarnings("WeakerAccess")
+ public void addWeakCallback(@Nullable List<T> previousSnapshot, @NonNull Callback callback) {
+ if (previousSnapshot != null && previousSnapshot != this) {
+ PagedList<T> storageSnapshot = (PagedList<T>) previousSnapshot;
+ //noinspection unchecked
+ dispatchUpdatesSinceSnapshot(storageSnapshot, callback);
+ }
+ // first, clean up any empty weak refs
+ for (int i = mCallbacks.size() - 1; i >= 0; i--) {
+ Callback currentCallback = mCallbacks.get(i).get();
+ if (currentCallback == null) {
+ mCallbacks.remove(i);
+ }
+ }
+
+ // then add the new one
+ mCallbacks.add(new WeakReference<>(callback));
+ }
/**
* Removes a previously added callback.
*
* @param callback Callback, previously added.
- * @see #addWeakCallback(PagedList, Callback)
+ * @see #addWeakCallback(List, Callback)
*/
- public abstract void removeWeakCallback(Callback callback);
+ @SuppressWarnings("WeakerAccess")
+ public void removeWeakCallback(@NonNull Callback callback) {
+ for (int i = mCallbacks.size() - 1; i >= 0; i--) {
+ Callback currentCallback = mCallbacks.get(i).get();
+ if (currentCallback == null || currentCallback == callback) {
+ // found callback, or empty weak ref
+ mCallbacks.remove(i);
+ }
+ }
+ }
+
+ void notifyInserted(int position, int count) {
+ if (count != 0) {
+ for (int i = mCallbacks.size() - 1; i >= 0; i--) {
+ Callback callback = mCallbacks.get(i).get();
+ if (callback != null) {
+ callback.onInserted(position, count);
+ }
+ }
+ }
+ }
+
+ void notifyChanged(int position, int count) {
+ if (count != 0) {
+ for (int i = mCallbacks.size() - 1; i >= 0; i--) {
+ Callback callback = mCallbacks.get(i).get();
+
+ if (callback != null) {
+ callback.onChanged(position, count);
+ }
+ }
+ }
+ }
+
+ abstract void dispatchUpdatesSinceSnapshot(@NonNull PagedList<T> snapshot,
+ @NonNull Callback callback);
+
+ abstract void loadAroundInternal(int index);
/**
* Callback signaling when content is loaded into the list.
@@ -442,17 +696,41 @@
* {@link Builder#setPageSize(int)}, which defines number of items loaded at a time}.
*/
public static class Config {
- final int mPageSize;
- final int mPrefetchDistance;
- final boolean mEnablePlaceholders;
- final int mInitialLoadSizeHint;
+ /**
+ * Size of each page loaded by the PagedList.
+ */
+ public final int pageSize;
+
+ /**
+ * Prefetch distance which defines how far ahead to load.
+ * <p>
+ * If this value is set to 50, the paged list will attempt to load 50 items in advance of
+ * data that's already been accessed.
+ *
+ * @see PagedList#loadAround(int)
+ */
+ @SuppressWarnings("WeakerAccess")
+ public final int prefetchDistance;
+
+ /**
+ * Defines whether the PagedList may display null placeholders, if the DataSource provides
+ * them.
+ */
+ @SuppressWarnings("WeakerAccess")
+ public final boolean enablePlaceholders;
+
+ /**
+ * Size hint for initial load of PagedList, often larger than a regular page.
+ */
+ @SuppressWarnings("WeakerAccess")
+ public final int initialLoadSizeHint;
private Config(int pageSize, int prefetchDistance,
boolean enablePlaceholders, int initialLoadSizeHint) {
- mPageSize = pageSize;
- mPrefetchDistance = prefetchDistance;
- mEnablePlaceholders = enablePlaceholders;
- mInitialLoadSizeHint = initialLoadSizeHint;
+ this.pageSize = pageSize;
+ this.prefetchDistance = prefetchDistance;
+ this.enablePlaceholders = enablePlaceholders;
+ this.initialLoadSizeHint = initialLoadSizeHint;
}
/**
@@ -545,10 +823,15 @@
* Defines how many items to load when first load occurs, if you are using a
* {@link KeyedDataSource}.
* <p>
- * If you are using an {@link TiledDataSource}, this value is currently ignored.
- * Otherwise, this value will be passed to
- * {@link KeyedDataSource#loadInitial(int)} to load a (typically) larger amount
- * of data on first load.
+ * This value is typically larger than page size, so on first load data there's a large
+ * enough range of content loaded to cover small scrolls.
+ * <p>
+ * If used with a {@link TiledDataSource}, this value is rounded to the nearest number
+ * of pages, with a minimum of two pages, and loaded with a single call to
+ * {@link TiledDataSource#loadRange(int, int)}.
+ * <p>
+ * If used with a {@link KeyedDataSource}, this value will be passed to
+ * {@link KeyedDataSource#loadInitial(int)}.
* <p>
* If not set, defaults to three times page size.
*
@@ -588,4 +871,15 @@
}
}
}
+
+ /**
+ * WIP API for load-more-into-local-storage callbacks
+ */
+ public abstract static class BoundaryCallback<T> {
+ public abstract void onZeroItemsLoaded();
+ public abstract void onItemAtFrontLoaded(@NonNull List<T> pagedListSnapshot,
+ @NonNull T itemAtFront, int pagedListSize);
+ public abstract void onItemAtEndLoaded(@NonNull List<T> pagedListSnapshot,
+ @NonNull T itemAtEnd, int pagedListSize);
+ }
}
diff --git a/paging/common/src/main/java/android/arch/paging/PagedStorage.java b/paging/common/src/main/java/android/arch/paging/PagedStorage.java
new file mode 100644
index 0000000..b857462
--- /dev/null
+++ b/paging/common/src/main/java/android/arch/paging/PagedStorage.java
@@ -0,0 +1,433 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.arch.paging;
+
+import android.support.annotation.NonNull;
+
+import java.util.AbstractList;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+final class PagedStorage<K, V> extends AbstractList<V> {
+ // Always set
+ private int mLeadingNullCount;
+ /**
+ * List of pages in storage.
+ *
+ * Two storage modes:
+ *
+ * Contiguous - all content in mPages is valid and loaded, but may return false from isTiled().
+ * Safe to access any item in any page.
+ *
+ * Non-contiguous - mPages may have nulls or a placeholder page, isTiled() always returns true.
+ * mPages may have nulls, or placeholder (empty) pages while content is loading.
+ */
+ private final ArrayList<Page<K, V>> mPages;
+ private int mTrailingNullCount;
+
+ private int mPositionOffset;
+ /**
+ * Number of items represented by {@link #mPages}. If tiling is enabled, unloaded items in
+ * {@link #mPages} may be null, but this value still counts them.
+ */
+ private int mStorageCount;
+
+ // If mPageSize > 0, tiling is enabled, 'mPages' may have gaps, and leadingPages is set
+ private int mPageSize;
+
+ private int mNumberPrepended;
+ private int mNumberAppended;
+
+ // only used in tiling case
+ private Page<K, V> mPlaceholderPage;
+
+ PagedStorage() {
+ mLeadingNullCount = 0;
+ mPages = new ArrayList<>();
+ mTrailingNullCount = 0;
+ mPositionOffset = 0;
+ mStorageCount = 0;
+ mPageSize = 1;
+ mNumberPrepended = 0;
+ mNumberAppended = 0;
+ }
+
+ PagedStorage(int leadingNulls, Page<K, V> page, int trailingNulls) {
+ this();
+ init(leadingNulls, page, trailingNulls, 0);
+ }
+
+ private PagedStorage(PagedStorage<K, V> other) {
+ mLeadingNullCount = other.mLeadingNullCount;
+ mPages = new ArrayList<>(other.mPages);
+ mTrailingNullCount = other.mTrailingNullCount;
+ mPositionOffset = other.mPositionOffset;
+ mStorageCount = other.mStorageCount;
+ mPageSize = other.mPageSize;
+ mNumberPrepended = other.mNumberPrepended;
+ mNumberAppended = other.mNumberAppended;
+
+ // preserve placeholder page so we can locate placeholder pages if needed later
+ mPlaceholderPage = other.mPlaceholderPage;
+ }
+
+ PagedStorage<K, V> snapshot() {
+ return new PagedStorage<>(this);
+ }
+
+ private void init(int leadingNulls, Page<K, V> page, int trailingNulls, int positionOffset) {
+ mLeadingNullCount = leadingNulls;
+ mPages.clear();
+ mPages.add(page);
+ mTrailingNullCount = trailingNulls;
+
+ mPositionOffset = positionOffset;
+ mStorageCount = page.items.size();
+
+ // initialized as tiled. There may be 3 nulls, 2 items, but we still call this tiled
+ // even if it will break if nulls convert.
+ mPageSize = page.items.size();
+
+ mNumberPrepended = 0;
+ mNumberAppended = 0;
+ }
+
+ void init(int leadingNulls, Page<K, V> page, int trailingNulls, int positionOffset,
+ @NonNull Callback callback) {
+ init(leadingNulls, page, trailingNulls, positionOffset);
+ callback.onInitialized(size());
+ }
+
+ @Override
+ public V get(int i) {
+ if (i < 0 || i >= size()) {
+ throw new IndexOutOfBoundsException("Index: " + i + ", Size: " + size());
+ }
+
+ // is it definitely outside 'mPages'?
+ int localIndex = i - mLeadingNullCount;
+ if (localIndex < 0 || localIndex >= mStorageCount) {
+ return null;
+ }
+
+ int localPageIndex;
+ int pageInternalIndex;
+
+ if (isTiled()) {
+ // it's inside mPages, and we're tiled. Jump to correct tile.
+ localPageIndex = localIndex / mPageSize;
+ pageInternalIndex = localIndex % mPageSize;
+ } else {
+ // it's inside mPages, but page sizes aren't regular. Walk to correct tile.
+ // Pages can only be null while tiled, so accessing page count is safe.
+ pageInternalIndex = localIndex;
+ final int localPageCount = mPages.size();
+ for (localPageIndex = 0; localPageIndex < localPageCount; localPageIndex++) {
+ int pageSize = mPages.get(localPageIndex).items.size();
+ if (pageSize > pageInternalIndex) {
+ // stop, found the page
+ break;
+ }
+ pageInternalIndex -= pageSize;
+ }
+ }
+
+ Page<?, V> page = mPages.get(localPageIndex);
+ if (page == null || page.items.size() == 0) {
+ // can only occur in tiled case, with untouched inner/placeholder pages
+ return null;
+ }
+ return page.items.get(pageInternalIndex);
+ }
+
+ /**
+ * Returns true if all pages are the same size, except for the last, which may be smaller
+ */
+ boolean isTiled() {
+ return mPageSize > 0;
+ }
+
+ int getLeadingNullCount() {
+ return mLeadingNullCount;
+ }
+
+ int getTrailingNullCount() {
+ return mTrailingNullCount;
+ }
+
+ int getStorageCount() {
+ return mStorageCount;
+ }
+
+ int getNumberAppended() {
+ return mNumberAppended;
+ }
+
+ int getNumberPrepended() {
+ return mNumberPrepended;
+ }
+
+ int getPageCount() {
+ return mPages.size();
+ }
+
+ interface Callback {
+ void onInitialized(int count);
+ void onPagePrepended(int leadingNulls, int changed, int added);
+ void onPageAppended(int endPosition, int changed, int added);
+ void onPagePlaceholderInserted(int pageIndex);
+ void onPageInserted(int start, int count);
+ }
+
+ int getPositionOffset() {
+ return mPositionOffset;
+ }
+
+ @Override
+ public int size() {
+ return mLeadingNullCount + mStorageCount + mTrailingNullCount;
+ }
+
+ int computeLeadingNulls() {
+ int total = mLeadingNullCount;
+ final int pageCount = mPages.size();
+ for (int i = 0; i < pageCount; i++) {
+ Page page = mPages.get(i);
+ if (page != null && page != mPlaceholderPage) {
+ break;
+ }
+ total += mPageSize;
+ }
+ return total;
+ }
+
+ int computeTrailingNulls() {
+ int total = mTrailingNullCount;
+ for (int i = mPages.size() - 1; i >= 0; i--) {
+ Page page = mPages.get(i);
+ if (page != null && page != mPlaceholderPage) {
+ break;
+ }
+ total += mPageSize;
+ }
+ return total;
+ }
+
+ // ---------------- Contiguous API -------------------
+
+ V getFirstLoadedItem() {
+ // safe to access first page's first item here:
+ // If contiguous, mPages can't be empty, can't hold null Pages, and items can't be empty
+ return mPages.get(0).items.get(0);
+ }
+
+ V getLastLoadedItem() {
+ // safe to access last page's last item here:
+ // If contiguous, mPages can't be empty, can't hold null Pages, and items can't be empty
+ Page<K, V> page = mPages.get(mPages.size() - 1);
+ return page.items.get(page.items.size() - 1);
+ }
+
+ public void prependPage(@NonNull Page<K, V> page, @NonNull Callback callback) {
+ final int count = page.items.size();
+ if (count == 0) {
+ // Nothing returned from source, stop loading in this direction
+ return;
+ }
+ if (mPageSize > 0 && count != mPageSize) {
+ if (mPages.size() == 1 && count > mPageSize) {
+ // prepending to a single item - update current page size to that of 'inner' page
+ mPageSize = count;
+ } else {
+ // no longer tiled
+ mPageSize = -1;
+ }
+ }
+
+ mPages.add(0, page);
+ mStorageCount += count;
+
+ final int changedCount = Math.min(mLeadingNullCount, count);
+ final int addedCount = count - changedCount;
+
+ if (changedCount != 0) {
+ mLeadingNullCount -= changedCount;
+ }
+ mPositionOffset -= addedCount;
+ mNumberPrepended += count;
+
+ callback.onPagePrepended(mLeadingNullCount, changedCount, addedCount);
+ }
+
+ public void appendPage(@NonNull Page<K, V> page, @NonNull Callback callback) {
+ final int count = page.items.size();
+ if (count == 0) {
+ // Nothing returned from source, stop loading in this direction
+ return;
+ }
+
+ if (mPageSize > 0) {
+ // if the previous page was smaller than mPageSize,
+ // or if this page is larger than the previous, disable tiling
+ if (mPages.get(mPages.size() - 1).items.size() != mPageSize
+ || count > mPageSize) {
+ mPageSize = -1;
+ }
+ }
+
+ mPages.add(page);
+ mStorageCount += count;
+
+ final int changedCount = Math.min(mTrailingNullCount, count);
+ final int addedCount = count - changedCount;
+
+ if (changedCount != 0) {
+ mTrailingNullCount -= changedCount;
+ }
+ mNumberAppended += count;
+ callback.onPageAppended(mLeadingNullCount + mStorageCount - count,
+ changedCount, addedCount);
+ }
+
+ // ------------------ Non-Contiguous API (tiling required) ----------------------
+
+ public void insertPage(int position, @NonNull Page<K, V> page, Callback callback) {
+ final int newPageSize = page.items.size();
+ if (newPageSize != mPageSize) {
+ // differing page size is OK in 2 cases, when the page is being added:
+ // 1) to the end (in which case, ignore new smaller size)
+ // 2) only the last page has been added so far (in which case, adopt new bigger size)
+
+ int size = size();
+ boolean addingLastPage = position == (size - size % mPageSize)
+ && newPageSize < mPageSize;
+ boolean onlyEndPagePresent = mTrailingNullCount == 0 && mPages.size() == 1
+ && newPageSize > mPageSize;
+
+ // OK only if existing single page, and it's the last one
+ if (!onlyEndPagePresent && !addingLastPage) {
+ throw new IllegalArgumentException("page introduces incorrect tiling");
+ }
+ if (onlyEndPagePresent) {
+ mPageSize = newPageSize;
+ }
+ }
+
+ int pageIndex = position / mPageSize;
+
+ allocatePageRange(pageIndex, pageIndex);
+
+ int localPageIndex = pageIndex - mLeadingNullCount / mPageSize;
+
+ Page<K, V> oldPage = mPages.get(localPageIndex);
+ if (oldPage != null && oldPage != mPlaceholderPage) {
+ throw new IllegalArgumentException(
+ "Invalid position " + position + ": data already loaded");
+ }
+ mPages.set(localPageIndex, page);
+ callback.onPageInserted(position, page.items.size());
+ }
+
+ private Page<K, V> getPlaceholderPage() {
+ if (mPlaceholderPage == null) {
+ @SuppressWarnings("unchecked")
+ List<V> list = Collections.emptyList();
+ mPlaceholderPage = new Page<>(null, list, null);
+ }
+ return mPlaceholderPage;
+ }
+
+ private void allocatePageRange(final int minimumPage, final int maximumPage) {
+ int leadingNullPages = mLeadingNullCount / mPageSize;
+
+ if (minimumPage < leadingNullPages) {
+ for (int i = 0; i < leadingNullPages - minimumPage; i++) {
+ mPages.add(0, null);
+ }
+ int newStorageAllocated = (leadingNullPages - minimumPage) * mPageSize;
+ mStorageCount += newStorageAllocated;
+ mLeadingNullCount -= newStorageAllocated;
+
+ leadingNullPages = minimumPage;
+ }
+ if (maximumPage >= leadingNullPages + mPages.size()) {
+ int newStorageAllocated = Math.min(mTrailingNullCount,
+ (maximumPage + 1 - (leadingNullPages + mPages.size())) * mPageSize);
+ for (int i = mPages.size(); i <= maximumPage - leadingNullPages; i++) {
+ mPages.add(mPages.size(), null);
+ }
+ mStorageCount += newStorageAllocated;
+ mTrailingNullCount -= newStorageAllocated;
+ }
+ }
+
+ public void allocatePlaceholders(int index, int prefetchDistance,
+ int pageSize, Callback callback) {
+ if (pageSize != mPageSize) {
+ if (pageSize < mPageSize) {
+ throw new IllegalArgumentException("Page size cannot be reduced");
+ }
+ if (mPages.size() != 1 || mTrailingNullCount != 0) {
+ // not in single, last page allocated case - can't change page size
+ throw new IllegalArgumentException(
+ "Page size can change only if last page is only one present");
+ }
+ mPageSize = pageSize;
+ }
+
+ final int maxPageCount = (size() + mPageSize - 1) / mPageSize;
+ int minimumPage = Math.max((index - prefetchDistance) / mPageSize, 0);
+ int maximumPage = Math.min((index + prefetchDistance) / mPageSize, maxPageCount - 1);
+
+ allocatePageRange(minimumPage, maximumPage);
+ int leadingNullPages = mLeadingNullCount / mPageSize;
+ for (int pageIndex = minimumPage; pageIndex <= maximumPage; pageIndex++) {
+ int localPageIndex = pageIndex - leadingNullPages;
+ if (mPages.get(localPageIndex) == null) {
+ mPages.set(localPageIndex, getPlaceholderPage());
+ callback.onPagePlaceholderInserted(pageIndex);
+ }
+ }
+ }
+
+ public boolean hasPage(int pageSize, int index) {
+ // NOTE: we pass pageSize here to avoid in case mPageSize
+ // not fully initialized (when last page only one loaded)
+ int leadingNullPages = mLeadingNullCount / pageSize;
+
+ if (index < leadingNullPages || index >= leadingNullPages + mPages.size()) {
+ return false;
+ }
+
+ Page<K, V> page = mPages.get(index - leadingNullPages);
+
+ return page != null && page != mPlaceholderPage;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder ret = new StringBuilder("leading " + mLeadingNullCount
+ + ", storage " + mStorageCount
+ + ", trailing " + getTrailingNullCount());
+
+ for (int i = 0; i < mPages.size(); i++) {
+ ret.append(" ").append(mPages.get(i));
+ }
+ return ret.toString();
+ }
+}
diff --git a/paging/common/src/main/java/android/arch/paging/PositionalDataSource.java b/paging/common/src/main/java/android/arch/paging/PositionalDataSource.java
index deb51e9..fa2932a 100644
--- a/paging/common/src/main/java/android/arch/paging/PositionalDataSource.java
+++ b/paging/common/src/main/java/android/arch/paging/PositionalDataSource.java
@@ -18,7 +18,6 @@
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
-import android.support.annotation.RestrictTo;
import android.support.annotation.WorkerThread;
import java.util.List;
@@ -38,10 +37,19 @@
* backend or data store doesn't require
* <p>
* @param <Value> Value type of items being loaded by the DataSource.
- * @hide
*/
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-public abstract class PositionalDataSource<Value> extends ContiguousDataSource<Integer, Value> {
+abstract class PositionalDataSource<Value> extends ContiguousDataSource<Integer, Value> {
+
+ /**
+ * Number of items that this DataSource can provide in total, or COUNT_UNDEFINED.
+ *
+ * @return number of items that this DataSource can provide in total, or COUNT_UNDEFINED
+ * if difficult or undesired to compute.
+ */
+ public int countItems() {
+ return COUNT_UNDEFINED;
+ }
+
@Nullable
@Override
List<Value> loadAfterImpl(int currentEndIndex, @NonNull Value currentEndItem, int pageSize) {
@@ -55,22 +63,10 @@
return loadBefore(currentBeginIndex - 1, pageSize);
}
-
- /**
- * Load initial data, starting after the passed position.
- *
- * @param position Index just before the data to be loaded.
- * @param initialLoadSize Suggested number of items to load.
- * @return List of initial items, representing data starting at position. Null if the
- * DataSource is no longer valid, and should not be queried again.
- * @hide
- */
- @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
- @WorkerThread
- @Nullable
@Override
- public NullPaddedList<Value> loadInitial(
- Integer position, int initialLoadSize, boolean enablePlaceholders) {
+ void loadInitial(Integer position, int initialLoadSize, boolean enablePlaceholders,
+ @NonNull PageResult.Receiver<Integer, Value> receiver) {
+
final int convertPosition = position == null ? 0 : position;
final int loadPosition = Math.max(0, (convertPosition - initialLoadSize / 2));
@@ -79,11 +75,23 @@
count = countItems();
}
List<Value> data = loadAfter(loadPosition, initialLoadSize);
- if (count == COUNT_UNDEFINED) {
- return new NullPaddedList<>(loadPosition, data);
- } else {
- return new NullPaddedList<>(loadPosition, count, data);
+
+ if (data == null) {
+ receiver.onPageResult(new PageResult<Integer, Value>(PageResult.INIT));
+ return;
}
+
+ final boolean uncounted = count == COUNT_UNDEFINED;
+ int leadingNullCount = uncounted ? 0 : loadPosition;
+ int trailingNullCount = uncounted ? 0 : count - leadingNullCount - data.size();
+ int positionOffset = uncounted ? loadPosition : 0;
+
+ receiver.onPageResult(new PageResult<>(
+ PageResult.INIT,
+ new Page<Integer, Value>(data),
+ leadingNullCount,
+ trailingNullCount,
+ positionOffset));
}
/**
@@ -118,6 +126,9 @@
@Override
Integer getKey(int position, Value item) {
+ if (position < 0) {
+ return null;
+ }
return position;
}
}
diff --git a/paging/common/src/main/java/android/arch/paging/SnapshotPagedList.java b/paging/common/src/main/java/android/arch/paging/SnapshotPagedList.java
new file mode 100644
index 0000000..6a8a748
--- /dev/null
+++ b/paging/common/src/main/java/android/arch/paging/SnapshotPagedList.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.arch.paging;
+
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+
+class SnapshotPagedList<T> extends PagedList<T> {
+ private final boolean mContiguous;
+ private final Object mLastKey;
+
+ SnapshotPagedList(@NonNull PagedList<T> pagedList) {
+ super(pagedList.mStorage.snapshot(),
+ pagedList.mMainThreadExecutor,
+ pagedList.mBackgroundThreadExecutor,
+ null,
+ pagedList.mConfig);
+ mContiguous = pagedList.isContiguous();
+ mLastKey = pagedList.getLastKey();
+ }
+
+ @Override
+ public boolean isImmutable() {
+ return true;
+ }
+
+ @Override
+ public boolean isDetached() {
+ return true;
+ }
+
+ @Override
+ boolean isContiguous() {
+ return mContiguous;
+ }
+
+ @Nullable
+ @Override
+ public Object getLastKey() {
+ return mLastKey;
+ }
+
+ @Override
+ void dispatchUpdatesSinceSnapshot(@NonNull PagedList<T> storageSnapshot,
+ @NonNull Callback callback) {
+ }
+
+ @Override
+ void loadAroundInternal(int index) {
+ }
+}
diff --git a/paging/common/src/main/java/android/arch/paging/TiledDataSource.java b/paging/common/src/main/java/android/arch/paging/TiledDataSource.java
index 36be423..0ea9428 100644
--- a/paging/common/src/main/java/android/arch/paging/TiledDataSource.java
+++ b/paging/common/src/main/java/android/arch/paging/TiledDataSource.java
@@ -19,6 +19,7 @@
import android.support.annotation.Nullable;
import android.support.annotation.WorkerThread;
+import java.util.Collections;
import java.util.List;
/**
@@ -86,13 +87,14 @@
*/
public abstract class TiledDataSource<Type> extends DataSource<Integer, Type> {
+ private int mItemCount;
+
/**
* Number of items that this DataSource can provide in total.
*
* @return Number of items this DataSource can provide. Must be <code>0</code> or greater.
*/
@WorkerThread
- @Override
public abstract int countItems();
@Override
@@ -118,7 +120,67 @@
@WorkerThread
public abstract List<Type> loadRange(int startPosition, int count);
- final List<Type> loadRangeWrapper(int startPosition, int count) {
+ /**
+ * blocking, and splits pages
+ */
+ void loadRangeInitial(int startPosition, int count, int pageSize, int itemCount,
+ PageResult.Receiver<Integer, Type> receiver) {
+ mItemCount = itemCount;
+
+ if (itemCount == 0) {
+ // no data to load, just immediately return empty
+ receiver.onPageResult(new PageResult<>(
+ PageResult.INIT, new Page<Integer, Type>(Collections.<Type>emptyList()),
+ 0, 0, startPosition));
+ return;
+ }
+
+ List<Type> list = loadRangeWrapper(startPosition, count);
+
+ count = Math.min(count, itemCount - startPosition);
+
+ if (list == null) {
+ // invalid data, pass to receiver
+ receiver.onPageResult(new PageResult<Integer, Type>(
+ PageResult.INIT, null, 0, 0, startPosition));
+ return;
+ }
+
+ if (list.size() != count) {
+ throw new IllegalStateException("Invalid list, requested size: " + count
+ + ", returned size: " + list.size());
+ }
+
+ // emit the results as multiple pages
+ int pageCount = (count + (pageSize - 1)) / pageSize;
+ for (int i = 0; i < pageCount; i++) {
+ int beginInclusive = i * pageSize;
+ int endExclusive = Math.min(count, (i + 1) * pageSize);
+
+ Page<Integer, Type> page = new Page<>(list.subList(beginInclusive, endExclusive));
+
+ int leadingNulls = startPosition + beginInclusive;
+ int trailingNulls = itemCount - leadingNulls - page.items.size();
+ receiver.onPageResult(new PageResult<>(
+ PageResult.INIT, page, leadingNulls, trailingNulls, 0));
+ }
+ }
+
+ void loadRange(int startPosition, int count, PageResult.Receiver<Integer, Type> receiver) {
+ List<Type> list = loadRangeWrapper(startPosition, count);
+
+ Page<Integer, Type> page = null;
+ int trailingNulls = mItemCount - startPosition;
+
+ if (list != null) {
+ page = new Page<Integer, Type>(list);
+ trailingNulls -= list.size();
+ }
+ receiver.postOnPageResult(new PageResult<>(
+ PageResult.TILE, page, startPosition, trailingNulls, 0));
+ }
+
+ private List<Type> loadRangeWrapper(int startPosition, int count) {
if (isInvalid()) {
return null;
}
diff --git a/paging/common/src/main/java/android/arch/paging/TiledPagedList.java b/paging/common/src/main/java/android/arch/paging/TiledPagedList.java
index a2fc064..76bb682 100644
--- a/paging/common/src/main/java/android/arch/paging/TiledPagedList.java
+++ b/paging/common/src/main/java/android/arch/paging/TiledPagedList.java
@@ -16,214 +16,110 @@
package android.arch.paging;
+import android.support.annotation.AnyThread;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
-import android.support.annotation.RestrictTo;
import android.support.annotation.WorkerThread;
-import java.lang.ref.WeakReference;
-import java.util.AbstractList;
-import java.util.ArrayList;
-import java.util.List;
import java.util.concurrent.Executor;
-import java.util.concurrent.atomic.AtomicBoolean;
-/** @hide */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-class TiledPagedList<T> extends PageArrayList<T> {
+class TiledPagedList<T> extends PagedList<T>
+ implements PagedStorage.Callback {
private final TiledDataSource<T> mDataSource;
- private final Executor mMainThreadExecutor;
- private final Executor mBackgroundThreadExecutor;
- private final Config mConfig;
- @SuppressWarnings("MismatchedQueryAndUpdateOfCollection")
- private final List<T> mLoadingPlaceholder = new AbstractList<T>() {
+ @SuppressWarnings("unchecked")
+ private final PagedStorage<Integer, T> mKeyedStorage = (PagedStorage<Integer, T>) mStorage;
+
+ private final PageResult.Receiver<Integer, T> mReceiver =
+ new PageResult.Receiver<Integer, T>() {
+ @AnyThread
@Override
- public T get(int i) {
- return null;
+ public void postOnPageResult(@NonNull final PageResult<Integer, T> pageResult) {
+ // NOTE: if we're already on main thread, this can delay page receive by a frame
+ mMainThreadExecutor.execute(new Runnable() {
+ @Override
+ public void run() {
+ onPageResult(pageResult);
+ }
+ });
}
+ // Creation thread for initial synchronous load, otherwise main thread
+ // Safe to access main thread only state - no other thread has reference during construction
+ @AnyThread
@Override
- public int size() {
- return 0;
+ public void onPageResult(@NonNull PageResult<Integer, T> pageResult) {
+ if (pageResult.page == null) {
+ detach();
+ return;
+ }
+
+ if (isDetached()) {
+ // No op, have detached
+ return;
+ }
+
+ if (mStorage.getPageCount() == 0) {
+ mKeyedStorage.init(
+ pageResult.leadingNulls, pageResult.page, pageResult.trailingNulls,
+ pageResult.positionOffset, TiledPagedList.this);
+ } else {
+ mKeyedStorage.insertPage(pageResult.leadingNulls, pageResult.page,
+ TiledPagedList.this);
+ }
+
+ if (mBoundaryCallback != null) {
+ boolean deferEmpty = mStorage.size() == 0;
+ boolean deferBegin = !deferEmpty && pageResult.leadingNulls == 0;
+ boolean deferEnd = !deferEmpty && pageResult.trailingNulls == 0;
+ deferBoundaryCallbacks(deferEmpty, deferBegin, deferEnd);
+ }
}
};
- private int mLastLoad = -1;
-
- private AtomicBoolean mDetached = new AtomicBoolean(false);
-
- private ArrayList<WeakReference<Callback>> mCallbacks = new ArrayList<>();
-
@WorkerThread
TiledPagedList(@NonNull TiledDataSource<T> dataSource,
@NonNull Executor mainThreadExecutor,
@NonNull Executor backgroundThreadExecutor,
- Config config,
+ @Nullable BoundaryCallback<T> boundaryCallback,
+ @NonNull Config config,
int position) {
- super(config.mPageSize, dataSource.countItems());
-
+ super(new PagedStorage<Integer, T>(), mainThreadExecutor, backgroundThreadExecutor,
+ boundaryCallback, config);
mDataSource = dataSource;
- mMainThreadExecutor = mainThreadExecutor;
- mBackgroundThreadExecutor = backgroundThreadExecutor;
- mConfig = config;
- position = Math.min(Math.max(0, position), mCount);
+ final int pageSize = mConfig.pageSize;
- int firstPage = position / mPageSize;
- List<T> firstPageData = dataSource.loadRangeWrapper(firstPage * mPageSize, mPageSize);
- if (firstPageData != null) {
- mPageIndexOffset = firstPage;
- mPages.add(firstPageData);
- mLastLoad = position;
- } else {
- detach();
- return;
- }
+ final int itemCount = mDataSource.countItems();
- int secondPage = (position % mPageSize < mPageSize / 2) ? firstPage - 1 : firstPage + 1;
- if (secondPage < 0 || secondPage > mMaxPageCount) {
- // no second page to load
- return;
- }
- List<T> secondPageData = dataSource.loadRangeWrapper(secondPage * mPageSize, mPageSize);
- if (secondPageData != null) {
- boolean before = secondPage < firstPage;
- mPages.add(before ? 0 : 1, secondPageData);
- if (before) {
- mPageIndexOffset--;
- }
- return;
- }
- detach();
+ final int firstLoadSize = Math.min(itemCount,
+ (Math.max(mConfig.initialLoadSizeHint / pageSize, 2)) * pageSize);
+ final int firstLoadPosition = computeFirstLoadPosition(
+ position, firstLoadSize, pageSize, itemCount);
+
+ mDataSource.loadRangeInitial(firstLoadPosition, firstLoadSize, pageSize,
+ itemCount, mReceiver);
+ }
+
+ static int computeFirstLoadPosition(int position, int firstLoadSize, int pageSize, int size) {
+ int idealStart = position - firstLoadSize / 2;
+
+ int roundedPageStart = Math.round(idealStart / pageSize) * pageSize;
+
+ // minimum start position is 0
+ roundedPageStart = Math.max(0, roundedPageStart);
+
+ // maximum start pos is that which will encompass end of list
+ int maximumLoadPage = ((size - firstLoadSize + pageSize - 1) / pageSize) * pageSize;
+ roundedPageStart = Math.min(maximumLoadPage, roundedPageStart);
+
+ return roundedPageStart;
}
@Override
- public void loadAround(int index) {
- mLastLoad = index;
-
- int minimumPage = Math.max((index - mConfig.mPrefetchDistance) / mPageSize, 0);
- int maximumPage = Math.min((index + mConfig.mPrefetchDistance) / mPageSize,
- mMaxPageCount - 1);
-
- if (minimumPage < mPageIndexOffset) {
- for (int i = 0; i < mPageIndexOffset - minimumPage; i++) {
- mPages.add(0, null);
- }
- mPageIndexOffset = minimumPage;
- }
- if (maximumPage >= mPageIndexOffset + mPages.size()) {
- for (int i = mPages.size(); i <= maximumPage - mPageIndexOffset; i++) {
- mPages.add(mPages.size(), null);
- }
- }
- for (int i = minimumPage; i <= maximumPage; i++) {
- scheduleLoadPage(i);
- }
- }
-
- private void scheduleLoadPage(final int pageIndex) {
- final int localPageIndex = pageIndex - mPageIndexOffset;
-
- if (mPages.get(localPageIndex) != null) {
- // page is present in list, and non-null - don't need to load
- return;
- }
- mPages.set(localPageIndex, mLoadingPlaceholder);
-
- mBackgroundThreadExecutor.execute(new Runnable() {
- @Override
- public void run() {
- if (mDetached.get()) {
- return;
- }
- final List<T> data = mDataSource.loadRangeWrapper(
- pageIndex * mPageSize, mPageSize);
- if (data != null) {
- mMainThreadExecutor.execute(new Runnable() {
- @Override
- public void run() {
- if (mDetached.get()) {
- return;
- }
- loadPageImpl(pageIndex, data);
- }
- });
- } else {
- detach();
- }
- }
- });
-
- }
-
- private void loadPageImpl(int pageIndex, List<T> data) {
- int localPageIndex = pageIndex - mPageIndexOffset;
-
- if (mPages.get(localPageIndex) != mLoadingPlaceholder) {
- throw new IllegalStateException("Data inserted before requested.");
- }
- mPages.set(localPageIndex, data);
- for (WeakReference<Callback> weakRef : mCallbacks) {
- Callback callback = weakRef.get();
- if (callback != null) {
- callback.onChanged(pageIndex * mPageSize, data.size());
- }
- }
- }
-
- @Override
- public boolean isImmutable() {
- // TODO: consider counting loaded pages, return true if mLoadedPages == mMaxPageCount
- // Note: could at some point want to support growing past max count, or grow dynamically
- return isDetached();
- }
-
- @Override
- public void addWeakCallback(@Nullable PagedList<T> previousSnapshot,
- @NonNull Callback callback) {
- PageArrayList<T> snapshot = (PageArrayList<T>) previousSnapshot;
- if (snapshot != this && snapshot != null) {
- // loop through each page and signal the callback for any pages that are present now,
- // but not in the snapshot.
- for (int i = 0; i < mPages.size(); i++) {
- int pageIndex = i + mPageIndexOffset;
- int pageCount = 0;
- // count number of consecutive pages that were added since the snapshot...
- while (pageCount < mPages.size()
- && hasPage(pageIndex + pageCount)
- && !snapshot.hasPage(pageIndex + pageCount)) {
- pageCount++;
- }
- // and signal them all at once to the callback
- if (pageCount > 0) {
- callback.onChanged(pageIndex * mPageSize, mPageSize * pageCount);
- i += pageCount - 1;
- }
- }
- }
- mCallbacks.add(new WeakReference<>(callback));
- }
-
- @Override
- public void removeWeakCallback(@NonNull Callback callback) {
- for (int i = mCallbacks.size() - 1; i >= 0; i--) {
- Callback currentCallback = mCallbacks.get(i).get();
- if (currentCallback == null || currentCallback == callback) {
- mCallbacks.remove(i);
- }
- }
- }
-
- @Override
- public boolean isDetached() {
- return mDetached.get();
- }
-
- @Override
- public void detach() {
- mDetached.set(true);
+ boolean isContiguous() {
+ return false;
}
@Nullable
@@ -231,4 +127,72 @@
public Object getLastKey() {
return mLastLoad;
}
+
+ @Override
+ protected void dispatchUpdatesSinceSnapshot(@NonNull PagedList<T> pagedListSnapshot,
+ @NonNull Callback callback) {
+ //noinspection UnnecessaryLocalVariable
+ final PagedStorage<?, T> snapshot = pagedListSnapshot.mStorage;
+
+ // loop through each page and signal the callback for any pages that are present now,
+ // but not in the snapshot.
+ final int pageSize = mConfig.pageSize;
+ final int leadingNullPages = mStorage.getLeadingNullCount() / pageSize;
+ final int pageCount = mStorage.getPageCount();
+ for (int i = 0; i < pageCount; i++) {
+ int pageIndex = i + leadingNullPages;
+ int updatedPages = 0;
+ // count number of consecutive pages that were added since the snapshot...
+ while (updatedPages < mStorage.getPageCount()
+ && mStorage.hasPage(pageSize, pageIndex + updatedPages)
+ && !snapshot.hasPage(pageSize, pageIndex + updatedPages)) {
+ updatedPages++;
+ }
+ // and signal them all at once to the callback
+ if (updatedPages > 0) {
+ callback.onChanged(pageIndex * pageSize, pageSize * updatedPages);
+ i += updatedPages - 1;
+ }
+ }
+ }
+
+ @Override
+ protected void loadAroundInternal(int index) {
+ mStorage.allocatePlaceholders(index, mConfig.prefetchDistance, mConfig.pageSize, this);
+ }
+
+ @Override
+ public void onInitialized(int count) {
+ notifyInserted(0, count);
+ }
+
+ @Override
+ public void onPagePrepended(int leadingNulls, int changed, int added) {
+ throw new IllegalStateException("Contiguous callback on TiledPagedList");
+ }
+
+ @Override
+ public void onPageAppended(int endPosition, int changed, int added) {
+ throw new IllegalStateException("Contiguous callback on TiledPagedList");
+ }
+
+ @Override
+ public void onPagePlaceholderInserted(final int pageIndex) {
+ // placeholder means initialize a load
+ mBackgroundThreadExecutor.execute(new Runnable() {
+ @Override
+ public void run() {
+ if (isDetached()) {
+ return;
+ }
+ final int pageSize = mConfig.pageSize;
+ mDataSource.loadRange(pageIndex * pageSize, pageSize, mReceiver);
+ }
+ });
+ }
+
+ @Override
+ public void onPageInserted(int start, int count) {
+ notifyChanged(start, count);
+ }
}
diff --git a/paging/common/src/test/java/android/arch/paging/ContiguousPagedListTest.java b/paging/common/src/test/java/android/arch/paging/ContiguousPagedListTest.java
deleted file mode 100644
index ee7ea6a..0000000
--- a/paging/common/src/test/java/android/arch/paging/ContiguousPagedListTest.java
+++ /dev/null
@@ -1,333 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.arch.paging;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertSame;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyNoMoreInteractions;
-import static org.mockito.Mockito.verifyZeroInteractions;
-
-import android.support.annotation.Nullable;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-@RunWith(Parameterized.class)
-public class ContiguousPagedListTest {
-
- @Parameterized.Parameters(name = "counted:{0}")
- public static List<Object[]> parameters() {
- return Arrays.asList(new Object[][]{{true}, {false}});
- }
-
- public ContiguousPagedListTest(boolean counted) {
- mCounted = counted;
- }
-
- private final boolean mCounted;
- private TestExecutor mMainThread = new TestExecutor();
- private TestExecutor mBackgroundThread = new TestExecutor();
-
- private static final ArrayList<Item> ITEMS = new ArrayList<>();
-
- static {
- for (int i = 0; i < 100; i++) {
- ITEMS.add(new Item(i));
- }
- }
-
- @SuppressWarnings("WeakerAccess")
- private static class Item {
- private Item(int position) {
- this.position = position;
- this.name = "Item " + position;
- }
-
- public final int position;
- public final String name;
-
- @Override
- public String toString() {
- return name;
- }
- }
-
- private class TestSource extends PositionalDataSource<Item> {
- @Override
- public int countItems() {
- if (mCounted) {
- return ITEMS.size();
- } else {
- return COUNT_UNDEFINED;
- }
- }
-
- private List<Item> getClampedRange(int startInc, int endExc, boolean reverse) {
- startInc = Math.max(0, startInc);
- endExc = Math.min(ITEMS.size(), endExc);
- List<Item> list = ITEMS.subList(startInc, endExc);
- if (reverse) {
- Collections.reverse(list);
- }
- return list;
- }
-
- @Nullable
- @Override
- public List<Item> loadAfter(int startIndex, int pageSize) {
- return getClampedRange(startIndex, startIndex + pageSize, false);
- }
-
- @Nullable
- @Override
- public List<Item> loadBefore(int startIndex, int pageSize) {
- return getClampedRange(startIndex - pageSize + 1, startIndex + 1, true);
- }
- }
-
- private void verifyRange(int start, int count, NullPaddedList<Item> actual) {
- if (mCounted) {
- int expectedLeading = start;
- int expectedTrailing = ITEMS.size() - start - count;
- assertEquals(ITEMS.size(), actual.size());
- assertEquals(ITEMS.size() - expectedLeading - expectedTrailing,
- actual.getLoadedCount());
- assertEquals(expectedLeading, actual.getLeadingNullCount());
- assertEquals(expectedTrailing, actual.getTrailingNullCount());
-
- for (int i = 0; i < actual.getLoadedCount(); i++) {
- assertSame(ITEMS.get(i + start), actual.get(i + start));
- }
- } else {
- assertEquals(count, actual.size());
- assertEquals(actual.size(), actual.getLoadedCount());
- assertEquals(0, actual.getLeadingNullCount());
- assertEquals(0, actual.getTrailingNullCount());
-
- for (int i = 0; i < actual.getLoadedCount(); i++) {
- assertSame(ITEMS.get(i + start), actual.get(i));
- }
- }
- }
-
- private void verifyCallback(PagedList.Callback callback, int countedPosition,
- int uncountedPosition) {
- if (mCounted) {
- verify(callback).onChanged(countedPosition, 20);
- } else {
- verify(callback).onInserted(uncountedPosition, 20);
- }
- }
-
- @Test
- public void initialLoad() {
- verifyRange(30, 40,
- new TestSource().loadInitial(50, 40, true));
-
- verifyRange(0, 10,
- new TestSource().loadInitial(5, 10, true));
-
- verifyRange(90, 10,
- new TestSource().loadInitial(95, 10, true));
- }
-
-
- private ContiguousPagedList<Item> createCountedPagedList(
- PagedList.Config config, int initialPosition) {
- TestSource source = new TestSource();
- return new ContiguousPagedList<>(
- source, mMainThread, mBackgroundThread,
- config,
- initialPosition);
- }
-
- private ContiguousPagedList<Item> createCountedPagedList(int initialPosition) {
- return createCountedPagedList(
- new PagedList.Config.Builder()
- .setInitialLoadSizeHint(40)
- .setPageSize(20)
- .setPrefetchDistance(20)
- .build(),
- initialPosition);
- }
-
- @Test
- public void append() {
- ContiguousPagedList<Item> pagedList = createCountedPagedList(0);
- PagedList.Callback callback = mock(PagedList.Callback.class);
- pagedList.addWeakCallback(null, callback);
- verifyRange(0, 40, pagedList);
- verifyZeroInteractions(callback);
-
- pagedList.loadAround(35);
- drain();
-
- verifyRange(0, 60, pagedList);
- verifyCallback(callback, 40, 40);
- verifyNoMoreInteractions(callback);
- }
-
-
- @Test
- public void prepend() {
- ContiguousPagedList<Item> pagedList = createCountedPagedList(80);
- PagedList.Callback callback = mock(PagedList.Callback.class);
- pagedList.addWeakCallback(null, callback);
- verifyRange(60, 40, pagedList);
- verifyZeroInteractions(callback);
-
- pagedList.loadAround(mCounted ? 65 : 5);
- drain();
-
- verifyRange(40, 60, pagedList);
- verifyCallback(callback, 40, 0);
- verifyNoMoreInteractions(callback);
- }
-
- @Test
- public void outwards() {
- ContiguousPagedList<Item> pagedList = createCountedPagedList(50);
- PagedList.Callback callback = mock(PagedList.Callback.class);
- pagedList.addWeakCallback(null, callback);
- verifyRange(30, 40, pagedList);
- verifyZeroInteractions(callback);
-
- pagedList.loadAround(mCounted ? 65 : 35);
- drain();
-
- verifyRange(30, 60, pagedList);
- verifyCallback(callback, 70, 40);
- verifyNoMoreInteractions(callback);
-
- pagedList.loadAround(mCounted ? 35 : 5);
- drain();
-
- verifyRange(10, 80, pagedList);
- verifyCallback(callback, 10, 0);
- verifyNoMoreInteractions(callback);
- }
-
- @Test
- public void multiAppend() {
- ContiguousPagedList<Item> pagedList = createCountedPagedList(0);
- PagedList.Callback callback = mock(PagedList.Callback.class);
- pagedList.addWeakCallback(null, callback);
- verifyRange(0, 40, pagedList);
- verifyZeroInteractions(callback);
-
- pagedList.loadAround(55);
- drain();
-
- verifyRange(0, 80, pagedList);
- verifyCallback(callback, 40, 40);
- verifyCallback(callback, 60, 60);
- verifyNoMoreInteractions(callback);
- }
-
- @Test
- public void distantPrefetch() {
- ContiguousPagedList<Item> pagedList = createCountedPagedList(
- new PagedList.Config.Builder()
- .setInitialLoadSizeHint(10)
- .setPageSize(10)
- .setPrefetchDistance(30)
- .build(),
- 0);
- PagedList.Callback callback = mock(PagedList.Callback.class);
- pagedList.addWeakCallback(null, callback);
- verifyRange(0, 10, pagedList);
- verifyZeroInteractions(callback);
-
- pagedList.loadAround(5);
- drain();
-
- verifyRange(0, 40, pagedList);
-
- pagedList.loadAround(6);
- drain();
-
- // although our prefetch window moves forward, no new load triggered
- verifyRange(0, 40, pagedList);
- }
-
- @Test
- public void appendCallbackAddedLate() {
- ContiguousPagedList<Item> pagedList = createCountedPagedList(0);
- verifyRange(0, 40, pagedList);
-
- pagedList.loadAround(35);
- drain();
- verifyRange(0, 60, pagedList);
-
- // snapshot at 60 items
- NullPaddedList<Item> snapshot = (NullPaddedList<Item>) pagedList.snapshot();
- verifyRange(0, 60, snapshot);
-
-
- pagedList.loadAround(55);
- drain();
- verifyRange(0, 80, pagedList);
- verifyRange(0, 60, snapshot);
-
- PagedList.Callback callback = mock(PagedList.Callback.class);
- pagedList.addWeakCallback(snapshot, callback);
- verifyCallback(callback, 60, 60);
- verifyNoMoreInteractions(callback);
- }
-
-
- @Test
- public void prependCallbackAddedLate() {
- ContiguousPagedList<Item> pagedList = createCountedPagedList(80);
- verifyRange(60, 40, pagedList);
-
- pagedList.loadAround(mCounted ? 65 : 5);
- drain();
- verifyRange(40, 60, pagedList);
-
- // snapshot at 60 items
- NullPaddedList<Item> snapshot = (NullPaddedList<Item>) pagedList.snapshot();
- verifyRange(40, 60, snapshot);
-
-
- pagedList.loadAround(mCounted ? 45 : 5);
- drain();
- verifyRange(20, 80, pagedList);
- verifyRange(40, 60, snapshot);
-
- PagedList.Callback callback = mock(PagedList.Callback.class);
- pagedList.addWeakCallback(snapshot, callback);
- verifyCallback(callback, 40, 0);
- verifyNoMoreInteractions(callback);
- }
-
- private void drain() {
- boolean executed;
- do {
- executed = mBackgroundThread.executeAll();
- executed |= mMainThread.executeAll();
- } while (executed);
- }
-}
diff --git a/paging/common/src/test/java/android/arch/paging/ContiguousPagedListTest.kt b/paging/common/src/test/java/android/arch/paging/ContiguousPagedListTest.kt
new file mode 100644
index 0000000..7331bfe
--- /dev/null
+++ b/paging/common/src/test/java/android/arch/paging/ContiguousPagedListTest.kt
@@ -0,0 +1,395 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.arch.paging
+
+import org.junit.Assert.assertArrayEquals
+import org.junit.Assert.assertEquals
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.Parameterized
+import org.mockito.ArgumentCaptor
+import org.mockito.Mockito.any
+import org.mockito.Mockito.eq
+import org.mockito.Mockito.mock
+import org.mockito.Mockito.verify
+import org.mockito.Mockito.verifyNoMoreInteractions
+import org.mockito.Mockito.verifyZeroInteractions
+import java.util.Collections
+
+@RunWith(Parameterized::class)
+class ContiguousPagedListTest(private val mCounted: Boolean) {
+ private val mMainThread = TestExecutor()
+ private val mBackgroundThread = TestExecutor()
+
+ private class Item(position: Int) {
+ val name: String = "Item $position"
+
+ override fun toString(): String {
+ return name
+ }
+ }
+
+ private inner class TestSource(val listData: List<Item> = ITEMS)
+ : PositionalDataSource<Item>() {
+ override fun countItems(): Int {
+ return if (mCounted) {
+ listData.size
+ } else {
+ DataSource.COUNT_UNDEFINED
+ }
+ }
+
+ private fun getClampedRange(startInc: Int, endExc: Int, reverse: Boolean): List<Item> {
+ val list = listData.subList(Math.max(0, startInc), Math.min(listData.size, endExc))
+ if (reverse) {
+ Collections.reverse(list)
+ }
+ return list
+ }
+
+ override fun loadAfter(startIndex: Int, pageSize: Int): List<Item>? {
+ return getClampedRange(startIndex, startIndex + pageSize, false)
+ }
+
+ override fun loadBefore(startIndex: Int, pageSize: Int): List<Item>? {
+ return getClampedRange(startIndex - pageSize + 1, startIndex + 1, true)
+ }
+ }
+
+ private fun verifyRange(start: Int, count: Int, actual: PagedStorage<*, Item>) {
+ if (mCounted) {
+ // assert nulls + content
+ val expected = arrayOfNulls<Item>(ITEMS.size)
+ System.arraycopy(ITEMS.toTypedArray(), start, expected, start, count)
+ assertArrayEquals(expected, actual.toTypedArray())
+
+ val expectedTrailing = ITEMS.size - start - count
+ assertEquals(ITEMS.size, actual.size)
+ assertEquals((ITEMS.size - start - expectedTrailing),
+ actual.storageCount)
+ assertEquals(start, actual.leadingNullCount)
+ assertEquals(expectedTrailing, actual.trailingNullCount)
+
+ } else {
+ assertEquals(ITEMS.subList(start, start + count), actual)
+
+ assertEquals(count, actual.size)
+ assertEquals(actual.size, actual.storageCount)
+ assertEquals(0, actual.leadingNullCount)
+ assertEquals(0, actual.trailingNullCount)
+ }
+ }
+
+ private fun verifyRange(start: Int, count: Int, actual: PagedList<Item>) {
+ verifyRange(start, count, actual.mStorage)
+ }
+
+ private fun verifyRange(start: Int, count: Int, actual: PageResult<Int, Item>) {
+ if (mCounted) {
+ assertEquals(start, actual.leadingNulls)
+ assertEquals(ITEMS.size - start - count, actual.trailingNulls)
+ assertEquals(0, actual.positionOffset)
+ } else {
+ assertEquals(0, actual.leadingNulls)
+ assertEquals(0, actual.trailingNulls)
+ assertEquals(start, actual.positionOffset)
+ }
+ assertEquals(ITEMS.subList(start, start + count), actual.page.items)
+ }
+
+ private fun verifyInitialLoad(start: Int, count : Int, initialPosition: Int, initialLoadSize: Int) {
+ @Suppress("UNCHECKED_CAST")
+ val receiver = mock(PageResult.Receiver::class.java) as PageResult.Receiver<Int, Item>
+
+ @Suppress("UNCHECKED_CAST")
+ val captor = ArgumentCaptor.forClass(PageResult::class.java)
+ as ArgumentCaptor<PageResult<Int, Item>>
+
+ TestSource().loadInitial(initialPosition, initialLoadSize, true, receiver)
+
+ verify(receiver).onPageResult(captor.capture())
+ verifyNoMoreInteractions(receiver)
+ verifyRange(start, count, captor.value)
+ }
+
+ @Test
+ fun initialLoad() {
+ verifyInitialLoad(30, 40, 50, 40)
+ verifyInitialLoad(0, 10, 5, 10)
+ verifyInitialLoad(90, 10, 95, 10)
+ }
+
+ private fun createCountedPagedList(
+ initialPosition: Int,
+ pageSize: Int = 20,
+ initLoadSize: Int = 40,
+ prefetchDistance: Int = 20,
+ listData: List<Item> = ITEMS,
+ boundaryCallback: PagedList.BoundaryCallback<Item>? = null)
+ : ContiguousPagedList<Int, Item> {
+ return ContiguousPagedList(
+ TestSource(listData), mMainThread, mBackgroundThread, boundaryCallback,
+ PagedList.Config.Builder()
+ .setInitialLoadSizeHint(initLoadSize)
+ .setPageSize(pageSize)
+ .setPrefetchDistance(prefetchDistance)
+ .build(),
+ initialPosition)
+ }
+
+ @Test
+ fun construct() {
+ val pagedList = createCountedPagedList(0)
+ verifyRange(0, 40, pagedList)
+ }
+
+ private fun verifyCallback(callback: PagedList.Callback, countedPosition: Int,
+ uncountedPosition: Int) {
+ if (mCounted) {
+ verify(callback).onChanged(countedPosition, 20)
+ } else {
+ verify(callback).onInserted(uncountedPosition, 20)
+ }
+ }
+
+ @Test
+ fun append() {
+ val pagedList = createCountedPagedList(0)
+ val callback = mock(PagedList.Callback::class.java)
+ pagedList.addWeakCallback(null, callback)
+ verifyRange(0, 40, pagedList)
+ verifyZeroInteractions(callback)
+
+ pagedList.loadAround(35)
+ drain()
+
+ verifyRange(0, 60, pagedList)
+ verifyCallback(callback, 40, 40)
+ verifyNoMoreInteractions(callback)
+ }
+
+
+ @Test
+ fun prepend() {
+ val pagedList = createCountedPagedList(80)
+ val callback = mock(PagedList.Callback::class.java)
+ pagedList.addWeakCallback(null, callback)
+ verifyRange(60, 40, pagedList)
+ verifyZeroInteractions(callback)
+
+ pagedList.loadAround(if (mCounted) 65 else 5)
+ drain()
+
+ verifyRange(40, 60, pagedList)
+ verifyCallback(callback, 40, 0)
+ verifyNoMoreInteractions(callback)
+ }
+
+ @Test
+ fun outwards() {
+ val pagedList = createCountedPagedList(50)
+ val callback = mock(PagedList.Callback::class.java)
+ pagedList.addWeakCallback(null, callback)
+ verifyRange(30, 40, pagedList)
+ verifyZeroInteractions(callback)
+
+ pagedList.loadAround(if (mCounted) 65 else 35)
+ drain()
+
+ verifyRange(30, 60, pagedList)
+ verifyCallback(callback, 70, 40)
+ verifyNoMoreInteractions(callback)
+
+ pagedList.loadAround(if (mCounted) 35 else 5)
+ drain()
+
+ verifyRange(10, 80, pagedList)
+ verifyCallback(callback, 10, 0)
+ verifyNoMoreInteractions(callback)
+ }
+
+ @Test
+ fun multiAppend() {
+ val pagedList = createCountedPagedList(0)
+ val callback = mock(PagedList.Callback::class.java)
+ pagedList.addWeakCallback(null, callback)
+ verifyRange(0, 40, pagedList)
+ verifyZeroInteractions(callback)
+
+ pagedList.loadAround(55)
+ drain()
+
+ verifyRange(0, 80, pagedList)
+ verifyCallback(callback, 40, 40)
+ verifyCallback(callback, 60, 60)
+ verifyNoMoreInteractions(callback)
+ }
+
+ @Test
+ fun distantPrefetch() {
+ val pagedList = createCountedPagedList(0,
+ initLoadSize = 10, pageSize = 10, prefetchDistance = 30)
+ val callback = mock(PagedList.Callback::class.java)
+ pagedList.addWeakCallback(null, callback)
+ verifyRange(0, 10, pagedList)
+ verifyZeroInteractions(callback)
+
+ pagedList.loadAround(5)
+ drain()
+
+ verifyRange(0, 40, pagedList)
+
+ pagedList.loadAround(6)
+ drain()
+
+ // although our prefetch window moves forward, no new load triggered
+ verifyRange(0, 40, pagedList)
+ }
+
+ @Test
+ fun appendCallbackAddedLate() {
+ val pagedList = createCountedPagedList(0)
+ verifyRange(0, 40, pagedList)
+
+ pagedList.loadAround(35)
+ drain()
+ verifyRange(0, 60, pagedList)
+
+ // snapshot at 60 items
+ val snapshot = pagedList.snapshot() as PagedList<Item>
+ verifyRange(0, 60, snapshot)
+
+ // load more items...
+ pagedList.loadAround(55)
+ drain()
+ verifyRange(0, 80, pagedList)
+ verifyRange(0, 60, snapshot)
+
+ // and verify the snapshot hasn't received them
+ val callback = mock(PagedList.Callback::class.java)
+ pagedList.addWeakCallback(snapshot, callback)
+ verifyCallback(callback, 60, 60)
+ verifyNoMoreInteractions(callback)
+ }
+
+ @Test
+ fun prependCallbackAddedLate() {
+ val pagedList = createCountedPagedList(80)
+ verifyRange(60, 40, pagedList)
+
+ pagedList.loadAround(if (mCounted) 65 else 5)
+ drain()
+ verifyRange(40, 60, pagedList)
+
+ // snapshot at 60 items
+ val snapshot = pagedList.snapshot() as PagedList<Item>
+ verifyRange(40, 60, snapshot)
+
+ pagedList.loadAround(if (mCounted) 45 else 5)
+ drain()
+ verifyRange(20, 80, pagedList)
+ verifyRange(40, 60, snapshot)
+
+ val callback = mock(PagedList.Callback::class.java)
+ pagedList.addWeakCallback(snapshot, callback)
+ verifyCallback(callback, 40, 0)
+ verifyNoMoreInteractions(callback)
+ }
+
+ @Test
+ fun boundaryCallback_empty() {
+ @Suppress("UNCHECKED_CAST")
+ val boundaryCallback =
+ mock(PagedList.BoundaryCallback::class.java) as PagedList.BoundaryCallback<Item>
+ val pagedList = createCountedPagedList(0,
+ listData = ArrayList(), boundaryCallback = boundaryCallback)
+ assertEquals(0, pagedList.size)
+
+ // nothing yet
+ verifyNoMoreInteractions(boundaryCallback)
+
+ // onZeroItemsLoaded posted, since creation often happens on BG thread
+ drain()
+ verify(boundaryCallback).onZeroItemsLoaded()
+ verifyNoMoreInteractions(boundaryCallback)
+ }
+
+ @Test
+ fun boundaryCallback_delayed() {
+ @Suppress("UNCHECKED_CAST")
+ val boundaryCallback =
+ mock(PagedList.BoundaryCallback::class.java) as PagedList.BoundaryCallback<Item>
+ val pagedList = createCountedPagedList(90,
+ initLoadSize = 20, prefetchDistance = 5, boundaryCallback = boundaryCallback)
+ verifyRange(80, 20, pagedList)
+
+
+ // nothing yet
+ verifyZeroInteractions(boundaryCallback)
+ drain()
+ verifyZeroInteractions(boundaryCallback)
+
+ // loading around last item causes onItemAtEndLoaded
+ pagedList.loadAround(if (mCounted) 99 else 19)
+ drain()
+ verifyRange(80, 20, pagedList)
+ verify(boundaryCallback).onItemAtEndLoaded(
+ any(), eq(ITEMS.last()), eq(if (mCounted) 100 else 20))
+ verifyNoMoreInteractions(boundaryCallback)
+
+
+ // prepending doesn't trigger callback...
+ pagedList.loadAround(if (mCounted) 80 else 0)
+ drain()
+ verifyRange(60, 40, pagedList)
+ verifyZeroInteractions(boundaryCallback)
+
+ // ...load rest of data, still no dispatch...
+ pagedList.loadAround(if (mCounted) 60 else 0)
+ drain()
+ pagedList.loadAround(if (mCounted) 40 else 0)
+ drain()
+ pagedList.loadAround(if (mCounted) 20 else 0)
+ drain()
+ verifyRange(0, 100, pagedList)
+ verifyZeroInteractions(boundaryCallback)
+
+ // ... finally try prepend, see 0 items, which will dispatch front callback
+ pagedList.loadAround(0)
+ drain()
+ verify(boundaryCallback).onItemAtFrontLoaded(any(), eq(ITEMS.first()), eq(100))
+ verifyNoMoreInteractions(boundaryCallback)
+ }
+
+ private fun drain() {
+ var executed: Boolean
+ do {
+ executed = mBackgroundThread.executeAll()
+ executed = mMainThread.executeAll() || executed
+ } while (executed)
+ }
+
+ companion object {
+ @JvmStatic
+ @Parameterized.Parameters(name = "counted:{0}")
+ fun parameters(): Array<Array<Boolean>> {
+ return arrayOf(arrayOf(true), arrayOf(false))
+ }
+
+ private val ITEMS = List(100) { Item(it) }
+ }
+}
diff --git a/paging/common/src/test/java/android/arch/paging/KeyedDataSourceTest.kt b/paging/common/src/test/java/android/arch/paging/KeyedDataSourceTest.kt
index 92ab3c5..115fea2 100644
--- a/paging/common/src/test/java/android/arch/paging/KeyedDataSourceTest.kt
+++ b/paging/common/src/test/java/android/arch/paging/KeyedDataSourceTest.kt
@@ -1,10 +1,32 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
package android.arch.paging
+import org.junit.Assert.assertArrayEquals
import org.junit.Assert.assertEquals
+import org.junit.Assert.assertNotNull
import org.junit.Assert.assertTrue
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
+import org.mockito.ArgumentCaptor
+import org.mockito.Mockito.mock
+import org.mockito.Mockito.verify
+import org.mockito.Mockito.verifyNoMoreInteractions
@RunWith(JUnit4::class)
class KeyedDataSourceTest {
@@ -25,17 +47,30 @@
assertEquals(ITEMS_BY_NAME_ID, dataSource.loadInitial(ITEMS_BY_NAME_ID.size + 10))
}
+ private fun loadInitial(dataSource: ItemDataSource, key: Key?, initialLoadSize: Int,
+ enablePlaceholders: Boolean): PageResult<Key, Item> {
+ @Suppress("UNCHECKED_CAST")
+ val receiver = mock(PageResult.Receiver::class.java) as PageResult.Receiver<Key, Item>
+ @Suppress("UNCHECKED_CAST")
+ val captor = ArgumentCaptor.forClass(PageResult::class.java)
+ as ArgumentCaptor<PageResult<Key, Item>>
+
+ dataSource.loadInitial(key, initialLoadSize, enablePlaceholders, receiver)
+
+ verify(receiver).onPageResult(captor.capture())
+ verifyNoMoreInteractions(receiver)
+ assertNotNull(captor.value)
+ return captor.value
+ }
+
@Test
fun loadInitial() {
val dataSource = ItemDataSource()
+ val result = loadInitial(dataSource, dataSource.getKey(ITEMS_BY_NAME_ID[49]), 10, true)
- // loadInitial(key, count) == null padding, loadAfter(key, count), null padding
- val key = dataSource.getKey(ITEMS_BY_NAME_ID[49])
- val initialLoad = dataSource.loadInitial(key, 10, true)!!
-
- assertEquals(45, initialLoad.leadingNullCount)
- assertEquals(ITEMS_BY_NAME_ID.subList(45, 55), initialLoad.mList)
- assertEquals(45, initialLoad.trailingNullCount)
+ assertEquals(45, result.leadingNulls)
+ assertEquals(ITEMS_BY_NAME_ID.subList(45, 55), result.page.items)
+ assertEquals(45, result.trailingNulls)
}
@Test
@@ -43,11 +78,11 @@
val dataSource = ItemDataSource(items = ITEMS_BY_NAME_ID.subList(0, 1))
// this is tricky, since load after and load before with the passed key will fail
- val initialLoad = dataSource.loadInitial(dataSource.getKey(ITEMS_BY_NAME_ID[0]), 20, true)!!
+ val result = loadInitial(dataSource, dataSource.getKey(ITEMS_BY_NAME_ID[0]), 20, true)
- assertEquals(0, initialLoad.leadingNullCount)
- assertEquals(ITEMS_BY_NAME_ID.subList(0, 1), initialLoad.mList)
- assertEquals(0, initialLoad.trailingNullCount)
+ assertEquals(0, result.leadingNulls)
+ assertEquals(ITEMS_BY_NAME_ID.subList(0, 1), result.page.items)
+ assertEquals(0, result.trailingNulls)
}
@Test
@@ -56,11 +91,11 @@
// tricky, because load after key is empty, so another load before and load after required
val key = dataSource.getKey(ITEMS_BY_NAME_ID.last())
- val initialLoad = dataSource.loadInitial(key, 20, true)!!
+ val result = loadInitial(dataSource, key, 20, true)
- assertEquals(89, initialLoad.leadingNullCount)
- assertEquals(ITEMS_BY_NAME_ID.subList(89, 100), initialLoad.mList)
- assertEquals(0, initialLoad.trailingNullCount)
+ assertEquals(89, result.leadingNulls)
+ assertEquals(ITEMS_BY_NAME_ID.subList(89, 100), result.page.items)
+ assertEquals(0, result.trailingNulls)
}
@Test
@@ -68,11 +103,11 @@
val dataSource = ItemDataSource()
// loadInitial(null, count) == loadInitial(count)
- val initialLoad = dataSource.loadInitial(null, 10, true)!!
+ val result = loadInitial(dataSource, null, 10, true)
- assertEquals(0, initialLoad.leadingNullCount)
- assertEquals(ITEMS_BY_NAME_ID.subList(0, 10), initialLoad.mList)
- assertEquals(90, initialLoad.trailingNullCount)
+ assertEquals(0, result.leadingNulls)
+ assertEquals(ITEMS_BY_NAME_ID.subList(0, 10), result.page.items)
+ assertEquals(90, result.trailingNulls)
}
@Test
@@ -81,14 +116,14 @@
// if key is past entire data set, should return last items in data set
val key = Key("fz", 0)
- val initialLoad = dataSource.loadInitial(key, 10, true)!!
+ val result = loadInitial(dataSource, key, 10, true)
// NOTE: ideally we'd load 10 items here, but it adds complexity and unpredictability to
// do: load after was empty, so pass full size to load before, since this can incur larger
// loads than requested (see keyMatchesLastItem test)
- assertEquals(95, initialLoad.leadingNullCount)
- assertEquals(ITEMS_BY_NAME_ID.subList(95, 100), initialLoad.mList)
- assertEquals(0, initialLoad.trailingNullCount)
+ assertEquals(95, result.leadingNulls)
+ assertEquals(ITEMS_BY_NAME_ID.subList(95, 100), result.page.items)
+ assertEquals(0, result.trailingNulls)
}
// ----- UNCOUNTED -----
@@ -99,11 +134,11 @@
// loadInitial(key, count) == null padding, loadAfter(key, count), null padding
val key = dataSource.getKey(ITEMS_BY_NAME_ID[49])
- val initialLoad = dataSource.loadInitial(key, 10, false)!!
+ val result = loadInitial(dataSource, key, 10, false)
- assertEquals(0, initialLoad.leadingNullCount)
- assertEquals(ITEMS_BY_NAME_ID.subList(45, 55), initialLoad.mList)
- assertEquals(0, initialLoad.trailingNullCount)
+ assertEquals(0, result.leadingNulls)
+ assertEquals(ITEMS_BY_NAME_ID.subList(45, 55), result.page.items)
+ assertEquals(0, result.trailingNulls)
}
@Test
@@ -112,11 +147,11 @@
// loadInitial(key, count) == null padding, loadAfter(key, count), null padding
val key = dataSource.getKey(ITEMS_BY_NAME_ID[49])
- val initialLoad = dataSource.loadInitial(key, 10, true)!!
+ val result = loadInitial(dataSource, key, 10, true)
- assertEquals(0, initialLoad.leadingNullCount)
- assertEquals(ITEMS_BY_NAME_ID.subList(45, 55), initialLoad.mList)
- assertEquals(0, initialLoad.trailingNullCount)
+ assertEquals(0, result.leadingNulls)
+ assertEquals(ITEMS_BY_NAME_ID.subList(45, 55), result.page.items)
+ assertEquals(0, result.trailingNulls)
}
@Test
@@ -124,11 +159,11 @@
val dataSource = ItemDataSource(counted = false)
// loadInitial(null, count) == loadInitial(count)
- val initialLoad = dataSource.loadInitial(null, 10, true)!!
+ val result = loadInitial(dataSource, null, 10, true)
- assertEquals(0, initialLoad.leadingNullCount)
- assertEquals(ITEMS_BY_NAME_ID.subList(0, 10), initialLoad.mList)
- assertEquals(0, initialLoad.trailingNullCount)
+ assertEquals(0, result.leadingNulls)
+ assertEquals(ITEMS_BY_NAME_ID.subList(0, 10), result.page.items)
+ assertEquals(0, result.trailingNulls)
}
// ----- EMPTY -----
@@ -139,21 +174,44 @@
// loadInitial(key, count) == null padding, loadAfter(key, count), null padding
val key = dataSource.getKey(ITEMS_BY_NAME_ID[49])
- val initialLoad = dataSource.loadInitial(key, 10, true)!!
+ val result = loadInitial(dataSource, key, 10, true)
- assertEquals(0, initialLoad.leadingNullCount)
- assertTrue(initialLoad.mList.isEmpty())
- assertEquals(0, initialLoad.trailingNullCount)
+ assertEquals(0, result.leadingNulls)
+ assertTrue(result.page.items.isEmpty())
+ assertEquals(0, result.trailingNulls)
}
@Test
fun loadInitial_nullKey_empty() {
val dataSource = ItemDataSource(items = ArrayList())
- val initialLoad = dataSource.loadInitial(null, 10, true)!!
+ val result = loadInitial(dataSource, null, 10, true)
- assertEquals(0, initialLoad.leadingNullCount)
- assertTrue(initialLoad.mList.isEmpty())
- assertEquals(0, initialLoad.trailingNullCount)
+ assertEquals(0, result.leadingNulls)
+ assertTrue(result.page.items.isEmpty())
+ assertEquals(0, result.trailingNulls)
+ }
+
+ // ----- Other behavior -----
+
+ @Test
+ fun loadBefore() {
+ val dataSource = ItemDataSource()
+ @Suppress("UNCHECKED_CAST")
+ val receiver = mock(PageResult.Receiver::class.java)
+ as PageResult.Receiver<Key, Item>
+
+ dataSource.loadBefore(5, ITEMS_BY_NAME_ID[5], 5, receiver)
+
+ @Suppress("UNCHECKED_CAST")
+ val argument = ArgumentCaptor.forClass(PageResult::class.java)
+ as ArgumentCaptor<PageResult<Key, Item>>
+ verify(receiver).postOnPageResult(argument.capture())
+ verifyNoMoreInteractions(receiver)
+
+ val observed = argument.value
+
+ assertEquals(PageResult.PREPEND, observed.type)
+ assertEquals(ITEMS_BY_NAME_ID.subList(0, 5), observed.page.items)
}
internal data class Key(val name: String, val id: Int)
@@ -223,14 +281,12 @@
private val ITEM_COMPARATOR = compareBy<Item>( {it.name} ).thenByDescending( {it.id} )
private val KEY_COMPARATOR = compareBy<Key>( {it.name} ).thenByDescending( {it.id} )
- private val ITEMS_BY_NAME_ID = List(size = 100, init = {
- val names = Array(size = 10, init = {
- "f" + ('a' + it)
- })
+ private val ITEMS_BY_NAME_ID = List(100) {
+ val names = Array(10) { "f" + ('a' + it) }
Item(names[it % 10],
it,
Math.random() * 1000,
(Math.random() * 200).toInt().toString() + " fake st.")
- }).sortedWith(ITEM_COMPARATOR)
+ }.sortedWith(ITEM_COMPARATOR)
}
}
diff --git a/paging/common/src/test/java/android/arch/paging/NullPaddedListTest.java b/paging/common/src/test/java/android/arch/paging/NullPaddedListTest.java
deleted file mode 100644
index 0c38485..0000000
--- a/paging/common/src/test/java/android/arch/paging/NullPaddedListTest.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.arch.paging;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertSame;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-@RunWith(JUnit4.class)
-public class NullPaddedListTest {
- @Test
- public void simple() {
- List<String> data = Arrays.asList("A", "B", "C", "D", "E", "F");
- NullPaddedList<String> list = new NullPaddedList<>(
- 2, data.subList(2, 4), 2);
-
- assertNull(list.get(0));
- assertNull(list.get(1));
- assertSame(data.get(2), list.get(2));
- assertSame(data.get(3), list.get(3));
- assertNull(list.get(4));
- assertNull(list.get(5));
-
- assertEquals(6, list.size());
- assertEquals(2, list.getLeadingNullCount());
- assertEquals(2, list.getTrailingNullCount());
- }
-
- @Test(expected = IndexOutOfBoundsException.class)
- public void getEmpty() {
- NullPaddedList<String> list = new NullPaddedList<>(0, new ArrayList<String>(), 0);
- list.get(0);
- }
-
- @Test(expected = IndexOutOfBoundsException.class)
- public void getNegative() {
- NullPaddedList<String> list = new NullPaddedList<>(0, Arrays.asList("a", "b"), 0);
- list.get(-1);
- }
-
- @Test(expected = IndexOutOfBoundsException.class)
- public void getPastEnd() {
- NullPaddedList<String> list = new NullPaddedList<>(0, Arrays.asList("a", "b"), 0);
- list.get(2);
- }
-}
diff --git a/paging/common/src/test/java/android/arch/paging/PageArrayListTest.java b/paging/common/src/test/java/android/arch/paging/PageArrayListTest.java
deleted file mode 100644
index 135e640..0000000
--- a/paging/common/src/test/java/android/arch/paging/PageArrayListTest.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.arch.paging;
-
-import static org.junit.Assert.assertEquals;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-
-import java.util.Arrays;
-import java.util.List;
-
-@RunWith(JUnit4.class)
-public class PageArrayListTest {
- @Test
- public void simple() {
- List<String> data = Arrays.asList("A", "B", "C", "D", "E", "F");
- PageArrayList<String> list = new PageArrayList<>(2, data.size());
-
- assertEquals(2, list.mPageSize);
- assertEquals(data.size(), list.size());
- assertEquals(3, list.mMaxPageCount);
-
- for (int i = 0; i < data.size(); i++) {
- assertEquals(null, list.get(i));
- }
- for (int i = 0; i < data.size(); i += list.mPageSize) {
- list.mPages.add(data.subList(i, i + 2));
- }
- for (int i = 0; i < data.size(); i++) {
- assertEquals(data.get(i), list.get(i));
- }
- }
-}
diff --git a/paging/common/src/test/java/android/arch/paging/PagedStorageTest.kt b/paging/common/src/test/java/android/arch/paging/PagedStorageTest.kt
new file mode 100644
index 0000000..92b6c87
--- /dev/null
+++ b/paging/common/src/test/java/android/arch/paging/PagedStorageTest.kt
@@ -0,0 +1,409 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.arch.paging
+
+import org.junit.Assert.assertArrayEquals
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertTrue
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+import org.mockito.Mockito.mock
+import org.mockito.Mockito.verify
+import org.mockito.Mockito.verifyNoMoreInteractions
+
+@RunWith(JUnit4::class)
+class PagedStorageTest {
+ private fun createPage(vararg strings: String): Page<Int, String> {
+ return Page(strings.asList())
+ }
+
+ @Test
+ fun construct() {
+ val storage = PagedStorage(2, createPage("a", "b"), 2)
+
+ assertArrayEquals(arrayOf(null, null, "a", "b", null, null), storage.toArray())
+ assertEquals(6, storage.size)
+ }
+
+ @Test
+ fun appendFill() {
+ val callback = mock(PagedStorage.Callback::class.java)
+
+ val storage = PagedStorage(2, createPage("a", "b"), 2)
+ storage.appendPage(createPage("c", "d"), callback)
+
+
+ assertArrayEquals(arrayOf(null, null, "a", "b", "c", "d"), storage.toArray())
+ verify(callback).onPageAppended(4, 2, 0)
+ verifyNoMoreInteractions(callback)
+ }
+
+ @Test
+ fun appendAdd() {
+ val callback = mock(PagedStorage.Callback::class.java)
+
+ val storage = PagedStorage(2, createPage("a", "b"), 0)
+ storage.appendPage(createPage("c", "d"), callback)
+
+ assertArrayEquals(arrayOf(null, null, "a", "b", "c", "d"), storage.toArray())
+ verify(callback).onPageAppended(4, 0, 2)
+ verifyNoMoreInteractions(callback)
+ }
+
+ @Test
+ fun appendFillAdd() {
+ val callback = mock(PagedStorage.Callback::class.java)
+
+ val storage = PagedStorage(2, createPage("a", "b"), 2)
+
+ // change 2 nulls into c, d
+ storage.appendPage(createPage("c", "d"), callback)
+
+ assertArrayEquals(arrayOf(null, null, "a", "b", "c", "d"), storage.toArray())
+ verify(callback).onPageAppended(4, 2, 0)
+ verifyNoMoreInteractions(callback)
+
+ // append e, f
+ storage.appendPage(createPage("e", "f"), callback)
+
+ assertArrayEquals(arrayOf(null, null, "a", "b", "c", "d", "e", "f"), storage.toArray())
+ verify(callback).onPageAppended(6, 0, 2)
+ verifyNoMoreInteractions(callback)
+ }
+
+ @Test
+ fun prependFill() {
+ val callback = mock(PagedStorage.Callback::class.java)
+
+ val storage = PagedStorage(2, createPage("c", "d"), 2)
+ storage.prependPage(createPage("a", "b"), callback)
+
+ assertArrayEquals(arrayOf("a", "b", "c", "d", null, null), storage.toArray())
+ verify(callback).onPagePrepended(0, 2, 0)
+ verifyNoMoreInteractions(callback)
+ }
+
+ @Test
+ fun prependAdd() {
+ val callback = mock(PagedStorage.Callback::class.java)
+
+ val storage = PagedStorage(0, createPage("c", "d"), 2)
+ storage.prependPage(createPage("a", "b"), callback)
+
+
+ assertArrayEquals(arrayOf("a", "b", "c", "d", null, null), storage.toArray())
+ verify(callback).onPagePrepended(0, 0, 2)
+ verifyNoMoreInteractions(callback)
+ }
+
+ @Test
+ fun prependFillAdd() {
+ val callback = mock(PagedStorage.Callback::class.java)
+
+ val storage = PagedStorage(2, createPage("e", "f"), 2)
+
+ // change 2 nulls into c, d
+ storage.prependPage(createPage("c", "d"), callback)
+
+ assertArrayEquals(arrayOf("c", "d", "e", "f", null, null), storage.toArray())
+ verify(callback).onPagePrepended(0, 2, 0)
+ verifyNoMoreInteractions(callback)
+
+ // prepend a, b
+ storage.prependPage(createPage("a", "b"), callback)
+
+ assertArrayEquals(arrayOf("a", "b", "c", "d", "e", "f", null, null), storage.toArray())
+ verify(callback).onPagePrepended(0, 0, 2)
+ verifyNoMoreInteractions(callback)
+ }
+
+ @Test
+ fun isTiled_addend_smallerPageIsNotLast() {
+ val callback = mock(PagedStorage.Callback::class.java)
+ val storage = PagedStorage(0, createPage("a", "a"), 0)
+ assertTrue(storage.isTiled)
+
+ storage.appendPage(createPage("a", "a"), callback)
+ assertTrue(storage.isTiled)
+
+ storage.appendPage(createPage("a"), callback)
+ assertTrue(storage.isTiled)
+
+ // no matter what we append here, we're no longer tiled
+ storage.appendPage(createPage("a", "a"), callback)
+ assertFalse(storage.isTiled)
+ }
+
+ @Test
+ fun isTiled_append_growingSizeDisable() {
+ val callback = mock(PagedStorage.Callback::class.java)
+ val storage = PagedStorage(0, createPage("a", "a"), 0)
+ assertTrue(storage.isTiled)
+
+ // page size can't grow from append
+ storage.appendPage(createPage("a", "a", "a"), callback)
+ assertFalse(storage.isTiled)
+ }
+
+ @Test
+ fun isTiled_prepend_smallerPage() {
+ val callback = mock(PagedStorage.Callback::class.java)
+ val storage = PagedStorage(0, createPage("a"), 0)
+ assertTrue(storage.isTiled)
+
+ storage.prependPage(createPage("a", "a"), callback)
+ assertTrue(storage.isTiled)
+
+ storage.prependPage(createPage("a", "a"), callback)
+ assertTrue(storage.isTiled)
+
+ storage.prependPage(createPage("a"), callback)
+ assertFalse(storage.isTiled)
+ }
+
+ @Test
+ fun isTiled_prepend_smallerThanInitialPage() {
+ val callback = mock(PagedStorage.Callback::class.java)
+ val storage = PagedStorage(0, createPage("a", "a"), 0)
+ assertTrue(storage.isTiled)
+
+ storage.prependPage(createPage("a"), callback)
+ assertFalse(storage.isTiled)
+ }
+
+ @Test
+ fun get_tiled() {
+ val callback = mock(PagedStorage.Callback::class.java)
+ val storage = PagedStorage(1, createPage("a", "b"), 5)
+ assertTrue(storage.isTiled)
+
+ storage.appendPage(createPage("c", "d"), callback)
+ storage.appendPage(createPage("e", "f"), callback)
+
+ assertTrue(storage.isTiled)
+ assertArrayEquals(arrayOf(null, "a", "b", "c", "d", "e", "f", null), storage.toArray())
+ }
+
+ @Test
+ fun get_nonTiled() {
+ val callback = mock(PagedStorage.Callback::class.java)
+ val storage = PagedStorage(1, createPage("a"), 6)
+ assertTrue(storage.isTiled)
+
+ storage.appendPage(createPage("b", "c"), callback)
+ storage.appendPage(createPage("d", "e", "f"), callback)
+
+ assertFalse(storage.isTiled)
+ assertArrayEquals(arrayOf(null, "a", "b", "c", "d", "e", "f", null), storage.toArray())
+ }
+
+ @Test
+ fun insertOne() {
+ val callback = mock(PagedStorage.Callback::class.java)
+ val storage = PagedStorage<Int, String>()
+
+ storage.init(2, createPage("c", "d"), 3, 0, callback)
+
+ assertEquals(7, storage.size)
+ assertArrayEquals(arrayOf(null, null, "c", "d", null, null, null), storage.toArray())
+ verify(callback).onInitialized(7)
+ verifyNoMoreInteractions(callback)
+
+ storage.insertPage(4, createPage("e", "f"), callback)
+
+ assertEquals(7, storage.size)
+ assertArrayEquals(arrayOf(null, null, "c", "d", "e", "f", null), storage.toArray())
+ verify(callback).onPageInserted(4, 2)
+ verifyNoMoreInteractions(callback)
+ }
+
+ @Test
+ fun insertThree() {
+ val callback = mock(PagedStorage.Callback::class.java)
+ val storage = PagedStorage<Int, String>()
+
+ storage.init(2, createPage("c", "d"), 3, 0, callback)
+
+ assertEquals(7, storage.size)
+ assertArrayEquals(arrayOf(null, null, "c", "d", null, null, null), storage.toArray())
+ verify(callback).onInitialized(7)
+ verifyNoMoreInteractions(callback)
+
+ // first, insert 1st page
+ storage.insertPage(0, createPage("a", "b"), callback)
+
+ assertEquals(7, storage.size)
+ assertArrayEquals(arrayOf("a", "b", "c", "d", null, null, null), storage.toArray())
+ verify(callback).onPageInserted(0, 2)
+ verifyNoMoreInteractions(callback)
+
+ // then 3rd page
+ storage.insertPage(4, createPage("e", "f"), callback)
+
+ assertEquals(7, storage.size)
+ assertArrayEquals(arrayOf("a", "b", "c", "d", "e", "f", null), storage.toArray())
+ verify(callback).onPageInserted(4, 2)
+ verifyNoMoreInteractions(callback)
+
+ // then last, small page
+ storage.insertPage(6, createPage("g"), callback)
+
+ assertEquals(7, storage.size)
+ assertArrayEquals(arrayOf("a", "b", "c", "d", "e", "f", "g"), storage.toArray())
+ verify(callback).onPageInserted(6, 1)
+ verifyNoMoreInteractions(callback)
+ }
+
+ @Test
+ fun insertLastFirst() {
+ val callback = mock(PagedStorage.Callback::class.java)
+ val storage = PagedStorage<Int, String>()
+
+ storage.init(6, createPage("g"), 0, 0, callback)
+
+ assertEquals(7, storage.size)
+ assertArrayEquals(arrayOf(null, null, null, null, null, null, "g"), storage.toArray())
+ verify(callback).onInitialized(7)
+ verifyNoMoreInteractions(callback)
+
+ // insert 1st page
+ storage.insertPage(0, createPage("a", "b"), callback)
+
+ assertEquals(7, storage.size)
+ assertArrayEquals(arrayOf("a", "b", null, null, null, null, "g"), storage.toArray())
+ verify(callback).onPageInserted(0, 2)
+ verifyNoMoreInteractions(callback)
+ }
+
+ @Test(expected = IllegalArgumentException::class)
+ fun insertFailure_decreaseLast() {
+ val callback = mock(PagedStorage.Callback::class.java)
+ val storage = PagedStorage<Int, String>()
+
+ storage.init(2, createPage("c", "d"), 0, 0, callback)
+
+ // should throw, page too small
+ storage.insertPage(0, createPage("a"), callback)
+ }
+
+ @Test(expected = IllegalArgumentException::class)
+ fun insertFailure_increase() {
+ val callback = mock(PagedStorage.Callback::class.java)
+ val storage = PagedStorage<Int, String>()
+
+ storage.init(0, createPage("a", "b"), 3, 0, callback)
+
+ // should throw, page too big
+ storage.insertPage(2, createPage("c", "d", "e"), callback)
+ }
+
+ @Test
+ fun allocatePlaceholders_simple() {
+ val callback = mock(PagedStorage.Callback::class.java)
+ val storage = PagedStorage<Int, String>()
+
+ storage.init(2, createPage("c"), 2, 0, callback)
+
+ verify(callback).onInitialized(5)
+
+ storage.allocatePlaceholders(2, 1, 1, callback)
+
+ verify(callback).onPagePlaceholderInserted(1)
+ verify(callback).onPagePlaceholderInserted(3)
+ verifyNoMoreInteractions(callback)
+
+ assertArrayEquals(arrayOf(null, null, "c", null, null), storage.toArray())
+ }
+
+ @Test
+ fun allocatePlaceholders_adoptPageSize() {
+ val callback = mock(PagedStorage.Callback::class.java)
+ val storage = PagedStorage<Int, String>()
+
+ storage.init(4, createPage("e"), 0, 0, callback)
+
+ verify(callback).onInitialized(5)
+
+ storage.allocatePlaceholders(0, 2, 2, callback)
+
+ verify(callback).onPagePlaceholderInserted(0)
+ verify(callback).onPagePlaceholderInserted(1)
+ verifyNoMoreInteractions(callback)
+
+ assertArrayEquals(arrayOf(null, null, null, null, "e"), storage.toArray())
+ }
+
+ @Test(expected = IllegalArgumentException::class)
+ fun allocatePlaceholders_cannotShrinkPageSize() {
+ val callback = mock(PagedStorage.Callback::class.java)
+ val storage = PagedStorage<Int, String>()
+
+ storage.init(4, createPage("e", "f"), 0, 0, callback)
+
+ verify(callback).onInitialized(6)
+
+ storage.allocatePlaceholders(0, 2, 1, callback)
+ }
+
+
+ @Test(expected = IllegalArgumentException::class)
+ fun allocatePlaceholders_cannotAdoptPageSize() {
+ val callback = mock(PagedStorage.Callback::class.java)
+ val storage = PagedStorage<Int, String>()
+
+ storage.init(2, createPage("c", "d"), 2, 0, callback)
+
+ verify(callback).onInitialized(6)
+
+ storage.allocatePlaceholders(0, 2, 3, callback)
+ }
+
+ @Test
+ fun get_placeholdersMulti() {
+ val callback = mock(PagedStorage.Callback::class.java)
+ val storage = PagedStorage<Int, String>()
+
+ storage.init(2, createPage("c", "d"), 3, 0, callback)
+
+ assertArrayEquals(arrayOf(null, null, "c", "d", null, null, null), storage.toArray())
+
+ storage.allocatePlaceholders(0, 10, 2, callback)
+
+ // allocating placeholders shouldn't affect result of get
+ assertArrayEquals(arrayOf(null, null, "c", "d", null, null, null), storage.toArray())
+ }
+
+ @Test
+ fun hasPage() {
+ val callback = mock(PagedStorage.Callback::class.java)
+ val storage = PagedStorage<Int, String>()
+
+ storage.init(4, createPage("e"), 0, 0, callback)
+
+ assertFalse(storage.hasPage(1, 0))
+ assertFalse(storage.hasPage(1, 1))
+ assertFalse(storage.hasPage(1, 2))
+ assertFalse(storage.hasPage(1, 3))
+ assertTrue(storage.hasPage(1, 4))
+
+ assertFalse(storage.hasPage(2, 0))
+ assertFalse(storage.hasPage(2, 1))
+ assertTrue(storage.hasPage(2, 2))
+ }
+}
diff --git a/paging/common/src/test/java/android/arch/paging/TestExecutor.java b/paging/common/src/test/java/android/arch/paging/TestExecutor.java
deleted file mode 100644
index 30809c3..0000000
--- a/paging/common/src/test/java/android/arch/paging/TestExecutor.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.arch.paging;
-
-import android.support.annotation.NonNull;
-
-import java.util.LinkedList;
-import java.util.Queue;
-import java.util.concurrent.Executor;
-
-public class TestExecutor implements Executor {
- private Queue<Runnable> mTasks = new LinkedList<>();
-
- @Override
- public void execute(@NonNull Runnable command) {
- mTasks.add(command);
- }
-
- boolean executeAll() {
- boolean consumed = !mTasks.isEmpty();
- Runnable task;
- while ((task = mTasks.poll()) != null) {
- task.run();
- }
- return consumed;
- }
-}
diff --git a/paging/common/src/test/java/android/arch/paging/TestExecutor.kt b/paging/common/src/test/java/android/arch/paging/TestExecutor.kt
new file mode 100644
index 0000000..7034aa0
--- /dev/null
+++ b/paging/common/src/test/java/android/arch/paging/TestExecutor.kt
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.arch.paging
+
+import java.util.LinkedList
+import java.util.concurrent.Executor
+
+class TestExecutor : Executor {
+ private val mTasks = LinkedList<Runnable>()
+
+ override fun execute(command: Runnable) {
+ mTasks.add(command)
+ }
+
+ internal fun executeAll(): Boolean {
+ val consumed = !mTasks.isEmpty()
+
+ var task = mTasks.poll()
+ while (task != null) {
+ task.run()
+ task = mTasks.poll()
+ }
+ return consumed
+ }
+}
diff --git a/paging/common/src/test/java/android/arch/paging/TiledDataSourceTest.kt b/paging/common/src/test/java/android/arch/paging/TiledDataSourceTest.kt
new file mode 100644
index 0000000..2b16fb2
--- /dev/null
+++ b/paging/common/src/test/java/android/arch/paging/TiledDataSourceTest.kt
@@ -0,0 +1,45 @@
+package android.arch.paging
+
+import org.junit.Assert.assertEquals
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+import org.mockito.ArgumentCaptor
+import org.mockito.Mockito.mock
+import org.mockito.Mockito.verify
+import org.mockito.Mockito.verifyNoMoreInteractions
+import java.util.Collections
+
+
+@RunWith(JUnit4::class)
+class TiledDataSourceTest {
+ @Test
+ fun loadInitialEmpty() {
+ @Suppress("UNCHECKED_CAST")
+ val receiver = mock(PageResult.Receiver::class.java) as PageResult.Receiver<Int, String>
+ val dataSource = EmptyDataSource()
+ dataSource.loadRangeInitial(0, 0, 1, 0, receiver)
+
+ @Suppress("UNCHECKED_CAST")
+ val argument = ArgumentCaptor.forClass(PageResult::class.java)
+ as ArgumentCaptor<PageResult<Int, String>>
+ verify(receiver).onPageResult(argument.capture())
+ verifyNoMoreInteractions(receiver)
+
+ val observed = argument.value
+
+ assertEquals(PageResult.INIT, observed.type)
+ assertEquals(Collections.EMPTY_LIST, observed.page.items)
+ }
+
+ class EmptyDataSource : TiledDataSource<String>() {
+ override fun countItems(): Int {
+ return 0
+ }
+
+ override fun loadRange(startPosition: Int, count: Int): List<String> {
+ @Suppress("UNCHECKED_CAST")
+ return Collections.EMPTY_LIST as List<String>
+ }
+ }
+}
\ No newline at end of file
diff --git a/paging/common/src/test/java/android/arch/paging/TiledPagedListTest.java b/paging/common/src/test/java/android/arch/paging/TiledPagedListTest.java
deleted file mode 100644
index 4ad02e1..0000000
--- a/paging/common/src/test/java/android/arch/paging/TiledPagedListTest.java
+++ /dev/null
@@ -1,288 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.arch.paging;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyNoMoreInteractions;
-import static org.mockito.Mockito.verifyZeroInteractions;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-@RunWith(JUnit4.class)
-public class TiledPagedListTest {
-
- private TestExecutor mMainThread = new TestExecutor();
- private TestExecutor mBackgroundThread = new TestExecutor();
-
- private static final ArrayList<Item> ITEMS = new ArrayList<>();
-
- static {
- for (int i = 0; i < 45; i++) {
- ITEMS.add(new Item(i));
- }
- }
-
- // use a page size that's not an even divisor of ITEMS.size() to test end conditions
- private static final int PAGE_SIZE = 10;
-
- private static class Item {
- private Item(int position) {
- this.position = position;
- this.name = "Item " + position;
- }
-
- @SuppressWarnings("WeakerAccess")
- public final int position;
- public final String name;
-
- @Override
- public String toString() {
- return name;
- }
- }
-
- private static class TestTiledSource extends TiledDataSource<Item> {
- @Override
- public int countItems() {
- return ITEMS.size();
- }
-
- @Override
- public List<Item> loadRange(int startPosition, int count) {
- int endPosition = Math.min(ITEMS.size(), startPosition + count);
- return ITEMS.subList(startPosition, endPosition);
- }
- }
-
- private void verifyRange(PageArrayList<Item> list, Integer... loadedPages) {
- List<Integer> loadedPageList = Arrays.asList(loadedPages);
- assertEquals(ITEMS.size(), list.size());
- for (int i = 0; i < list.size(); i++) {
- if (loadedPageList.contains(i / PAGE_SIZE)) {
- assertSame(ITEMS.get(i), list.get(i));
- } else {
- assertEquals(null, list.get(i));
- }
- }
- }
- private TiledPagedList<Item> createTiledPagedList(int loadPosition) {
- return createTiledPagedList(loadPosition, PAGE_SIZE);
- }
-
- private TiledPagedList<Item> createTiledPagedList(int loadPosition, int prefetchDistance) {
- TestTiledSource source = new TestTiledSource();
- return new TiledPagedList<>(
- source, mMainThread, mBackgroundThread,
- new PagedList.Config.Builder()
- .setPageSize(PAGE_SIZE)
- .setPrefetchDistance(prefetchDistance)
- .build(),
- loadPosition);
- }
-
- @Test
- public void initialLoad() {
- TiledPagedList<Item> pagedList = createTiledPagedList(0);
- verifyRange(pagedList, 0);
- }
-
- @Test
- public void initialLoad_end() {
- TiledPagedList<Item> pagedList = createTiledPagedList(44);
- verifyRange(pagedList, 3, 4);
- }
-
- @Test
- public void initialLoad_multiple() {
- TiledPagedList<Item> pagedList = createTiledPagedList(9);
- verifyRange(pagedList, 0, 1);
- }
-
- @Test
- public void initialLoad_offset() {
- TiledPagedList<Item> pagedList = createTiledPagedList(41);
- verifyRange(pagedList, 3, 4);
- }
-
- @Test
- public void append() {
- TiledPagedList<Item> pagedList = createTiledPagedList(0);
- PagedList.Callback callback = mock(PagedList.Callback.class);
- pagedList.addWeakCallback(null, callback);
- verifyRange(pagedList, 0);
- verifyZeroInteractions(callback);
-
- pagedList.loadAround(5);
- drain();
-
- verifyRange(pagedList, 0, 1);
- verify(callback).onChanged(10, 10);
- verifyNoMoreInteractions(callback);
- }
-
- @Test
- public void prepend() {
- TiledPagedList<Item> pagedList = createTiledPagedList(44);
- PagedList.Callback callback = mock(PagedList.Callback.class);
- pagedList.addWeakCallback(null, callback);
- verifyRange(pagedList, 3, 4);
- verifyZeroInteractions(callback);
-
- pagedList.loadAround(35);
- drain();
-
- verifyRange(pagedList, 2, 3, 4);
- verify(callback).onChanged(20, 10);
- verifyNoMoreInteractions(callback);
- }
-
- @Test
- public void loadWithGap() {
- TiledPagedList<Item> pagedList = createTiledPagedList(0);
- PagedList.Callback callback = mock(PagedList.Callback.class);
- pagedList.addWeakCallback(null, callback);
- verifyRange(pagedList, 0);
- verifyZeroInteractions(callback);
-
- pagedList.loadAround(44);
- drain();
-
- verifyRange(pagedList, 0, 3, 4);
- verify(callback).onChanged(30, 10);
- verify(callback).onChanged(40, 5);
- verifyNoMoreInteractions(callback);
- }
-
- @Test
- public void tinyPrefetchTest() {
- TiledPagedList<Item> pagedList = createTiledPagedList(0, 1);
- PagedList.Callback callback = mock(PagedList.Callback.class);
- pagedList.addWeakCallback(null, callback);
- verifyRange(pagedList, 0); // just 4 loaded
- verifyZeroInteractions(callback);
-
- pagedList.loadAround(23);
- drain();
-
- verifyRange(pagedList, 0, 2);
- verify(callback).onChanged(20, 10);
- verifyNoMoreInteractions(callback);
-
- pagedList.loadAround(44);
- drain();
-
- verifyRange(pagedList, 0, 2, 4);
- verify(callback).onChanged(40, 5);
- verifyNoMoreInteractions(callback);
- }
-
- @Test
- public void appendCallbackAddedLate() {
- TiledPagedList<Item> pagedList = createTiledPagedList(0, 0);
- verifyRange(pagedList, 0);
-
- pagedList.loadAround(15);
- drain();
- verifyRange(pagedList, 0, 1);
-
- // snapshot at 20 items
- PageArrayList<Item> snapshot = (PageArrayList<Item>) pagedList.snapshot();
- verifyRange(snapshot, 0, 1);
-
-
- pagedList.loadAround(25);
- pagedList.loadAround(35);
- drain();
- verifyRange(pagedList, 0, 1, 2, 3);
- verifyRange(snapshot, 0, 1);
-
- PagedList.Callback callback = mock(
- PagedList.Callback.class);
- pagedList.addWeakCallback(snapshot, callback);
- verify(callback).onChanged(20, 20);
- verifyNoMoreInteractions(callback);
- }
-
-
- @Test
- public void prependCallbackAddedLate() {
- TiledPagedList<Item> pagedList = createTiledPagedList(44, 0);
- verifyRange(pagedList, 3, 4);
-
- pagedList.loadAround(25);
- drain();
- verifyRange(pagedList, 2, 3, 4);
-
- // snapshot at 30 items
- PageArrayList<Item> snapshot = (PageArrayList<Item>) pagedList.snapshot();
- verifyRange(snapshot, 2, 3, 4);
-
-
- pagedList.loadAround(15);
- pagedList.loadAround(5);
- drain();
- verifyRange(pagedList, 0, 1, 2, 3, 4);
- verifyRange(snapshot, 2, 3, 4);
-
- PagedList.Callback callback = mock(PagedList.Callback.class);
- pagedList.addWeakCallback(snapshot, callback);
- verify(callback).onChanged(0, 20);
- verifyNoMoreInteractions(callback);
- }
-
- @Test
- public void placeholdersDisabled() {
- // disable placeholders with config, so we create a contiguous version of the pagedlist
- PagedList<Item> pagedList = new PagedList.Builder<Integer, Item>()
- .setDataSource(new TestTiledSource())
- .setMainThreadExecutor(mMainThread)
- .setBackgroundThreadExecutor(mBackgroundThread)
- .setConfig(new PagedList.Config.Builder()
- .setPageSize(PAGE_SIZE)
- .setPrefetchDistance(PAGE_SIZE)
- .setInitialLoadSizeHint(PAGE_SIZE)
- .setEnablePlaceholders(false)
- .build())
- .setInitialKey(20)
- .build();
-
- assertTrue(pagedList.isContiguous());
-
- ContiguousPagedList<Item> contiguousPagedList = (ContiguousPagedList<Item>) pagedList;
- assertEquals(0, contiguousPagedList.getLeadingNullCount());
- assertEquals(PAGE_SIZE, contiguousPagedList.mList.size());
- assertEquals(0, contiguousPagedList.getTrailingNullCount());
- }
-
- private void drain() {
- boolean executed;
- do {
- executed = mBackgroundThread.executeAll();
- executed |= mMainThread.executeAll();
- } while (executed);
- }
-}
diff --git a/paging/common/src/test/java/android/arch/paging/TiledPagedListTest.kt b/paging/common/src/test/java/android/arch/paging/TiledPagedListTest.kt
new file mode 100644
index 0000000..6524008
--- /dev/null
+++ b/paging/common/src/test/java/android/arch/paging/TiledPagedListTest.kt
@@ -0,0 +1,382 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.arch.paging
+
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertNull
+import org.junit.Assert.assertSame
+import org.junit.Assert.assertTrue
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+import org.mockito.Mockito.any
+import org.mockito.Mockito.eq
+import org.mockito.Mockito.mock
+import org.mockito.Mockito.verify
+import org.mockito.Mockito.verifyNoMoreInteractions
+import org.mockito.Mockito.verifyZeroInteractions
+
+@RunWith(JUnit4::class)
+class TiledPagedListTest {
+ private val mMainThread = TestExecutor()
+ private val mBackgroundThread = TestExecutor()
+
+ private class Item(position: Int) {
+ val name: String = "Item $position"
+
+ override fun toString(): String {
+ return name
+ }
+ }
+
+ private fun verifyLoadedPages(list: List<Item>, vararg loadedPages: Int, expected: List<Item> = ITEMS) {
+ val loadedPageList = loadedPages.asList()
+ assertEquals(expected.size, list.size)
+ for (i in list.indices) {
+ if (loadedPageList.contains(i / PAGE_SIZE)) {
+ assertSame("Index $i", expected[i], list[i])
+ } else {
+ assertNull("Index $i", list[i])
+ }
+ }
+ }
+
+ private fun createTiledPagedList(loadPosition: Int, initPageCount: Int,
+ prefetchDistance: Int = PAGE_SIZE,
+ listData: List<Item> = ITEMS,
+ boundaryCallback: PagedList.BoundaryCallback<Item>? = null): TiledPagedList<Item> {
+ return TiledPagedList(
+ ListDataSource(listData), mMainThread, mBackgroundThread, boundaryCallback,
+ PagedList.Config.Builder()
+ .setPageSize(PAGE_SIZE)
+ .setInitialLoadSizeHint(PAGE_SIZE * initPageCount)
+ .setPrefetchDistance(prefetchDistance)
+ .build(),
+ loadPosition)
+ }
+
+ @Test
+ fun computeFirstLoadPosition_zero() {
+ assertEquals(0, TiledPagedList.computeFirstLoadPosition(0, 30, 10, 100))
+ }
+
+ @Test
+ fun computeFirstLoadPosition_requestedPositionIncluded() {
+ assertEquals(0, TiledPagedList.computeFirstLoadPosition(10, 10, 10, 100))
+ }
+
+ @Test
+ fun computeFirstLoadPosition_endAdjusted() {
+ assertEquals(70, TiledPagedList.computeFirstLoadPosition(99, 30, 10, 100))
+ }
+
+ @Test
+ fun initialLoad_onePage() {
+ val pagedList = createTiledPagedList(loadPosition = 0, initPageCount = 1)
+ verifyLoadedPages(pagedList, 0, 1)
+ }
+
+ @Test
+ fun initialLoad_onePageOffset() {
+ val pagedList = createTiledPagedList(loadPosition = 10, initPageCount = 1)
+ verifyLoadedPages(pagedList, 0, 1)
+ }
+
+ @Test
+ fun initialLoad_full() {
+ val pagedList = createTiledPagedList(loadPosition = 0, initPageCount = 100)
+ verifyLoadedPages(pagedList, 0, 1, 2, 3, 4)
+ }
+
+ @Test
+ fun initialLoad_end() {
+ val pagedList = createTiledPagedList(loadPosition = 44, initPageCount = 2)
+ verifyLoadedPages(pagedList, 3, 4)
+ }
+
+ @Test
+ fun initialLoad_multiple() {
+ val pagedList = createTiledPagedList(loadPosition = 9, initPageCount = 2)
+ verifyLoadedPages(pagedList, 0, 1)
+ }
+
+ @Test
+ fun initialLoad_offset() {
+ val pagedList = createTiledPagedList(loadPosition = 41, initPageCount = 2)
+ verifyLoadedPages(pagedList, 3, 4)
+ }
+
+ @Test
+ fun append() {
+ val pagedList = createTiledPagedList(loadPosition = 0, initPageCount = 1)
+ val callback = mock(PagedList.Callback::class.java)
+ pagedList.addWeakCallback(null, callback)
+ verifyLoadedPages(pagedList, 0, 1)
+ verifyZeroInteractions(callback)
+
+ pagedList.loadAround(15)
+
+ verifyLoadedPages(pagedList, 0, 1)
+
+ drain()
+
+ verifyLoadedPages(pagedList, 0, 1, 2)
+ verify(callback).onChanged(20, 10)
+ verifyNoMoreInteractions(callback)
+ }
+
+ @Test
+ fun prepend() {
+ val pagedList = createTiledPagedList(loadPosition = 44, initPageCount = 2)
+ val callback = mock(PagedList.Callback::class.java)
+ pagedList.addWeakCallback(null, callback)
+ verifyLoadedPages(pagedList, 3, 4)
+ verifyZeroInteractions(callback)
+
+ pagedList.loadAround(35)
+ drain()
+
+ verifyLoadedPages(pagedList, 2, 3, 4)
+ verify<PagedList.Callback>(callback).onChanged(20, 10)
+ verifyNoMoreInteractions(callback)
+ }
+
+ @Test
+ fun loadWithGap() {
+ val pagedList = createTiledPagedList(loadPosition = 0, initPageCount = 1)
+ val callback = mock(PagedList.Callback::class.java)
+ pagedList.addWeakCallback(null, callback)
+ verifyLoadedPages(pagedList, 0, 1)
+ verifyZeroInteractions(callback)
+
+ pagedList.loadAround(44)
+ drain()
+
+ verifyLoadedPages(pagedList, 0, 1, 3, 4)
+ verify(callback).onChanged(30, 10)
+ verify(callback).onChanged(40, 5)
+ verifyNoMoreInteractions(callback)
+ }
+
+ @Test
+ fun tinyPrefetchTest() {
+ val pagedList = createTiledPagedList(
+ loadPosition = 0, initPageCount = 1, prefetchDistance = 1)
+ val callback = mock(PagedList.Callback::class.java)
+ pagedList.addWeakCallback(null, callback)
+ verifyLoadedPages(pagedList, 0, 1)
+ verifyZeroInteractions(callback)
+
+ pagedList.loadAround(33)
+ drain()
+
+ verifyLoadedPages(pagedList, 0, 1, 3)
+ verify(callback).onChanged(30, 10)
+ verifyNoMoreInteractions(callback)
+
+ pagedList.loadAround(44)
+ drain()
+
+ verifyLoadedPages(pagedList, 0, 1, 3, 4)
+ verify(callback).onChanged(40, 5)
+ verifyNoMoreInteractions(callback)
+ }
+
+ @Test
+ fun appendCallbackAddedLate() {
+ val pagedList = createTiledPagedList(
+ loadPosition = 0, initPageCount = 1, prefetchDistance = 0)
+ verifyLoadedPages(pagedList, 0, 1)
+
+ pagedList.loadAround(25)
+ drain()
+ verifyLoadedPages(pagedList, 0, 1, 2)
+
+ // snapshot at 30 items
+ val snapshot = pagedList.snapshot()
+ verifyLoadedPages(snapshot, 0, 1, 2)
+
+ pagedList.loadAround(35)
+ pagedList.loadAround(44)
+ drain()
+ verifyLoadedPages(pagedList, 0, 1, 2, 3, 4)
+ verifyLoadedPages(snapshot, 0, 1, 2)
+
+ val callback = mock(PagedList.Callback::class.java)
+ pagedList.addWeakCallback(snapshot, callback)
+ verify(callback).onChanged(30, 20)
+ verifyNoMoreInteractions(callback)
+ }
+
+ @Test
+ fun prependCallbackAddedLate() {
+ val pagedList = createTiledPagedList(
+ loadPosition = 44, initPageCount = 2, prefetchDistance = 0)
+ verifyLoadedPages(pagedList, 3, 4)
+
+ pagedList.loadAround(25)
+ drain()
+ verifyLoadedPages(pagedList, 2, 3, 4)
+
+ // snapshot at 30 items
+ val snapshot = pagedList.snapshot()
+ verifyLoadedPages(snapshot, 2, 3, 4)
+
+ pagedList.loadAround(15)
+ pagedList.loadAround(5)
+ drain()
+ verifyLoadedPages(pagedList, 0, 1, 2, 3, 4)
+ verifyLoadedPages(snapshot, 2, 3, 4)
+
+ val callback = mock(PagedList.Callback::class.java)
+ pagedList.addWeakCallback(snapshot, callback)
+ verify(callback).onChanged(0, 20)
+ verifyNoMoreInteractions(callback)
+ }
+
+ @Test
+ fun placeholdersDisabled() {
+ // disable placeholders with config, so we create a contiguous version of the pagedlist
+ val pagedList = PagedList.Builder<Int, Item>()
+ .setDataSource(ListDataSource(ITEMS))
+ .setMainThreadExecutor(mMainThread)
+ .setBackgroundThreadExecutor(mBackgroundThread)
+ .setConfig(PagedList.Config.Builder()
+ .setPageSize(PAGE_SIZE)
+ .setPrefetchDistance(PAGE_SIZE)
+ .setInitialLoadSizeHint(PAGE_SIZE)
+ .setEnablePlaceholders(false)
+ .build())
+ .setInitialKey(20)
+ .build()
+
+ assertTrue(pagedList.isContiguous)
+
+ @Suppress("UNCHECKED_CAST")
+ val contiguousPagedList = pagedList as ContiguousPagedList<Int, Item>
+ assertEquals(0, contiguousPagedList.mStorage.leadingNullCount)
+ assertEquals(PAGE_SIZE, contiguousPagedList.mStorage.storageCount)
+ assertEquals(0, contiguousPagedList.mStorage.trailingNullCount)
+ }
+
+ @Test
+ fun boundaryCallback_empty() {
+ @Suppress("UNCHECKED_CAST")
+ val boundaryCallback =
+ mock(PagedList.BoundaryCallback::class.java) as PagedList.BoundaryCallback<Item>
+ val pagedList = createTiledPagedList(loadPosition = 0, initPageCount = 1,
+ listData = ArrayList(), boundaryCallback = boundaryCallback)
+ assertEquals(0, pagedList.size)
+
+ // nothing yet
+ verifyNoMoreInteractions(boundaryCallback)
+
+ // onZeroItemsLoaded posted, since creation often happens on BG thread
+ drain()
+ verify(boundaryCallback).onZeroItemsLoaded()
+ verifyNoMoreInteractions(boundaryCallback)
+ }
+
+ @Test
+ fun boundaryCallback_immediate() {
+ @Suppress("UNCHECKED_CAST")
+ val boundaryCallback =
+ mock(PagedList.BoundaryCallback::class.java) as PagedList.BoundaryCallback<Item>
+ val pagedList = createTiledPagedList(loadPosition = 0, initPageCount = 1,
+ listData = ITEMS.subList(0, 2), boundaryCallback = boundaryCallback)
+ assertEquals(2, pagedList.size)
+
+ // nothing yet
+ verifyZeroInteractions(boundaryCallback)
+
+ // callbacks posted, since creation often happens on BG thread
+ drain()
+ verify(boundaryCallback).onItemAtFrontLoaded(any(), eq(ITEMS[0]), eq(2))
+ verify(boundaryCallback).onItemAtEndLoaded(any(), eq(ITEMS[1]), eq(2))
+ verifyNoMoreInteractions(boundaryCallback)
+ }
+
+ @Test
+ fun boundaryCallback_delayedUntilLoaded() {
+ @Suppress("UNCHECKED_CAST")
+ val boundaryCallback =
+ mock(PagedList.BoundaryCallback::class.java) as PagedList.BoundaryCallback<Item>
+ val pagedList = createTiledPagedList(loadPosition = 20, initPageCount = 1,
+ boundaryCallback = boundaryCallback)
+ verifyLoadedPages(pagedList, 1, 2) // 0, 3, and 4 not loaded yet
+
+ // nothing yet, even after drain
+ verifyZeroInteractions(boundaryCallback)
+ drain()
+ verifyZeroInteractions(boundaryCallback)
+
+ pagedList.loadAround(0)
+ pagedList.loadAround(44)
+
+ // still nothing, since items aren't loaded...
+ verifyZeroInteractions(boundaryCallback)
+
+ drain()
+ // first/last items loaded now, so callbacks dispatched
+ verify(boundaryCallback).onItemAtFrontLoaded(any(), eq(ITEMS.first()), eq(45))
+ verify(boundaryCallback).onItemAtEndLoaded(any(), eq(ITEMS.last()), eq(45))
+ verifyNoMoreInteractions(boundaryCallback)
+ }
+
+ @Test
+ fun boundaryCallback_delayedUntilNearbyAccess() {
+ @Suppress("UNCHECKED_CAST")
+ val boundaryCallback =
+ mock(PagedList.BoundaryCallback::class.java) as PagedList.BoundaryCallback<Item>
+ val pagedList = createTiledPagedList(loadPosition = 0, initPageCount = 5,
+ prefetchDistance = 2, boundaryCallback = boundaryCallback)
+ verifyLoadedPages(pagedList, 0, 1, 2, 3, 4)
+
+ // all items loaded, but no access near ends, so no callbacks
+ verifyZeroInteractions(boundaryCallback)
+ drain()
+ verifyZeroInteractions(boundaryCallback)
+
+ pagedList.loadAround(0)
+ pagedList.loadAround(44)
+
+ // callbacks not posted immediately
+ verifyZeroInteractions(boundaryCallback)
+
+ drain()
+
+ // items accessed, so now posted callbacks are run
+ verify(boundaryCallback).onItemAtFrontLoaded(any(), eq(ITEMS.first()), eq(45))
+ verify(boundaryCallback).onItemAtEndLoaded(any(), eq(ITEMS.last()), eq(45))
+ verifyNoMoreInteractions(boundaryCallback)
+ }
+
+ private fun drain() {
+ var executed: Boolean
+ do {
+ executed = mBackgroundThread.executeAll()
+ executed = mMainThread.executeAll() || executed
+ } while (executed)
+ }
+
+ companion object {
+ // use a page size that's not an even divisor of ITEMS.size() to test end conditions
+ private val PAGE_SIZE = 10
+
+ private val ITEMS = List(45) { Item(it) }
+ }
+}
diff --git a/paging/integration-tests/testapp/src/main/java/android/arch/paging/integration/testapp/PagedListItemAdapter.java b/paging/integration-tests/testapp/src/main/java/android/arch/paging/integration/testapp/PagedListItemAdapter.java
index 3522e43..d1ae5ab 100644
--- a/paging/integration-tests/testapp/src/main/java/android/arch/paging/integration/testapp/PagedListItemAdapter.java
+++ b/paging/integration-tests/testapp/src/main/java/android/arch/paging/integration/testapp/PagedListItemAdapter.java
@@ -23,7 +23,7 @@
import android.widget.TextView;
/**
- * Sample NullPaddedList adapter, which uses a PagedListAdapterHelper.
+ * Sample PagedList item Adapter, which uses a PagedListAdapterHelper.
*/
class PagedListItemAdapter extends PagedListAdapter<Item, RecyclerView.ViewHolder> {
diff --git a/paging/integration-tests/testapp/src/main/java/android/arch/paging/integration/testapp/PagedListItemViewModel.java b/paging/integration-tests/testapp/src/main/java/android/arch/paging/integration/testapp/PagedListItemViewModel.java
index 237cc14..974eab9 100644
--- a/paging/integration-tests/testapp/src/main/java/android/arch/paging/integration/testapp/PagedListItemViewModel.java
+++ b/paging/integration-tests/testapp/src/main/java/android/arch/paging/integration/testapp/PagedListItemViewModel.java
@@ -19,7 +19,7 @@
import android.arch.lifecycle.LiveData;
import android.arch.lifecycle.ViewModel;
import android.arch.paging.DataSource;
-import android.arch.paging.LivePagedListProvider;
+import android.arch.paging.LivePagedListBuilder;
import android.arch.paging.PagedList;
/**
@@ -41,16 +41,19 @@
LiveData<PagedList<Item>> getLivePagedList() {
if (mLivePagedList == null) {
- mLivePagedList = new LivePagedListProvider<Integer, Item>() {
- @Override
- protected DataSource<Integer, Item> createDataSource() {
- ItemDataSource newDataSource = new ItemDataSource();
- synchronized (mDataSourceLock) {
- mDataSource = newDataSource;
- return mDataSource;
- }
- }
- }.create(0, 20);
+ mLivePagedList = new LivePagedListBuilder<Integer, Item>()
+ .setPagingConfig(20)
+ .setDataSourceFactory(new DataSource.Factory<Integer, Item>() {
+ @Override
+ public DataSource<Integer, Item> create() {
+ ItemDataSource newDataSource = new ItemDataSource();
+ synchronized (mDataSourceLock) {
+ mDataSource = newDataSource;
+ return mDataSource;
+ }
+ }
+ })
+ .build();
}
return mLivePagedList;
diff --git a/paging/integration-tests/testapp/src/main/java/android/arch/paging/integration/testapp/PagedListSampleActivity.java b/paging/integration-tests/testapp/src/main/java/android/arch/paging/integration/testapp/PagedListSampleActivity.java
index 5d0117d..f1f233f 100644
--- a/paging/integration-tests/testapp/src/main/java/android/arch/paging/integration/testapp/PagedListSampleActivity.java
+++ b/paging/integration-tests/testapp/src/main/java/android/arch/paging/integration/testapp/PagedListSampleActivity.java
@@ -16,7 +16,6 @@
package android.arch.paging.integration.testapp;
-import android.arch.lifecycle.LifecycleRegistry;
import android.arch.lifecycle.Observer;
import android.arch.lifecycle.ViewModelProviders;
import android.arch.paging.PagedList;
@@ -28,7 +27,7 @@
import android.widget.Button;
/**
- * Sample NullPaddedList activity with artificial data source.
+ * Sample PagedList activity with artificial data source.
*/
public class PagedListSampleActivity extends AppCompatActivity {
@@ -56,11 +55,4 @@
}
});
}
-
- private LifecycleRegistry mLifecycleRegistry = new LifecycleRegistry(this);
-
- @Override
- public LifecycleRegistry getLifecycle() {
- return mLifecycleRegistry;
- }
}
diff --git a/paging/runtime/build.gradle b/paging/runtime/build.gradle
index 0ee0c77..c318c65 100644
--- a/paging/runtime/build.gradle
+++ b/paging/runtime/build.gradle
@@ -18,6 +18,7 @@
import android.support.SupportLibraryExtension
apply plugin: android.support.FlatfootAndroidLibraryPlugin
+apply plugin: 'kotlin-android'
android {
compileSdkVersion tools.current_sdk
@@ -49,10 +50,12 @@
androidTestImplementation libs.dexmaker_mockito, { exclude group: 'net.bytebuddy' } // DexMaker has it"s own MockMaker
androidTestImplementation libs.test_runner, { exclude module: 'support-annotations' }
androidTestImplementation libs.espresso_core, { exclude module: 'support-annotations' }
+ androidTestImplementation libs.kotlin.stdlib
}
createAndroidCheckstyle(project)
+createKotlinCheckstyle(project)
android.libraryVariants.all { variant ->
def name = variant.buildType.name
diff --git a/paging/runtime/src/androidTest/java/android/arch/paging/ContiguousDiffHelperTest.java b/paging/runtime/src/androidTest/java/android/arch/paging/ContiguousDiffHelperTest.java
deleted file mode 100644
index 4f221b3..0000000
--- a/paging/runtime/src/androidTest/java/android/arch/paging/ContiguousDiffHelperTest.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.arch.paging;
-
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyNoMoreInteractions;
-import static org.mockito.Mockito.verifyZeroInteractions;
-
-import android.support.annotation.NonNull;
-import android.support.test.filters.SmallTest;
-import android.support.v7.recyclerview.extensions.DiffCallback;
-import android.support.v7.util.DiffUtil;
-import android.support.v7.util.ListUpdateCallback;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-import org.mockito.Mockito;
-
-@SmallTest
-@RunWith(JUnit4.class)
-public class ContiguousDiffHelperTest {
- private interface CallbackValidator {
- void validate(ListUpdateCallback callback);
- }
-
- private static final DiffCallback<String> DIFF_CALLBACK = new DiffCallback<String>() {
- @Override
- public boolean areItemsTheSame(@NonNull String oldItem, @NonNull String newItem) {
- // first char means same item
- return oldItem.charAt(0) == newItem.charAt(0);
- }
-
- @Override
- public boolean areContentsTheSame(@NonNull String oldItem, @NonNull String newItem) {
- return oldItem.equals(newItem);
- }
- };
-
- private void validateTwoListDiff(StringPagedList oldList, StringPagedList newList,
- CallbackValidator callbackValidator) {
- DiffUtil.DiffResult diffResult = ContiguousDiffHelper.computeDiff(oldList, newList,
- DIFF_CALLBACK, false);
-
- ListUpdateCallback listUpdateCallback = Mockito.mock(ListUpdateCallback.class);
- ContiguousDiffHelper.dispatchDiff(listUpdateCallback, oldList, newList, diffResult);
-
- callbackValidator.validate(listUpdateCallback);
- }
-
- @Test
- public void sameListNoUpdates() {
- validateTwoListDiff(
- new StringPagedList(5, 5, "a", "b", "c"),
- new StringPagedList(5, 5, "a", "b", "c"),
- new CallbackValidator() {
- @Override
- public void validate(ListUpdateCallback callback) {
- verifyZeroInteractions(callback);
- }
- }
- );
- }
-
- @Test
- public void appendFill() {
- validateTwoListDiff(
- new StringPagedList(5, 5, "a", "b"),
- new StringPagedList(5, 4, "a", "b", "c"),
- new CallbackValidator() {
- @Override
- public void validate(ListUpdateCallback callback) {
- verify(callback).onRemoved(11, 1);
- verify(callback).onInserted(7, 1);
- // NOTE: ideally would be onChanged(7, 1, null)
- verifyNoMoreInteractions(callback);
- }
- }
- );
- }
-
- @Test
- public void prependFill() {
- validateTwoListDiff(
- new StringPagedList(5, 5, "b", "c"),
- new StringPagedList(4, 5, "a", "b", "c"),
- new CallbackValidator() {
- @Override
- public void validate(ListUpdateCallback callback) {
- verify(callback).onRemoved(0, 1);
- verify(callback).onInserted(4, 1);
- //NOTE: ideally would be onChanged(4, 1, null);
- verifyNoMoreInteractions(callback);
- }
- }
- );
- }
-
- @Test
- public void change() {
- validateTwoListDiff(
- new StringPagedList(5, 5, "a1", "b1", "c1"),
- new StringPagedList(5, 5, "a2", "b1", "c2"),
- new CallbackValidator() {
- @Override
- public void validate(ListUpdateCallback callback) {
- verify(callback).onChanged(5, 1, null);
- verify(callback).onChanged(7, 1, null);
- verifyNoMoreInteractions(callback);
- }
- }
- );
- }
-}
diff --git a/paging/runtime/src/androidTest/java/android/arch/paging/PagedListAdapterHelperTest.java b/paging/runtime/src/androidTest/java/android/arch/paging/PagedListAdapterHelperTest.java
deleted file mode 100644
index 3518540..0000000
--- a/paging/runtime/src/androidTest/java/android/arch/paging/PagedListAdapterHelperTest.java
+++ /dev/null
@@ -1,308 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.arch.paging;
-
-import static junit.framework.Assert.assertEquals;
-import static junit.framework.Assert.assertFalse;
-import static junit.framework.Assert.assertNotNull;
-import static junit.framework.Assert.assertNull;
-import static junit.framework.Assert.assertTrue;
-
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyNoMoreInteractions;
-import static org.mockito.Mockito.verifyZeroInteractions;
-
-import android.support.annotation.NonNull;
-import android.support.test.filters.SmallTest;
-import android.support.v7.recyclerview.extensions.DiffCallback;
-import android.support.v7.recyclerview.extensions.ListAdapterConfig;
-import android.support.v7.util.ListUpdateCallback;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-
-import java.util.ArrayList;
-import java.util.List;
-
-@SmallTest
-@RunWith(JUnit4.class)
-public class PagedListAdapterHelperTest {
- private TestExecutor mMainThread = new TestExecutor();
- private TestExecutor mDiffThread = new TestExecutor();
- private TestExecutor mPageLoadingThread = new TestExecutor();
-
- private static final ArrayList<String> ALPHABET_LIST = new ArrayList<>();
- static {
- for (int i = 0; i < 26; i++) {
- ALPHABET_LIST.add("" + 'a' + i);
- }
- }
-
- private static final DiffCallback<String> STRING_DIFF_CALLBACK = new DiffCallback<String>() {
- @Override
- public boolean areItemsTheSame(@NonNull String oldItem, @NonNull String newItem) {
- return oldItem.equals(newItem);
- }
-
- @Override
- public boolean areContentsTheSame(@NonNull String oldItem, @NonNull String newItem) {
- return oldItem.equals(newItem);
- }
- };
-
- private static final ListUpdateCallback IGNORE_CALLBACK = new ListUpdateCallback() {
- @Override
- public void onInserted(int position, int count) {
- }
-
- @Override
- public void onRemoved(int position, int count) {
- }
-
- @Override
- public void onMoved(int fromPosition, int toPosition) {
- }
-
- @Override
- public void onChanged(int position, int count, Object payload) {
- }
- };
-
-
- private <T> PagedListAdapterHelper<T> createHelper(
- ListUpdateCallback listUpdateCallback, DiffCallback<T> diffCallback) {
- return new PagedListAdapterHelper<T>(listUpdateCallback,
- new ListAdapterConfig.Builder<T>()
- .setDiffCallback(diffCallback)
- .setMainThreadExecutor(mMainThread)
- .setBackgroundThreadExecutor(mDiffThread)
- .build());
- }
-
- private <V> PagedList<V> createPagedListFromListAndPos(
- PagedList.Config config, List<V> data, int initialKey) {
- return new PagedList.Builder<Integer, V>()
- .setInitialKey(initialKey)
- .setConfig(config)
- .setMainThreadExecutor(mMainThread)
- .setBackgroundThreadExecutor(mPageLoadingThread)
- .setDataSource(new ListDataSource<>(data))
- .build();
- }
-
- @Test
- public void initialState() {
- ListUpdateCallback callback = mock(ListUpdateCallback.class);
- PagedListAdapterHelper<String> helper = createHelper(callback, STRING_DIFF_CALLBACK);
- assertEquals(null, helper.getCurrentList());
- assertEquals(0, helper.getItemCount());
- verifyZeroInteractions(callback);
- }
-
- @Test
- public void setFullList() {
- ListUpdateCallback callback = mock(ListUpdateCallback.class);
- PagedListAdapterHelper<String> helper = createHelper(callback, STRING_DIFF_CALLBACK);
- helper.setList(new StringPagedList(0, 0, "a", "b"));
-
- assertEquals(2, helper.getItemCount());
- assertEquals("a", helper.getItem(0));
- assertEquals("b", helper.getItem(1));
-
- verify(callback).onInserted(0, 2);
- verifyNoMoreInteractions(callback);
- drain();
- verifyNoMoreInteractions(callback);
- }
-
- @Test(expected = IndexOutOfBoundsException.class)
- public void getEmpty() {
- PagedListAdapterHelper<String> helper = createHelper(IGNORE_CALLBACK, STRING_DIFF_CALLBACK);
- helper.getItem(0);
- }
-
- @Test(expected = IndexOutOfBoundsException.class)
- public void getNegative() {
- PagedListAdapterHelper<String> helper = createHelper(IGNORE_CALLBACK, STRING_DIFF_CALLBACK);
- helper.setList(new StringPagedList(0, 0, "a", "b"));
- helper.getItem(-1);
- }
-
- @Test(expected = IndexOutOfBoundsException.class)
- public void getPastEnd() {
- PagedListAdapterHelper<String> helper = createHelper(IGNORE_CALLBACK, STRING_DIFF_CALLBACK);
- helper.setList(new StringPagedList(0, 0, "a", "b"));
- helper.getItem(2);
- }
-
- @Test
- public void simpleStatic() {
- ListUpdateCallback callback = mock(ListUpdateCallback.class);
- PagedListAdapterHelper<String> helper = createHelper(callback, STRING_DIFF_CALLBACK);
-
- assertEquals(0, helper.getItemCount());
-
- helper.setList(new StringPagedList(2, 2, "a", "b"));
-
- verify(callback).onInserted(0, 6);
- verifyNoMoreInteractions(callback);
- assertEquals(6, helper.getItemCount());
-
- assertNull(helper.getItem(0));
- assertNull(helper.getItem(1));
- assertEquals("a", helper.getItem(2));
- assertEquals("b", helper.getItem(3));
- assertNull(helper.getItem(4));
- assertNull(helper.getItem(5));
- }
-
- @Test
- public void pagingInContent() {
- PagedList.Config config = new PagedList.Config.Builder()
- .setInitialLoadSizeHint(4)
- .setPageSize(2)
- .setPrefetchDistance(2)
- .build();
-
- final ListUpdateCallback callback = mock(ListUpdateCallback.class);
- PagedListAdapterHelper<String> helper = createHelper(callback, STRING_DIFF_CALLBACK);
-
- helper.setList(createPagedListFromListAndPos(config, ALPHABET_LIST, 2));
- verify(callback).onInserted(0, ALPHABET_LIST.size());
- verifyNoMoreInteractions(callback);
- drain();
- verifyNoMoreInteractions(callback);
-
- // get without triggering prefetch...
- helper.getItem(1);
- verifyNoMoreInteractions(callback);
- drain();
- verifyNoMoreInteractions(callback);
-
- // get triggering prefetch...
- helper.getItem(2);
- verifyNoMoreInteractions(callback);
- drain();
- verify(callback).onChanged(4, 2, null);
- verifyNoMoreInteractions(callback);
-
- // get with no data loaded nearby...
- helper.getItem(12);
- verifyNoMoreInteractions(callback);
- drain();
- verify(callback).onChanged(10, 2, null);
- verify(callback).onChanged(12, 2, null);
- verify(callback).onChanged(14, 2, null);
- verifyNoMoreInteractions(callback);
-
- // finally, clear
- helper.setList(null);
- verify(callback).onRemoved(0, 26);
- drain();
- verifyNoMoreInteractions(callback);
- }
-
- @Test
- public void simpleSwap() {
- // Page size large enough to load
- PagedList.Config config = new PagedList.Config.Builder()
- .setPageSize(50)
- .build();
-
- final ListUpdateCallback callback = mock(ListUpdateCallback.class);
- PagedListAdapterHelper<String> helper = createHelper(callback, STRING_DIFF_CALLBACK);
-
- // initial list missing one item (immediate)
- helper.setList(createPagedListFromListAndPos(config, ALPHABET_LIST.subList(0, 25), 0));
- verify(callback).onInserted(0, 25);
- verifyNoMoreInteractions(callback);
- assertEquals(helper.getItemCount(), 25);
- drain();
- verifyNoMoreInteractions(callback);
-
- // pass second list with full data
- helper.setList(createPagedListFromListAndPos(config, ALPHABET_LIST, 0));
- verifyNoMoreInteractions(callback);
- drain();
- verify(callback).onInserted(25, 1);
- verifyNoMoreInteractions(callback);
- assertEquals(helper.getItemCount(), 26);
-
- // finally, clear (immediate)
- helper.setList(null);
- verify(callback).onRemoved(0, 26);
- verifyNoMoreInteractions(callback);
- drain();
- verifyNoMoreInteractions(callback);
- }
-
- @Test
- public void newPageWhileDiffing() {
- PagedList.Config config = new PagedList.Config.Builder()
- .setInitialLoadSizeHint(4)
- .setPageSize(2)
- .setPrefetchDistance(2)
- .build();
-
- final ListUpdateCallback callback = mock(ListUpdateCallback.class);
- PagedListAdapterHelper<String> helper = createHelper(callback, STRING_DIFF_CALLBACK);
-
- helper.setList(createPagedListFromListAndPos(config, ALPHABET_LIST, 2));
- verify(callback).onInserted(0, ALPHABET_LIST.size());
- verifyNoMoreInteractions(callback);
- drain();
- verifyNoMoreInteractions(callback);
- assertNotNull(helper.getCurrentList());
- assertFalse(helper.getCurrentList().isImmutable());
-
- // trigger page loading
- helper.getItem(10);
- helper.setList(createPagedListFromListAndPos(config, ALPHABET_LIST, 2));
- verifyNoMoreInteractions(callback);
-
- // drain page fetching, but list became immutable, page will be ignored
- drainExceptDiffThread();
- verifyNoMoreInteractions(callback);
- assertNotNull(helper.getCurrentList());
- assertTrue(helper.getCurrentList().isImmutable());
-
- // finally full drain, which signals nothing, since 1st pagedlist == 2nd pagedlist
- drain();
- verifyNoMoreInteractions(callback);
- assertNotNull(helper.getCurrentList());
- assertFalse(helper.getCurrentList().isImmutable());
- }
-
- private void drainExceptDiffThread() {
- boolean executed;
- do {
- executed = mPageLoadingThread.executeAll();
- executed |= mMainThread.executeAll();
- } while (executed);
- }
-
- private void drain() {
- boolean executed;
- do {
- executed = mPageLoadingThread.executeAll();
- executed |= mDiffThread.executeAll();
- executed |= mMainThread.executeAll();
- } while (executed);
- }
-}
diff --git a/paging/runtime/src/androidTest/java/android/arch/paging/PagedListAdapterHelperTest.kt b/paging/runtime/src/androidTest/java/android/arch/paging/PagedListAdapterHelperTest.kt
new file mode 100644
index 0000000..735a61f
--- /dev/null
+++ b/paging/runtime/src/androidTest/java/android/arch/paging/PagedListAdapterHelperTest.kt
@@ -0,0 +1,342 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.arch.paging
+
+import android.support.test.filters.SmallTest
+import android.support.v7.recyclerview.extensions.DiffCallback
+import android.support.v7.recyclerview.extensions.ListAdapterConfig
+import android.support.v7.util.ListUpdateCallback
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertNotNull
+import org.junit.Assert.assertNull
+import org.junit.Assert.assertTrue
+import org.junit.Assert.fail
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+import org.mockito.Mockito.mock
+import org.mockito.Mockito.verify
+import org.mockito.Mockito.verifyNoMoreInteractions
+import org.mockito.Mockito.verifyZeroInteractions
+
+@SmallTest
+@RunWith(JUnit4::class)
+class PagedListAdapterHelperTest {
+ private val mMainThread = TestExecutor()
+ private val mDiffThread = TestExecutor()
+ private val mPageLoadingThread = TestExecutor()
+
+
+ private fun <T> createHelper(
+ listUpdateCallback: ListUpdateCallback, diffCallback: DiffCallback<T>): PagedListAdapterHelper<T> {
+ return PagedListAdapterHelper(listUpdateCallback,
+ ListAdapterConfig.Builder<T>()
+ .setDiffCallback(diffCallback)
+ .setMainThreadExecutor(mMainThread)
+ .setBackgroundThreadExecutor(mDiffThread)
+ .build())
+ }
+
+ private fun <V> createPagedListFromListAndPos(
+ config: PagedList.Config, data: List<V>, initialKey: Int): PagedList<V> {
+ return PagedList.Builder<Int, V>()
+ .setInitialKey(initialKey)
+ .setConfig(config)
+ .setMainThreadExecutor(mMainThread)
+ .setBackgroundThreadExecutor(mPageLoadingThread)
+ .setDataSource(ListDataSource(data))
+ .build()
+ }
+
+ @Test
+ fun initialState() {
+ val callback = mock(ListUpdateCallback::class.java)
+ val helper = createHelper(callback, STRING_DIFF_CALLBACK)
+ assertEquals(null, helper.currentList)
+ assertEquals(0, helper.itemCount)
+ verifyZeroInteractions(callback)
+ }
+
+ @Test
+ fun setFullList() {
+ val callback = mock(ListUpdateCallback::class.java)
+ val helper = createHelper(callback, STRING_DIFF_CALLBACK)
+ helper.setList(StringPagedList(0, 0, "a", "b"))
+
+ assertEquals(2, helper.itemCount)
+ assertEquals("a", helper.getItem(0))
+ assertEquals("b", helper.getItem(1))
+
+ verify(callback).onInserted(0, 2)
+ verifyNoMoreInteractions(callback)
+ drain()
+ verifyNoMoreInteractions(callback)
+ }
+
+ @Test(expected = IndexOutOfBoundsException::class)
+ fun getEmpty() {
+ val helper = createHelper(IGNORE_CALLBACK, STRING_DIFF_CALLBACK)
+ helper.getItem(0)
+ }
+
+ @Test(expected = IndexOutOfBoundsException::class)
+ fun getNegative() {
+ val helper = createHelper(IGNORE_CALLBACK, STRING_DIFF_CALLBACK)
+ helper.setList(StringPagedList(0, 0, "a", "b"))
+ helper.getItem(-1)
+ }
+
+ @Test(expected = IndexOutOfBoundsException::class)
+ fun getPastEnd() {
+ val helper = createHelper(IGNORE_CALLBACK, STRING_DIFF_CALLBACK)
+ helper.setList(StringPagedList(0, 0, "a", "b"))
+ helper.getItem(2)
+ }
+
+ @Test
+ fun simpleStatic() {
+ val callback = mock(ListUpdateCallback::class.java)
+ val helper = createHelper(callback, STRING_DIFF_CALLBACK)
+
+ assertEquals(0, helper.itemCount)
+
+ helper.setList(StringPagedList(2, 2, "a", "b"))
+
+ verify(callback).onInserted(0, 6)
+ verifyNoMoreInteractions(callback)
+ assertEquals(6, helper.itemCount)
+
+ assertNull(helper.getItem(0))
+ assertNull(helper.getItem(1))
+ assertEquals("a", helper.getItem(2))
+ assertEquals("b", helper.getItem(3))
+ assertNull(helper.getItem(4))
+ assertNull(helper.getItem(5))
+ }
+
+ @Test
+ fun pagingInContent() {
+ val config = PagedList.Config.Builder()
+ .setInitialLoadSizeHint(4)
+ .setPageSize(2)
+ .setPrefetchDistance(2)
+ .build()
+
+ val callback = mock(ListUpdateCallback::class.java)
+ val helper = createHelper(callback, STRING_DIFF_CALLBACK)
+
+ helper.setList(createPagedListFromListAndPos(config, ALPHABET_LIST, 2))
+ verify(callback).onInserted(0, ALPHABET_LIST.size)
+ verifyNoMoreInteractions(callback)
+ drain()
+ verifyNoMoreInteractions(callback)
+
+ // get without triggering prefetch...
+ helper.getItem(1)
+ verifyNoMoreInteractions(callback)
+ drain()
+ verifyNoMoreInteractions(callback)
+
+ // get triggering prefetch...
+ helper.getItem(2)
+ verifyNoMoreInteractions(callback)
+ drain()
+ verify(callback).onChanged(4, 2, null)
+ verifyNoMoreInteractions(callback)
+
+ // get with no data loaded nearby...
+ helper.getItem(12)
+ verifyNoMoreInteractions(callback)
+ drain()
+ verify(callback).onChanged(10, 2, null)
+ verify(callback).onChanged(12, 2, null)
+ verify(callback).onChanged(14, 2, null)
+ verifyNoMoreInteractions(callback)
+
+ // finally, clear
+ helper.setList(null)
+ verify(callback).onRemoved(0, 26)
+ drain()
+ verifyNoMoreInteractions(callback)
+ }
+
+ @Test
+ fun simpleSwap() {
+ // Page size large enough to load
+ val config = PagedList.Config.Builder()
+ .setPageSize(50)
+ .build()
+
+ val callback = mock(ListUpdateCallback::class.java)
+ val helper = createHelper(callback, STRING_DIFF_CALLBACK)
+
+ // initial list missing one item (immediate)
+ helper.setList(createPagedListFromListAndPos(config, ALPHABET_LIST.subList(0, 25), 0))
+ verify(callback).onInserted(0, 25)
+ verifyNoMoreInteractions(callback)
+ assertEquals(helper.itemCount, 25)
+ drain()
+ verifyNoMoreInteractions(callback)
+
+ // pass second list with full data
+ helper.setList(createPagedListFromListAndPos(config, ALPHABET_LIST, 0))
+ verifyNoMoreInteractions(callback)
+ drain()
+ verify(callback).onInserted(25, 1)
+ verifyNoMoreInteractions(callback)
+ assertEquals(helper.itemCount, 26)
+
+ // finally, clear (immediate)
+ helper.setList(null)
+ verify(callback).onRemoved(0, 26)
+ verifyNoMoreInteractions(callback)
+ drain()
+ verifyNoMoreInteractions(callback)
+ }
+
+ @Test
+ fun newPageWhileDiffing() {
+ val config = PagedList.Config.Builder()
+ .setInitialLoadSizeHint(4)
+ .setPageSize(2)
+ .setPrefetchDistance(2)
+ .build()
+
+ val callback = mock(ListUpdateCallback::class.java)
+ val helper = createHelper(callback, STRING_DIFF_CALLBACK)
+
+ helper.setList(createPagedListFromListAndPos(config, ALPHABET_LIST, 2))
+ verify(callback).onInserted(0, ALPHABET_LIST.size)
+ verifyNoMoreInteractions(callback)
+ drain()
+ verifyNoMoreInteractions(callback)
+ assertNotNull(helper.currentList)
+ assertFalse(helper.currentList!!.isImmutable)
+
+ // trigger page loading
+ helper.getItem(10)
+ helper.setList(createPagedListFromListAndPos(config, ALPHABET_LIST, 2))
+ verifyNoMoreInteractions(callback)
+
+ // drain page fetching, but list became immutable, page will be ignored
+ drainExceptDiffThread()
+ verifyNoMoreInteractions(callback)
+ assertNotNull(helper.currentList)
+ assertTrue(helper.currentList!!.isImmutable)
+
+ // finally full drain, which signals nothing, since 1st pagedlist == 2nd pagedlist
+ drain()
+ verifyNoMoreInteractions(callback)
+ assertNotNull(helper.currentList)
+ assertFalse(helper.currentList!!.isImmutable)
+ }
+
+ @Test
+ fun itemCountUpdatedBeforeListUpdateCallbacks() {
+ // verify that itemCount is updated in the helper before dispatching ListUpdateCallbacks
+
+ val expectedCount = intArrayOf(0)
+ // provides access to helper, which must be constructed after callback
+ val helperAccessor = arrayOf<PagedListAdapterHelper<*>?>(null)
+
+ val callback = object : ListUpdateCallback {
+ override fun onInserted(position: Int, count: Int) {
+ assertEquals(expectedCount[0], helperAccessor[0]!!.itemCount)
+ }
+
+ override fun onRemoved(position: Int, count: Int) {
+ assertEquals(expectedCount[0], helperAccessor[0]!!.itemCount)
+ }
+
+ override fun onMoved(fromPosition: Int, toPosition: Int) {
+ fail("not expected")
+ }
+
+ override fun onChanged(position: Int, count: Int, payload: Any) {
+ fail("not expected")
+ }
+ }
+
+ val helper = createHelper(callback, STRING_DIFF_CALLBACK)
+ helperAccessor[0] = helper
+
+ val config = PagedList.Config.Builder()
+ .setPageSize(20)
+ .build()
+
+ // in the fast-add case...
+ expectedCount[0] = 5
+ assertEquals(0, helper.itemCount)
+ helper.setList(createPagedListFromListAndPos(config, ALPHABET_LIST.subList(0, 5), 0))
+ assertEquals(5, helper.itemCount)
+
+ // in the slow, diff on BG thread case...
+ expectedCount[0] = 10
+ assertEquals(5, helper.itemCount)
+ helper.setList(createPagedListFromListAndPos(config, ALPHABET_LIST.subList(0, 10), 0))
+ drain()
+ assertEquals(10, helper.itemCount)
+
+ // and in the fast-remove case
+ expectedCount[0] = 0
+ assertEquals(10, helper.itemCount)
+ helper.setList(null)
+ assertEquals(0, helper.itemCount)
+ }
+
+ private fun drainExceptDiffThread() {
+ var executed: Boolean
+ do {
+ executed = mPageLoadingThread.executeAll()
+ executed = mMainThread.executeAll() or executed
+ } while (executed)
+ }
+
+ private fun drain() {
+ var executed: Boolean
+ do {
+ executed = mPageLoadingThread.executeAll()
+ executed = mDiffThread.executeAll() or executed
+ executed = mMainThread.executeAll() or executed
+ } while (executed)
+ }
+
+ companion object {
+ private val ALPHABET_LIST = List(26) { "" + 'a' + it }
+
+ private val STRING_DIFF_CALLBACK = object : DiffCallback<String>() {
+ override fun areItemsTheSame(oldItem: String, newItem: String): Boolean {
+ return oldItem == newItem
+ }
+
+ override fun areContentsTheSame(oldItem: String, newItem: String): Boolean {
+ return oldItem == newItem
+ }
+ }
+
+ private val IGNORE_CALLBACK = object : ListUpdateCallback {
+ override fun onInserted(position: Int, count: Int) {}
+
+ override fun onRemoved(position: Int, count: Int) {}
+
+ override fun onMoved(fromPosition: Int, toPosition: Int) {}
+
+ override fun onChanged(position: Int, count: Int, payload: Any) {}
+ }
+ }
+}
diff --git a/paging/runtime/src/androidTest/java/android/arch/paging/PagedStorageDiffHelperTest.kt b/paging/runtime/src/androidTest/java/android/arch/paging/PagedStorageDiffHelperTest.kt
new file mode 100644
index 0000000..64501f7
--- /dev/null
+++ b/paging/runtime/src/androidTest/java/android/arch/paging/PagedStorageDiffHelperTest.kt
@@ -0,0 +1,127 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.arch.paging
+
+import android.support.test.filters.SmallTest
+import android.support.v7.recyclerview.extensions.DiffCallback
+import android.support.v7.util.ListUpdateCallback
+import junit.framework.Assert.assertEquals
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+import org.mockito.Mockito.mock
+import org.mockito.Mockito.verify
+import org.mockito.Mockito.verifyNoMoreInteractions
+import org.mockito.Mockito.verifyZeroInteractions
+
+@SmallTest
+@RunWith(JUnit4::class)
+class PagedStorageDiffHelperTest {
+
+ @Test
+ fun sameListNoUpdates() {
+ validateTwoListDiff(
+ PagedStorage(5, createPage("a", "b", "c"), 5),
+ PagedStorage(5, createPage("a", "b", "c"), 5)) {
+ verifyZeroInteractions(it)
+ }
+ }
+
+ @Test
+ fun sameListNoUpdatesPlaceholder() {
+ val storageNoPlaceholder = PagedStorage(0, createPage("a", "b", "c"), 10)
+
+ val storageWithPlaceholder = PagedStorage(0, createPage("a", "b", "c"), 10)
+ storageWithPlaceholder.allocatePlaceholders(3, 0, 3,
+ /* ignored */ mock(PagedStorage.Callback::class.java))
+
+ // even though one has placeholders, and null counts are different...
+ assertEquals(10, storageNoPlaceholder.trailingNullCount)
+ assertEquals(7, storageWithPlaceholder.trailingNullCount)
+
+ // ... should be no interactions, since content still same
+ validateTwoListDiff(
+ storageNoPlaceholder,
+ storageWithPlaceholder) {
+ verifyZeroInteractions(it)
+ }
+ }
+
+ @Test
+ fun appendFill() {
+ validateTwoListDiff(
+ PagedStorage(5, createPage("a", "b"), 5),
+ PagedStorage(5, createPage("a", "b", "c"), 4)) {
+ verify(it).onRemoved(11, 1)
+ verify(it).onInserted(7, 1)
+ // NOTE: ideally would be onChanged(7, 1, null)
+ verifyNoMoreInteractions(it)
+ }
+ }
+
+ @Test
+ fun prependFill() {
+ validateTwoListDiff(
+ PagedStorage(5, createPage("b", "c"), 5),
+ PagedStorage(4, createPage("a", "b", "c"), 5)) {
+ verify(it).onRemoved(0, 1)
+ verify(it).onInserted(4, 1)
+ //NOTE: ideally would be onChanged(4, 1, null);
+ verifyNoMoreInteractions(it)
+ }
+ }
+
+ @Test
+ fun change() {
+ validateTwoListDiff(
+ PagedStorage(5, createPage("a1", "b1", "c1"), 5),
+ PagedStorage(5, createPage("a2", "b1", "c2"), 5)) {
+ verify(it).onChanged(5, 1, null)
+ verify(it).onChanged(7, 1, null)
+ verifyNoMoreInteractions(it)
+ }
+ }
+
+ companion object {
+ private val DIFF_CALLBACK = object : DiffCallback<String>() {
+ override fun areItemsTheSame(oldItem: String, newItem: String): Boolean {
+ // first char means same item
+ return oldItem[0] == newItem[0]
+ }
+
+ override fun areContentsTheSame(oldItem: String, newItem: String): Boolean {
+ return oldItem == newItem
+ }
+ }
+
+ private fun createPage(vararg items: String): Page<Int, String> {
+ return Page(items.toList())
+ }
+
+ private fun validateTwoListDiff(oldList: PagedStorage<*, String>,
+ newList: PagedStorage<*, String>,
+ validator: (callback: ListUpdateCallback) -> Unit) {
+ val diffResult = PagedStorageDiffHelper.computeDiff(
+ oldList, newList, DIFF_CALLBACK)
+
+ val listUpdateCallback = mock(ListUpdateCallback::class.java)
+ PagedStorageDiffHelper.dispatchDiff(listUpdateCallback, oldList, newList, diffResult)
+
+ validator(listUpdateCallback)
+ }
+ }
+}
diff --git a/paging/runtime/src/androidTest/java/android/arch/paging/StringPagedList.kt b/paging/runtime/src/androidTest/java/android/arch/paging/StringPagedList.kt
new file mode 100644
index 0000000..c2e5ec7
--- /dev/null
+++ b/paging/runtime/src/androidTest/java/android/arch/paging/StringPagedList.kt
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.arch.paging
+
+class StringPagedList constructor(leadingNulls: Int, trailingNulls: Int, vararg items: String)
+ : PagedList<String>(PagedStorage<Int, String>(), TestExecutor(), TestExecutor(), null,
+ PagedList.Config.Builder().setPageSize(1).build()), PagedStorage.Callback {
+ init {
+ @Suppress("UNCHECKED_CAST")
+ val keyedStorage = mStorage as PagedStorage<Int, String>
+ keyedStorage.init(leadingNulls,
+ Page<Int, String>(null, items.toList(), null),
+ trailingNulls,
+ 0,
+ this)
+ }
+
+ internal override fun isContiguous(): Boolean {
+ return true
+ }
+
+ override fun getLastKey(): Any? {
+ return null
+ }
+
+ override fun dispatchUpdatesSinceSnapshot(storageSnapshot: PagedList<String>,
+ callback: PagedList.Callback) {
+ }
+
+ override fun loadAroundInternal(index: Int) {}
+
+ override fun onInitialized(count: Int) {}
+
+ override fun onPagePrepended(leadingNulls: Int, changed: Int, added: Int) {}
+
+ override fun onPageAppended(endPosition: Int, changed: Int, added: Int) {}
+
+ override fun onPagePlaceholderInserted(pageIndex: Int) {}
+
+ override fun onPageInserted(start: Int, count: Int) {}
+}
diff --git a/paging/runtime/src/androidTest/java/android/arch/paging/TestExecutor.java b/paging/runtime/src/androidTest/java/android/arch/paging/TestExecutor.java
deleted file mode 100644
index 976f7df..0000000
--- a/paging/runtime/src/androidTest/java/android/arch/paging/TestExecutor.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.arch.paging;
-
-import android.support.annotation.NonNull;
-
-import java.util.LinkedList;
-import java.util.Queue;
-import java.util.concurrent.Executor;
-
-public class TestExecutor implements Executor {
- private Queue<Runnable> mTasks = new LinkedList<>();
-
- @Override
- public void execute(@NonNull Runnable command) {
- mTasks.add(command);
- }
-
- public boolean executeAll() {
- boolean consumed = !mTasks.isEmpty();
- Runnable task;
- while ((task = mTasks.poll()) != null) {
- task.run();
- }
- return consumed;
- }
-}
diff --git a/paging/runtime/src/androidTest/java/android/arch/paging/TestExecutor.kt b/paging/runtime/src/androidTest/java/android/arch/paging/TestExecutor.kt
new file mode 100644
index 0000000..34e9787
--- /dev/null
+++ b/paging/runtime/src/androidTest/java/android/arch/paging/TestExecutor.kt
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.arch.paging
+
+import java.util.LinkedList
+import java.util.concurrent.Executor
+
+class TestExecutor : Executor {
+ private val mTasks = LinkedList<Runnable>()
+
+ override fun execute(command: Runnable) {
+ mTasks.add(command)
+ }
+
+ fun executeAll(): Boolean {
+ val consumed = !mTasks.isEmpty()
+
+ var task = mTasks.poll()
+ while (task != null) {
+ task.run()
+ task = mTasks.poll()
+ }
+ return consumed
+ }
+}
\ No newline at end of file
diff --git a/paging/runtime/src/androidTest/java/android/support/v7/recyclerview/extensions/ListAdapterHelperTest.java b/paging/runtime/src/androidTest/java/android/support/v7/recyclerview/extensions/ListAdapterHelperTest.java
deleted file mode 100644
index aab7417..0000000
--- a/paging/runtime/src/androidTest/java/android/support/v7/recyclerview/extensions/ListAdapterHelperTest.java
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.v7.recyclerview.extensions;
-
-import static org.junit.Assert.assertEquals;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyNoMoreInteractions;
-import static org.mockito.Mockito.verifyZeroInteractions;
-
-import android.arch.paging.TestExecutor;
-import android.support.annotation.NonNull;
-import android.support.test.filters.SmallTest;
-import android.support.v7.util.ListUpdateCallback;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-
-import java.util.Arrays;
-
-@SmallTest
-@RunWith(JUnit4.class)
-public class ListAdapterHelperTest {
- private TestExecutor mMainThread = new TestExecutor();
- private TestExecutor mBackgroundThread = new TestExecutor();
-
-
- private static final DiffCallback<String> STRING_DIFF_CALLBACK = new DiffCallback<String>() {
- @Override
- public boolean areItemsTheSame(@NonNull String oldItem, @NonNull String newItem) {
- return oldItem.equals(newItem);
- }
-
- @Override
- public boolean areContentsTheSame(@NonNull String oldItem, @NonNull String newItem) {
- return oldItem.equals(newItem);
- }
- };
-
- private static final ListUpdateCallback IGNORE_CALLBACK = new ListUpdateCallback() {
- @Override
- public void onInserted(int position, int count) {
- }
-
- @Override
- public void onRemoved(int position, int count) {
- }
-
- @Override
- public void onMoved(int fromPosition, int toPosition) {
- }
-
- @Override
- public void onChanged(int position, int count, Object payload) {
- }
- };
-
-
- private <T> ListAdapterHelper<T> createHelper(
- ListUpdateCallback listUpdateCallback, DiffCallback<T> diffCallback) {
- return new ListAdapterHelper<T>(listUpdateCallback,
- new ListAdapterConfig.Builder<T>()
- .setDiffCallback(diffCallback)
- .setMainThreadExecutor(mMainThread)
- .setBackgroundThreadExecutor(mBackgroundThread)
- .build());
- }
-
- @Test
- public void initialState() {
- ListUpdateCallback callback = mock(ListUpdateCallback.class);
- ListAdapterHelper<String> helper = createHelper(callback, STRING_DIFF_CALLBACK);
- assertEquals(0, helper.getItemCount());
- verifyZeroInteractions(callback);
- }
-
- @Test(expected = IndexOutOfBoundsException.class)
- public void getEmpty() {
- ListAdapterHelper<String> helper = createHelper(IGNORE_CALLBACK, STRING_DIFF_CALLBACK);
- helper.getItem(0);
- }
-
- @Test(expected = IndexOutOfBoundsException.class)
- public void getNegative() {
- ListAdapterHelper<String> helper = createHelper(IGNORE_CALLBACK, STRING_DIFF_CALLBACK);
- helper.setList(Arrays.asList("a", "b"));
- helper.getItem(-1);
- }
-
- @Test(expected = IndexOutOfBoundsException.class)
- public void getPastEnd() {
- ListAdapterHelper<String> helper = createHelper(IGNORE_CALLBACK, STRING_DIFF_CALLBACK);
- helper.setList(Arrays.asList("a", "b"));
- helper.getItem(2);
- }
-
- @Test
- public void setListSimple() {
- ListUpdateCallback callback = mock(ListUpdateCallback.class);
- ListAdapterHelper<String> helper = createHelper(callback, STRING_DIFF_CALLBACK);
-
- helper.setList(Arrays.asList("a", "b"));
-
- assertEquals(2, helper.getItemCount());
- assertEquals("a", helper.getItem(0));
- assertEquals("b", helper.getItem(1));
-
- verify(callback).onInserted(0, 2);
- verifyNoMoreInteractions(callback);
- drain();
- verifyNoMoreInteractions(callback);
- }
-
- @Test
- public void setListUpdate() {
- ListUpdateCallback callback = mock(ListUpdateCallback.class);
- ListAdapterHelper<String> helper = createHelper(callback, STRING_DIFF_CALLBACK);
-
- // initial list (immediate)
- helper.setList(Arrays.asList("a", "b"));
- verify(callback).onInserted(0, 2);
- verifyNoMoreInteractions(callback);
- drain();
- verifyNoMoreInteractions(callback);
-
- // update (deferred)
- helper.setList(Arrays.asList("a", "b", "c"));
- verifyNoMoreInteractions(callback);
- drain();
- verify(callback).onInserted(2, 1);
- verifyNoMoreInteractions(callback);
-
- // clear (immediate)
- helper.setList(null);
- verify(callback).onRemoved(0, 3);
- verifyNoMoreInteractions(callback);
- drain();
- verifyNoMoreInteractions(callback);
-
- }
-
- private void drain() {
- boolean executed;
- do {
- executed = mBackgroundThread.executeAll();
- executed |= mMainThread.executeAll();
- } while (executed);
- }
-}
diff --git a/paging/runtime/src/androidTest/java/android/support/v7/recyclerview/extensions/ListAdapterHelperTest.kt b/paging/runtime/src/androidTest/java/android/support/v7/recyclerview/extensions/ListAdapterHelperTest.kt
new file mode 100644
index 0000000..4c06f25
--- /dev/null
+++ b/paging/runtime/src/androidTest/java/android/support/v7/recyclerview/extensions/ListAdapterHelperTest.kt
@@ -0,0 +1,149 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v7.recyclerview.extensions
+
+import android.arch.paging.TestExecutor
+import android.support.test.filters.SmallTest
+import android.support.v7.util.ListUpdateCallback
+import org.junit.Assert.assertEquals
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+import org.mockito.Mockito.mock
+import org.mockito.Mockito.verify
+import org.mockito.Mockito.verifyNoMoreInteractions
+import org.mockito.Mockito.verifyZeroInteractions
+
+@SmallTest
+@RunWith(JUnit4::class)
+class ListAdapterHelperTest {
+ private val mMainThread = TestExecutor()
+ private val mBackgroundThread = TestExecutor()
+
+ private fun <T> createHelper(
+ listUpdateCallback: ListUpdateCallback, diffCallback: DiffCallback<T>): ListAdapterHelper<T> {
+ return ListAdapterHelper(listUpdateCallback,
+ ListAdapterConfig.Builder<T>()
+ .setDiffCallback(diffCallback)
+ .setMainThreadExecutor(mMainThread)
+ .setBackgroundThreadExecutor(mBackgroundThread)
+ .build())
+ }
+
+ @Test
+ fun initialState() {
+ val callback = mock(ListUpdateCallback::class.java)
+ val helper = createHelper(callback, STRING_DIFF_CALLBACK)
+ assertEquals(0, helper.itemCount)
+ verifyZeroInteractions(callback)
+ }
+
+ @Test(expected = IndexOutOfBoundsException::class)
+ fun getEmpty() {
+ val helper = createHelper(IGNORE_CALLBACK, STRING_DIFF_CALLBACK)
+ helper.getItem(0)
+ }
+
+ @Test(expected = IndexOutOfBoundsException::class)
+ fun getNegative() {
+ val helper = createHelper(IGNORE_CALLBACK, STRING_DIFF_CALLBACK)
+ helper.setList(listOf("a", "b"))
+ helper.getItem(-1)
+ }
+
+ @Test(expected = IndexOutOfBoundsException::class)
+ fun getPastEnd() {
+ val helper = createHelper(IGNORE_CALLBACK, STRING_DIFF_CALLBACK)
+ helper.setList(listOf("a", "b"))
+ helper.getItem(2)
+ }
+
+ @Test
+ fun setListSimple() {
+ val callback = mock(ListUpdateCallback::class.java)
+ val helper = createHelper(callback, STRING_DIFF_CALLBACK)
+
+ helper.setList(listOf("a", "b"))
+
+ assertEquals(2, helper.itemCount)
+ assertEquals("a", helper.getItem(0))
+ assertEquals("b", helper.getItem(1))
+
+ verify(callback).onInserted(0, 2)
+ verifyNoMoreInteractions(callback)
+ drain()
+ verifyNoMoreInteractions(callback)
+ }
+
+ @Test
+ fun setListUpdate() {
+ val callback = mock(ListUpdateCallback::class.java)
+ val helper = createHelper(callback, STRING_DIFF_CALLBACK)
+
+ // initial list (immediate)
+ helper.setList(listOf("a", "b"))
+ verify(callback).onInserted(0, 2)
+ verifyNoMoreInteractions(callback)
+ drain()
+ verifyNoMoreInteractions(callback)
+
+ // update (deferred)
+ helper.setList(listOf("a", "b", "c"))
+ verifyNoMoreInteractions(callback)
+ drain()
+ verify(callback).onInserted(2, 1)
+ verifyNoMoreInteractions(callback)
+
+ // clear (immediate)
+ helper.setList(null)
+ verify(callback).onRemoved(0, 3)
+ verifyNoMoreInteractions(callback)
+ drain()
+ verifyNoMoreInteractions(callback)
+
+ }
+
+ private fun drain() {
+ var executed: Boolean
+ do {
+ executed = mBackgroundThread.executeAll()
+ executed = mMainThread.executeAll() or executed
+ } while (executed)
+ }
+
+ companion object {
+ private val STRING_DIFF_CALLBACK = object : DiffCallback<String>() {
+ override fun areItemsTheSame(oldItem: String, newItem: String): Boolean {
+ return oldItem == newItem
+ }
+
+ override fun areContentsTheSame(oldItem: String, newItem: String): Boolean {
+ return oldItem == newItem
+ }
+ }
+
+ private val IGNORE_CALLBACK = object : ListUpdateCallback {
+ override fun onInserted(position: Int, count: Int) {}
+
+ override fun onRemoved(position: Int, count: Int) {}
+
+ override fun onMoved(fromPosition: Int, toPosition: Int) {}
+
+ override fun onChanged(position: Int, count: Int, payload: Any) {}
+ }
+ }
+}
diff --git a/paging/runtime/src/main/AndroidManifest.xml b/paging/runtime/src/main/AndroidManifest.xml
index 8bf5de9..dfc4bdf 100644
--- a/paging/runtime/src/main/AndroidManifest.xml
+++ b/paging/runtime/src/main/AndroidManifest.xml
@@ -16,8 +16,4 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.arch.paging.runtime">
- <application>
- <meta-data android:name="android.arch.paging.runtime.VERSION"
- android:value="${version}" />
- </application>
</manifest>
diff --git a/paging/runtime/src/main/java/android/arch/paging/LivePagedListBuilder.java b/paging/runtime/src/main/java/android/arch/paging/LivePagedListBuilder.java
new file mode 100644
index 0000000..ee1810b
--- /dev/null
+++ b/paging/runtime/src/main/java/android/arch/paging/LivePagedListBuilder.java
@@ -0,0 +1,159 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.arch.paging;
+
+import android.arch.core.executor.ArchTaskExecutor;
+import android.arch.lifecycle.ComputableLiveData;
+import android.arch.lifecycle.LiveData;
+import android.support.annotation.AnyThread;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+
+import java.util.concurrent.Executor;
+
+public class LivePagedListBuilder<Key, Value> {
+ private Key mInitialLoadKey;
+ private PagedList.Config mConfig;
+ private DataSource.Factory<Key, Value> mDataSourceFactory;
+ private PagedList.BoundaryCallback mBoundaryCallback;
+ private Executor mMainThreadExecutor;
+ private Executor mBackgroundThreadExecutor;
+
+ @SuppressWarnings("WeakerAccess")
+ @NonNull
+ public LivePagedListBuilder<Key, Value> setInitialLoadKey(@Nullable Key key) {
+ mInitialLoadKey = key;
+ return this;
+ }
+
+ @SuppressWarnings("WeakerAccess")
+ @NonNull
+ public LivePagedListBuilder<Key, Value> setPagingConfig(@NonNull PagedList.Config config) {
+ mConfig = config;
+ return this;
+ }
+
+ @SuppressWarnings("WeakerAccess")
+ @NonNull
+ public LivePagedListBuilder<Key, Value> setPagingConfig(int pageSize) {
+ mConfig = new PagedList.Config.Builder().setPageSize(pageSize).build();
+ return this;
+ }
+
+ @NonNull
+ public LivePagedListBuilder<Key, Value> setDataSourceFactory(
+ @NonNull DataSource.Factory<Key, Value> dataSourceFactory) {
+ mDataSourceFactory = dataSourceFactory;
+ return this;
+ }
+
+ @SuppressWarnings("unused")
+ @NonNull
+ public LivePagedListBuilder<Key, Value> setBoundaryCallback(
+ @Nullable PagedList.BoundaryCallback<Value> boundaryCallback) {
+ mBoundaryCallback = boundaryCallback;
+ return this;
+ }
+
+ @SuppressWarnings("unused")
+ @NonNull
+ public LivePagedListBuilder<Key, Value> setMainThreadExecutor(
+ @NonNull Executor mainThreadExecutor) {
+ mMainThreadExecutor = mainThreadExecutor;
+ return this;
+ }
+
+ @SuppressWarnings("unused")
+ @NonNull
+ public LivePagedListBuilder<Key, Value> setBackgroundThreadExecutor(
+ @NonNull Executor backgroundThreadExecutor) {
+ mBackgroundThreadExecutor = backgroundThreadExecutor;
+ return this;
+ }
+
+ @NonNull
+ public LiveData<PagedList<Value>> build() {
+ if (mConfig == null) {
+ throw new IllegalArgumentException("PagedList.Config must be provided");
+ }
+ if (mDataSourceFactory == null) {
+ throw new IllegalArgumentException("DataSource.Factory must be provided");
+ }
+ if (mMainThreadExecutor == null) {
+ mMainThreadExecutor = ArchTaskExecutor.getMainThreadExecutor();
+ }
+ if (mBackgroundThreadExecutor == null) {
+ mBackgroundThreadExecutor = ArchTaskExecutor.getIOThreadExecutor();
+ }
+
+ return create(mInitialLoadKey, mConfig, mBoundaryCallback, mDataSourceFactory,
+ mMainThreadExecutor, mBackgroundThreadExecutor);
+ }
+
+ @AnyThread
+ @NonNull
+ public static <Key, Value> LiveData<PagedList<Value>> create(
+ @Nullable final Key initialLoadKey,
+ @NonNull final PagedList.Config config,
+ @Nullable final PagedList.BoundaryCallback boundaryCallback,
+ @NonNull final DataSource.Factory<Key, Value> dataSourceFactory,
+ @NonNull final Executor mainThreadExecutor,
+ @NonNull final Executor backgroundThreadExecutor) {
+ return new ComputableLiveData<PagedList<Value>>() {
+ @Nullable
+ private PagedList<Value> mList;
+ @Nullable
+ private DataSource<Key, Value> mDataSource;
+
+ private final DataSource.InvalidatedCallback mCallback =
+ new DataSource.InvalidatedCallback() {
+ @Override
+ public void onInvalidated() {
+ invalidate();
+ }
+ };
+
+ @Override
+ protected PagedList<Value> compute() {
+ @Nullable Key initializeKey = initialLoadKey;
+ if (mList != null) {
+ //noinspection unchecked
+ initializeKey = (Key) mList.getLastKey();
+ }
+
+ do {
+ if (mDataSource != null) {
+ mDataSource.removeInvalidatedCallback(mCallback);
+ }
+
+ mDataSource = dataSourceFactory.create();
+ mDataSource.addInvalidatedCallback(mCallback);
+
+ mList = new PagedList.Builder<Key, Value>()
+ .setDataSource(mDataSource)
+ .setMainThreadExecutor(mainThreadExecutor)
+ .setBackgroundThreadExecutor(backgroundThreadExecutor)
+ .setBoundaryCallback(boundaryCallback)
+ .setConfig(config)
+ .setInitialKey(initializeKey)
+ .build();
+ } while (mList.isDetached());
+ return mList;
+ }
+ }.getLiveData();
+ }
+}
diff --git a/paging/runtime/src/main/java/android/arch/paging/LivePagedListProvider.java b/paging/runtime/src/main/java/android/arch/paging/LivePagedListProvider.java
index 1250aa1..e0a03cb 100644
--- a/paging/runtime/src/main/java/android/arch/paging/LivePagedListProvider.java
+++ b/paging/runtime/src/main/java/android/arch/paging/LivePagedListProvider.java
@@ -16,8 +16,6 @@
package android.arch.paging;
-import android.arch.core.executor.AppToolkitTaskExecutor;
-import android.arch.lifecycle.ComputableLiveData;
import android.arch.lifecycle.LiveData;
import android.support.annotation.AnyThread;
import android.support.annotation.NonNull;
@@ -53,8 +51,23 @@
* @see PagedListAdapter
* @see DataSource
* @see PagedList
+ *
+ * @deprecated To construct a {@code LiveData<PagedList>}, use {@link LivePagedListBuilder}, which
+ * provides the same construction capability with more customization, and better defaults. The role
+ * of DataSource construction has been separated out to {@link DataSource.Factory} to access or
+ * provide a self-invalidating sequence of DataSources. If you were acquiring this from Room, you
+ * can switch to having your Dao return a {@link DataSource.Factory} instead, and create a LiveData
+ * of PagedList with a {@link LivePagedListBuilder}.
*/
-public abstract class LivePagedListProvider<Key, Value> {
+// NOTE: Room 1.0 depends on this class, so it should not be removed
+// until Room switches to using DataSource.Factory directly
+@Deprecated
+public abstract class LivePagedListProvider<Key, Value> implements DataSource.Factory<Key, Value> {
+
+ @Override
+ public DataSource<Key, Value> create() {
+ return createDataSource();
+ }
/**
* Construct a new data source to be wrapped in a new PagedList, which will be returned
@@ -80,10 +93,11 @@
@AnyThread
@NonNull
public LiveData<PagedList<Value>> create(@Nullable Key initialLoadKey, int pageSize) {
- return create(initialLoadKey,
- new PagedList.Config.Builder()
- .setPageSize(pageSize)
- .build());
+ return new LivePagedListBuilder<Key, Value>()
+ .setInitialLoadKey(initialLoadKey)
+ .setPagingConfig(pageSize)
+ .setDataSourceFactory(this)
+ .build();
}
/**
@@ -100,49 +114,12 @@
*/
@AnyThread
@NonNull
- public LiveData<PagedList<Value>> create(@Nullable final Key initialLoadKey,
- final PagedList.Config config) {
- return new ComputableLiveData<PagedList<Value>>() {
- @Nullable
- private PagedList<Value> mList;
- @Nullable
- private DataSource<Key, Value> mDataSource;
-
- private final DataSource.InvalidatedCallback mCallback =
- new DataSource.InvalidatedCallback() {
- @Override
- public void onInvalidated() {
- invalidate();
- }
- };
-
- @Override
- protected PagedList<Value> compute() {
- @Nullable Key initializeKey = initialLoadKey;
- if (mList != null) {
- //noinspection unchecked
- initializeKey = (Key) mList.getLastKey();
- }
-
- do {
- if (mDataSource != null) {
- mDataSource.removeInvalidatedCallback(mCallback);
- }
-
- mDataSource = createDataSource();
- mDataSource.addInvalidatedCallback(mCallback);
-
- mList = new PagedList.Builder<Key, Value>()
- .setDataSource(mDataSource)
- .setMainThreadExecutor(AppToolkitTaskExecutor.getMainThreadExecutor())
- .setBackgroundThreadExecutor(
- AppToolkitTaskExecutor.getIOThreadExecutor())
- .setConfig(config)
- .setInitialKey(initializeKey)
- .build();
- } while (mList.isDetached());
- return mList;
- }
- }.getLiveData();
+ public LiveData<PagedList<Value>> create(@Nullable Key initialLoadKey,
+ @NonNull PagedList.Config config) {
+ return new LivePagedListBuilder<Key, Value>()
+ .setInitialLoadKey(initialLoadKey)
+ .setPagingConfig(config)
+ .setDataSourceFactory(this)
+ .build();
}
}
diff --git a/paging/runtime/src/main/java/android/arch/paging/PagedListAdapter.java b/paging/runtime/src/main/java/android/arch/paging/PagedListAdapter.java
index 93c02ea..89b9c2e 100644
--- a/paging/runtime/src/main/java/android/arch/paging/PagedListAdapter.java
+++ b/paging/runtime/src/main/java/android/arch/paging/PagedListAdapter.java
@@ -113,6 +113,13 @@
public abstract class PagedListAdapter<T, VH extends RecyclerView.ViewHolder>
extends RecyclerView.Adapter<VH> {
private final PagedListAdapterHelper<T> mHelper;
+ private final PagedListAdapterHelper.PagedListListener<T> mListener =
+ new PagedListAdapterHelper.PagedListListener<T>() {
+ @Override
+ public void onCurrentListChanged(@Nullable PagedList<T> currentList) {
+ PagedListAdapter.this.onCurrentListChanged(currentList);
+ }
+ };
/**
* Creates a PagedListAdapter with default threading and
@@ -125,11 +132,13 @@
*/
protected PagedListAdapter(@NonNull DiffCallback<T> diffCallback) {
mHelper = new PagedListAdapterHelper<>(this, diffCallback);
+ mHelper.mListener = mListener;
}
@SuppressWarnings("unused, WeakerAccess")
protected PagedListAdapter(@NonNull ListAdapterConfig<T> config) {
mHelper = new PagedListAdapterHelper<>(new ListAdapterHelper.AdapterCallback(this), config);
+ mHelper.mListener = mListener;
}
/**
@@ -167,4 +176,22 @@
public PagedList<T> getCurrentList() {
return mHelper.getCurrentList();
}
+
+ /**
+ * Called when the current PagedList is updated.
+ * <p>
+ * This may be dispatched as part of {@link #setList(PagedList)} if a background diff isn't
+ * needed (such as when the first list is passed, or the list is cleared). In either case,
+ * PagedListAdapter will simply call
+ * {@link #notifyItemRangeInserted(int, int) notifyItemRangeInserted/Removed(0, mPreviousSize)}.
+ * <p>
+ * This method will <em>not</em>be called when the Adapter switches from presenting a PagedList
+ * to a snapshot version of the PagedList during a diff. This means you cannot observe each
+ * PagedList via this method.
+ *
+ * @param currentList new PagedList being displayed, may be null.
+ */
+ @SuppressWarnings("WeakerAccess")
+ public void onCurrentListChanged(@Nullable PagedList<T> currentList) {
+ }
}
diff --git a/paging/runtime/src/main/java/android/arch/paging/PagedListAdapterHelper.java b/paging/runtime/src/main/java/android/arch/paging/PagedListAdapterHelper.java
index c7b61d9..51a6e37 100644
--- a/paging/runtime/src/main/java/android/arch/paging/PagedListAdapterHelper.java
+++ b/paging/runtime/src/main/java/android/arch/paging/PagedListAdapterHelper.java
@@ -25,8 +25,6 @@
import android.support.v7.util.ListUpdateCallback;
import android.support.v7.widget.RecyclerView;
-import java.util.List;
-
/**
* Helper object for mapping a {@link PagedList} into a
* {@link android.support.v7.widget.RecyclerView.Adapter RecyclerView.Adapter}.
@@ -120,15 +118,23 @@
* @param <T> Type of the PagedLists this helper will receive.
*/
public class PagedListAdapterHelper<T> {
+ // updateCallback notifications must only be notified *after* new data and item count are stored
+ // this ensures Adapter#notifyItemRangeInserted etc are accessing the new data
private final ListUpdateCallback mUpdateCallback;
private final ListAdapterConfig<T> mConfig;
- // true if our listener is detached from mList, because it's been snapshotted
- private boolean mUpdateScheduled;
+ // TODO: REAL API
+ interface PagedListListener<T> {
+ void onCurrentListChanged(@Nullable PagedList<T> currentList);
+ }
+
+ @Nullable
+ PagedListListener<T> mListener;
private boolean mIsContiguous;
- private PagedList<T> mList;
+ private PagedList<T> mPagedList;
+ private PagedList<T> mSnapshot;
// Max generation of currently scheduled runnable
private int mMaxScheduledGeneration;
@@ -182,12 +188,17 @@
@SuppressWarnings("WeakerAccess")
@Nullable
public T getItem(int index) {
- if (mList == null) {
- throw new IndexOutOfBoundsException("Item count is zero, getItem() call is invalid");
+ if (mPagedList == null) {
+ if (mSnapshot == null) {
+ throw new IndexOutOfBoundsException(
+ "Item count is zero, getItem() call is invalid");
+ } else {
+ return mSnapshot.get(index);
+ }
}
- mList.loadAround(index);
- return mList.get(index);
+ mPagedList.loadAround(index);
+ return mPagedList.get(index);
}
/**
@@ -198,7 +209,11 @@
*/
@SuppressWarnings("WeakerAccess")
public int getItemCount() {
- return mList == null ? 0 : mList.size();
+ if (mPagedList != null) {
+ return mPagedList.size();
+ }
+
+ return mSnapshot == null ? 0 : mSnapshot.size();
}
/**
@@ -212,7 +227,7 @@
*/
public void setList(final PagedList<T> pagedList) {
if (pagedList != null) {
- if (mList == null) {
+ if (mPagedList == null && mSnapshot == null) {
mIsContiguous = pagedList.isContiguous();
} else {
if (pagedList.isContiguous() != mIsContiguous) {
@@ -222,7 +237,7 @@
}
}
- if (pagedList == mList) {
+ if (pagedList == mPagedList) {
// nothing to do
return;
}
@@ -231,49 +246,62 @@
final int runGeneration = ++mMaxScheduledGeneration;
if (pagedList == null) {
- mUpdateCallback.onRemoved(0, mList.size());
- mList.removeWeakCallback(mPagedListCallback);
- mList = null;
+ int removedCount = getItemCount();
+ if (mPagedList != null) {
+ mPagedList.removeWeakCallback(mPagedListCallback);
+ mPagedList = null;
+ } else if (mSnapshot != null) {
+ mSnapshot = null;
+ }
+ // dispatch update callback after updating mPagedList/mSnapshot
+ mUpdateCallback.onRemoved(0, removedCount);
+ if (mListener != null) {
+ mListener.onCurrentListChanged(null);
+ }
return;
}
- if (mList == null) {
+ if (mPagedList == null && mSnapshot == null) {
// fast simple first insert
- mUpdateCallback.onInserted(0, pagedList.size());
- mList = pagedList;
+ mPagedList = pagedList;
pagedList.addWeakCallback(null, mPagedListCallback);
+
+ // dispatch update callback after updating mPagedList/mSnapshot
+ mUpdateCallback.onInserted(0, pagedList.size());
+
+ if (mListener != null) {
+ mListener.onCurrentListChanged(pagedList);
+ }
return;
}
- if (!mList.isImmutable()) {
+ if (mPagedList != null) {
// first update scheduled on this list, so capture mPages as a snapshot, removing
// callbacks so we don't have resolve updates against a moving target
- mList.removeWeakCallback(mPagedListCallback);
- mList = (PagedList<T>) mList.snapshot();
+ mPagedList.removeWeakCallback(mPagedListCallback);
+ mSnapshot = (PagedList<T>) mPagedList.snapshot();
+ mPagedList = null;
}
- final PagedList<T> oldSnapshot = mList;
- final List<T> newSnapshot = pagedList.snapshot();
- mUpdateScheduled = true;
+ if (mSnapshot == null || mPagedList != null) {
+ throw new IllegalStateException("must be in snapshot state to diff");
+ }
+
+ final PagedList<T> oldSnapshot = mSnapshot;
+ final PagedList<T> newSnapshot = (PagedList<T>) pagedList.snapshot();
mConfig.getBackgroundThreadExecutor().execute(new Runnable() {
@Override
public void run() {
final DiffUtil.DiffResult result;
- if (mIsContiguous) {
- result = ContiguousDiffHelper.computeDiff(
- (NullPaddedList<T>) oldSnapshot, (NullPaddedList<T>) newSnapshot,
- mConfig.getDiffCallback(), true);
- } else {
- result = SparseDiffHelper.computeDiff(
- (PageArrayList<T>) oldSnapshot, (PageArrayList<T>) newSnapshot,
- mConfig.getDiffCallback(), true);
- }
+ result = PagedStorageDiffHelper.computeDiff(
+ oldSnapshot.mStorage,
+ newSnapshot.mStorage,
+ mConfig.getDiffCallback());
mConfig.getMainThreadExecutor().execute(new Runnable() {
@Override
public void run() {
if (mMaxScheduledGeneration == runGeneration) {
- mUpdateScheduled = false;
latchPagedList(pagedList, newSnapshot, result);
}
}
@@ -283,16 +311,24 @@
}
private void latchPagedList(
- PagedList<T> newList, List<T> diffSnapshot,
+ PagedList<T> newList, PagedList<T> diffSnapshot,
DiffUtil.DiffResult diffResult) {
- if (mIsContiguous) {
- ContiguousDiffHelper.dispatchDiff(mUpdateCallback,
- (NullPaddedList<T>) mList, (ContiguousPagedList<T>) newList, diffResult);
- } else {
- SparseDiffHelper.dispatchDiff(mUpdateCallback, diffResult);
+ if (mSnapshot == null || mPagedList != null) {
+ throw new IllegalStateException("must be in snapshot state to apply diff");
}
- mList = newList;
- newList.addWeakCallback((PagedList<T>) diffSnapshot, mPagedListCallback);
+
+ PagedList<T> previousSnapshot = mSnapshot;
+ mPagedList = newList;
+ mSnapshot = null;
+
+ // dispatch update callback after updating mPagedList/mSnapshot
+ PagedStorageDiffHelper.dispatchDiff(mUpdateCallback,
+ previousSnapshot.mStorage, newList.mStorage, diffResult);
+
+ newList.addWeakCallback(diffSnapshot, mPagedListCallback);
+ if (mListener != null) {
+ mListener.onCurrentListChanged(mPagedList);
+ }
}
/**
@@ -307,6 +343,9 @@
@SuppressWarnings("WeakerAccess")
@Nullable
public PagedList<T> getCurrentList() {
- return mList;
+ if (mSnapshot != null) {
+ return mSnapshot;
+ }
+ return mPagedList;
}
}
diff --git a/paging/runtime/src/main/java/android/arch/paging/ContiguousDiffHelper.java b/paging/runtime/src/main/java/android/arch/paging/PagedStorageDiffHelper.java
similarity index 74%
rename from paging/runtime/src/main/java/android/arch/paging/ContiguousDiffHelper.java
rename to paging/runtime/src/main/java/android/arch/paging/PagedStorageDiffHelper.java
index 7dd194b..6fc7039 100644
--- a/paging/runtime/src/main/java/android/arch/paging/ContiguousDiffHelper.java
+++ b/paging/runtime/src/main/java/android/arch/paging/PagedStorageDiffHelper.java
@@ -16,36 +16,31 @@
package android.arch.paging;
-import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
-import android.support.annotation.RestrictTo;
import android.support.v7.recyclerview.extensions.DiffCallback;
import android.support.v7.util.DiffUtil;
import android.support.v7.util.ListUpdateCallback;
-/** @hide */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-class ContiguousDiffHelper {
- private ContiguousDiffHelper() {
+class PagedStorageDiffHelper {
+ private PagedStorageDiffHelper() {
}
- @NonNull
static <T> DiffUtil.DiffResult computeDiff(
- final NullPaddedList<T> oldList, final NullPaddedList<T> newList,
- final DiffCallback<T> diffCallback, boolean detectMoves) {
+ final PagedStorage<?, T> oldList,
+ final PagedStorage<?, T> newList,
+ final DiffCallback<T> diffCallback) {
+ final int oldOffset = oldList.computeLeadingNulls();
+ final int newOffset = newList.computeLeadingNulls();
- if (!oldList.isImmutable()) {
- throw new IllegalArgumentException("list must be immutable to safely perform diff");
- }
- if (!newList.isImmutable()) {
- throw new IllegalArgumentException("list must be immutable to safely perform diff");
- }
+ final int oldSize = oldList.size() - oldOffset - oldList.computeTrailingNulls();
+ final int newSize = newList.size() - newOffset - newList.computeTrailingNulls();
+
return DiffUtil.calculateDiff(new DiffUtil.Callback() {
@Nullable
@Override
public Object getChangePayload(int oldItemPosition, int newItemPosition) {
- T oldItem = oldList.mList.get(oldItemPosition);
- T newItem = newList.mList.get(newItemPosition);
+ T oldItem = oldList.get(oldItemPosition + oldOffset);
+ T newItem = newList.get(newItemPosition + newList.getLeadingNullCount());
if (oldItem == null || newItem == null) {
return null;
}
@@ -54,21 +49,22 @@
@Override
public int getOldListSize() {
- return oldList.mList.size();
+ return oldSize;
}
@Override
public int getNewListSize() {
- return newList.mList.size();
+ return newSize;
}
@Override
public boolean areItemsTheSame(int oldItemPosition, int newItemPosition) {
- T oldItem = oldList.mList.get(oldItemPosition);
- T newItem = newList.mList.get(newItemPosition);
+ T oldItem = oldList.get(oldItemPosition + oldOffset);
+ T newItem = newList.get(newItemPosition + newList.getLeadingNullCount());
if (oldItem == newItem) {
return true;
}
+ //noinspection SimplifiableIfStatement
if (oldItem == null || newItem == null) {
return false;
}
@@ -77,18 +73,19 @@
@Override
public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) {
- T oldItem = oldList.mList.get(oldItemPosition);
- T newItem = newList.mList.get(newItemPosition);
+ T oldItem = oldList.get(oldItemPosition + oldOffset);
+ T newItem = newList.get(newItemPosition + newList.getLeadingNullCount());
if (oldItem == newItem) {
return true;
}
+ //noinspection SimplifiableIfStatement
if (oldItem == null || newItem == null) {
return false;
}
return diffCallback.areContentsTheSame(oldItem, newItem);
}
- }, detectMoves);
+ }, true);
}
private static class OffsettingListUpdateCallback implements ListUpdateCallback {
@@ -134,21 +131,25 @@
* immediately after dispatching this diff.
*/
static <T> void dispatchDiff(ListUpdateCallback callback,
- final NullPaddedList<T> oldList, final NullPaddedList<T> newList,
+ final PagedStorage<?, T> oldList,
+ final PagedStorage<?, T> newList,
final DiffUtil.DiffResult diffResult) {
- if (oldList.getLeadingNullCount() == 0
- && oldList.getTrailingNullCount() == 0
- && newList.getLeadingNullCount() == 0
- && newList.getTrailingNullCount() == 0) {
+ final int trailingOld = oldList.computeTrailingNulls();
+ final int trailingNew = newList.computeTrailingNulls();
+ final int leadingOld = oldList.computeLeadingNulls();
+ final int leadingNew = newList.computeLeadingNulls();
+
+ if (trailingOld == 0
+ && trailingNew == 0
+ && leadingOld == 0
+ && leadingNew == 0) {
// Simple case, dispatch & return
diffResult.dispatchUpdatesTo(callback);
return;
}
// First, remove or insert trailing nulls
- final int trailingOld = oldList.getTrailingNullCount();
- final int trailingNew = newList.getTrailingNullCount();
if (trailingOld > trailingNew) {
int count = trailingOld - trailingNew;
callback.onRemoved(oldList.size() - count, count);
@@ -157,8 +158,6 @@
}
// Second, remove or insert leading nulls
- final int leadingOld = oldList.getLeadingNullCount();
- final int leadingNew = newList.getLeadingNullCount();
if (leadingOld > leadingNew) {
callback.onRemoved(0, leadingOld - leadingNew);
} else if (leadingOld < leadingNew) {
diff --git a/paging/runtime/src/main/java/android/arch/paging/SparseDiffHelper.java b/paging/runtime/src/main/java/android/arch/paging/SparseDiffHelper.java
deleted file mode 100644
index fe47897..0000000
--- a/paging/runtime/src/main/java/android/arch/paging/SparseDiffHelper.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.arch.paging;
-
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.RestrictTo;
-import android.support.v7.recyclerview.extensions.DiffCallback;
-import android.support.v7.util.DiffUtil;
-import android.support.v7.util.ListUpdateCallback;
-
-/** @hide */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-class SparseDiffHelper {
- private SparseDiffHelper() {
- }
-
- @NonNull
- static <T> DiffUtil.DiffResult computeDiff(
- final PageArrayList<T> oldList, final PageArrayList<T> newList,
- final DiffCallback<T> diffCallback, boolean detectMoves) {
-
- if (!oldList.isImmutable()) {
- throw new IllegalArgumentException("list must be immutable to safely perform diff");
- }
- if (!newList.isImmutable()) {
- throw new IllegalArgumentException("list must be immutable to safely perform diff");
- }
- return DiffUtil.calculateDiff(new DiffUtil.Callback() {
- @Nullable
- @Override
- public Object getChangePayload(int oldItemPosition, int newItemPosition) {
- T oldItem = oldList.get(oldItemPosition);
- T newItem = newList.get(newItemPosition);
- if (oldItem == null || newItem == null) {
- return null;
- }
- return diffCallback.getChangePayload(oldItem, newItem);
- }
-
- @Override
- public int getOldListSize() {
- return oldList.size();
- }
-
- @Override
- public int getNewListSize() {
- return newList.size();
- }
-
- @Override
- public boolean areItemsTheSame(int oldItemPosition, int newItemPosition) {
- T oldItem = oldList.get(oldItemPosition);
- T newItem = newList.get(newItemPosition);
- if (oldItem == newItem) {
- return true;
- }
- if (oldItem == null || newItem == null) {
- return false;
- }
- return diffCallback.areItemsTheSame(oldItem, newItem);
- }
-
- @Override
- public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) {
- T oldItem = oldList.get(oldItemPosition);
- T newItem = newList.get(newItemPosition);
- if (oldItem == newItem) {
- return true;
- }
- if (oldItem == null || newItem == null) {
- return false;
- }
-
- return diffCallback.areContentsTheSame(oldItem, newItem);
- }
- }, detectMoves);
- }
-
- static <T> void dispatchDiff(ListUpdateCallback callback,
- final DiffUtil.DiffResult diffResult) {
- // Simple case, dispatch & return
- diffResult.dispatchUpdatesTo(callback);
- }
-}
diff --git a/paging/runtime/src/main/java/android/support/v7/recyclerview/extensions/ListAdapterConfig.java b/paging/runtime/src/main/java/android/support/v7/recyclerview/extensions/ListAdapterConfig.java
index f861242..25697a1 100644
--- a/paging/runtime/src/main/java/android/support/v7/recyclerview/extensions/ListAdapterConfig.java
+++ b/paging/runtime/src/main/java/android/support/v7/recyclerview/extensions/ListAdapterConfig.java
@@ -16,7 +16,7 @@
package android.support.v7.recyclerview.extensions;
-import android.arch.core.executor.AppToolkitTaskExecutor;
+import android.arch.core.executor.ArchTaskExecutor;
import java.util.concurrent.Executor;
@@ -118,10 +118,10 @@
throw new IllegalArgumentException("Must provide a diffCallback");
}
if (mBackgroundThreadExecutor == null) {
- mBackgroundThreadExecutor = AppToolkitTaskExecutor.getIOThreadExecutor();
+ mBackgroundThreadExecutor = ArchTaskExecutor.getIOThreadExecutor();
}
if (mMainThreadExecutor == null) {
- mMainThreadExecutor = AppToolkitTaskExecutor.getMainThreadExecutor();
+ mMainThreadExecutor = ArchTaskExecutor.getMainThreadExecutor();
}
return new ListAdapterConfig<>(
mMainThreadExecutor,
diff --git a/percent/Android.mk b/percent/Android.mk
index b569224..66ce397 100644
--- a/percent/Android.mk
+++ b/percent/Android.mk
@@ -25,7 +25,7 @@
LOCAL_USE_AAPT2 := true
LOCAL_MODULE := android-support-percent
LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
+LOCAL_SRC_FILES := $(call all-java-files-under, src/main/java)
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
LOCAL_SHARED_ANDROID_LIBRARIES := android-support-v4
LOCAL_JAR_EXCLUDE_FILES := none
diff --git a/percent/AndroidManifest.xml b/percent/AndroidManifest.xml
index db8dfa2..5d4707d 100644
--- a/percent/AndroidManifest.xml
+++ b/percent/AndroidManifest.xml
@@ -16,8 +16,4 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.support.percent">
<uses-sdk android:minSdkVersion="14"/>
- <application>
- <meta-data android:name="android.support.percent.VERSION"
- android:value="${support-version}" />
- </application>
</manifest>
diff --git a/percent/api/26.1.0.txt b/percent/api/26.1.0.txt
new file mode 100644
index 0000000..088c0de
--- /dev/null
+++ b/percent/api/26.1.0.txt
@@ -0,0 +1,70 @@
+package android.support.percent {
+
+ public deprecated class PercentFrameLayout extends android.widget.FrameLayout {
+ ctor public PercentFrameLayout(android.content.Context);
+ ctor public PercentFrameLayout(android.content.Context, android.util.AttributeSet);
+ ctor public PercentFrameLayout(android.content.Context, android.util.AttributeSet, int);
+ method protected android.support.percent.PercentFrameLayout.LayoutParams generateDefaultLayoutParams();
+ method public android.support.percent.PercentFrameLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
+ }
+
+ public static deprecated class PercentFrameLayout.LayoutParams extends android.widget.FrameLayout.LayoutParams implements android.support.percent.PercentLayoutHelper.PercentLayoutParams {
+ ctor public PercentFrameLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
+ ctor public PercentFrameLayout.LayoutParams(int, int);
+ ctor public PercentFrameLayout.LayoutParams(int, int, int);
+ ctor public PercentFrameLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public PercentFrameLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ ctor public PercentFrameLayout.LayoutParams(android.widget.FrameLayout.LayoutParams);
+ ctor public PercentFrameLayout.LayoutParams(android.support.percent.PercentFrameLayout.LayoutParams);
+ method public android.support.percent.PercentLayoutHelper.PercentLayoutInfo getPercentLayoutInfo();
+ }
+
+ public deprecated class PercentLayoutHelper {
+ ctor public PercentLayoutHelper(android.view.ViewGroup);
+ method public void adjustChildren(int, int);
+ method public static void fetchWidthAndHeight(android.view.ViewGroup.LayoutParams, android.content.res.TypedArray, int, int);
+ method public static android.support.percent.PercentLayoutHelper.PercentLayoutInfo getPercentLayoutInfo(android.content.Context, android.util.AttributeSet);
+ method public boolean handleMeasuredStateTooSmall();
+ method public void restoreOriginalParams();
+ }
+
+ public static deprecated class PercentLayoutHelper.PercentLayoutInfo {
+ ctor public PercentLayoutHelper.PercentLayoutInfo();
+ method public void fillLayoutParams(android.view.ViewGroup.LayoutParams, int, int);
+ method public deprecated void fillMarginLayoutParams(android.view.ViewGroup.MarginLayoutParams, int, int);
+ method public void fillMarginLayoutParams(android.view.View, android.view.ViewGroup.MarginLayoutParams, int, int);
+ method public void restoreLayoutParams(android.view.ViewGroup.LayoutParams);
+ method public void restoreMarginLayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ field public float aspectRatio;
+ field public float bottomMarginPercent;
+ field public float endMarginPercent;
+ field public float heightPercent;
+ field public float leftMarginPercent;
+ field public float rightMarginPercent;
+ field public float startMarginPercent;
+ field public float topMarginPercent;
+ field public float widthPercent;
+ }
+
+ public static abstract deprecated interface PercentLayoutHelper.PercentLayoutParams {
+ method public abstract android.support.percent.PercentLayoutHelper.PercentLayoutInfo getPercentLayoutInfo();
+ }
+
+ public deprecated class PercentRelativeLayout extends android.widget.RelativeLayout {
+ ctor public PercentRelativeLayout(android.content.Context);
+ ctor public PercentRelativeLayout(android.content.Context, android.util.AttributeSet);
+ ctor public PercentRelativeLayout(android.content.Context, android.util.AttributeSet, int);
+ method protected android.support.percent.PercentRelativeLayout.LayoutParams generateDefaultLayoutParams();
+ method public android.support.percent.PercentRelativeLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
+ }
+
+ public static deprecated class PercentRelativeLayout.LayoutParams extends android.widget.RelativeLayout.LayoutParams implements android.support.percent.PercentLayoutHelper.PercentLayoutParams {
+ ctor public PercentRelativeLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
+ ctor public PercentRelativeLayout.LayoutParams(int, int);
+ ctor public PercentRelativeLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public PercentRelativeLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ method public android.support.percent.PercentLayoutHelper.PercentLayoutInfo getPercentLayoutInfo();
+ }
+
+}
+
diff --git a/percent/api/27.0.0.txt b/percent/api/27.0.0.txt
new file mode 100644
index 0000000..088c0de
--- /dev/null
+++ b/percent/api/27.0.0.txt
@@ -0,0 +1,70 @@
+package android.support.percent {
+
+ public deprecated class PercentFrameLayout extends android.widget.FrameLayout {
+ ctor public PercentFrameLayout(android.content.Context);
+ ctor public PercentFrameLayout(android.content.Context, android.util.AttributeSet);
+ ctor public PercentFrameLayout(android.content.Context, android.util.AttributeSet, int);
+ method protected android.support.percent.PercentFrameLayout.LayoutParams generateDefaultLayoutParams();
+ method public android.support.percent.PercentFrameLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
+ }
+
+ public static deprecated class PercentFrameLayout.LayoutParams extends android.widget.FrameLayout.LayoutParams implements android.support.percent.PercentLayoutHelper.PercentLayoutParams {
+ ctor public PercentFrameLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
+ ctor public PercentFrameLayout.LayoutParams(int, int);
+ ctor public PercentFrameLayout.LayoutParams(int, int, int);
+ ctor public PercentFrameLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public PercentFrameLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ ctor public PercentFrameLayout.LayoutParams(android.widget.FrameLayout.LayoutParams);
+ ctor public PercentFrameLayout.LayoutParams(android.support.percent.PercentFrameLayout.LayoutParams);
+ method public android.support.percent.PercentLayoutHelper.PercentLayoutInfo getPercentLayoutInfo();
+ }
+
+ public deprecated class PercentLayoutHelper {
+ ctor public PercentLayoutHelper(android.view.ViewGroup);
+ method public void adjustChildren(int, int);
+ method public static void fetchWidthAndHeight(android.view.ViewGroup.LayoutParams, android.content.res.TypedArray, int, int);
+ method public static android.support.percent.PercentLayoutHelper.PercentLayoutInfo getPercentLayoutInfo(android.content.Context, android.util.AttributeSet);
+ method public boolean handleMeasuredStateTooSmall();
+ method public void restoreOriginalParams();
+ }
+
+ public static deprecated class PercentLayoutHelper.PercentLayoutInfo {
+ ctor public PercentLayoutHelper.PercentLayoutInfo();
+ method public void fillLayoutParams(android.view.ViewGroup.LayoutParams, int, int);
+ method public deprecated void fillMarginLayoutParams(android.view.ViewGroup.MarginLayoutParams, int, int);
+ method public void fillMarginLayoutParams(android.view.View, android.view.ViewGroup.MarginLayoutParams, int, int);
+ method public void restoreLayoutParams(android.view.ViewGroup.LayoutParams);
+ method public void restoreMarginLayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ field public float aspectRatio;
+ field public float bottomMarginPercent;
+ field public float endMarginPercent;
+ field public float heightPercent;
+ field public float leftMarginPercent;
+ field public float rightMarginPercent;
+ field public float startMarginPercent;
+ field public float topMarginPercent;
+ field public float widthPercent;
+ }
+
+ public static abstract deprecated interface PercentLayoutHelper.PercentLayoutParams {
+ method public abstract android.support.percent.PercentLayoutHelper.PercentLayoutInfo getPercentLayoutInfo();
+ }
+
+ public deprecated class PercentRelativeLayout extends android.widget.RelativeLayout {
+ ctor public PercentRelativeLayout(android.content.Context);
+ ctor public PercentRelativeLayout(android.content.Context, android.util.AttributeSet);
+ ctor public PercentRelativeLayout(android.content.Context, android.util.AttributeSet, int);
+ method protected android.support.percent.PercentRelativeLayout.LayoutParams generateDefaultLayoutParams();
+ method public android.support.percent.PercentRelativeLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
+ }
+
+ public static deprecated class PercentRelativeLayout.LayoutParams extends android.widget.RelativeLayout.LayoutParams implements android.support.percent.PercentLayoutHelper.PercentLayoutParams {
+ ctor public PercentRelativeLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
+ ctor public PercentRelativeLayout.LayoutParams(int, int);
+ ctor public PercentRelativeLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public PercentRelativeLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ method public android.support.percent.PercentLayoutHelper.PercentLayoutInfo getPercentLayoutInfo();
+ }
+
+}
+
diff --git a/percent/build.gradle b/percent/build.gradle
index d390afb..aecaa28 100644
--- a/percent/build.gradle
+++ b/percent/build.gradle
@@ -13,10 +13,7 @@
}
sourceSets {
- main.java.srcDirs = ['src']
main.res.srcDir 'res'
- main.assets.srcDir 'assets'
- main.resources.srcDir 'src'
}
}
diff --git a/percent/src/android/support/percent/PercentFrameLayout.java b/percent/src/main/java/android/support/percent/PercentFrameLayout.java
similarity index 99%
rename from percent/src/android/support/percent/PercentFrameLayout.java
rename to percent/src/main/java/android/support/percent/PercentFrameLayout.java
index b9abd39..4190858 100644
--- a/percent/src/android/support/percent/PercentFrameLayout.java
+++ b/percent/src/main/java/android/support/percent/PercentFrameLayout.java
@@ -126,6 +126,7 @@
* app:layout_constraintBottom_toBottomOf="@+id/bottom_guideline" />
*
* </android.support.constraint.ConstraintLayout>
+ * </pre>
*/
@Deprecated
public class PercentFrameLayout extends FrameLayout {
diff --git a/percent/src/android/support/percent/PercentLayoutHelper.java b/percent/src/main/java/android/support/percent/PercentLayoutHelper.java
similarity index 100%
rename from percent/src/android/support/percent/PercentLayoutHelper.java
rename to percent/src/main/java/android/support/percent/PercentLayoutHelper.java
diff --git a/percent/src/android/support/percent/PercentRelativeLayout.java b/percent/src/main/java/android/support/percent/PercentRelativeLayout.java
similarity index 100%
rename from percent/src/android/support/percent/PercentRelativeLayout.java
rename to percent/src/main/java/android/support/percent/PercentRelativeLayout.java
diff --git a/persistence/OWNERS b/persistence/OWNERS
new file mode 100644
index 0000000..fc51372
--- /dev/null
+++ b/persistence/OWNERS
@@ -0,0 +1,2 @@
+sergeyv@google.com
+yboyar@google.com
\ No newline at end of file
diff --git a/persistence/db-framework/src/main/AndroidManifest.xml b/persistence/db-framework/src/main/AndroidManifest.xml
index 89d09af..9350b90 100644
--- a/persistence/db-framework/src/main/AndroidManifest.xml
+++ b/persistence/db-framework/src/main/AndroidManifest.xml
@@ -16,8 +16,4 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.arch.persistence.db.framework">
- <application>
- <meta-data android:name="android.arch.persistence.db.framework.VERSION"
- android:value="${version}" />
- </application>
</manifest>
diff --git a/persistence/db/src/main/AndroidManifest.xml b/persistence/db/src/main/AndroidManifest.xml
index 5894255..8a27324 100644
--- a/persistence/db/src/main/AndroidManifest.xml
+++ b/persistence/db/src/main/AndroidManifest.xml
@@ -16,8 +16,4 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.arch.persistence.db">
- <application>
- <meta-data android:name="android.arch.persistence.db.VERSION"
- android:value="${version}" />
- </application>
</manifest>
diff --git a/recommendation/Android.mk b/recommendation/Android.mk
index 99ba65f..ea819e9 100644
--- a/recommendation/Android.mk
+++ b/recommendation/Android.mk
@@ -25,7 +25,7 @@
LOCAL_USE_AAPT2 := true
LOCAL_MODULE := android-support-recommendation
LOCAL_SDK_VERSION := current
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
+LOCAL_SRC_FILES := $(call all-java-files-under, src/main/java)
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
LOCAL_SHARED_ANDROID_LIBRARIES := \
android-support-v4 \
diff --git a/recommendation/AndroidManifest.xml b/recommendation/AndroidManifest.xml
index 031e250..98e1ae9 100644
--- a/recommendation/AndroidManifest.xml
+++ b/recommendation/AndroidManifest.xml
@@ -16,8 +16,4 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.support.recommendation">
<uses-sdk android:minSdkVersion="21"/>
- <application>
- <meta-data android:name="android.support.recommendation.VERSION"
- android:value="${support-version}" />
- </application>
</manifest>
diff --git a/recommendation/OWNERS b/recommendation/OWNERS
new file mode 100644
index 0000000..063702c
--- /dev/null
+++ b/recommendation/OWNERS
@@ -0,0 +1 @@
+dake@google.com
\ No newline at end of file
diff --git a/recommendation/api/26.1.0.txt b/recommendation/api/26.1.0.txt
new file mode 100644
index 0000000..ce69b31
--- /dev/null
+++ b/recommendation/api/26.1.0.txt
@@ -0,0 +1,132 @@
+package android.support.app.recommendation {
+
+ public final class ContentRecommendation {
+ method public java.lang.String getBackgroundImageUri();
+ method public int getBadgeImageResourceId();
+ method public int getColor();
+ method public android.graphics.Bitmap getContentImage();
+ method public android.support.app.recommendation.ContentRecommendation.IntentData getContentIntent();
+ method public java.lang.String[] getContentTypes();
+ method public android.support.app.recommendation.ContentRecommendation.IntentData getDismissIntent();
+ method public java.lang.String[] getGenres();
+ method public java.lang.String getGroup();
+ method public java.lang.String getIdTag();
+ method public java.lang.String getMaturityRating();
+ method public android.app.Notification getNotificationObject(android.content.Context);
+ method public java.lang.String getPricingType();
+ method public java.lang.String getPricingValue();
+ method public java.lang.String getPrimaryContentType();
+ method public int getProgressMax();
+ method public int getProgressValue();
+ method public long getRunningTime();
+ method public java.lang.String getSortKey();
+ method public java.lang.String getSourceName();
+ method public int getStatus();
+ method public java.lang.String getText();
+ method public java.lang.String getTitle();
+ method public boolean hasProgressInfo();
+ method public boolean isAutoDismiss();
+ method public void setAutoDismiss(boolean);
+ method public void setGroup(java.lang.String);
+ method public void setProgress(int, int);
+ method public void setSortKey(java.lang.String);
+ method public void setStatus(int);
+ field public static final java.lang.String CONTENT_MATURITY_ALL = "android.contentMaturity.all";
+ field public static final java.lang.String CONTENT_MATURITY_HIGH = "android.contentMaturity.high";
+ field public static final java.lang.String CONTENT_MATURITY_LOW = "android.contentMaturity.low";
+ field public static final java.lang.String CONTENT_MATURITY_MEDIUM = "android.contentMaturity.medium";
+ field public static final java.lang.String CONTENT_PRICING_FREE = "android.contentPrice.free";
+ field public static final java.lang.String CONTENT_PRICING_PREORDER = "android.contentPrice.preorder";
+ field public static final java.lang.String CONTENT_PRICING_PURCHASE = "android.contentPrice.purchase";
+ field public static final java.lang.String CONTENT_PRICING_RENTAL = "android.contentPrice.rental";
+ field public static final java.lang.String CONTENT_PRICING_SUBSCRIPTION = "android.contentPrice.subscription";
+ field public static final int CONTENT_STATUS_AVAILABLE = 2; // 0x2
+ field public static final int CONTENT_STATUS_PENDING = 1; // 0x1
+ field public static final int CONTENT_STATUS_READY = 0; // 0x0
+ field public static final int CONTENT_STATUS_UNAVAILABLE = 3; // 0x3
+ field public static final java.lang.String CONTENT_TYPE_APP = "android.contentType.app";
+ field public static final java.lang.String CONTENT_TYPE_BOOK = "android.contentType.book";
+ field public static final java.lang.String CONTENT_TYPE_COMIC = "android.contentType.comic";
+ field public static final java.lang.String CONTENT_TYPE_GAME = "android.contentType.game";
+ field public static final java.lang.String CONTENT_TYPE_MAGAZINE = "android.contentType.magazine";
+ field public static final java.lang.String CONTENT_TYPE_MOVIE = "android.contentType.movie";
+ field public static final java.lang.String CONTENT_TYPE_MUSIC = "android.contentType.music";
+ field public static final java.lang.String CONTENT_TYPE_NEWS = "android.contentType.news";
+ field public static final java.lang.String CONTENT_TYPE_PODCAST = "android.contentType.podcast";
+ field public static final java.lang.String CONTENT_TYPE_RADIO = "android.contentType.radio";
+ field public static final java.lang.String CONTENT_TYPE_SERIAL = "android.contentType.serial";
+ field public static final java.lang.String CONTENT_TYPE_SPORTS = "android.contentType.sports";
+ field public static final java.lang.String CONTENT_TYPE_TRAILER = "android.contentType.trailer";
+ field public static final java.lang.String CONTENT_TYPE_VIDEO = "android.contentType.video";
+ field public static final java.lang.String CONTENT_TYPE_WEBSITE = "android.contentType.website";
+ field public static final int INTENT_TYPE_ACTIVITY = 1; // 0x1
+ field public static final int INTENT_TYPE_BROADCAST = 2; // 0x2
+ field public static final int INTENT_TYPE_SERVICE = 3; // 0x3
+ }
+
+ public static final class ContentRecommendation.Builder {
+ ctor public ContentRecommendation.Builder();
+ method public android.support.app.recommendation.ContentRecommendation build();
+ method public android.support.app.recommendation.ContentRecommendation.Builder setAutoDismiss(boolean);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setBackgroundImageUri(java.lang.String);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setBadgeIcon(int);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setColor(int);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setContentImage(android.graphics.Bitmap);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setContentIntentData(int, android.content.Intent, int, android.os.Bundle);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setContentTypes(java.lang.String[]);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setDismissIntentData(int, android.content.Intent, int, android.os.Bundle);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setGenres(java.lang.String[]);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setGroup(java.lang.String);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setIdTag(java.lang.String);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setMaturityRating(java.lang.String);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setPricingInformation(java.lang.String, java.lang.String);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setProgress(int, int);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setRunningTime(long);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setSortKey(java.lang.String);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setSourceName(java.lang.String);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setStatus(int);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setText(java.lang.String);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setTitle(java.lang.String);
+ }
+
+ public static abstract class ContentRecommendation.ContentMaturity implements java.lang.annotation.Annotation {
+ }
+
+ public static abstract class ContentRecommendation.ContentPricing implements java.lang.annotation.Annotation {
+ }
+
+ public static abstract class ContentRecommendation.ContentStatus implements java.lang.annotation.Annotation {
+ }
+
+ public static abstract class ContentRecommendation.ContentType implements java.lang.annotation.Annotation {
+ }
+
+ public static class ContentRecommendation.IntentData {
+ ctor public ContentRecommendation.IntentData();
+ }
+
+ public static abstract class ContentRecommendation.IntentType implements java.lang.annotation.Annotation {
+ }
+
+ public final class RecommendationExtender implements android.app.Notification.Extender {
+ ctor public RecommendationExtender();
+ ctor public RecommendationExtender(android.app.Notification);
+ method public android.app.Notification.Builder extend(android.app.Notification.Builder);
+ method public java.lang.String[] getContentTypes();
+ method public java.lang.String[] getGenres();
+ method public java.lang.String getMaturityRating();
+ method public java.lang.String getPricingType();
+ method public java.lang.String getPricingValue();
+ method public java.lang.String getPrimaryContentType();
+ method public long getRunningTime();
+ method public int getStatus();
+ method public android.support.app.recommendation.RecommendationExtender setContentTypes(java.lang.String[]);
+ method public android.support.app.recommendation.RecommendationExtender setGenres(java.lang.String[]);
+ method public android.support.app.recommendation.RecommendationExtender setMaturityRating(java.lang.String);
+ method public android.support.app.recommendation.RecommendationExtender setPricingInformation(java.lang.String, java.lang.String);
+ method public android.support.app.recommendation.RecommendationExtender setRunningTime(long);
+ method public android.support.app.recommendation.RecommendationExtender setStatus(int);
+ }
+
+}
+
diff --git a/recommendation/api/27.0.0.txt b/recommendation/api/27.0.0.txt
new file mode 100644
index 0000000..ce69b31
--- /dev/null
+++ b/recommendation/api/27.0.0.txt
@@ -0,0 +1,132 @@
+package android.support.app.recommendation {
+
+ public final class ContentRecommendation {
+ method public java.lang.String getBackgroundImageUri();
+ method public int getBadgeImageResourceId();
+ method public int getColor();
+ method public android.graphics.Bitmap getContentImage();
+ method public android.support.app.recommendation.ContentRecommendation.IntentData getContentIntent();
+ method public java.lang.String[] getContentTypes();
+ method public android.support.app.recommendation.ContentRecommendation.IntentData getDismissIntent();
+ method public java.lang.String[] getGenres();
+ method public java.lang.String getGroup();
+ method public java.lang.String getIdTag();
+ method public java.lang.String getMaturityRating();
+ method public android.app.Notification getNotificationObject(android.content.Context);
+ method public java.lang.String getPricingType();
+ method public java.lang.String getPricingValue();
+ method public java.lang.String getPrimaryContentType();
+ method public int getProgressMax();
+ method public int getProgressValue();
+ method public long getRunningTime();
+ method public java.lang.String getSortKey();
+ method public java.lang.String getSourceName();
+ method public int getStatus();
+ method public java.lang.String getText();
+ method public java.lang.String getTitle();
+ method public boolean hasProgressInfo();
+ method public boolean isAutoDismiss();
+ method public void setAutoDismiss(boolean);
+ method public void setGroup(java.lang.String);
+ method public void setProgress(int, int);
+ method public void setSortKey(java.lang.String);
+ method public void setStatus(int);
+ field public static final java.lang.String CONTENT_MATURITY_ALL = "android.contentMaturity.all";
+ field public static final java.lang.String CONTENT_MATURITY_HIGH = "android.contentMaturity.high";
+ field public static final java.lang.String CONTENT_MATURITY_LOW = "android.contentMaturity.low";
+ field public static final java.lang.String CONTENT_MATURITY_MEDIUM = "android.contentMaturity.medium";
+ field public static final java.lang.String CONTENT_PRICING_FREE = "android.contentPrice.free";
+ field public static final java.lang.String CONTENT_PRICING_PREORDER = "android.contentPrice.preorder";
+ field public static final java.lang.String CONTENT_PRICING_PURCHASE = "android.contentPrice.purchase";
+ field public static final java.lang.String CONTENT_PRICING_RENTAL = "android.contentPrice.rental";
+ field public static final java.lang.String CONTENT_PRICING_SUBSCRIPTION = "android.contentPrice.subscription";
+ field public static final int CONTENT_STATUS_AVAILABLE = 2; // 0x2
+ field public static final int CONTENT_STATUS_PENDING = 1; // 0x1
+ field public static final int CONTENT_STATUS_READY = 0; // 0x0
+ field public static final int CONTENT_STATUS_UNAVAILABLE = 3; // 0x3
+ field public static final java.lang.String CONTENT_TYPE_APP = "android.contentType.app";
+ field public static final java.lang.String CONTENT_TYPE_BOOK = "android.contentType.book";
+ field public static final java.lang.String CONTENT_TYPE_COMIC = "android.contentType.comic";
+ field public static final java.lang.String CONTENT_TYPE_GAME = "android.contentType.game";
+ field public static final java.lang.String CONTENT_TYPE_MAGAZINE = "android.contentType.magazine";
+ field public static final java.lang.String CONTENT_TYPE_MOVIE = "android.contentType.movie";
+ field public static final java.lang.String CONTENT_TYPE_MUSIC = "android.contentType.music";
+ field public static final java.lang.String CONTENT_TYPE_NEWS = "android.contentType.news";
+ field public static final java.lang.String CONTENT_TYPE_PODCAST = "android.contentType.podcast";
+ field public static final java.lang.String CONTENT_TYPE_RADIO = "android.contentType.radio";
+ field public static final java.lang.String CONTENT_TYPE_SERIAL = "android.contentType.serial";
+ field public static final java.lang.String CONTENT_TYPE_SPORTS = "android.contentType.sports";
+ field public static final java.lang.String CONTENT_TYPE_TRAILER = "android.contentType.trailer";
+ field public static final java.lang.String CONTENT_TYPE_VIDEO = "android.contentType.video";
+ field public static final java.lang.String CONTENT_TYPE_WEBSITE = "android.contentType.website";
+ field public static final int INTENT_TYPE_ACTIVITY = 1; // 0x1
+ field public static final int INTENT_TYPE_BROADCAST = 2; // 0x2
+ field public static final int INTENT_TYPE_SERVICE = 3; // 0x3
+ }
+
+ public static final class ContentRecommendation.Builder {
+ ctor public ContentRecommendation.Builder();
+ method public android.support.app.recommendation.ContentRecommendation build();
+ method public android.support.app.recommendation.ContentRecommendation.Builder setAutoDismiss(boolean);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setBackgroundImageUri(java.lang.String);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setBadgeIcon(int);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setColor(int);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setContentImage(android.graphics.Bitmap);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setContentIntentData(int, android.content.Intent, int, android.os.Bundle);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setContentTypes(java.lang.String[]);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setDismissIntentData(int, android.content.Intent, int, android.os.Bundle);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setGenres(java.lang.String[]);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setGroup(java.lang.String);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setIdTag(java.lang.String);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setMaturityRating(java.lang.String);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setPricingInformation(java.lang.String, java.lang.String);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setProgress(int, int);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setRunningTime(long);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setSortKey(java.lang.String);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setSourceName(java.lang.String);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setStatus(int);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setText(java.lang.String);
+ method public android.support.app.recommendation.ContentRecommendation.Builder setTitle(java.lang.String);
+ }
+
+ public static abstract class ContentRecommendation.ContentMaturity implements java.lang.annotation.Annotation {
+ }
+
+ public static abstract class ContentRecommendation.ContentPricing implements java.lang.annotation.Annotation {
+ }
+
+ public static abstract class ContentRecommendation.ContentStatus implements java.lang.annotation.Annotation {
+ }
+
+ public static abstract class ContentRecommendation.ContentType implements java.lang.annotation.Annotation {
+ }
+
+ public static class ContentRecommendation.IntentData {
+ ctor public ContentRecommendation.IntentData();
+ }
+
+ public static abstract class ContentRecommendation.IntentType implements java.lang.annotation.Annotation {
+ }
+
+ public final class RecommendationExtender implements android.app.Notification.Extender {
+ ctor public RecommendationExtender();
+ ctor public RecommendationExtender(android.app.Notification);
+ method public android.app.Notification.Builder extend(android.app.Notification.Builder);
+ method public java.lang.String[] getContentTypes();
+ method public java.lang.String[] getGenres();
+ method public java.lang.String getMaturityRating();
+ method public java.lang.String getPricingType();
+ method public java.lang.String getPricingValue();
+ method public java.lang.String getPrimaryContentType();
+ method public long getRunningTime();
+ method public int getStatus();
+ method public android.support.app.recommendation.RecommendationExtender setContentTypes(java.lang.String[]);
+ method public android.support.app.recommendation.RecommendationExtender setGenres(java.lang.String[]);
+ method public android.support.app.recommendation.RecommendationExtender setMaturityRating(java.lang.String);
+ method public android.support.app.recommendation.RecommendationExtender setPricingInformation(java.lang.String, java.lang.String);
+ method public android.support.app.recommendation.RecommendationExtender setRunningTime(long);
+ method public android.support.app.recommendation.RecommendationExtender setStatus(int);
+ }
+
+}
+
diff --git a/recommendation/build.gradle b/recommendation/build.gradle
index 61b2fb2..0c38487 100644
--- a/recommendation/build.gradle
+++ b/recommendation/build.gradle
@@ -8,12 +8,6 @@
defaultConfig {
minSdkVersion 21
}
-
- sourceSets {
- main.java.srcDirs = ['src']
- main.res.srcDir 'res'
- }
-
}
supportLibrary {
diff --git a/recommendation/src/android/support/app/recommendation/ContentRecommendation.java b/recommendation/src/main/java/android/support/app/recommendation/ContentRecommendation.java
similarity index 100%
rename from recommendation/src/android/support/app/recommendation/ContentRecommendation.java
rename to recommendation/src/main/java/android/support/app/recommendation/ContentRecommendation.java
diff --git a/recommendation/src/android/support/app/recommendation/RecommendationExtender.java b/recommendation/src/main/java/android/support/app/recommendation/RecommendationExtender.java
similarity index 100%
rename from recommendation/src/android/support/app/recommendation/RecommendationExtender.java
rename to recommendation/src/main/java/android/support/app/recommendation/RecommendationExtender.java
diff --git a/room/OWNERS b/room/OWNERS
new file mode 100644
index 0000000..fc51372
--- /dev/null
+++ b/room/OWNERS
@@ -0,0 +1,2 @@
+sergeyv@google.com
+yboyar@google.com
\ No newline at end of file
diff --git a/room/common/src/main/java/android/arch/persistence/room/ForeignKey.java b/room/common/src/main/java/android/arch/persistence/room/ForeignKey.java
index 4ba0fb3..3ba632b 100644
--- a/room/common/src/main/java/android/arch/persistence/room/ForeignKey.java
+++ b/room/common/src/main/java/android/arch/persistence/room/ForeignKey.java
@@ -40,7 +40,7 @@
* <a href="https://sqlite.org/pragma.html#pragma_defer_foreign_keys">defer_foreign_keys</a> PRAGMA
* to defer them depending on your transaction.
* <p>
- * Please refer to the SQLite <a href="https://sqlite.org/foreignkeys.html>foreign keys</a>
+ * Please refer to the SQLite <a href="https://sqlite.org/foreignkeys.html">foreign keys</a>
* documentation for details.
*/
public @interface ForeignKey {
diff --git a/room/common/src/main/java/android/arch/persistence/room/Relation.java b/room/common/src/main/java/android/arch/persistence/room/Relation.java
index 7206699..d55bbfe 100644
--- a/room/common/src/main/java/android/arch/persistence/room/Relation.java
+++ b/room/common/src/main/java/android/arch/persistence/room/Relation.java
@@ -28,6 +28,8 @@
* <pre>
* {@literal @}Entity
* public class Pet {
+ * {@literal @} PrimaryKey
+ * int id;
* int userId;
* String name;
* // other fields
@@ -41,8 +43,8 @@
*
* {@literal @}Dao
* public interface UserPetDao {
- * {@literal @}Query("SELECT id, name from User WHERE age > :minAge")
- * public List<UserNameAndAllPets> loadUserAndPets(int minAge);
+ * {@literal @}Query("SELECT id, name from User")
+ * public List<UserNameAndAllPets> loadUserAndPets();
* }
* </pre>
* <p>
@@ -63,16 +65,16 @@
* {@literal @}Embedded
* public User user;
* {@literal @}Relation(parentColumn = "id", entityColumn = "userId", entity = Pet.class)
- * public List<PetNameAndId> pets;
+ * public List<PetNameAndId> pets;
* }
* {@literal @}Dao
* public interface UserPetDao {
- * {@literal @}Query("SELECT * from User WHERE age > :minAge")
- * public List<UserAllPets> loadUserAndPets(int minAge);
+ * {@literal @}Query("SELECT * from User")
+ * public List<UserAllPets> loadUserAndPets();
* }
* </pre>
* <p>
- * In the example above, {@code PetNameAndId} is a regular but all of fields are fetched
+ * In the example above, {@code PetNameAndId} is a regular Pojo but all of fields are fetched
* from the {@code entity} defined in the {@code @Relation} annotation (<i>Pet</i>).
* {@code PetNameAndId} could also define its own relations all of which would also be fetched
* automatically.
@@ -85,7 +87,7 @@
* public User user;
* {@literal @}Relation(parentColumn = "id", entityColumn = "userId", entity = Pet.class,
* projection = {"name"})
- * public List<String> petNames;
+ * public List<String> petNames;
* }
* </pre>
* <p>
@@ -93,7 +95,7 @@
* cannot have relations. This is a design decision to avoid common pitfalls in {@link Entity}
* setups. You can read more about it in the main Room documentation. When loading data, you can
* simply work around this limitation by creating Pojo classes that extend the {@link Entity}.
- *
+ * <p>
* Note that the {@code @Relation} annotated field cannot be a constructor parameter, it must be
* public or have a public setter.
*/
diff --git a/room/common/src/main/java/android/arch/persistence/room/RoomWarnings.java b/room/common/src/main/java/android/arch/persistence/room/RoomWarnings.java
index 91f32e4..f05e6be 100644
--- a/room/common/src/main/java/android/arch/persistence/room/RoomWarnings.java
+++ b/room/common/src/main/java/android/arch/persistence/room/RoomWarnings.java
@@ -117,4 +117,20 @@
*/
public static final String MISSING_INDEX_ON_FOREIGN_KEY_CHILD =
"ROOM_MISSING_FOREIGN_KEY_CHILD_INDEX";
+
+ /**
+ * Reported when a Pojo has multiple constructors, one of which is a no-arg constructor. Room
+ * will pick that one by default but will print this warning in case the constructor choice is
+ * important. You can always guide Room to use the right constructor using the @Ignore
+ * annotation.
+ */
+ public static final String DEFAULT_CONSTRUCTOR = "ROOM_DEFAULT_CONSTRUCTOR";
+
+ /**
+ * Reported when a @Query method returns a Pojo that has relations but the method is not
+ * annotated with @Transaction. Relations are run as separate queries and if the query is not
+ * run inside a transaction, it might return inconsistent results from the database.
+ */
+ public static final String RELATION_QUERY_WITHOUT_TRANSACTION =
+ "ROOM_RELATION_QUERY_WITHOUT_TRANSACTION";
}
diff --git a/room/common/src/main/java/android/arch/persistence/room/Transaction.java b/room/common/src/main/java/android/arch/persistence/room/Transaction.java
index 914e4f4..3b6ede9 100644
--- a/room/common/src/main/java/android/arch/persistence/room/Transaction.java
+++ b/room/common/src/main/java/android/arch/persistence/room/Transaction.java
@@ -22,9 +22,10 @@
import java.lang.annotation.Target;
/**
- * Marks a method in an abstract {@link Dao} class as a transaction method.
+ * Marks a method in a {@link Dao} class as a transaction method.
* <p>
- * The derived implementation of the method will execute the super method in a database transaction.
+ * When used on a non-abstract method of an abstract {@link Dao} class,
+ * the derived implementation of the method will execute the super method in a database transaction.
* All the parameters and return types are preserved. The transaction will be marked as successful
* unless an exception is thrown in the method body.
* <p>
@@ -44,6 +45,38 @@
* }
* }
* </pre>
+ * <p>
+ * When used on a {@link Query} method that has a {@code Select} statement, the generated code for
+ * the Query will be run in a transaction. There are 2 main cases where you may want to do that:
+ * <ol>
+ * <li>If the result of the query is fairly big, it is better to run it inside a transaction
+ * to receive a consistent result. Otherwise, if the query result does not fit into a single
+ * {@link android.database.CursorWindow CursorWindow}, the query result may be corrupted due to
+ * changes in the database in between cursor window swaps.
+ * <li>If the result of the query is a Pojo with {@link Relation} fields, these fields are
+ * queried separately. To receive consistent results between these queries, you probably want
+ * to run them in a single transaction.
+ * </ol>
+ * Example:
+ * <pre>
+ * class ProductWithReviews extends Product {
+ * {@literal @}Relation(parentColumn = "id", entityColumn = "productId", entity = Review.class)
+ * public List<Review> reviews;
+ * }
+ * {@literal @}Dao
+ * public interface ProductDao {
+ * {@literal @}Transaction {@literal @}Query("SELECT * from products")
+ * public List<ProductWithReviews> loadAll();
+ * }
+ * </pre>
+ * If the query is an async query (e.g. returns a {@link android.arch.lifecycle.LiveData LiveData}
+ * or RxJava Flowable, the transaction is properly handled when the query is run, not when the
+ * method is called.
+ * <p>
+ * Putting this annotation on an {@link Insert}, {@link Update} or {@link Delete} method has no
+ * impact because they are always run inside a transaction. Similarly, if it is annotated with
+ * {@link Query} but runs an update or delete statement, it is automatically wrapped in a
+ * transaction.
*/
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.CLASS)
diff --git a/room/compiler/src/main/kotlin/android/arch/persistence/room/RoomProcessor.kt b/room/compiler/src/main/kotlin/android/arch/persistence/room/RoomProcessor.kt
index 3b11efd..ad7621f 100644
--- a/room/compiler/src/main/kotlin/android/arch/persistence/room/RoomProcessor.kt
+++ b/room/compiler/src/main/kotlin/android/arch/persistence/room/RoomProcessor.kt
@@ -81,7 +81,6 @@
}
}
}
- context.databaseVerifier?.closeConnection()
return mutableSetOf()
}
override fun annotations(): MutableSet<out Class<out Annotation>> {
diff --git a/room/compiler/src/main/kotlin/android/arch/persistence/room/ext/javapoet_ext.kt b/room/compiler/src/main/kotlin/android/arch/persistence/room/ext/javapoet_ext.kt
index 6dc71f6..066bd1f 100644
--- a/room/compiler/src/main/kotlin/android/arch/persistence/room/ext/javapoet_ext.kt
+++ b/room/compiler/src/main/kotlin/android/arch/persistence/room/ext/javapoet_ext.kt
@@ -78,13 +78,15 @@
ClassName.get("android.arch.persistence.room.util", "TableInfo.Column")
val TABLE_INFO_FOREIGN_KEY : ClassName =
ClassName.get("android.arch.persistence.room.util", "TableInfo.ForeignKey")
+ val TABLE_INFO_INDEX : ClassName =
+ ClassName.get("android.arch.persistence.room.util", "TableInfo.Index")
val LIMIT_OFFSET_DATA_SOURCE : ClassName =
ClassName.get("android.arch.persistence.room.paging", "LimitOffsetDataSource")
}
object ArchTypeNames {
val APP_EXECUTOR : ClassName =
- ClassName.get("android.arch.core.executor", "AppToolkitTaskExecutor")
+ ClassName.get("android.arch.core.executor", "ArchTaskExecutor")
}
object PagingTypeNames {
diff --git a/room/compiler/src/main/kotlin/android/arch/persistence/room/parser/SqlParser.kt b/room/compiler/src/main/kotlin/android/arch/persistence/room/parser/SqlParser.kt
index a4e8946..85e89d1 100644
--- a/room/compiler/src/main/kotlin/android/arch/persistence/room/parser/SqlParser.kt
+++ b/room/compiler/src/main/kotlin/android/arch/persistence/room/parser/SqlParser.kt
@@ -24,7 +24,6 @@
import org.antlr.v4.runtime.Recognizer
import org.antlr.v4.runtime.tree.ParseTree
import org.antlr.v4.runtime.tree.TerminalNode
-import java.util.ArrayList
import javax.annotation.processing.ProcessingEnvironment
import javax.lang.model.type.TypeKind
import javax.lang.model.type.TypeMirror
@@ -120,6 +119,7 @@
class SqlParser {
companion object {
+ private val INVALID_IDENTIFIER_CHARS = arrayOf('`', '\"')
fun parse(input: String): ParsedQuery {
val inputStream = ANTLRInputStream(input)
val lexer = SQLiteLexer(inputStream)
@@ -153,6 +153,9 @@
listOf("unknown error while parsing $input : ${antlrError.message}"))
}
}
+
+ fun isValidIdentifier(input : String) : Boolean =
+ input.isNotBlank() && INVALID_IDENTIFIER_CHARS.none { input.contains(it) }
}
}
diff --git a/room/compiler/src/main/kotlin/android/arch/persistence/room/processor/DaoProcessor.kt b/room/compiler/src/main/kotlin/android/arch/persistence/room/processor/DaoProcessor.kt
index 2093d91..c705eef 100644
--- a/room/compiler/src/main/kotlin/android/arch/persistence/room/processor/DaoProcessor.kt
+++ b/room/compiler/src/main/kotlin/android/arch/persistence/room/processor/DaoProcessor.kt
@@ -110,9 +110,10 @@
executableElement = it).process()
} ?: emptyList()
- val transactionMethods = allMembers.filter {
- it.hasAnnotation(Transaction::class)
- && it.kind == ElementKind.METHOD
+ val transactionMethods = allMembers.filter { member ->
+ member.hasAnnotation(Transaction::class)
+ && member.kind == ElementKind.METHOD
+ && PROCESSED_ANNOTATIONS.none { member.hasAnnotation(it) }
// TODO: Exclude abstract methods and let @Query handle that case
}.map {
TransactionMethodProcessor(
@@ -161,5 +162,4 @@
element.toString(), dbType.toString()))
}
}
-
}
diff --git a/room/compiler/src/main/kotlin/android/arch/persistence/room/processor/DatabaseProcessor.kt b/room/compiler/src/main/kotlin/android/arch/persistence/room/processor/DatabaseProcessor.kt
index 9ebf6df..90b24e1 100644
--- a/room/compiler/src/main/kotlin/android/arch/persistence/room/processor/DatabaseProcessor.kt
+++ b/room/compiler/src/main/kotlin/android/arch/persistence/room/processor/DatabaseProcessor.kt
@@ -50,6 +50,14 @@
}
fun process(): Database {
+ try {
+ return doProcess()
+ } finally {
+ context.databaseVerifier?.closeConnection(context)
+ }
+ }
+
+ private fun doProcess(): Database {
val dbAnnotation = MoreElements
.getAnnotationMirror(element, android.arch.persistence.room.Database::class.java)
.orNull()
diff --git a/room/compiler/src/main/kotlin/android/arch/persistence/room/processor/EntityProcessor.kt b/room/compiler/src/main/kotlin/android/arch/persistence/room/processor/EntityProcessor.kt
index c9e3e18..405c6b1 100644
--- a/room/compiler/src/main/kotlin/android/arch/persistence/room/processor/EntityProcessor.kt
+++ b/room/compiler/src/main/kotlin/android/arch/persistence/room/processor/EntityProcessor.kt
@@ -22,6 +22,7 @@
import android.arch.persistence.room.ext.getAsStringList
import android.arch.persistence.room.ext.toType
import android.arch.persistence.room.parser.SQLTypeAffinity
+import android.arch.persistence.room.parser.SqlParser
import android.arch.persistence.room.processor.ProcessorErrors.INDEX_COLUMNS_CANNOT_BE_EMPTY
import android.arch.persistence.room.processor.ProcessorErrors.RELATION_IN_ENTITY
import android.arch.persistence.room.processor.cache.Cache
@@ -40,12 +41,15 @@
import com.google.auto.common.MoreTypes
import javax.lang.model.element.AnnotationMirror
import javax.lang.model.element.AnnotationValue
+import javax.lang.model.element.Name
import javax.lang.model.element.TypeElement
import javax.lang.model.type.TypeKind
import javax.lang.model.type.TypeMirror
import javax.lang.model.util.SimpleAnnotationValueVisitor6
-class EntityProcessor(baseContext: Context, val element: TypeElement) {
+class EntityProcessor(baseContext: Context,
+ val element: TypeElement,
+ val referenceStack: LinkedHashSet<Name> = LinkedHashSet<Name>()) {
val context = baseContext.fork(element)
fun process(): Entity {
@@ -60,7 +64,8 @@
baseContext = context,
element = element,
bindingScope = FieldProcessor.BindingScope.TWO_WAY,
- parent = null).process()
+ parent = null,
+ referenceStack = referenceStack).process()
context.checker.check(pojo.relations.isEmpty(), element, RELATION_IN_ENTITY)
val annotation = MoreElements.getAnnotationMirror(element,
android.arch.persistence.room.Entity::class.java).orNull()
@@ -112,7 +117,7 @@
val indexInputs = entityIndices + fieldIndices + superIndices
val indices = validateAndCreateIndices(indexInputs, pojo)
- val primaryKey = findPrimaryKey(pojo.fields, pojo.embeddedFields)
+ val primaryKey = findAndValidatePrimaryKey(pojo.fields, pojo.embeddedFields)
val affinity = primaryKey.fields.firstOrNull()?.affinity ?: SQLTypeAffinity.TEXT
context.checker.check(
!primaryKey.autoGenerateId || affinity == SQLTypeAffinity.INTEGER,
@@ -123,6 +128,13 @@
val entityForeignKeys = validateAndCreateForeignKeyReferences(foreignKeyInputs, pojo)
checkIndicesForForeignKeys(entityForeignKeys, primaryKey, indices)
+ context.checker.check(SqlParser.isValidIdentifier(tableName), element,
+ ProcessorErrors.INVALID_TABLE_NAME)
+ pojo.fields.forEach {
+ context.checker.check(SqlParser.isValidIdentifier(it.columnName), it.element,
+ ProcessorErrors.INVALID_COLUMN_NAME)
+ }
+
val entity = Entity(element = element,
tableName = tableName,
type = pojo.type,
@@ -226,7 +238,7 @@
}.filterNotNull()
}
- private fun findPrimaryKey(fields: List<Field>, embeddedFields: List<EmbeddedField>)
+ private fun findAndValidatePrimaryKey(fields: List<Field>, embeddedFields: List<EmbeddedField>)
: PrimaryKey {
val candidates = collectPrimaryKeysFromEntityAnnotations(element, fields) +
collectPrimaryKeysFromPrimaryKeyAnnotations(fields) +
@@ -235,14 +247,28 @@
context.checker.check(candidates.isNotEmpty(), element, ProcessorErrors.MISSING_PRIMARY_KEY)
// 1. If a key is not autogenerated, but is Primary key or is part of Primary key we
- // force the @NonNull annotation
+ // force the @NonNull annotation. If the key is a single Primary Key, Integer or Long, we
+ // don't force the @NonNull annotation since SQLite will automatically generate IDs.
// 2. If a key is autogenerate, we generate NOT NULL in table spec, but we don't require
// @NonNull annotation on the field itself.
candidates.filter { candidate -> !candidate.autoGenerateId }
.map { candidate ->
candidate.fields.map { field ->
- context.checker.check(field.nonNull, field.element,
- ProcessorErrors.PRIMARY_KEY_NULL)
+ if (candidate.fields.size > 1 ||
+ (candidate.fields.size == 1
+ && field.affinity != SQLTypeAffinity.INTEGER)) {
+ context.checker.check(field.nonNull, field.element,
+ ProcessorErrors.primaryKeyNull(field.getPath()))
+ // Validate parents for nullability
+ var parent = field.parent
+ while (parent != null) {
+ val parentField = parent.field
+ context.checker.check(parentField.nonNull,
+ parentField.element,
+ ProcessorErrors.primaryKeyNull(parentField.getPath()))
+ parent = parentField.parent
+ }
+ }
}
}
@@ -498,7 +524,7 @@
}
private fun createIndexName(columnNames: List<String>, tableName: String): String {
- return "index_" + tableName + "_" + columnNames.joinToString("_")
+ return Index.DEFAULT_PREFIX + tableName + "_" + columnNames.joinToString("_")
}
private fun extractForeignKeys(annotation: AnnotationMirror): List<ForeignKeyInput> {
diff --git a/room/compiler/src/main/kotlin/android/arch/persistence/room/processor/PojoProcessor.kt b/room/compiler/src/main/kotlin/android/arch/persistence/room/processor/PojoProcessor.kt
index e83d1ef..535e116 100644
--- a/room/compiler/src/main/kotlin/android/arch/persistence/room/processor/PojoProcessor.kt
+++ b/room/compiler/src/main/kotlin/android/arch/persistence/room/processor/PojoProcessor.kt
@@ -16,10 +16,10 @@
package android.arch.persistence.room.processor
-import android.arch.persistence.room.Relation
import android.arch.persistence.room.ColumnInfo
import android.arch.persistence.room.Embedded
import android.arch.persistence.room.Ignore
+import android.arch.persistence.room.Relation
import android.arch.persistence.room.ext.getAllFieldsIncludingPrivateSupers
import android.arch.persistence.room.ext.getAnnotationValue
import android.arch.persistence.room.ext.getAsString
@@ -35,24 +35,24 @@
import android.arch.persistence.room.processor.cache.Cache
import android.arch.persistence.room.vo.CallType
import android.arch.persistence.room.vo.Constructor
-import android.arch.persistence.room.vo.Field
-import android.arch.persistence.room.vo.FieldGetter
import android.arch.persistence.room.vo.EmbeddedField
import android.arch.persistence.room.vo.Entity
+import android.arch.persistence.room.vo.Field
+import android.arch.persistence.room.vo.FieldGetter
import android.arch.persistence.room.vo.FieldSetter
import android.arch.persistence.room.vo.Pojo
+import android.arch.persistence.room.vo.Warning
import com.google.auto.common.AnnotationMirrors
import com.google.auto.common.MoreElements
import com.google.auto.common.MoreTypes
-import javax.lang.model.element.Element
import javax.lang.model.element.ExecutableElement
-import javax.lang.model.element.Modifier
import javax.lang.model.element.Modifier.ABSTRACT
import javax.lang.model.element.Modifier.PRIVATE
import javax.lang.model.element.Modifier.PROTECTED
import javax.lang.model.element.Modifier.PUBLIC
import javax.lang.model.element.Modifier.STATIC
import javax.lang.model.element.Modifier.TRANSIENT
+import javax.lang.model.element.Name
import javax.lang.model.element.TypeElement
import javax.lang.model.element.VariableElement
import javax.lang.model.type.DeclaredType
@@ -63,9 +63,11 @@
/**
* Processes any class as if it is a Pojo.
*/
-class PojoProcessor(baseContext: Context, val element: TypeElement,
+class PojoProcessor(baseContext: Context,
+ val element: TypeElement,
val bindingScope: FieldProcessor.BindingScope,
- val parent: EmbeddedField?) {
+ val parent: EmbeddedField?,
+ val referenceStack: LinkedHashSet<Name> = LinkedHashSet<Name>()) {
val context = baseContext.fork(element)
companion object {
val PROCESSED_ANNOTATIONS = listOf(ColumnInfo::class, Embedded::class,
@@ -73,12 +75,17 @@
}
fun process() : Pojo {
return context.cache.pojos.get(Cache.PojoKey(element, bindingScope, parent), {
- doProcess()
+ referenceStack.add(element.qualifiedName)
+ try {
+ doProcess()
+ }
+ finally {
+ referenceStack.remove(element.qualifiedName)
+ }
})
}
private fun doProcess(): Pojo {
- // TODO handle recursion: b/35980205
val declaredType = MoreTypes.asDeclared(element.asType())
// TODO handle conflicts with super: b/35568142
val allFields = element.getAllFieldsIncludingPrivateSupers(context.processingEnv)
@@ -103,6 +110,7 @@
null
}
}
+
val myFields = allFields[null]
?.map {
FieldProcessor(
@@ -113,22 +121,25 @@
fieldParent = parent).process()
} ?: emptyList()
- val embeddedFields = allFields[Embedded::class]
- ?.map {
- processEmbeddedField(declaredType, it)
- } ?: emptyList()
- val subFields = embeddedFields.flatMap { it.pojo.fields }
+ val embeddedFields =
+ allFields[Embedded::class]
+ ?.map {
+ processEmbeddedField(declaredType, it)
+ }
+ ?.filterNotNull()
+ ?: emptyList()
+ val subFields = embeddedFields.flatMap { it.pojo.fields }
val fields = myFields + subFields
val myRelationsList = allFields[Relation::class]
?.map {
processRelationField(fields, declaredType, it)
}
- ?.filterNotNull() ?: emptyList()
+ ?.filterNotNull()
+ ?: emptyList()
val subRelations = embeddedFields.flatMap { it.pojo.relations }
-
val relations = myRelationsList + subRelations
fields.groupBy { it.columnName }
@@ -141,6 +152,7 @@
context.logger.e(it.element, POJO_FIELD_HAS_DUPLICATE_COLUMN_NAME)
}
}
+
val methods = MoreElements.getLocalAndInheritedMethods(element,
context.processingEnv.elementUtils)
.filter {
@@ -156,6 +168,7 @@
val setterCandidates = methods.filter {
it.parameters.size == 1 && it.returnType.kind == TypeKind.VOID
}
+
// don't try to find a constructor for binding to statement.
val constructor = if (bindingScope == FieldProcessor.BindingScope.BIND_TO_STMT) {
// we don't need to construct this POJO.
@@ -177,13 +190,12 @@
assignSetter(it.field, setterCandidates, constructor)
}
- val pojo = Pojo(element = element,
+ return Pojo(element = element,
type = declaredType,
fields = fields,
embeddedFields = embeddedFields,
relations = relations,
constructor = constructor)
- return pojo
}
private fun chooseConstructor(myFields: List<Field>, embedded: List<EmbeddedField>)
@@ -264,41 +276,69 @@
}
context.logger.e(element, ProcessorErrors.MISSING_POJO_CONSTRUCTOR)
return null
- }
- if (goodConstructors.size > 1) {
+ } else if (goodConstructors.size > 1) {
+ // if there is a no-arg constructor, pick it. Even though it is weird, easily happens
+ // with kotlin data classes.
+ val noArg = goodConstructors.firstOrNull { it.params.isEmpty() }
+ if (noArg != null) {
+ context.logger.w(Warning.DEFAULT_CONSTRUCTOR, element,
+ ProcessorErrors.TOO_MANY_POJO_CONSTRUCTORS_CHOOSING_NO_ARG)
+ return noArg
+ }
goodConstructors.forEach {
context.logger.e(it.element, ProcessorErrors.TOO_MANY_POJO_CONSTRUCTORS)
}
return null
+ } else {
+ return goodConstructors.first()
}
- return goodConstructors.first()
}
- private fun processEmbeddedField(declaredType: DeclaredType?, it: Element): EmbeddedField {
- val fieldPrefix = it.getAnnotationValue(Embedded::class.java, "prefix")
- ?.toString() ?: ""
+ private fun processEmbeddedField(declaredType: DeclaredType?, variableElement: VariableElement)
+ : EmbeddedField? {
+
+ val asTypeElement = MoreTypes.asTypeElement(variableElement.asType())
+
+ if (detectReferenceRecursion(asTypeElement)) {
+ return null
+ }
+
+ val fieldPrefix = variableElement
+ .getAnnotationValue(Embedded::class.java, "prefix")
+ ?.toString()
+ ?: ""
val inheritedPrefix = parent?.prefix ?: ""
- val embeddedField = Field(
- it,
- it.simpleName.toString(),
- type = context.processingEnv.typeUtils.asMemberOf(declaredType, it),
- affinity = null,
- parent = parent)
+ val embeddedField = Field(variableElement,
+ variableElement.simpleName.toString(),
+ type = context
+ .processingEnv
+ .typeUtils
+ .asMemberOf(declaredType, variableElement),
+ affinity = null,
+ parent = parent)
val subParent = EmbeddedField(
field = embeddedField,
prefix = inheritedPrefix + fieldPrefix,
parent = parent)
- val asVariable = MoreElements.asVariable(it)
- subParent.pojo = PojoProcessor(baseContext = context.fork(it),
- element = MoreTypes.asTypeElement(asVariable.asType()),
+ subParent.pojo = PojoProcessor(
+ baseContext = context.fork(variableElement),
+ element = asTypeElement,
bindingScope = bindingScope,
- parent = subParent).process()
+ parent = subParent,
+ referenceStack = referenceStack).process()
return subParent
}
private fun processRelationField(myFields : List<Field>, container: DeclaredType?,
relationElement: VariableElement)
: android.arch.persistence.room.vo.Relation? {
+
+ val asTypeElement = MoreTypes.asTypeElement(MoreElements.asVariable(relationElement).asType())
+
+ if (detectReferenceRecursion(asTypeElement)) {
+ return null
+ }
+
val annotation = MoreElements.getAnnotationMirror(relationElement, Relation::class.java)
.orNull()!!
val parentColumnInput = AnnotationMirrors.getAnnotationValue(annotation, "parentColumn")
@@ -339,14 +379,17 @@
val entity : Entity
if (entityClassInput == null
|| MoreTypes.isTypeOf(Any::class.java, entityClassInput)) {
- entity = EntityProcessor(context, typeArgElement).process()
+ entity = EntityProcessor(context, typeArgElement, referenceStack).process()
pojo = entity
} else {
- entity = EntityProcessor(context, MoreTypes.asTypeElement(entityClassInput)).process()
- pojo = PojoProcessor(baseContext = context,
+ entity = EntityProcessor(context, MoreTypes.asTypeElement(entityClassInput),
+ referenceStack).process()
+ pojo = PojoProcessor(
+ baseContext = context,
element = typeArgElement,
bindingScope = FieldProcessor.BindingScope.READ_FROM_CURSOR,
- parent = parent).process()
+ parent = parent,
+ referenceStack = referenceStack).process()
}
// now find the field in the entity.
val entityColumnInput = AnnotationMirrors.getAnnotationValue(annotation, "entityColumn")
@@ -395,6 +438,31 @@
)
}
+ private fun detectReferenceRecursion(typeElement: TypeElement): Boolean {
+ if (referenceStack.contains(typeElement.qualifiedName)) {
+ context.logger.e(
+ typeElement,
+ ProcessorErrors
+ .RECURSIVE_REFERENCE_DETECTED
+ .format(computeReferenceRecursionString(typeElement)))
+ return true
+ }
+ return false
+ }
+
+ private fun computeReferenceRecursionString(typeElement: TypeElement): String {
+ val recursiveTailTypeName = typeElement.qualifiedName
+
+ val referenceRecursionList = mutableListOf<Name>()
+ with (referenceRecursionList) {
+ add(recursiveTailTypeName)
+ addAll(referenceStack.toList().takeLastWhile { it != recursiveTailTypeName })
+ add(recursiveTailTypeName)
+ }
+
+ return referenceRecursionList.joinToString(" -> ")
+ }
+
private fun assignGetters(fields: List<Field>, getterCandidates: List<ExecutableElement>) {
fields.forEach { field ->
assignGetter(field, getterCandidates)
diff --git a/room/compiler/src/main/kotlin/android/arch/persistence/room/processor/ProcessorErrors.kt b/room/compiler/src/main/kotlin/android/arch/persistence/room/processor/ProcessorErrors.kt
index a576aa2..4752478 100644
--- a/room/compiler/src/main/kotlin/android/arch/persistence/room/processor/ProcessorErrors.kt
+++ b/room/compiler/src/main/kotlin/android/arch/persistence/room/processor/ProcessorErrors.kt
@@ -25,7 +25,6 @@
import android.arch.persistence.room.vo.CustomTypeConverter
import android.arch.persistence.room.vo.Field
import com.squareup.javapoet.TypeName
-import javax.lang.model.type.TypeMirror
object ProcessorErrors {
private fun String.trim(): String {
@@ -38,6 +37,8 @@
val INVALID_ON_CONFLICT_VALUE = "On conflict value must be one of @OnConflictStrategy values."
val INVALID_INSERTION_METHOD_RETURN_TYPE = "Methods annotated with @Insert can return either" +
" void, long, Long, long[], Long[] or List<Long>."
+ val TRANSACTION_REFERENCE_DOCS = "https://developer.android.com/reference/android/arch/" +
+ "persistence/room/Transaction.html"
fun insertionMethodReturnTypeMismatch(definedReturn : TypeName,
expectedReturnTypes : List<TypeName>) : String {
@@ -123,7 +124,13 @@
" @Update but does not have any parameters to update."
val TRANSACTION_METHOD_MODIFIERS = "Method annotated with @Transaction must not be " +
- "private, final, or abstract."
+ "private, final, or abstract. It can be abstract only if the method is also" +
+ " annotated with @Query."
+
+ val TRANSACTION_MISSING_ON_RELATION = "The return value includes a Pojo with a @Relation." +
+ " It is usually desired to annotate this method with @Transaction to avoid" +
+ " possibility of inconsistent results between the Pojo and its relations. See " +
+ TRANSACTION_REFERENCE_DOCS + " for details."
val CANNOT_FIND_ENTITY_FOR_SHORTCUT_QUERY_PARAMETER = "Type of the parameter must be a class " +
"annotated with @Entity or a collection/array of it."
@@ -134,9 +141,12 @@
val LIVE_DATA_QUERY_WITHOUT_SELECT = "LiveData return type can only be used with SELECT" +
" queries."
- val LIVE_DATA_QUERY_NOTHING_TO_OBSERVE = "LiveData return type can only be used with SELECT" +
- " queries that directly or indirectly (via @Relation, for example) access at least" +
- " one table.";
+ val OBSERVABLE_QUERY_NOTHING_TO_OBSERVE = "Observable query return type (LiveData, Flowable" +
+ " etc) can only be used with SELECT queries that directly or indirectly (via" +
+ " @Relation, for example) access at least one table."
+
+ val RECURSIVE_REFERENCE_DETECTED = "Recursive referencing through @Embedded and/or @Relation " +
+ "detected: %s"
private val TOO_MANY_MATCHING_GETTERS = "Ambiguous getter for %s. All of the following " +
"match: %s. You can @Ignore the ones that you don't want to match."
@@ -197,6 +207,16 @@
""".trim()
}
+ fun pojoMissingNonNull(pojoTypeName: TypeName, missingPojoFields: List<String>,
+ allQueryColumns: List<String>) : String {
+ return """
+ The columns returned by the query does not have the fields
+ [${missingPojoFields.joinToString(",")}] in $pojoTypeName even though they are
+ annotated as non-null or primitive.
+ Columns returned by the query: [${allQueryColumns.joinToString(",")}]
+ """.trim()
+ }
+
fun cursorPojoMismatch(pojoTypeName: TypeName,
unusedColumns: List<String>, allColumns: List<String>,
unusedFields: List<Field>, allFields: List<Field>): String {
@@ -448,9 +468,22 @@
unwanted constructors with @Ignore.
""".trim()
+ val TOO_MANY_POJO_CONSTRUCTORS_CHOOSING_NO_ARG = """
+ There are multiple good constructors and Room will pick the no-arg constructor.
+ You can use the @Ignore annotation to eliminate unwanted constructors.
+ """.trim()
+
val PAGING_SPECIFY_DATA_SOURCE_TYPE = "For now, Room only supports TiledDataSource class."
- val PRIMARY_KEY_NULL = "You must annotate primary keys with @NonNull. SQLite considers this a " +
- "bug and Room does not allow it. See SQLite docs for details: " +
- "https://www.sqlite.org/lang_createtable.html"
+ fun primaryKeyNull(field: String): String{
+ return "You must annotate primary keys with @NonNull. \"$field\" is nullable. SQLite " +
+ "considers this a " +
+ "bug and Room does not allow it. See SQLite docs for details: " +
+ "https://www.sqlite.org/lang_createtable.html"
+ }
+
+ val INVALID_COLUMN_NAME = "Invalid column name. Room does not allow using ` or \" in column" +
+ " names"
+
+ val INVALID_TABLE_NAME = "Invalid table name. Room does not allow using ` or \" in table names"
}
diff --git a/room/compiler/src/main/kotlin/android/arch/persistence/room/processor/QueryMethodProcessor.kt b/room/compiler/src/main/kotlin/android/arch/persistence/room/processor/QueryMethodProcessor.kt
index fc60074..ebd586a 100644
--- a/room/compiler/src/main/kotlin/android/arch/persistence/room/processor/QueryMethodProcessor.kt
+++ b/room/compiler/src/main/kotlin/android/arch/persistence/room/processor/QueryMethodProcessor.kt
@@ -18,15 +18,18 @@
import android.arch.persistence.room.Query
import android.arch.persistence.room.SkipQueryVerification
+import android.arch.persistence.room.Transaction
import android.arch.persistence.room.ext.hasAnnotation
import android.arch.persistence.room.parser.ParsedQuery
import android.arch.persistence.room.parser.QueryType
import android.arch.persistence.room.parser.SqlParser
import android.arch.persistence.room.solver.query.result.LiveDataQueryResultBinder
+import android.arch.persistence.room.solver.query.result.PojoRowAdapter
import android.arch.persistence.room.verifier.DatabaseVerificaitonErrors
import android.arch.persistence.room.verifier.DatabaseVerifier
import android.arch.persistence.room.vo.QueryMethod
import android.arch.persistence.room.vo.QueryParameter
+import android.arch.persistence.room.vo.Warning
import com.google.auto.common.AnnotationMirrors
import com.google.auto.common.MoreElements
import com.google.auto.common.MoreTypes
@@ -91,6 +94,22 @@
ProcessorErrors.LIVE_DATA_QUERY_WITHOUT_SELECT)
}
+ val inTransaction = when (query.type) {
+ QueryType.SELECT -> executableElement.hasAnnotation(Transaction::class)
+ else -> true
+ }
+
+ if (query.type == QueryType.SELECT && !inTransaction) {
+ // put a warning if it is has relations and not annotated w/ transaction
+ resultBinder.adapter?.rowAdapter?.let { rowAdapter ->
+ if (rowAdapter is PojoRowAdapter
+ && rowAdapter.relationCollectors.isNotEmpty()) {
+ context.logger.w(Warning.RELATION_QUERY_WITHOUT_TRANSACTION,
+ executableElement, ProcessorErrors.TRANSACTION_MISSING_ON_RELATION)
+ }
+ }
+ }
+
val queryMethod = QueryMethod(
element = executableElement,
query = query,
@@ -101,6 +120,7 @@
baseContext = context,
containing = containing,
element = it).process() },
+ inTransaction = inTransaction,
queryResultBinder = resultBinder)
val missing = queryMethod.sectionToParamMapping
diff --git a/room/compiler/src/main/kotlin/android/arch/persistence/room/processor/TransactionMethodProcessor.kt b/room/compiler/src/main/kotlin/android/arch/persistence/room/processor/TransactionMethodProcessor.kt
index f861ebe..256304a 100644
--- a/room/compiler/src/main/kotlin/android/arch/persistence/room/processor/TransactionMethodProcessor.kt
+++ b/room/compiler/src/main/kotlin/android/arch/persistence/room/processor/TransactionMethodProcessor.kt
@@ -20,9 +20,9 @@
import android.arch.persistence.room.vo.TransactionMethod
import javax.lang.model.element.ExecutableElement
import javax.lang.model.element.Modifier.ABSTRACT
-import javax.lang.model.type.DeclaredType
import javax.lang.model.element.Modifier.FINAL
import javax.lang.model.element.Modifier.PRIVATE
+import javax.lang.model.type.DeclaredType
class TransactionMethodProcessor(baseContext: Context,
val containing: DeclaredType,
@@ -31,7 +31,6 @@
val context = baseContext.fork(executableElement)
fun process(): TransactionMethod {
- // TODO: Remove abstract check
context.checker.check(!executableElement.hasAnyOf(PRIVATE, FINAL, ABSTRACT),
executableElement, ProcessorErrors.TRANSACTION_METHOD_MODIFIERS)
diff --git a/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/ObservableQueryResultBinderProvider.kt b/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/ObservableQueryResultBinderProvider.kt
new file mode 100644
index 0000000..89b0072
--- /dev/null
+++ b/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/ObservableQueryResultBinderProvider.kt
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.arch.persistence.room.solver
+
+import android.arch.persistence.room.parser.ParsedQuery
+import android.arch.persistence.room.processor.Context
+import android.arch.persistence.room.processor.ProcessorErrors
+import android.arch.persistence.room.solver.query.result.QueryResultAdapter
+import android.arch.persistence.room.solver.query.result.QueryResultBinder
+import javax.lang.model.type.DeclaredType
+import javax.lang.model.type.TypeMirror
+
+/**
+ * Binder provider class that has common functionality for observables.
+ */
+abstract class ObservableQueryResultBinderProvider(val context: Context)
+ : QueryResultBinderProvider {
+ protected abstract fun extractTypeArg(declared: DeclaredType) : TypeMirror
+ protected abstract fun create(typeArg: TypeMirror,
+ resultAdapter: QueryResultAdapter?,
+ tableNames : Set<String>) : QueryResultBinder
+
+ override final fun provide(declared: DeclaredType, query: ParsedQuery): QueryResultBinder {
+ val typeArg = extractTypeArg(declared)
+ val adapter = context.typeAdapterStore.findQueryResultAdapter(typeArg, query)
+ val tableNames = ((adapter?.accessedTableNames() ?: emptyList()) +
+ query.tables.map { it.name }).toSet()
+ context.checker.check(!tableNames.isEmpty(),
+ declared.asElement(),
+ ProcessorErrors.OBSERVABLE_QUERY_NOTHING_TO_OBSERVE)
+ return create(
+ typeArg = typeArg,
+ resultAdapter = adapter,
+ tableNames = tableNames
+ )
+ }
+}
\ No newline at end of file
diff --git a/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/binderprovider/FlowableQueryResultBinderProvider.kt b/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/binderprovider/FlowableQueryResultBinderProvider.kt
index 828f5a7..6a2c901 100644
--- a/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/binderprovider/FlowableQueryResultBinderProvider.kt
+++ b/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/binderprovider/FlowableQueryResultBinderProvider.kt
@@ -18,17 +18,17 @@
import android.arch.persistence.room.ext.RoomRxJava2TypeNames
import android.arch.persistence.room.ext.RxJava2TypeNames
-import android.arch.persistence.room.parser.ParsedQuery
import android.arch.persistence.room.processor.Context
import android.arch.persistence.room.processor.ProcessorErrors
-import android.arch.persistence.room.solver.QueryResultBinderProvider
+import android.arch.persistence.room.solver.ObservableQueryResultBinderProvider
import android.arch.persistence.room.solver.query.result.FlowableQueryResultBinder
+import android.arch.persistence.room.solver.query.result.QueryResultAdapter
import android.arch.persistence.room.solver.query.result.QueryResultBinder
-import com.google.common.annotations.VisibleForTesting
import javax.lang.model.type.DeclaredType
import javax.lang.model.type.TypeMirror
-class FlowableQueryResultBinderProvider(val context : Context) : QueryResultBinderProvider {
+class FlowableQueryResultBinderProvider(context: Context) :
+ ObservableQueryResultBinderProvider(context) {
private val flowableTypeMirror: TypeMirror? by lazy {
context.processingEnv.elementUtils
.getTypeElement(RxJava2TypeNames.FLOWABLE.toString())?.asType()
@@ -39,10 +39,14 @@
.getTypeElement(RoomRxJava2TypeNames.RX_ROOM.toString()) != null
}
- override fun provide(declared: DeclaredType, query: ParsedQuery): QueryResultBinder {
- val typeArg = declared.typeArguments.first()
- return FlowableQueryResultBinder(typeArg, query.tables.map { it.name },
- context.typeAdapterStore.findQueryResultAdapter(typeArg, query))
+ override fun extractTypeArg(declared: DeclaredType): TypeMirror = declared.typeArguments.first()
+
+ override fun create(typeArg: TypeMirror, resultAdapter: QueryResultAdapter?,
+ tableNames: Set<String>): QueryResultBinder {
+ return FlowableQueryResultBinder(
+ typeArg = typeArg,
+ queryTableNames = tableNames,
+ adapter = resultAdapter)
}
override fun matches(declared: DeclaredType): Boolean =
diff --git a/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/binderprovider/LiveDataQueryResultBinderProvider.kt b/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/binderprovider/LiveDataQueryResultBinderProvider.kt
index 7e6725f..650ec19 100644
--- a/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/binderprovider/LiveDataQueryResultBinderProvider.kt
+++ b/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/binderprovider/LiveDataQueryResultBinderProvider.kt
@@ -17,34 +17,29 @@
package android.arch.persistence.room.solver.binderprovider
import android.arch.persistence.room.ext.LifecyclesTypeNames
-import android.arch.persistence.room.parser.ParsedQuery
import android.arch.persistence.room.processor.Context
-import android.arch.persistence.room.processor.ProcessorErrors
-import android.arch.persistence.room.solver.QueryResultBinderProvider
+import android.arch.persistence.room.solver.ObservableQueryResultBinderProvider
import android.arch.persistence.room.solver.query.result.LiveDataQueryResultBinder
+import android.arch.persistence.room.solver.query.result.QueryResultAdapter
import android.arch.persistence.room.solver.query.result.QueryResultBinder
import javax.lang.model.type.DeclaredType
import javax.lang.model.type.TypeMirror
-class LiveDataQueryResultBinderProvider(val context : Context) : QueryResultBinderProvider {
+class LiveDataQueryResultBinderProvider(context : Context)
+ : ObservableQueryResultBinderProvider(context) {
private val liveDataTypeMirror: TypeMirror? by lazy {
context.processingEnv.elementUtils
.getTypeElement(LifecyclesTypeNames.LIVE_DATA.toString())?.asType()
}
- override fun provide(declared: DeclaredType, query: ParsedQuery): QueryResultBinder {
- val liveDataTypeArg = declared.typeArguments.first()
- val queryResultAdapter =
- context.typeAdapterStore.findQueryResultAdapter(liveDataTypeArg, query)
- val tableNames = ((queryResultAdapter?.accessedTableNames() ?: emptyList()) +
- query.tables.map { it.name }).toSet()
- context.checker.check(!tableNames.isEmpty(),
- declared.asElement(),
- ProcessorErrors.LIVE_DATA_QUERY_NOTHING_TO_OBSERVE);
+ override fun extractTypeArg(declared: DeclaredType): TypeMirror = declared.typeArguments.first()
+
+ override fun create(typeArg: TypeMirror, resultAdapter: QueryResultAdapter?,
+ tableNames: Set<String>): QueryResultBinder {
return LiveDataQueryResultBinder(
- liveDataTypeArg,
- tableNames,
- queryResultAdapter)
+ typeArg = typeArg,
+ tableNames = tableNames,
+ adapter = resultAdapter)
}
override fun matches(declared: DeclaredType): Boolean =
diff --git a/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/binderprovider/RxCallableQueryResultBinderProvider.kt b/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/binderprovider/RxCallableQueryResultBinderProvider.kt
index 84c71eb..0bd3fb1 100644
--- a/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/binderprovider/RxCallableQueryResultBinderProvider.kt
+++ b/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/binderprovider/RxCallableQueryResultBinderProvider.kt
@@ -38,8 +38,7 @@
override fun provide(declared: DeclaredType, query: ParsedQuery): QueryResultBinder {
val typeArg = declared.typeArguments.first()
val adapter = context.typeAdapterStore.findQueryResultAdapter(typeArg, query)
- return RxCallableQueryResultBinder(rxType,
- typeArg, InstantQueryResultBinder(adapter), adapter)
+ return RxCallableQueryResultBinder(rxType, typeArg, adapter)
}
override fun matches(declared: DeclaredType): Boolean =
diff --git a/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/query/result/BaseObservableQueryResultBinder.kt b/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/query/result/BaseObservableQueryResultBinder.kt
index 7872c33..883180c 100644
--- a/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/query/result/BaseObservableQueryResultBinder.kt
+++ b/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/query/result/BaseObservableQueryResultBinder.kt
@@ -22,6 +22,7 @@
import android.arch.persistence.room.ext.T
import android.arch.persistence.room.solver.CodeGenScope
import android.arch.persistence.room.writer.DaoWriter
+import com.squareup.javapoet.FieldSpec
import com.squareup.javapoet.MethodSpec
import javax.lang.model.element.Modifier
@@ -42,9 +43,17 @@
protected fun createRunQueryAndReturnStatements(builder: MethodSpec.Builder,
roomSQLiteQueryVar: String,
+ dbField: FieldSpec,
+ inTransaction: Boolean,
scope: CodeGenScope) {
+ val transactionWrapper = if (inTransaction) {
+ builder.transactionWrapper(dbField)
+ } else {
+ null
+ }
val outVar = scope.getTmpVar("_result")
val cursorVar = scope.getTmpVar("_cursor")
+ transactionWrapper?.beginTransactionWithControlFlow()
builder.apply {
addStatement("final $T $L = $N.query($L)", AndroidTypeNames.CURSOR, cursorVar,
DaoWriter.dbField, roomSQLiteQueryVar)
@@ -52,6 +61,7 @@
val adapterScope = scope.fork()
adapter?.convert(outVar, cursorVar, adapterScope)
addCode(adapterScope.builder().build())
+ transactionWrapper?.commitTransaction()
addStatement("return $L", outVar)
}
nextControlFlow("finally").apply {
@@ -59,5 +69,6 @@
}
endControlFlow()
}
+ transactionWrapper?.endTransactionWithControlFlow()
}
}
diff --git a/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/query/result/CursorQueryResultBinder.kt b/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/query/result/CursorQueryResultBinder.kt
index cd8ea74..06ec339 100644
--- a/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/query/result/CursorQueryResultBinder.kt
+++ b/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/query/result/CursorQueryResultBinder.kt
@@ -16,19 +16,34 @@
package android.arch.persistence.room.solver.query.result
+import android.arch.persistence.room.ext.AndroidTypeNames
import android.arch.persistence.room.ext.L
import android.arch.persistence.room.ext.N
+import android.arch.persistence.room.ext.T
import android.arch.persistence.room.solver.CodeGenScope
import android.arch.persistence.room.writer.DaoWriter
import com.squareup.javapoet.FieldSpec
class CursorQueryResultBinder : QueryResultBinder(NO_OP_RESULT_ADAPTER) {
- override fun convertAndReturn(roomSQLiteQueryVar: String, dbField: FieldSpec,
+ override fun convertAndReturn(roomSQLiteQueryVar: String,
+ dbField: FieldSpec,
+ inTransaction : Boolean,
scope: CodeGenScope) {
- scope.builder().apply {
- addStatement("return $N.query($L)", DaoWriter.dbField, roomSQLiteQueryVar)
+ val builder = scope.builder()
+ val transactionWrapper = if (inTransaction) {
+ builder.transactionWrapper(dbField)
+ } else {
+ null
}
+ transactionWrapper?.beginTransactionWithControlFlow()
+ val resultName = scope.getTmpVar("_tmpResult")
+ builder.addStatement("final $T $L = $N.query($L)", AndroidTypeNames.CURSOR, resultName,
+ dbField, roomSQLiteQueryVar)
+ transactionWrapper?.commitTransaction()
+ builder.addStatement("return $L", resultName)
+ transactionWrapper?.endTransactionWithControlFlow()
}
+
companion object {
private val NO_OP_RESULT_ADAPTER = object : QueryResultAdapter(null) {
override fun convert(outVarName: String, cursorVarName: String, scope: CodeGenScope) {
diff --git a/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/query/result/FlowableQueryResultBinder.kt b/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/query/result/FlowableQueryResultBinder.kt
index dbd66ce..e1a75b5 100644
--- a/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/query/result/FlowableQueryResultBinder.kt
+++ b/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/query/result/FlowableQueryResultBinder.kt
@@ -34,10 +34,12 @@
/**
* Binds the result as an RxJava2 Flowable.
*/
-class FlowableQueryResultBinder(val typeArg: TypeMirror, val queryTableNames: List<String>,
+class FlowableQueryResultBinder(val typeArg: TypeMirror, val queryTableNames: Set<String>,
adapter: QueryResultAdapter?)
: BaseObservableQueryResultBinder(adapter) {
- override fun convertAndReturn(roomSQLiteQueryVar: String, dbField: FieldSpec,
+ override fun convertAndReturn(roomSQLiteQueryVar: String,
+ dbField: FieldSpec,
+ inTransaction : Boolean,
scope: CodeGenScope) {
val callableImpl = TypeSpec.anonymousClassBuilder("").apply {
val typeName = typeArg.typeName()
@@ -47,7 +49,11 @@
returns(typeName)
addException(Exception::class.typeName())
addModifiers(Modifier.PUBLIC)
- createRunQueryAndReturnStatements(this, roomSQLiteQueryVar, scope)
+ createRunQueryAndReturnStatements(builder = this,
+ roomSQLiteQueryVar = roomSQLiteQueryVar,
+ inTransaction = inTransaction,
+ dbField = dbField,
+ scope = scope)
}.build())
addMethod(createFinalizeMethod(roomSQLiteQueryVar))
}.build()
diff --git a/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/query/result/InstantQueryResultBinder.kt b/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/query/result/InstantQueryResultBinder.kt
index ff15252..c18bf2d 100644
--- a/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/query/result/InstantQueryResultBinder.kt
+++ b/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/query/result/InstantQueryResultBinder.kt
@@ -27,8 +27,16 @@
* Instantly runs and returns the query.
*/
class InstantQueryResultBinder(adapter: QueryResultAdapter?) : QueryResultBinder(adapter) {
- override fun convertAndReturn(roomSQLiteQueryVar : String, dbField: FieldSpec,
+ override fun convertAndReturn(roomSQLiteQueryVar : String,
+ dbField: FieldSpec,
+ inTransaction : Boolean,
scope: CodeGenScope) {
+ val transactionWrapper = if (inTransaction) {
+ scope.builder().transactionWrapper(dbField)
+ } else {
+ null
+ }
+ transactionWrapper?.beginTransactionWithControlFlow()
scope.builder().apply {
val outVar = scope.getTmpVar("_result")
val cursorVar = scope.getTmpVar("_cursor")
@@ -36,6 +44,7 @@
DaoWriter.dbField, roomSQLiteQueryVar)
beginControlFlow("try").apply {
adapter?.convert(outVar, cursorVar, scope)
+ transactionWrapper?.commitTransaction()
addStatement("return $L", outVar)
}
nextControlFlow("finally").apply {
@@ -44,5 +53,6 @@
}
endControlFlow()
}
+ transactionWrapper?.endTransactionWithControlFlow()
}
}
diff --git a/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/query/result/LiveDataQueryResultBinder.kt b/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/query/result/LiveDataQueryResultBinder.kt
index a385a94..0ef8a93 100644
--- a/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/query/result/LiveDataQueryResultBinder.kt
+++ b/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/query/result/LiveDataQueryResultBinder.kt
@@ -40,7 +40,9 @@
adapter: QueryResultAdapter?)
: BaseObservableQueryResultBinder(adapter) {
@Suppress("JoinDeclarationAndAssignment")
- override fun convertAndReturn(roomSQLiteQueryVar : String, dbField: FieldSpec,
+ override fun convertAndReturn(roomSQLiteQueryVar : String,
+ dbField: FieldSpec,
+ inTransaction : Boolean,
scope: CodeGenScope) {
val typeName = typeArg.typeName()
@@ -55,6 +57,7 @@
typeName = typeName,
roomSQLiteQueryVar = roomSQLiteQueryVar,
dbField = dbField,
+ inTransaction = inTransaction,
scope = scope
))
addMethod(createFinalizeMethod(roomSQLiteQueryVar))
@@ -66,6 +69,7 @@
private fun createComputeMethod(roomSQLiteQueryVar: String, typeName: TypeName,
observerField: FieldSpec, dbField: FieldSpec,
+ inTransaction: Boolean,
scope: CodeGenScope): MethodSpec {
return MethodSpec.methodBuilder("compute").apply {
addAnnotation(Override::class.java)
@@ -79,7 +83,11 @@
}
endControlFlow()
- createRunQueryAndReturnStatements(this, roomSQLiteQueryVar, scope)
+ createRunQueryAndReturnStatements(builder = this,
+ roomSQLiteQueryVar = roomSQLiteQueryVar,
+ dbField = dbField,
+ inTransaction = inTransaction,
+ scope = scope)
}.build()
}
diff --git a/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/query/result/LivePagedListQueryResultBinder.kt b/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/query/result/LivePagedListQueryResultBinder.kt
index 39ea32b..c10f9fb 100644
--- a/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/query/result/LivePagedListQueryResultBinder.kt
+++ b/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/query/result/LivePagedListQueryResultBinder.kt
@@ -31,14 +31,20 @@
: QueryResultBinder(tiledDataSourceQueryResultBinder.listAdapter) {
@Suppress("HasPlatformType")
val typeName = tiledDataSourceQueryResultBinder.itemTypeName
- override fun convertAndReturn(roomSQLiteQueryVar: String, dbField: FieldSpec,
+ override fun convertAndReturn(roomSQLiteQueryVar: String,
+ dbField: FieldSpec,
+ inTransaction : Boolean,
scope: CodeGenScope) {
scope.builder().apply {
val pagedListProvider = TypeSpec
.anonymousClassBuilder("").apply {
superclass(ParameterizedTypeName.get(PagingTypeNames.LIVE_PAGED_LIST_PROVIDER,
Integer::class.typeName(), typeName))
- addMethod(createCreateDataSourceMethod(roomSQLiteQueryVar, dbField, scope))
+ addMethod(createCreateDataSourceMethod(
+ roomSQLiteQueryVar = roomSQLiteQueryVar,
+ dbField = dbField,
+ inTransaction = inTransaction,
+ scope = scope))
}.build()
addStatement("return $L", pagedListProvider)
}
@@ -46,14 +52,18 @@
private fun createCreateDataSourceMethod(roomSQLiteQueryVar: String,
dbField: FieldSpec,
+ inTransaction : Boolean,
scope: CodeGenScope): MethodSpec
= MethodSpec.methodBuilder("createDataSource").apply {
addAnnotation(Override::class.java)
addModifiers(Modifier.PROTECTED)
returns(tiledDataSourceQueryResultBinder.typeName)
val countedBinderScope = scope.fork()
- tiledDataSourceQueryResultBinder.convertAndReturn(roomSQLiteQueryVar, dbField,
- countedBinderScope)
+ tiledDataSourceQueryResultBinder.convertAndReturn(
+ roomSQLiteQueryVar = roomSQLiteQueryVar,
+ dbField = dbField,
+ inTransaction = inTransaction,
+ scope = countedBinderScope)
addCode(countedBinderScope.builder().build())
}.build()
}
diff --git a/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/query/result/PojoRowAdapter.kt b/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/query/result/PojoRowAdapter.kt
index 062b179..a013dc7 100644
--- a/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/query/result/PojoRowAdapter.kt
+++ b/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/query/result/PojoRowAdapter.kt
@@ -19,7 +19,6 @@
import android.arch.persistence.room.ext.L
import android.arch.persistence.room.ext.S
import android.arch.persistence.room.ext.T
-import android.arch.persistence.room.ext.typeName
import android.arch.persistence.room.processor.Context
import android.arch.persistence.room.processor.ProcessorErrors
import android.arch.persistence.room.solver.CodeGenScope
@@ -71,6 +70,13 @@
)
context.logger.w(Warning.CURSOR_MISMATCH, null, warningMsg)
}
+ val nonNulls = remainingFields.filter { it.nonNull }
+ if (nonNulls.isNotEmpty()) {
+ context.logger.e(ProcessorErrors.pojoMissingNonNull(
+ pojoTypeName = pojo.typeName,
+ missingPojoFields = nonNulls.map { it.name },
+ allQueryColumns = info.columns.map { it.name }))
+ }
if (matchedFields.isEmpty()) {
context.logger.e(ProcessorErrors.CANNOT_FIND_QUERY_RESULT_ADAPTER)
}
diff --git a/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/query/result/QueryResultBinder.kt b/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/query/result/QueryResultBinder.kt
index 205bd88..652de46 100644
--- a/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/query/result/QueryResultBinder.kt
+++ b/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/query/result/QueryResultBinder.kt
@@ -32,5 +32,7 @@
* and returns the result.
*/
abstract fun convertAndReturn(roomSQLiteQueryVar: String,
- dbField: FieldSpec, scope: CodeGenScope)
+ dbField: FieldSpec,
+ inTransaction : Boolean,
+ scope: CodeGenScope)
}
diff --git a/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/query/result/RxCallableQueryResultBinder.kt b/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/query/result/RxCallableQueryResultBinder.kt
index da960f6..1ab91e8 100644
--- a/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/query/result/RxCallableQueryResultBinder.kt
+++ b/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/query/result/RxCallableQueryResultBinder.kt
@@ -38,28 +38,42 @@
*/
class RxCallableQueryResultBinder(val rxType: RxType,
val typeArg: TypeMirror,
- val instantBinder : InstantQueryResultBinder,
- adapter: QueryResultAdapter?) : QueryResultBinder(adapter) {
- override fun convertAndReturn(roomSQLiteQueryVar: String, dbField: FieldSpec,
+ adapter: QueryResultAdapter?)
+ : QueryResultBinder(adapter) {
+ override fun convertAndReturn(roomSQLiteQueryVar: String,
+ dbField: FieldSpec,
+ inTransaction : Boolean,
scope: CodeGenScope) {
val callable = TypeSpec.anonymousClassBuilder("").apply {
val typeName = typeArg.typeName()
superclass(ParameterizedTypeName.get(java.util.concurrent.Callable::class.typeName(),
typeName))
- addMethod(createCallMethod(roomSQLiteQueryVar, dbField, scope))
+ addMethod(createCallMethod(
+ roomSQLiteQueryVar = roomSQLiteQueryVar,
+ dbField = dbField,
+ inTransaction = inTransaction,
+ scope = scope))
}.build()
scope.builder().apply {
addStatement("return $T.fromCallable($L)", rxType.className, callable)
}
}
- fun createCallMethod(roomSQLiteQueryVar: String, dbField: FieldSpec,
+ fun createCallMethod(roomSQLiteQueryVar: String,
+ dbField: FieldSpec,
+ inTransaction: Boolean,
scope: CodeGenScope): MethodSpec {
val adapterScope = scope.fork()
return MethodSpec.methodBuilder("call").apply {
returns(typeArg.typeName())
addException(Exception::class.typeName())
addModifiers(Modifier.PUBLIC)
+ val transactionWrapper = if (inTransaction) {
+ transactionWrapper(dbField)
+ } else {
+ null
+ }
+ transactionWrapper?.beginTransactionWithControlFlow()
val outVar = scope.getTmpVar("_result")
val cursorVar = scope.getTmpVar("_cursor")
addStatement("final $T $L = $N.query($L)", AndroidTypeNames.CURSOR, cursorVar,
@@ -76,6 +90,7 @@
}
endControlFlow()
}
+ transactionWrapper?.commitTransaction()
addStatement("return $L", outVar)
}
nextControlFlow("finally").apply {
@@ -83,10 +98,11 @@
addStatement("$L.release()", roomSQLiteQueryVar)
}
endControlFlow()
+ transactionWrapper?.endTransactionWithControlFlow()
}.build()
}
- enum class RxType(val className : ClassName, val canBeNull : Boolean) {
+ enum class RxType(val className: ClassName, val canBeNull: Boolean) {
SINGLE(RxJava2TypeNames.SINGLE, canBeNull = false),
MAYBE(RxJava2TypeNames.MAYBE, canBeNull = true);
}
diff --git a/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/query/result/TiledDataSourceQueryResultBinder.kt b/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/query/result/TiledDataSourceQueryResultBinder.kt
index 1b4b3fe..2281cfb 100644
--- a/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/query/result/TiledDataSourceQueryResultBinder.kt
+++ b/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/query/result/TiledDataSourceQueryResultBinder.kt
@@ -37,11 +37,13 @@
val itemTypeName : TypeName = listAdapter?.rowAdapter?.out?.typeName() ?: TypeName.OBJECT
val typeName : ParameterizedTypeName = ParameterizedTypeName.get(
RoomTypeNames.LIMIT_OFFSET_DATA_SOURCE, itemTypeName)
- override fun convertAndReturn(roomSQLiteQueryVar: String, dbField: FieldSpec,
+ override fun convertAndReturn(roomSQLiteQueryVar: String,
+ dbField: FieldSpec,
+ inTransaction : Boolean,
scope: CodeGenScope) {
val tableNamesList = tableNames.joinToString(",") { "\"$it\"" }
- val spec = TypeSpec.anonymousClassBuilder("$N, $L, $L",
- dbField, roomSQLiteQueryVar, tableNamesList).apply {
+ val spec = TypeSpec.anonymousClassBuilder("$N, $L, $L, $L",
+ dbField, roomSQLiteQueryVar, inTransaction, tableNamesList).apply {
superclass(typeName)
addMethod(createConvertRowsMethod(scope))
}.build()
diff --git a/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/query/result/TransactionWrapper.kt b/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/query/result/TransactionWrapper.kt
new file mode 100644
index 0000000..30d02ee
--- /dev/null
+++ b/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/query/result/TransactionWrapper.kt
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.arch.persistence.room.solver.query.result
+
+import android.arch.persistence.room.ext.N
+import com.squareup.javapoet.CodeBlock
+import com.squareup.javapoet.FieldSpec
+import com.squareup.javapoet.MethodSpec
+
+/**
+ * helper class to create correct transaction code.
+ */
+interface TransactionWrapper {
+ fun beginTransactionWithControlFlow()
+ fun commitTransaction()
+ fun endTransactionWithControlFlow()
+}
+
+fun MethodSpec.Builder.transactionWrapper(dbField : FieldSpec) = object : TransactionWrapper {
+ override fun beginTransactionWithControlFlow() {
+ addStatement("$N.beginTransaction()", dbField)
+ beginControlFlow("try")
+ }
+
+ override fun commitTransaction() {
+ addStatement("$N.setTransactionSuccessful()", dbField)
+ }
+
+ override fun endTransactionWithControlFlow() {
+ nextControlFlow("finally")
+ addStatement("$N.endTransaction()", dbField)
+ endControlFlow()
+ }
+}
+
+fun CodeBlock.Builder.transactionWrapper(dbField: FieldSpec) = object : TransactionWrapper {
+ override fun beginTransactionWithControlFlow() {
+ addStatement("$N.beginTransaction()", dbField)
+ beginControlFlow("try")
+ }
+
+ override fun commitTransaction() {
+ addStatement("$N.setTransactionSuccessful()", dbField)
+ }
+
+ override fun endTransactionWithControlFlow() {
+ nextControlFlow("finally")
+ addStatement("$N.endTransaction()", dbField)
+ endControlFlow()
+ }
+}
diff --git a/room/compiler/src/main/kotlin/android/arch/persistence/room/verifier/DatabaseVerifier.kt b/room/compiler/src/main/kotlin/android/arch/persistence/room/verifier/DatabaseVerifier.kt
index 8475f3a..11acbdf 100644
--- a/room/compiler/src/main/kotlin/android/arch/persistence/room/verifier/DatabaseVerifier.kt
+++ b/room/compiler/src/main/kotlin/android/arch/persistence/room/verifier/DatabaseVerifier.kt
@@ -16,10 +16,11 @@
package android.arch.persistence.room.verifier
-import columnInfo
import android.arch.persistence.room.processor.Context
import android.arch.persistence.room.vo.Entity
import android.arch.persistence.room.vo.Warning
+import columnInfo
+import org.sqlite.JDBC
import java.io.File
import java.sql.Connection
import java.sql.DriverManager
@@ -34,25 +35,28 @@
class DatabaseVerifier private constructor(
val connection : Connection, val context : Context, val entities : List<Entity>) {
companion object {
+ private const val CONNECTION_URL = "jdbc:sqlite::memory:"
+
+ init {
+ // see: https://github.com/xerial/sqlite-jdbc/issues/97
+ val tmpDir = System.getProperty("java.io.tmpdir")
+ if (tmpDir != null) {
+ val outDir = File(tmpDir, "room-${UUID.randomUUID()}")
+ outDir.mkdirs()
+ outDir.deleteOnExit()
+ System.setProperty("org.sqlite.tmpdir", outDir.absolutePath)
+ // dummy call to trigger JDBC initialization so that we can unregister it
+ JDBC.isValidURL(CONNECTION_URL)
+ unregisterDrivers()
+ }
+ }
+
/**
* Tries to create a verifier but returns null if it cannot find the driver.
*/
fun create(context: Context, element: Element, entities: List<Entity>) : DatabaseVerifier? {
return try {
- // see: https://github.com/xerial/sqlite-jdbc/issues/97
- val tmpDir = System.getProperty("java.io.tmpdir")
- if (tmpDir == null) {
- context.logger.w(Warning.MISSING_JAVA_TMP_DIR,
- element, DatabaseVerificaitonErrors.CANNOT_GET_TMP_JAVA_DIR)
- return null
- }
- val outDir = File(tmpDir, "room-${UUID.randomUUID()}")
- outDir.mkdirs()
- outDir.deleteOnExit()
- System.setProperty("org.sqlite.tmpdir", outDir.absolutePath)
- //force load:
- Class.forName("org.sqlite.JDBC")
- val connection = DriverManager.getConnection("jdbc:sqlite::memory:")
+ val connection = JDBC.createConnection(CONNECTION_URL, java.util.Properties())
DatabaseVerifier(connection, context, entities)
} catch (ex : Exception) {
context.logger.w(Warning.CANNOT_CREATE_VERIFICATION_DATABASE, element,
@@ -60,6 +64,22 @@
null
}
}
+
+ /**
+ * Unregisters the JDBC driver. If we don't do this, we'll leak the driver which leaks a
+ * whole class loader.
+ * see: https://github.com/xerial/sqlite-jdbc/issues/267
+ * see: https://issuetracker.google.com/issues/62473121
+ */
+ private fun unregisterDrivers() {
+ try {
+ DriverManager.getDriver(CONNECTION_URL)?.let {
+ DriverManager.deregisterDriver(it)
+ }
+ } catch (t : Throwable) {
+ System.err.println("Room: cannot unregister driver ${t.message}")
+ }
+ }
}
init {
entities.forEach { entity ->
@@ -77,12 +97,13 @@
}
}
- fun closeConnection() {
+ fun closeConnection(context: Context) {
if (!connection.isClosed) {
try {
connection.close()
} catch (t : Throwable) {
//ignore.
+ context.logger.d("failed to close the database connection ${t.message}")
}
}
}
diff --git a/room/compiler/src/main/kotlin/android/arch/persistence/room/vo/Index.kt b/room/compiler/src/main/kotlin/android/arch/persistence/room/vo/Index.kt
index 69f16f3..0bee2e0 100644
--- a/room/compiler/src/main/kotlin/android/arch/persistence/room/vo/Index.kt
+++ b/room/compiler/src/main/kotlin/android/arch/persistence/room/vo/Index.kt
@@ -23,7 +23,10 @@
* Represents a processed index.
*/
data class Index(val name : String, val unique : Boolean, val fields : List<Field>) {
-
+ companion object {
+ // should match the value in TableInfo.Index.DEFAULT_PREFIX
+ const val DEFAULT_PREFIX = "index_"
+ }
fun createQuery(tableName : String) : String {
val uniqueSQL = if (unique) {
"UNIQUE"
diff --git a/room/compiler/src/main/kotlin/android/arch/persistence/room/vo/QueryMethod.kt b/room/compiler/src/main/kotlin/android/arch/persistence/room/vo/QueryMethod.kt
index 1aa8430..a6b8cb7 100644
--- a/room/compiler/src/main/kotlin/android/arch/persistence/room/vo/QueryMethod.kt
+++ b/room/compiler/src/main/kotlin/android/arch/persistence/room/vo/QueryMethod.kt
@@ -29,6 +29,7 @@
*/
data class QueryMethod(val element: ExecutableElement, val query: ParsedQuery, val name: String,
val returnType: TypeMirror, val parameters: List<QueryParameter>,
+ val inTransaction : Boolean,
val queryResultBinder : QueryResultBinder) {
val sectionToParamMapping by lazy {
query.bindSections.map {
diff --git a/room/compiler/src/main/kotlin/android/arch/persistence/room/vo/Warning.kt b/room/compiler/src/main/kotlin/android/arch/persistence/room/vo/Warning.kt
index 9cf137d..dd154c4 100644
--- a/room/compiler/src/main/kotlin/android/arch/persistence/room/vo/Warning.kt
+++ b/room/compiler/src/main/kotlin/android/arch/persistence/room/vo/Warning.kt
@@ -31,7 +31,9 @@
INDEX_FROM_PARENT_FIELD_IS_DROPPED("ROOM_PARENT_FIELD_INDEX_IS_DROPPED"),
RELATION_TYPE_MISMATCH("ROOM_RELATION_TYPE_MISMATCH"),
MISSING_SCHEMA_LOCATION("ROOM_MISSING_SCHEMA_LOCATION"),
- MISSING_INDEX_ON_FOREIGN_KEY_CHILD("ROOM_MISSING_FOREIGN_KEY_CHILD_INDEX");
+ MISSING_INDEX_ON_FOREIGN_KEY_CHILD("ROOM_MISSING_FOREIGN_KEY_CHILD_INDEX"),
+ RELATION_QUERY_WITHOUT_TRANSACTION("ROOM_RELATION_QUERY_WITHOUT_TRANSACTION"),
+ DEFAULT_CONSTRUCTOR("ROOM_DEFAULT_CONSTRUCTOR");
companion object {
val PUBLIC_KEY_MAP = Warning.values().associateBy { it.publicKey }
diff --git a/room/compiler/src/main/kotlin/android/arch/persistence/room/writer/DaoWriter.kt b/room/compiler/src/main/kotlin/android/arch/persistence/room/writer/DaoWriter.kt
index 5c7d8a3..0bb9c19 100644
--- a/room/compiler/src/main/kotlin/android/arch/persistence/room/writer/DaoWriter.kt
+++ b/room/compiler/src/main/kotlin/android/arch/persistence/room/writer/DaoWriter.kt
@@ -445,7 +445,11 @@
val sqlVar = scope.getTmpVar("_sql")
val roomSQLiteQueryVar = scope.getTmpVar("_statement")
queryWriter.prepareReadAndBind(sqlVar, roomSQLiteQueryVar, scope)
- method.queryResultBinder.convertAndReturn(roomSQLiteQueryVar, dbField, scope)
+ method.queryResultBinder.convertAndReturn(
+ roomSQLiteQueryVar = roomSQLiteQueryVar,
+ dbField = dbField,
+ inTransaction = method.inTransaction,
+ scope = scope)
return scope.builder().build()
}
diff --git a/room/compiler/src/main/kotlin/android/arch/persistence/room/writer/TableInfoValidationWriter.kt b/room/compiler/src/main/kotlin/android/arch/persistence/room/writer/TableInfoValidationWriter.kt
index fe9e743..e54f986 100644
--- a/room/compiler/src/main/kotlin/android/arch/persistence/room/writer/TableInfoValidationWriter.kt
+++ b/room/compiler/src/main/kotlin/android/arch/persistence/room/writer/TableInfoValidationWriter.kt
@@ -75,9 +75,26 @@
/*parent column names*/ refColumnNames)
}
- addStatement("final $T $L = new $T($S, $L, $L)",
+ val indicesSetVar = scope.getTmpVar("_indices$suffix")
+ val indicesType = ParameterizedTypeName.get(HashSet::class.typeName(),
+ RoomTypeNames.TABLE_INFO_INDEX)
+ addStatement("final $T $L = new $T($L)", indicesType, indicesSetVar,
+ indicesType, entity.indices.size)
+ entity.indices.forEach { index ->
+ val columnNames = index.fields
+ .joinToString(",") { "\"${it.columnName}\"" }
+ addStatement("$L.add(new $T($S, $L, $T.asList($L)))",
+ indicesSetVar,
+ RoomTypeNames.TABLE_INFO_INDEX,
+ index.name,
+ index.unique,
+ Arrays::class.typeName(),
+ columnNames)
+ }
+
+ addStatement("final $T $L = new $T($S, $L, $L, $L)",
RoomTypeNames.TABLE_INFO, expectedInfoVar, RoomTypeNames.TABLE_INFO,
- entity.tableName, columnListVar, foreignKeySetVar)
+ entity.tableName, columnListVar, foreignKeySetVar, indicesSetVar)
val existingVar = scope.getTmpVar("_existing$suffix")
addStatement("final $T $L = $T.read($N, $S)",
diff --git a/room/compiler/src/test/data/databasewriter/output/ComplexDatabase.java b/room/compiler/src/test/data/databasewriter/output/ComplexDatabase.java
index 80d73a9..cfdc110 100644
--- a/room/compiler/src/test/data/databasewriter/output/ComplexDatabase.java
+++ b/room/compiler/src/test/data/databasewriter/output/ComplexDatabase.java
@@ -11,6 +11,7 @@
import android.arch.persistence.room.util.TableInfo;
import android.arch.persistence.room.util.TableInfo.Column;
import android.arch.persistence.room.util.TableInfo.ForeignKey;
+import android.arch.persistence.room.util.TableInfo.Index;
import java.lang.IllegalStateException;
import java.lang.Override;
import java.lang.String;
@@ -59,7 +60,8 @@
_columnsUser.put("lastName", new TableInfo.Column("lastName", "TEXT", false, 0));
_columnsUser.put("ageColumn", new TableInfo.Column("ageColumn", "INTEGER", true, 0));
final HashSet<TableInfo.ForeignKey> _foreignKeysUser = new HashSet<TableInfo.ForeignKey>(0);
- final TableInfo _infoUser = new TableInfo("User", _columnsUser, _foreignKeysUser);
+ final HashSet<TableInfo.Index> _indicesUser = new HashSet<TableInfo.Index>(0);
+ final TableInfo _infoUser = new TableInfo("User", _columnsUser, _foreignKeysUser, _indicesUser);
final TableInfo _existingUser = TableInfo.read(_db, "User");
if (! _infoUser.equals(_existingUser)) {
throw new IllegalStateException("Migration didn't properly handle User(foo.bar.User).\n"
diff --git a/room/compiler/src/test/kotlin/android/arch/persistence/room/parser/SqlParserTest.kt b/room/compiler/src/test/kotlin/android/arch/persistence/room/parser/SqlParserTest.kt
index 68b1868..6d3e194 100644
--- a/room/compiler/src/test/kotlin/android/arch/persistence/room/parser/SqlParserTest.kt
+++ b/room/compiler/src/test/kotlin/android/arch/persistence/room/parser/SqlParserTest.kt
@@ -63,6 +63,22 @@
}
@Test
+ fun validColumnNames() {
+ listOf("f", "fo", "f2", "f 2", "foo_2", "foo-2", "_", "foo bar baz",
+ "foo 2 baz", "_baz", "fooBar", "2", "*", "foo*2", "dsa$", "\$fsa",
+ "-bar", "şoöğüı").forEach {
+ assertThat("name: $it", SqlParser.isValidIdentifier(it), `is`(true))
+ }
+ }
+
+ @Test
+ fun invalidColumnNames() {
+ listOf("", " ", "fd`a`", "f`a", "`a", "\"foo bar\"", "\"", "`").forEach {
+ assertThat("name: $it", SqlParser.isValidIdentifier(it), `is`(false))
+ }
+ }
+
+ @Test
fun extractTableNames() {
assertThat(SqlParser.parse("select * from users").tables,
`is`(setOf(Table("users", "users"))))
diff --git a/room/compiler/src/test/kotlin/android/arch/persistence/room/processor/DaoProcessorTest.kt b/room/compiler/src/test/kotlin/android/arch/persistence/room/processor/DaoProcessorTest.kt
index 3ade277..55f335d 100644
--- a/room/compiler/src/test/kotlin/android/arch/persistence/room/processor/DaoProcessorTest.kt
+++ b/room/compiler/src/test/kotlin/android/arch/persistence/room/processor/DaoProcessorTest.kt
@@ -192,6 +192,81 @@
}.compilesWithoutError()
}
+ @Test
+ fun query_warnIfTransactionIsMissingForRelation() {
+ if (!enableVerification) {
+ return
+ }
+ singleDao(
+ """
+ @Dao interface MyDao {
+ static class Merged extends User {
+ @Relation(parentColumn = "name", entityColumn = "lastName",
+ entity = User.class)
+ java.util.List<User> users;
+ }
+ @Query("select * from user")
+ abstract java.util.List<Merged> loadUsers();
+ }
+ """
+ ) { dao, _ ->
+ assertThat(dao.queryMethods.size, `is`(1))
+ assertThat(dao.queryMethods.first().inTransaction, `is`(false))
+ }.compilesWithoutError()
+ .withWarningContaining(ProcessorErrors.TRANSACTION_MISSING_ON_RELATION)
+ }
+
+ @Test
+ fun query_dontWarnIfTransactionIsMissingForRelation_suppressed() {
+ if (!enableVerification) {
+ return
+ }
+ singleDao(
+ """
+ @Dao interface MyDao {
+ static class Merged extends User {
+ @Relation(parentColumn = "name", entityColumn = "lastName",
+ entity = User.class)
+ java.util.List<User> users;
+ }
+ @SuppressWarnings(RoomWarnings.RELATION_QUERY_WITHOUT_TRANSACTION)
+ @Query("select * from user")
+ abstract java.util.List<Merged> loadUsers();
+ }
+ """
+ ) { dao, _ ->
+ assertThat(dao.queryMethods.size, `is`(1))
+ assertThat(dao.queryMethods.first().inTransaction, `is`(false))
+ }.compilesWithoutError()
+ .withWarningCount(0)
+ }
+
+ @Test
+ fun query_dontWarnIfTransactionNotIsMissingForRelation() {
+ if (!enableVerification) {
+ return
+ }
+ singleDao(
+ """
+ @Dao interface MyDao {
+ static class Merged extends User {
+ @Relation(parentColumn = "name", entityColumn = "lastName",
+ entity = User.class)
+ java.util.List<User> users;
+ }
+ @Transaction
+ @Query("select * from user")
+ abstract java.util.List<Merged> loadUsers();
+ }
+ """
+ ) { dao, _ ->
+ // test sanity
+ assertThat(dao.queryMethods.size, `is`(1))
+ assertThat(dao.queryMethods.first().inTransaction, `is`(true))
+ }.compilesWithoutError()
+ .withWarningCount(0)
+ }
+
fun singleDao(vararg inputs: String, handler: (Dao, TestInvocation) -> Unit):
CompileTester {
return Truth.assertAbout(JavaSourcesSubjectFactory.javaSources())
@@ -200,7 +275,12 @@
), COMMON.USER))
.processedWith(TestProcessor.builder()
.forAnnotations(android.arch.persistence.room.Dao::class,
- android.arch.persistence.room.Entity::class)
+ android.arch.persistence.room.Entity::class,
+ android.arch.persistence.room.Relation::class,
+ android.arch.persistence.room.Transaction::class,
+ android.arch.persistence.room.ColumnInfo::class,
+ android.arch.persistence.room.PrimaryKey::class,
+ android.arch.persistence.room.Query::class)
.nextRunHandler { invocation ->
val dao = invocation.roundEnv
.getElementsAnnotatedWith(
diff --git a/room/compiler/src/test/kotlin/android/arch/persistence/room/processor/EntityProcessorTest.kt b/room/compiler/src/test/kotlin/android/arch/persistence/room/processor/EntityProcessorTest.kt
index c25d001..4abf13d 100644
--- a/room/compiler/src/test/kotlin/android/arch/persistence/room/processor/EntityProcessorTest.kt
+++ b/room/compiler/src/test/kotlin/android/arch/persistence/room/processor/EntityProcessorTest.kt
@@ -18,7 +18,6 @@
import COMMON
import android.arch.persistence.room.parser.SQLTypeAffinity
-import android.arch.persistence.room.processor.ProcessorErrors.PRIMARY_KEY_NULL
import android.arch.persistence.room.processor.ProcessorErrors.RELATION_IN_ENTITY
import android.arch.persistence.room.vo.CallType
import android.arch.persistence.room.vo.Field
@@ -1003,6 +1002,21 @@
}
@Test
+ fun primaryKey_nonNull_notNeeded() {
+ listOf("long", "Long", "Integer", "int").forEach { type ->
+ singleEntity(
+ """
+ @PrimaryKey
+ public $type id;
+ """) { entity, _ ->
+ assertThat(entity.primaryKey.fields.size, `is`(1))
+ assertThat(entity.primaryKey.fields.firstOrNull()?.name, `is`("id"))
+ assertThat(entity.primaryKey.autoGenerateId, `is`(false))
+ }.compilesWithoutError()
+ }
+ }
+
+ @Test
fun primaryKey_autoGenerateBadType() {
listOf("String", "float", "Float", "Double", "double").forEach { type ->
singleEntity(
@@ -1163,7 +1177,7 @@
""") { entity, _ ->
assertThat(entity.primaryKey.fields.size, `is`(1))
assertThat(entity.primaryKey.fields.firstOrNull()?.name, `is`("id"))
- }.failsToCompile().withErrorContaining(PRIMARY_KEY_NULL)
+ }.failsToCompile().withErrorContaining(ProcessorErrors.primaryKeyNull("id"))
}
@Test
@@ -1175,7 +1189,8 @@
@PrimaryKey
public String anotherId;
""") { entity, _ ->
- }.failsToCompile().withErrorContaining(PRIMARY_KEY_NULL)
+ }.failsToCompile().withErrorContaining(ProcessorErrors.primaryKeyNull("id"))
+ .and().withErrorContaining(ProcessorErrors.primaryKeyNull("anotherId"))
}
@Test
@@ -1188,7 +1203,7 @@
@PrimaryKey
public String anotherId;
""") { entity, _ ->
- }.failsToCompile().withErrorContaining(PRIMARY_KEY_NULL)
+ }.failsToCompile().withErrorContaining(ProcessorErrors.primaryKeyNull("anotherId"))
}
@Test
@@ -1199,7 +1214,7 @@
public String foo;
""",
attributes = mapOf("primaryKeys" to "{\"id\", \"foo\"}")) { _, _ ->
- }.failsToCompile().withErrorContaining(PRIMARY_KEY_NULL)
+ }.failsToCompile().withErrorContaining(ProcessorErrors.primaryKeyNull("foo"))
}
@Test
@@ -1216,6 +1231,241 @@
}
@Test
+ fun primaryKey_nullableEmbedded(){
+ singleEntity(
+ """
+ public int id;
+
+ @Embedded(prefix = "bar_")
+ @PrimaryKey
+ public Foo foo;
+
+ static class Foo {
+ public int a;
+ public int b;
+ }
+ """) { _, _ ->
+ }.failsToCompile().withErrorContaining(ProcessorErrors.primaryKeyNull("foo"))
+ }
+
+ @Test
+ fun primaryKey_nullableEmbeddedObject(){
+ singleEntity(
+ """
+ public int id;
+
+ @Embedded(prefix = "bar_")
+ @PrimaryKey
+ public Foo foo;
+
+ static class Foo {
+ public String a;
+ public String b;
+ }
+ """) { _, _ ->
+ }.failsToCompile().withErrorContaining(ProcessorErrors.primaryKeyNull("foo > a"))
+ .and().withErrorContaining(ProcessorErrors.primaryKeyNull("foo > b"))
+ .and().withErrorContaining(ProcessorErrors.primaryKeyNull("foo"))
+ .and().withErrorCount(3)
+ }
+
+ @Test
+ fun primaryKey_nullableEmbeddedObject_multipleParents(){
+ singleEntity(
+ """
+ public int id;
+
+ @Embedded(prefix = "bar_")
+ @PrimaryKey
+ public Foo foo;
+
+ static class Foo {
+ @Embedded(prefix = "baz_")
+ public Baz a;
+ public String b;
+
+ static class Baz {
+ public Integer bb;
+ }
+ }
+ """) { _, _ ->
+ }.failsToCompile().withErrorContaining(ProcessorErrors.primaryKeyNull("foo > a"))
+ .and().withErrorContaining(ProcessorErrors.primaryKeyNull("foo > b"))
+ .and().withErrorContaining(ProcessorErrors.primaryKeyNull("foo"))
+ .and().withErrorContaining(ProcessorErrors.primaryKeyNull("foo > a > bb"))
+ .and().withErrorCount(4)
+ }
+
+ @Test
+ fun primaryKey_nullableEmbeddedInherited(){
+ val parent = JavaFileObjects.forSourceLines("foo.bar.Base",
+ """
+ package foo.bar;
+ import android.support.annotation.NonNull;
+ import android.arch.persistence.room.*;
+
+ public class Base {
+ long baseId;
+ String name, lastName;
+ @Embedded(prefix = "bar_")
+ @PrimaryKey
+ public Foo foo;
+
+ static class Foo {
+ public int a;
+ public int b;
+ }
+ }
+ """)
+ singleEntity(
+ """
+ public int id;
+ """,
+ baseClass = "foo.bar.Base",
+ jfos = listOf(parent)) { _, _ ->
+ }.failsToCompile().withErrorContaining(ProcessorErrors.primaryKeyNull("foo"))
+ .and().withErrorContaining(ProcessorErrors.primaryKeyNull("foo > a"))
+ .and().withErrorContaining(ProcessorErrors.primaryKeyNull("foo > b"))
+ .and().withErrorCount(3)
+ }
+
+ @Test
+ fun primaryKey_nullableOverrideViaEmbedded() {
+ val parent = JavaFileObjects.forSourceLines("foo.bar.Base",
+ """
+ package foo.bar;
+ import android.arch.persistence.room.*;
+
+ @Entity(primaryKeys = "baseId")
+ public class Base {
+ long baseId;
+ String name, lastName;
+ }
+ """)
+ singleEntity(
+ """
+ public int id;
+ @Embedded(prefix = "bar_")
+ @PrimaryKey
+ public Foo foo;
+
+ static class Foo {
+ public int a;
+ public int b;
+ }
+ """,
+ baseClass = "foo.bar.Base",
+ jfos = listOf(parent)) { _, _ ->
+ }.failsToCompile().withErrorContaining(ProcessorErrors.primaryKeyNull("foo"))
+ .and().withErrorContaining(ProcessorErrors.primaryKeyNull("foo > a"))
+ .and().withErrorContaining(ProcessorErrors.primaryKeyNull("foo > b"))
+ .and().withNoteContaining(
+ "PrimaryKey[baseId] is overridden by PrimaryKey[foo > a, foo > b]")
+ .and().withErrorCount(3)
+ }
+
+ @Test
+ fun primaryKey_nullableOverrideEmbedded() {
+ val parent = JavaFileObjects.forSourceLines("foo.bar.Base",
+ """
+ package foo.bar;
+ import android.support.annotation.NonNull;
+ import android.arch.persistence.room.*;
+
+ public class Base {
+ long baseId;
+ String name, lastName;
+ @Embedded(prefix = "bar_")
+ @PrimaryKey
+ public Foo foo;
+
+ static class Foo {
+ public int a;
+ public int b;
+ }
+ }
+ """)
+ singleEntity(
+ """
+ @PrimaryKey
+ public int id;
+ """,
+ baseClass = "foo.bar.Base",
+ jfos = listOf(parent)) { _, _ ->
+ }.failsToCompile().withErrorContaining(ProcessorErrors.primaryKeyNull("foo"))
+ .and().withErrorContaining(ProcessorErrors.primaryKeyNull("foo > a"))
+ .and().withErrorContaining(ProcessorErrors.primaryKeyNull("foo > b"))
+ .and().withNoteContaining(
+ "PrimaryKey[foo > a, foo > b] is overridden by PrimaryKey[id]")
+ .and().withErrorCount(3)
+ }
+
+ @Test
+ fun primaryKey_integerOverrideEmbedded() {
+ val parent = JavaFileObjects.forSourceLines("foo.bar.Base",
+ """
+ package foo.bar;
+ import android.support.annotation.NonNull;
+ import android.arch.persistence.room.*;
+
+ public class Base {
+ long baseId;
+ String name, lastName;
+ @Embedded(prefix = "bar_")
+ @PrimaryKey
+ public Foo foo;
+
+ static class Foo {
+ public Integer a;
+ }
+ }
+ """)
+ singleEntity(
+ """
+ @PrimaryKey
+ public int id;
+ """,
+ baseClass = "foo.bar.Base",
+ jfos = listOf(parent)) { _, _ ->
+ }.compilesWithoutError().withNoteContaining(
+ "PrimaryKey[foo > a] is overridden by PrimaryKey[id]")
+ }
+
+ @Test
+ fun primaryKey_singleStringPrimaryKeyOverrideEmbedded() {
+ val parent = JavaFileObjects.forSourceLines("foo.bar.Base",
+ """
+ package foo.bar;
+ import android.support.annotation.NonNull;
+ import android.arch.persistence.room.*;
+
+ public class Base {
+ long baseId;
+ String name, lastName;
+ @Embedded(prefix = "bar_")
+ @PrimaryKey
+ public Foo foo;
+
+ static class Foo {
+ public String a;
+ }
+ }
+ """)
+ singleEntity(
+ """
+ @PrimaryKey
+ public int id;
+ """,
+ baseClass = "foo.bar.Base",
+ jfos = listOf(parent)) { _, _ ->
+ }.failsToCompile().withErrorContaining(ProcessorErrors.primaryKeyNull("foo"))
+ .and().withErrorContaining(ProcessorErrors.primaryKeyNull("foo > a"))
+ .and().withNoteContaining(
+ "PrimaryKey[foo > a] is overridden by PrimaryKey[id]")
+ .and().withErrorCount(2)
+ }
+
+ @Test
fun relationInEntity() {
singleEntity(
"""
@@ -1550,4 +1800,102 @@
assertThat(entity.indices, `is`(emptyList()))
}.compilesWithoutWarnings()
}
+
+ @Test
+ fun recursion_1Level() {
+ singleEntity(
+ """
+ @Embedded
+ MyEntity myEntity;
+ """){ _, _ ->
+ }.failsToCompile().withErrorContaining(ProcessorErrors.RECURSIVE_REFERENCE_DETECTED.format("foo.bar.MyEntity -> foo.bar.MyEntity"))
+ }
+
+ @Test
+ fun recursion_2Levels_embedToRelation() {
+ singleEntity(
+ """
+ int pojoId;
+ @Embedded
+ A a;
+
+ static class A {
+ int entityId;
+ @Relation(parentColumn = "pojoId", entityColumn = "entityId")
+ MyEntity myEntity;
+ }
+ """){ _, _ ->
+ }.failsToCompile().withErrorContaining(ProcessorErrors.RECURSIVE_REFERENCE_DETECTED.format("foo.bar.MyEntity -> foo.bar.MyEntity.A -> foo.bar.MyEntity"))
+ }
+
+ @Test
+ fun recursion_2Levels_onlyEmbeds_entityToPojo() {
+ singleEntity(
+ """
+ @Embedded
+ A a;
+
+ static class A {
+ @Embedded
+ MyEntity myEntity;
+ }
+ """){ _, _ ->
+ }.failsToCompile().withErrorContaining(ProcessorErrors.RECURSIVE_REFERENCE_DETECTED.format("foo.bar.MyEntity -> foo.bar.MyEntity.A -> foo.bar.MyEntity"))
+ }
+
+ @Test
+ fun recursion_2Levels_onlyEmbeds_onlyEntities() {
+ singleEntity(
+ """
+ @Embedded
+ A a;
+
+ @Entity
+ static class A {
+ @Embedded
+ MyEntity myEntity;
+ }
+ """) { _, _ ->
+ }.failsToCompile().withErrorContaining(ProcessorErrors.RECURSIVE_REFERENCE_DETECTED.format("foo.bar.MyEntity -> foo.bar.MyEntity.A -> foo.bar.MyEntity"))
+ }
+ fun okTableName() {
+ val annotation = mapOf("tableName" to "\"foo bar\"")
+ singleEntity(
+ """
+ @PrimaryKey
+ int id;
+ String name;
+ """,
+ attributes = annotation, jfos = listOf(COMMON.USER)
+ ){ _, _ ->
+ }.compilesWithoutError()
+ }
+
+ @Test
+ fun badTableName() {
+ val annotation = mapOf("tableName" to """ "foo`bar" """)
+ singleEntity(
+ """
+ @PrimaryKey
+ int id;
+ String name;
+ """,
+ attributes = annotation, jfos = listOf(COMMON.USER)
+ ){ _, _ ->
+ }.failsToCompile().withErrorContaining(ProcessorErrors.INVALID_TABLE_NAME)
+ }
+
+ @Test
+ fun badColumnName() {
+ singleEntity(
+ """
+ @PrimaryKey
+ int id;
+ @ColumnInfo(name = "\"foo bar\"")
+ String name;
+ """,
+ jfos = listOf(COMMON.USER)
+ ){ _, _ ->
+ }.failsToCompile().withErrorContaining(ProcessorErrors.INVALID_COLUMN_NAME)
+ }
}
diff --git a/room/compiler/src/test/kotlin/android/arch/persistence/room/processor/PojoProcessorTest.kt b/room/compiler/src/test/kotlin/android/arch/persistence/room/processor/PojoProcessorTest.kt
index 3ada5f6..4f14fdb 100644
--- a/room/compiler/src/test/kotlin/android/arch/persistence/room/processor/PojoProcessorTest.kt
+++ b/room/compiler/src/test/kotlin/android/arch/persistence/room/processor/PojoProcessorTest.kt
@@ -693,6 +693,165 @@
}.compilesWithoutError()
}
+ @Test
+ fun constructor_multipleMatching_withNoArg() {
+ singleRun("""
+ String mName;
+ String mLastName;
+ public MyPojo() {
+ }
+ public MyPojo(String name, String lastName) {
+ }
+ """) { pojo ->
+ assertThat(pojo.constructor?.params?.size ?: -1, `is`(0))
+ }.compilesWithoutError().withWarningContaining(
+ ProcessorErrors.TOO_MANY_POJO_CONSTRUCTORS_CHOOSING_NO_ARG)
+ }
+
+ @Test
+ fun recursion_1Level() {
+ singleRun(
+ """
+ @Embedded
+ MyPojo myPojo;
+ """){ _, _ ->
+ }.failsToCompile().withErrorContaining(ProcessorErrors.RECURSIVE_REFERENCE_DETECTED.format("foo.bar.MyPojo -> foo.bar.MyPojo"))
+ }
+
+ @Test
+ fun recursion_2Levels_relationToEmbed() {
+ singleRun(
+ """
+ int pojoId;
+
+ @Relation(parentColumn = "pojoId", entityColumn = "entityId")
+ List<MyEntity> myEntity;
+
+ @Entity
+ static class MyEntity {
+ int entityId;
+
+ @Embedded
+ MyPojo myPojo;
+ }
+ """){ _, _ ->
+ }.failsToCompile().withErrorContaining(ProcessorErrors.RECURSIVE_REFERENCE_DETECTED.format("foo.bar.MyPojo -> foo.bar.MyPojo.MyEntity -> foo.bar.MyPojo"))
+ }
+
+ @Test
+ fun recursion_2Levels_onlyEmbeds_pojoToEntity() {
+ singleRun(
+ """
+ @Embedded
+ A a;
+
+ @Entity
+ static class A {
+ @Embedded
+ MyPojo myPojo;
+ }
+ """){ _, _ ->
+ }.failsToCompile().withErrorContaining(ProcessorErrors.RECURSIVE_REFERENCE_DETECTED.format("foo.bar.MyPojo -> foo.bar.MyPojo.A -> foo.bar.MyPojo"))
+ }
+
+ @Test
+ fun recursion_2Levels_onlyEmbeds_onlyPojos() {
+ singleRun(
+ """
+ @Embedded
+ A a;
+ static class A {
+ @Embedded
+ MyPojo myPojo;
+ }
+ """){ _, _ ->
+ }.failsToCompile().withErrorContaining(ProcessorErrors.RECURSIVE_REFERENCE_DETECTED.format("foo.bar.MyPojo -> foo.bar.MyPojo.A -> foo.bar.MyPojo"))
+ }
+
+ @Test
+ fun recursion_3Levels() {
+ singleRun(
+ """
+ @Embedded
+ A a;
+ public static class A {
+ @Embedded
+ B b;
+ }
+ public static class B {
+ @Embedded
+ MyPojo myPojo;
+ }
+ """){ _, _ ->
+ }.failsToCompile().withErrorContaining(ProcessorErrors.RECURSIVE_REFERENCE_DETECTED.format("foo.bar.MyPojo -> foo.bar.MyPojo.A -> foo.bar.MyPojo.B -> foo.bar.MyPojo"))
+ }
+
+ @Test
+ fun recursion_1Level_1LevelDown() {
+ singleRun(
+ """
+ @Embedded
+ A a;
+ static class A {
+ @Embedded
+ B b;
+ }
+ static class B {
+ @Embedded
+ A a;
+ }
+ """){ _, _ ->
+ }.failsToCompile().withErrorContaining(ProcessorErrors.RECURSIVE_REFERENCE_DETECTED.format("foo.bar.MyPojo.A -> foo.bar.MyPojo.B -> foo.bar.MyPojo.A"))
+ }
+
+ @Test
+ fun recursion_branchAtLevel0_afterBackTrack() {
+ singleRun(
+ """
+ @PrimaryKey
+ int id;
+ @Embedded
+ A a;
+ @Embedded
+ C c;
+ static class A {
+ @Embedded
+ B b;
+ }
+ static class B {
+ }
+ static class C {
+ @Embedded
+ MyPojo myPojo;
+ }
+ """){ _, _ ->
+ }.failsToCompile().withErrorContaining(ProcessorErrors.RECURSIVE_REFERENCE_DETECTED.format("foo.bar.MyPojo -> foo.bar.MyPojo.C -> foo.bar.MyPojo"))
+ }
+
+ @Test
+ fun recursion_branchAtLevel1_afterBackTrack() {
+ singleRun(
+ """
+ @PrimaryKey
+ int id;
+ @Embedded
+ A a;
+ static class A {
+ @Embedded
+ B b;
+ @Embedded
+ MyPojo myPojo;
+ }
+ static class B {
+ @Embedded
+ C c;
+ }
+ static class C {
+ }
+ """){ _, _ ->
+ }.failsToCompile().withErrorContaining(ProcessorErrors.RECURSIVE_REFERENCE_DETECTED.format("foo.bar.MyPojo -> foo.bar.MyPojo.A -> foo.bar.MyPojo"))
+ }
+
fun singleRun(code: String, vararg jfos:JavaFileObject, handler: (Pojo) -> Unit)
: CompileTester {
return singleRun(code, *jfos) { pojo, _ ->
diff --git a/room/compiler/src/test/kotlin/android/arch/persistence/room/processor/QueryMethodProcessorTest.kt b/room/compiler/src/test/kotlin/android/arch/persistence/room/processor/QueryMethodProcessorTest.kt
index 1172194..e07e04d 100644
--- a/room/compiler/src/test/kotlin/android/arch/persistence/room/processor/QueryMethodProcessorTest.kt
+++ b/room/compiler/src/test/kotlin/android/arch/persistence/room/processor/QueryMethodProcessorTest.kt
@@ -70,6 +70,7 @@
companion object {
const val DAO_PREFIX = """
package foo.bar;
+ import android.support.annotation.NonNull;
import android.arch.persistence.room.*;
@Dao
abstract class MyClass {
@@ -312,7 +313,7 @@
""") { _, _ ->
// do nothing
}.failsToCompile()
- .withErrorContaining(ProcessorErrors.LIVE_DATA_QUERY_NOTHING_TO_OBSERVE)
+ .withErrorContaining(ProcessorErrors.OBSERVABLE_QUERY_NOTHING_TO_OBSERVE)
}
@Test
@@ -324,7 +325,7 @@
""") { _, _ ->
// do nothing
}.failsToCompile()
- .withErrorContaining(ProcessorErrors.LIVE_DATA_QUERY_NOTHING_TO_OBSERVE)
+ .withErrorContaining(ProcessorErrors.OBSERVABLE_QUERY_NOTHING_TO_OBSERVE)
}
@Test
@@ -444,6 +445,55 @@
}
@Test
+ fun query_detectTransaction_delete() {
+ singleQueryMethod(
+ """
+ @Query("delete from user where uid = :id")
+ abstract int deleteUser(String id);
+ """
+ ) { method, _ ->
+ assertThat(method.inTransaction, `is`(true))
+ }.compilesWithoutError()
+ }
+
+ @Test
+ fun query_detectTransaction_update() {
+ singleQueryMethod(
+ """
+ @Query("UPDATE user set uid = :id + 1 where uid = :id")
+ abstract int incrementId(String id);
+ """
+ ) { method, _ ->
+ assertThat(method.inTransaction, `is`(true))
+ }.compilesWithoutError()
+ }
+
+ @Test
+ fun query_detectTransaction_select() {
+ singleQueryMethod(
+ """
+ @Query("select * from user")
+ abstract int loadUsers();
+ """
+ ) { method, _ ->
+ assertThat(method.inTransaction, `is`(false))
+ }.compilesWithoutError()
+ }
+
+ @Test
+ fun query_detectTransaction_selectInTransaction() {
+ singleQueryMethod(
+ """
+ @Transaction
+ @Query("select * from user")
+ abstract int loadUsers();
+ """
+ ) { method, _ ->
+ assertThat(method.inTransaction, `is`(true))
+ }.compilesWithoutError()
+ }
+
+ @Test
fun skipVerification() {
singleQueryMethod(
"""
@@ -599,6 +649,30 @@
}
@Test
+ fun pojo_missingNonNull() {
+ pojoTest("""
+ @NonNull
+ String name;
+ String lastName;
+ """, listOf("lastName")) { adapter, _, _ ->
+ assertThat(adapter?.mapping?.unusedColumns, `is`(emptyList()))
+ assertThat(adapter?.mapping?.unusedFields, `is`(
+ adapter?.pojo?.fields?.filter { it.name == "name" }
+ ))
+ }?.failsToCompile()?.withWarningContaining(
+ ProcessorErrors.cursorPojoMismatch(
+ pojoTypeName = POJO,
+ unusedColumns = emptyList(),
+ unusedFields = listOf(createField("name")),
+ allColumns = listOf("lastName"),
+ allFields = listOf(createField("name"), createField("lastName"))
+ ))?.and()?.withErrorContaining(
+ ProcessorErrors.pojoMissingNonNull(pojoTypeName = POJO,
+ missingPojoFields = listOf("name"),
+ allQueryColumns = listOf("lastName")))
+ }
+
+ @Test
fun pojo_tooManyFieldsAndColumns() {
pojoTest("""
String name;
diff --git a/room/integration-tests/kotlintestapp/schemas/android.arch.persistence.room.integration.kotlintestapp.TestDatabase/1.json b/room/integration-tests/kotlintestapp/schemas/android.arch.persistence.room.integration.kotlintestapp.TestDatabase/1.json
index 6425de7..e6bb21c 100644
--- a/room/integration-tests/kotlintestapp/schemas/android.arch.persistence.room.integration.kotlintestapp.TestDatabase/1.json
+++ b/room/integration-tests/kotlintestapp/schemas/android.arch.persistence.room.integration.kotlintestapp.TestDatabase/1.json
@@ -2,7 +2,7 @@
"formatVersion": 1,
"database": {
"version": 1,
- "identityHash": "7beb328c9cd44a7782dfaa18c30ecb83",
+ "identityHash": "933c7e2810b0f89ab84faa68bbea5852",
"entities": [
{
"tableName": "Book",
@@ -161,11 +161,37 @@
]
}
]
+ },
+ {
+ "tableName": "NoArgClass",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `class_name` TEXT NOT NULL, PRIMARY KEY(`id`))",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "id",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "class_name",
+ "columnName": "class_name",
+ "affinity": "TEXT",
+ "notNull": true
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "id"
+ ],
+ "autoGenerate": false
+ },
+ "indices": [],
+ "foreignKeys": []
}
],
"setupQueries": [
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
- "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, \"7beb328c9cd44a7782dfaa18c30ecb83\")"
+ "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, \"933c7e2810b0f89ab84faa68bbea5852\")"
]
}
}
\ No newline at end of file
diff --git a/room/integration-tests/kotlintestapp/src/androidTest/java/android/arch/persistence/room/integration/kotlintestapp/TestDatabase.kt b/room/integration-tests/kotlintestapp/src/androidTest/java/android/arch/persistence/room/integration/kotlintestapp/TestDatabase.kt
index b9344af..74d8853 100644
--- a/room/integration-tests/kotlintestapp/src/androidTest/java/android/arch/persistence/room/integration/kotlintestapp/TestDatabase.kt
+++ b/room/integration-tests/kotlintestapp/src/androidTest/java/android/arch/persistence/room/integration/kotlintestapp/TestDatabase.kt
@@ -23,9 +23,11 @@
import android.arch.persistence.room.integration.kotlintestapp.vo.Author
import android.arch.persistence.room.integration.kotlintestapp.vo.Book
import android.arch.persistence.room.integration.kotlintestapp.vo.BookAuthor
+import android.arch.persistence.room.integration.kotlintestapp.vo.NoArgClass
import android.arch.persistence.room.integration.kotlintestapp.vo.Publisher
-@Database(entities = arrayOf(Book::class, Author::class, Publisher::class, BookAuthor::class),
+@Database(entities = arrayOf(Book::class, Author::class, Publisher::class, BookAuthor::class,
+ NoArgClass::class),
version = 1)
abstract class TestDatabase : RoomDatabase() {
diff --git a/room/integration-tests/kotlintestapp/src/androidTest/java/android/arch/persistence/room/integration/kotlintestapp/migration/MigrationKotlinTest.kt b/room/integration-tests/kotlintestapp/src/androidTest/java/android/arch/persistence/room/integration/kotlintestapp/migration/MigrationKotlinTest.kt
index eb1a9b8..4265e19 100644
--- a/room/integration-tests/kotlintestapp/src/androidTest/java/android/arch/persistence/room/integration/kotlintestapp/migration/MigrationKotlinTest.kt
+++ b/room/integration-tests/kotlintestapp/src/androidTest/java/android/arch/persistence/room/integration/kotlintestapp/migration/MigrationKotlinTest.kt
@@ -290,6 +290,8 @@
+ " (`id` INTEGER NOT NULL, `name` TEXT, PRIMARY KEY(`id`),"
+ " FOREIGN KEY(`name`) REFERENCES `Entity1`(`name`)"
+ " ON UPDATE NO ACTION ON DELETE NO ACTION DEFERRABLE INITIALLY DEFERRED)")
+ database.execSQL("CREATE UNIQUE INDEX `index_entity1` ON "
+ + MigrationDbKotlin.Entity1.TABLE_NAME + " (`name`)")
}
}
diff --git a/room/integration-tests/kotlintestapp/src/androidTest/java/android/arch/persistence/room/integration/kotlintestapp/test/BooksDaoTest.kt b/room/integration-tests/kotlintestapp/src/androidTest/java/android/arch/persistence/room/integration/kotlintestapp/test/BooksDaoTest.kt
index 7985c77..acc2c7d 100644
--- a/room/integration-tests/kotlintestapp/src/androidTest/java/android/arch/persistence/room/integration/kotlintestapp/test/BooksDaoTest.kt
+++ b/room/integration-tests/kotlintestapp/src/androidTest/java/android/arch/persistence/room/integration/kotlintestapp/test/BooksDaoTest.kt
@@ -21,6 +21,7 @@
import android.arch.persistence.room.integration.kotlintestapp.vo.BookWithPublisher
import android.arch.persistence.room.integration.kotlintestapp.vo.Publisher
import android.database.sqlite.SQLiteConstraintException
+import android.support.test.filters.SmallTest
import org.hamcrest.CoreMatchers
import org.hamcrest.CoreMatchers.`is`
import org.hamcrest.CoreMatchers.instanceOf
@@ -30,6 +31,7 @@
import java.util.Date
import kotlin.collections.ArrayList
+@SmallTest
class BooksDaoTest : TestDatabaseTest() {
@Test
diff --git a/room/integration-tests/kotlintestapp/src/androidTest/java/android/arch/persistence/room/integration/kotlintestapp/test/LiveDataQueryTest.kt b/room/integration-tests/kotlintestapp/src/androidTest/java/android/arch/persistence/room/integration/kotlintestapp/test/LiveDataQueryTest.kt
index 41fcf82..70bc54c 100644
--- a/room/integration-tests/kotlintestapp/src/androidTest/java/android/arch/persistence/room/integration/kotlintestapp/test/LiveDataQueryTest.kt
+++ b/room/integration-tests/kotlintestapp/src/androidTest/java/android/arch/persistence/room/integration/kotlintestapp/test/LiveDataQueryTest.kt
@@ -19,11 +19,12 @@
import android.arch.persistence.room.integration.kotlintestapp.vo.Book
import android.arch.persistence.room.integration.kotlintestapp.vo.BookWithPublisher
import android.arch.persistence.room.integration.kotlintestapp.vo.Publisher
+import android.support.test.filters.SmallTest
import org.hamcrest.CoreMatchers.`is`
import org.hamcrest.MatcherAssert.assertThat
import org.junit.Test
-
+@SmallTest
class LiveDataQueryTest : TestDatabaseTest() {
@Test
diff --git a/room/integration-tests/kotlintestapp/src/androidTest/java/android/arch/persistence/room/integration/kotlintestapp/test/RxJava2QueryTest.kt b/room/integration-tests/kotlintestapp/src/androidTest/java/android/arch/persistence/room/integration/kotlintestapp/test/RxJava2QueryTest.kt
index 9cdeabc..094eea8 100644
--- a/room/integration-tests/kotlintestapp/src/androidTest/java/android/arch/persistence/room/integration/kotlintestapp/test/RxJava2QueryTest.kt
+++ b/room/integration-tests/kotlintestapp/src/androidTest/java/android/arch/persistence/room/integration/kotlintestapp/test/RxJava2QueryTest.kt
@@ -18,8 +18,10 @@
import android.arch.persistence.room.EmptyResultSetException
import android.arch.persistence.room.integration.kotlintestapp.vo.BookWithPublisher
+import android.support.test.filters.SmallTest
import org.junit.Test
+@SmallTest
class RxJava2QueryTest : TestDatabaseTest() {
@Test
diff --git a/paging/runtime/src/androidTest/java/android/arch/paging/StringPagedList.java b/room/integration-tests/kotlintestapp/src/androidTest/java/android/arch/persistence/room/integration/kotlintestapp/vo/NoArgClass.kt
similarity index 64%
copy from paging/runtime/src/androidTest/java/android/arch/paging/StringPagedList.java
copy to room/integration-tests/kotlintestapp/src/androidTest/java/android/arch/persistence/room/integration/kotlintestapp/vo/NoArgClass.kt
index 5318d38..e1e1a7d 100644
--- a/paging/runtime/src/androidTest/java/android/arch/paging/StringPagedList.java
+++ b/room/integration-tests/kotlintestapp/src/androidTest/java/android/arch/persistence/room/integration/kotlintestapp/vo/NoArgClass.kt
@@ -14,12 +14,13 @@
* limitations under the License.
*/
-package android.arch.paging;
+package android.arch.persistence.room.integration.kotlintestapp.vo
-import java.util.Arrays;
+import android.arch.persistence.room.Entity
+import android.arch.persistence.room.PrimaryKey
-public class StringPagedList extends NullPaddedList<String> {
- public StringPagedList(int leadingNulls, int trailingNulls, String... items) {
- super(leadingNulls, Arrays.asList(items), trailingNulls);
- }
-}
+/**
+ * just here to ensure that we handle no-arg constructors fine from kotlin.
+ */
+@Entity
+data class NoArgClass(@PrimaryKey var id: Long = 0, var class_name: String = "")
\ No newline at end of file
diff --git a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/PKeyTestDatabase.java b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/PKeyTestDatabase.java
index b6339a8..63b9507 100644
--- a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/PKeyTestDatabase.java
+++ b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/PKeyTestDatabase.java
@@ -23,17 +23,19 @@
import android.arch.persistence.room.RoomDatabase;
import android.arch.persistence.room.integration.testapp.vo.IntAutoIncPKeyEntity;
import android.arch.persistence.room.integration.testapp.vo.IntegerAutoIncPKeyEntity;
+import android.arch.persistence.room.integration.testapp.vo.IntegerPKeyEntity;
import android.arch.persistence.room.integration.testapp.vo.ObjectPKeyEntity;
import java.util.List;
@Database(entities = {IntAutoIncPKeyEntity.class, IntegerAutoIncPKeyEntity.class,
- ObjectPKeyEntity.class}, version = 1,
+ ObjectPKeyEntity.class, IntegerPKeyEntity.class}, version = 1,
exportSchema = false)
public abstract class PKeyTestDatabase extends RoomDatabase {
public abstract IntPKeyDao intPKeyDao();
- public abstract IntegerPKeyDao integerPKeyDao();
+ public abstract IntegerAutoIncPKeyDao integerAutoIncPKeyDao();
public abstract ObjectPKeyDao objectPKeyDao();
+ public abstract IntegerPKeyDao integerPKeyDao();
@Dao
public interface IntPKeyDao {
@@ -53,7 +55,7 @@
}
@Dao
- public interface IntegerPKeyDao {
+ public interface IntegerAutoIncPKeyDao {
@Insert
void insertMe(IntegerAutoIncPKeyEntity item);
@@ -75,4 +77,13 @@
@Insert
void insertMe(ObjectPKeyEntity item);
}
+
+ @Dao
+ public interface IntegerPKeyDao {
+ @Insert
+ void insertMe(IntegerPKeyEntity item);
+
+ @Query("select * from IntegerPKeyEntity")
+ List<IntegerPKeyEntity> loadAll();
+ }
}
diff --git a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/TestDatabase.java b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/TestDatabase.java
index 9417296..2fad7b1 100644
--- a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/TestDatabase.java
+++ b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/TestDatabase.java
@@ -21,6 +21,7 @@
import android.arch.persistence.room.TypeConverter;
import android.arch.persistence.room.TypeConverters;
import android.arch.persistence.room.integration.testapp.dao.BlobEntityDao;
+import android.arch.persistence.room.integration.testapp.dao.FunnyNamedDao;
import android.arch.persistence.room.integration.testapp.dao.PetCoupleDao;
import android.arch.persistence.room.integration.testapp.dao.PetDao;
import android.arch.persistence.room.integration.testapp.dao.ProductDao;
@@ -31,6 +32,7 @@
import android.arch.persistence.room.integration.testapp.dao.UserPetDao;
import android.arch.persistence.room.integration.testapp.dao.WithClauseDao;
import android.arch.persistence.room.integration.testapp.vo.BlobEntity;
+import android.arch.persistence.room.integration.testapp.vo.FunnyNamedEntity;
import android.arch.persistence.room.integration.testapp.vo.Pet;
import android.arch.persistence.room.integration.testapp.vo.PetCouple;
import android.arch.persistence.room.integration.testapp.vo.Product;
@@ -41,7 +43,7 @@
import java.util.Date;
@Database(entities = {User.class, Pet.class, School.class, PetCouple.class, Toy.class,
- BlobEntity.class, Product.class},
+ BlobEntity.class, Product.class, FunnyNamedEntity.class},
version = 1, exportSchema = false)
@TypeConverters(TestDatabase.Converters.class)
public abstract class TestDatabase extends RoomDatabase {
@@ -55,6 +57,7 @@
public abstract ProductDao getProductDao();
public abstract SpecificDogDao getSpecificDogDao();
public abstract WithClauseDao getWithClauseDao();
+ public abstract FunnyNamedDao getFunnyNamedDao();
@SuppressWarnings("unused")
public static class Converters {
diff --git a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/dao/FunnyNamedDao.java b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/dao/FunnyNamedDao.java
new file mode 100644
index 0000000..93b5e72
--- /dev/null
+++ b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/dao/FunnyNamedDao.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.arch.persistence.room.integration.testapp.dao;
+
+import static android.arch.persistence.room.integration.testapp.vo.FunnyNamedEntity.COLUMN_ID;
+import static android.arch.persistence.room.integration.testapp.vo.FunnyNamedEntity.TABLE_NAME;
+
+import android.arch.lifecycle.LiveData;
+import android.arch.persistence.room.Dao;
+import android.arch.persistence.room.Delete;
+import android.arch.persistence.room.Insert;
+import android.arch.persistence.room.Query;
+import android.arch.persistence.room.Update;
+import android.arch.persistence.room.integration.testapp.vo.FunnyNamedEntity;
+
+import java.util.List;
+
+@Dao
+public interface FunnyNamedDao {
+ String SELECT_ONE = "select * from \"" + TABLE_NAME + "\" WHERE \"" + COLUMN_ID + "\" = :id";
+ @Insert
+ void insert(FunnyNamedEntity... entities);
+ @Delete
+ void delete(FunnyNamedEntity... entities);
+ @Update
+ void update(FunnyNamedEntity... entities);
+
+ @Query("select * from \"" + TABLE_NAME + "\" WHERE \"" + COLUMN_ID + "\" IN (:ids)")
+ List<FunnyNamedEntity> loadAll(int... ids);
+
+ @Query(SELECT_ONE)
+ LiveData<FunnyNamedEntity> observableOne(int id);
+
+ @Query(SELECT_ONE)
+ FunnyNamedEntity load(int id);
+}
diff --git a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/dao/SchoolDao.java b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/dao/SchoolDao.java
index 7bb137f..18e8d93 100644
--- a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/dao/SchoolDao.java
+++ b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/dao/SchoolDao.java
@@ -35,16 +35,16 @@
@Query("SELECT * from School WHERE address_street LIKE '%' || :street || '%'")
public abstract List<School> findByStreet(String street);
- @Query("SELECT mName, manager_mName FROM School")
+ @Query("SELECT mId, mName, manager_mName FROM School")
public abstract List<School> schoolAndManagerNames();
- @Query("SELECT mName, manager_mName FROM School")
+ @Query("SELECT mId, mName, manager_mName FROM School")
@SuppressWarnings(RoomWarnings.CURSOR_MISMATCH)
public abstract List<SchoolRef> schoolAndManagerNamesAsPojo();
@Query("SELECT address_lat as lat, address_lng as lng FROM School WHERE mId = :schoolId")
public abstract Coordinates loadCoordinates(int schoolId);
- @Query("SELECT address_lat, address_lng FROM School WHERE mId = :schoolId")
+ @Query("SELECT mId, address_lat, address_lng FROM School WHERE mId = :schoolId")
public abstract School loadCoordinatesAsSchool(int schoolId);
}
diff --git a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/dao/UserDao.java b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/dao/UserDao.java
index 665a1ae..cb2bb03 100644
--- a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/dao/UserDao.java
+++ b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/dao/UserDao.java
@@ -17,6 +17,7 @@
package android.arch.persistence.room.integration.testapp.dao;
import android.arch.lifecycle.LiveData;
+import android.arch.paging.DataSource;
import android.arch.paging.LivePagedListProvider;
import android.arch.paging.TiledDataSource;
import android.arch.persistence.room.Dao;
@@ -184,7 +185,10 @@
}
@Query("SELECT * FROM user where mAge > :age")
- public abstract LivePagedListProvider<Integer, User> loadPagedByAge(int age);
+ public abstract DataSource.Factory<Integer, User> loadPagedByAge(int age);
+
+ @Query("SELECT * FROM user where mAge > :age")
+ public abstract LivePagedListProvider<Integer, User> loadPagedByAge_legacy(int age);
@Query("SELECT * FROM user ORDER BY mAge DESC")
public abstract TiledDataSource<User> loadUsersByAgeDesc();
@@ -200,67 +204,6 @@
@Query("SELECT COUNT(*) from user")
public abstract Integer getUserCount();
-
- // QueryDataSourceTest - name desc
-
- // limit-offset
- @Query("SELECT * from user ORDER BY mName DESC LIMIT :limit OFFSET :offset")
- public abstract List<User> userNameLimitOffset(int limit, int offset);
-
- // keyed
- @Query("SELECT * from user ORDER BY mName DESC LIMIT :limit")
- public abstract List<User> userNameInitial(int limit);
-
- @Query("SELECT * from user WHERE mName < :key ORDER BY mName DESC LIMIT :limit")
- public abstract List<User> userNameLoadAfter(String key, int limit);
-
- @Query("SELECT COUNT(*) from user WHERE mName < :key ORDER BY mName DESC")
- public abstract int userNameCountAfter(String key);
-
- @Query("SELECT * from user WHERE mName > :key ORDER BY mName ASC LIMIT :limit")
- public abstract List<User> userNameLoadBefore(String key, int limit);
-
- @Query("SELECT COUNT(*) from user WHERE mName > :key ORDER BY mName ASC")
- public abstract int userNameCountBefore(String key);
-
-
-
- // ComplexQueryDataSourceTest - last desc, first asc, id desc
-
- // limit-offset
- @Query("SELECT * from user"
- + " ORDER BY mLastName DESC, mName ASC, mId DESC"
- + " LIMIT :limit OFFSET :offset")
- public abstract List<User> userComplexLimitOffset(int limit, int offset);
-
- // keyed
- @Query("SELECT * from user"
- + " ORDER BY mLastName DESC, mName ASC, mId DESC"
- + " LIMIT :limit")
- public abstract List<User> userComplexInitial(int limit);
-
- @Query("SELECT * from user"
- + " WHERE mLastName < :lastName or (mLastName = :lastName and (mName > :name or (mName = :name and mId < :id)))"
- + " ORDER BY mLastName DESC, mName ASC, mId DESC"
- + " LIMIT :limit")
- public abstract List<User> userComplexLoadAfter(String lastName, String name, int id, int limit);
-
- @Query("SELECT COUNT(*) from user"
- + " WHERE mLastName < :lastName or (mLastName = :lastName and (mName > :name or (mName = :name and mId < :id)))"
- + " ORDER BY mLastName DESC, mName ASC, mId DESC")
- public abstract int userComplexCountAfter(String lastName, String name, int id);
-
- @Query("SELECT * from user"
- + " WHERE mLastName > :lastName or (mLastName = :lastName and (mName < :name or (mName = :name and mId > :id)))"
- + " ORDER BY mLastName ASC, mName DESC, mId ASC"
- + " LIMIT :limit")
- public abstract List<User> userComplexLoadBefore(String lastName, String name, int id, int limit);
-
- @Query("SELECT COUNT(*) from user"
- + " WHERE mLastName > :lastName or (mLastName = :lastName and (mName < :name or (mName = :name and mId > :id)))"
- + " ORDER BY mLastName ASC, mName DESC, mId ASC")
- public abstract int userComplexCountBefore(String lastName, String name, int id);
-
@Transaction
public void insertBothByAnnotation(final User a, final User b) {
insert(a);
diff --git a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/dao/UserPetDao.java b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/dao/UserPetDao.java
index 3507aee..eb15901 100644
--- a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/dao/UserPetDao.java
+++ b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/dao/UserPetDao.java
@@ -33,6 +33,8 @@
import java.util.List;
+import io.reactivex.Flowable;
+
@Dao
public interface UserPetDao {
@Query("SELECT * FROM User u, Pet p WHERE u.mId = p.mUserId")
@@ -62,6 +64,9 @@
@Query("SELECT * FROM User u where u.mId = :userId")
LiveData<UserAndAllPets> liveUserWithPets(int userId);
+ @Query("SELECT * FROM User u where u.mId = :userId")
+ Flowable<UserAndAllPets> flowableUserWithPets(int userId);
+
@Query("SELECT * FROM User u where u.mId = :uid")
EmbeddedUserAndAllPets loadUserAndPetsAsEmbedded(int uid);
diff --git a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/dao/WithClauseDao.java b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/dao/WithClauseDao.java
index b1c38ed..40098ed 100644
--- a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/dao/WithClauseDao.java
+++ b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/dao/WithClauseDao.java
@@ -16,13 +16,16 @@
package android.arch.persistence.room.integration.testapp.dao;
+import android.annotation.TargetApi;
import android.arch.lifecycle.LiveData;
import android.arch.persistence.room.Dao;
import android.arch.persistence.room.Query;
+import android.os.Build;
import java.util.List;
@Dao
+@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public interface WithClauseDao {
@Query("WITH RECURSIVE factorial(n, fact) AS \n"
+ "(SELECT 0, 1 \n"
diff --git a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/migration/MigrationTest.java b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/migration/MigrationTest.java
index 725d53f..7fe2bc9 100644
--- a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/migration/MigrationTest.java
+++ b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/migration/MigrationTest.java
@@ -318,6 +318,8 @@
+ " (`id` INTEGER NOT NULL, `name` TEXT COLLATE NOCASE, PRIMARY KEY(`id`),"
+ " FOREIGN KEY(`name`) REFERENCES `Entity1`(`name`)"
+ " ON UPDATE NO ACTION ON DELETE NO ACTION DEFERRABLE INITIALLY DEFERRED)");
+ database.execSQL("CREATE UNIQUE INDEX `index_entity1` ON "
+ + MigrationDb.Entity1.TABLE_NAME + " (`name`)");
}
};
diff --git a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/paging/LivePagedListProviderTest.java b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/paging/DataSourceFactoryTest.java
similarity index 73%
rename from room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/paging/LivePagedListProviderTest.java
rename to room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/paging/DataSourceFactoryTest.java
index 4c9d73e..c546531 100644
--- a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/paging/LivePagedListProviderTest.java
+++ b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/paging/DataSourceFactoryTest.java
@@ -21,17 +21,18 @@
import static org.hamcrest.CoreMatchers.nullValue;
import static org.hamcrest.MatcherAssert.assertThat;
-import android.arch.core.executor.AppToolkitTaskExecutor;
+import android.arch.core.executor.ArchTaskExecutor;
import android.arch.core.executor.testing.CountingTaskExecutorRule;
import android.arch.lifecycle.Lifecycle;
import android.arch.lifecycle.LifecycleOwner;
import android.arch.lifecycle.LifecycleRegistry;
import android.arch.lifecycle.LiveData;
import android.arch.lifecycle.Observer;
+import android.arch.paging.LivePagedListBuilder;
+import android.arch.paging.PagedList;
import android.arch.persistence.room.integration.testapp.test.TestDatabaseTest;
import android.arch.persistence.room.integration.testapp.test.TestUtil;
import android.arch.persistence.room.integration.testapp.vo.User;
-import android.arch.paging.PagedList;
import android.support.annotation.Nullable;
import android.support.test.filters.LargeTest;
import android.support.test.runner.AndroidJUnit4;
@@ -46,15 +47,54 @@
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
+@LargeTest
@RunWith(AndroidJUnit4.class)
-public class LivePagedListProviderTest extends TestDatabaseTest {
+public class DataSourceFactoryTest extends TestDatabaseTest {
@Rule
public CountingTaskExecutorRule mExecutorRule = new CountingTaskExecutorRule();
+ private interface LivePagedListFactory {
+ LiveData<PagedList<User>> create();
+ }
+
@Test
- @LargeTest
public void getUsersAsPagedList()
throws InterruptedException, ExecutionException, TimeoutException {
+ validateUsersAsPagedList(new LivePagedListFactory() {
+ @Override
+ public LiveData<PagedList<User>> create() {
+ return new LivePagedListBuilder<Integer, User>()
+ .setPagingConfig(new PagedList.Config.Builder()
+ .setPageSize(10)
+ .setPrefetchDistance(1)
+ .setInitialLoadSizeHint(10).build())
+ .setDataSourceFactory(mUserDao.loadPagedByAge(3))
+ .build();
+ }
+ });
+ }
+
+
+ // TODO: delete this and factory abstraction when LivePagedListProvider is removed
+ @Test
+ public void getUsersAsPagedList_legacyLivePagedListProvider()
+ throws InterruptedException, ExecutionException, TimeoutException {
+ validateUsersAsPagedList(new LivePagedListFactory() {
+ @Override
+ public LiveData<PagedList<User>> create() {
+ return mUserDao.loadPagedByAge_legacy(3).create(
+ 0,
+ new PagedList.Config.Builder()
+ .setPageSize(10)
+ .setPrefetchDistance(1)
+ .setInitialLoadSizeHint(10)
+ .build());
+ }
+ });
+ }
+
+ private void validateUsersAsPagedList(LivePagedListFactory factory)
+ throws InterruptedException, ExecutionException, TimeoutException {
mDatabase.beginTransaction();
try {
for (int i = 0; i < 100; i++) {
@@ -67,12 +107,8 @@
mDatabase.endTransaction();
}
assertThat(mUserDao.count(), is(100));
- final LiveData<PagedList<User>> livePagedUsers = mUserDao.loadPagedByAge(3).create(
- 0,
- new PagedList.Config.Builder()
- .setPageSize(10)
- .setPrefetchDistance(1)
- .setInitialLoadSizeHint(10).build());
+
+ final LiveData<PagedList<User>> livePagedUsers = factory.create();
final TestLifecycleOwner testOwner = new TestLifecycleOwner();
testOwner.handleEvent(Lifecycle.Event.ON_CREATE);
@@ -131,7 +167,7 @@
return null;
}
});
- AppToolkitTaskExecutor.getInstance().executeOnMainThread(futureTask);
+ ArchTaskExecutor.getInstance().executeOnMainThread(futureTask);
futureTask.get();
}
@@ -155,7 +191,7 @@
private static class PagedListObserver<T> implements Observer<PagedList<T>> {
private PagedList<T> mList;
- public void reset() {
+ void reset() {
mList = null;
}
diff --git a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/ComplexQueryDataSourceTest.java b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/ComplexQueryDataSourceTest.java
deleted file mode 100644
index 4d58512..0000000
--- a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/ComplexQueryDataSourceTest.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.arch.persistence.room.integration.testapp.test;
-
-import android.arch.paging.BoundedDataSource;
-import android.arch.paging.KeyedDataSource;
-import android.arch.persistence.room.integration.testapp.vo.User;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.test.filters.MediumTest;
-import android.support.test.runner.AndroidJUnit4;
-
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import java.util.Arrays;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.List;
-import java.util.UUID;
-
-@MediumTest
-@RunWith(AndroidJUnit4.class)
-public class ComplexQueryDataSourceTest extends TestDatabaseTest {
-
- @SuppressWarnings("WeakerAccess")
- public class LastFirstIdKey {
- public final String lastName;
- public final String name;
- public final int id;
-
- public LastFirstIdKey(String lastName, String name, int id) {
- this.lastName = lastName;
- this.name = name;
- this.id = id;
- }
- }
-
- /**
- * Proper, keyed implementation.
- */
- public class KeyedUserQueryDataSource extends KeyedDataSource<LastFirstIdKey, User> {
-
- @NonNull
- @Override
- public LastFirstIdKey getKey(@NonNull User user) {
- return new LastFirstIdKey(
- user.getLastName(),
- user.getName(),
- user.getId());
- }
-
- @Override
- public int countItemsBefore(@NonNull LastFirstIdKey key) {
- return mUserDao.userComplexCountBefore(
- key.lastName,
- key.name,
- key.id);
- }
-
- @Override
- public int countItemsAfter(@NonNull LastFirstIdKey key) {
- return mUserDao.userComplexCountAfter(
- key.lastName,
- key.name,
- key.id);
- }
-
- @Nullable
- @Override
- public List<User> loadInitial(int pageSize) {
- return mUserDao.userComplexInitial(pageSize);
- }
-
- @Nullable
- @Override
- public List<User> loadBefore(@NonNull LastFirstIdKey key, int pageSize) {
- return mUserDao.userComplexLoadBefore(
- key.lastName,
- key.name,
- key.id,
- pageSize);
- }
-
- @Nullable
- @Override
- public List<User> loadAfter(@Nullable LastFirstIdKey key, int pageSize) {
- return mUserDao.userComplexLoadAfter(
- key.lastName,
- key.name,
- key.id,
- pageSize);
- }
- }
-
- /**
- * Lazy, LIMIT/OFFSET implementation.
- */
- public class OffsetUserQueryDataSource extends BoundedDataSource<User> {
-
- @Override
- public int countItems() {
- return mUserDao.getUserCount();
- }
-
- @Nullable
- @Override
- public List<User> loadRange(int startPosition, int loadCount) {
- return mUserDao.userComplexLimitOffset(loadCount, startPosition);
- }
- }
-
- private static final User[] USERS_BY_LAST_FIRST_ID = new User[100];
-
- @BeforeClass
- public static void setupClass() {
- String[] lastNames = new String[10];
-
- String[] firstNames = new String[10];
- for (int i = 0; i < 10; i++) {
- lastNames[i] = "f" + (char) ('a' + i);
- firstNames[i] = "l" + (char) ('a' + i);
- }
-
- for (int i = 0; i < USERS_BY_LAST_FIRST_ID.length; i++) {
- User user = new User();
- user.setId(i);
- user.setName(firstNames[i % 10]);
- user.setLastName(lastNames[(i / 10) % 10]);
- user.setAge((int) (10 + Math.random() * 50));
- user.setCustomField(UUID.randomUUID().toString());
- user.setBirthday(new Date());
- USERS_BY_LAST_FIRST_ID[i] = user;
- }
- }
-
- @Before
- public void setup() {
- mUserDao.insertAll(USERS_BY_LAST_FIRST_ID);
-
- Arrays.sort(USERS_BY_LAST_FIRST_ID, new Comparator<User>() {
- @Override
- public int compare(User o1, User o2) {
- int diff = o2.getLastName().compareTo(o1.getLastName());
- if (diff != 0) {
- return diff;
- }
- diff = o2.getName().compareTo(o1.getName());
- if (diff != 0) {
- return -diff; // Note: 'mName' is ASC, therefore diff reversed
- }
-
- return o2.getId() - o1.getId();
- }
- });
- }
-
- @Test
- public void testKeyedQueryDataSource() {
- QueryDataSourceTest.verifyUserDataSource(USERS_BY_LAST_FIRST_ID,
- new KeyedUserQueryDataSource());
- }
-
- @Test
- public void testIndexedQueryDataSourceFull() {
- QueryDataSourceTest.verifyUserDataSource(USERS_BY_LAST_FIRST_ID,
- new OffsetUserQueryDataSource());
- }
-}
diff --git a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/FunnyNamedDaoTest.java b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/FunnyNamedDaoTest.java
new file mode 100644
index 0000000..f4fca7f
--- /dev/null
+++ b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/FunnyNamedDaoTest.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.arch.persistence.room.integration.testapp.test;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.notNullValue;
+import static org.hamcrest.CoreMatchers.nullValue;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+import android.arch.core.executor.testing.CountingTaskExecutorRule;
+import android.arch.lifecycle.Observer;
+import android.arch.persistence.room.integration.testapp.vo.FunnyNamedEntity;
+import android.support.annotation.Nullable;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class FunnyNamedDaoTest extends TestDatabaseTest {
+ @Rule
+ public CountingTaskExecutorRule mExecutorRule = new CountingTaskExecutorRule();
+
+ @Test
+ public void readWrite() {
+ FunnyNamedEntity entity = new FunnyNamedEntity(1, "a");
+ mFunnyNamedDao.insert(entity);
+ FunnyNamedEntity loaded = mFunnyNamedDao.load(1);
+ assertThat(loaded, is(entity));
+ }
+
+ @Test
+ public void update() {
+ FunnyNamedEntity entity = new FunnyNamedEntity(1, "a");
+ mFunnyNamedDao.insert(entity);
+ entity.setValue("b");
+ mFunnyNamedDao.update(entity);
+ FunnyNamedEntity loaded = mFunnyNamedDao.load(1);
+ assertThat(loaded.getValue(), is("b"));
+ }
+
+ @Test
+ public void delete() {
+ FunnyNamedEntity entity = new FunnyNamedEntity(1, "a");
+ mFunnyNamedDao.insert(entity);
+ assertThat(mFunnyNamedDao.load(1), notNullValue());
+ mFunnyNamedDao.delete(entity);
+ assertThat(mFunnyNamedDao.load(1), nullValue());
+ }
+
+ @Test
+ public void observe() throws TimeoutException, InterruptedException {
+ final FunnyNamedEntity[] item = new FunnyNamedEntity[1];
+ mFunnyNamedDao.observableOne(2).observeForever(new Observer<FunnyNamedEntity>() {
+ @Override
+ public void onChanged(@Nullable FunnyNamedEntity funnyNamedEntity) {
+ item[0] = funnyNamedEntity;
+ }
+ });
+
+ FunnyNamedEntity entity = new FunnyNamedEntity(1, "a");
+ mFunnyNamedDao.insert(entity);
+ mExecutorRule.drainTasks(1, TimeUnit.MINUTES);
+ assertThat(item[0], nullValue());
+
+ final FunnyNamedEntity entity2 = new FunnyNamedEntity(2, "b");
+ mFunnyNamedDao.insert(entity2);
+ mExecutorRule.drainTasks(1, TimeUnit.MINUTES);
+ assertThat(item[0], is(entity2));
+
+ final FunnyNamedEntity entity3 = new FunnyNamedEntity(2, "c");
+ mFunnyNamedDao.update(entity3);
+ mExecutorRule.drainTasks(1, TimeUnit.MINUTES);
+ assertThat(item[0], is(entity3));
+ }
+}
diff --git a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/InvalidationTest.java b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/InvalidationTest.java
index 4787ce5..33f4018 100644
--- a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/InvalidationTest.java
+++ b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/InvalidationTest.java
@@ -17,20 +17,17 @@
package android.arch.persistence.room.integration.testapp.test;
import static org.hamcrest.CoreMatchers.hasItem;
-import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.nullValue;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.collection.IsCollectionWithSize.hasSize;
-import android.arch.core.executor.AppToolkitTaskExecutor;
-import android.arch.core.executor.TaskExecutor;
+import android.arch.core.executor.testing.CountingTaskExecutorRule;
import android.arch.persistence.room.InvalidationTracker;
import android.arch.persistence.room.Room;
import android.arch.persistence.room.integration.testapp.TestDatabase;
import android.arch.persistence.room.integration.testapp.dao.UserDao;
import android.arch.persistence.room.integration.testapp.vo.User;
import android.content.Context;
-import android.os.Handler;
-import android.os.Looper;
import android.support.annotation.NonNull;
import android.support.test.InstrumentationRegistry;
import android.support.test.filters.SmallTest;
@@ -38,17 +35,13 @@
import org.junit.After;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import java.util.Set;
-import java.util.concurrent.Callable;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.FutureTask;
import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
/**
* Tests invalidation tracking.
@@ -56,138 +49,97 @@
@SmallTest
@RunWith(AndroidJUnit4.class)
public class InvalidationTest {
+ @Rule
+ public CountingTaskExecutorRule executorRule = new CountingTaskExecutorRule();
private UserDao mUserDao;
private TestDatabase mDb;
@Before
- public void createDb() {
+ public void createDb() throws TimeoutException, InterruptedException {
Context context = InstrumentationRegistry.getTargetContext();
mDb = Room.inMemoryDatabaseBuilder(context, TestDatabase.class).build();
mUserDao = mDb.getUserDao();
- }
-
- @Before
- public void setSingleThreadedIO() {
- AppToolkitTaskExecutor.getInstance().setDelegate(new TaskExecutor() {
- ExecutorService mIOExecutor = Executors.newSingleThreadExecutor();
- Handler mHandler = new Handler(Looper.getMainLooper());
-
- @Override
- public void executeOnDiskIO(Runnable runnable) {
- mIOExecutor.execute(runnable);
- }
-
- @Override
- public void postToMainThread(Runnable runnable) {
- mHandler.post(runnable);
- }
-
- @Override
- public boolean isMainThread() {
- return Thread.currentThread() == Looper.getMainLooper().getThread();
- }
- });
+ drain();
}
@After
- public void clearExecutor() {
- AppToolkitTaskExecutor.getInstance().setDelegate(null);
+ public void closeDb() throws TimeoutException, InterruptedException {
+ mDb.close();
+ drain();
}
- private void waitUntilIOThreadIsIdle() {
- FutureTask<Void> future = new FutureTask<>(new Callable<Void>() {
- @Override
- public Void call() throws Exception {
- return null;
- }
- });
- AppToolkitTaskExecutor.getInstance().executeOnDiskIO(future);
- //noinspection TryWithIdenticalCatches
- try {
- future.get();
- } catch (InterruptedException e) {
- throw new RuntimeException(e);
- } catch (ExecutionException e) {
- throw new RuntimeException(e);
- }
+ private void drain() throws TimeoutException, InterruptedException {
+ executorRule.drainTasks(1, TimeUnit.MINUTES);
}
@Test
- public void testInvalidationOnUpdate() throws InterruptedException {
+ public void testInvalidationOnUpdate() throws InterruptedException, TimeoutException {
User user = TestUtil.createUser(3);
mUserDao.insert(user);
- LatchObserver observer = new LatchObserver(1, "User");
+ LoggingObserver observer = new LoggingObserver("User");
mDb.getInvalidationTracker().addObserver(observer);
+ drain();
mUserDao.updateById(3, "foo2");
- waitUntilIOThreadIsIdle();
- assertThat(observer.await(), is(true));
+ drain();
assertThat(observer.getInvalidatedTables(), hasSize(1));
assertThat(observer.getInvalidatedTables(), hasItem("User"));
}
@Test
- public void testInvalidationOnDelete() throws InterruptedException {
+ public void testInvalidationOnDelete() throws InterruptedException, TimeoutException {
User user = TestUtil.createUser(3);
mUserDao.insert(user);
- LatchObserver observer = new LatchObserver(1, "User");
+ LoggingObserver observer = new LoggingObserver("User");
mDb.getInvalidationTracker().addObserver(observer);
+ drain();
mUserDao.delete(user);
- waitUntilIOThreadIsIdle();
- assertThat(observer.await(), is(true));
+ drain();
assertThat(observer.getInvalidatedTables(), hasSize(1));
assertThat(observer.getInvalidatedTables(), hasItem("User"));
}
@Test
- public void testInvalidationOnInsert() throws InterruptedException {
- LatchObserver observer = new LatchObserver(1, "User");
+ public void testInvalidationOnInsert() throws InterruptedException, TimeoutException {
+ LoggingObserver observer = new LoggingObserver("User");
mDb.getInvalidationTracker().addObserver(observer);
+ drain();
mUserDao.insert(TestUtil.createUser(3));
- waitUntilIOThreadIsIdle();
- assertThat(observer.await(), is(true));
+ drain();
assertThat(observer.getInvalidatedTables(), hasSize(1));
assertThat(observer.getInvalidatedTables(), hasItem("User"));
}
@Test
- public void testDontInvalidateOnLateInsert() throws InterruptedException {
- LatchObserver observer = new LatchObserver(1, "User");
+ public void testDontInvalidateOnLateInsert() throws InterruptedException, TimeoutException {
+ LoggingObserver observer = new LoggingObserver("User");
mUserDao.insert(TestUtil.createUser(3));
- waitUntilIOThreadIsIdle();
+ drain();
mDb.getInvalidationTracker().addObserver(observer);
- waitUntilIOThreadIsIdle();
- assertThat(observer.await(), is(false));
+ drain();
+ assertThat(observer.getInvalidatedTables(), nullValue());
}
@Test
- public void testMultipleTables() throws InterruptedException {
- LatchObserver observer = new LatchObserver(1, "User", "Pet");
+ public void testMultipleTables() throws InterruptedException, TimeoutException {
+ LoggingObserver observer = new LoggingObserver("User", "Pet");
mDb.getInvalidationTracker().addObserver(observer);
+ drain();
mUserDao.insert(TestUtil.createUser(3));
- waitUntilIOThreadIsIdle();
- assertThat(observer.await(), is(true));
+ drain();
assertThat(observer.getInvalidatedTables(), hasSize(1));
assertThat(observer.getInvalidatedTables(), hasItem("User"));
}
- private static class LatchObserver extends InvalidationTracker.Observer {
- CountDownLatch mLatch;
-
+ private static class LoggingObserver extends InvalidationTracker.Observer {
private Set<String> mInvalidatedTables;
- LatchObserver(int permits, String... tables) {
+ LoggingObserver(String... tables) {
super(tables);
- mLatch = new CountDownLatch(permits);
- }
-
- boolean await() throws InterruptedException {
- return mLatch.await(5, TimeUnit.SECONDS);
}
@Override
public void onInvalidated(@NonNull Set<String> tables) {
mInvalidatedTables = tables;
- mLatch.countDown();
}
Set<String> getInvalidatedTables() {
diff --git a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/LiveDataQueryTest.java b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/LiveDataQueryTest.java
index cae8445..d78411f 100644
--- a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/LiveDataQueryTest.java
+++ b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/LiveDataQueryTest.java
@@ -21,7 +21,7 @@
import static org.hamcrest.CoreMatchers.nullValue;
import static org.hamcrest.MatcherAssert.assertThat;
-import android.arch.core.executor.AppToolkitTaskExecutor;
+import android.arch.core.executor.ArchTaskExecutor;
import android.arch.core.executor.testing.CountingTaskExecutorRule;
import android.arch.lifecycle.Lifecycle;
import android.arch.lifecycle.LifecycleOwner;
@@ -35,9 +35,11 @@
import android.arch.persistence.room.integration.testapp.vo.Toy;
import android.arch.persistence.room.integration.testapp.vo.User;
import android.arch.persistence.room.integration.testapp.vo.UserAndAllPets;
+import android.os.Build;
import android.support.annotation.Nullable;
import android.support.test.InstrumentationRegistry;
import android.support.test.filters.MediumTest;
+import android.support.test.filters.SdkSuppress;
import android.support.test.filters.SmallTest;
import android.support.test.runner.AndroidJUnit4;
@@ -235,6 +237,7 @@
}
@Test
+ @SdkSuppress(minSdkVersion = Build.VERSION_CODES.LOLLIPOP)
public void withWithClause() throws ExecutionException, InterruptedException,
TimeoutException {
LiveData<List<String>> actual =
@@ -322,7 +325,7 @@
return null;
}
});
- AppToolkitTaskExecutor.getInstance().executeOnMainThread(futureTask);
+ ArchTaskExecutor.getInstance().executeOnMainThread(futureTask);
futureTask.get();
}
diff --git a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/PrimaryKeyTest.java b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/PrimaryKeyTest.java
index 8d213f2..fda4373 100644
--- a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/PrimaryKeyTest.java
+++ b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/PrimaryKeyTest.java
@@ -26,6 +26,7 @@
import android.arch.persistence.room.integration.testapp.PKeyTestDatabase;
import android.arch.persistence.room.integration.testapp.vo.IntAutoIncPKeyEntity;
import android.arch.persistence.room.integration.testapp.vo.IntegerAutoIncPKeyEntity;
+import android.arch.persistence.room.integration.testapp.vo.IntegerPKeyEntity;
import android.arch.persistence.room.integration.testapp.vo.ObjectPKeyEntity;
import android.database.sqlite.SQLiteConstraintException;
import android.support.test.InstrumentationRegistry;
@@ -37,6 +38,7 @@
import org.junit.runner.RunWith;
import java.util.Arrays;
+import java.util.List;
@RunWith(AndroidJUnit4.class)
@SmallTest
@@ -53,8 +55,8 @@
public void integerTest() {
IntegerAutoIncPKeyEntity entity = new IntegerAutoIncPKeyEntity();
entity.data = "foo";
- mDatabase.integerPKeyDao().insertMe(entity);
- IntegerAutoIncPKeyEntity loaded = mDatabase.integerPKeyDao().getMe(1);
+ mDatabase.integerAutoIncPKeyDao().insertMe(entity);
+ IntegerAutoIncPKeyEntity loaded = mDatabase.integerAutoIncPKeyDao().getMe(1);
assertThat(loaded, notNullValue());
assertThat(loaded.data, is(entity.data));
}
@@ -64,8 +66,8 @@
IntegerAutoIncPKeyEntity entity = new IntegerAutoIncPKeyEntity();
entity.pKey = 0;
entity.data = "foo";
- mDatabase.integerPKeyDao().insertMe(entity);
- IntegerAutoIncPKeyEntity loaded = mDatabase.integerPKeyDao().getMe(0);
+ mDatabase.integerAutoIncPKeyDao().insertMe(entity);
+ IntegerAutoIncPKeyEntity loaded = mDatabase.integerAutoIncPKeyDao().getMe(0);
assertThat(loaded, notNullValue());
assertThat(loaded.data, is(entity.data));
}
@@ -102,8 +104,8 @@
public void getInsertedIdFromInteger() {
IntegerAutoIncPKeyEntity entity = new IntegerAutoIncPKeyEntity();
entity.data = "foo";
- final long id = mDatabase.integerPKeyDao().insertAndGetId(entity);
- assertThat(mDatabase.integerPKeyDao().getMe((int) id).data, is("foo"));
+ final long id = mDatabase.integerAutoIncPKeyDao().insertAndGetId(entity);
+ assertThat(mDatabase.integerAutoIncPKeyDao().getMe((int) id).data, is("foo"));
}
@Test
@@ -112,8 +114,9 @@
entity.data = "foo";
IntegerAutoIncPKeyEntity entity2 = new IntegerAutoIncPKeyEntity();
entity2.data = "foo2";
- final long[] ids = mDatabase.integerPKeyDao().insertAndGetIds(entity, entity2);
- assertThat(mDatabase.integerPKeyDao().loadDataById(ids), is(Arrays.asList("foo", "foo2")));
+ final long[] ids = mDatabase.integerAutoIncPKeyDao().insertAndGetIds(entity, entity2);
+ assertThat(mDatabase.integerAutoIncPKeyDao().loadDataById(ids),
+ is(Arrays.asList("foo", "foo2")));
}
@Test
@@ -129,4 +132,16 @@
assertNotNull("Was expecting an exception", throwable);
assertThat(throwable, instanceOf(SQLiteConstraintException.class));
}
+
+ @Test
+ public void insertNullPrimaryKeyForInteger() throws Exception {
+ IntegerPKeyEntity entity = new IntegerPKeyEntity();
+ entity.data = "data";
+ mDatabase.integerPKeyDao().insertMe(entity);
+
+ List<IntegerPKeyEntity> list = mDatabase.integerPKeyDao().loadAll();
+ assertThat(list.size(), is(1));
+ assertThat(list.get(0).data, is("data"));
+ assertNotNull(list.get(0).pKey);
+ }
}
diff --git a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/QueryDataSourceTest.java b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/QueryDataSourceTest.java
deleted file mode 100644
index e11117e..0000000
--- a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/QueryDataSourceTest.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.arch.persistence.room.integration.testapp.test;
-
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
-import android.arch.paging.BoundedDataSource;
-import android.arch.paging.ContiguousDataSource;
-import android.arch.paging.KeyedDataSource;
-import android.arch.paging.NullPaddedList;
-import android.arch.paging.PositionalDataSource;
-import android.arch.persistence.room.integration.testapp.vo.User;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.test.filters.MediumTest;
-import android.support.test.runner.AndroidJUnit4;
-
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Comparator;
-import java.util.List;
-
-@MediumTest
-@RunWith(AndroidJUnit4.class)
-public class QueryDataSourceTest extends TestDatabaseTest {
- /**
- * Proper, keyed implementation.
- */
- public class KeyedUserQueryDataSource extends KeyedDataSource<String, User> {
- @NonNull
- @Override
- public String getKey(@NonNull User item) {
- return item.getName();
- }
-
- @Override
- public int countItemsBefore(@NonNull String userName) {
- return mUserDao.userNameCountBefore(userName);
- }
-
- @Override
- public int countItemsAfter(@NonNull String userName) {
- return mUserDao.userNameCountAfter(userName);
- }
-
- @Nullable
- @Override
- public List<User> loadInitial(int pageSize) {
- return mUserDao.userNameInitial(pageSize);
- }
-
- @Nullable
- @Override
- public List<User> loadBefore(@NonNull String userName, int pageSize) {
- return mUserDao.userNameLoadBefore(userName, pageSize);
- }
-
- @Nullable
- @Override
- public List<User> loadAfter(@Nullable String userName, int pageSize) {
- return mUserDao.userNameLoadAfter(userName, pageSize);
- }
- }
-
- /**
- * Lazy, LIMIT/OFFSET implementation.
- */
- public class OffsetUserQueryDataSource extends BoundedDataSource<User> {
- @Override
- public int countItems() {
- return mUserDao.getUserCount();
- }
-
- @Nullable
- @Override
- public List<User> loadRange(int startPosition, int loadCount) {
- return mUserDao.userNameLimitOffset(loadCount, startPosition);
- }
- }
-
- private static final User[] USERS_BY_NAME = new User[50];
-
- @BeforeClass
- public static void setupClass() {
- for (int i = 0; i < USERS_BY_NAME.length; i++) {
- USERS_BY_NAME[i] = TestUtil.createUser(i);
- }
- }
-
- @Before
- public void setup() {
- mUserDao.insertAll(USERS_BY_NAME);
-
- Arrays.sort(USERS_BY_NAME, new Comparator<User>() {
- @Override
- public int compare(User o1, User o2) {
- return o2.getName().compareTo(o1.getName());
- }
- });
- }
-
- @Test
- public void testKeyedQueryDataSource() {
- verifyUserDataSource(USERS_BY_NAME, new KeyedUserQueryDataSource());
- }
-
- @Test
- public void testIndexedQueryDataSourceFull() {
- verifyUserDataSource(USERS_BY_NAME, new OffsetUserQueryDataSource());
- }
-
-
- public static <Key> void verifyUserDataSource(User[] expected,
- ContiguousDataSource<Key, User> dataSource) {
- List<User> list = new ArrayList<>();
-
- Object key;
- if (dataSource instanceof PositionalDataSource) {
- // start at 15 by loading 10 items around key 20
- key = 20;
- } else {
- // start at 15 by loading 10 items around key 19 (note, keyed is exclusive, pos isn't)
- KeyedDataSource<String, User> keyedDataSource =
- (KeyedDataSource<String, User>) dataSource;
- key = keyedDataSource.getKey(expected[19]);
- }
- @SuppressWarnings("unchecked")
- NullPaddedList<User> initial = dataSource.loadInitial((Key) key, 10, true);
-
- assertNotNull(initial);
- assertEquals(15, initial.getLeadingNullCount());
- assertEquals(expected.length - 25, initial.getTrailingNullCount());
- assertEquals(expected.length, initial.size());
-
- for (int i = 15; i < initial.size() - initial.getTrailingNullCount(); i++) {
- list.add(initial.get(i));
- }
-
- assertArrayEquals(Arrays.copyOfRange(expected, 15, 25), list.toArray());
- List<User> p = dataSource.loadAfter(24, list.get(list.size() - 1), 10);
- assertNotNull(p);
- list.addAll(p);
-
- assertArrayEquals(Arrays.copyOfRange(expected, 15, 35), list.toArray());
-
- p = dataSource.loadBefore(15, list.get(0), 10);
- assertNotNull(p);
- for (User u : p) {
- list.add(0, u);
- }
-
- assertArrayEquals(Arrays.copyOfRange(expected, 5, 35), list.toArray());
-
- p = dataSource.loadBefore(5, list.get(0), 10);
- assertNotNull(p);
- for (User u : p) {
- list.add(0, u);
- }
-
- assertArrayEquals(Arrays.copyOfRange(expected, 0, 35), list.toArray());
- }
-}
diff --git a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/QueryTransactionTest.java b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/QueryTransactionTest.java
new file mode 100644
index 0000000..291cfd6
--- /dev/null
+++ b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/QueryTransactionTest.java
@@ -0,0 +1,475 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.arch.persistence.room.integration.testapp.test;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.notNullValue;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+import android.arch.core.executor.ArchTaskExecutor;
+import android.arch.core.executor.testing.CountingTaskExecutorRule;
+import android.arch.lifecycle.Lifecycle;
+import android.arch.lifecycle.LiveData;
+import android.arch.lifecycle.Observer;
+import android.arch.paging.DataSource;
+import android.arch.paging.LivePagedListBuilder;
+import android.arch.paging.PagedList;
+import android.arch.paging.TiledDataSource;
+import android.arch.persistence.room.Dao;
+import android.arch.persistence.room.Database;
+import android.arch.persistence.room.Entity;
+import android.arch.persistence.room.Ignore;
+import android.arch.persistence.room.Insert;
+import android.arch.persistence.room.PrimaryKey;
+import android.arch.persistence.room.Query;
+import android.arch.persistence.room.Relation;
+import android.arch.persistence.room.Room;
+import android.arch.persistence.room.RoomDatabase;
+import android.arch.persistence.room.RoomWarnings;
+import android.arch.persistence.room.Transaction;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.SmallTest;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.FutureTask;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import io.reactivex.Flowable;
+import io.reactivex.Maybe;
+import io.reactivex.Single;
+import io.reactivex.observers.TestObserver;
+import io.reactivex.schedulers.Schedulers;
+import io.reactivex.subscribers.TestSubscriber;
+
+@SmallTest
+@RunWith(Parameterized.class)
+public class QueryTransactionTest {
+ @Rule
+ public CountingTaskExecutorRule countingTaskExecutorRule = new CountingTaskExecutorRule();
+ private static final AtomicInteger sStartedTransactionCount = new AtomicInteger(0);
+ private TransactionDb mDb;
+ private final boolean mUseTransactionDao;
+ private Entity1Dao mDao;
+ private final LiveDataQueryTest.TestLifecycleOwner mLifecycleOwner = new LiveDataQueryTest
+ .TestLifecycleOwner();
+
+ @NonNull
+ @Parameterized.Parameters(name = "useTransaction_{0}")
+ public static Boolean[] getParams() {
+ return new Boolean[]{false, true};
+ }
+
+ public QueryTransactionTest(boolean useTransactionDao) {
+ mUseTransactionDao = useTransactionDao;
+ }
+
+ @Before
+ public void initDb() {
+ InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
+ @Override
+ public void run() {
+ mLifecycleOwner.handleEvent(Lifecycle.Event.ON_START);
+ }
+ });
+
+ resetTransactionCount();
+ mDb = Room.inMemoryDatabaseBuilder(InstrumentationRegistry.getTargetContext(),
+ TransactionDb.class).build();
+ mDao = mUseTransactionDao ? mDb.transactionDao() : mDb.dao();
+ drain();
+ }
+
+ @After
+ public void closeDb() {
+ InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
+ @Override
+ public void run() {
+ mLifecycleOwner.handleEvent(Lifecycle.Event.ON_DESTROY);
+ }
+ });
+ drain();
+ mDb.close();
+ }
+
+ @Test
+ public void readList() {
+ mDao.insert(new Entity1(1, "foo"));
+ resetTransactionCount();
+
+ int expectedTransactionCount = mUseTransactionDao ? 1 : 0;
+ List<Entity1> allEntities = mDao.allEntities();
+ assertTransactionCount(allEntities, expectedTransactionCount);
+ }
+
+ @Test
+ public void liveData() {
+ LiveData<List<Entity1>> listLiveData = mDao.liveData();
+ observeForever(listLiveData);
+ drain();
+ assertThat(listLiveData.getValue(), is(Collections.<Entity1>emptyList()));
+
+ resetTransactionCount();
+ mDao.insert(new Entity1(1, "foo"));
+ drain();
+
+ //noinspection ConstantConditions
+ assertThat(listLiveData.getValue().size(), is(1));
+ int expectedTransactionCount = mUseTransactionDao ? 2 : 1;
+ assertTransactionCount(listLiveData.getValue(), expectedTransactionCount);
+ }
+
+ @Test
+ public void flowable() {
+ Flowable<List<Entity1>> flowable = mDao.flowable();
+ TestSubscriber<List<Entity1>> subscriber = observe(flowable);
+ drain();
+ assertThat(subscriber.values().size(), is(1));
+
+ resetTransactionCount();
+ mDao.insert(new Entity1(1, "foo"));
+ drain();
+
+ List<Entity1> allEntities = subscriber.values().get(1);
+ assertThat(allEntities.size(), is(1));
+ int expectedTransactionCount = mUseTransactionDao ? 2 : 1;
+ assertTransactionCount(allEntities, expectedTransactionCount);
+ }
+
+ @Test
+ public void maybe() {
+ mDao.insert(new Entity1(1, "foo"));
+ resetTransactionCount();
+
+ int expectedTransactionCount = mUseTransactionDao ? 1 : 0;
+ Maybe<List<Entity1>> listMaybe = mDao.maybe();
+ TestObserver<List<Entity1>> observer = observe(listMaybe);
+ drain();
+ List<Entity1> allEntities = observer.values().get(0);
+ assertTransactionCount(allEntities, expectedTransactionCount);
+ }
+
+ @Test
+ public void single() {
+ mDao.insert(new Entity1(1, "foo"));
+ resetTransactionCount();
+
+ int expectedTransactionCount = mUseTransactionDao ? 1 : 0;
+ Single<List<Entity1>> listMaybe = mDao.single();
+ TestObserver<List<Entity1>> observer = observe(listMaybe);
+ drain();
+ List<Entity1> allEntities = observer.values().get(0);
+ assertTransactionCount(allEntities, expectedTransactionCount);
+ }
+
+ @Test
+ public void relation() {
+ mDao.insert(new Entity1(1, "foo"));
+ mDao.insert(new Child(1, 1));
+ mDao.insert(new Child(2, 1));
+ resetTransactionCount();
+
+ List<Entity1WithChildren> result = mDao.withRelation();
+ int expectedTransactionCount = mUseTransactionDao ? 1 : 0;
+ assertTransactionCountWithChildren(result, expectedTransactionCount);
+ }
+
+ @Test
+ public void pagedList() {
+ LiveData<PagedList<Entity1>> pagedList = new LivePagedListBuilder<Integer, Entity1>()
+ .setDataSourceFactory(mDao.pagedList())
+ .setPagingConfig(10)
+ .build();
+ observeForever(pagedList);
+ drain();
+ assertThat(sStartedTransactionCount.get(), is(mUseTransactionDao ? 0 : 0));
+
+ mDao.insert(new Entity1(1, "foo"));
+ drain();
+ //noinspection ConstantConditions
+ assertThat(pagedList.getValue().size(), is(1));
+ assertTransactionCount(pagedList.getValue(), mUseTransactionDao ? 2 : 1);
+
+ mDao.insert(new Entity1(2, "bar"));
+ drain();
+ assertThat(pagedList.getValue().size(), is(2));
+ assertTransactionCount(pagedList.getValue(), mUseTransactionDao ? 4 : 2);
+ }
+
+ @Test
+ public void dataSource() {
+ mDao.insert(new Entity1(2, "bar"));
+ drain();
+ resetTransactionCount();
+ TiledDataSource<Entity1> dataSource = mDao.dataSource();
+ dataSource.loadRange(0, 10);
+ assertThat(sStartedTransactionCount.get(), is(mUseTransactionDao ? 1 : 0));
+ }
+
+ private void assertTransactionCount(List<Entity1> allEntities, int expectedTransactionCount) {
+ assertThat(sStartedTransactionCount.get(), is(expectedTransactionCount));
+ assertThat(allEntities.isEmpty(), is(false));
+ for (Entity1 entity1 : allEntities) {
+ assertThat(entity1.transactionId, is(expectedTransactionCount));
+ }
+ }
+
+ private void assertTransactionCountWithChildren(List<Entity1WithChildren> allEntities,
+ int expectedTransactionCount) {
+ assertThat(sStartedTransactionCount.get(), is(expectedTransactionCount));
+ assertThat(allEntities.isEmpty(), is(false));
+ for (Entity1WithChildren entity1 : allEntities) {
+ assertThat(entity1.transactionId, is(expectedTransactionCount));
+ assertThat(entity1.children, notNullValue());
+ assertThat(entity1.children.isEmpty(), is(false));
+ for (Child child : entity1.children) {
+ assertThat(child.transactionId, is(expectedTransactionCount));
+ }
+ }
+ }
+
+ private void resetTransactionCount() {
+ sStartedTransactionCount.set(0);
+ }
+
+ private void drain() {
+ try {
+ countingTaskExecutorRule.drainTasks(30, TimeUnit.SECONDS);
+ } catch (InterruptedException e) {
+ throw new AssertionError("interrupted", e);
+ } catch (TimeoutException e) {
+ throw new AssertionError("drain timed out", e);
+ }
+ }
+
+ private <T> TestSubscriber<T> observe(final Flowable<T> flowable) {
+ TestSubscriber<T> subscriber = new TestSubscriber<>();
+ flowable.observeOn(Schedulers.from(ArchTaskExecutor.getMainThreadExecutor()))
+ .subscribeWith(subscriber);
+ return subscriber;
+ }
+
+ private <T> TestObserver<T> observe(final Maybe<T> maybe) {
+ TestObserver<T> observer = new TestObserver<>();
+ maybe.observeOn(Schedulers.from(ArchTaskExecutor.getMainThreadExecutor()))
+ .subscribeWith(observer);
+ return observer;
+ }
+
+ private <T> TestObserver<T> observe(final Single<T> single) {
+ TestObserver<T> observer = new TestObserver<>();
+ single.observeOn(Schedulers.from(ArchTaskExecutor.getMainThreadExecutor()))
+ .subscribeWith(observer);
+ return observer;
+ }
+
+ private <T> void observeForever(final LiveData<T> liveData) {
+ FutureTask<Void> futureTask = new FutureTask<>(new Callable<Void>() {
+ @Override
+ public Void call() throws Exception {
+ liveData.observe(mLifecycleOwner, new Observer<T>() {
+ @Override
+ public void onChanged(@Nullable T t) {
+
+ }
+ });
+ return null;
+ }
+ });
+ ArchTaskExecutor.getMainThreadExecutor().execute(futureTask);
+ try {
+ futureTask.get();
+ } catch (InterruptedException e) {
+ throw new AssertionError("interrupted", e);
+ } catch (ExecutionException e) {
+ throw new AssertionError("execution error", e);
+ }
+ }
+
+ @SuppressWarnings("WeakerAccess")
+ static class Entity1WithChildren extends Entity1 {
+ @Relation(entity = Child.class, parentColumn = "id",
+ entityColumn = "entity1Id")
+ public List<Child> children;
+
+ Entity1WithChildren(int id, String value) {
+ super(id, value);
+ }
+ }
+
+ @SuppressWarnings("WeakerAccess")
+ @Entity
+ static class Child {
+ @PrimaryKey(autoGenerate = true)
+ public int id;
+ public int entity1Id;
+ @Ignore
+ public final int transactionId = sStartedTransactionCount.get();
+
+ Child(int id, int entity1Id) {
+ this.id = id;
+ this.entity1Id = entity1Id;
+ }
+ }
+
+ @SuppressWarnings("WeakerAccess")
+ @Entity
+ static class Entity1 {
+ @PrimaryKey(autoGenerate = true)
+ public int id;
+ public String value;
+ @Ignore
+ public final int transactionId = sStartedTransactionCount.get();
+
+ Entity1(int id, String value) {
+ this.id = id;
+ this.value = value;
+ }
+ }
+
+ // we don't support dao inheritance for queries so for now, go with this
+ interface Entity1Dao {
+ String SELECT_ALL = "select * from Entity1";
+
+ List<Entity1> allEntities();
+
+ Flowable<List<Entity1>> flowable();
+
+ Maybe<List<Entity1>> maybe();
+
+ Single<List<Entity1>> single();
+
+ LiveData<List<Entity1>> liveData();
+
+ List<Entity1WithChildren> withRelation();
+
+ DataSource.Factory<Integer, Entity1> pagedList();
+
+ TiledDataSource<Entity1> dataSource();
+
+ @Insert
+ void insert(Entity1 entity1);
+
+ @Insert
+ void insert(Child entity1);
+ }
+
+ @Dao
+ interface EntityDao extends Entity1Dao {
+ @Override
+ @Query(SELECT_ALL)
+ List<Entity1> allEntities();
+
+ @Override
+ @Query(SELECT_ALL)
+ Flowable<List<Entity1>> flowable();
+
+ @Override
+ @Query(SELECT_ALL)
+ LiveData<List<Entity1>> liveData();
+
+ @Override
+ @Query(SELECT_ALL)
+ Maybe<List<Entity1>> maybe();
+
+ @Override
+ @Query(SELECT_ALL)
+ Single<List<Entity1>> single();
+
+ @Override
+ @Query(SELECT_ALL)
+ @SuppressWarnings(RoomWarnings.RELATION_QUERY_WITHOUT_TRANSACTION)
+ List<Entity1WithChildren> withRelation();
+
+ @Override
+ @Query(SELECT_ALL)
+ DataSource.Factory<Integer, Entity1> pagedList();
+
+ @Override
+ @Query(SELECT_ALL)
+ TiledDataSource<Entity1> dataSource();
+ }
+
+ @Dao
+ interface TransactionDao extends Entity1Dao {
+ @Override
+ @Transaction
+ @Query(SELECT_ALL)
+ List<Entity1> allEntities();
+
+ @Override
+ @Transaction
+ @Query(SELECT_ALL)
+ Flowable<List<Entity1>> flowable();
+
+ @Override
+ @Transaction
+ @Query(SELECT_ALL)
+ LiveData<List<Entity1>> liveData();
+
+ @Override
+ @Transaction
+ @Query(SELECT_ALL)
+ Maybe<List<Entity1>> maybe();
+
+ @Override
+ @Transaction
+ @Query(SELECT_ALL)
+ Single<List<Entity1>> single();
+
+ @Override
+ @Transaction
+ @Query(SELECT_ALL)
+ List<Entity1WithChildren> withRelation();
+
+ @Override
+ @Transaction
+ @Query(SELECT_ALL)
+ DataSource.Factory<Integer, Entity1> pagedList();
+
+ @Override
+ @Transaction
+ @Query(SELECT_ALL)
+ TiledDataSource<Entity1> dataSource();
+ }
+
+ @Database(version = 1, entities = {Entity1.class, Child.class}, exportSchema = false)
+ abstract static class TransactionDb extends RoomDatabase {
+ abstract EntityDao dao();
+
+ abstract TransactionDao transactionDao();
+
+ @Override
+ public void beginTransaction() {
+ super.beginTransaction();
+ sStartedTransactionCount.incrementAndGet();
+ }
+ }
+}
diff --git a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/RxJava2Test.java b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/RxJava2Test.java
index 1bbc140..01d071e 100644
--- a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/RxJava2Test.java
+++ b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/RxJava2Test.java
@@ -19,10 +19,12 @@
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
-import android.arch.core.executor.AppToolkitTaskExecutor;
+import android.arch.core.executor.ArchTaskExecutor;
import android.arch.core.executor.TaskExecutor;
import android.arch.persistence.room.EmptyResultSetException;
+import android.arch.persistence.room.integration.testapp.vo.Pet;
import android.arch.persistence.room.integration.testapp.vo.User;
+import android.arch.persistence.room.integration.testapp.vo.UserAndAllPets;
import android.support.test.filters.MediumTest;
import android.support.test.filters.SmallTest;
import android.support.test.runner.AndroidJUnit4;
@@ -38,6 +40,7 @@
import java.util.List;
import io.reactivex.disposables.Disposable;
+import io.reactivex.functions.Predicate;
import io.reactivex.observers.TestObserver;
import io.reactivex.schedulers.TestScheduler;
import io.reactivex.subscribers.TestSubscriber;
@@ -52,7 +55,7 @@
public void setupSchedulers() {
mTestScheduler = new TestScheduler();
mTestScheduler.start();
- AppToolkitTaskExecutor.getInstance().setDelegate(new TaskExecutor() {
+ ArchTaskExecutor.getInstance().setDelegate(new TaskExecutor() {
@Override
public void executeOnDiskIO(Runnable runnable) {
mTestScheduler.scheduleDirect(runnable);
@@ -73,7 +76,7 @@
@After
public void clearSchedulers() {
mTestScheduler.shutdown();
- AppToolkitTaskExecutor.getInstance().setDelegate(null);
+ ArchTaskExecutor.getInstance().setDelegate(null);
}
private void drain() throws InterruptedException {
@@ -269,4 +272,60 @@
subscriber.cancel();
subscriber.assertNoErrors();
}
+
+ @Test
+ public void flowableWithRelation() throws InterruptedException {
+ final TestSubscriber<UserAndAllPets> subscriber = new TestSubscriber<>();
+
+ mUserPetDao.flowableUserWithPets(3).subscribe(subscriber);
+ drain();
+ subscriber.assertSubscribed();
+
+ drain();
+ subscriber.assertNoValues();
+
+ final User user = TestUtil.createUser(3);
+ mUserDao.insert(user);
+ drain();
+ subscriber.assertValue(new Predicate<UserAndAllPets>() {
+ @Override
+ public boolean test(UserAndAllPets userAndAllPets) throws Exception {
+ return userAndAllPets.user.equals(user);
+ }
+ });
+ subscriber.assertValueCount(1);
+ final Pet[] pets = TestUtil.createPetsForUser(3, 1, 2);
+ mPetDao.insertAll(pets);
+ drain();
+ subscriber.assertValueAt(1, new Predicate<UserAndAllPets>() {
+ @Override
+ public boolean test(UserAndAllPets userAndAllPets) throws Exception {
+ return userAndAllPets.user.equals(user)
+ && userAndAllPets.pets.equals(Arrays.asList(pets));
+ }
+ });
+ }
+
+ @Test
+ public void flowable_updateInTransaction() throws InterruptedException {
+ // When subscribing to the emissions of the user
+ final TestSubscriber<User> userTestSubscriber = mUserDao
+ .flowableUserById(3)
+ .observeOn(mTestScheduler)
+ .test();
+ drain();
+ userTestSubscriber.assertValueCount(0);
+
+ // When inserting a new user in the data source
+ mDatabase.beginTransaction();
+ try {
+ mUserDao.insert(TestUtil.createUser(3));
+ mDatabase.setTransactionSuccessful();
+
+ } finally {
+ mDatabase.endTransaction();
+ }
+ drain();
+ userTestSubscriber.assertValueCount(1);
+ }
}
diff --git a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/RxJava2WithInstantTaskExecutorTest.java b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/RxJava2WithInstantTaskExecutorTest.java
new file mode 100644
index 0000000..fcd0b00
--- /dev/null
+++ b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/RxJava2WithInstantTaskExecutorTest.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.arch.persistence.room.integration.testapp.test;
+
+import android.arch.core.executor.testing.InstantTaskExecutorRule;
+import android.arch.persistence.room.Room;
+import android.arch.persistence.room.integration.testapp.TestDatabase;
+import android.arch.persistence.room.integration.testapp.vo.User;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import io.reactivex.subscribers.TestSubscriber;
+
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class RxJava2WithInstantTaskExecutorTest {
+ @Rule
+ public InstantTaskExecutorRule instantTaskExecutorRule = new InstantTaskExecutorRule();
+
+ private TestDatabase mDatabase;
+
+ @Before
+ public void initDb() throws Exception {
+ // using an in-memory database because the information stored here disappears when the
+ // process is killed
+ mDatabase = Room.inMemoryDatabaseBuilder(InstrumentationRegistry.getContext(),
+ TestDatabase.class)
+ // allowing main thread queries, just for testing
+ .allowMainThreadQueries()
+ .build();
+ }
+
+ @Test
+ public void testFlowableInTransaction() {
+ // When subscribing to the emissions of the user
+ TestSubscriber<User> subscriber = mDatabase.getUserDao().flowableUserById(3).test();
+ subscriber.assertValueCount(0);
+
+ // When inserting a new user in the data source
+ mDatabase.beginTransaction();
+ try {
+ mDatabase.getUserDao().insert(TestUtil.createUser(3));
+ mDatabase.setTransactionSuccessful();
+ } finally {
+ mDatabase.endTransaction();
+ }
+
+ subscriber.assertValueCount(1);
+ }
+}
diff --git a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/TestDatabaseTest.java b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/TestDatabaseTest.java
index 51d5bb3..ec77561 100644
--- a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/TestDatabaseTest.java
+++ b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/TestDatabaseTest.java
@@ -18,6 +18,7 @@
import android.arch.persistence.room.Room;
import android.arch.persistence.room.integration.testapp.TestDatabase;
+import android.arch.persistence.room.integration.testapp.dao.FunnyNamedDao;
import android.arch.persistence.room.integration.testapp.dao.PetCoupleDao;
import android.arch.persistence.room.integration.testapp.dao.PetDao;
import android.arch.persistence.room.integration.testapp.dao.SchoolDao;
@@ -42,6 +43,7 @@
protected ToyDao mToyDao;
protected SpecificDogDao mSpecificDogDao;
protected WithClauseDao mWithClauseDao;
+ protected FunnyNamedDao mFunnyNamedDao;
@Before
public void createDb() {
@@ -55,5 +57,6 @@
mToyDao = mDatabase.getToyDao();
mSpecificDogDao = mDatabase.getSpecificDogDao();
mWithClauseDao = mDatabase.getWithClauseDao();
+ mFunnyNamedDao = mDatabase.getFunnyNamedDao();
}
}
diff --git a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/WithClauseTest.java b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/WithClauseTest.java
index 10897da..9209638 100644
--- a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/WithClauseTest.java
+++ b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/WithClauseTest.java
@@ -20,6 +20,8 @@
import static org.hamcrest.MatcherAssert.assertThat;
import android.arch.persistence.room.integration.testapp.vo.User;
+import android.os.Build;
+import android.support.test.filters.SdkSuppress;
import android.support.test.filters.SmallTest;
import android.support.test.runner.AndroidJUnit4;
@@ -32,6 +34,7 @@
@RunWith(AndroidJUnit4.class)
@SmallTest
+@SdkSuppress(minSdkVersion = Build.VERSION_CODES.LOLLIPOP)
public class WithClauseTest extends TestDatabaseTest{
@Test
public void noSourceOfData() {
diff --git a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/vo/FunnyNamedEntity.java b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/vo/FunnyNamedEntity.java
new file mode 100644
index 0000000..20f3c21
--- /dev/null
+++ b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/vo/FunnyNamedEntity.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.arch.persistence.room.integration.testapp.vo;
+
+import android.arch.persistence.room.ColumnInfo;
+import android.arch.persistence.room.Entity;
+import android.arch.persistence.room.PrimaryKey;
+
+/**
+ * An entity that was weird names
+ */
+@Entity(tableName = FunnyNamedEntity.TABLE_NAME)
+public class FunnyNamedEntity {
+ public static final String TABLE_NAME = "funny but not so funny";
+ public static final String COLUMN_ID = "_this $is id$";
+ public static final String COLUMN_VALUE = "unlikely-Ωşå¨ıünames";
+ @PrimaryKey(autoGenerate = true)
+ @ColumnInfo(name = COLUMN_ID)
+ private int mId;
+ @ColumnInfo(name = COLUMN_VALUE)
+ private String mValue;
+
+ public FunnyNamedEntity(int id, String value) {
+ mId = id;
+ mValue = value;
+ }
+
+ public int getId() {
+ return mId;
+ }
+
+ public void setId(int id) {
+ mId = id;
+ }
+
+ public String getValue() {
+ return mValue;
+ }
+
+ public void setValue(String value) {
+ mValue = value;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ FunnyNamedEntity entity = (FunnyNamedEntity) o;
+
+ if (mId != entity.mId) return false;
+ return mValue != null ? mValue.equals(entity.mValue) : entity.mValue == null;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = mId;
+ result = 31 * result + (mValue != null ? mValue.hashCode() : 0);
+ return result;
+ }
+}
diff --git a/paging/runtime/src/androidTest/java/android/arch/paging/StringPagedList.java b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/vo/IntegerPKeyEntity.java
similarity index 69%
copy from paging/runtime/src/androidTest/java/android/arch/paging/StringPagedList.java
copy to room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/vo/IntegerPKeyEntity.java
index 5318d38..cae1843 100644
--- a/paging/runtime/src/androidTest/java/android/arch/paging/StringPagedList.java
+++ b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/vo/IntegerPKeyEntity.java
@@ -14,12 +14,14 @@
* limitations under the License.
*/
-package android.arch.paging;
+package android.arch.persistence.room.integration.testapp.vo;
-import java.util.Arrays;
+import android.arch.persistence.room.Entity;
+import android.arch.persistence.room.PrimaryKey;
-public class StringPagedList extends NullPaddedList<String> {
- public StringPagedList(int leadingNulls, int trailingNulls, String... items) {
- super(leadingNulls, Arrays.asList(items), trailingNulls);
- }
+@Entity
+public class IntegerPKeyEntity {
+ @PrimaryKey
+ public Integer pKey;
+ public String data;
}
diff --git a/room/integration-tests/testapp/src/main/java/android/arch/persistence/room/integration/testapp/CustomerViewModel.java b/room/integration-tests/testapp/src/main/java/android/arch/persistence/room/integration/testapp/CustomerViewModel.java
index 1f434ad..89d16b7 100644
--- a/room/integration-tests/testapp/src/main/java/android/arch/persistence/room/integration/testapp/CustomerViewModel.java
+++ b/room/integration-tests/testapp/src/main/java/android/arch/persistence/room/integration/testapp/CustomerViewModel.java
@@ -17,11 +17,11 @@
package android.arch.persistence.room.integration.testapp;
import android.app.Application;
-import android.arch.core.executor.AppToolkitTaskExecutor;
+import android.arch.core.executor.ArchTaskExecutor;
import android.arch.lifecycle.AndroidViewModel;
import android.arch.lifecycle.LiveData;
import android.arch.paging.DataSource;
-import android.arch.paging.LivePagedListProvider;
+import android.arch.paging.LivePagedListBuilder;
import android.arch.paging.PagedList;
import android.arch.persistence.room.Room;
import android.arch.persistence.room.integration.testapp.database.Customer;
@@ -47,7 +47,7 @@
mDatabase = Room.databaseBuilder(this.getApplication(),
SampleDatabase.class, "customerDatabase").build();
- AppToolkitTaskExecutor.getInstance().executeOnDiskIO(new Runnable() {
+ ArchTaskExecutor.getInstance().executeOnDiskIO(new Runnable() {
@Override
public void run() {
// fill with some simple data
@@ -73,7 +73,7 @@
}
void insertCustomer() {
- AppToolkitTaskExecutor.getInstance().executeOnDiskIO(new Runnable() {
+ ArchTaskExecutor.getInstance().executeOnDiskIO(new Runnable() {
@Override
public void run() {
mDatabase.getCustomerDao().insert(createCustomer());
@@ -81,30 +81,30 @@
});
}
+ private static <K> LiveData<PagedList<Customer>> getLivePagedList(
+ K initialLoadKey, DataSource.Factory<K, Customer> dataSourceFactory) {
+ return new LivePagedListBuilder<K, Customer>()
+ .setInitialLoadKey(initialLoadKey)
+ .setPagingConfig(new PagedList.Config.Builder()
+ .setPageSize(10)
+ .setEnablePlaceholders(false)
+ .build())
+ .setDataSourceFactory(dataSourceFactory)
+ .build();
+ }
+
LiveData<PagedList<Customer>> getLivePagedList(int position) {
if (mLiveCustomerList == null) {
- mLiveCustomerList = mDatabase.getCustomerDao()
- .loadPagedAgeOrder().create(position,
- new PagedList.Config.Builder()
- .setPageSize(10)
- .setEnablePlaceholders(false)
- .build());
+ mLiveCustomerList =
+ getLivePagedList(position, mDatabase.getCustomerDao().loadPagedAgeOrder());
}
return mLiveCustomerList;
}
LiveData<PagedList<Customer>> getLivePagedList(String key) {
if (mLiveCustomerList == null) {
- mLiveCustomerList = new LivePagedListProvider<String, Customer>() {
- @Override
- protected DataSource<String, Customer> createDataSource() {
- return new LastNameAscCustomerDataSource(mDatabase);
- }
- }.create(key,
- new PagedList.Config.Builder()
- .setPageSize(10)
- .setEnablePlaceholders(false)
- .build());
+ mLiveCustomerList =
+ getLivePagedList(key, LastNameAscCustomerDataSource.factory(mDatabase));
}
return mLiveCustomerList;
}
diff --git a/room/integration-tests/testapp/src/main/java/android/arch/persistence/room/integration/testapp/RoomPagedListActivity.java b/room/integration-tests/testapp/src/main/java/android/arch/persistence/room/integration/testapp/RoomPagedListActivity.java
index 818c46b..cdd464e 100644
--- a/room/integration-tests/testapp/src/main/java/android/arch/persistence/room/integration/testapp/RoomPagedListActivity.java
+++ b/room/integration-tests/testapp/src/main/java/android/arch/persistence/room/integration/testapp/RoomPagedListActivity.java
@@ -86,6 +86,7 @@
@Override
protected void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
PagedList<Customer> list = mAdapter.getCurrentList();
if (list == null) {
// Can't find anything to restore
diff --git a/room/integration-tests/testapp/src/main/java/android/arch/persistence/room/integration/testapp/database/CustomerDao.java b/room/integration-tests/testapp/src/main/java/android/arch/persistence/room/integration/testapp/database/CustomerDao.java
index 9d40237..db45dc4 100644
--- a/room/integration-tests/testapp/src/main/java/android/arch/persistence/room/integration/testapp/database/CustomerDao.java
+++ b/room/integration-tests/testapp/src/main/java/android/arch/persistence/room/integration/testapp/database/CustomerDao.java
@@ -16,7 +16,7 @@
package android.arch.persistence.room.integration.testapp.database;
-import android.arch.paging.LivePagedListProvider;
+import android.arch.paging.DataSource;
import android.arch.persistence.room.Dao;
import android.arch.persistence.room.Insert;
import android.arch.persistence.room.Query;
@@ -44,12 +44,11 @@
void insertAll(Customer[] customers);
/**
- * @return LivePagedListProvider of customers, ordered by last name. Call
- * {@link LivePagedListProvider#create(Object, android.arch.paging.PagedList.Config)} to
- * get a LiveData of PagedLists.
+ * @return DataSource.Factory of customers, ordered by last name. Use
+ * {@link android.arch.paging.LivePagedListBuilder} to get a LiveData of PagedLists.
*/
@Query("SELECT * FROM customer ORDER BY mLastName ASC")
- LivePagedListProvider<Integer, Customer> loadPagedAgeOrder();
+ DataSource.Factory<Integer, Customer> loadPagedAgeOrder();
/**
* @return number of customers
@@ -59,7 +58,7 @@
// Keyed
- @Query("SELECT * from customer ORDER BY mLastName ASC LIMIT :limit")
+ @Query("SELECT * from customer ORDER BY mLastName DESC LIMIT :limit")
List<Customer> customerNameInitial(int limit);
@Query("SELECT * from customer WHERE mLastName < :key ORDER BY mLastName DESC LIMIT :limit")
diff --git a/room/integration-tests/testapp/src/main/java/android/arch/persistence/room/integration/testapp/database/LastNameAscCustomerDataSource.java b/room/integration-tests/testapp/src/main/java/android/arch/persistence/room/integration/testapp/database/LastNameAscCustomerDataSource.java
index 1bc731a..a38d6ae 100644
--- a/room/integration-tests/testapp/src/main/java/android/arch/persistence/room/integration/testapp/database/LastNameAscCustomerDataSource.java
+++ b/room/integration-tests/testapp/src/main/java/android/arch/persistence/room/integration/testapp/database/LastNameAscCustomerDataSource.java
@@ -15,6 +15,7 @@
*/
package android.arch.persistence.room.integration.testapp.database;
+import android.arch.paging.DataSource;
import android.arch.paging.KeyedDataSource;
import android.arch.persistence.room.InvalidationTracker;
import android.support.annotation.NonNull;
@@ -32,10 +33,19 @@
private final InvalidationTracker.Observer mObserver;
private SampleDatabase mDb;
+ public static Factory<String, Customer> factory(final SampleDatabase db) {
+ return new Factory<String, Customer>() {
+ @Override
+ public DataSource<String, Customer> create() {
+ return new LastNameAscCustomerDataSource(db);
+ }
+ };
+ }
+
/**
* Create a DataSource from the customer table of the given database
*/
- public LastNameAscCustomerDataSource(SampleDatabase db) {
+ private LastNameAscCustomerDataSource(SampleDatabase db) {
mDb = db;
mCustomerDao = db.getCustomerDao();
mObserver = new InvalidationTracker.Observer("customer") {
diff --git a/room/integration-tests/testapp/src/test/java/android/arch/persistence/room/integration/testapp/db/JDBCOpenHelper.java b/room/integration-tests/testapp/src/test/java/android/arch/persistence/room/integration/testapp/db/JDBCOpenHelper.java
deleted file mode 100644
index 3cbffc8..0000000
--- a/room/integration-tests/testapp/src/test/java/android/arch/persistence/room/integration/testapp/db/JDBCOpenHelper.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.arch.persistence.room.integration.testapp.db;
-
-import android.arch.persistence.db.SupportSQLiteDatabase;
-import android.arch.persistence.db.SupportSQLiteOpenHelper;
-
-public class JDBCOpenHelper implements SupportSQLiteOpenHelper {
- @Override
- public String getDatabaseName() {
- return null;
- }
-
- @Override
- public void setWriteAheadLoggingEnabled(boolean enabled) {
-
- }
-
- @Override
- public SupportSQLiteDatabase getWritableDatabase() {
- return null;
- }
-
- @Override
- public SupportSQLiteDatabase getReadableDatabase() {
- return null;
- }
-
- @Override
- public void close() {
-
- }
-}
diff --git a/room/migration/src/main/java/android/arch/persistence/room/migration/bundle/ForeignKeyBundle.java b/room/migration/src/main/java/android/arch/persistence/room/migration/bundle/ForeignKeyBundle.java
index 1467a4f..d72cf8c 100644
--- a/room/migration/src/main/java/android/arch/persistence/room/migration/bundle/ForeignKeyBundle.java
+++ b/room/migration/src/main/java/android/arch/persistence/room/migration/bundle/ForeignKeyBundle.java
@@ -16,13 +16,18 @@
package android.arch.persistence.room.migration.bundle;
+import android.support.annotation.RestrictTo;
+
import com.google.gson.annotations.SerializedName;
import java.util.List;
/**
* Holds the information about a foreign key reference.
+ *
+ * @hide
*/
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public class ForeignKeyBundle {
@SerializedName("table")
private String mTable;
diff --git a/room/runtime/src/androidTest/java/android/arch/persistence/room/migration/TableInfoTest.java b/room/runtime/src/androidTest/java/android/arch/persistence/room/migration/TableInfoTest.java
index 8b7025b..d88c02f 100644
--- a/room/runtime/src/androidTest/java/android/arch/persistence/room/migration/TableInfoTest.java
+++ b/room/runtime/src/androidTest/java/android/arch/persistence/room/migration/TableInfoTest.java
@@ -37,6 +37,7 @@
import org.junit.runner.RunWith;
import java.io.IOException;
+import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
@@ -179,6 +180,35 @@
Collections.<TableInfo.ForeignKey>emptySet())));
}
+ @Test
+ public void readIndices() {
+ mDb = createDatabase(
+ "CREATE TABLE foo (n INTEGER, indexed TEXT, unique_indexed TEXT,"
+ + "a INTEGER, b INTEGER);",
+ "CREATE INDEX foo_indexed ON foo(indexed);",
+ "CREATE UNIQUE INDEX foo_unique_indexed ON foo(unique_indexed COLLATE NOCASE"
+ + " DESC);",
+ "CREATE INDEX " + TableInfo.Index.DEFAULT_PREFIX + "foo_composite_indexed"
+ + " ON foo(a, b);"
+ );
+ TableInfo info = TableInfo.read(mDb, "foo");
+ assertThat(info, is(new TableInfo(
+ "foo",
+ toMap(new TableInfo.Column("n", "INTEGER", false, 0),
+ new TableInfo.Column("indexed", "TEXT", false, 0),
+ new TableInfo.Column("unique_indexed", "TEXT", false, 0),
+ new TableInfo.Column("a", "INTEGER", false, 0),
+ new TableInfo.Column("b", "INTEGER", false, 0)),
+ Collections.<TableInfo.ForeignKey>emptySet(),
+ toSet(new TableInfo.Index("index_foo_blahblah", false,
+ Arrays.asList("a", "b")),
+ new TableInfo.Index("foo_unique_indexed", true,
+ Arrays.asList("unique_indexed")),
+ new TableInfo.Index("foo_indexed", false,
+ Arrays.asList("indexed"))))
+ ));
+ }
+
private static Map<String, TableInfo.Column> toMap(TableInfo.Column... columns) {
Map<String, TableInfo.Column> result = new HashMap<>();
for (TableInfo.Column column : columns) {
@@ -187,6 +217,14 @@
return result;
}
+ private static <T> Set<T> toSet(T... ts) {
+ final HashSet<T> result = new HashSet<T>();
+ for (T t : ts) {
+ result.add(t);
+ }
+ return result;
+ }
+
@After
public void closeDb() throws IOException {
if (mDb != null && mDb.isOpen()) {
diff --git a/room/runtime/src/main/AndroidManifest.xml b/room/runtime/src/main/AndroidManifest.xml
index 79ffb93..54a5b36 100644
--- a/room/runtime/src/main/AndroidManifest.xml
+++ b/room/runtime/src/main/AndroidManifest.xml
@@ -16,8 +16,4 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.arch.persistence.room">
- <application>
- <meta-data android:name="android.arch.persistence.room.VERSION"
- android:value="${version}" />
- </application>
</manifest>
diff --git a/room/runtime/src/main/java/android/arch/persistence/room/InvalidationTracker.java b/room/runtime/src/main/java/android/arch/persistence/room/InvalidationTracker.java
index 33bc4ed..b31dc13 100644
--- a/room/runtime/src/main/java/android/arch/persistence/room/InvalidationTracker.java
+++ b/room/runtime/src/main/java/android/arch/persistence/room/InvalidationTracker.java
@@ -16,7 +16,7 @@
package android.arch.persistence.room;
-import android.arch.core.executor.AppToolkitTaskExecutor;
+import android.arch.core.executor.ArchTaskExecutor;
import android.arch.core.internal.SafeIterableMap;
import android.arch.persistence.db.SupportSQLiteDatabase;
import android.arch.persistence.db.SupportSQLiteStatement;
@@ -166,10 +166,12 @@
private static void appendTriggerName(StringBuilder builder, String tableName,
String triggerType) {
- builder.append("room_table_modification_trigger_")
+ builder.append("`")
+ .append("room_table_modification_trigger_")
.append(tableName)
.append("_")
- .append(triggerType);
+ .append(triggerType)
+ .append("`");
}
private void stopTrackingTable(SupportSQLiteDatabase writableDb, int tableId) {
@@ -192,9 +194,9 @@
appendTriggerName(stringBuilder, tableName, trigger);
stringBuilder.append(" AFTER ")
.append(trigger)
- .append(" ON ")
+ .append(" ON `")
.append(tableName)
- .append(" BEGIN INSERT OR REPLACE INTO ")
+ .append("` BEGIN INSERT OR REPLACE INTO ")
.append(UPDATE_TABLE_NAME)
.append(" VALUES(null, ")
.append(tableId)
@@ -217,7 +219,7 @@
*
* @param observer The observer which listens the database for changes.
*/
- public void addObserver(Observer observer) {
+ public void addObserver(@NonNull Observer observer) {
final String[] tableNames = observer.mTables;
int[] tableIds = new int[tableNames.length];
final int size = tableNames.length;
@@ -238,7 +240,7 @@
currentObserver = mObserverMap.putIfAbsent(observer, wrapper);
}
if (currentObserver == null && mObservedTableTracker.onAdded(tableIds)) {
- AppToolkitTaskExecutor.getInstance().executeOnDiskIO(mSyncTriggers);
+ ArchTaskExecutor.getInstance().executeOnDiskIO(mSyncTriggers);
}
}
@@ -263,13 +265,13 @@
* @param observer The observer to remove.
*/
@SuppressWarnings("WeakerAccess")
- public void removeObserver(final Observer observer) {
+ public void removeObserver(@NonNull final Observer observer) {
ObserverWrapper wrapper;
synchronized (mObserverMap) {
wrapper = mObserverMap.remove(observer);
}
if (wrapper != null && mObservedTableTracker.onRemoved(wrapper.mTableIds)) {
- AppToolkitTaskExecutor.getInstance().executeOnDiskIO(mSyncTriggers);
+ ArchTaskExecutor.getInstance().executeOnDiskIO(mSyncTriggers);
}
}
@@ -350,11 +352,18 @@
return;
}
- if (mDatabase.inTransaction()
- || !mPendingRefresh.compareAndSet(true, false)) {
+ if (!mPendingRefresh.compareAndSet(true, false)) {
// no pending refresh
return;
}
+
+ if (mDatabase.inTransaction()) {
+ // current thread is in a transaction. when it ends, it will invoke
+ // refreshRunnable again. mPendingRefresh is left as false on purpose
+ // so that the last transaction can flip it on again.
+ return;
+ }
+
mCleanupStatement.executeUpdateDelete();
mQueryArgs[0] = mMaxVersion;
Cursor cursor = mDatabase.query(SELECT_UPDATED_TABLES_SQL, mQueryArgs);
@@ -400,7 +409,7 @@
public void refreshVersionsAsync() {
// TODO we should consider doing this sync instead of async.
if (mPendingRefresh.compareAndSet(false, true)) {
- AppToolkitTaskExecutor.getInstance().executeOnDiskIO(mRefreshRunnable);
+ ArchTaskExecutor.getInstance().executeOnDiskIO(mRefreshRunnable);
}
}
diff --git a/room/runtime/src/main/java/android/arch/persistence/room/Room.java b/room/runtime/src/main/java/android/arch/persistence/room/Room.java
index 8ce4be0..2850b55 100644
--- a/room/runtime/src/main/java/android/arch/persistence/room/Room.java
+++ b/room/runtime/src/main/java/android/arch/persistence/room/Room.java
@@ -43,6 +43,7 @@
* @return A {@code RoomDatabaseBuilder<T>} which you can use to create the database.
*/
@SuppressWarnings("WeakerAccess")
+ @NonNull
public static <T extends RoomDatabase> RoomDatabase.Builder<T> databaseBuilder(
@NonNull Context context, @NonNull Class<T> klass, @NonNull String name) {
//noinspection ConstantConditions
@@ -65,6 +66,7 @@
* @param <T> The type of the database class.
* @return A {@code RoomDatabaseBuilder<T>} which you can use to create the database.
*/
+ @NonNull
public static <T extends RoomDatabase> RoomDatabase.Builder<T> inMemoryDatabaseBuilder(
@NonNull Context context, @NonNull Class<T> klass) {
return new RoomDatabase.Builder<>(context, klass, null);
diff --git a/room/runtime/src/main/java/android/arch/persistence/room/RoomDatabase.java b/room/runtime/src/main/java/android/arch/persistence/room/RoomDatabase.java
index f6f8c5c..8c94024 100644
--- a/room/runtime/src/main/java/android/arch/persistence/room/RoomDatabase.java
+++ b/room/runtime/src/main/java/android/arch/persistence/room/RoomDatabase.java
@@ -16,7 +16,7 @@
package android.arch.persistence.room;
-import android.arch.core.executor.AppToolkitTaskExecutor;
+import android.arch.core.executor.ArchTaskExecutor;
import android.arch.persistence.db.SimpleSQLiteQuery;
import android.arch.persistence.db.SupportSQLiteDatabase;
import android.arch.persistence.db.SupportSQLiteOpenHelper;
@@ -49,7 +49,7 @@
*
* @see Database
*/
-@SuppressWarnings({"unused", "WeakerAccess"})
+//@SuppressWarnings({"unused", "WeakerAccess"})
public abstract class RoomDatabase {
private static final String DB_IMPL_SUFFIX = "_Impl";
// set by the generated open helper.
@@ -153,12 +153,14 @@
*
* @hide
*/
+ @SuppressWarnings("WeakerAccess")
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+ // used in generated code
public void assertNotMainThread() {
if (mAllowMainThreadQueries) {
return;
}
- if (AppToolkitTaskExecutor.getInstance().isMainThread()) {
+ if (ArchTaskExecutor.getInstance().isMainThread()) {
throw new IllegalStateException("Cannot access database on the main thread since"
+ " it may potentially lock the UI for a long period of time.");
}
@@ -216,7 +218,11 @@
*/
public void endTransaction() {
mOpenHelper.getWritableDatabase().endTransaction();
- mInvalidationTracker.refreshVersionsAsync();
+ if (!inTransaction()) {
+ // enqueue refresh only if we are NOT in a transaction. Otherwise, wait for the last
+ // endTransaction call to do it.
+ mInvalidationTracker.refreshVersionsAsync();
+ }
}
/**
@@ -294,6 +300,7 @@
* @return True if there is an active transaction in current thread, false otherwise.
* @see SupportSQLiteDatabase#inTransaction()
*/
+ @SuppressWarnings("WeakerAccess")
public boolean inTransaction() {
return mOpenHelper.getWritableDatabase().inTransaction();
}
@@ -303,7 +310,6 @@
*
* @param <T> The type of the abstract database class.
*/
- @SuppressWarnings("unused")
public static class Builder<T extends RoomDatabase> {
private final Class<T> mDatabaseClass;
private final String mName;
@@ -333,7 +339,8 @@
* @param factory The factory to use to access the database.
* @return this
*/
- public Builder<T> openHelperFactory(SupportSQLiteOpenHelper.Factory factory) {
+ @NonNull
+ public Builder<T> openHelperFactory(@Nullable SupportSQLiteOpenHelper.Factory factory) {
mFactory = factory;
return this;
}
@@ -357,6 +364,7 @@
* changes.
* @return this
*/
+ @NonNull
public Builder<T> addMigrations(Migration... migrations) {
mMigrationContainer.addMigrations(migrations);
return this;
@@ -374,12 +382,16 @@
*
* @return this
*/
+ @NonNull
public Builder<T> allowMainThreadQueries() {
mAllowMainThreadQueries = true;
return this;
}
/**
+ * Allows Room to destructively recreate database tables if {@link Migration}s that would
+ * migrate old database schemas to the latest schema version are not found.
+ * <p>
* When the database version on the device does not match the latest schema version, Room
* runs necessary {@link Migration}s on the database.
* <p>
@@ -393,6 +405,7 @@
*
* @return this
*/
+ @NonNull
public Builder<T> fallbackToDestructiveMigration() {
mRequireMigration = false;
return this;
@@ -404,6 +417,7 @@
* @param callback The callback.
* @return this
*/
+ @NonNull
public Builder<T> addCallback(@NonNull Callback callback) {
if (mCallbacks == null) {
mCallbacks = new ArrayList<>();
@@ -420,6 +434,7 @@
*
* @return A new database instance.
*/
+ @NonNull
public T build() {
//noinspection ConstantConditions
if (mContext == null) {
@@ -486,6 +501,7 @@
* @return An ordered list of {@link Migration} objects that should be run to migrate
* between the given versions. If a migration path cannot be found, returns {@code null}.
*/
+ @SuppressWarnings("WeakerAccess")
@Nullable
public List<Migration> findMigrationPath(int start, int end) {
if (start == end) {
diff --git a/room/runtime/src/main/java/android/arch/persistence/room/migration/Migration.java b/room/runtime/src/main/java/android/arch/persistence/room/migration/Migration.java
index 907e624..d69ea0d 100644
--- a/room/runtime/src/main/java/android/arch/persistence/room/migration/Migration.java
+++ b/room/runtime/src/main/java/android/arch/persistence/room/migration/Migration.java
@@ -17,6 +17,7 @@
package android.arch.persistence.room.migration;
import android.arch.persistence.db.SupportSQLiteDatabase;
+import android.support.annotation.NonNull;
/**
* Base class for a database migration.
@@ -58,5 +59,5 @@
*
* @param database The database instance
*/
- public abstract void migrate(SupportSQLiteDatabase database);
+ public abstract void migrate(@NonNull SupportSQLiteDatabase database);
}
diff --git a/room/runtime/src/main/java/android/arch/persistence/room/paging/LimitOffsetDataSource.java b/room/runtime/src/main/java/android/arch/persistence/room/paging/LimitOffsetDataSource.java
index 800514c..2f9a888 100644
--- a/room/runtime/src/main/java/android/arch/persistence/room/paging/LimitOffsetDataSource.java
+++ b/room/runtime/src/main/java/android/arch/persistence/room/paging/LimitOffsetDataSource.java
@@ -49,10 +49,13 @@
private final RoomDatabase mDb;
@SuppressWarnings("FieldCanBeLocal")
private final InvalidationTracker.Observer mObserver;
+ private final boolean mInTransaction;
- protected LimitOffsetDataSource(RoomDatabase db, RoomSQLiteQuery query, String... tables) {
+ protected LimitOffsetDataSource(RoomDatabase db, RoomSQLiteQuery query,
+ boolean inTransaction, String... tables) {
mDb = db;
mSourceQuery = query;
+ mInTransaction = inTransaction;
mCountQuery = "SELECT COUNT(*) FROM ( " + mSourceQuery.getSql() + " )";
mLimitOffsetQuery = "SELECT * FROM ( " + mSourceQuery.getSql() + " ) LIMIT ? OFFSET ?";
mObserver = new InvalidationTracker.Observer(tables) {
@@ -98,13 +101,30 @@
sqLiteQuery.copyArgumentsFrom(mSourceQuery);
sqLiteQuery.bindLong(sqLiteQuery.getArgCount() - 1, loadCount);
sqLiteQuery.bindLong(sqLiteQuery.getArgCount(), startPosition);
- Cursor cursor = mDb.query(sqLiteQuery);
-
- try {
- return convertRows(cursor);
- } finally {
- cursor.close();
- sqLiteQuery.release();
+ if (mInTransaction) {
+ mDb.beginTransaction();
+ Cursor cursor = null;
+ try {
+ cursor = mDb.query(sqLiteQuery);
+ List<T> rows = convertRows(cursor);
+ mDb.setTransactionSuccessful();
+ return rows;
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ mDb.endTransaction();
+ sqLiteQuery.release();
+ }
+ } else {
+ Cursor cursor = mDb.query(sqLiteQuery);
+ //noinspection TryFinallyCanBeTryWithResources
+ try {
+ return convertRows(cursor);
+ } finally {
+ cursor.close();
+ sqLiteQuery.release();
+ }
}
}
}
diff --git a/room/runtime/src/main/java/android/arch/persistence/room/util/StringUtil.java b/room/runtime/src/main/java/android/arch/persistence/room/util/StringUtil.java
index bee05dd..d01e3c5 100644
--- a/room/runtime/src/main/java/android/arch/persistence/room/util/StringUtil.java
+++ b/room/runtime/src/main/java/android/arch/persistence/room/util/StringUtil.java
@@ -17,6 +17,7 @@
package android.arch.persistence.room.util;
import android.support.annotation.Nullable;
+import android.support.annotation.RestrictTo;
import android.util.Log;
import java.util.ArrayList;
@@ -24,10 +25,14 @@
import java.util.StringTokenizer;
/**
+ * @hide
+ *
* String utilities for Room
*/
-@SuppressWarnings("WeakerAccess")
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public class StringUtil {
+
+ @SuppressWarnings("unused")
public static final String[] EMPTY_STRING_ARRAY = new String[0];
/**
* Returns a new StringBuilder to be used while producing SQL queries.
diff --git a/room/runtime/src/main/java/android/arch/persistence/room/util/TableInfo.java b/room/runtime/src/main/java/android/arch/persistence/room/util/TableInfo.java
index bcd2e9e..a115147 100644
--- a/room/runtime/src/main/java/android/arch/persistence/room/util/TableInfo.java
+++ b/room/runtime/src/main/java/android/arch/persistence/room/util/TableInfo.java
@@ -20,6 +20,7 @@
import android.database.Cursor;
import android.os.Build;
import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.annotation.RestrictTo;
import java.util.ArrayList;
@@ -29,6 +30,7 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.TreeMap;
/**
* A data class that holds the information about a table.
@@ -56,11 +58,70 @@
public final Set<ForeignKey> foreignKeys;
+ /**
+ * Sometimes, Index information is not available (older versions). If so, we skip their
+ * verification.
+ */
+ @Nullable
+ public final Set<Index> indices;
+
@SuppressWarnings("unused")
- public TableInfo(String name, Map<String, Column> columns, Set<ForeignKey> foreignKeys) {
+ public TableInfo(String name, Map<String, Column> columns, Set<ForeignKey> foreignKeys,
+ Set<Index> indices) {
this.name = name;
this.columns = Collections.unmodifiableMap(columns);
this.foreignKeys = Collections.unmodifiableSet(foreignKeys);
+ this.indices = indices == null ? null : Collections.unmodifiableSet(indices);
+ }
+
+ /**
+ * For backward compatibility with dbs created with older versions.
+ */
+ @SuppressWarnings("unused")
+ public TableInfo(String name, Map<String, Column> columns, Set<ForeignKey> foreignKeys) {
+ this(name, columns, foreignKeys, Collections.<Index>emptySet());
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ TableInfo tableInfo = (TableInfo) o;
+
+ if (name != null ? !name.equals(tableInfo.name) : tableInfo.name != null) return false;
+ if (columns != null ? !columns.equals(tableInfo.columns) : tableInfo.columns != null) {
+ return false;
+ }
+ if (foreignKeys != null ? !foreignKeys.equals(tableInfo.foreignKeys)
+ : tableInfo.foreignKeys != null) {
+ return false;
+ }
+ if (indices == null || tableInfo.indices == null) {
+ // if one us is missing index information, seems like we couldn't acquire the
+ // information so we better skip.
+ return true;
+ }
+ return indices.equals(tableInfo.indices);
+ }
+
+ @Override
+ public int hashCode() {
+ int result = name != null ? name.hashCode() : 0;
+ result = 31 * result + (columns != null ? columns.hashCode() : 0);
+ result = 31 * result + (foreignKeys != null ? foreignKeys.hashCode() : 0);
+ // skip index, it is not reliable for comparison.
+ return result;
+ }
+
+ @Override
+ public String toString() {
+ return "TableInfo{"
+ + "name='" + name + '\''
+ + ", columns=" + columns
+ + ", foreignKeys=" + foreignKeys
+ + ", indices=" + indices
+ + '}';
}
/**
@@ -74,7 +135,8 @@
public static TableInfo read(SupportSQLiteDatabase database, String tableName) {
Map<String, Column> columns = readColumns(database, tableName);
Set<ForeignKey> foreignKeys = readForeignKeys(database, tableName);
- return new TableInfo(tableName, columns, foreignKeys);
+ Set<Index> indices = readIndices(database, tableName);
+ return new TableInfo(tableName, columns, foreignKeys, indices);
}
private static Set<ForeignKey> readForeignKeys(SupportSQLiteDatabase database,
@@ -167,34 +229,74 @@
return columns;
}
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
-
- TableInfo tableInfo = (TableInfo) o;
-
- if (!name.equals(tableInfo.name)) return false;
- //noinspection SimplifiableIfStatement
- if (!columns.equals(tableInfo.columns)) return false;
- return foreignKeys.equals(tableInfo.foreignKeys);
+ /**
+ * @return null if we cannot read the indices due to older sqlite implementations.
+ */
+ @Nullable
+ private static Set<Index> readIndices(SupportSQLiteDatabase database, String tableName) {
+ Cursor cursor = database.query("PRAGMA index_list(`" + tableName + "`)");
+ try {
+ final int nameColumnIndex = cursor.getColumnIndex("name");
+ final int originColumnIndex = cursor.getColumnIndex("origin");
+ final int uniqueIndex = cursor.getColumnIndex("unique");
+ if (nameColumnIndex == -1 || originColumnIndex == -1 || uniqueIndex == -1) {
+ // we cannot read them so better not validate any index.
+ return null;
+ }
+ HashSet<Index> indices = new HashSet<>();
+ while (cursor.moveToNext()) {
+ String origin = cursor.getString(originColumnIndex);
+ if (!"c".equals(origin)) {
+ // Ignore auto-created indices
+ continue;
+ }
+ String name = cursor.getString(nameColumnIndex);
+ boolean unique = cursor.getInt(uniqueIndex) == 1;
+ Index index = readIndex(database, name, unique);
+ if (index == null) {
+ // we cannot read it properly so better not read it
+ return null;
+ }
+ indices.add(index);
+ }
+ return indices;
+ } finally {
+ cursor.close();
+ }
}
- @Override
- public int hashCode() {
- int result = name.hashCode();
- result = 31 * result + columns.hashCode();
- result = 31 * result + foreignKeys.hashCode();
- return result;
- }
+ /**
+ * @return null if we cannot read the index due to older sqlite implementations.
+ */
+ @Nullable
+ private static Index readIndex(SupportSQLiteDatabase database, String name, boolean unique) {
+ Cursor cursor = database.query("PRAGMA index_xinfo(`" + name + "`)");
+ try {
+ final int seqnoColumnIndex = cursor.getColumnIndex("seqno");
+ final int cidColumnIndex = cursor.getColumnIndex("cid");
+ final int nameColumnIndex = cursor.getColumnIndex("name");
+ if (seqnoColumnIndex == -1 || cidColumnIndex == -1 || nameColumnIndex == -1) {
+ // we cannot read them so better not validate any index.
+ return null;
+ }
+ final TreeMap<Integer, String> results = new TreeMap<>();
- @Override
- public String toString() {
- return "TableInfo{"
- + "name='" + name + '\''
- + ", columns=" + columns
- + ", foreignKeys=" + foreignKeys
- + '}';
+ while (cursor.moveToNext()) {
+ int cid = cursor.getInt(cidColumnIndex);
+ if (cid < 0) {
+ // Ignore SQLite row ID
+ continue;
+ }
+ int seq = cursor.getInt(seqnoColumnIndex);
+ String columnName = cursor.getString(nameColumnIndex);
+ results.put(seq, columnName);
+ }
+ final List<String> columns = new ArrayList<>(results.size());
+ columns.addAll(results.values());
+ return new Index(name, unique, columns);
+ } finally {
+ cursor.close();
+ }
}
/**
@@ -379,4 +481,65 @@
}
}
}
+
+ /**
+ * Holds the information about an SQLite index
+ *
+ * @hide
+ */
+ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+ public static class Index {
+ // should match the value in Index.kt
+ public static final String DEFAULT_PREFIX = "index_";
+ public final String name;
+ public final boolean unique;
+ public final List<String> columns;
+
+ public Index(String name, boolean unique, List<String> columns) {
+ this.name = name;
+ this.unique = unique;
+ this.columns = columns;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ Index index = (Index) o;
+ if (unique != index.unique) {
+ return false;
+ }
+ if (!columns.equals(index.columns)) {
+ return false;
+ }
+ if (name.startsWith(Index.DEFAULT_PREFIX)) {
+ return index.name.startsWith(Index.DEFAULT_PREFIX);
+ } else {
+ return name.equals(index.name);
+ }
+ }
+
+ @Override
+ public int hashCode() {
+ int result;
+ if (name.startsWith(DEFAULT_PREFIX)) {
+ result = DEFAULT_PREFIX.hashCode();
+ } else {
+ result = name.hashCode();
+ }
+ result = 31 * result + (unique ? 1 : 0);
+ result = 31 * result + columns.hashCode();
+ return result;
+ }
+
+ @Override
+ public String toString() {
+ return "Index{"
+ + "name='" + name + '\''
+ + ", unique=" + unique
+ + ", columns=" + columns
+ + '}';
+ }
+ }
}
diff --git a/room/runtime/src/test/java/android/arch/persistence/room/InvalidationTrackerTest.java b/room/runtime/src/test/java/android/arch/persistence/room/InvalidationTrackerTest.java
index f0b730a..d7474fd 100644
--- a/room/runtime/src/test/java/android/arch/persistence/room/InvalidationTrackerTest.java
+++ b/room/runtime/src/test/java/android/arch/persistence/room/InvalidationTrackerTest.java
@@ -247,7 +247,7 @@
mTracker.mRefreshRunnable.run();
}
- @Test
+ // @Test - disabled due to flakiness b/65257997
public void closedDbAfterOpen() throws InterruptedException {
setVersions(3, 1);
mTracker.addObserver(new LatchObserver(1, "a", "b"));
diff --git a/room/rxjava2/src/main/AndroidManifest.xml b/room/rxjava2/src/main/AndroidManifest.xml
index 958f331..33279c6 100644
--- a/room/rxjava2/src/main/AndroidManifest.xml
+++ b/room/rxjava2/src/main/AndroidManifest.xml
@@ -16,8 +16,4 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.arch.persistence.room.rxjava2">
- <application>
- <meta-data android:name="android.arch.persistence.room.rxjava2.VERSION"
- android:value="${version}" />
- </application>
</manifest>
diff --git a/room/rxjava2/src/main/java/android/arch/persistence/room/RxRoom.java b/room/rxjava2/src/main/java/android/arch/persistence/room/RxRoom.java
index adfca27..285b3f8 100644
--- a/room/rxjava2/src/main/java/android/arch/persistence/room/RxRoom.java
+++ b/room/rxjava2/src/main/java/android/arch/persistence/room/RxRoom.java
@@ -16,7 +16,7 @@
package android.arch.persistence.room;
-import android.arch.core.executor.AppToolkitTaskExecutor;
+import android.arch.core.executor.ArchTaskExecutor;
import android.support.annotation.Nullable;
import android.support.annotation.RestrictTo;
@@ -133,7 +133,7 @@
public Disposable schedule(@NonNull Runnable run, long delay,
@NonNull TimeUnit unit) {
DisposableRunnable disposable = new DisposableRunnable(run, mDisposed);
- AppToolkitTaskExecutor.getInstance().executeOnDiskIO(run);
+ ArchTaskExecutor.getInstance().executeOnDiskIO(run);
return disposable;
}
diff --git a/room/testing/src/main/AndroidManifest.xml b/room/testing/src/main/AndroidManifest.xml
index 3e6414c..594f016 100644
--- a/room/testing/src/main/AndroidManifest.xml
+++ b/room/testing/src/main/AndroidManifest.xml
@@ -16,8 +16,4 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.arch.persistence.room.testing">
- <application>
- <meta-data android:name="android.arch.persistence.room.testing.VERSION"
- android:value="${version}" />
- </application>
</manifest>
diff --git a/room/testing/src/main/java/android/arch/persistence/room/testing/MigrationTestHelper.java b/room/testing/src/main/java/android/arch/persistence/room/testing/MigrationTestHelper.java
index a27fe0f..18e0a14 100644
--- a/room/testing/src/main/java/android/arch/persistence/room/testing/MigrationTestHelper.java
+++ b/room/testing/src/main/java/android/arch/persistence/room/testing/MigrationTestHelper.java
@@ -29,6 +29,7 @@
import android.arch.persistence.room.migration.bundle.EntityBundle;
import android.arch.persistence.room.migration.bundle.FieldBundle;
import android.arch.persistence.room.migration.bundle.ForeignKeyBundle;
+import android.arch.persistence.room.migration.bundle.IndexBundle;
import android.arch.persistence.room.migration.bundle.SchemaBundle;
import android.arch.persistence.room.util.TableInfo;
import android.content.Context;
@@ -285,7 +286,19 @@
private static TableInfo toTableInfo(EntityBundle entityBundle) {
return new TableInfo(entityBundle.getTableName(), toColumnMap(entityBundle),
- toForeignKeys(entityBundle.getForeignKeys()));
+ toForeignKeys(entityBundle.getForeignKeys()), toIndices(entityBundle.getIndices()));
+ }
+
+ private static Set<TableInfo.Index> toIndices(List<IndexBundle> indices) {
+ if (indices == null) {
+ return Collections.emptySet();
+ }
+ Set<TableInfo.Index> result = new HashSet<>();
+ for (IndexBundle bundle : indices) {
+ result.add(new TableInfo.Index(bundle.getName(), bundle.isUnique(),
+ bundle.getColumnNames()));
+ }
+ return result;
}
private static Set<TableInfo.ForeignKey> toForeignKeys(
diff --git a/samples/Support13Demos/build.gradle b/samples/Support13Demos/build.gradle
index f647e40..99175b3 100644
--- a/samples/Support13Demos/build.gradle
+++ b/samples/Support13Demos/build.gradle
@@ -12,12 +12,6 @@
targetSdkVersion project.ext.currentSdk
}
- sourceSets {
- main.manifest.srcFile 'AndroidManifest.xml'
- main.java.srcDirs = ['src']
- main.res.srcDirs = ['res']
- }
-
lintOptions {
checkReleaseBuilds false
abortOnError false
diff --git a/samples/Support13Demos/AndroidManifest.xml b/samples/Support13Demos/src/main/AndroidManifest.xml
similarity index 100%
rename from samples/Support13Demos/AndroidManifest.xml
rename to samples/Support13Demos/src/main/AndroidManifest.xml
diff --git a/samples/Support13Demos/src/com/example/android/supportv13/Cheeses.java b/samples/Support13Demos/src/main/java/com/example/android/supportv13/Cheeses.java
similarity index 100%
rename from samples/Support13Demos/src/com/example/android/supportv13/Cheeses.java
rename to samples/Support13Demos/src/main/java/com/example/android/supportv13/Cheeses.java
diff --git a/samples/Support13Demos/src/com/example/android/supportv13/Shakespeare.java b/samples/Support13Demos/src/main/java/com/example/android/supportv13/Shakespeare.java
similarity index 100%
rename from samples/Support13Demos/src/com/example/android/supportv13/Shakespeare.java
rename to samples/Support13Demos/src/main/java/com/example/android/supportv13/Shakespeare.java
diff --git a/samples/Support13Demos/src/com/example/android/supportv13/Support13Demos.java b/samples/Support13Demos/src/main/java/com/example/android/supportv13/Support13Demos.java
similarity index 100%
rename from samples/Support13Demos/src/com/example/android/supportv13/Support13Demos.java
rename to samples/Support13Demos/src/main/java/com/example/android/supportv13/Support13Demos.java
diff --git a/samples/Support13Demos/src/com/example/android/supportv13/_package.html b/samples/Support13Demos/src/main/java/com/example/android/supportv13/_package.html
similarity index 100%
rename from samples/Support13Demos/src/com/example/android/supportv13/_package.html
rename to samples/Support13Demos/src/main/java/com/example/android/supportv13/_package.html
diff --git a/samples/Support13Demos/src/com/example/android/supportv13/app/CountingFragment.java b/samples/Support13Demos/src/main/java/com/example/android/supportv13/app/CountingFragment.java
similarity index 100%
rename from samples/Support13Demos/src/com/example/android/supportv13/app/CountingFragment.java
rename to samples/Support13Demos/src/main/java/com/example/android/supportv13/app/CountingFragment.java
diff --git a/samples/Support13Demos/src/com/example/android/supportv13/app/CursorFragment.java b/samples/Support13Demos/src/main/java/com/example/android/supportv13/app/CursorFragment.java
similarity index 100%
rename from samples/Support13Demos/src/com/example/android/supportv13/app/CursorFragment.java
rename to samples/Support13Demos/src/main/java/com/example/android/supportv13/app/CursorFragment.java
diff --git a/samples/Support13Demos/src/com/example/android/supportv13/app/FragmentNestingPagerSupport.java b/samples/Support13Demos/src/main/java/com/example/android/supportv13/app/FragmentNestingPagerSupport.java
similarity index 100%
rename from samples/Support13Demos/src/com/example/android/supportv13/app/FragmentNestingPagerSupport.java
rename to samples/Support13Demos/src/main/java/com/example/android/supportv13/app/FragmentNestingPagerSupport.java
diff --git a/samples/Support13Demos/src/com/example/android/supportv13/app/FragmentNestingStatePagerSupport.java b/samples/Support13Demos/src/main/java/com/example/android/supportv13/app/FragmentNestingStatePagerSupport.java
similarity index 100%
rename from samples/Support13Demos/src/com/example/android/supportv13/app/FragmentNestingStatePagerSupport.java
rename to samples/Support13Demos/src/main/java/com/example/android/supportv13/app/FragmentNestingStatePagerSupport.java
diff --git a/samples/Support13Demos/src/com/example/android/supportv13/app/FragmentPagerSupport.java b/samples/Support13Demos/src/main/java/com/example/android/supportv13/app/FragmentPagerSupport.java
similarity index 100%
rename from samples/Support13Demos/src/com/example/android/supportv13/app/FragmentPagerSupport.java
rename to samples/Support13Demos/src/main/java/com/example/android/supportv13/app/FragmentPagerSupport.java
diff --git a/samples/Support13Demos/src/com/example/android/supportv13/app/FragmentStatePagerSupport.java b/samples/Support13Demos/src/main/java/com/example/android/supportv13/app/FragmentStatePagerSupport.java
similarity index 100%
rename from samples/Support13Demos/src/com/example/android/supportv13/app/FragmentStatePagerSupport.java
rename to samples/Support13Demos/src/main/java/com/example/android/supportv13/app/FragmentStatePagerSupport.java
diff --git a/samples/Support13Demos/src/com/example/android/supportv13/app/FragmentTabsFragment.java b/samples/Support13Demos/src/main/java/com/example/android/supportv13/app/FragmentTabsFragment.java
similarity index 100%
rename from samples/Support13Demos/src/com/example/android/supportv13/app/FragmentTabsFragment.java
rename to samples/Support13Demos/src/main/java/com/example/android/supportv13/app/FragmentTabsFragment.java
diff --git a/samples/Support13Demos/src/com/example/android/supportv13/app/_index.html b/samples/Support13Demos/src/main/java/com/example/android/supportv13/app/_index.html
similarity index 100%
rename from samples/Support13Demos/src/com/example/android/supportv13/app/_index.html
rename to samples/Support13Demos/src/main/java/com/example/android/supportv13/app/_index.html
diff --git a/samples/Support13Demos/src/com/example/android/supportv13/view/CheckableFrameLayout.java b/samples/Support13Demos/src/main/java/com/example/android/supportv13/view/CheckableFrameLayout.java
similarity index 100%
rename from samples/Support13Demos/src/com/example/android/supportv13/view/CheckableFrameLayout.java
rename to samples/Support13Demos/src/main/java/com/example/android/supportv13/view/CheckableFrameLayout.java
diff --git a/samples/Support13Demos/src/com/example/android/supportv13/view/inputmethod/CommitContentSupport.java b/samples/Support13Demos/src/main/java/com/example/android/supportv13/view/inputmethod/CommitContentSupport.java
similarity index 100%
rename from samples/Support13Demos/src/com/example/android/supportv13/view/inputmethod/CommitContentSupport.java
rename to samples/Support13Demos/src/main/java/com/example/android/supportv13/view/inputmethod/CommitContentSupport.java
diff --git a/samples/Support13Demos/res/drawable-hdpi/alert_dialog_icon.png b/samples/Support13Demos/src/main/res/drawable-hdpi/alert_dialog_icon.png
similarity index 100%
rename from samples/Support13Demos/res/drawable-hdpi/alert_dialog_icon.png
rename to samples/Support13Demos/src/main/res/drawable-hdpi/alert_dialog_icon.png
Binary files differ
diff --git a/samples/Support13Demos/res/drawable-hdpi/app_sample_code.png b/samples/Support13Demos/src/main/res/drawable-hdpi/app_sample_code.png
similarity index 100%
rename from samples/Support13Demos/res/drawable-hdpi/app_sample_code.png
rename to samples/Support13Demos/src/main/res/drawable-hdpi/app_sample_code.png
Binary files differ
diff --git a/samples/Support13Demos/res/drawable-mdpi/alert_dialog_icon.png b/samples/Support13Demos/src/main/res/drawable-mdpi/alert_dialog_icon.png
similarity index 100%
rename from samples/Support13Demos/res/drawable-mdpi/alert_dialog_icon.png
rename to samples/Support13Demos/src/main/res/drawable-mdpi/alert_dialog_icon.png
Binary files differ
diff --git a/samples/Support13Demos/res/drawable-mdpi/app_sample_code.png b/samples/Support13Demos/src/main/res/drawable-mdpi/app_sample_code.png
similarity index 100%
rename from samples/Support13Demos/res/drawable-mdpi/app_sample_code.png
rename to samples/Support13Demos/src/main/res/drawable-mdpi/app_sample_code.png
Binary files differ
diff --git a/samples/Support13Demos/res/layout/commit_content.xml b/samples/Support13Demos/src/main/res/layout/commit_content.xml
similarity index 100%
rename from samples/Support13Demos/res/layout/commit_content.xml
rename to samples/Support13Demos/src/main/res/layout/commit_content.xml
diff --git a/samples/Support13Demos/res/layout/counting.xml b/samples/Support13Demos/src/main/res/layout/counting.xml
similarity index 100%
rename from samples/Support13Demos/res/layout/counting.xml
rename to samples/Support13Demos/src/main/res/layout/counting.xml
diff --git a/samples/Support13Demos/res/layout/fragment_pager.xml b/samples/Support13Demos/src/main/res/layout/fragment_pager.xml
similarity index 100%
rename from samples/Support13Demos/res/layout/fragment_pager.xml
rename to samples/Support13Demos/src/main/res/layout/fragment_pager.xml
diff --git a/samples/Support13Demos/res/layout/fragment_pager_list.xml b/samples/Support13Demos/src/main/res/layout/fragment_pager_list.xml
similarity index 100%
rename from samples/Support13Demos/res/layout/fragment_pager_list.xml
rename to samples/Support13Demos/src/main/res/layout/fragment_pager_list.xml
diff --git a/samples/Support13Demos/res/layout/simple_list_item_checkable_1.xml b/samples/Support13Demos/src/main/res/layout/simple_list_item_checkable_1.xml
similarity index 100%
rename from samples/Support13Demos/res/layout/simple_list_item_checkable_1.xml
rename to samples/Support13Demos/src/main/res/layout/simple_list_item_checkable_1.xml
diff --git a/samples/Support13Demos/res/values/colors.xml b/samples/Support13Demos/src/main/res/values/colors.xml
similarity index 100%
rename from samples/Support13Demos/res/values/colors.xml
rename to samples/Support13Demos/src/main/res/values/colors.xml
diff --git a/samples/Support13Demos/res/values/strings.xml b/samples/Support13Demos/src/main/res/values/strings.xml
similarity index 100%
rename from samples/Support13Demos/res/values/strings.xml
rename to samples/Support13Demos/src/main/res/values/strings.xml
diff --git a/samples/Support4Demos/build.gradle b/samples/Support4Demos/build.gradle
index e9d6b5a..8e76229 100644
--- a/samples/Support4Demos/build.gradle
+++ b/samples/Support4Demos/build.gradle
@@ -12,12 +12,6 @@
targetSdkVersion project.ext.currentSdk
}
- sourceSets {
- main.manifest.srcFile 'AndroidManifest.xml'
- main.java.srcDirs = ['src']
- main.res.srcDirs = ['res']
- }
-
signingConfigs {
debug {
// Use a local debug keystore to avoid build server issues.
diff --git a/samples/Support4Demos/AndroidManifest.xml b/samples/Support4Demos/src/main/AndroidManifest.xml
similarity index 100%
rename from samples/Support4Demos/AndroidManifest.xml
rename to samples/Support4Demos/src/main/AndroidManifest.xml
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/Cheeses.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/Cheeses.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/Cheeses.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/Cheeses.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/Shakespeare.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/Shakespeare.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/Shakespeare.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/Shakespeare.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/Support4Demos.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/Support4Demos.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/Support4Demos.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/Support4Demos.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/_package.html b/samples/Support4Demos/src/main/java/com/example/android/supportv4/_package.html
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/_package.html
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/_package.html
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/accessibility/AccessibilityDelegateSupportActivity.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/accessibility/AccessibilityDelegateSupportActivity.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/accessibility/AccessibilityDelegateSupportActivity.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/accessibility/AccessibilityDelegateSupportActivity.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/accessibility/AccessibilityManagerSupportActivity.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/accessibility/AccessibilityManagerSupportActivity.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/accessibility/AccessibilityManagerSupportActivity.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/accessibility/AccessibilityManagerSupportActivity.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/accessibility/AccessibilityRoleDescriptionSupportActivity.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/accessibility/AccessibilityRoleDescriptionSupportActivity.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/accessibility/AccessibilityRoleDescriptionSupportActivity.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/accessibility/AccessibilityRoleDescriptionSupportActivity.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/accessibility/_index.html b/samples/Support4Demos/src/main/java/com/example/android/supportv4/accessibility/_index.html
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/accessibility/_index.html
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/accessibility/_index.html
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentAlertDialogSupport.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentAlertDialogSupport.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/app/FragmentAlertDialogSupport.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentAlertDialogSupport.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentArgumentsSupport.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentArgumentsSupport.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/app/FragmentArgumentsSupport.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentArgumentsSupport.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentContextMenuSupport.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentContextMenuSupport.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/app/FragmentContextMenuSupport.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentContextMenuSupport.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentCustomAnimationSupport.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentCustomAnimationSupport.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/app/FragmentCustomAnimationSupport.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentCustomAnimationSupport.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentDialogOrActivitySupport.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentDialogOrActivitySupport.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/app/FragmentDialogOrActivitySupport.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentDialogOrActivitySupport.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentDialogSupport.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentDialogSupport.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/app/FragmentDialogSupport.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentDialogSupport.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentHideShowSupport.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentHideShowSupport.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/app/FragmentHideShowSupport.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentHideShowSupport.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentLayoutSupport.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentLayoutSupport.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/app/FragmentLayoutSupport.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentLayoutSupport.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentListArraySupport.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentListArraySupport.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/app/FragmentListArraySupport.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentListArraySupport.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentMenuFragmentSupport.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentMenuFragmentSupport.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/app/FragmentMenuFragmentSupport.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentMenuFragmentSupport.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentMenuSupport.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentMenuSupport.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/app/FragmentMenuSupport.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentMenuSupport.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentNestingTabsSupport.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentNestingTabsSupport.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/app/FragmentNestingTabsSupport.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentNestingTabsSupport.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentPagerSupport.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentPagerSupport.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/app/FragmentPagerSupport.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentPagerSupport.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentReceiveResultSupport.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentReceiveResultSupport.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/app/FragmentReceiveResultSupport.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentReceiveResultSupport.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentRetainInstanceSupport.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentRetainInstanceSupport.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/app/FragmentRetainInstanceSupport.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentRetainInstanceSupport.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentStackFragmentSupport.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentStackFragmentSupport.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/app/FragmentStackFragmentSupport.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentStackFragmentSupport.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentStackSupport.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentStackSupport.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/app/FragmentStackSupport.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentStackSupport.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentStatePagerSupport.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentStatePagerSupport.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/app/FragmentStatePagerSupport.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentStatePagerSupport.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentTabs.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentTabs.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/app/FragmentTabs.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentTabs.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentTabsFragmentSupport.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentTabsFragmentSupport.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/app/FragmentTabsFragmentSupport.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentTabsFragmentSupport.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentTabsPager.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentTabsPager.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/app/FragmentTabsPager.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentTabsPager.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/app/LoaderCursorSupport.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/app/LoaderCursorSupport.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/app/LoaderCursorSupport.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/app/LoaderCursorSupport.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/app/LoaderCustomSupport.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/app/LoaderCustomSupport.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/app/LoaderCustomSupport.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/app/LoaderCustomSupport.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/app/LoaderRetainedSupport.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/app/LoaderRetainedSupport.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/app/LoaderRetainedSupport.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/app/LoaderRetainedSupport.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/app/LoaderThrottleSupport.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/app/LoaderThrottleSupport.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/app/LoaderThrottleSupport.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/app/LoaderThrottleSupport.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/app/SendResult.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/app/SendResult.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/app/SendResult.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/app/SendResult.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/app/SharingReceiverSupport.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/app/SharingReceiverSupport.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/app/SharingReceiverSupport.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/app/SharingReceiverSupport.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/app/SharingSupport.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/app/SharingSupport.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/app/SharingSupport.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/app/SharingSupport.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/app/SimpleJobIntentController.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/app/SimpleJobIntentController.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/app/SimpleJobIntentController.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/app/SimpleJobIntentController.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/app/SimpleJobIntentService.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/app/SimpleJobIntentService.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/app/SimpleJobIntentService.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/app/SimpleJobIntentService.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/app/_index.html b/samples/Support4Demos/src/main/java/com/example/android/supportv4/app/_index.html
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/app/_index.html
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/app/_index.html
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/content/FileProviderExample.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/content/FileProviderExample.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/content/FileProviderExample.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/content/FileProviderExample.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/content/LocalServiceBroadcaster.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/content/LocalServiceBroadcaster.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/content/LocalServiceBroadcaster.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/content/LocalServiceBroadcaster.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/content/SharingSupportProvider.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/content/SharingSupportProvider.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/content/SharingSupportProvider.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/content/SharingSupportProvider.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/content/SimpleWakefulController.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/content/SimpleWakefulController.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/content/SimpleWakefulController.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/content/SimpleWakefulController.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/content/SimpleWakefulReceiver.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/content/SimpleWakefulReceiver.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/content/SimpleWakefulReceiver.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/content/SimpleWakefulReceiver.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/content/SimpleWakefulService.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/content/SimpleWakefulService.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/content/SimpleWakefulService.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/content/SimpleWakefulService.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/graphics/DrawableCompatActivity.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/graphics/DrawableCompatActivity.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/graphics/DrawableCompatActivity.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/graphics/DrawableCompatActivity.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/graphics/RoundedBitmapDrawableActivity.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/graphics/RoundedBitmapDrawableActivity.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/graphics/RoundedBitmapDrawableActivity.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/graphics/RoundedBitmapDrawableActivity.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/media/AlbumArtCache.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/media/AlbumArtCache.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/media/AlbumArtCache.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/media/AlbumArtCache.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/media/BrowseFragment.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/media/BrowseFragment.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/media/BrowseFragment.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/media/BrowseFragment.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/media/MediaBrowserServiceSupport.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/media/MediaBrowserServiceSupport.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/media/MediaBrowserSupport.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/media/MediaBrowserSupport.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/media/MediaBrowserSupport.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/media/MediaBrowserSupport.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/media/MediaNotificationManager.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/media/MediaNotificationManager.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/media/MediaNotificationManager.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/media/MediaNotificationManager.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/media/PackageValidator.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/media/PackageValidator.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/media/PackageValidator.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/media/PackageValidator.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/media/Playback.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/media/Playback.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/media/Playback.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/media/Playback.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/media/QueueAdapter.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/media/QueueAdapter.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/media/QueueAdapter.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/media/QueueAdapter.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/media/QueueFragment.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/media/QueueFragment.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/media/QueueFragment.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/media/QueueFragment.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/media/model/MusicProvider.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/media/model/MusicProvider.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/media/model/MusicProvider.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/media/model/MusicProvider.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/media/model/MutableMediaMetadata.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/media/model/MutableMediaMetadata.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/media/model/MutableMediaMetadata.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/media/model/MutableMediaMetadata.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/media/utils/BitmapHelper.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/media/utils/BitmapHelper.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/media/utils/BitmapHelper.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/media/utils/BitmapHelper.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/media/utils/CarHelper.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/media/utils/CarHelper.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/media/utils/CarHelper.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/media/utils/CarHelper.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/media/utils/MediaIDHelper.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/media/utils/MediaIDHelper.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/media/utils/MediaIDHelper.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/media/utils/MediaIDHelper.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/media/utils/QueueHelper.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/media/utils/QueueHelper.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/media/utils/QueueHelper.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/media/utils/QueueHelper.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/media/utils/ResourceHelper.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/media/utils/ResourceHelper.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/media/utils/ResourceHelper.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/media/utils/ResourceHelper.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/text/BidiFormatterSupport.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/text/BidiFormatterSupport.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/text/BidiFormatterSupport.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/text/BidiFormatterSupport.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/view/CheckableFrameLayout.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/view/CheckableFrameLayout.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/view/CheckableFrameLayout.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/view/CheckableFrameLayout.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/view/ViewPagerActivity.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/view/ViewPagerActivity.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/view/ViewPagerActivity.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/view/ViewPagerActivity.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/widget/BaseSwipeRefreshLayoutActivity.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/widget/BaseSwipeRefreshLayoutActivity.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/widget/BaseSwipeRefreshLayoutActivity.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/widget/BaseSwipeRefreshLayoutActivity.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/widget/ContentLoadingProgressBarActivity.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/widget/ContentLoadingProgressBarActivity.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/widget/ContentLoadingProgressBarActivity.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/widget/ContentLoadingProgressBarActivity.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/widget/NestedScrollActivity.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/widget/NestedScrollActivity.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/widget/NestedScrollActivity.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/widget/NestedScrollActivity.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/widget/SlidingPaneLayoutActivity.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/widget/SlidingPaneLayoutActivity.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/widget/SlidingPaneLayoutActivity.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/widget/SlidingPaneLayoutActivity.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/widget/SwipeRefreshLayoutActivityList.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/widget/SwipeRefreshLayoutActivityList.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/widget/SwipeRefreshLayoutActivityList.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/widget/SwipeRefreshLayoutActivityList.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/widget/SwipeRefreshLayoutActivityNestedScrollView.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/widget/SwipeRefreshLayoutActivityNestedScrollView.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/widget/SwipeRefreshLayoutActivityNestedScrollView.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/widget/SwipeRefreshLayoutActivityNestedScrollView.java
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/widget/SwipeRefreshLayoutActivityTextView.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/widget/SwipeRefreshLayoutActivityTextView.java
similarity index 100%
rename from samples/Support4Demos/src/com/example/android/supportv4/widget/SwipeRefreshLayoutActivityTextView.java
rename to samples/Support4Demos/src/main/java/com/example/android/supportv4/widget/SwipeRefreshLayoutActivityTextView.java
diff --git a/samples/Support4Demos/res/anim/decelerate_quint.xml b/samples/Support4Demos/src/main/res/anim/decelerate_quint.xml
similarity index 100%
rename from samples/Support4Demos/res/anim/decelerate_quint.xml
rename to samples/Support4Demos/src/main/res/anim/decelerate_quint.xml
diff --git a/samples/Support4Demos/res/anim/fragment_slide_left_enter.xml b/samples/Support4Demos/src/main/res/anim/fragment_slide_left_enter.xml
similarity index 100%
rename from samples/Support4Demos/res/anim/fragment_slide_left_enter.xml
rename to samples/Support4Demos/src/main/res/anim/fragment_slide_left_enter.xml
diff --git a/samples/Support4Demos/res/anim/fragment_slide_left_exit.xml b/samples/Support4Demos/src/main/res/anim/fragment_slide_left_exit.xml
similarity index 100%
rename from samples/Support4Demos/res/anim/fragment_slide_left_exit.xml
rename to samples/Support4Demos/src/main/res/anim/fragment_slide_left_exit.xml
diff --git a/samples/Support4Demos/res/anim/fragment_slide_right_enter.xml b/samples/Support4Demos/src/main/res/anim/fragment_slide_right_enter.xml
similarity index 100%
rename from samples/Support4Demos/res/anim/fragment_slide_right_enter.xml
rename to samples/Support4Demos/src/main/res/anim/fragment_slide_right_enter.xml
diff --git a/samples/Support4Demos/res/anim/fragment_slide_right_exit.xml b/samples/Support4Demos/src/main/res/anim/fragment_slide_right_exit.xml
similarity index 100%
rename from samples/Support4Demos/res/anim/fragment_slide_right_exit.xml
rename to samples/Support4Demos/src/main/res/anim/fragment_slide_right_exit.xml
diff --git a/samples/Support4Demos/res/color/tint_state_list.xml b/samples/Support4Demos/src/main/res/color/tint_state_list.xml
similarity index 100%
rename from samples/Support4Demos/res/color/tint_state_list.xml
rename to samples/Support4Demos/src/main/res/color/tint_state_list.xml
diff --git a/samples/Support4Demos/res/drawable-hdpi/alert_dialog_icon.png b/samples/Support4Demos/src/main/res/drawable-hdpi/alert_dialog_icon.png
similarity index 100%
rename from samples/Support4Demos/res/drawable-hdpi/alert_dialog_icon.png
rename to samples/Support4Demos/src/main/res/drawable-hdpi/alert_dialog_icon.png
Binary files differ
diff --git a/samples/Support4Demos/res/drawable-hdpi/android_robot.png b/samples/Support4Demos/src/main/res/drawable-hdpi/android_robot.png
similarity index 100%
rename from samples/Support4Demos/res/drawable-hdpi/android_robot.png
rename to samples/Support4Demos/src/main/res/drawable-hdpi/android_robot.png
Binary files differ
diff --git a/samples/Support4Demos/res/drawable-hdpi/app_sample_code.png b/samples/Support4Demos/src/main/res/drawable-hdpi/app_sample_code.png
similarity index 100%
rename from samples/Support4Demos/res/drawable-hdpi/app_sample_code.png
rename to samples/Support4Demos/src/main/res/drawable-hdpi/app_sample_code.png
Binary files differ
diff --git a/samples/Support4Demos/res/drawable-hdpi/ic_drawer_am.png b/samples/Support4Demos/src/main/res/drawable-hdpi/ic_drawer_am.png
similarity index 100%
rename from samples/Support4Demos/res/drawable-hdpi/ic_drawer_am.png
rename to samples/Support4Demos/src/main/res/drawable-hdpi/ic_drawer_am.png
Binary files differ
diff --git a/samples/Support4Demos/res/drawable-hdpi/ic_favorite.png b/samples/Support4Demos/src/main/res/drawable-hdpi/ic_favorite.png
similarity index 100%
rename from samples/Support4Demos/res/drawable-hdpi/ic_favorite.png
rename to samples/Support4Demos/src/main/res/drawable-hdpi/ic_favorite.png
Binary files differ
diff --git a/samples/Support4Demos/res/drawable-hdpi/ic_notification.png b/samples/Support4Demos/src/main/res/drawable-hdpi/ic_notification.png
similarity index 100%
rename from samples/Support4Demos/res/drawable-hdpi/ic_notification.png
rename to samples/Support4Demos/src/main/res/drawable-hdpi/ic_notification.png
Binary files differ
diff --git a/samples/Support4Demos/res/drawable-hdpi/ic_pause_white_24dp.png b/samples/Support4Demos/src/main/res/drawable-hdpi/ic_pause_white_24dp.png
similarity index 100%
rename from samples/Support4Demos/res/drawable-hdpi/ic_pause_white_24dp.png
rename to samples/Support4Demos/src/main/res/drawable-hdpi/ic_pause_white_24dp.png
Binary files differ
diff --git a/samples/Support4Demos/res/drawable-hdpi/ic_play_arrow_white_24dp.png b/samples/Support4Demos/src/main/res/drawable-hdpi/ic_play_arrow_white_24dp.png
similarity index 100%
rename from samples/Support4Demos/res/drawable-hdpi/ic_play_arrow_white_24dp.png
rename to samples/Support4Demos/src/main/res/drawable-hdpi/ic_play_arrow_white_24dp.png
Binary files differ
diff --git a/samples/Support4Demos/res/drawable-hdpi/ic_skip_next_white_24dp.png b/samples/Support4Demos/src/main/res/drawable-hdpi/ic_skip_next_white_24dp.png
similarity index 100%
rename from samples/Support4Demos/res/drawable-hdpi/ic_skip_next_white_24dp.png
rename to samples/Support4Demos/src/main/res/drawable-hdpi/ic_skip_next_white_24dp.png
Binary files differ
diff --git a/samples/Support4Demos/res/drawable-hdpi/ic_skip_previous_white_24dp.png b/samples/Support4Demos/src/main/res/drawable-hdpi/ic_skip_previous_white_24dp.png
similarity index 100%
rename from samples/Support4Demos/res/drawable-hdpi/ic_skip_previous_white_24dp.png
rename to samples/Support4Demos/src/main/res/drawable-hdpi/ic_skip_previous_white_24dp.png
Binary files differ
diff --git a/samples/Support4Demos/res/drawable-hdpi/refresh.png b/samples/Support4Demos/src/main/res/drawable-hdpi/refresh.png
similarity index 100%
rename from samples/Support4Demos/res/drawable-hdpi/refresh.png
rename to samples/Support4Demos/src/main/res/drawable-hdpi/refresh.png
Binary files differ
diff --git a/samples/Support4Demos/res/drawable-mdpi/alert_dialog_icon.png b/samples/Support4Demos/src/main/res/drawable-mdpi/alert_dialog_icon.png
similarity index 100%
rename from samples/Support4Demos/res/drawable-mdpi/alert_dialog_icon.png
rename to samples/Support4Demos/src/main/res/drawable-mdpi/alert_dialog_icon.png
Binary files differ
diff --git a/samples/Support4Demos/res/drawable-mdpi/android_robot.png b/samples/Support4Demos/src/main/res/drawable-mdpi/android_robot.png
similarity index 100%
rename from samples/Support4Demos/res/drawable-mdpi/android_robot.png
rename to samples/Support4Demos/src/main/res/drawable-mdpi/android_robot.png
Binary files differ
diff --git a/samples/Support4Demos/res/drawable-mdpi/app_sample_code.png b/samples/Support4Demos/src/main/res/drawable-mdpi/app_sample_code.png
similarity index 100%
rename from samples/Support4Demos/res/drawable-mdpi/app_sample_code.png
rename to samples/Support4Demos/src/main/res/drawable-mdpi/app_sample_code.png
Binary files differ
diff --git a/samples/Support4Demos/res/drawable-mdpi/ic_drawer_am.png b/samples/Support4Demos/src/main/res/drawable-mdpi/ic_drawer_am.png
similarity index 100%
rename from samples/Support4Demos/res/drawable-mdpi/ic_drawer_am.png
rename to samples/Support4Demos/src/main/res/drawable-mdpi/ic_drawer_am.png
Binary files differ
diff --git a/samples/Support4Demos/res/drawable-mdpi/ic_favorite.png b/samples/Support4Demos/src/main/res/drawable-mdpi/ic_favorite.png
similarity index 100%
rename from samples/Support4Demos/res/drawable-mdpi/ic_favorite.png
rename to samples/Support4Demos/src/main/res/drawable-mdpi/ic_favorite.png
Binary files differ
diff --git a/samples/Support4Demos/res/drawable-mdpi/refresh.png b/samples/Support4Demos/src/main/res/drawable-mdpi/refresh.png
similarity index 100%
rename from samples/Support4Demos/res/drawable-mdpi/refresh.png
rename to samples/Support4Demos/src/main/res/drawable-mdpi/refresh.png
Binary files differ
diff --git a/samples/Support4Demos/res/drawable-xhdpi/android_robot.png b/samples/Support4Demos/src/main/res/drawable-xhdpi/android_robot.png
similarity index 100%
rename from samples/Support4Demos/res/drawable-xhdpi/android_robot.png
rename to samples/Support4Demos/src/main/res/drawable-xhdpi/android_robot.png
Binary files differ
diff --git a/samples/Support4Demos/res/drawable-xhdpi/ic_drawer_am.png b/samples/Support4Demos/src/main/res/drawable-xhdpi/ic_drawer_am.png
similarity index 100%
rename from samples/Support4Demos/res/drawable-xhdpi/ic_drawer_am.png
rename to samples/Support4Demos/src/main/res/drawable-xhdpi/ic_drawer_am.png
Binary files differ
diff --git a/samples/Support4Demos/res/drawable-xhdpi/ic_equalizer_white_24dp.png b/samples/Support4Demos/src/main/res/drawable-xhdpi/ic_equalizer_white_24dp.png
similarity index 100%
rename from samples/Support4Demos/res/drawable-xhdpi/ic_equalizer_white_24dp.png
rename to samples/Support4Demos/src/main/res/drawable-xhdpi/ic_equalizer_white_24dp.png
Binary files differ
diff --git a/samples/Support4Demos/res/drawable-xhdpi/ic_favorite.png b/samples/Support4Demos/src/main/res/drawable-xhdpi/ic_favorite.png
similarity index 100%
rename from samples/Support4Demos/res/drawable-xhdpi/ic_favorite.png
rename to samples/Support4Demos/src/main/res/drawable-xhdpi/ic_favorite.png
Binary files differ
diff --git a/samples/Support4Demos/res/drawable-xhdpi/ic_pause_white_24dp.png b/samples/Support4Demos/src/main/res/drawable-xhdpi/ic_pause_white_24dp.png
similarity index 100%
rename from samples/Support4Demos/res/drawable-xhdpi/ic_pause_white_24dp.png
rename to samples/Support4Demos/src/main/res/drawable-xhdpi/ic_pause_white_24dp.png
Binary files differ
diff --git a/samples/Support4Demos/res/drawable-xhdpi/ic_play_arrow_white_24dp.png b/samples/Support4Demos/src/main/res/drawable-xhdpi/ic_play_arrow_white_24dp.png
similarity index 100%
rename from samples/Support4Demos/res/drawable-xhdpi/ic_play_arrow_white_24dp.png
rename to samples/Support4Demos/src/main/res/drawable-xhdpi/ic_play_arrow_white_24dp.png
Binary files differ
diff --git a/samples/Support4Demos/res/drawable-xhdpi/ic_skip_next_white_24dp.png b/samples/Support4Demos/src/main/res/drawable-xhdpi/ic_skip_next_white_24dp.png
similarity index 100%
rename from samples/Support4Demos/res/drawable-xhdpi/ic_skip_next_white_24dp.png
rename to samples/Support4Demos/src/main/res/drawable-xhdpi/ic_skip_next_white_24dp.png
Binary files differ
diff --git a/samples/Support4Demos/res/drawable-xhdpi/ic_skip_previous_white_24dp.png b/samples/Support4Demos/src/main/res/drawable-xhdpi/ic_skip_previous_white_24dp.png
similarity index 100%
rename from samples/Support4Demos/res/drawable-xhdpi/ic_skip_previous_white_24dp.png
rename to samples/Support4Demos/src/main/res/drawable-xhdpi/ic_skip_previous_white_24dp.png
Binary files differ
diff --git a/samples/Support4Demos/res/drawable-xhdpi/refresh.png b/samples/Support4Demos/src/main/res/drawable-xhdpi/refresh.png
similarity index 100%
rename from samples/Support4Demos/res/drawable-xhdpi/refresh.png
rename to samples/Support4Demos/src/main/res/drawable-xhdpi/refresh.png
Binary files differ
diff --git a/samples/Support4Demos/res/drawable-xxhdpi/ic_default_art.png b/samples/Support4Demos/src/main/res/drawable-xxhdpi/ic_default_art.png
similarity index 100%
rename from samples/Support4Demos/res/drawable-xxhdpi/ic_default_art.png
rename to samples/Support4Demos/src/main/res/drawable-xxhdpi/ic_default_art.png
Binary files differ
diff --git a/samples/Support4Demos/res/drawable-xxhdpi/ic_equalizer_white_24dp.png b/samples/Support4Demos/src/main/res/drawable-xxhdpi/ic_equalizer_white_24dp.png
similarity index 100%
rename from samples/Support4Demos/res/drawable-xxhdpi/ic_equalizer_white_24dp.png
rename to samples/Support4Demos/src/main/res/drawable-xxhdpi/ic_equalizer_white_24dp.png
Binary files differ
diff --git a/samples/Support4Demos/res/drawable-xxhdpi/ic_favorite.png b/samples/Support4Demos/src/main/res/drawable-xxhdpi/ic_favorite.png
similarity index 100%
rename from samples/Support4Demos/res/drawable-xxhdpi/ic_favorite.png
rename to samples/Support4Demos/src/main/res/drawable-xxhdpi/ic_favorite.png
Binary files differ
diff --git a/samples/Support4Demos/res/drawable-xxhdpi/ic_pause_white_24dp.png b/samples/Support4Demos/src/main/res/drawable-xxhdpi/ic_pause_white_24dp.png
similarity index 100%
rename from samples/Support4Demos/res/drawable-xxhdpi/ic_pause_white_24dp.png
rename to samples/Support4Demos/src/main/res/drawable-xxhdpi/ic_pause_white_24dp.png
Binary files differ
diff --git a/samples/Support4Demos/res/drawable-xxhdpi/ic_play_arrow_white_24dp.png b/samples/Support4Demos/src/main/res/drawable-xxhdpi/ic_play_arrow_white_24dp.png
similarity index 100%
rename from samples/Support4Demos/res/drawable-xxhdpi/ic_play_arrow_white_24dp.png
rename to samples/Support4Demos/src/main/res/drawable-xxhdpi/ic_play_arrow_white_24dp.png
Binary files differ
diff --git a/samples/Support4Demos/res/drawable-xxhdpi/ic_skip_next_white_24dp.png b/samples/Support4Demos/src/main/res/drawable-xxhdpi/ic_skip_next_white_24dp.png
similarity index 100%
rename from samples/Support4Demos/res/drawable-xxhdpi/ic_skip_next_white_24dp.png
rename to samples/Support4Demos/src/main/res/drawable-xxhdpi/ic_skip_next_white_24dp.png
Binary files differ
diff --git a/samples/Support4Demos/res/drawable-xxhdpi/ic_skip_previous_white_24dp.png b/samples/Support4Demos/src/main/res/drawable-xxhdpi/ic_skip_previous_white_24dp.png
similarity index 100%
rename from samples/Support4Demos/res/drawable-xxhdpi/ic_skip_previous_white_24dp.png
rename to samples/Support4Demos/src/main/res/drawable-xxhdpi/ic_skip_previous_white_24dp.png
Binary files differ
diff --git a/samples/Support4Demos/res/drawable-xxhdpi/ic_star_off.png b/samples/Support4Demos/src/main/res/drawable-xxhdpi/ic_star_off.png
similarity index 100%
rename from samples/Support4Demos/res/drawable-xxhdpi/ic_star_off.png
rename to samples/Support4Demos/src/main/res/drawable-xxhdpi/ic_star_off.png
Binary files differ
diff --git a/samples/Support4Demos/res/drawable-xxhdpi/ic_star_on.png b/samples/Support4Demos/src/main/res/drawable-xxhdpi/ic_star_on.png
similarity index 100%
rename from samples/Support4Demos/res/drawable-xxhdpi/ic_star_on.png
rename to samples/Support4Demos/src/main/res/drawable-xxhdpi/ic_star_on.png
Binary files differ
diff --git a/samples/Support4Demos/res/drawable-xxxhdpi/ic_favorite.png b/samples/Support4Demos/src/main/res/drawable-xxxhdpi/ic_favorite.png
similarity index 100%
rename from samples/Support4Demos/res/drawable-xxxhdpi/ic_favorite.png
rename to samples/Support4Demos/src/main/res/drawable-xxxhdpi/ic_favorite.png
Binary files differ
diff --git a/samples/Support4Demos/res/drawable/gradient.xml b/samples/Support4Demos/src/main/res/drawable/gradient.xml
similarity index 100%
rename from samples/Support4Demos/res/drawable/gradient.xml
rename to samples/Support4Demos/src/main/res/drawable/gradient.xml
diff --git a/samples/Support4Demos/res/drawable/ic_drawer.xml b/samples/Support4Demos/src/main/res/drawable/ic_drawer.xml
similarity index 100%
rename from samples/Support4Demos/res/drawable/ic_drawer.xml
rename to samples/Support4Demos/src/main/res/drawable/ic_drawer.xml
diff --git a/samples/Support4Demos/res/layout-land/fragment_arguments_support.xml b/samples/Support4Demos/src/main/res/layout-land/fragment_arguments_support.xml
similarity index 100%
rename from samples/Support4Demos/res/layout-land/fragment_arguments_support.xml
rename to samples/Support4Demos/src/main/res/layout-land/fragment_arguments_support.xml
diff --git a/samples/Support4Demos/res/layout-land/fragment_layout_support.xml b/samples/Support4Demos/src/main/res/layout-land/fragment_layout_support.xml
similarity index 100%
rename from samples/Support4Demos/res/layout-land/fragment_layout_support.xml
rename to samples/Support4Demos/src/main/res/layout-land/fragment_layout_support.xml
diff --git a/samples/Support4Demos/res/layout/accessibility_delegate.xml b/samples/Support4Demos/src/main/res/layout/accessibility_delegate.xml
similarity index 100%
rename from samples/Support4Demos/res/layout/accessibility_delegate.xml
rename to samples/Support4Demos/src/main/res/layout/accessibility_delegate.xml
diff --git a/samples/Support4Demos/res/layout/accessibility_manager.xml b/samples/Support4Demos/src/main/res/layout/accessibility_manager.xml
similarity index 100%
rename from samples/Support4Demos/res/layout/accessibility_manager.xml
rename to samples/Support4Demos/src/main/res/layout/accessibility_manager.xml
diff --git a/samples/Support4Demos/res/layout/accessibility_roledescription.xml b/samples/Support4Demos/src/main/res/layout/accessibility_roledescription.xml
similarity index 100%
rename from samples/Support4Demos/res/layout/accessibility_roledescription.xml
rename to samples/Support4Demos/src/main/res/layout/accessibility_roledescription.xml
diff --git a/samples/Support4Demos/res/layout/activity_player.xml b/samples/Support4Demos/src/main/res/layout/activity_player.xml
similarity index 100%
rename from samples/Support4Demos/res/layout/activity_player.xml
rename to samples/Support4Demos/src/main/res/layout/activity_player.xml
diff --git a/samples/Support4Demos/res/layout/activity_rounded_bitmap.xml b/samples/Support4Demos/src/main/res/layout/activity_rounded_bitmap.xml
similarity index 100%
rename from samples/Support4Demos/res/layout/activity_rounded_bitmap.xml
rename to samples/Support4Demos/src/main/res/layout/activity_rounded_bitmap.xml
diff --git a/samples/Support4Demos/res/layout/bidiformater_support.xml b/samples/Support4Demos/src/main/res/layout/bidiformater_support.xml
similarity index 100%
rename from samples/Support4Demos/res/layout/bidiformater_support.xml
rename to samples/Support4Demos/src/main/res/layout/bidiformater_support.xml
diff --git a/samples/Support4Demos/res/layout/content_loading_progressbar.xml b/samples/Support4Demos/src/main/res/layout/content_loading_progressbar.xml
similarity index 100%
rename from samples/Support4Demos/res/layout/content_loading_progressbar.xml
rename to samples/Support4Demos/src/main/res/layout/content_loading_progressbar.xml
diff --git a/samples/Support4Demos/res/layout/drawable_compat.xml b/samples/Support4Demos/src/main/res/layout/drawable_compat.xml
similarity index 100%
rename from samples/Support4Demos/res/layout/drawable_compat.xml
rename to samples/Support4Demos/src/main/res/layout/drawable_compat.xml
diff --git a/samples/Support4Demos/res/layout/explore_by_touch_helper.xml b/samples/Support4Demos/src/main/res/layout/explore_by_touch_helper.xml
similarity index 100%
rename from samples/Support4Demos/res/layout/explore_by_touch_helper.xml
rename to samples/Support4Demos/src/main/res/layout/explore_by_touch_helper.xml
diff --git a/samples/Support4Demos/res/layout/file_provider_example.xml b/samples/Support4Demos/src/main/res/layout/file_provider_example.xml
similarity index 100%
rename from samples/Support4Demos/res/layout/file_provider_example.xml
rename to samples/Support4Demos/src/main/res/layout/file_provider_example.xml
diff --git a/samples/Support4Demos/res/layout/fragment_arguments_support.xml b/samples/Support4Demos/src/main/res/layout/fragment_arguments_support.xml
similarity index 100%
rename from samples/Support4Demos/res/layout/fragment_arguments_support.xml
rename to samples/Support4Demos/src/main/res/layout/fragment_arguments_support.xml
diff --git a/samples/Support4Demos/res/layout/fragment_context_menu.xml b/samples/Support4Demos/src/main/res/layout/fragment_context_menu.xml
similarity index 100%
rename from samples/Support4Demos/res/layout/fragment_context_menu.xml
rename to samples/Support4Demos/src/main/res/layout/fragment_context_menu.xml
diff --git a/samples/Support4Demos/res/layout/fragment_dialog.xml b/samples/Support4Demos/src/main/res/layout/fragment_dialog.xml
similarity index 100%
rename from samples/Support4Demos/res/layout/fragment_dialog.xml
rename to samples/Support4Demos/src/main/res/layout/fragment_dialog.xml
diff --git a/samples/Support4Demos/res/layout/fragment_dialog_or_activity.xml b/samples/Support4Demos/src/main/res/layout/fragment_dialog_or_activity.xml
similarity index 100%
rename from samples/Support4Demos/res/layout/fragment_dialog_or_activity.xml
rename to samples/Support4Demos/src/main/res/layout/fragment_dialog_or_activity.xml
diff --git a/samples/Support4Demos/res/layout/fragment_hide_show_support.xml b/samples/Support4Demos/src/main/res/layout/fragment_hide_show_support.xml
similarity index 100%
rename from samples/Support4Demos/res/layout/fragment_hide_show_support.xml
rename to samples/Support4Demos/src/main/res/layout/fragment_hide_show_support.xml
diff --git a/samples/Support4Demos/res/layout/fragment_layout_support.xml b/samples/Support4Demos/src/main/res/layout/fragment_layout_support.xml
similarity index 100%
rename from samples/Support4Demos/res/layout/fragment_layout_support.xml
rename to samples/Support4Demos/src/main/res/layout/fragment_layout_support.xml
diff --git a/samples/Support4Demos/res/layout/fragment_list.xml b/samples/Support4Demos/src/main/res/layout/fragment_list.xml
similarity index 100%
rename from samples/Support4Demos/res/layout/fragment_list.xml
rename to samples/Support4Demos/src/main/res/layout/fragment_list.xml
diff --git a/samples/Support4Demos/res/layout/fragment_menu.xml b/samples/Support4Demos/src/main/res/layout/fragment_menu.xml
similarity index 100%
rename from samples/Support4Demos/res/layout/fragment_menu.xml
rename to samples/Support4Demos/src/main/res/layout/fragment_menu.xml
diff --git a/samples/Support4Demos/res/layout/fragment_pager.xml b/samples/Support4Demos/src/main/res/layout/fragment_pager.xml
similarity index 100%
rename from samples/Support4Demos/res/layout/fragment_pager.xml
rename to samples/Support4Demos/src/main/res/layout/fragment_pager.xml
diff --git a/samples/Support4Demos/res/layout/fragment_pager_list.xml b/samples/Support4Demos/src/main/res/layout/fragment_pager_list.xml
similarity index 100%
rename from samples/Support4Demos/res/layout/fragment_pager_list.xml
rename to samples/Support4Demos/src/main/res/layout/fragment_pager_list.xml
diff --git a/samples/Support4Demos/res/layout/fragment_retain_instance.xml b/samples/Support4Demos/src/main/res/layout/fragment_retain_instance.xml
similarity index 100%
rename from samples/Support4Demos/res/layout/fragment_retain_instance.xml
rename to samples/Support4Demos/src/main/res/layout/fragment_retain_instance.xml
diff --git a/samples/Support4Demos/res/layout/fragment_stack.xml b/samples/Support4Demos/src/main/res/layout/fragment_stack.xml
similarity index 100%
rename from samples/Support4Demos/res/layout/fragment_stack.xml
rename to samples/Support4Demos/src/main/res/layout/fragment_stack.xml
diff --git a/samples/Support4Demos/res/layout/fragment_tabs.xml b/samples/Support4Demos/src/main/res/layout/fragment_tabs.xml
similarity index 100%
rename from samples/Support4Demos/res/layout/fragment_tabs.xml
rename to samples/Support4Demos/src/main/res/layout/fragment_tabs.xml
diff --git a/samples/Support4Demos/res/layout/fragment_tabs_pager.xml b/samples/Support4Demos/src/main/res/layout/fragment_tabs_pager.xml
similarity index 100%
rename from samples/Support4Demos/res/layout/fragment_tabs_pager.xml
rename to samples/Support4Demos/src/main/res/layout/fragment_tabs_pager.xml
diff --git a/samples/Support4Demos/res/layout/hello_world.xml b/samples/Support4Demos/src/main/res/layout/hello_world.xml
similarity index 100%
rename from samples/Support4Demos/res/layout/hello_world.xml
rename to samples/Support4Demos/src/main/res/layout/hello_world.xml
diff --git a/samples/Support4Demos/res/layout/labeled_text_edit.xml b/samples/Support4Demos/src/main/res/layout/labeled_text_edit.xml
similarity index 100%
rename from samples/Support4Demos/res/layout/labeled_text_edit.xml
rename to samples/Support4Demos/src/main/res/layout/labeled_text_edit.xml
diff --git a/samples/Support4Demos/res/layout/list_item_icon_text.xml b/samples/Support4Demos/src/main/res/layout/list_item_icon_text.xml
similarity index 100%
rename from samples/Support4Demos/res/layout/list_item_icon_text.xml
rename to samples/Support4Demos/src/main/res/layout/list_item_icon_text.xml
diff --git a/samples/Support4Demos/res/layout/local_service_broadcaster.xml b/samples/Support4Demos/src/main/res/layout/local_service_broadcaster.xml
similarity index 100%
rename from samples/Support4Demos/res/layout/local_service_broadcaster.xml
rename to samples/Support4Demos/src/main/res/layout/local_service_broadcaster.xml
diff --git a/samples/Support4Demos/res/layout/media_list_item.xml b/samples/Support4Demos/src/main/res/layout/media_list_item.xml
similarity index 100%
rename from samples/Support4Demos/res/layout/media_list_item.xml
rename to samples/Support4Demos/src/main/res/layout/media_list_item.xml
diff --git a/samples/Support4Demos/res/layout/nested_scroll.xml b/samples/Support4Demos/src/main/res/layout/nested_scroll.xml
similarity index 100%
rename from samples/Support4Demos/res/layout/nested_scroll.xml
rename to samples/Support4Demos/src/main/res/layout/nested_scroll.xml
diff --git a/samples/Support4Demos/res/layout/receive_result.xml b/samples/Support4Demos/src/main/res/layout/receive_result.xml
similarity index 100%
rename from samples/Support4Demos/res/layout/receive_result.xml
rename to samples/Support4Demos/src/main/res/layout/receive_result.xml
diff --git a/samples/Support4Demos/res/layout/send_result.xml b/samples/Support4Demos/src/main/res/layout/send_result.xml
similarity index 100%
rename from samples/Support4Demos/res/layout/send_result.xml
rename to samples/Support4Demos/src/main/res/layout/send_result.xml
diff --git a/samples/Support4Demos/res/layout/sharing_receiver_support.xml b/samples/Support4Demos/src/main/res/layout/sharing_receiver_support.xml
similarity index 100%
rename from samples/Support4Demos/res/layout/sharing_receiver_support.xml
rename to samples/Support4Demos/src/main/res/layout/sharing_receiver_support.xml
diff --git a/samples/Support4Demos/res/layout/sharing_support.xml b/samples/Support4Demos/src/main/res/layout/sharing_support.xml
similarity index 100%
rename from samples/Support4Demos/res/layout/sharing_support.xml
rename to samples/Support4Demos/src/main/res/layout/sharing_support.xml
diff --git a/samples/Support4Demos/res/layout/simple_job_intent_controller.xml b/samples/Support4Demos/src/main/res/layout/simple_job_intent_controller.xml
similarity index 100%
rename from samples/Support4Demos/res/layout/simple_job_intent_controller.xml
rename to samples/Support4Demos/src/main/res/layout/simple_job_intent_controller.xml
diff --git a/samples/Support4Demos/res/layout/simple_list_item_checkable_1.xml b/samples/Support4Demos/src/main/res/layout/simple_list_item_checkable_1.xml
similarity index 100%
rename from samples/Support4Demos/res/layout/simple_list_item_checkable_1.xml
rename to samples/Support4Demos/src/main/res/layout/simple_list_item_checkable_1.xml
diff --git a/samples/Support4Demos/res/layout/sliding_pane_layout.xml b/samples/Support4Demos/src/main/res/layout/sliding_pane_layout.xml
similarity index 100%
rename from samples/Support4Demos/res/layout/sliding_pane_layout.xml
rename to samples/Support4Demos/src/main/res/layout/sliding_pane_layout.xml
diff --git a/samples/Support4Demos/res/layout/swipe_refresh_widget_listview.xml b/samples/Support4Demos/src/main/res/layout/swipe_refresh_widget_listview.xml
similarity index 100%
rename from samples/Support4Demos/res/layout/swipe_refresh_widget_listview.xml
rename to samples/Support4Demos/src/main/res/layout/swipe_refresh_widget_listview.xml
diff --git a/samples/Support4Demos/res/layout/swipe_refresh_widget_nestedscrolling.xml b/samples/Support4Demos/src/main/res/layout/swipe_refresh_widget_nestedscrolling.xml
similarity index 100%
rename from samples/Support4Demos/res/layout/swipe_refresh_widget_nestedscrolling.xml
rename to samples/Support4Demos/src/main/res/layout/swipe_refresh_widget_nestedscrolling.xml
diff --git a/samples/Support4Demos/res/layout/swipe_refresh_widget_textview.xml b/samples/Support4Demos/src/main/res/layout/swipe_refresh_widget_textview.xml
similarity index 100%
rename from samples/Support4Demos/res/layout/swipe_refresh_widget_textview.xml
rename to samples/Support4Demos/src/main/res/layout/swipe_refresh_widget_textview.xml
diff --git a/samples/Support4Demos/res/layout/view_pager_layout.xml b/samples/Support4Demos/src/main/res/layout/view_pager_layout.xml
similarity index 100%
rename from samples/Support4Demos/res/layout/view_pager_layout.xml
rename to samples/Support4Demos/src/main/res/layout/view_pager_layout.xml
diff --git a/samples/Support4Demos/res/layout/wakeful_alarm_controller.xml b/samples/Support4Demos/src/main/res/layout/wakeful_alarm_controller.xml
similarity index 100%
rename from samples/Support4Demos/res/layout/wakeful_alarm_controller.xml
rename to samples/Support4Demos/src/main/res/layout/wakeful_alarm_controller.xml
diff --git a/samples/Support4Demos/res/menu/shortcuts.xml b/samples/Support4Demos/src/main/res/menu/shortcuts.xml
similarity index 100%
rename from samples/Support4Demos/res/menu/shortcuts.xml
rename to samples/Support4Demos/src/main/res/menu/shortcuts.xml
diff --git a/samples/Support4Demos/res/menu/swipe_refresh_menu.xml b/samples/Support4Demos/src/main/res/menu/swipe_refresh_menu.xml
similarity index 100%
rename from samples/Support4Demos/res/menu/swipe_refresh_menu.xml
rename to samples/Support4Demos/src/main/res/menu/swipe_refresh_menu.xml
diff --git a/samples/Support4Demos/res/values-v11/styles.xml b/samples/Support4Demos/src/main/res/values-v11/styles.xml
similarity index 100%
rename from samples/Support4Demos/res/values-v11/styles.xml
rename to samples/Support4Demos/src/main/res/values-v11/styles.xml
diff --git a/samples/Support4Demos/res/values-v21/styles.xml b/samples/Support4Demos/src/main/res/values-v21/styles.xml
similarity index 100%
rename from samples/Support4Demos/res/values-v21/styles.xml
rename to samples/Support4Demos/src/main/res/values-v21/styles.xml
diff --git a/samples/Support4Demos/res/values/attrs.xml b/samples/Support4Demos/src/main/res/values/attrs.xml
similarity index 100%
rename from samples/Support4Demos/res/values/attrs.xml
rename to samples/Support4Demos/src/main/res/values/attrs.xml
diff --git a/samples/Support4Demos/res/values/colors.xml b/samples/Support4Demos/src/main/res/values/colors.xml
similarity index 100%
rename from samples/Support4Demos/res/values/colors.xml
rename to samples/Support4Demos/src/main/res/values/colors.xml
diff --git a/samples/Support4Demos/res/values/dimens.xml b/samples/Support4Demos/src/main/res/values/dimens.xml
similarity index 100%
rename from samples/Support4Demos/res/values/dimens.xml
rename to samples/Support4Demos/src/main/res/values/dimens.xml
diff --git a/samples/Support4Demos/res/values/strings.xml b/samples/Support4Demos/src/main/res/values/strings.xml
similarity index 100%
rename from samples/Support4Demos/res/values/strings.xml
rename to samples/Support4Demos/src/main/res/values/strings.xml
diff --git a/samples/Support4Demos/res/values/styles.xml b/samples/Support4Demos/src/main/res/values/styles.xml
similarity index 100%
rename from samples/Support4Demos/res/values/styles.xml
rename to samples/Support4Demos/src/main/res/values/styles.xml
diff --git a/samples/Support4Demos/res/xml/allowed_media_browser_callers.xml b/samples/Support4Demos/src/main/res/xml/allowed_media_browser_callers.xml
similarity index 100%
rename from samples/Support4Demos/res/xml/allowed_media_browser_callers.xml
rename to samples/Support4Demos/src/main/res/xml/allowed_media_browser_callers.xml
diff --git a/samples/Support4Demos/res/xml/my_paths.xml b/samples/Support4Demos/src/main/res/xml/my_paths.xml
similarity index 100%
rename from samples/Support4Demos/res/xml/my_paths.xml
rename to samples/Support4Demos/src/main/res/xml/my_paths.xml
diff --git a/samples/Support7Demos/build.gradle b/samples/Support7Demos/build.gradle
index 65b19ea..0b562c8 100644
--- a/samples/Support7Demos/build.gradle
+++ b/samples/Support7Demos/build.gradle
@@ -18,12 +18,6 @@
vectorDrawables.useSupportLibrary = true
}
- sourceSets {
- main.manifest.srcFile 'AndroidManifest.xml'
- main.java.srcDirs = ['src']
- main.res.srcDirs = ['res']
- }
-
signingConfigs {
debug {
// Use a local debug keystore to avoid build server issues.
diff --git a/samples/Support7Demos/res/layout/appcompat_widgets_buttons.xml b/samples/Support7Demos/res/layout/appcompat_widgets_buttons.xml
deleted file mode 100644
index 517f4fa..0000000
--- a/samples/Support7Demos/res/layout/appcompat_widgets_buttons.xml
+++ /dev/null
@@ -1,117 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2015 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.
--->
-
-<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- xmlns:app="http://schemas.android.com/apk/res-auto">
-
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- android:padding="16dp">
-
- <android.support.v7.widget.SwitchCompat
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:text="SwitchCompat"/>
-
- <android.support.v7.widget.SwitchCompat
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:enabled="false"
- android:text="SwitchCompat disabled"/>
-
- <Switch
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:text="Switch"/>
-
- <Switch
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:enabled="false"
- android:text="Switch disabled"/>
-
- <CheckBox
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="CheckBox"/>
-
- <RadioGroup
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal">
-
- <RadioButton
- android:id="@+id/radiobutton_1"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="RadioButton"/>
-
- <RadioButton
- android:id="@+id/radiobutton_2"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="RadioButton"/>
-
- </RadioGroup>
-
- <Button
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="Button"/>
-
- <Button
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="Button (small)"
- style="@style/Widget.AppCompat.Button.Small"/>
-
- <Button
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="Button (borderless)"
- style="@style/Widget.AppCompat.Button.Borderless"/>
-
- <Button
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="Button (borderless + colored)"
- style="@style/Widget.AppCompat.Button.Borderless.Colored"/>
-
- <Button
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="Button (colored)"
- style="@style/Widget.AppCompat.Button.Colored"/>
-
- <Button
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="Button (colored + tinted)"
- app:backgroundTint="#00FF00"
- style="@style/Widget.AppCompat.Button.Colored"/>
-
- <RatingBar
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"/>
-
- </LinearLayout>
-
-</ScrollView>
\ No newline at end of file
diff --git a/samples/Support7Demos/AndroidManifest.xml b/samples/Support7Demos/src/main/AndroidManifest.xml
similarity index 100%
rename from samples/Support7Demos/AndroidManifest.xml
rename to samples/Support7Demos/src/main/AndroidManifest.xml
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/Cheeses.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/Cheeses.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/Cheeses.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/Cheeses.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/Shakespeare.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/Shakespeare.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/Shakespeare.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/Shakespeare.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/Support7Demos.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/Support7Demos.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/Support7Demos.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/Support7Demos.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/_package.html b/samples/Support7Demos/src/main/java/com/example/android/supportv7/_package.html
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/_package.html
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/_package.html
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/app/ActionBarActionMode.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/ActionBarActionMode.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/app/ActionBarActionMode.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/app/ActionBarActionMode.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/app/ActionBarDisplayOptions.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/ActionBarDisplayOptions.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/app/ActionBarDisplayOptions.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/app/ActionBarDisplayOptions.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/app/ActionBarFragmentMenu.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/ActionBarFragmentMenu.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/app/ActionBarFragmentMenu.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/app/ActionBarFragmentMenu.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/app/ActionBarHideOnScroll.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/ActionBarHideOnScroll.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/app/ActionBarHideOnScroll.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/app/ActionBarHideOnScroll.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/app/ActionBarMechanics.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/ActionBarMechanics.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/app/ActionBarMechanics.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/app/ActionBarMechanics.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/app/ActionBarPreferences.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/ActionBarPreferences.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/app/ActionBarPreferences.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/app/ActionBarPreferences.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/app/ActionBarSettingsActionProviderActivity.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/ActionBarSettingsActionProviderActivity.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/app/ActionBarSettingsActionProviderActivity.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/app/ActionBarSettingsActionProviderActivity.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/app/ActionBarShareActionProvider.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/ActionBarShareActionProvider.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/app/ActionBarShareActionProvider.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/app/ActionBarShareActionProvider.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/app/ActionBarUsage.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/ActionBarUsage.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/app/ActionBarUsage.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/app/ActionBarUsage.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/app/AlertDialogUsage.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/AlertDialogUsage.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/app/AlertDialogUsage.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/app/AlertDialogUsage.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/app/AppCompatAnimatedVector.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/AppCompatAnimatedVector.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/app/AppCompatAnimatedVector.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/app/AppCompatAnimatedVector.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/app/AppCompatNightModeActivity.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/AppCompatNightModeActivity.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/app/AppCompatNightModeActivity.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/app/AppCompatNightModeActivity.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/app/AppCompatNightModeAlertDialog.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/AppCompatNightModeAlertDialog.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/app/AppCompatNightModeAlertDialog.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/app/AppCompatNightModeAlertDialog.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/app/AppCompatNightModeDialog.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/AppCompatNightModeDialog.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/app/AppCompatNightModeDialog.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/app/AppCompatNightModeDialog.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/app/AppCompatPreferenceActivity.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/AppCompatPreferenceActivity.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/app/AppCompatPreferenceActivity.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/app/AppCompatPreferenceActivity.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/app/AppCompatWidgetsButtons.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/AppCompatWidgetsButtons.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/app/AppCompatWidgetsButtons.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/app/AppCompatWidgetsButtons.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/app/AppCompatWidgetsSpinners.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/AppCompatWidgetsSpinners.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/app/AppCompatWidgetsSpinners.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/app/AppCompatWidgetsSpinners.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/app/AppCompatWidgetsTextInput.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/AppCompatWidgetsTextInput.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/app/AppCompatWidgetsTextInput.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/app/AppCompatWidgetsTextInput.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/app/AppCompatWidgetsTextViews.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/AppCompatWidgetsTextViews.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/app/AppCompatWidgetsTextViews.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/app/AppCompatWidgetsTextViews.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/app/DialogFragmentUsage.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/DialogFragmentUsage.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/app/DialogFragmentUsage.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/app/DialogFragmentUsage.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/app/DialogUsage.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/DialogUsage.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/app/DialogUsage.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/app/DialogUsage.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/app/MenuItemIconTinting.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/MenuItemIconTinting.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/app/MenuItemIconTinting.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/app/MenuItemIconTinting.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/app/RecentSuggestionsProvider.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/RecentSuggestionsProvider.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/app/RecentSuggestionsProvider.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/app/RecentSuggestionsProvider.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/app/SearchActivity.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/SearchActivity.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/app/SearchActivity.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/app/SearchActivity.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/app/ToolbarActionMode.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/ToolbarActionMode.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/app/ToolbarActionMode.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/app/ToolbarActionMode.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/app/ToolbarDisplayOptions.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/ToolbarDisplayOptions.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/app/ToolbarDisplayOptions.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/app/ToolbarDisplayOptions.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/app/ToolbarFragmentPagerMenu.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/ToolbarFragmentPagerMenu.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/app/ToolbarFragmentPagerMenu.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/app/ToolbarFragmentPagerMenu.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/app/ToolbarUsage.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/ToolbarUsage.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/app/ToolbarUsage.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/app/ToolbarUsage.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/app/_index.html b/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/_index.html
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/app/_index.html
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/app/_index.html
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/graphics/ImageLoader.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/graphics/ImageLoader.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/graphics/ImageLoader.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/graphics/ImageLoader.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/graphics/PaletteActivity.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/graphics/PaletteActivity.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/graphics/PaletteActivity.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/graphics/PaletteActivity.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/graphics/PaletteDetailActivity.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/graphics/PaletteDetailActivity.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/graphics/PaletteDetailActivity.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/graphics/PaletteDetailActivity.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/media/LocalPlayer.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/LocalPlayer.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/media/LocalPlayer.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/media/LocalPlayer.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/media/MyMediaRouteControllerDialog.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/MyMediaRouteControllerDialog.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/media/MyMediaRouteControllerDialog.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/media/MyMediaRouteControllerDialog.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/media/OverlayDisplayWindow.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/OverlayDisplayWindow.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/media/OverlayDisplayWindow.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/media/OverlayDisplayWindow.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/media/Player.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/Player.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/media/Player.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/media/Player.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/media/PlaylistItem.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/PlaylistItem.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/media/PlaylistItem.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/media/PlaylistItem.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/media/RemotePlayer.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/RemotePlayer.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/media/RemotePlayer.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/media/RemotePlayer.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/media/SampleMediaButtonReceiver.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/SampleMediaButtonReceiver.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/media/SampleMediaButtonReceiver.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/media/SampleMediaButtonReceiver.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/media/SampleMediaRouteProvider.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/SampleMediaRouteProvider.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/media/SampleMediaRouteProvider.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/media/SampleMediaRouteProvider.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/media/SampleMediaRouteProviderService.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/SampleMediaRouteProviderService.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/media/SampleMediaRouteProviderService.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/media/SampleMediaRouteProviderService.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/media/SampleMediaRouteSettingsActivity.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/SampleMediaRouteSettingsActivity.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/media/SampleMediaRouteSettingsActivity.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/media/SampleMediaRouteSettingsActivity.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/media/SampleMediaRouterActivity.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/SampleMediaRouterActivity.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/media/SampleMediaRouterActivity.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/media/SampleMediaRouterActivity.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/media/SessionManager.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/SessionManager.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/media/SessionManager.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/media/SessionManager.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/media/_index.html b/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/_index.html
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/media/_index.html
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/media/_index.html
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/util/DiffUtilActivity.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/util/DiffUtilActivity.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/util/DiffUtilActivity.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/util/DiffUtilActivity.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/util/SortedListActivity.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/util/SortedListActivity.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/util/SortedListActivity.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/util/SortedListActivity.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/view/CardViewActivity.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/view/CardViewActivity.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/view/CardViewActivity.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/view/CardViewActivity.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/view/GridLayout1.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/view/GridLayout1.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/view/GridLayout1.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/view/GridLayout1.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/view/GridLayout2.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/view/GridLayout2.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/view/GridLayout2.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/view/GridLayout2.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/view/GridLayout3.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/view/GridLayout3.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/view/GridLayout3.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/view/GridLayout3.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/view/_index.html b/samples/Support7Demos/src/main/java/com/example/android/supportv7/view/_index.html
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/view/_index.html
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/view/_index.html
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/widget/AnimatedRecyclerView.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/AnimatedRecyclerView.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/widget/AnimatedRecyclerView.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/AnimatedRecyclerView.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/widget/AsyncListUtilActivity.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/AsyncListUtilActivity.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/widget/AsyncListUtilActivity.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/AsyncListUtilActivity.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/widget/BaseLayoutManagerActivity.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/BaseLayoutManagerActivity.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/widget/BaseLayoutManagerActivity.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/BaseLayoutManagerActivity.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/widget/DrawerLayoutActivity.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/DrawerLayoutActivity.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/widget/DrawerLayoutActivity.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/DrawerLayoutActivity.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/widget/GridLayoutManagerActivity.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/GridLayoutManagerActivity.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/widget/GridLayoutManagerActivity.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/GridLayoutManagerActivity.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/widget/LinearLayoutManagerActivity.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/LinearLayoutManagerActivity.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/widget/LinearLayoutManagerActivity.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/LinearLayoutManagerActivity.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/widget/LinearLayoutManagerJankActivity.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/LinearLayoutManagerJankActivity.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/widget/LinearLayoutManagerJankActivity.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/LinearLayoutManagerJankActivity.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/widget/ListPopupWindowActivity.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/ListPopupWindowActivity.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/widget/ListPopupWindowActivity.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/ListPopupWindowActivity.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/widget/ListViewActivity.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/ListViewActivity.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/widget/ListViewActivity.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/ListViewActivity.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/widget/NestedRecyclerViewActivity.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/NestedRecyclerViewActivity.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/widget/NestedRecyclerViewActivity.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/NestedRecyclerViewActivity.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/widget/PagerRecyclerViewActivity.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/PagerRecyclerViewActivity.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/widget/PagerRecyclerViewActivity.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/PagerRecyclerViewActivity.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/widget/PopupMenuActivity.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/PopupMenuActivity.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/widget/PopupMenuActivity.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/PopupMenuActivity.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/widget/RecyclerViewActivity.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/RecyclerViewActivity.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/widget/RecyclerViewActivity.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/RecyclerViewActivity.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/widget/StableIdActivity.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/StableIdActivity.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/widget/StableIdActivity.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/StableIdActivity.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/widget/StaggeredGridLayoutManagerActivity.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/StaggeredGridLayoutManagerActivity.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/widget/StaggeredGridLayoutManagerActivity.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/StaggeredGridLayoutManagerActivity.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/widget/adapter/SimpleStringAdapter.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/adapter/SimpleStringAdapter.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/widget/adapter/SimpleStringAdapter.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/adapter/SimpleStringAdapter.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/widget/touch/DragAndDropActivity.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/touch/DragAndDropActivity.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/widget/touch/DragAndDropActivity.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/touch/DragAndDropActivity.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/widget/touch/ItemTouchHelperActivity.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/touch/ItemTouchHelperActivity.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/widget/touch/ItemTouchHelperActivity.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/touch/ItemTouchHelperActivity.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/widget/touch/SwipeToDismissActivity.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/touch/SwipeToDismissActivity.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/widget/touch/SwipeToDismissActivity.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/touch/SwipeToDismissActivity.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/widget/util/ConfigToggle.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/util/ConfigToggle.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/widget/util/ConfigToggle.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/util/ConfigToggle.java
diff --git a/samples/Support7Demos/src/com/example/android/supportv7/widget/util/ConfigViewHolder.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/util/ConfigViewHolder.java
similarity index 100%
rename from samples/Support7Demos/src/com/example/android/supportv7/widget/util/ConfigViewHolder.java
rename to samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/util/ConfigViewHolder.java
diff --git a/samples/Support7Demos/res/anim/animation_grouping_1_01.xml b/samples/Support7Demos/src/main/res/anim/animation_grouping_1_01.xml
similarity index 100%
rename from samples/Support7Demos/res/anim/animation_grouping_1_01.xml
rename to samples/Support7Demos/src/main/res/anim/animation_grouping_1_01.xml
diff --git a/samples/Support7Demos/res/color/card_selector.xml b/samples/Support7Demos/src/main/res/color/card_selector.xml
similarity index 100%
rename from samples/Support7Demos/res/color/card_selector.xml
rename to samples/Support7Demos/src/main/res/color/card_selector.xml
diff --git a/samples/Support7Demos/res/color/link_color.xml b/samples/Support7Demos/src/main/res/color/link_color.xml
similarity index 100%
rename from samples/Support7Demos/res/color/link_color.xml
rename to samples/Support7Demos/src/main/res/color/link_color.xml
diff --git a/samples/Support7Demos/res/drawable-hdpi/apidemo_androidlogo.png b/samples/Support7Demos/src/main/res/drawable-hdpi/apidemo_androidlogo.png
similarity index 100%
rename from samples/Support7Demos/res/drawable-hdpi/apidemo_androidlogo.png
rename to samples/Support7Demos/src/main/res/drawable-hdpi/apidemo_androidlogo.png
Binary files differ
diff --git a/samples/Support7Demos/res/drawable-hdpi/app_sample_code.png b/samples/Support7Demos/src/main/res/drawable-hdpi/app_sample_code.png
similarity index 100%
rename from samples/Support7Demos/res/drawable-hdpi/app_sample_code.png
rename to samples/Support7Demos/src/main/res/drawable-hdpi/app_sample_code.png
Binary files differ
diff --git a/samples/Support7Demos/res/drawable-hdpi/drawer_shadow.9.png b/samples/Support7Demos/src/main/res/drawable-hdpi/drawer_shadow.9.png
similarity index 100%
rename from samples/Support7Demos/res/drawable-hdpi/drawer_shadow.9.png
rename to samples/Support7Demos/src/main/res/drawable-hdpi/drawer_shadow.9.png
Binary files differ
diff --git a/samples/Support7Demos/res/drawable-hdpi/drawer_shadow_end.9.png b/samples/Support7Demos/src/main/res/drawable-hdpi/drawer_shadow_end.9.png
similarity index 100%
rename from samples/Support7Demos/res/drawable-hdpi/drawer_shadow_end.9.png
rename to samples/Support7Demos/src/main/res/drawable-hdpi/drawer_shadow_end.9.png
Binary files differ
diff --git a/samples/Support7Demos/res/drawable-hdpi/ic_android.png b/samples/Support7Demos/src/main/res/drawable-hdpi/ic_android.png
similarity index 100%
rename from samples/Support7Demos/res/drawable-hdpi/ic_android.png
rename to samples/Support7Demos/src/main/res/drawable-hdpi/ic_android.png
Binary files differ
diff --git a/samples/Support7Demos/res/drawable-hdpi/ic_launcher_settings.png b/samples/Support7Demos/src/main/res/drawable-hdpi/ic_launcher_settings.png
similarity index 100%
rename from samples/Support7Demos/res/drawable-hdpi/ic_launcher_settings.png
rename to samples/Support7Demos/src/main/res/drawable-hdpi/ic_launcher_settings.png
Binary files differ
diff --git a/samples/Support7Demos/res/drawable-hdpi/ic_media_pause.png b/samples/Support7Demos/src/main/res/drawable-hdpi/ic_media_pause.png
similarity index 100%
rename from samples/Support7Demos/res/drawable-hdpi/ic_media_pause.png
rename to samples/Support7Demos/src/main/res/drawable-hdpi/ic_media_pause.png
Binary files differ
diff --git a/samples/Support7Demos/res/drawable-hdpi/ic_media_play.png b/samples/Support7Demos/src/main/res/drawable-hdpi/ic_media_play.png
similarity index 100%
rename from samples/Support7Demos/res/drawable-hdpi/ic_media_play.png
rename to samples/Support7Demos/src/main/res/drawable-hdpi/ic_media_play.png
Binary files differ
diff --git a/samples/Support7Demos/res/drawable-hdpi/ic_media_stop.png b/samples/Support7Demos/src/main/res/drawable-hdpi/ic_media_stop.png
similarity index 100%
rename from samples/Support7Demos/res/drawable-hdpi/ic_media_stop.png
rename to samples/Support7Demos/src/main/res/drawable-hdpi/ic_media_stop.png
Binary files differ
diff --git a/samples/Support7Demos/res/drawable-hdpi/ic_menu_add.png b/samples/Support7Demos/src/main/res/drawable-hdpi/ic_menu_add.png
similarity index 100%
rename from samples/Support7Demos/res/drawable-hdpi/ic_menu_add.png
rename to samples/Support7Demos/src/main/res/drawable-hdpi/ic_menu_add.png
Binary files differ
diff --git a/samples/Support7Demos/res/drawable-hdpi/ic_menu_delete.png b/samples/Support7Demos/src/main/res/drawable-hdpi/ic_menu_delete.png
similarity index 100%
rename from samples/Support7Demos/res/drawable-hdpi/ic_menu_delete.png
rename to samples/Support7Demos/src/main/res/drawable-hdpi/ic_menu_delete.png
Binary files differ
diff --git a/samples/Support7Demos/res/drawable-ldrtl-hdpi/drawer_shadow.9.png b/samples/Support7Demos/src/main/res/drawable-ldrtl-hdpi/drawer_shadow.9.png
similarity index 100%
rename from samples/Support7Demos/res/drawable-ldrtl-hdpi/drawer_shadow.9.png
rename to samples/Support7Demos/src/main/res/drawable-ldrtl-hdpi/drawer_shadow.9.png
Binary files differ
diff --git a/samples/Support7Demos/res/drawable-ldrtl-hdpi/drawer_shadow_end.9.png b/samples/Support7Demos/src/main/res/drawable-ldrtl-hdpi/drawer_shadow_end.9.png
similarity index 100%
rename from samples/Support7Demos/res/drawable-ldrtl-hdpi/drawer_shadow_end.9.png
rename to samples/Support7Demos/src/main/res/drawable-ldrtl-hdpi/drawer_shadow_end.9.png
Binary files differ
diff --git a/samples/Support7Demos/res/drawable-ldrtl-mdpi/drawer_shadow.9.png b/samples/Support7Demos/src/main/res/drawable-ldrtl-mdpi/drawer_shadow.9.png
similarity index 100%
rename from samples/Support7Demos/res/drawable-ldrtl-mdpi/drawer_shadow.9.png
rename to samples/Support7Demos/src/main/res/drawable-ldrtl-mdpi/drawer_shadow.9.png
Binary files differ
diff --git a/samples/Support7Demos/res/drawable-ldrtl-mdpi/drawer_shadow_end.9.png b/samples/Support7Demos/src/main/res/drawable-ldrtl-mdpi/drawer_shadow_end.9.png
similarity index 100%
rename from samples/Support7Demos/res/drawable-ldrtl-mdpi/drawer_shadow_end.9.png
rename to samples/Support7Demos/src/main/res/drawable-ldrtl-mdpi/drawer_shadow_end.9.png
Binary files differ
diff --git a/samples/Support7Demos/res/drawable-ldrtl-xhdpi/drawer_shadow.9.png b/samples/Support7Demos/src/main/res/drawable-ldrtl-xhdpi/drawer_shadow.9.png
similarity index 100%
rename from samples/Support7Demos/res/drawable-ldrtl-xhdpi/drawer_shadow.9.png
rename to samples/Support7Demos/src/main/res/drawable-ldrtl-xhdpi/drawer_shadow.9.png
Binary files differ
diff --git a/samples/Support7Demos/res/drawable-ldrtl-xhdpi/drawer_shadow_end.9.png b/samples/Support7Demos/src/main/res/drawable-ldrtl-xhdpi/drawer_shadow_end.9.png
similarity index 100%
rename from samples/Support7Demos/res/drawable-ldrtl-xhdpi/drawer_shadow_end.9.png
rename to samples/Support7Demos/src/main/res/drawable-ldrtl-xhdpi/drawer_shadow_end.9.png
Binary files differ
diff --git a/samples/Support7Demos/res/drawable-mdpi/apidemo_androidlogo.png b/samples/Support7Demos/src/main/res/drawable-mdpi/apidemo_androidlogo.png
similarity index 100%
rename from samples/Support7Demos/res/drawable-mdpi/apidemo_androidlogo.png
rename to samples/Support7Demos/src/main/res/drawable-mdpi/apidemo_androidlogo.png
Binary files differ
diff --git a/samples/Support7Demos/res/drawable-mdpi/app_sample_code.png b/samples/Support7Demos/src/main/res/drawable-mdpi/app_sample_code.png
similarity index 100%
rename from samples/Support7Demos/res/drawable-mdpi/app_sample_code.png
rename to samples/Support7Demos/src/main/res/drawable-mdpi/app_sample_code.png
Binary files differ
diff --git a/samples/Support7Demos/res/drawable-mdpi/drawer_shadow.9.png b/samples/Support7Demos/src/main/res/drawable-mdpi/drawer_shadow.9.png
similarity index 100%
rename from samples/Support7Demos/res/drawable-mdpi/drawer_shadow.9.png
rename to samples/Support7Demos/src/main/res/drawable-mdpi/drawer_shadow.9.png
Binary files differ
diff --git a/samples/Support7Demos/res/drawable-mdpi/drawer_shadow_end.9.png b/samples/Support7Demos/src/main/res/drawable-mdpi/drawer_shadow_end.9.png
similarity index 100%
rename from samples/Support7Demos/res/drawable-mdpi/drawer_shadow_end.9.png
rename to samples/Support7Demos/src/main/res/drawable-mdpi/drawer_shadow_end.9.png
Binary files differ
diff --git a/samples/Support7Demos/res/drawable-mdpi/ic_android.png b/samples/Support7Demos/src/main/res/drawable-mdpi/ic_android.png
similarity index 100%
rename from samples/Support7Demos/res/drawable-mdpi/ic_android.png
rename to samples/Support7Demos/src/main/res/drawable-mdpi/ic_android.png
Binary files differ
diff --git a/samples/Support7Demos/res/drawable-mdpi/ic_launcher_settings.png b/samples/Support7Demos/src/main/res/drawable-mdpi/ic_launcher_settings.png
similarity index 100%
rename from samples/Support7Demos/res/drawable-mdpi/ic_launcher_settings.png
rename to samples/Support7Demos/src/main/res/drawable-mdpi/ic_launcher_settings.png
Binary files differ
diff --git a/samples/Support7Demos/res/drawable-mdpi/ic_media_pause.png b/samples/Support7Demos/src/main/res/drawable-mdpi/ic_media_pause.png
similarity index 100%
rename from samples/Support7Demos/res/drawable-mdpi/ic_media_pause.png
rename to samples/Support7Demos/src/main/res/drawable-mdpi/ic_media_pause.png
Binary files differ
diff --git a/samples/Support7Demos/res/drawable-mdpi/ic_media_play.png b/samples/Support7Demos/src/main/res/drawable-mdpi/ic_media_play.png
similarity index 100%
rename from samples/Support7Demos/res/drawable-mdpi/ic_media_play.png
rename to samples/Support7Demos/src/main/res/drawable-mdpi/ic_media_play.png
Binary files differ
diff --git a/samples/Support7Demos/res/drawable-mdpi/ic_media_stop.png b/samples/Support7Demos/src/main/res/drawable-mdpi/ic_media_stop.png
similarity index 100%
rename from samples/Support7Demos/res/drawable-mdpi/ic_media_stop.png
rename to samples/Support7Demos/src/main/res/drawable-mdpi/ic_media_stop.png
Binary files differ
diff --git a/samples/Support7Demos/res/drawable-mdpi/ic_menu_add.png b/samples/Support7Demos/src/main/res/drawable-mdpi/ic_menu_add.png
similarity index 100%
rename from samples/Support7Demos/res/drawable-mdpi/ic_menu_add.png
rename to samples/Support7Demos/src/main/res/drawable-mdpi/ic_menu_add.png
Binary files differ
diff --git a/samples/Support7Demos/res/drawable-mdpi/ic_menu_delete.png b/samples/Support7Demos/src/main/res/drawable-mdpi/ic_menu_delete.png
similarity index 100%
rename from samples/Support7Demos/res/drawable-mdpi/ic_menu_delete.png
rename to samples/Support7Demos/src/main/res/drawable-mdpi/ic_menu_delete.png
Binary files differ
diff --git a/samples/Support7Demos/res/drawable-xhdpi/drawer_shadow.9.png b/samples/Support7Demos/src/main/res/drawable-xhdpi/drawer_shadow.9.png
similarity index 100%
rename from samples/Support7Demos/res/drawable-xhdpi/drawer_shadow.9.png
rename to samples/Support7Demos/src/main/res/drawable-xhdpi/drawer_shadow.9.png
Binary files differ
diff --git a/samples/Support7Demos/res/drawable-xhdpi/drawer_shadow_end.9.png b/samples/Support7Demos/src/main/res/drawable-xhdpi/drawer_shadow_end.9.png
similarity index 100%
rename from samples/Support7Demos/res/drawable-xhdpi/drawer_shadow_end.9.png
rename to samples/Support7Demos/src/main/res/drawable-xhdpi/drawer_shadow_end.9.png
Binary files differ
diff --git a/samples/Support7Demos/res/drawable/animation_vector_drawable_grouping_1.xml b/samples/Support7Demos/src/main/res/drawable/animation_vector_drawable_grouping_1.xml
similarity index 100%
rename from samples/Support7Demos/res/drawable/animation_vector_drawable_grouping_1.xml
rename to samples/Support7Demos/src/main/res/drawable/animation_vector_drawable_grouping_1.xml
diff --git a/samples/Support7Demos/res/drawable/gradient.xml b/samples/Support7Demos/src/main/res/drawable/gradient.xml
similarity index 100%
rename from samples/Support7Demos/res/drawable/gradient.xml
rename to samples/Support7Demos/src/main/res/drawable/gradient.xml
diff --git a/samples/Support7Demos/res/drawable/ic_search.xml b/samples/Support7Demos/src/main/res/drawable/ic_search.xml
similarity index 100%
rename from samples/Support7Demos/res/drawable/ic_search.xml
rename to samples/Support7Demos/src/main/res/drawable/ic_search.xml
diff --git a/samples/Support7Demos/res/drawable/test_night_color_conversion_background.xml b/samples/Support7Demos/src/main/res/drawable/test_night_color_conversion_background.xml
similarity index 100%
rename from samples/Support7Demos/res/drawable/test_night_color_conversion_background.xml
rename to samples/Support7Demos/src/main/res/drawable/test_night_color_conversion_background.xml
diff --git a/samples/Support7Demos/res/drawable/vector_drawable_grouping_1.xml b/samples/Support7Demos/src/main/res/drawable/vector_drawable_grouping_1.xml
similarity index 100%
rename from samples/Support7Demos/res/drawable/vector_drawable_grouping_1.xml
rename to samples/Support7Demos/src/main/res/drawable/vector_drawable_grouping_1.xml
diff --git a/samples/Support7Demos/res/layout-land/grid_layout_2.xml b/samples/Support7Demos/src/main/res/layout-land/grid_layout_2.xml
similarity index 100%
rename from samples/Support7Demos/res/layout-land/grid_layout_2.xml
rename to samples/Support7Demos/src/main/res/layout-land/grid_layout_2.xml
diff --git a/samples/Support7Demos/res/layout-v11/appcompat_animated_vector.xml b/samples/Support7Demos/src/main/res/layout-v11/appcompat_animated_vector.xml
similarity index 100%
rename from samples/Support7Demos/res/layout-v11/appcompat_animated_vector.xml
rename to samples/Support7Demos/src/main/res/layout-v11/appcompat_animated_vector.xml
diff --git a/samples/Support7Demos/res/layout/action_bar_action_mode.xml b/samples/Support7Demos/src/main/res/layout/action_bar_action_mode.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/action_bar_action_mode.xml
rename to samples/Support7Demos/src/main/res/layout/action_bar_action_mode.xml
diff --git a/samples/Support7Demos/res/layout/action_bar_display_options.xml b/samples/Support7Demos/src/main/res/layout/action_bar_display_options.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/action_bar_display_options.xml
rename to samples/Support7Demos/src/main/res/layout/action_bar_display_options.xml
diff --git a/samples/Support7Demos/res/layout/action_bar_display_options_custom.xml b/samples/Support7Demos/src/main/res/layout/action_bar_display_options_custom.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/action_bar_display_options_custom.xml
rename to samples/Support7Demos/src/main/res/layout/action_bar_display_options_custom.xml
diff --git a/samples/Support7Demos/res/layout/action_bar_fragment_menu.xml b/samples/Support7Demos/src/main/res/layout/action_bar_fragment_menu.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/action_bar_fragment_menu.xml
rename to samples/Support7Demos/src/main/res/layout/action_bar_fragment_menu.xml
diff --git a/samples/Support7Demos/res/layout/action_bar_hide_scroll.xml b/samples/Support7Demos/src/main/res/layout/action_bar_hide_scroll.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/action_bar_hide_scroll.xml
rename to samples/Support7Demos/src/main/res/layout/action_bar_hide_scroll.xml
diff --git a/samples/Support7Demos/res/layout/action_bar_settings_action_provider.xml b/samples/Support7Demos/src/main/res/layout/action_bar_settings_action_provider.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/action_bar_settings_action_provider.xml
rename to samples/Support7Demos/src/main/res/layout/action_bar_settings_action_provider.xml
diff --git a/samples/Support7Demos/res/layout/action_bar_tab_content.xml b/samples/Support7Demos/src/main/res/layout/action_bar_tab_content.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/action_bar_tab_content.xml
rename to samples/Support7Demos/src/main/res/layout/action_bar_tab_content.xml
diff --git a/samples/Support7Demos/res/layout/action_bar_tabs.xml b/samples/Support7Demos/src/main/res/layout/action_bar_tabs.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/action_bar_tabs.xml
rename to samples/Support7Demos/src/main/res/layout/action_bar_tabs.xml
diff --git a/samples/Support7Demos/res/layout/activity_base_layout_manager.xml b/samples/Support7Demos/src/main/res/layout/activity_base_layout_manager.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/activity_base_layout_manager.xml
rename to samples/Support7Demos/src/main/res/layout/activity_base_layout_manager.xml
diff --git a/samples/Support7Demos/res/layout/activity_card_view.xml b/samples/Support7Demos/src/main/res/layout/activity_card_view.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/activity_card_view.xml
rename to samples/Support7Demos/src/main/res/layout/activity_card_view.xml
diff --git a/samples/Support7Demos/res/layout/activity_item_touch.xml b/samples/Support7Demos/src/main/res/layout/activity_item_touch.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/activity_item_touch.xml
rename to samples/Support7Demos/src/main/res/layout/activity_item_touch.xml
diff --git a/samples/Support7Demos/res/layout/alert_dialog_usage.xml b/samples/Support7Demos/src/main/res/layout/alert_dialog_usage.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/alert_dialog_usage.xml
rename to samples/Support7Demos/src/main/res/layout/alert_dialog_usage.xml
diff --git a/samples/Support7Demos/res/layout/animated_recycler_view.xml b/samples/Support7Demos/src/main/res/layout/animated_recycler_view.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/animated_recycler_view.xml
rename to samples/Support7Demos/src/main/res/layout/animated_recycler_view.xml
diff --git a/samples/Support7Demos/res/layout/appcompat_animated_vector.xml b/samples/Support7Demos/src/main/res/layout/appcompat_animated_vector.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/appcompat_animated_vector.xml
rename to samples/Support7Demos/src/main/res/layout/appcompat_animated_vector.xml
diff --git a/samples/Support7Demos/res/layout/appcompat_night_mode.xml b/samples/Support7Demos/src/main/res/layout/appcompat_night_mode.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/appcompat_night_mode.xml
rename to samples/Support7Demos/src/main/res/layout/appcompat_night_mode.xml
diff --git a/samples/Support7Demos/src/main/res/layout/appcompat_widgets_buttons.xml b/samples/Support7Demos/src/main/res/layout/appcompat_widgets_buttons.xml
new file mode 100644
index 0000000..ba4c045
--- /dev/null
+++ b/samples/Support7Demos/src/main/res/layout/appcompat_widgets_buttons.xml
@@ -0,0 +1,159 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2015 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.
+-->
+
+<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ xmlns:app="http://schemas.android.com/apk/res-auto">
+
+ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:padding="16dp">
+
+ <android.support.v7.widget.SwitchCompat
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:text="SwitchCompat"/>
+
+ <android.support.v7.widget.SwitchCompat
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:enabled="false"
+ android:text="SwitchCompat disabled"/>
+
+ <Switch
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:text="Switch"/>
+
+ <Switch
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:enabled="false"
+ android:text="Switch disabled"/>
+
+ <CheckBox
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="CheckBox"/>
+
+ <RadioGroup
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal">
+
+ <RadioButton
+ android:id="@+id/radiobutton_1"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="RadioButton"/>
+
+ <RadioButton
+ android:id="@+id/radiobutton_2"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="RadioButton"/>
+
+ </RadioGroup>
+
+ <Button
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="Button"/>
+
+ <Button
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:enabled="false"
+ android:text="Button disabled"/>
+
+ <Button
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="Button (small)"
+ style="@style/Widget.AppCompat.Button.Small"/>
+
+ <Button
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:enabled="false"
+ android:text="Button (small) disabled"
+ style="@style/Widget.AppCompat.Button.Small"/>
+
+ <Button
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="Button (borderless)"
+ style="@style/Widget.AppCompat.Button.Borderless"/>
+
+ <Button
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:enabled="false"
+ android:text="Button (borderless) disabled"
+ style="@style/Widget.AppCompat.Button.Borderless"/>
+
+ <Button
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="Button (borderless + colored)"
+ style="@style/Widget.AppCompat.Button.Borderless.Colored"/>
+
+ <Button
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:enabled="false"
+ android:text="Button (borderless + colored) disabled"
+ style="@style/Widget.AppCompat.Button.Borderless.Colored"/>
+
+ <Button
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="Button (colored)"
+ style="@style/Widget.AppCompat.Button.Colored"/>
+
+ <Button
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:enabled="false"
+ android:text="Button (colored) disabled"
+ style="@style/Widget.AppCompat.Button.Colored"/>
+
+ <Button
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="Button (colored + tinted)"
+ app:backgroundTint="#00FF00"
+ style="@style/Widget.AppCompat.Button.Colored"/>
+
+ <Button
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:enabled="false"
+ android:text="Button (colored + tinted) disabled"
+ app:backgroundTint="#00FF00"
+ style="@style/Widget.AppCompat.Button.Colored"/>
+
+ <RatingBar
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"/>
+
+ </LinearLayout>
+
+</ScrollView>
\ No newline at end of file
diff --git a/samples/Support7Demos/res/layout/appcompat_widgets_text_input.xml b/samples/Support7Demos/src/main/res/layout/appcompat_widgets_text_input.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/appcompat_widgets_text_input.xml
rename to samples/Support7Demos/src/main/res/layout/appcompat_widgets_text_input.xml
diff --git a/samples/Support7Demos/res/layout/appcompat_widgets_text_spinners.xml b/samples/Support7Demos/src/main/res/layout/appcompat_widgets_text_spinners.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/appcompat_widgets_text_spinners.xml
rename to samples/Support7Demos/src/main/res/layout/appcompat_widgets_text_spinners.xml
diff --git a/samples/Support7Demos/res/layout/appcompat_widgets_text_views.xml b/samples/Support7Demos/src/main/res/layout/appcompat_widgets_text_views.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/appcompat_widgets_text_views.xml
rename to samples/Support7Demos/src/main/res/layout/appcompat_widgets_text_views.xml
diff --git a/samples/Support7Demos/res/layout/config_view_toggle.xml b/samples/Support7Demos/src/main/res/layout/config_view_toggle.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/config_view_toggle.xml
rename to samples/Support7Demos/src/main/res/layout/config_view_toggle.xml
diff --git a/samples/Support7Demos/res/layout/dialog_content.xml b/samples/Support7Demos/src/main/res/layout/dialog_content.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/dialog_content.xml
rename to samples/Support7Demos/src/main/res/layout/dialog_content.xml
diff --git a/samples/Support7Demos/res/layout/dialog_content_buttons.xml b/samples/Support7Demos/src/main/res/layout/dialog_content_buttons.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/dialog_content_buttons.xml
rename to samples/Support7Demos/src/main/res/layout/dialog_content_buttons.xml
diff --git a/samples/Support7Demos/res/layout/dialog_usage.xml b/samples/Support7Demos/src/main/res/layout/dialog_usage.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/dialog_usage.xml
rename to samples/Support7Demos/src/main/res/layout/dialog_usage.xml
diff --git a/samples/Support7Demos/res/layout/drawer_layout.xml b/samples/Support7Demos/src/main/res/layout/drawer_layout.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/drawer_layout.xml
rename to samples/Support7Demos/src/main/res/layout/drawer_layout.xml
diff --git a/samples/Support7Demos/res/layout/grid_layout_1.xml b/samples/Support7Demos/src/main/res/layout/grid_layout_1.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/grid_layout_1.xml
rename to samples/Support7Demos/src/main/res/layout/grid_layout_1.xml
diff --git a/samples/Support7Demos/res/layout/grid_layout_2.xml b/samples/Support7Demos/src/main/res/layout/grid_layout_2.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/grid_layout_2.xml
rename to samples/Support7Demos/src/main/res/layout/grid_layout_2.xml
diff --git a/samples/Support7Demos/res/layout/list_popup_window_activity.xml b/samples/Support7Demos/src/main/res/layout/list_popup_window_activity.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/list_popup_window_activity.xml
rename to samples/Support7Demos/src/main/res/layout/list_popup_window_activity.xml
diff --git a/samples/Support7Demos/res/layout/list_view_activity.xml b/samples/Support7Demos/src/main/res/layout/list_view_activity.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/list_view_activity.xml
rename to samples/Support7Demos/src/main/res/layout/list_view_activity.xml
diff --git a/samples/Support7Demos/res/layout/list_view_item.xml b/samples/Support7Demos/src/main/res/layout/list_view_item.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/list_view_item.xml
rename to samples/Support7Demos/src/main/res/layout/list_view_item.xml
diff --git a/samples/Support7Demos/res/layout/media_item.xml b/samples/Support7Demos/src/main/res/layout/media_item.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/media_item.xml
rename to samples/Support7Demos/src/main/res/layout/media_item.xml
diff --git a/samples/Support7Demos/res/layout/nested_item.xml b/samples/Support7Demos/src/main/res/layout/nested_item.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/nested_item.xml
rename to samples/Support7Demos/src/main/res/layout/nested_item.xml
diff --git a/samples/Support7Demos/res/layout/overlay_display_window.xml b/samples/Support7Demos/src/main/res/layout/overlay_display_window.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/overlay_display_window.xml
rename to samples/Support7Demos/src/main/res/layout/overlay_display_window.xml
diff --git a/samples/Support7Demos/res/layout/palette_activity_detail.xml b/samples/Support7Demos/src/main/res/layout/palette_activity_detail.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/palette_activity_detail.xml
rename to samples/Support7Demos/src/main/res/layout/palette_activity_detail.xml
diff --git a/samples/Support7Demos/res/layout/palette_grid_item.xml b/samples/Support7Demos/src/main/res/layout/palette_grid_item.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/palette_grid_item.xml
rename to samples/Support7Demos/src/main/res/layout/palette_grid_item.xml
diff --git a/samples/Support7Demos/res/layout/palette_list_item.xml b/samples/Support7Demos/src/main/res/layout/palette_list_item.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/palette_list_item.xml
rename to samples/Support7Demos/src/main/res/layout/palette_list_item.xml
diff --git a/samples/Support7Demos/res/layout/popup_menu_activity.xml b/samples/Support7Demos/src/main/res/layout/popup_menu_activity.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/popup_menu_activity.xml
rename to samples/Support7Demos/src/main/res/layout/popup_menu_activity.xml
diff --git a/samples/Support7Demos/res/layout/sample_media_controller.xml b/samples/Support7Demos/src/main/res/layout/sample_media_controller.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/sample_media_controller.xml
rename to samples/Support7Demos/src/main/res/layout/sample_media_controller.xml
diff --git a/samples/Support7Demos/res/layout/sample_media_router.xml b/samples/Support7Demos/src/main/res/layout/sample_media_router.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/sample_media_router.xml
rename to samples/Support7Demos/src/main/res/layout/sample_media_router.xml
diff --git a/samples/Support7Demos/res/layout/sample_media_router_presentation.xml b/samples/Support7Demos/src/main/res/layout/sample_media_router_presentation.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/sample_media_router_presentation.xml
rename to samples/Support7Demos/src/main/res/layout/sample_media_router_presentation.xml
diff --git a/samples/Support7Demos/res/layout/selectable_item.xml b/samples/Support7Demos/src/main/res/layout/selectable_item.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/selectable_item.xml
rename to samples/Support7Demos/src/main/res/layout/selectable_item.xml
diff --git a/samples/Support7Demos/res/layout/sorted_list_activity.xml b/samples/Support7Demos/src/main/res/layout/sorted_list_activity.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/sorted_list_activity.xml
rename to samples/Support7Demos/src/main/res/layout/sorted_list_activity.xml
diff --git a/samples/Support7Demos/res/layout/sorted_list_item_view.xml b/samples/Support7Demos/src/main/res/layout/sorted_list_item_view.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/sorted_list_item_view.xml
rename to samples/Support7Demos/src/main/res/layout/sorted_list_item_view.xml
diff --git a/samples/Support7Demos/res/layout/stable_id_item.xml b/samples/Support7Demos/src/main/res/layout/stable_id_item.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/stable_id_item.xml
rename to samples/Support7Demos/src/main/res/layout/stable_id_item.xml
diff --git a/samples/Support7Demos/res/layout/toolbar_action_mode.xml b/samples/Support7Demos/src/main/res/layout/toolbar_action_mode.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/toolbar_action_mode.xml
rename to samples/Support7Demos/src/main/res/layout/toolbar_action_mode.xml
diff --git a/samples/Support7Demos/res/layout/toolbar_display_options.xml b/samples/Support7Demos/src/main/res/layout/toolbar_display_options.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/toolbar_display_options.xml
rename to samples/Support7Demos/src/main/res/layout/toolbar_display_options.xml
diff --git a/samples/Support7Demos/res/layout/toolbar_fragment_pager.xml b/samples/Support7Demos/src/main/res/layout/toolbar_fragment_pager.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/toolbar_fragment_pager.xml
rename to samples/Support7Demos/src/main/res/layout/toolbar_fragment_pager.xml
diff --git a/samples/Support7Demos/res/layout/toolbar_usage.xml b/samples/Support7Demos/src/main/res/layout/toolbar_usage.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/toolbar_usage.xml
rename to samples/Support7Demos/src/main/res/layout/toolbar_usage.xml
diff --git a/samples/Support7Demos/res/layout/touch_item.xml b/samples/Support7Demos/src/main/res/layout/touch_item.xml
similarity index 100%
rename from samples/Support7Demos/res/layout/touch_item.xml
rename to samples/Support7Demos/src/main/res/layout/touch_item.xml
diff --git a/samples/Support7Demos/res/menu/action_bar_settings_action_provider.xml b/samples/Support7Demos/src/main/res/menu/action_bar_settings_action_provider.xml
similarity index 100%
rename from samples/Support7Demos/res/menu/action_bar_settings_action_provider.xml
rename to samples/Support7Demos/src/main/res/menu/action_bar_settings_action_provider.xml
diff --git a/samples/Support7Demos/res/menu/action_bar_share_action_provider.xml b/samples/Support7Demos/src/main/res/menu/action_bar_share_action_provider.xml
similarity index 100%
rename from samples/Support7Demos/res/menu/action_bar_share_action_provider.xml
rename to samples/Support7Demos/src/main/res/menu/action_bar_share_action_provider.xml
diff --git a/samples/Support7Demos/res/menu/actions.xml b/samples/Support7Demos/src/main/res/menu/actions.xml
similarity index 100%
rename from samples/Support7Demos/res/menu/actions.xml
rename to samples/Support7Demos/src/main/res/menu/actions.xml
diff --git a/samples/Support7Demos/res/menu/display_options_actions.xml b/samples/Support7Demos/src/main/res/menu/display_options_actions.xml
similarity index 100%
rename from samples/Support7Demos/res/menu/display_options_actions.xml
rename to samples/Support7Demos/src/main/res/menu/display_options_actions.xml
diff --git a/samples/Support7Demos/res/menu/menu_with_tinted_icons.xml b/samples/Support7Demos/src/main/res/menu/menu_with_tinted_icons.xml
similarity index 100%
rename from samples/Support7Demos/res/menu/menu_with_tinted_icons.xml
rename to samples/Support7Demos/src/main/res/menu/menu_with_tinted_icons.xml
diff --git a/samples/Support7Demos/res/menu/popup_menu.xml b/samples/Support7Demos/src/main/res/menu/popup_menu.xml
similarity index 100%
rename from samples/Support7Demos/res/menu/popup_menu.xml
rename to samples/Support7Demos/src/main/res/menu/popup_menu.xml
diff --git a/samples/Support7Demos/res/menu/sample_media_router_menu.xml b/samples/Support7Demos/src/main/res/menu/sample_media_router_menu.xml
similarity index 100%
rename from samples/Support7Demos/res/menu/sample_media_router_menu.xml
rename to samples/Support7Demos/src/main/res/menu/sample_media_router_menu.xml
diff --git a/samples/Support7Demos/res/menu/sample_palette_actions.xml b/samples/Support7Demos/src/main/res/menu/sample_palette_actions.xml
similarity index 100%
rename from samples/Support7Demos/res/menu/sample_palette_actions.xml
rename to samples/Support7Demos/src/main/res/menu/sample_palette_actions.xml
diff --git a/samples/Support7Demos/res/values-night/colors.xml b/samples/Support7Demos/src/main/res/values-night/colors.xml
similarity index 100%
rename from samples/Support7Demos/res/values-night/colors.xml
rename to samples/Support7Demos/src/main/res/values-night/colors.xml
diff --git a/samples/Support7Demos/res/values-night/strings.xml b/samples/Support7Demos/src/main/res/values-night/strings.xml
similarity index 100%
rename from samples/Support7Demos/res/values-night/strings.xml
rename to samples/Support7Demos/src/main/res/values-night/strings.xml
diff --git a/samples/Support7Demos/res/values-v21/styles.xml b/samples/Support7Demos/src/main/res/values-v21/styles.xml
similarity index 100%
rename from samples/Support7Demos/res/values-v21/styles.xml
rename to samples/Support7Demos/src/main/res/values-v21/styles.xml
diff --git a/samples/Support7Demos/res/values/arrays.xml b/samples/Support7Demos/src/main/res/values/arrays.xml
similarity index 100%
rename from samples/Support7Demos/res/values/arrays.xml
rename to samples/Support7Demos/src/main/res/values/arrays.xml
diff --git a/samples/Support7Demos/res/values/colors.xml b/samples/Support7Demos/src/main/res/values/colors.xml
similarity index 100%
rename from samples/Support7Demos/res/values/colors.xml
rename to samples/Support7Demos/src/main/res/values/colors.xml
diff --git a/samples/Support7Demos/res/values/dimens.xml b/samples/Support7Demos/src/main/res/values/dimens.xml
similarity index 100%
rename from samples/Support7Demos/res/values/dimens.xml
rename to samples/Support7Demos/src/main/res/values/dimens.xml
diff --git a/samples/Support7Demos/res/values/strings.xml b/samples/Support7Demos/src/main/res/values/strings.xml
similarity index 100%
rename from samples/Support7Demos/res/values/strings.xml
rename to samples/Support7Demos/src/main/res/values/strings.xml
diff --git a/samples/Support7Demos/res/values/styles.xml b/samples/Support7Demos/src/main/res/values/styles.xml
similarity index 100%
rename from samples/Support7Demos/res/values/styles.xml
rename to samples/Support7Demos/src/main/res/values/styles.xml
diff --git a/samples/Support7Demos/res/xml/preferences.xml b/samples/Support7Demos/src/main/res/xml/preferences.xml
similarity index 100%
rename from samples/Support7Demos/res/xml/preferences.xml
rename to samples/Support7Demos/src/main/res/xml/preferences.xml
diff --git a/samples/Support7Demos/res/xml/searchable.xml b/samples/Support7Demos/src/main/res/xml/searchable.xml
similarity index 100%
rename from samples/Support7Demos/res/xml/searchable.xml
rename to samples/Support7Demos/src/main/res/xml/searchable.xml
diff --git a/samples/SupportAnimationDemos/build.gradle b/samples/SupportAnimationDemos/build.gradle
index ea8038e..23e5030 100644
--- a/samples/SupportAnimationDemos/build.gradle
+++ b/samples/SupportAnimationDemos/build.gradle
@@ -12,12 +12,6 @@
targetSdkVersion project.ext.currentSdk
}
- sourceSets {
- main.manifest.srcFile 'AndroidManifest.xml'
- main.java.srcDirs = ['src']
- main.res.srcDirs = ['res']
- }
-
signingConfigs {
debug {
// Use a local debug keystore to avoid build server issues.
diff --git a/samples/SupportAnimationDemos/AndroidManifest.xml b/samples/SupportAnimationDemos/src/main/AndroidManifest.xml
similarity index 100%
rename from samples/SupportAnimationDemos/AndroidManifest.xml
rename to samples/SupportAnimationDemos/src/main/AndroidManifest.xml
diff --git a/samples/SupportAnimationDemos/src/com/example/android/support/animation/BrowseActivity.java b/samples/SupportAnimationDemos/src/main/java/com/example/android/support/animation/BrowseActivity.java
similarity index 100%
rename from samples/SupportAnimationDemos/src/com/example/android/support/animation/BrowseActivity.java
rename to samples/SupportAnimationDemos/src/main/java/com/example/android/support/animation/BrowseActivity.java
diff --git a/samples/SupportAnimationDemos/src/com/example/android/support/animation/MainActivity.java b/samples/SupportAnimationDemos/src/main/java/com/example/android/support/animation/MainActivity.java
similarity index 100%
rename from samples/SupportAnimationDemos/src/com/example/android/support/animation/MainActivity.java
rename to samples/SupportAnimationDemos/src/main/java/com/example/android/support/animation/MainActivity.java
diff --git a/samples/SupportAnimationDemos/src/com/example/android/support/animation/SpringActivity.java b/samples/SupportAnimationDemos/src/main/java/com/example/android/support/animation/SpringActivity.java
similarity index 100%
rename from samples/SupportAnimationDemos/src/com/example/android/support/animation/SpringActivity.java
rename to samples/SupportAnimationDemos/src/main/java/com/example/android/support/animation/SpringActivity.java
diff --git a/samples/SupportAnimationDemos/src/com/example/android/support/animation/SpringView.java b/samples/SupportAnimationDemos/src/main/java/com/example/android/support/animation/SpringView.java
similarity index 100%
rename from samples/SupportAnimationDemos/src/com/example/android/support/animation/SpringView.java
rename to samples/SupportAnimationDemos/src/main/java/com/example/android/support/animation/SpringView.java
diff --git a/samples/SupportAnimationDemos/res/drawable-hdpi/app_sample_code.png b/samples/SupportAnimationDemos/src/main/res/drawable-hdpi/app_sample_code.png
similarity index 100%
rename from samples/SupportAnimationDemos/res/drawable-hdpi/app_sample_code.png
rename to samples/SupportAnimationDemos/src/main/res/drawable-hdpi/app_sample_code.png
Binary files differ
diff --git a/samples/SupportAnimationDemos/res/drawable-mdpi/app_sample_code.png b/samples/SupportAnimationDemos/src/main/res/drawable-mdpi/app_sample_code.png
similarity index 100%
rename from samples/SupportAnimationDemos/res/drawable-mdpi/app_sample_code.png
rename to samples/SupportAnimationDemos/src/main/res/drawable-mdpi/app_sample_code.png
Binary files differ
diff --git a/samples/SupportAnimationDemos/res/drawable/circle.xml b/samples/SupportAnimationDemos/src/main/res/drawable/circle.xml
similarity index 100%
rename from samples/SupportAnimationDemos/res/drawable/circle.xml
rename to samples/SupportAnimationDemos/src/main/res/drawable/circle.xml
diff --git a/samples/SupportAnimationDemos/res/drawable/green_circle.xml b/samples/SupportAnimationDemos/src/main/res/drawable/green_circle.xml
similarity index 100%
rename from samples/SupportAnimationDemos/res/drawable/green_circle.xml
rename to samples/SupportAnimationDemos/src/main/res/drawable/green_circle.xml
diff --git a/samples/SupportAnimationDemos/res/drawable/light_green_circle.xml b/samples/SupportAnimationDemos/src/main/res/drawable/light_green_circle.xml
similarity index 100%
rename from samples/SupportAnimationDemos/res/drawable/light_green_circle.xml
rename to samples/SupportAnimationDemos/src/main/res/drawable/light_green_circle.xml
diff --git a/samples/SupportAnimationDemos/res/drawable/spring_demo_circle.xml b/samples/SupportAnimationDemos/src/main/res/drawable/spring_demo_circle.xml
similarity index 100%
rename from samples/SupportAnimationDemos/res/drawable/spring_demo_circle.xml
rename to samples/SupportAnimationDemos/src/main/res/drawable/spring_demo_circle.xml
diff --git a/samples/SupportAnimationDemos/res/layout/activity_chained_springs.xml b/samples/SupportAnimationDemos/src/main/res/layout/activity_chained_springs.xml
similarity index 100%
rename from samples/SupportAnimationDemos/res/layout/activity_chained_springs.xml
rename to samples/SupportAnimationDemos/src/main/res/layout/activity_chained_springs.xml
diff --git a/samples/SupportAnimationDemos/res/layout/activity_main.xml b/samples/SupportAnimationDemos/src/main/res/layout/activity_main.xml
similarity index 100%
rename from samples/SupportAnimationDemos/res/layout/activity_main.xml
rename to samples/SupportAnimationDemos/src/main/res/layout/activity_main.xml
diff --git a/samples/SupportAnimationDemos/res/values-w820dp/dimens.xml b/samples/SupportAnimationDemos/src/main/res/values-w820dp/dimens.xml
similarity index 100%
rename from samples/SupportAnimationDemos/res/values-w820dp/dimens.xml
rename to samples/SupportAnimationDemos/src/main/res/values-w820dp/dimens.xml
diff --git a/samples/SupportAnimationDemos/res/values/colors.xml b/samples/SupportAnimationDemos/src/main/res/values/colors.xml
similarity index 100%
rename from samples/SupportAnimationDemos/res/values/colors.xml
rename to samples/SupportAnimationDemos/src/main/res/values/colors.xml
diff --git a/samples/SupportAnimationDemos/res/values/dimens.xml b/samples/SupportAnimationDemos/src/main/res/values/dimens.xml
similarity index 100%
rename from samples/SupportAnimationDemos/res/values/dimens.xml
rename to samples/SupportAnimationDemos/src/main/res/values/dimens.xml
diff --git a/samples/SupportAnimationDemos/res/values/strings.xml b/samples/SupportAnimationDemos/src/main/res/values/strings.xml
similarity index 100%
rename from samples/SupportAnimationDemos/res/values/strings.xml
rename to samples/SupportAnimationDemos/src/main/res/values/strings.xml
diff --git a/samples/SupportAppNavigation/build.gradle b/samples/SupportAppNavigation/build.gradle
index fdd72b6..35a9d73 100644
--- a/samples/SupportAppNavigation/build.gradle
+++ b/samples/SupportAppNavigation/build.gradle
@@ -28,12 +28,6 @@
targetSdkVersion project.ext.currentSdk
}
- sourceSets {
- main.manifest.srcFile 'AndroidManifest.xml'
- main.java.srcDirs = ['src']
- main.res.srcDirs = ['res']
- }
-
signingConfigs {
debug {
// Use a local debug keystore to avoid build server issues.
diff --git a/samples/SupportAppNavigation/AndroidManifest.xml b/samples/SupportAppNavigation/src/main/AndroidManifest.xml
similarity index 100%
rename from samples/SupportAppNavigation/AndroidManifest.xml
rename to samples/SupportAppNavigation/src/main/AndroidManifest.xml
diff --git a/samples/SupportAppNavigation/src/com/example/android/support/appnavigation/app/ActionBarCompat.java b/samples/SupportAppNavigation/src/main/java/com/example/android/support/appnavigation/app/ActionBarCompat.java
similarity index 100%
rename from samples/SupportAppNavigation/src/com/example/android/support/appnavigation/app/ActionBarCompat.java
rename to samples/SupportAppNavigation/src/main/java/com/example/android/support/appnavigation/app/ActionBarCompat.java
diff --git a/samples/SupportAppNavigation/src/com/example/android/support/appnavigation/app/AppNavHomeActivity.java b/samples/SupportAppNavigation/src/main/java/com/example/android/support/appnavigation/app/AppNavHomeActivity.java
similarity index 100%
rename from samples/SupportAppNavigation/src/com/example/android/support/appnavigation/app/AppNavHomeActivity.java
rename to samples/SupportAppNavigation/src/main/java/com/example/android/support/appnavigation/app/AppNavHomeActivity.java
diff --git a/samples/SupportAppNavigation/src/com/example/android/support/appnavigation/app/ContentCategoryActivity.java b/samples/SupportAppNavigation/src/main/java/com/example/android/support/appnavigation/app/ContentCategoryActivity.java
similarity index 100%
rename from samples/SupportAppNavigation/src/com/example/android/support/appnavigation/app/ContentCategoryActivity.java
rename to samples/SupportAppNavigation/src/main/java/com/example/android/support/appnavigation/app/ContentCategoryActivity.java
diff --git a/samples/SupportAppNavigation/src/com/example/android/support/appnavigation/app/ContentViewActivity.java b/samples/SupportAppNavigation/src/main/java/com/example/android/support/appnavigation/app/ContentViewActivity.java
similarity index 100%
rename from samples/SupportAppNavigation/src/com/example/android/support/appnavigation/app/ContentViewActivity.java
rename to samples/SupportAppNavigation/src/main/java/com/example/android/support/appnavigation/app/ContentViewActivity.java
diff --git a/samples/SupportAppNavigation/src/com/example/android/support/appnavigation/app/InterstitialMessageActivity.java b/samples/SupportAppNavigation/src/main/java/com/example/android/support/appnavigation/app/InterstitialMessageActivity.java
similarity index 100%
rename from samples/SupportAppNavigation/src/com/example/android/support/appnavigation/app/InterstitialMessageActivity.java
rename to samples/SupportAppNavigation/src/main/java/com/example/android/support/appnavigation/app/InterstitialMessageActivity.java
diff --git a/samples/SupportAppNavigation/src/com/example/android/support/appnavigation/app/NotificationsActivity.java b/samples/SupportAppNavigation/src/main/java/com/example/android/support/appnavigation/app/NotificationsActivity.java
similarity index 100%
rename from samples/SupportAppNavigation/src/com/example/android/support/appnavigation/app/NotificationsActivity.java
rename to samples/SupportAppNavigation/src/main/java/com/example/android/support/appnavigation/app/NotificationsActivity.java
diff --git a/samples/SupportAppNavigation/src/com/example/android/support/appnavigation/app/OutsideTaskActivity.java b/samples/SupportAppNavigation/src/main/java/com/example/android/support/appnavigation/app/OutsideTaskActivity.java
similarity index 100%
rename from samples/SupportAppNavigation/src/com/example/android/support/appnavigation/app/OutsideTaskActivity.java
rename to samples/SupportAppNavigation/src/main/java/com/example/android/support/appnavigation/app/OutsideTaskActivity.java
diff --git a/samples/SupportAppNavigation/src/com/example/android/support/appnavigation/app/PeerActivity.java b/samples/SupportAppNavigation/src/main/java/com/example/android/support/appnavigation/app/PeerActivity.java
similarity index 100%
rename from samples/SupportAppNavigation/src/com/example/android/support/appnavigation/app/PeerActivity.java
rename to samples/SupportAppNavigation/src/main/java/com/example/android/support/appnavigation/app/PeerActivity.java
diff --git a/samples/SupportAppNavigation/src/com/example/android/support/appnavigation/app/SimpleUpActivity.java b/samples/SupportAppNavigation/src/main/java/com/example/android/support/appnavigation/app/SimpleUpActivity.java
similarity index 100%
rename from samples/SupportAppNavigation/src/com/example/android/support/appnavigation/app/SimpleUpActivity.java
rename to samples/SupportAppNavigation/src/main/java/com/example/android/support/appnavigation/app/SimpleUpActivity.java
diff --git a/samples/SupportAppNavigation/src/com/example/android/support/appnavigation/app/ViewFromOtherTaskActivity.java b/samples/SupportAppNavigation/src/main/java/com/example/android/support/appnavigation/app/ViewFromOtherTaskActivity.java
similarity index 100%
rename from samples/SupportAppNavigation/src/com/example/android/support/appnavigation/app/ViewFromOtherTaskActivity.java
rename to samples/SupportAppNavigation/src/main/java/com/example/android/support/appnavigation/app/ViewFromOtherTaskActivity.java
diff --git a/samples/SupportAppNavigation/res/layout/content_category.xml b/samples/SupportAppNavigation/src/main/res/layout/content_category.xml
similarity index 100%
rename from samples/SupportAppNavigation/res/layout/content_category.xml
rename to samples/SupportAppNavigation/src/main/res/layout/content_category.xml
diff --git a/samples/SupportAppNavigation/res/layout/content_view.xml b/samples/SupportAppNavigation/src/main/res/layout/content_view.xml
similarity index 100%
rename from samples/SupportAppNavigation/res/layout/content_view.xml
rename to samples/SupportAppNavigation/src/main/res/layout/content_view.xml
diff --git a/samples/SupportAppNavigation/res/layout/interstitial_message.xml b/samples/SupportAppNavigation/src/main/res/layout/interstitial_message.xml
similarity index 100%
rename from samples/SupportAppNavigation/res/layout/interstitial_message.xml
rename to samples/SupportAppNavigation/src/main/res/layout/interstitial_message.xml
diff --git a/samples/SupportAppNavigation/res/layout/notifications.xml b/samples/SupportAppNavigation/src/main/res/layout/notifications.xml
similarity index 100%
rename from samples/SupportAppNavigation/res/layout/notifications.xml
rename to samples/SupportAppNavigation/src/main/res/layout/notifications.xml
diff --git a/samples/SupportAppNavigation/res/layout/outside_task.xml b/samples/SupportAppNavigation/src/main/res/layout/outside_task.xml
similarity index 100%
rename from samples/SupportAppNavigation/res/layout/outside_task.xml
rename to samples/SupportAppNavigation/src/main/res/layout/outside_task.xml
diff --git a/samples/SupportAppNavigation/res/layout/peer.xml b/samples/SupportAppNavigation/src/main/res/layout/peer.xml
similarity index 100%
rename from samples/SupportAppNavigation/res/layout/peer.xml
rename to samples/SupportAppNavigation/src/main/res/layout/peer.xml
diff --git a/samples/SupportAppNavigation/res/layout/simple_up.xml b/samples/SupportAppNavigation/src/main/res/layout/simple_up.xml
similarity index 100%
rename from samples/SupportAppNavigation/res/layout/simple_up.xml
rename to samples/SupportAppNavigation/src/main/res/layout/simple_up.xml
diff --git a/samples/SupportAppNavigation/res/layout/view_from_other_task.xml b/samples/SupportAppNavigation/src/main/res/layout/view_from_other_task.xml
similarity index 100%
rename from samples/SupportAppNavigation/res/layout/view_from_other_task.xml
rename to samples/SupportAppNavigation/src/main/res/layout/view_from_other_task.xml
diff --git a/samples/SupportAppNavigation/res/values-v11/styles.xml b/samples/SupportAppNavigation/src/main/res/values-v11/styles.xml
similarity index 100%
rename from samples/SupportAppNavigation/res/values-v11/styles.xml
rename to samples/SupportAppNavigation/src/main/res/values-v11/styles.xml
diff --git a/samples/SupportAppNavigation/res/values-v11/themes.xml b/samples/SupportAppNavigation/src/main/res/values-v11/themes.xml
similarity index 100%
rename from samples/SupportAppNavigation/res/values-v11/themes.xml
rename to samples/SupportAppNavigation/src/main/res/values-v11/themes.xml
diff --git a/samples/SupportAppNavigation/res/values-v14/themes.xml b/samples/SupportAppNavigation/src/main/res/values-v14/themes.xml
similarity index 100%
rename from samples/SupportAppNavigation/res/values-v14/themes.xml
rename to samples/SupportAppNavigation/src/main/res/values-v14/themes.xml
diff --git a/samples/SupportAppNavigation/res/values/ids.xml b/samples/SupportAppNavigation/src/main/res/values/ids.xml
similarity index 100%
rename from samples/SupportAppNavigation/res/values/ids.xml
rename to samples/SupportAppNavigation/src/main/res/values/ids.xml
diff --git a/samples/SupportAppNavigation/res/values/strings.xml b/samples/SupportAppNavigation/src/main/res/values/strings.xml
similarity index 100%
rename from samples/SupportAppNavigation/res/values/strings.xml
rename to samples/SupportAppNavigation/src/main/res/values/strings.xml
diff --git a/samples/SupportAppNavigation/res/values/styles.xml b/samples/SupportAppNavigation/src/main/res/values/styles.xml
similarity index 100%
rename from samples/SupportAppNavigation/res/values/styles.xml
rename to samples/SupportAppNavigation/src/main/res/values/styles.xml
diff --git a/samples/SupportAppNavigation/res/values/themes.xml b/samples/SupportAppNavigation/src/main/res/values/themes.xml
similarity index 100%
rename from samples/SupportAppNavigation/res/values/themes.xml
rename to samples/SupportAppNavigation/src/main/res/values/themes.xml
diff --git a/samples/SupportDesignDemos/build.gradle b/samples/SupportDesignDemos/build.gradle
index ca4c12d..7abaa0e 100644
--- a/samples/SupportDesignDemos/build.gradle
+++ b/samples/SupportDesignDemos/build.gradle
@@ -13,12 +13,6 @@
vectorDrawables.useSupportLibrary = true
}
- sourceSets {
- main.manifest.srcFile 'AndroidManifest.xml'
- main.java.srcDirs = ['src']
- main.res.srcDirs = ['res']
- }
-
signingConfigs {
debug {
// Use a local debug keystore to avoid build server issues.
diff --git a/samples/SupportDesignDemos/AndroidManifest.xml b/samples/SupportDesignDemos/src/main/AndroidManifest.xml
similarity index 100%
rename from samples/SupportDesignDemos/AndroidManifest.xml
rename to samples/SupportDesignDemos/src/main/AndroidManifest.xml
diff --git a/samples/SupportDesignDemos/src/com/example/android/support/design/Cheeses.java b/samples/SupportDesignDemos/src/main/java/com/example/android/support/design/Cheeses.java
similarity index 100%
rename from samples/SupportDesignDemos/src/com/example/android/support/design/Cheeses.java
rename to samples/SupportDesignDemos/src/main/java/com/example/android/support/design/Cheeses.java
diff --git a/samples/SupportDesignDemos/src/com/example/android/support/design/Shakespeare.java b/samples/SupportDesignDemos/src/main/java/com/example/android/support/design/Shakespeare.java
similarity index 100%
rename from samples/SupportDesignDemos/src/com/example/android/support/design/Shakespeare.java
rename to samples/SupportDesignDemos/src/main/java/com/example/android/support/design/Shakespeare.java
diff --git a/samples/SupportDesignDemos/src/com/example/android/support/design/SupportDesignDemos.java b/samples/SupportDesignDemos/src/main/java/com/example/android/support/design/SupportDesignDemos.java
similarity index 100%
rename from samples/SupportDesignDemos/src/com/example/android/support/design/SupportDesignDemos.java
rename to samples/SupportDesignDemos/src/main/java/com/example/android/support/design/SupportDesignDemos.java
diff --git a/samples/SupportDesignDemos/src/com/example/android/support/design/widget/AppBarLayoutToolbarCollapseThenPin.java b/samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/AppBarLayoutToolbarCollapseThenPin.java
similarity index 100%
rename from samples/SupportDesignDemos/src/com/example/android/support/design/widget/AppBarLayoutToolbarCollapseThenPin.java
rename to samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/AppBarLayoutToolbarCollapseThenPin.java
diff --git a/samples/SupportDesignDemos/src/com/example/android/support/design/widget/AppBarLayoutToolbarCollapseThenPinNested.java b/samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/AppBarLayoutToolbarCollapseThenPinNested.java
similarity index 100%
rename from samples/SupportDesignDemos/src/com/example/android/support/design/widget/AppBarLayoutToolbarCollapseThenPinNested.java
rename to samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/AppBarLayoutToolbarCollapseThenPinNested.java
diff --git a/samples/SupportDesignDemos/src/com/example/android/support/design/widget/AppBarLayoutToolbarCollapseThenPinWithFab.java b/samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/AppBarLayoutToolbarCollapseThenPinWithFab.java
similarity index 100%
rename from samples/SupportDesignDemos/src/com/example/android/support/design/widget/AppBarLayoutToolbarCollapseThenPinWithFab.java
rename to samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/AppBarLayoutToolbarCollapseThenPinWithFab.java
diff --git a/samples/SupportDesignDemos/src/com/example/android/support/design/widget/AppBarLayoutToolbarCollapseThenScroll.java b/samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/AppBarLayoutToolbarCollapseThenScroll.java
similarity index 100%
rename from samples/SupportDesignDemos/src/com/example/android/support/design/widget/AppBarLayoutToolbarCollapseThenScroll.java
rename to samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/AppBarLayoutToolbarCollapseThenScroll.java
diff --git a/samples/SupportDesignDemos/src/com/example/android/support/design/widget/AppBarLayoutToolbarCollapseThenScrollWithSwipeRefresh.java b/samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/AppBarLayoutToolbarCollapseThenScrollWithSwipeRefresh.java
similarity index 100%
rename from samples/SupportDesignDemos/src/com/example/android/support/design/widget/AppBarLayoutToolbarCollapseThenScrollWithSwipeRefresh.java
rename to samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/AppBarLayoutToolbarCollapseThenScrollWithSwipeRefresh.java
diff --git a/samples/SupportDesignDemos/src/com/example/android/support/design/widget/AppBarLayoutToolbarCollapseWithImage.java b/samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/AppBarLayoutToolbarCollapseWithImage.java
similarity index 100%
rename from samples/SupportDesignDemos/src/com/example/android/support/design/widget/AppBarLayoutToolbarCollapseWithImage.java
rename to samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/AppBarLayoutToolbarCollapseWithImage.java
diff --git a/samples/SupportDesignDemos/src/com/example/android/support/design/widget/AppBarLayoutToolbarCollapseWithImageWithInsets.java b/samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/AppBarLayoutToolbarCollapseWithImageWithInsets.java
similarity index 100%
rename from samples/SupportDesignDemos/src/com/example/android/support/design/widget/AppBarLayoutToolbarCollapseWithImageWithInsets.java
rename to samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/AppBarLayoutToolbarCollapseWithImageWithInsets.java
diff --git a/samples/SupportDesignDemos/src/com/example/android/support/design/widget/AppBarLayoutToolbarParallaxOverlapContent.java b/samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/AppBarLayoutToolbarParallaxOverlapContent.java
similarity index 100%
rename from samples/SupportDesignDemos/src/com/example/android/support/design/widget/AppBarLayoutToolbarParallaxOverlapContent.java
rename to samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/AppBarLayoutToolbarParallaxOverlapContent.java
diff --git a/samples/SupportDesignDemos/src/com/example/android/support/design/widget/AppBarLayoutToolbarScrollTabsPin.java b/samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/AppBarLayoutToolbarScrollTabsPin.java
similarity index 100%
rename from samples/SupportDesignDemos/src/com/example/android/support/design/widget/AppBarLayoutToolbarScrollTabsPin.java
rename to samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/AppBarLayoutToolbarScrollTabsPin.java
diff --git a/samples/SupportDesignDemos/src/com/example/android/support/design/widget/AppBarLayoutToolbarScrollTabsPinWithSwipeRefresh.java b/samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/AppBarLayoutToolbarScrollTabsPinWithSwipeRefresh.java
similarity index 100%
rename from samples/SupportDesignDemos/src/com/example/android/support/design/widget/AppBarLayoutToolbarScrollTabsPinWithSwipeRefresh.java
rename to samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/AppBarLayoutToolbarScrollTabsPinWithSwipeRefresh.java
diff --git a/samples/SupportDesignDemos/src/com/example/android/support/design/widget/AppBarLayoutToolbarScrollTabsScroll.java b/samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/AppBarLayoutToolbarScrollTabsScroll.java
similarity index 100%
rename from samples/SupportDesignDemos/src/com/example/android/support/design/widget/AppBarLayoutToolbarScrollTabsScroll.java
rename to samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/AppBarLayoutToolbarScrollTabsScroll.java
diff --git a/samples/SupportDesignDemos/src/com/example/android/support/design/widget/AppBarLayoutToolbarScrollTabsScrollSnap.java b/samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/AppBarLayoutToolbarScrollTabsScrollSnap.java
similarity index 100%
rename from samples/SupportDesignDemos/src/com/example/android/support/design/widget/AppBarLayoutToolbarScrollTabsScrollSnap.java
rename to samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/AppBarLayoutToolbarScrollTabsScrollSnap.java
diff --git a/samples/SupportDesignDemos/src/com/example/android/support/design/widget/AppBarLayoutUsageBase.java b/samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/AppBarLayoutUsageBase.java
similarity index 100%
rename from samples/SupportDesignDemos/src/com/example/android/support/design/widget/AppBarLayoutUsageBase.java
rename to samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/AppBarLayoutUsageBase.java
diff --git a/samples/SupportDesignDemos/src/com/example/android/support/design/widget/BottomNavigationViewUsage.java b/samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/BottomNavigationViewUsage.java
similarity index 100%
rename from samples/SupportDesignDemos/src/com/example/android/support/design/widget/BottomNavigationViewUsage.java
rename to samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/BottomNavigationViewUsage.java
diff --git a/samples/SupportDesignDemos/src/com/example/android/support/design/widget/BottomSheetDynamicContent.java b/samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/BottomSheetDynamicContent.java
similarity index 100%
rename from samples/SupportDesignDemos/src/com/example/android/support/design/widget/BottomSheetDynamicContent.java
rename to samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/BottomSheetDynamicContent.java
diff --git a/samples/SupportDesignDemos/src/com/example/android/support/design/widget/BottomSheetHideable.java b/samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/BottomSheetHideable.java
similarity index 100%
rename from samples/SupportDesignDemos/src/com/example/android/support/design/widget/BottomSheetHideable.java
rename to samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/BottomSheetHideable.java
diff --git a/samples/SupportDesignDemos/src/com/example/android/support/design/widget/BottomSheetModal.java b/samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/BottomSheetModal.java
similarity index 100%
rename from samples/SupportDesignDemos/src/com/example/android/support/design/widget/BottomSheetModal.java
rename to samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/BottomSheetModal.java
diff --git a/samples/SupportDesignDemos/src/com/example/android/support/design/widget/BottomSheetModalBase.java b/samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/BottomSheetModalBase.java
similarity index 100%
rename from samples/SupportDesignDemos/src/com/example/android/support/design/widget/BottomSheetModalBase.java
rename to samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/BottomSheetModalBase.java
diff --git a/samples/SupportDesignDemos/src/com/example/android/support/design/widget/BottomSheetModalSkipCollapsed.java b/samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/BottomSheetModalSkipCollapsed.java
similarity index 100%
rename from samples/SupportDesignDemos/src/com/example/android/support/design/widget/BottomSheetModalSkipCollapsed.java
rename to samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/BottomSheetModalSkipCollapsed.java
diff --git a/samples/SupportDesignDemos/src/com/example/android/support/design/widget/BottomSheetPersistent.java b/samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/BottomSheetPersistent.java
similarity index 100%
rename from samples/SupportDesignDemos/src/com/example/android/support/design/widget/BottomSheetPersistent.java
rename to samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/BottomSheetPersistent.java
diff --git a/samples/SupportDesignDemos/src/com/example/android/support/design/widget/BottomSheetScrollView.java b/samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/BottomSheetScrollView.java
similarity index 100%
rename from samples/SupportDesignDemos/src/com/example/android/support/design/widget/BottomSheetScrollView.java
rename to samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/BottomSheetScrollView.java
diff --git a/samples/SupportDesignDemos/src/com/example/android/support/design/widget/BottomSheetUsageBase.java b/samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/BottomSheetUsageBase.java
similarity index 100%
rename from samples/SupportDesignDemos/src/com/example/android/support/design/widget/BottomSheetUsageBase.java
rename to samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/BottomSheetUsageBase.java
diff --git a/samples/SupportDesignDemos/src/com/example/android/support/design/widget/BottomSheetWithFab.java b/samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/BottomSheetWithFab.java
similarity index 100%
rename from samples/SupportDesignDemos/src/com/example/android/support/design/widget/BottomSheetWithFab.java
rename to samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/BottomSheetWithFab.java
diff --git a/samples/SupportDesignDemos/src/com/example/android/support/design/widget/BottomSheetWithFragment.java b/samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/BottomSheetWithFragment.java
similarity index 100%
rename from samples/SupportDesignDemos/src/com/example/android/support/design/widget/BottomSheetWithFragment.java
rename to samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/BottomSheetWithFragment.java
diff --git a/samples/SupportDesignDemos/src/com/example/android/support/design/widget/CoordinatorLayoutInset.java b/samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/CoordinatorLayoutInset.java
similarity index 100%
rename from samples/SupportDesignDemos/src/com/example/android/support/design/widget/CoordinatorLayoutInset.java
rename to samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/CoordinatorLayoutInset.java
diff --git a/samples/SupportDesignDemos/src/com/example/android/support/design/widget/CustomSnackbar.java b/samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/CustomSnackbar.java
similarity index 100%
rename from samples/SupportDesignDemos/src/com/example/android/support/design/widget/CustomSnackbar.java
rename to samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/CustomSnackbar.java
diff --git a/samples/SupportDesignDemos/src/com/example/android/support/design/widget/CustomSnackbarMainContent.java b/samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/CustomSnackbarMainContent.java
similarity index 100%
rename from samples/SupportDesignDemos/src/com/example/android/support/design/widget/CustomSnackbarMainContent.java
rename to samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/CustomSnackbarMainContent.java
diff --git a/samples/SupportDesignDemos/src/com/example/android/support/design/widget/CustomSnackbarUsage.java b/samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/CustomSnackbarUsage.java
similarity index 100%
rename from samples/SupportDesignDemos/src/com/example/android/support/design/widget/CustomSnackbarUsage.java
rename to samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/CustomSnackbarUsage.java
diff --git a/samples/SupportDesignDemos/src/com/example/android/support/design/widget/FloatingActionButtonUsage.java b/samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/FloatingActionButtonUsage.java
similarity index 100%
rename from samples/SupportDesignDemos/src/com/example/android/support/design/widget/FloatingActionButtonUsage.java
rename to samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/FloatingActionButtonUsage.java
diff --git a/samples/SupportDesignDemos/src/com/example/android/support/design/widget/NavigationViewUsage.java b/samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/NavigationViewUsage.java
similarity index 100%
rename from samples/SupportDesignDemos/src/com/example/android/support/design/widget/NavigationViewUsage.java
rename to samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/NavigationViewUsage.java
diff --git a/samples/SupportDesignDemos/src/com/example/android/support/design/widget/NavigationViewUsageBase.java b/samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/NavigationViewUsageBase.java
similarity index 100%
rename from samples/SupportDesignDemos/src/com/example/android/support/design/widget/NavigationViewUsageBase.java
rename to samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/NavigationViewUsageBase.java
diff --git a/samples/SupportDesignDemos/src/com/example/android/support/design/widget/NavigationViewWithoutDrawer.java b/samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/NavigationViewWithoutDrawer.java
similarity index 100%
rename from samples/SupportDesignDemos/src/com/example/android/support/design/widget/NavigationViewWithoutDrawer.java
rename to samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/NavigationViewWithoutDrawer.java
diff --git a/samples/SupportDesignDemos/src/com/example/android/support/design/widget/SimpleStringRecyclerViewAdapter.java b/samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/SimpleStringRecyclerViewAdapter.java
similarity index 100%
rename from samples/SupportDesignDemos/src/com/example/android/support/design/widget/SimpleStringRecyclerViewAdapter.java
rename to samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/SimpleStringRecyclerViewAdapter.java
diff --git a/samples/SupportDesignDemos/src/com/example/android/support/design/widget/SnackbarUsage.java b/samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/SnackbarUsage.java
similarity index 100%
rename from samples/SupportDesignDemos/src/com/example/android/support/design/widget/SnackbarUsage.java
rename to samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/SnackbarUsage.java
diff --git a/samples/SupportDesignDemos/src/com/example/android/support/design/widget/SnackbarWithFloatingActionButton.java b/samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/SnackbarWithFloatingActionButton.java
similarity index 100%
rename from samples/SupportDesignDemos/src/com/example/android/support/design/widget/SnackbarWithFloatingActionButton.java
rename to samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/SnackbarWithFloatingActionButton.java
diff --git a/samples/SupportDesignDemos/src/com/example/android/support/design/widget/SnackbarWithoutCoordinatorLayout.java b/samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/SnackbarWithoutCoordinatorLayout.java
similarity index 100%
rename from samples/SupportDesignDemos/src/com/example/android/support/design/widget/SnackbarWithoutCoordinatorLayout.java
rename to samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/SnackbarWithoutCoordinatorLayout.java
diff --git a/samples/SupportDesignDemos/src/com/example/android/support/design/widget/TabLayoutCustomItemsUsage.java b/samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/TabLayoutCustomItemsUsage.java
similarity index 100%
rename from samples/SupportDesignDemos/src/com/example/android/support/design/widget/TabLayoutCustomItemsUsage.java
rename to samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/TabLayoutCustomItemsUsage.java
diff --git a/samples/SupportDesignDemos/src/com/example/android/support/design/widget/TabLayoutLayoutItemsUsage.java b/samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/TabLayoutLayoutItemsUsage.java
similarity index 100%
rename from samples/SupportDesignDemos/src/com/example/android/support/design/widget/TabLayoutLayoutItemsUsage.java
rename to samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/TabLayoutLayoutItemsUsage.java
diff --git a/samples/SupportDesignDemos/src/com/example/android/support/design/widget/TabLayoutPreselectedUsage.java b/samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/TabLayoutPreselectedUsage.java
similarity index 100%
rename from samples/SupportDesignDemos/src/com/example/android/support/design/widget/TabLayoutPreselectedUsage.java
rename to samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/TabLayoutPreselectedUsage.java
diff --git a/samples/SupportDesignDemos/src/com/example/android/support/design/widget/TabLayoutUsage.java b/samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/TabLayoutUsage.java
similarity index 100%
rename from samples/SupportDesignDemos/src/com/example/android/support/design/widget/TabLayoutUsage.java
rename to samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/TabLayoutUsage.java
diff --git a/samples/SupportDesignDemos/src/com/example/android/support/design/widget/TextInputLayoutUsage.java b/samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/TextInputLayoutUsage.java
similarity index 100%
rename from samples/SupportDesignDemos/src/com/example/android/support/design/widget/TextInputLayoutUsage.java
rename to samples/SupportDesignDemos/src/main/java/com/example/android/support/design/widget/TextInputLayoutUsage.java
diff --git a/samples/SupportDesignDemos/res/drawable-hdpi/app_sample_code.png b/samples/SupportDesignDemos/src/main/res/drawable-hdpi/app_sample_code.png
similarity index 100%
rename from samples/SupportDesignDemos/res/drawable-hdpi/app_sample_code.png
rename to samples/SupportDesignDemos/src/main/res/drawable-hdpi/app_sample_code.png
Binary files differ
diff --git a/samples/SupportDesignDemos/res/drawable-hdpi/ic_account_circle_white_48dp.png b/samples/SupportDesignDemos/src/main/res/drawable-hdpi/ic_account_circle_white_48dp.png
similarity index 100%
rename from samples/SupportDesignDemos/res/drawable-hdpi/ic_account_circle_white_48dp.png
rename to samples/SupportDesignDemos/src/main/res/drawable-hdpi/ic_account_circle_white_48dp.png
Binary files differ
diff --git a/samples/SupportDesignDemos/res/drawable-hdpi/ic_action_navigation_menu.png b/samples/SupportDesignDemos/src/main/res/drawable-hdpi/ic_action_navigation_menu.png
similarity index 100%
rename from samples/SupportDesignDemos/res/drawable-hdpi/ic_action_navigation_menu.png
rename to samples/SupportDesignDemos/src/main/res/drawable-hdpi/ic_action_navigation_menu.png
Binary files differ
diff --git a/samples/SupportDesignDemos/res/drawable-hdpi/ic_android.png b/samples/SupportDesignDemos/src/main/res/drawable-hdpi/ic_android.png
similarity index 100%
rename from samples/SupportDesignDemos/res/drawable-hdpi/ic_android.png
rename to samples/SupportDesignDemos/src/main/res/drawable-hdpi/ic_android.png
Binary files differ
diff --git a/samples/SupportDesignDemos/res/drawable-hdpi/ic_lightbulb_outline_white_24dp.png b/samples/SupportDesignDemos/src/main/res/drawable-hdpi/ic_lightbulb_outline_white_24dp.png
similarity index 100%
rename from samples/SupportDesignDemos/res/drawable-hdpi/ic_lightbulb_outline_white_24dp.png
rename to samples/SupportDesignDemos/src/main/res/drawable-hdpi/ic_lightbulb_outline_white_24dp.png
Binary files differ
diff --git a/samples/SupportDesignDemos/res/drawable-mdpi/app_sample_code.png b/samples/SupportDesignDemos/src/main/res/drawable-mdpi/app_sample_code.png
similarity index 100%
rename from samples/SupportDesignDemos/res/drawable-mdpi/app_sample_code.png
rename to samples/SupportDesignDemos/src/main/res/drawable-mdpi/app_sample_code.png
Binary files differ
diff --git a/samples/SupportDesignDemos/res/drawable-mdpi/ic_account_circle_white_48dp.png b/samples/SupportDesignDemos/src/main/res/drawable-mdpi/ic_account_circle_white_48dp.png
similarity index 100%
rename from samples/SupportDesignDemos/res/drawable-mdpi/ic_account_circle_white_48dp.png
rename to samples/SupportDesignDemos/src/main/res/drawable-mdpi/ic_account_circle_white_48dp.png
Binary files differ
diff --git a/samples/SupportDesignDemos/res/drawable-mdpi/ic_action_navigation_menu.png b/samples/SupportDesignDemos/src/main/res/drawable-mdpi/ic_action_navigation_menu.png
similarity index 100%
rename from samples/SupportDesignDemos/res/drawable-mdpi/ic_action_navigation_menu.png
rename to samples/SupportDesignDemos/src/main/res/drawable-mdpi/ic_action_navigation_menu.png
Binary files differ
diff --git a/samples/SupportDesignDemos/res/drawable-mdpi/ic_android.png b/samples/SupportDesignDemos/src/main/res/drawable-mdpi/ic_android.png
similarity index 100%
rename from samples/SupportDesignDemos/res/drawable-mdpi/ic_android.png
rename to samples/SupportDesignDemos/src/main/res/drawable-mdpi/ic_android.png
Binary files differ
diff --git a/samples/SupportDesignDemos/res/drawable-mdpi/ic_lightbulb_outline_white_24dp.png b/samples/SupportDesignDemos/src/main/res/drawable-mdpi/ic_lightbulb_outline_white_24dp.png
similarity index 100%
rename from samples/SupportDesignDemos/res/drawable-mdpi/ic_lightbulb_outline_white_24dp.png
rename to samples/SupportDesignDemos/src/main/res/drawable-mdpi/ic_lightbulb_outline_white_24dp.png
Binary files differ
diff --git a/samples/SupportDesignDemos/res/drawable-nodpi/photo.jpg b/samples/SupportDesignDemos/src/main/res/drawable-nodpi/photo.jpg
similarity index 100%
rename from samples/SupportDesignDemos/res/drawable-nodpi/photo.jpg
rename to samples/SupportDesignDemos/src/main/res/drawable-nodpi/photo.jpg
Binary files differ
diff --git a/samples/SupportDesignDemos/res/drawable-xhdpi/ic_account_circle_white_48dp.png b/samples/SupportDesignDemos/src/main/res/drawable-xhdpi/ic_account_circle_white_48dp.png
similarity index 100%
rename from samples/SupportDesignDemos/res/drawable-xhdpi/ic_account_circle_white_48dp.png
rename to samples/SupportDesignDemos/src/main/res/drawable-xhdpi/ic_account_circle_white_48dp.png
Binary files differ
diff --git a/samples/SupportDesignDemos/res/drawable-xhdpi/ic_action_navigation_menu.png b/samples/SupportDesignDemos/src/main/res/drawable-xhdpi/ic_action_navigation_menu.png
similarity index 100%
rename from samples/SupportDesignDemos/res/drawable-xhdpi/ic_action_navigation_menu.png
rename to samples/SupportDesignDemos/src/main/res/drawable-xhdpi/ic_action_navigation_menu.png
Binary files differ
diff --git a/samples/SupportDesignDemos/res/drawable-xhdpi/ic_android.png b/samples/SupportDesignDemos/src/main/res/drawable-xhdpi/ic_android.png
similarity index 100%
rename from samples/SupportDesignDemos/res/drawable-xhdpi/ic_android.png
rename to samples/SupportDesignDemos/src/main/res/drawable-xhdpi/ic_android.png
Binary files differ
diff --git a/samples/SupportDesignDemos/res/drawable-xhdpi/ic_lightbulb_outline_white_24dp.png b/samples/SupportDesignDemos/src/main/res/drawable-xhdpi/ic_lightbulb_outline_white_24dp.png
similarity index 100%
rename from samples/SupportDesignDemos/res/drawable-xhdpi/ic_lightbulb_outline_white_24dp.png
rename to samples/SupportDesignDemos/src/main/res/drawable-xhdpi/ic_lightbulb_outline_white_24dp.png
Binary files differ
diff --git a/samples/SupportDesignDemos/res/drawable-xxhdpi/ic_account_circle_white_48dp.png b/samples/SupportDesignDemos/src/main/res/drawable-xxhdpi/ic_account_circle_white_48dp.png
similarity index 100%
rename from samples/SupportDesignDemos/res/drawable-xxhdpi/ic_account_circle_white_48dp.png
rename to samples/SupportDesignDemos/src/main/res/drawable-xxhdpi/ic_account_circle_white_48dp.png
Binary files differ
diff --git a/samples/SupportDesignDemos/res/drawable-xxhdpi/ic_action_navigation_menu.png b/samples/SupportDesignDemos/src/main/res/drawable-xxhdpi/ic_action_navigation_menu.png
similarity index 100%
rename from samples/SupportDesignDemos/res/drawable-xxhdpi/ic_action_navigation_menu.png
rename to samples/SupportDesignDemos/src/main/res/drawable-xxhdpi/ic_action_navigation_menu.png
Binary files differ
diff --git a/samples/SupportDesignDemos/res/drawable-xxhdpi/ic_add.png b/samples/SupportDesignDemos/src/main/res/drawable-xxhdpi/ic_add.png
similarity index 100%
rename from samples/SupportDesignDemos/res/drawable-xxhdpi/ic_add.png
rename to samples/SupportDesignDemos/src/main/res/drawable-xxhdpi/ic_add.png
Binary files differ
diff --git a/samples/SupportDesignDemos/res/drawable-xxhdpi/ic_android.png b/samples/SupportDesignDemos/src/main/res/drawable-xxhdpi/ic_android.png
similarity index 100%
rename from samples/SupportDesignDemos/res/drawable-xxhdpi/ic_android.png
rename to samples/SupportDesignDemos/src/main/res/drawable-xxhdpi/ic_android.png
Binary files differ
diff --git a/samples/SupportDesignDemos/res/drawable-xxhdpi/ic_lightbulb_outline_white_24dp.png b/samples/SupportDesignDemos/src/main/res/drawable-xxhdpi/ic_lightbulb_outline_white_24dp.png
similarity index 100%
rename from samples/SupportDesignDemos/res/drawable-xxhdpi/ic_lightbulb_outline_white_24dp.png
rename to samples/SupportDesignDemos/src/main/res/drawable-xxhdpi/ic_lightbulb_outline_white_24dp.png
Binary files differ
diff --git a/samples/SupportDesignDemos/res/drawable-xxxhdpi/ic_account_circle_white_48dp.png b/samples/SupportDesignDemos/src/main/res/drawable-xxxhdpi/ic_account_circle_white_48dp.png
similarity index 100%
rename from samples/SupportDesignDemos/res/drawable-xxxhdpi/ic_account_circle_white_48dp.png
rename to samples/SupportDesignDemos/src/main/res/drawable-xxxhdpi/ic_account_circle_white_48dp.png
Binary files differ
diff --git a/samples/SupportDesignDemos/res/drawable-xxxhdpi/ic_android.png b/samples/SupportDesignDemos/src/main/res/drawable-xxxhdpi/ic_android.png
similarity index 100%
rename from samples/SupportDesignDemos/res/drawable-xxxhdpi/ic_android.png
rename to samples/SupportDesignDemos/src/main/res/drawable-xxxhdpi/ic_android.png
Binary files differ
diff --git a/samples/SupportDesignDemos/res/drawable-xxxhdpi/ic_lightbulb_outline_white_24dp.png b/samples/SupportDesignDemos/src/main/res/drawable-xxxhdpi/ic_lightbulb_outline_white_24dp.png
similarity index 100%
rename from samples/SupportDesignDemos/res/drawable-xxxhdpi/ic_lightbulb_outline_white_24dp.png
rename to samples/SupportDesignDemos/src/main/res/drawable-xxxhdpi/ic_lightbulb_outline_white_24dp.png
Binary files differ
diff --git a/samples/SupportDesignDemos/res/drawable/custom_tab_indicator.xml b/samples/SupportDesignDemos/src/main/res/drawable/custom_tab_indicator.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/drawable/custom_tab_indicator.xml
rename to samples/SupportDesignDemos/src/main/res/drawable/custom_tab_indicator.xml
diff --git a/samples/SupportDesignDemos/res/drawable/custom_tab_indicator_default.xml b/samples/SupportDesignDemos/src/main/res/drawable/custom_tab_indicator_default.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/drawable/custom_tab_indicator_default.xml
rename to samples/SupportDesignDemos/src/main/res/drawable/custom_tab_indicator_default.xml
diff --git a/samples/SupportDesignDemos/res/drawable/custom_tab_indicator_selected.xml b/samples/SupportDesignDemos/src/main/res/drawable/custom_tab_indicator_selected.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/drawable/custom_tab_indicator_selected.xml
rename to samples/SupportDesignDemos/src/main/res/drawable/custom_tab_indicator_selected.xml
diff --git a/samples/SupportDesignDemos/res/drawable/ic_search.xml b/samples/SupportDesignDemos/src/main/res/drawable/ic_search.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/drawable/ic_search.xml
rename to samples/SupportDesignDemos/src/main/res/drawable/ic_search.xml
diff --git a/samples/SupportDesignDemos/res/layout/action_layout.xml b/samples/SupportDesignDemos/src/main/res/layout/action_layout.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/layout/action_layout.xml
rename to samples/SupportDesignDemos/src/main/res/layout/action_layout.xml
diff --git a/samples/SupportDesignDemos/res/layout/action_layout_custom.xml b/samples/SupportDesignDemos/src/main/res/layout/action_layout_custom.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/layout/action_layout_custom.xml
rename to samples/SupportDesignDemos/src/main/res/layout/action_layout_custom.xml
diff --git a/samples/SupportDesignDemos/res/layout/custom_snackbar_include.xml b/samples/SupportDesignDemos/src/main/res/layout/custom_snackbar_include.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/layout/custom_snackbar_include.xml
rename to samples/SupportDesignDemos/src/main/res/layout/custom_snackbar_include.xml
diff --git a/samples/SupportDesignDemos/res/layout/custom_snackbar_with_fab.xml b/samples/SupportDesignDemos/src/main/res/layout/custom_snackbar_with_fab.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/layout/custom_snackbar_with_fab.xml
rename to samples/SupportDesignDemos/src/main/res/layout/custom_snackbar_with_fab.xml
diff --git a/samples/SupportDesignDemos/res/layout/design_appbar_toolbar_collapse_pin.xml b/samples/SupportDesignDemos/src/main/res/layout/design_appbar_toolbar_collapse_pin.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/layout/design_appbar_toolbar_collapse_pin.xml
rename to samples/SupportDesignDemos/src/main/res/layout/design_appbar_toolbar_collapse_pin.xml
diff --git a/samples/SupportDesignDemos/res/layout/design_appbar_toolbar_collapse_pin_nested.xml b/samples/SupportDesignDemos/src/main/res/layout/design_appbar_toolbar_collapse_pin_nested.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/layout/design_appbar_toolbar_collapse_pin_nested.xml
rename to samples/SupportDesignDemos/src/main/res/layout/design_appbar_toolbar_collapse_pin_nested.xml
diff --git a/samples/SupportDesignDemos/res/layout/design_appbar_toolbar_collapse_pin_with_fab.xml b/samples/SupportDesignDemos/src/main/res/layout/design_appbar_toolbar_collapse_pin_with_fab.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/layout/design_appbar_toolbar_collapse_pin_with_fab.xml
rename to samples/SupportDesignDemos/src/main/res/layout/design_appbar_toolbar_collapse_pin_with_fab.xml
diff --git a/samples/SupportDesignDemos/res/layout/design_appbar_toolbar_collapse_scroll.xml b/samples/SupportDesignDemos/src/main/res/layout/design_appbar_toolbar_collapse_scroll.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/layout/design_appbar_toolbar_collapse_scroll.xml
rename to samples/SupportDesignDemos/src/main/res/layout/design_appbar_toolbar_collapse_scroll.xml
diff --git a/samples/SupportDesignDemos/res/layout/design_appbar_toolbar_collapse_scroll_with_swiperefresh.xml b/samples/SupportDesignDemos/src/main/res/layout/design_appbar_toolbar_collapse_scroll_with_swiperefresh.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/layout/design_appbar_toolbar_collapse_scroll_with_swiperefresh.xml
rename to samples/SupportDesignDemos/src/main/res/layout/design_appbar_toolbar_collapse_scroll_with_swiperefresh.xml
diff --git a/samples/SupportDesignDemos/res/layout/design_appbar_toolbar_collapse_with_image.xml b/samples/SupportDesignDemos/src/main/res/layout/design_appbar_toolbar_collapse_with_image.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/layout/design_appbar_toolbar_collapse_with_image.xml
rename to samples/SupportDesignDemos/src/main/res/layout/design_appbar_toolbar_collapse_with_image.xml
diff --git a/samples/SupportDesignDemos/res/layout/design_appbar_toolbar_collapse_with_image_insets.xml b/samples/SupportDesignDemos/src/main/res/layout/design_appbar_toolbar_collapse_with_image_insets.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/layout/design_appbar_toolbar_collapse_with_image_insets.xml
rename to samples/SupportDesignDemos/src/main/res/layout/design_appbar_toolbar_collapse_with_image_insets.xml
diff --git a/samples/SupportDesignDemos/res/layout/design_appbar_toolbar_parallax_overlap.xml b/samples/SupportDesignDemos/src/main/res/layout/design_appbar_toolbar_parallax_overlap.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/layout/design_appbar_toolbar_parallax_overlap.xml
rename to samples/SupportDesignDemos/src/main/res/layout/design_appbar_toolbar_parallax_overlap.xml
diff --git a/samples/SupportDesignDemos/res/layout/design_appbar_toolbar_scroll_tabs_pinned.xml b/samples/SupportDesignDemos/src/main/res/layout/design_appbar_toolbar_scroll_tabs_pinned.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/layout/design_appbar_toolbar_scroll_tabs_pinned.xml
rename to samples/SupportDesignDemos/src/main/res/layout/design_appbar_toolbar_scroll_tabs_pinned.xml
diff --git a/samples/SupportDesignDemos/res/layout/design_appbar_toolbar_scroll_tabs_pinned_with_swiperefres.xml b/samples/SupportDesignDemos/src/main/res/layout/design_appbar_toolbar_scroll_tabs_pinned_with_swiperefres.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/layout/design_appbar_toolbar_scroll_tabs_pinned_with_swiperefres.xml
rename to samples/SupportDesignDemos/src/main/res/layout/design_appbar_toolbar_scroll_tabs_pinned_with_swiperefres.xml
diff --git a/samples/SupportDesignDemos/res/layout/design_appbar_toolbar_scroll_tabs_scroll.xml b/samples/SupportDesignDemos/src/main/res/layout/design_appbar_toolbar_scroll_tabs_scroll.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/layout/design_appbar_toolbar_scroll_tabs_scroll.xml
rename to samples/SupportDesignDemos/src/main/res/layout/design_appbar_toolbar_scroll_tabs_scroll.xml
diff --git a/samples/SupportDesignDemos/res/layout/design_appbar_toolbar_scroll_tabs_scroll_snap.xml b/samples/SupportDesignDemos/src/main/res/layout/design_appbar_toolbar_scroll_tabs_scroll_snap.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/layout/design_appbar_toolbar_scroll_tabs_scroll_snap.xml
rename to samples/SupportDesignDemos/src/main/res/layout/design_appbar_toolbar_scroll_tabs_scroll_snap.xml
diff --git a/samples/SupportDesignDemos/res/layout/design_bottom_navigation_view.xml b/samples/SupportDesignDemos/src/main/res/layout/design_bottom_navigation_view.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/layout/design_bottom_navigation_view.xml
rename to samples/SupportDesignDemos/src/main/res/layout/design_bottom_navigation_view.xml
diff --git a/samples/SupportDesignDemos/res/layout/design_bottom_sheet_dynamic.xml b/samples/SupportDesignDemos/src/main/res/layout/design_bottom_sheet_dynamic.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/layout/design_bottom_sheet_dynamic.xml
rename to samples/SupportDesignDemos/src/main/res/layout/design_bottom_sheet_dynamic.xml
diff --git a/samples/SupportDesignDemos/res/layout/design_bottom_sheet_fragment.xml b/samples/SupportDesignDemos/src/main/res/layout/design_bottom_sheet_fragment.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/layout/design_bottom_sheet_fragment.xml
rename to samples/SupportDesignDemos/src/main/res/layout/design_bottom_sheet_fragment.xml
diff --git a/samples/SupportDesignDemos/res/layout/design_bottom_sheet_hideable.xml b/samples/SupportDesignDemos/src/main/res/layout/design_bottom_sheet_hideable.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/layout/design_bottom_sheet_hideable.xml
rename to samples/SupportDesignDemos/src/main/res/layout/design_bottom_sheet_hideable.xml
diff --git a/samples/SupportDesignDemos/res/layout/design_bottom_sheet_modal.xml b/samples/SupportDesignDemos/src/main/res/layout/design_bottom_sheet_modal.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/layout/design_bottom_sheet_modal.xml
rename to samples/SupportDesignDemos/src/main/res/layout/design_bottom_sheet_modal.xml
diff --git a/samples/SupportDesignDemos/res/layout/design_bottom_sheet_persistent.xml b/samples/SupportDesignDemos/src/main/res/layout/design_bottom_sheet_persistent.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/layout/design_bottom_sheet_persistent.xml
rename to samples/SupportDesignDemos/src/main/res/layout/design_bottom_sheet_persistent.xml
diff --git a/samples/SupportDesignDemos/res/layout/design_bottom_sheet_recyclerview.xml b/samples/SupportDesignDemos/src/main/res/layout/design_bottom_sheet_recyclerview.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/layout/design_bottom_sheet_recyclerview.xml
rename to samples/SupportDesignDemos/src/main/res/layout/design_bottom_sheet_recyclerview.xml
diff --git a/samples/SupportDesignDemos/res/layout/design_bottom_sheet_scroll.xml b/samples/SupportDesignDemos/src/main/res/layout/design_bottom_sheet_scroll.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/layout/design_bottom_sheet_scroll.xml
rename to samples/SupportDesignDemos/src/main/res/layout/design_bottom_sheet_scroll.xml
diff --git a/samples/SupportDesignDemos/res/layout/design_bottom_sheet_with_fab.xml b/samples/SupportDesignDemos/src/main/res/layout/design_bottom_sheet_with_fab.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/layout/design_bottom_sheet_with_fab.xml
rename to samples/SupportDesignDemos/src/main/res/layout/design_bottom_sheet_with_fab.xml
diff --git a/samples/SupportDesignDemos/res/layout/design_bottom_sheet_with_fragment.xml b/samples/SupportDesignDemos/src/main/res/layout/design_bottom_sheet_with_fragment.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/layout/design_bottom_sheet_with_fragment.xml
rename to samples/SupportDesignDemos/src/main/res/layout/design_bottom_sheet_with_fragment.xml
diff --git a/samples/SupportDesignDemos/res/layout/design_coordinatorlayout_inset.xml b/samples/SupportDesignDemos/src/main/res/layout/design_coordinatorlayout_inset.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/layout/design_coordinatorlayout_inset.xml
rename to samples/SupportDesignDemos/src/main/res/layout/design_coordinatorlayout_inset.xml
diff --git a/samples/SupportDesignDemos/res/layout/design_fab.xml b/samples/SupportDesignDemos/src/main/res/layout/design_fab.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/layout/design_fab.xml
rename to samples/SupportDesignDemos/src/main/res/layout/design_fab.xml
diff --git a/samples/SupportDesignDemos/res/layout/design_navigation.xml b/samples/SupportDesignDemos/src/main/res/layout/design_navigation.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/layout/design_navigation.xml
rename to samples/SupportDesignDemos/src/main/res/layout/design_navigation.xml
diff --git a/samples/SupportDesignDemos/res/layout/design_navigation_header.xml b/samples/SupportDesignDemos/src/main/res/layout/design_navigation_header.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/layout/design_navigation_header.xml
rename to samples/SupportDesignDemos/src/main/res/layout/design_navigation_header.xml
diff --git a/samples/SupportDesignDemos/res/layout/design_navigation_without_drawer.xml b/samples/SupportDesignDemos/src/main/res/layout/design_navigation_without_drawer.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/layout/design_navigation_without_drawer.xml
rename to samples/SupportDesignDemos/src/main/res/layout/design_navigation_without_drawer.xml
diff --git a/samples/SupportDesignDemos/res/layout/design_snackbar.xml b/samples/SupportDesignDemos/src/main/res/layout/design_snackbar.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/layout/design_snackbar.xml
rename to samples/SupportDesignDemos/src/main/res/layout/design_snackbar.xml
diff --git a/samples/SupportDesignDemos/res/layout/design_snackbar_with_fab.xml b/samples/SupportDesignDemos/src/main/res/layout/design_snackbar_with_fab.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/layout/design_snackbar_with_fab.xml
rename to samples/SupportDesignDemos/src/main/res/layout/design_snackbar_with_fab.xml
diff --git a/samples/SupportDesignDemos/res/layout/design_snackbar_without_col.xml b/samples/SupportDesignDemos/src/main/res/layout/design_snackbar_without_col.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/layout/design_snackbar_without_col.xml
rename to samples/SupportDesignDemos/src/main/res/layout/design_snackbar_without_col.xml
diff --git a/samples/SupportDesignDemos/res/layout/design_tab_custom.xml b/samples/SupportDesignDemos/src/main/res/layout/design_tab_custom.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/layout/design_tab_custom.xml
rename to samples/SupportDesignDemos/src/main/res/layout/design_tab_custom.xml
diff --git a/samples/SupportDesignDemos/res/layout/design_tabs_custom.xml b/samples/SupportDesignDemos/src/main/res/layout/design_tabs_custom.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/layout/design_tabs_custom.xml
rename to samples/SupportDesignDemos/src/main/res/layout/design_tabs_custom.xml
diff --git a/samples/SupportDesignDemos/res/layout/design_tabs_item.xml b/samples/SupportDesignDemos/src/main/res/layout/design_tabs_item.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/layout/design_tabs_item.xml
rename to samples/SupportDesignDemos/src/main/res/layout/design_tabs_item.xml
diff --git a/samples/SupportDesignDemos/res/layout/design_tabs_viewpager.xml b/samples/SupportDesignDemos/src/main/res/layout/design_tabs_viewpager.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/layout/design_tabs_viewpager.xml
rename to samples/SupportDesignDemos/src/main/res/layout/design_tabs_viewpager.xml
diff --git a/samples/SupportDesignDemos/res/layout/design_text_input.xml b/samples/SupportDesignDemos/src/main/res/layout/design_text_input.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/layout/design_text_input.xml
rename to samples/SupportDesignDemos/src/main/res/layout/design_text_input.xml
diff --git a/samples/SupportDesignDemos/res/layout/include_appbar_recyclerview.xml b/samples/SupportDesignDemos/src/main/res/layout/include_appbar_recyclerview.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/layout/include_appbar_recyclerview.xml
rename to samples/SupportDesignDemos/src/main/res/layout/include_appbar_recyclerview.xml
diff --git a/samples/SupportDesignDemos/res/layout/include_appbar_recyclerview_swiperefresh.xml b/samples/SupportDesignDemos/src/main/res/layout/include_appbar_recyclerview_swiperefresh.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/layout/include_appbar_recyclerview_swiperefresh.xml
rename to samples/SupportDesignDemos/src/main/res/layout/include_appbar_recyclerview_swiperefresh.xml
diff --git a/samples/SupportDesignDemos/res/layout/include_appbar_scrollview.xml b/samples/SupportDesignDemos/src/main/res/layout/include_appbar_scrollview.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/layout/include_appbar_scrollview.xml
rename to samples/SupportDesignDemos/src/main/res/layout/include_appbar_scrollview.xml
diff --git a/samples/SupportDesignDemos/res/layout/include_appbar_scrollview_with_image.xml b/samples/SupportDesignDemos/src/main/res/layout/include_appbar_scrollview_with_image.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/layout/include_appbar_scrollview_with_image.xml
rename to samples/SupportDesignDemos/src/main/res/layout/include_appbar_scrollview_with_image.xml
diff --git a/samples/SupportDesignDemos/res/layout/include_bottom_sheet.xml b/samples/SupportDesignDemos/src/main/res/layout/include_bottom_sheet.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/layout/include_bottom_sheet.xml
rename to samples/SupportDesignDemos/src/main/res/layout/include_bottom_sheet.xml
diff --git a/samples/SupportDesignDemos/res/menu/navigation.xml b/samples/SupportDesignDemos/src/main/res/menu/navigation.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/menu/navigation.xml
rename to samples/SupportDesignDemos/src/main/res/menu/navigation.xml
diff --git a/samples/SupportDesignDemos/res/menu/sample_actions.xml b/samples/SupportDesignDemos/src/main/res/menu/sample_actions.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/menu/sample_actions.xml
rename to samples/SupportDesignDemos/src/main/res/menu/sample_actions.xml
diff --git a/samples/SupportDesignDemos/res/menu/sample_bottom_menu.xml b/samples/SupportDesignDemos/src/main/res/menu/sample_bottom_menu.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/menu/sample_bottom_menu.xml
rename to samples/SupportDesignDemos/src/main/res/menu/sample_bottom_menu.xml
diff --git a/samples/SupportDesignDemos/res/values-sw600dp/dimens.xml b/samples/SupportDesignDemos/src/main/res/values-sw600dp/dimens.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/values-sw600dp/dimens.xml
rename to samples/SupportDesignDemos/src/main/res/values-sw600dp/dimens.xml
diff --git a/samples/SupportDesignDemos/res/values-v21/styles.xml b/samples/SupportDesignDemos/src/main/res/values-v21/styles.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/values-v21/styles.xml
rename to samples/SupportDesignDemos/src/main/res/values-v21/styles.xml
diff --git a/samples/SupportDesignDemos/res/values-w540dp/dimens.xml b/samples/SupportDesignDemos/src/main/res/values-w540dp/dimens.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/values-w540dp/dimens.xml
rename to samples/SupportDesignDemos/src/main/res/values-w540dp/dimens.xml
diff --git a/samples/SupportDesignDemos/res/values/dimens.xml b/samples/SupportDesignDemos/src/main/res/values/dimens.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/values/dimens.xml
rename to samples/SupportDesignDemos/src/main/res/values/dimens.xml
diff --git a/samples/SupportDesignDemos/res/values/strings.xml b/samples/SupportDesignDemos/src/main/res/values/strings.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/values/strings.xml
rename to samples/SupportDesignDemos/src/main/res/values/strings.xml
diff --git a/samples/SupportDesignDemos/res/values/styles.xml b/samples/SupportDesignDemos/src/main/res/values/styles.xml
similarity index 100%
rename from samples/SupportDesignDemos/res/values/styles.xml
rename to samples/SupportDesignDemos/src/main/res/values/styles.xml
diff --git a/samples/SupportEmojiDemos/build.gradle b/samples/SupportEmojiDemos/build.gradle
index 70b2909..abc8328 100644
--- a/samples/SupportEmojiDemos/build.gradle
+++ b/samples/SupportEmojiDemos/build.gradle
@@ -35,9 +35,6 @@
}
sourceSets {
- main.manifest.srcFile 'AndroidManifest.xml'
- main.java.srcDirs = ['src']
- main.res.srcDirs = ['res']
main.assets.srcDirs = [new File(fontDir, "supported-emojis").getAbsolutePath()]
}
diff --git a/samples/SupportEmojiDemos/AndroidManifest.xml b/samples/SupportEmojiDemos/src/main/AndroidManifest.xml
similarity index 100%
rename from samples/SupportEmojiDemos/AndroidManifest.xml
rename to samples/SupportEmojiDemos/src/main/AndroidManifest.xml
diff --git a/samples/SupportEmojiDemos/src/com/example/android/support/text/emoji/Config.java b/samples/SupportEmojiDemos/src/main/java/com/example/android/support/text/emoji/Config.java
similarity index 100%
rename from samples/SupportEmojiDemos/src/com/example/android/support/text/emoji/Config.java
rename to samples/SupportEmojiDemos/src/main/java/com/example/android/support/text/emoji/Config.java
diff --git a/samples/SupportEmojiDemos/src/com/example/android/support/text/emoji/ConfigLayout.java b/samples/SupportEmojiDemos/src/main/java/com/example/android/support/text/emoji/ConfigLayout.java
similarity index 100%
rename from samples/SupportEmojiDemos/src/com/example/android/support/text/emoji/ConfigLayout.java
rename to samples/SupportEmojiDemos/src/main/java/com/example/android/support/text/emoji/ConfigLayout.java
diff --git a/samples/SupportEmojiDemos/src/com/example/android/support/text/emoji/CustomTextView.java b/samples/SupportEmojiDemos/src/main/java/com/example/android/support/text/emoji/CustomTextView.java
similarity index 100%
rename from samples/SupportEmojiDemos/src/com/example/android/support/text/emoji/CustomTextView.java
rename to samples/SupportEmojiDemos/src/main/java/com/example/android/support/text/emoji/CustomTextView.java
diff --git a/samples/SupportEmojiDemos/src/com/example/android/support/text/emoji/EmojiCompatApplication.java b/samples/SupportEmojiDemos/src/main/java/com/example/android/support/text/emoji/EmojiCompatApplication.java
similarity index 100%
rename from samples/SupportEmojiDemos/src/com/example/android/support/text/emoji/EmojiCompatApplication.java
rename to samples/SupportEmojiDemos/src/main/java/com/example/android/support/text/emoji/EmojiCompatApplication.java
diff --git a/samples/SupportEmojiDemos/src/com/example/android/support/text/emoji/EmojiRepo.java b/samples/SupportEmojiDemos/src/main/java/com/example/android/support/text/emoji/EmojiRepo.java
similarity index 100%
rename from samples/SupportEmojiDemos/src/com/example/android/support/text/emoji/EmojiRepo.java
rename to samples/SupportEmojiDemos/src/main/java/com/example/android/support/text/emoji/EmojiRepo.java
diff --git a/samples/SupportEmojiDemos/src/com/example/android/support/text/emoji/ListFragment.java b/samples/SupportEmojiDemos/src/main/java/com/example/android/support/text/emoji/ListFragment.java
similarity index 100%
rename from samples/SupportEmojiDemos/src/com/example/android/support/text/emoji/ListFragment.java
rename to samples/SupportEmojiDemos/src/main/java/com/example/android/support/text/emoji/ListFragment.java
diff --git a/samples/SupportEmojiDemos/src/com/example/android/support/text/emoji/MainActivity.java b/samples/SupportEmojiDemos/src/main/java/com/example/android/support/text/emoji/MainActivity.java
similarity index 100%
rename from samples/SupportEmojiDemos/src/com/example/android/support/text/emoji/MainActivity.java
rename to samples/SupportEmojiDemos/src/main/java/com/example/android/support/text/emoji/MainActivity.java
diff --git a/samples/SupportEmojiDemos/src/com/example/android/support/text/emoji/MainFragment.java b/samples/SupportEmojiDemos/src/main/java/com/example/android/support/text/emoji/MainFragment.java
similarity index 100%
rename from samples/SupportEmojiDemos/src/com/example/android/support/text/emoji/MainFragment.java
rename to samples/SupportEmojiDemos/src/main/java/com/example/android/support/text/emoji/MainFragment.java
diff --git a/samples/SupportEmojiDemos/res/layout/activity_main.xml b/samples/SupportEmojiDemos/src/main/res/layout/activity_main.xml
similarity index 100%
rename from samples/SupportEmojiDemos/res/layout/activity_main.xml
rename to samples/SupportEmojiDemos/src/main/res/layout/activity_main.xml
diff --git a/samples/SupportEmojiDemos/res/layout/fragment_list.xml b/samples/SupportEmojiDemos/src/main/res/layout/fragment_list.xml
similarity index 100%
rename from samples/SupportEmojiDemos/res/layout/fragment_list.xml
rename to samples/SupportEmojiDemos/src/main/res/layout/fragment_list.xml
diff --git a/samples/SupportEmojiDemos/res/layout/fragment_main.xml b/samples/SupportEmojiDemos/src/main/res/layout/fragment_main.xml
similarity index 100%
rename from samples/SupportEmojiDemos/res/layout/fragment_main.xml
rename to samples/SupportEmojiDemos/src/main/res/layout/fragment_main.xml
diff --git a/samples/SupportEmojiDemos/res/layout/layout_config.xml b/samples/SupportEmojiDemos/src/main/res/layout/layout_config.xml
similarity index 100%
rename from samples/SupportEmojiDemos/res/layout/layout_config.xml
rename to samples/SupportEmojiDemos/src/main/res/layout/layout_config.xml
diff --git a/samples/SupportEmojiDemos/res/layout/list_item_emoji.xml b/samples/SupportEmojiDemos/src/main/res/layout/list_item_emoji.xml
similarity index 100%
rename from samples/SupportEmojiDemos/res/layout/list_item_emoji.xml
rename to samples/SupportEmojiDemos/src/main/res/layout/list_item_emoji.xml
diff --git a/samples/SupportEmojiDemos/res/mipmap-hdpi/ic_launcher.png b/samples/SupportEmojiDemos/src/main/res/mipmap-hdpi/ic_launcher.png
similarity index 100%
rename from samples/SupportEmojiDemos/res/mipmap-hdpi/ic_launcher.png
rename to samples/SupportEmojiDemos/src/main/res/mipmap-hdpi/ic_launcher.png
Binary files differ
diff --git a/samples/SupportEmojiDemos/res/mipmap-mdpi/ic_launcher.png b/samples/SupportEmojiDemos/src/main/res/mipmap-mdpi/ic_launcher.png
similarity index 100%
rename from samples/SupportEmojiDemos/res/mipmap-mdpi/ic_launcher.png
rename to samples/SupportEmojiDemos/src/main/res/mipmap-mdpi/ic_launcher.png
Binary files differ
diff --git a/samples/SupportEmojiDemos/res/mipmap-xhdpi/ic_launcher.png b/samples/SupportEmojiDemos/src/main/res/mipmap-xhdpi/ic_launcher.png
similarity index 100%
rename from samples/SupportEmojiDemos/res/mipmap-xhdpi/ic_launcher.png
rename to samples/SupportEmojiDemos/src/main/res/mipmap-xhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/SupportEmojiDemos/res/mipmap-xxhdpi/ic_launcher.png b/samples/SupportEmojiDemos/src/main/res/mipmap-xxhdpi/ic_launcher.png
similarity index 100%
rename from samples/SupportEmojiDemos/res/mipmap-xxhdpi/ic_launcher.png
rename to samples/SupportEmojiDemos/src/main/res/mipmap-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/SupportEmojiDemos/res/mipmap-xxxhdpi/ic_launcher.png b/samples/SupportEmojiDemos/src/main/res/mipmap-xxxhdpi/ic_launcher.png
similarity index 100%
rename from samples/SupportEmojiDemos/res/mipmap-xxxhdpi/ic_launcher.png
rename to samples/SupportEmojiDemos/src/main/res/mipmap-xxxhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/SupportEmojiDemos/res/values/colors.xml b/samples/SupportEmojiDemos/src/main/res/values/colors.xml
similarity index 100%
rename from samples/SupportEmojiDemos/res/values/colors.xml
rename to samples/SupportEmojiDemos/src/main/res/values/colors.xml
diff --git a/samples/SupportEmojiDemos/res/values/dimens.xml b/samples/SupportEmojiDemos/src/main/res/values/dimens.xml
similarity index 100%
rename from samples/SupportEmojiDemos/res/values/dimens.xml
rename to samples/SupportEmojiDemos/src/main/res/values/dimens.xml
diff --git a/samples/SupportEmojiDemos/res/values/font_certs.xml b/samples/SupportEmojiDemos/src/main/res/values/font_certs.xml
similarity index 100%
rename from samples/SupportEmojiDemos/res/values/font_certs.xml
rename to samples/SupportEmojiDemos/src/main/res/values/font_certs.xml
diff --git a/samples/SupportEmojiDemos/res/values/strings.xml b/samples/SupportEmojiDemos/src/main/res/values/strings.xml
similarity index 100%
rename from samples/SupportEmojiDemos/res/values/strings.xml
rename to samples/SupportEmojiDemos/src/main/res/values/strings.xml
diff --git a/samples/SupportEmojiDemos/res/values/styles.xml b/samples/SupportEmojiDemos/src/main/res/values/styles.xml
similarity index 100%
rename from samples/SupportEmojiDemos/res/values/styles.xml
rename to samples/SupportEmojiDemos/src/main/res/values/styles.xml
diff --git a/samples/SupportLeanbackDemos/build.gradle b/samples/SupportLeanbackDemos/build.gradle
index 025842b..61d0209 100644
--- a/samples/SupportLeanbackDemos/build.gradle
+++ b/samples/SupportLeanbackDemos/build.gradle
@@ -14,12 +14,6 @@
targetSdkVersion project.ext.currentSdk
}
- sourceSets {
- main.manifest.srcFile 'AndroidManifest.xml'
- main.java.srcDirs = ['src']
- main.res.srcDirs = ['res']
- }
-
signingConfigs {
debug {
// Use a local debug keystore to avoid build server issues.
diff --git a/samples/SupportLeanbackDemos/AndroidManifest.xml b/samples/SupportLeanbackDemos/src/main/AndroidManifest.xml
similarity index 100%
rename from samples/SupportLeanbackDemos/AndroidManifest.xml
rename to samples/SupportLeanbackDemos/src/main/AndroidManifest.xml
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/BackgroundHelper.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/BackgroundHelper.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/BackgroundHelper.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/BackgroundHelper.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseActivity.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/BrowseActivity.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseActivity.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/BrowseActivity.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseAnimationActivity.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/BrowseAnimationActivity.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseAnimationActivity.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/BrowseAnimationActivity.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseAnimationFragment.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/BrowseAnimationFragment.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseAnimationFragment.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/BrowseAnimationFragment.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseErrorActivity.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/BrowseErrorActivity.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseErrorActivity.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/BrowseErrorActivity.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseErrorSupportActivity.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/BrowseErrorSupportActivity.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseErrorSupportActivity.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/BrowseErrorSupportActivity.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseFragment.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/BrowseFragment.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseFragment.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/BrowseFragment.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseSupportActivity.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/BrowseSupportActivity.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseSupportActivity.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/BrowseSupportActivity.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseSupportFragment.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/BrowseSupportFragment.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseSupportFragment.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/BrowseSupportFragment.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/CardPresenter.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/CardPresenter.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/CardPresenter.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/CardPresenter.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/CustomTitleView.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/CustomTitleView.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/CustomTitleView.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/CustomTitleView.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/DetailsActivity.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/DetailsActivity.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/DetailsActivity.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/DetailsActivity.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/DetailsCustomTitleActivity.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/DetailsCustomTitleActivity.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/DetailsCustomTitleActivity.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/DetailsCustomTitleActivity.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/DetailsCustomTitleSupportActivity.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/DetailsCustomTitleSupportActivity.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/DetailsCustomTitleSupportActivity.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/DetailsCustomTitleSupportActivity.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/DetailsDescriptionPresenter.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/DetailsDescriptionPresenter.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/DetailsDescriptionPresenter.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/DetailsDescriptionPresenter.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/DetailsFragment.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/DetailsFragment.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/DetailsFragment.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/DetailsFragment.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/DetailsPresenterSelectionActivity.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/DetailsPresenterSelectionActivity.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/DetailsSupportActivity.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/DetailsSupportActivity.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/DetailsSupportActivity.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/DetailsSupportActivity.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/DetailsSupportFragment.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/DetailsSupportFragment.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/DetailsSupportFragment.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/DetailsSupportFragment.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/DetailsVideoActivity.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/DetailsVideoActivity.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/DetailsVideoActivity.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/DetailsVideoActivity.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/DetailsVideoSupportActivity.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/DetailsVideoSupportActivity.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/DetailsVideoSupportActivity.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/DetailsVideoSupportActivity.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/ErrorFragment.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/ErrorFragment.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/ErrorFragment.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/ErrorFragment.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/ErrorSupportFragment.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/ErrorSupportFragment.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/ErrorSupportFragment.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/ErrorSupportFragment.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/GuidedStepActivity.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/GuidedStepActivity.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/GuidedStepActivity.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/GuidedStepActivity.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/GuidedStepHalfScreenActivity.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/GuidedStepHalfScreenActivity.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/GuidedStepSupportActivity.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/GuidedStepSupportActivity.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/HorizontalGridTestActivity.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/HorizontalGridTestActivity.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/HorizontalGridTestActivity.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/HorizontalGridTestActivity.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/MainActivity.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/MainActivity.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/MainActivity.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/MainActivity.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/MediaSessionService.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/MediaSessionService.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/MediaSessionService.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/MediaSessionService.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/MovieData.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/MovieData.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/MovieData.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/MovieData.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/MusicExampleActivity.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/MusicExampleActivity.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/MusicExampleActivity.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/MusicExampleActivity.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/MusicItem.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/MusicItem.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/MusicItem.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/MusicItem.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/MusicPlayerFragment.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/MusicPlayerFragment.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/MusicPlayerFragment.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/MusicPlayerFragment.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/NewDetailsFragment.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/NewDetailsFragment.java
similarity index 97%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/NewDetailsFragment.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/NewDetailsFragment.java
index 6524243..0afe524 100644
--- a/samples/SupportLeanbackDemos/src/com/example/android/leanback/NewDetailsFragment.java
+++ b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/NewDetailsFragment.java
@@ -16,6 +16,7 @@
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
+import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
@@ -306,6 +307,10 @@
adapter.set(ACTION_BUY, mActionBuy);
break;
}
+ // one line text with icon
+ Drawable d = ResourcesCompat.getDrawable(context.getResources(),
+ R.drawable.ic_action_a, context.getTheme());
+ adapter.set(202, new Action(202, "Top", null, d));
dor.setActionsAdapter(adapter);
mRowsAdapter.add(0, dor);
setSelectedPosition(0, true);
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/NewDetailsSupportFragment.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java
similarity index 97%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/NewDetailsSupportFragment.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java
index f8570aa..6002cf3 100644
--- a/samples/SupportLeanbackDemos/src/com/example/android/leanback/NewDetailsSupportFragment.java
+++ b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java
@@ -19,6 +19,7 @@
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
+import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
@@ -309,6 +310,10 @@
adapter.set(ACTION_BUY, mActionBuy);
break;
}
+ // one line text with icon
+ Drawable d = ResourcesCompat.getDrawable(context.getResources(),
+ R.drawable.ic_action_a, context.getTheme());
+ adapter.set(202, new Action(202, "Top", null, d));
dor.setActionsAdapter(adapter);
mRowsAdapter.add(0, dor);
setSelectedPosition(0, true);
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/OnboardingActivity.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/OnboardingActivity.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/OnboardingActivity.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/OnboardingActivity.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/OnboardingDemoFragment.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/OnboardingDemoFragment.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/OnboardingDemoFragment.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/OnboardingDemoFragment.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/OnboardingDemoSupportFragment.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/OnboardingDemoSupportFragment.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/OnboardingSupportActivity.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/OnboardingSupportActivity.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/OnboardingSupportActivity.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/OnboardingSupportActivity.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/PhotoItem.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/PhotoItem.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/PhotoItem.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/PhotoItem.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackActivity.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/PlaybackActivity.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackActivity.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/PlaybackActivity.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackControlGlue.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/PlaybackControlGlue.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackControlGlue.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/PlaybackControlGlue.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackFragment.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/PlaybackFragment.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackFragment.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/PlaybackFragment.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackSeekAsyncDataProvider.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/PlaybackSeekAsyncDataProvider.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackSeekAsyncDataProvider.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/PlaybackSeekAsyncDataProvider.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackSeekDataProviderSample.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/PlaybackSeekDataProviderSample.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackSeekDataProviderSample.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/PlaybackSeekDataProviderSample.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackSeekDiskDataProvider.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/PlaybackSeekDiskDataProvider.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackSeekDiskDataProvider.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/PlaybackSeekDiskDataProvider.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackSupportActivity.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/PlaybackSupportActivity.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackSupportActivity.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/PlaybackSupportActivity.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackSupportFragment.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/PlaybackSupportFragment.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackSupportFragment.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/PlaybackSupportFragment.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackTransportControlActivity.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/PlaybackTransportControlActivity.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackTransportControlActivity.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/PlaybackTransportControlActivity.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackTransportControlFragment.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/PlaybackTransportControlFragment.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackTransportControlFragment.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/PlaybackTransportControlFragment.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackTransportControlGlueSample.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/PlaybackTransportControlGlueSample.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackTransportControlGlueSample.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/PlaybackTransportControlGlueSample.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackTransportControlSupportActivity.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/PlaybackTransportControlSupportActivity.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackTransportControlSupportActivity.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/PlaybackTransportControlSupportActivity.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackTransportControlSupportFragment.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/PlaybackTransportControlSupportFragment.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackTransportControlSupportFragment.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/PlaybackTransportControlSupportFragment.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/PlayerAdapter.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/PlayerAdapter.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/PlayerAdapter.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/PlayerAdapter.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/RowsActivity.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/RowsActivity.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/RowsActivity.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/RowsActivity.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/RowsFragment.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/RowsFragment.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/RowsFragment.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/RowsFragment.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/RowsSupportActivity.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/RowsSupportActivity.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/RowsSupportActivity.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/RowsSupportActivity.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/RowsSupportFragment.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/RowsSupportFragment.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/RowsSupportFragment.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/RowsSupportFragment.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/SampleVideoFragment.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/SampleVideoFragment.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/SampleVideoFragment.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/SampleVideoFragment.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/SampleVideoSupportFragment.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/SampleVideoSupportFragment.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/SampleVideoSupportFragment.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/SampleVideoSupportFragment.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/SearchActivity.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/SearchActivity.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/SearchActivity.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/SearchActivity.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/SearchDetailsActivity.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/SearchDetailsActivity.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/SearchDetailsActivity.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/SearchDetailsActivity.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/SearchDetailsSupportActivity.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/SearchDetailsSupportActivity.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/SearchDetailsSupportActivity.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/SearchDetailsSupportActivity.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/SearchFragment.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/SearchFragment.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/SearchFragment.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/SearchFragment.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/SearchSupportActivity.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/SearchSupportActivity.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/SearchSupportActivity.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/SearchSupportActivity.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/SearchSupportFragment.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/SearchSupportFragment.java
similarity index 88%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/SearchSupportFragment.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/SearchSupportFragment.java
index b4e9b69..b638344 100644
--- a/samples/SupportLeanbackDemos/src/com/example/android/leanback/SearchSupportFragment.java
+++ b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/SearchSupportFragment.java
@@ -73,11 +73,13 @@
diff.putLong(IMAGE, newItem.getImageResourceId());
}
- if (!oldItem.getTitle().equals(newItem.getTitle())) {
+ if (oldItem.getTitle() != null && newItem.getTitle() != null
+ && !oldItem.getTitle().equals(newItem.getTitle())) {
diff.putString(TITLE, newItem.getTitle());
}
- if (!oldItem.getContent().equals(newItem.getContent())) {
+ if (oldItem.getContent() != null && newItem.getContent() != null
+ && !oldItem.getContent().equals(newItem.getContent())) {
diff.putString(CONTENT, newItem.getContent());
}
return diff;
@@ -138,11 +140,11 @@
if (mFirstRowAdapter == null) {
mFirstRowAdapter = createFirstListRowAdapter();
} else {
- mFirstRowAdapter.setItems(createDataSetOne(), mDiffCallback);
+ mFirstRowAdapter.setItems(createDataSetOneDebug(), mDiffCallback);
}
mIsDataSetOnePresented = true;
} else {
- mFirstRowAdapter.setItems(createDataSetTwo(), mDiffCallback);
+ mFirstRowAdapter.setItems(createDataSetTwoDebug(), mDiffCallback);
mIsDataSetOnePresented = false;
}
mRowsAdapter.add(new ListRow(header, mFirstRowAdapter));
@@ -180,7 +182,7 @@
private ArrayObjectAdapter createFirstListRowAdapter() {
ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(new CardPresenter());
- listRowAdapter.setItems(createDataSetOne(), mDiffCallback);
+ listRowAdapter.setItems(createDataSetOneDebug(), mDiffCallback);
mIsDataSetOnePresented = true;
return listRowAdapter;
}
@@ -322,4 +324,31 @@
return photoItems;
}
+
+ private ArrayList<PhotoItem> createDataSetOneDebug() {
+ ArrayList<PhotoItem> photoItems = new ArrayList<>();
+ photoItems.add(new PhotoItem(
+ "Hello world",
+ R.drawable.gallery_photo_1,
+ 1));
+ return photoItems;
+ }
+
+ /**
+ * Create a new data set (data set one) for the last row of this browse fragment. It will be
+ * changed by another set of data when user click one of the photo items in the list.
+ * Different with other rows in the browsing fragment, the photo item in last row all have been
+ * allocated with a unique id. And the id will be used to jduge if two photo items are the same
+ * or not.
+ *
+ * @return List of photoItem
+ */
+ private ArrayList<PhotoItem> createDataSetTwoDebug() {
+ ArrayList<PhotoItem> photoItems = new ArrayList<>();
+ photoItems.add(new PhotoItem(
+ "Hello world Hello world",
+ R.drawable.gallery_photo_1,
+ 1));
+ return photoItems;
+ }
}
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/SettingsActivity.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/SettingsActivity.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/SettingsActivity.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/SettingsActivity.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/SettingsFragment.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/SettingsFragment.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/SettingsFragment.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/SettingsFragment.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/StringPresenter.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/StringPresenter.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/StringPresenter.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/StringPresenter.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/VerticalGridActivity.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/VerticalGridActivity.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/VerticalGridActivity.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/VerticalGridActivity.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/VerticalGridFragment.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/VerticalGridFragment.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/VerticalGridFragment.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/VerticalGridFragment.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/VerticalGridSupportActivity.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/VerticalGridSupportActivity.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/VerticalGridSupportActivity.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/VerticalGridSupportActivity.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/VerticalGridSupportFragment.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/VerticalGridSupportFragment.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/VerticalGridSupportFragment.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/VerticalGridSupportFragment.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/VideoActivity.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/VideoActivity.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/VideoActivity.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/VideoActivity.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/VideoActivityWithDetailedCard.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/VideoActivityWithDetailedCard.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/VideoActivityWithDetailedCard.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/VideoActivityWithDetailedCard.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/VideoConsumptionWithDetailCardFragment.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/VideoConsumptionWithDetailCardFragment.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/VideoConsumptionWithDetailCardFragment.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/VideoConsumptionWithDetailCardFragment.java
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/VideoSupportActivity.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/VideoSupportActivity.java
similarity index 100%
rename from samples/SupportLeanbackDemos/src/com/example/android/leanback/VideoSupportActivity.java
rename to samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/VideoSupportActivity.java
diff --git a/samples/SupportLeanbackDemos/res/drawable-hdpi/ic_launcher.png b/samples/SupportLeanbackDemos/src/main/res/drawable-hdpi/ic_launcher.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-hdpi/ic_launcher.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-hdpi/ic_main_icon.png b/samples/SupportLeanbackDemos/src/main/res/drawable-hdpi/ic_main_icon.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-hdpi/ic_main_icon.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-hdpi/ic_main_icon.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-ldpi/ic_launcher.png b/samples/SupportLeanbackDemos/src/main/res/drawable-ldpi/ic_launcher.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-ldpi/ic_launcher.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-ldpi/ic_launcher.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-mdpi/ic_launcher.png b/samples/SupportLeanbackDemos/src/main/res/drawable-mdpi/ic_launcher.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-mdpi/ic_launcher.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-mdpi/ic_main_icon.png b/samples/SupportLeanbackDemos/src/main/res/drawable-mdpi/ic_main_icon.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-mdpi/ic_main_icon.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-mdpi/ic_main_icon.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/bg.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/bg.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/bg.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/bg.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/ic_launcher.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/ic_launcher.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/ic_launcher.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/ic_main_icon.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/ic_main_icon.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/ic_main_icon.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/ic_main_icon.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/ic_settings_apps.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/ic_settings_apps.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/ic_settings_apps.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/ic_settings_apps.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/ic_settings_parental_control.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/ic_settings_parental_control.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/ic_settings_parental_control.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/ic_settings_parental_control.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/ic_settings_time.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/ic_settings_time.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/ic_settings_time.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/ic_settings_time.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/ic_settings_wifi_3_bar.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/ic_settings_wifi_3_bar.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/ic_settings_wifi_3_bar.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/ic_settings_wifi_3_bar.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/ic_settings_wifi_4_bar.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/ic_settings_wifi_4_bar.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/ic_settings_wifi_4_bar.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/ic_settings_wifi_4_bar.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_bg.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_bg.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_bg.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_bg.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_1.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_1.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_1.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_1.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_10.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_10.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_10.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_10.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_11.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_11.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_11.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_11.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_12.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_12.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_12.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_12.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_13.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_13.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_13.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_13.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_14.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_14.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_14.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_14.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_15.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_15.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_15.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_15.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_16.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_16.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_16.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_16.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_17.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_17.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_17.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_17.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_18.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_18.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_18.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_18.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_19.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_19.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_19.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_19.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_2.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_2.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_2.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_2.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_20.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_20.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_20.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_20.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_21.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_21.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_21.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_21.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_22.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_22.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_22.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_22.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_23.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_23.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_23.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_23.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_24.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_24.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_24.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_24.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_25.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_25.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_25.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_25.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_26.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_26.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_26.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_26.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_27.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_27.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_27.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_27.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_28.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_28.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_28.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_28.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_29.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_29.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_29.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_29.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_3.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_3.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_3.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_3.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_30.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_30.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_30.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_30.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_31.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_31.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_31.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_31.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_32.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_32.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_32.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_32.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_33.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_33.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_33.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_33.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_34.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_34.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_34.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_34.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_35.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_35.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_35.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_35.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_36.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_36.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_36.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_36.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_37.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_37.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_37.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_37.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_38.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_38.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_38.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_38.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_39.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_39.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_39.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_39.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_4.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_4.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_4.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_4.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_40.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_40.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_40.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_40.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_41.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_41.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_41.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_41.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_42.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_42.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_42.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_42.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_43.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_43.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_43.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_43.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_44.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_44.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_44.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_44.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_5.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_5.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_5.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_5.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_6.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_6.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_6.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_6.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_7.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_7.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_7.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_7.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_8.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_8.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_8.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_8.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_9.png b/samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_9.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable-xhdpi/tv_content_9.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable-xhdpi/tv_content_9.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable/details_img.png b/samples/SupportLeanbackDemos/src/main/res/drawable/details_img.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable/details_img.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable/details_img.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable/details_img_16x9.png b/samples/SupportLeanbackDemos/src/main/res/drawable/details_img_16x9.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable/details_img_16x9.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable/details_img_16x9.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable/gallery_photo_1.jpg b/samples/SupportLeanbackDemos/src/main/res/drawable/gallery_photo_1.jpg
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable/gallery_photo_1.jpg
rename to samples/SupportLeanbackDemos/src/main/res/drawable/gallery_photo_1.jpg
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable/gallery_photo_2.jpg b/samples/SupportLeanbackDemos/src/main/res/drawable/gallery_photo_2.jpg
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable/gallery_photo_2.jpg
rename to samples/SupportLeanbackDemos/src/main/res/drawable/gallery_photo_2.jpg
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable/gallery_photo_3.jpg b/samples/SupportLeanbackDemos/src/main/res/drawable/gallery_photo_3.jpg
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable/gallery_photo_3.jpg
rename to samples/SupportLeanbackDemos/src/main/res/drawable/gallery_photo_3.jpg
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable/gallery_photo_4.jpg b/samples/SupportLeanbackDemos/src/main/res/drawable/gallery_photo_4.jpg
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable/gallery_photo_4.jpg
rename to samples/SupportLeanbackDemos/src/main/res/drawable/gallery_photo_4.jpg
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable/gallery_photo_5.jpg b/samples/SupportLeanbackDemos/src/main/res/drawable/gallery_photo_5.jpg
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable/gallery_photo_5.jpg
rename to samples/SupportLeanbackDemos/src/main/res/drawable/gallery_photo_5.jpg
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable/gallery_photo_6.jpg b/samples/SupportLeanbackDemos/src/main/res/drawable/gallery_photo_6.jpg
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable/gallery_photo_6.jpg
rename to samples/SupportLeanbackDemos/src/main/res/drawable/gallery_photo_6.jpg
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable/gallery_photo_7.jpg b/samples/SupportLeanbackDemos/src/main/res/drawable/gallery_photo_7.jpg
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable/gallery_photo_7.jpg
rename to samples/SupportLeanbackDemos/src/main/res/drawable/gallery_photo_7.jpg
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable/gallery_photo_8.jpg b/samples/SupportLeanbackDemos/src/main/res/drawable/gallery_photo_8.jpg
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable/gallery_photo_8.jpg
rename to samples/SupportLeanbackDemos/src/main/res/drawable/gallery_photo_8.jpg
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable/google_android.png b/samples/SupportLeanbackDemos/src/main/res/drawable/google_android.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable/google_android.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable/google_android.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable/google_logo.png b/samples/SupportLeanbackDemos/src/main/res/drawable/google_logo.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable/google_logo.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable/google_logo.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable/google_map.jpg b/samples/SupportLeanbackDemos/src/main/res/drawable/google_map.jpg
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable/google_map.jpg
rename to samples/SupportLeanbackDemos/src/main/res/drawable/google_map.jpg
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable/google_photo.jpeg b/samples/SupportLeanbackDemos/src/main/res/drawable/google_photo.jpeg
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable/google_photo.jpeg
rename to samples/SupportLeanbackDemos/src/main/res/drawable/google_photo.jpeg
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable/ic_action_a.png b/samples/SupportLeanbackDemos/src/main/res/drawable/ic_action_a.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable/ic_action_a.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable/ic_action_a.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable/ic_guidedstep_option_a.png b/samples/SupportLeanbackDemos/src/main/res/drawable/ic_guidedstep_option_a.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable/ic_guidedstep_option_a.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable/ic_guidedstep_option_a.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable/ic_guidedstep_option_b.png b/samples/SupportLeanbackDemos/src/main/res/drawable/ic_guidedstep_option_b.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable/ic_guidedstep_option_b.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable/ic_guidedstep_option_b.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable/ic_guidedstep_option_c.png b/samples/SupportLeanbackDemos/src/main/res/drawable/ic_guidedstep_option_c.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable/ic_guidedstep_option_c.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable/ic_guidedstep_option_c.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable/ic_title.png b/samples/SupportLeanbackDemos/src/main/res/drawable/ic_title.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable/ic_title.png
rename to samples/SupportLeanbackDemos/src/main/res/drawable/ic_title.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable/spiderman.jpg b/samples/SupportLeanbackDemos/src/main/res/drawable/spiderman.jpg
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable/spiderman.jpg
rename to samples/SupportLeanbackDemos/src/main/res/drawable/spiderman.jpg
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/drawable/text_bg.xml b/samples/SupportLeanbackDemos/src/main/res/drawable/text_bg.xml
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable/text_bg.xml
rename to samples/SupportLeanbackDemos/src/main/res/drawable/text_bg.xml
diff --git a/samples/SupportLeanbackDemos/res/drawable/tv_content.xml b/samples/SupportLeanbackDemos/src/main/res/drawable/tv_content.xml
similarity index 100%
rename from samples/SupportLeanbackDemos/res/drawable/tv_content.xml
rename to samples/SupportLeanbackDemos/src/main/res/drawable/tv_content.xml
diff --git a/samples/SupportLeanbackDemos/res/layout/activity_music_example.xml b/samples/SupportLeanbackDemos/src/main/res/layout/activity_music_example.xml
similarity index 100%
rename from samples/SupportLeanbackDemos/res/layout/activity_music_example.xml
rename to samples/SupportLeanbackDemos/src/main/res/layout/activity_music_example.xml
diff --git a/samples/SupportLeanbackDemos/res/layout/browse.xml b/samples/SupportLeanbackDemos/src/main/res/layout/browse.xml
similarity index 100%
rename from samples/SupportLeanbackDemos/res/layout/browse.xml
rename to samples/SupportLeanbackDemos/src/main/res/layout/browse.xml
diff --git a/samples/SupportLeanbackDemos/res/layout/browse_animation.xml b/samples/SupportLeanbackDemos/src/main/res/layout/browse_animation.xml
similarity index 100%
rename from samples/SupportLeanbackDemos/res/layout/browse_animation.xml
rename to samples/SupportLeanbackDemos/src/main/res/layout/browse_animation.xml
diff --git a/samples/SupportLeanbackDemos/res/layout/browse_support.xml b/samples/SupportLeanbackDemos/src/main/res/layout/browse_support.xml
similarity index 100%
rename from samples/SupportLeanbackDemos/res/layout/browse_support.xml
rename to samples/SupportLeanbackDemos/src/main/res/layout/browse_support.xml
diff --git a/samples/SupportLeanbackDemos/res/layout/custom_title.xml b/samples/SupportLeanbackDemos/src/main/res/layout/custom_title.xml
similarity index 100%
rename from samples/SupportLeanbackDemos/res/layout/custom_title.xml
rename to samples/SupportLeanbackDemos/src/main/res/layout/custom_title.xml
diff --git a/samples/SupportLeanbackDemos/res/layout/details_activity.xml b/samples/SupportLeanbackDemos/src/main/res/layout/details_activity.xml
similarity index 100%
rename from samples/SupportLeanbackDemos/res/layout/details_activity.xml
rename to samples/SupportLeanbackDemos/src/main/res/layout/details_activity.xml
diff --git a/samples/SupportLeanbackDemos/res/layout/guided_step_activity.xml b/samples/SupportLeanbackDemos/src/main/res/layout/guided_step_activity.xml
similarity index 100%
rename from samples/SupportLeanbackDemos/res/layout/guided_step_activity.xml
rename to samples/SupportLeanbackDemos/src/main/res/layout/guided_step_activity.xml
diff --git a/samples/SupportLeanbackDemos/res/layout/guidedstep_second_guidance.xml b/samples/SupportLeanbackDemos/src/main/res/layout/guidedstep_second_guidance.xml
similarity index 100%
rename from samples/SupportLeanbackDemos/res/layout/guidedstep_second_guidance.xml
rename to samples/SupportLeanbackDemos/src/main/res/layout/guidedstep_second_guidance.xml
diff --git a/samples/SupportLeanbackDemos/res/layout/horizontal_grid.xml b/samples/SupportLeanbackDemos/src/main/res/layout/horizontal_grid.xml
similarity index 100%
rename from samples/SupportLeanbackDemos/res/layout/horizontal_grid.xml
rename to samples/SupportLeanbackDemos/src/main/res/layout/horizontal_grid.xml
diff --git a/samples/SupportLeanbackDemos/res/layout/onboarding.xml b/samples/SupportLeanbackDemos/src/main/res/layout/onboarding.xml
similarity index 100%
rename from samples/SupportLeanbackDemos/res/layout/onboarding.xml
rename to samples/SupportLeanbackDemos/src/main/res/layout/onboarding.xml
diff --git a/samples/SupportLeanbackDemos/res/layout/onboarding_content.xml b/samples/SupportLeanbackDemos/src/main/res/layout/onboarding_content.xml
similarity index 100%
rename from samples/SupportLeanbackDemos/res/layout/onboarding_content.xml
rename to samples/SupportLeanbackDemos/src/main/res/layout/onboarding_content.xml
diff --git a/samples/SupportLeanbackDemos/res/layout/onboarding_image.xml b/samples/SupportLeanbackDemos/src/main/res/layout/onboarding_image.xml
similarity index 100%
rename from samples/SupportLeanbackDemos/res/layout/onboarding_image.xml
rename to samples/SupportLeanbackDemos/src/main/res/layout/onboarding_image.xml
diff --git a/samples/SupportLeanbackDemos/res/layout/page_fragment.xml b/samples/SupportLeanbackDemos/src/main/res/layout/page_fragment.xml
similarity index 100%
rename from samples/SupportLeanbackDemos/res/layout/page_fragment.xml
rename to samples/SupportLeanbackDemos/src/main/res/layout/page_fragment.xml
diff --git a/samples/SupportLeanbackDemos/res/layout/playback_activity.xml b/samples/SupportLeanbackDemos/src/main/res/layout/playback_activity.xml
similarity index 100%
rename from samples/SupportLeanbackDemos/res/layout/playback_activity.xml
rename to samples/SupportLeanbackDemos/src/main/res/layout/playback_activity.xml
diff --git a/samples/SupportLeanbackDemos/res/layout/playback_activity_support.xml b/samples/SupportLeanbackDemos/src/main/res/layout/playback_activity_support.xml
similarity index 100%
rename from samples/SupportLeanbackDemos/res/layout/playback_activity_support.xml
rename to samples/SupportLeanbackDemos/src/main/res/layout/playback_activity_support.xml
diff --git a/samples/SupportLeanbackDemos/res/layout/playback_controls.xml b/samples/SupportLeanbackDemos/src/main/res/layout/playback_controls.xml
similarity index 100%
rename from samples/SupportLeanbackDemos/res/layout/playback_controls.xml
rename to samples/SupportLeanbackDemos/src/main/res/layout/playback_controls.xml
diff --git a/samples/SupportLeanbackDemos/res/layout/playback_controls_support.xml b/samples/SupportLeanbackDemos/src/main/res/layout/playback_controls_support.xml
similarity index 100%
rename from samples/SupportLeanbackDemos/res/layout/playback_controls_support.xml
rename to samples/SupportLeanbackDemos/src/main/res/layout/playback_controls_support.xml
diff --git a/samples/SupportLeanbackDemos/res/layout/playback_transportcontrol_activity.xml b/samples/SupportLeanbackDemos/src/main/res/layout/playback_transportcontrol_activity.xml
similarity index 100%
rename from samples/SupportLeanbackDemos/res/layout/playback_transportcontrol_activity.xml
rename to samples/SupportLeanbackDemos/src/main/res/layout/playback_transportcontrol_activity.xml
diff --git a/samples/SupportLeanbackDemos/res/layout/playback_transportcontrol_activity_support.xml b/samples/SupportLeanbackDemos/src/main/res/layout/playback_transportcontrol_activity_support.xml
similarity index 100%
rename from samples/SupportLeanbackDemos/res/layout/playback_transportcontrol_activity_support.xml
rename to samples/SupportLeanbackDemos/src/main/res/layout/playback_transportcontrol_activity_support.xml
diff --git a/samples/SupportLeanbackDemos/res/layout/rows.xml b/samples/SupportLeanbackDemos/src/main/res/layout/rows.xml
similarity index 100%
rename from samples/SupportLeanbackDemos/res/layout/rows.xml
rename to samples/SupportLeanbackDemos/src/main/res/layout/rows.xml
diff --git a/samples/SupportLeanbackDemos/res/layout/rows_support.xml b/samples/SupportLeanbackDemos/src/main/res/layout/rows_support.xml
similarity index 100%
rename from samples/SupportLeanbackDemos/res/layout/rows_support.xml
rename to samples/SupportLeanbackDemos/src/main/res/layout/rows_support.xml
diff --git a/samples/SupportLeanbackDemos/res/layout/search.xml b/samples/SupportLeanbackDemos/src/main/res/layout/search.xml
similarity index 100%
rename from samples/SupportLeanbackDemos/res/layout/search.xml
rename to samples/SupportLeanbackDemos/src/main/res/layout/search.xml
diff --git a/samples/SupportLeanbackDemos/res/layout/search_support.xml b/samples/SupportLeanbackDemos/src/main/res/layout/search_support.xml
similarity index 100%
rename from samples/SupportLeanbackDemos/res/layout/search_support.xml
rename to samples/SupportLeanbackDemos/src/main/res/layout/search_support.xml
diff --git a/samples/SupportLeanbackDemos/res/layout/settings.xml b/samples/SupportLeanbackDemos/src/main/res/layout/settings.xml
similarity index 100%
rename from samples/SupportLeanbackDemos/res/layout/settings.xml
rename to samples/SupportLeanbackDemos/src/main/res/layout/settings.xml
diff --git a/samples/SupportLeanbackDemos/res/layout/vertical_grid.xml b/samples/SupportLeanbackDemos/src/main/res/layout/vertical_grid.xml
similarity index 100%
rename from samples/SupportLeanbackDemos/res/layout/vertical_grid.xml
rename to samples/SupportLeanbackDemos/src/main/res/layout/vertical_grid.xml
diff --git a/samples/SupportLeanbackDemos/res/layout/vertical_grid_support.xml b/samples/SupportLeanbackDemos/src/main/res/layout/vertical_grid_support.xml
similarity index 100%
rename from samples/SupportLeanbackDemos/res/layout/vertical_grid_support.xml
rename to samples/SupportLeanbackDemos/src/main/res/layout/vertical_grid_support.xml
diff --git a/samples/SupportLeanbackDemos/res/layout/video_activity_detailed_card.xml b/samples/SupportLeanbackDemos/src/main/res/layout/video_activity_detailed_card.xml
similarity index 100%
rename from samples/SupportLeanbackDemos/res/layout/video_activity_detailed_card.xml
rename to samples/SupportLeanbackDemos/src/main/res/layout/video_activity_detailed_card.xml
diff --git a/samples/SupportLeanbackDemos/res/mipmap-xhdpi/app_banner_sample_app.png b/samples/SupportLeanbackDemos/src/main/res/mipmap-xhdpi/app_banner_sample_app.png
similarity index 100%
rename from samples/SupportLeanbackDemos/res/mipmap-xhdpi/app_banner_sample_app.png
rename to samples/SupportLeanbackDemos/src/main/res/mipmap-xhdpi/app_banner_sample_app.png
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/raw/browse.mp4 b/samples/SupportLeanbackDemos/src/main/res/raw/browse.mp4
similarity index 100%
rename from samples/SupportLeanbackDemos/res/raw/browse.mp4
rename to samples/SupportLeanbackDemos/src/main/res/raw/browse.mp4
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/raw/media.json b/samples/SupportLeanbackDemos/src/main/res/raw/media.json
similarity index 100%
rename from samples/SupportLeanbackDemos/res/raw/media.json
rename to samples/SupportLeanbackDemos/src/main/res/raw/media.json
diff --git a/samples/SupportLeanbackDemos/res/raw/media0.mp3 b/samples/SupportLeanbackDemos/src/main/res/raw/media0.mp3
similarity index 100%
rename from samples/SupportLeanbackDemos/res/raw/media0.mp3
rename to samples/SupportLeanbackDemos/src/main/res/raw/media0.mp3
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/raw/media1.mp3 b/samples/SupportLeanbackDemos/src/main/res/raw/media1.mp3
similarity index 100%
rename from samples/SupportLeanbackDemos/res/raw/media1.mp3
rename to samples/SupportLeanbackDemos/src/main/res/raw/media1.mp3
Binary files differ
diff --git a/samples/SupportLeanbackDemos/res/values/arrays.xml b/samples/SupportLeanbackDemos/src/main/res/values/arrays.xml
similarity index 100%
rename from samples/SupportLeanbackDemos/res/values/arrays.xml
rename to samples/SupportLeanbackDemos/src/main/res/values/arrays.xml
diff --git a/samples/SupportLeanbackDemos/res/values/colors.xml b/samples/SupportLeanbackDemos/src/main/res/values/colors.xml
similarity index 100%
rename from samples/SupportLeanbackDemos/res/values/colors.xml
rename to samples/SupportLeanbackDemos/src/main/res/values/colors.xml
diff --git a/samples/SupportLeanbackDemos/res/values/strings.xml b/samples/SupportLeanbackDemos/src/main/res/values/strings.xml
similarity index 100%
rename from samples/SupportLeanbackDemos/res/values/strings.xml
rename to samples/SupportLeanbackDemos/src/main/res/values/strings.xml
diff --git a/samples/SupportLeanbackDemos/res/values/styles.xml b/samples/SupportLeanbackDemos/src/main/res/values/styles.xml
similarity index 100%
rename from samples/SupportLeanbackDemos/res/values/styles.xml
rename to samples/SupportLeanbackDemos/src/main/res/values/styles.xml
diff --git a/samples/SupportLeanbackDemos/res/values/themes.xml b/samples/SupportLeanbackDemos/src/main/res/values/themes.xml
similarity index 100%
rename from samples/SupportLeanbackDemos/res/values/themes.xml
rename to samples/SupportLeanbackDemos/src/main/res/values/themes.xml
diff --git a/samples/SupportLeanbackDemos/res/xml/prefs.xml b/samples/SupportLeanbackDemos/src/main/res/xml/prefs.xml
similarity index 100%
rename from samples/SupportLeanbackDemos/res/xml/prefs.xml
rename to samples/SupportLeanbackDemos/src/main/res/xml/prefs.xml
diff --git a/samples/SupportLeanbackJank/build.gradle b/samples/SupportLeanbackJank/build.gradle
index 2d40ef3..eef9986 100644
--- a/samples/SupportLeanbackJank/build.gradle
+++ b/samples/SupportLeanbackJank/build.gradle
@@ -21,13 +21,6 @@
}
}
- sourceSets {
- main.manifest.srcFile 'AndroidManifest.xml'
- main.java.srcDirs = ['src']
- main.aidl.srcDirs = ['src']
- main.res.srcDirs = ['res']
- }
-
signingConfigs {
debug {
// Use a local debug keystore to avoid build server issues.
diff --git a/samples/SupportLeanbackJank/AndroidManifest.xml b/samples/SupportLeanbackJank/src/main/AndroidManifest.xml
similarity index 100%
rename from samples/SupportLeanbackJank/AndroidManifest.xml
rename to samples/SupportLeanbackJank/src/main/AndroidManifest.xml
diff --git a/samples/SupportLeanbackJank/src/com/google/android/leanbackjank/IntentDefaults.java b/samples/SupportLeanbackJank/src/main/java/com/google/android/leanbackjank/IntentDefaults.java
similarity index 100%
rename from samples/SupportLeanbackJank/src/com/google/android/leanbackjank/IntentDefaults.java
rename to samples/SupportLeanbackJank/src/main/java/com/google/android/leanbackjank/IntentDefaults.java
diff --git a/samples/SupportLeanbackJank/src/com/google/android/leanbackjank/IntentKeys.java b/samples/SupportLeanbackJank/src/main/java/com/google/android/leanbackjank/IntentKeys.java
similarity index 100%
rename from samples/SupportLeanbackJank/src/com/google/android/leanbackjank/IntentKeys.java
rename to samples/SupportLeanbackJank/src/main/java/com/google/android/leanbackjank/IntentKeys.java
diff --git a/samples/SupportLeanbackJank/src/com/google/android/leanbackjank/data/VideoProvider.java b/samples/SupportLeanbackJank/src/main/java/com/google/android/leanbackjank/data/VideoProvider.java
similarity index 100%
rename from samples/SupportLeanbackJank/src/com/google/android/leanbackjank/data/VideoProvider.java
rename to samples/SupportLeanbackJank/src/main/java/com/google/android/leanbackjank/data/VideoProvider.java
diff --git a/samples/SupportLeanbackJank/src/com/google/android/leanbackjank/model/VideoInfo.java b/samples/SupportLeanbackJank/src/main/java/com/google/android/leanbackjank/model/VideoInfo.java
similarity index 100%
rename from samples/SupportLeanbackJank/src/com/google/android/leanbackjank/model/VideoInfo.java
rename to samples/SupportLeanbackJank/src/main/java/com/google/android/leanbackjank/model/VideoInfo.java
diff --git a/samples/SupportLeanbackJank/src/com/google/android/leanbackjank/presenter/CardPresenter.java b/samples/SupportLeanbackJank/src/main/java/com/google/android/leanbackjank/presenter/CardPresenter.java
similarity index 100%
rename from samples/SupportLeanbackJank/src/com/google/android/leanbackjank/presenter/CardPresenter.java
rename to samples/SupportLeanbackJank/src/main/java/com/google/android/leanbackjank/presenter/CardPresenter.java
diff --git a/samples/SupportLeanbackJank/src/com/google/android/leanbackjank/presenter/GridItemPresenter.java b/samples/SupportLeanbackJank/src/main/java/com/google/android/leanbackjank/presenter/GridItemPresenter.java
similarity index 100%
rename from samples/SupportLeanbackJank/src/com/google/android/leanbackjank/presenter/GridItemPresenter.java
rename to samples/SupportLeanbackJank/src/main/java/com/google/android/leanbackjank/presenter/GridItemPresenter.java
diff --git a/samples/SupportLeanbackJank/src/com/google/android/leanbackjank/presenter/HeaderItemPresenter.java b/samples/SupportLeanbackJank/src/main/java/com/google/android/leanbackjank/presenter/HeaderItemPresenter.java
similarity index 100%
rename from samples/SupportLeanbackJank/src/com/google/android/leanbackjank/presenter/HeaderItemPresenter.java
rename to samples/SupportLeanbackJank/src/main/java/com/google/android/leanbackjank/presenter/HeaderItemPresenter.java
diff --git a/samples/SupportLeanbackJank/src/com/google/android/leanbackjank/ui/MainActivity.java b/samples/SupportLeanbackJank/src/main/java/com/google/android/leanbackjank/ui/MainActivity.java
similarity index 100%
rename from samples/SupportLeanbackJank/src/com/google/android/leanbackjank/ui/MainActivity.java
rename to samples/SupportLeanbackJank/src/main/java/com/google/android/leanbackjank/ui/MainActivity.java
diff --git a/samples/SupportLeanbackJank/src/com/google/android/leanbackjank/ui/MainFragment.java b/samples/SupportLeanbackJank/src/main/java/com/google/android/leanbackjank/ui/MainFragment.java
similarity index 100%
rename from samples/SupportLeanbackJank/src/com/google/android/leanbackjank/ui/MainFragment.java
rename to samples/SupportLeanbackJank/src/main/java/com/google/android/leanbackjank/ui/MainFragment.java
diff --git a/samples/SupportLeanbackJank/src/com/google/android/leanbackjank/ui/VideoActivity.java b/samples/SupportLeanbackJank/src/main/java/com/google/android/leanbackjank/ui/VideoActivity.java
similarity index 100%
rename from samples/SupportLeanbackJank/src/com/google/android/leanbackjank/ui/VideoActivity.java
rename to samples/SupportLeanbackJank/src/main/java/com/google/android/leanbackjank/ui/VideoActivity.java
diff --git a/samples/SupportLeanbackJank/res/drawable/android_header.png b/samples/SupportLeanbackJank/src/main/res/drawable/android_header.png
similarity index 100%
rename from samples/SupportLeanbackJank/res/drawable/android_header.png
rename to samples/SupportLeanbackJank/src/main/res/drawable/android_header.png
Binary files differ
diff --git a/samples/SupportLeanbackJank/res/drawable/app_banner.png b/samples/SupportLeanbackJank/src/main/res/drawable/app_banner.png
similarity index 100%
rename from samples/SupportLeanbackJank/res/drawable/app_banner.png
rename to samples/SupportLeanbackJank/src/main/res/drawable/app_banner.png
Binary files differ
diff --git a/samples/SupportLeanbackJank/res/drawable/default_background.xml b/samples/SupportLeanbackJank/src/main/res/drawable/default_background.xml
similarity index 100%
rename from samples/SupportLeanbackJank/res/drawable/default_background.xml
rename to samples/SupportLeanbackJank/src/main/res/drawable/default_background.xml
diff --git a/samples/SupportLeanbackJank/res/drawable/movie.png b/samples/SupportLeanbackJank/src/main/res/drawable/movie.png
similarity index 100%
rename from samples/SupportLeanbackJank/res/drawable/movie.png
rename to samples/SupportLeanbackJank/src/main/res/drawable/movie.png
Binary files differ
diff --git a/samples/SupportLeanbackJank/res/layout/header_item.xml b/samples/SupportLeanbackJank/src/main/res/layout/header_item.xml
similarity index 100%
rename from samples/SupportLeanbackJank/res/layout/header_item.xml
rename to samples/SupportLeanbackJank/src/main/res/layout/header_item.xml
diff --git a/samples/SupportLeanbackJank/res/layout/main.xml b/samples/SupportLeanbackJank/src/main/res/layout/main.xml
similarity index 100%
rename from samples/SupportLeanbackJank/res/layout/main.xml
rename to samples/SupportLeanbackJank/src/main/res/layout/main.xml
diff --git a/samples/SupportLeanbackJank/res/raw/bbb_360p.mp4 b/samples/SupportLeanbackJank/src/main/res/raw/bbb_360p.mp4
similarity index 100%
rename from samples/SupportLeanbackJank/res/raw/bbb_360p.mp4
rename to samples/SupportLeanbackJank/src/main/res/raw/bbb_360p.mp4
Binary files differ
diff --git a/samples/SupportLeanbackJank/res/raw/bbb_480p.mp4 b/samples/SupportLeanbackJank/src/main/res/raw/bbb_480p.mp4
similarity index 100%
rename from samples/SupportLeanbackJank/res/raw/bbb_480p.mp4
rename to samples/SupportLeanbackJank/src/main/res/raw/bbb_480p.mp4
Binary files differ
diff --git a/samples/SupportLeanbackJank/res/raw/bbb_sunflower_2160p_60fps.mp4 b/samples/SupportLeanbackJank/src/main/res/raw/bbb_sunflower_2160p_60fps.mp4
similarity index 100%
rename from samples/SupportLeanbackJank/res/raw/bbb_sunflower_2160p_60fps.mp4
rename to samples/SupportLeanbackJank/src/main/res/raw/bbb_sunflower_2160p_60fps.mp4
Binary files differ
diff --git a/samples/SupportLeanbackJank/res/raw/testvideo_1080p_60fps.mp4 b/samples/SupportLeanbackJank/src/main/res/raw/testvideo_1080p_60fps.mp4
similarity index 100%
rename from samples/SupportLeanbackJank/res/raw/testvideo_1080p_60fps.mp4
rename to samples/SupportLeanbackJank/src/main/res/raw/testvideo_1080p_60fps.mp4
Binary files differ
diff --git a/samples/SupportLeanbackJank/res/values-v21/styles.xml b/samples/SupportLeanbackJank/src/main/res/values-v21/styles.xml
similarity index 100%
rename from samples/SupportLeanbackJank/res/values-v21/styles.xml
rename to samples/SupportLeanbackJank/src/main/res/values-v21/styles.xml
diff --git a/samples/SupportLeanbackJank/res/values/colors.xml b/samples/SupportLeanbackJank/src/main/res/values/colors.xml
similarity index 100%
rename from samples/SupportLeanbackJank/res/values/colors.xml
rename to samples/SupportLeanbackJank/src/main/res/values/colors.xml
diff --git a/samples/SupportLeanbackJank/res/values/dimens.xml b/samples/SupportLeanbackJank/src/main/res/values/dimens.xml
similarity index 100%
rename from samples/SupportLeanbackJank/res/values/dimens.xml
rename to samples/SupportLeanbackJank/src/main/res/values/dimens.xml
diff --git a/samples/SupportLeanbackJank/res/values/strings.xml b/samples/SupportLeanbackJank/src/main/res/values/strings.xml
similarity index 100%
rename from samples/SupportLeanbackJank/res/values/strings.xml
rename to samples/SupportLeanbackJank/src/main/res/values/strings.xml
diff --git a/samples/SupportLeanbackJank/res/values/styles.xml b/samples/SupportLeanbackJank/src/main/res/values/styles.xml
similarity index 100%
rename from samples/SupportLeanbackJank/res/values/styles.xml
rename to samples/SupportLeanbackJank/src/main/res/values/styles.xml
diff --git a/samples/SupportPercentDemos/build.gradle b/samples/SupportPercentDemos/build.gradle
index 251678d..cec4b03 100644
--- a/samples/SupportPercentDemos/build.gradle
+++ b/samples/SupportPercentDemos/build.gradle
@@ -12,12 +12,6 @@
targetSdkVersion project.ext.currentSdk
}
- sourceSets {
- main.manifest.srcFile 'AndroidManifest.xml'
- main.java.srcDirs = ['src']
- main.res.srcDirs = ['res']
- }
-
lintOptions {
abortOnError true
check 'NewApi'
diff --git a/samples/SupportPercentDemos/AndroidManifest.xml b/samples/SupportPercentDemos/src/main/AndroidManifest.xml
similarity index 100%
rename from samples/SupportPercentDemos/AndroidManifest.xml
rename to samples/SupportPercentDemos/src/main/AndroidManifest.xml
diff --git a/samples/SupportPercentDemos/src/com/example/android/support/percent/IncludePercentFrameLayoutActivity.java b/samples/SupportPercentDemos/src/main/java/com/example/android/support/percent/IncludePercentFrameLayoutActivity.java
similarity index 100%
rename from samples/SupportPercentDemos/src/com/example/android/support/percent/IncludePercentFrameLayoutActivity.java
rename to samples/SupportPercentDemos/src/main/java/com/example/android/support/percent/IncludePercentFrameLayoutActivity.java
diff --git a/samples/SupportPercentDemos/src/com/example/android/support/percent/PercentFrameLayoutActivityHPaddings.java b/samples/SupportPercentDemos/src/main/java/com/example/android/support/percent/PercentFrameLayoutActivityHPaddings.java
similarity index 100%
rename from samples/SupportPercentDemos/src/com/example/android/support/percent/PercentFrameLayoutActivityHPaddings.java
rename to samples/SupportPercentDemos/src/main/java/com/example/android/support/percent/PercentFrameLayoutActivityHPaddings.java
diff --git a/samples/SupportPercentDemos/src/com/example/android/support/percent/PercentFrameLayoutActivityVPaddings.java b/samples/SupportPercentDemos/src/main/java/com/example/android/support/percent/PercentFrameLayoutActivityVPaddings.java
similarity index 100%
rename from samples/SupportPercentDemos/src/com/example/android/support/percent/PercentFrameLayoutActivityVPaddings.java
rename to samples/SupportPercentDemos/src/main/java/com/example/android/support/percent/PercentFrameLayoutActivityVPaddings.java
diff --git a/samples/SupportPercentDemos/src/com/example/android/support/percent/PercentRelativeLayoutActivityHPaddings.java b/samples/SupportPercentDemos/src/main/java/com/example/android/support/percent/PercentRelativeLayoutActivityHPaddings.java
similarity index 100%
rename from samples/SupportPercentDemos/src/com/example/android/support/percent/PercentRelativeLayoutActivityHPaddings.java
rename to samples/SupportPercentDemos/src/main/java/com/example/android/support/percent/PercentRelativeLayoutActivityHPaddings.java
diff --git a/samples/SupportPercentDemos/src/com/example/android/support/percent/PercentRelativeLayoutActivityVPaddings.java b/samples/SupportPercentDemos/src/main/java/com/example/android/support/percent/PercentRelativeLayoutActivityVPaddings.java
similarity index 100%
rename from samples/SupportPercentDemos/src/com/example/android/support/percent/PercentRelativeLayoutActivityVPaddings.java
rename to samples/SupportPercentDemos/src/main/java/com/example/android/support/percent/PercentRelativeLayoutActivityVPaddings.java
diff --git a/samples/SupportPercentDemos/src/com/example/android/support/percent/SimplePercentFrameLayoutActivity.java b/samples/SupportPercentDemos/src/main/java/com/example/android/support/percent/SimplePercentFrameLayoutActivity.java
similarity index 100%
rename from samples/SupportPercentDemos/src/com/example/android/support/percent/SimplePercentFrameLayoutActivity.java
rename to samples/SupportPercentDemos/src/main/java/com/example/android/support/percent/SimplePercentFrameLayoutActivity.java
diff --git a/samples/SupportPercentDemos/src/com/example/android/support/percent/SimplePercentRelativeLayoutActivity.java b/samples/SupportPercentDemos/src/main/java/com/example/android/support/percent/SimplePercentRelativeLayoutActivity.java
similarity index 100%
rename from samples/SupportPercentDemos/src/com/example/android/support/percent/SimplePercentRelativeLayoutActivity.java
rename to samples/SupportPercentDemos/src/main/java/com/example/android/support/percent/SimplePercentRelativeLayoutActivity.java
diff --git a/samples/SupportPercentDemos/src/com/example/android/support/percent/SupportPercentDemos.java b/samples/SupportPercentDemos/src/main/java/com/example/android/support/percent/SupportPercentDemos.java
similarity index 100%
rename from samples/SupportPercentDemos/src/com/example/android/support/percent/SupportPercentDemos.java
rename to samples/SupportPercentDemos/src/main/java/com/example/android/support/percent/SupportPercentDemos.java
diff --git a/samples/SupportPercentDemos/res/drawable-hdpi/app_sample_code.png b/samples/SupportPercentDemos/src/main/res/drawable-hdpi/app_sample_code.png
similarity index 100%
rename from samples/SupportPercentDemos/res/drawable-hdpi/app_sample_code.png
rename to samples/SupportPercentDemos/src/main/res/drawable-hdpi/app_sample_code.png
Binary files differ
diff --git a/samples/SupportPercentDemos/res/drawable-mdpi/app_sample_code.png b/samples/SupportPercentDemos/src/main/res/drawable-mdpi/app_sample_code.png
similarity index 100%
rename from samples/SupportPercentDemos/res/drawable-mdpi/app_sample_code.png
rename to samples/SupportPercentDemos/src/main/res/drawable-mdpi/app_sample_code.png
Binary files differ
diff --git a/samples/SupportPercentDemos/res/layout/include_percent_frame_layout_activity.xml b/samples/SupportPercentDemos/src/main/res/layout/include_percent_frame_layout_activity.xml
similarity index 100%
rename from samples/SupportPercentDemos/res/layout/include_percent_frame_layout_activity.xml
rename to samples/SupportPercentDemos/src/main/res/layout/include_percent_frame_layout_activity.xml
diff --git a/samples/SupportPercentDemos/res/layout/include_percent_frame_layout_content.xml b/samples/SupportPercentDemos/src/main/res/layout/include_percent_frame_layout_content.xml
similarity index 100%
rename from samples/SupportPercentDemos/res/layout/include_percent_frame_layout_content.xml
rename to samples/SupportPercentDemos/src/main/res/layout/include_percent_frame_layout_content.xml
diff --git a/samples/SupportPercentDemos/res/layout/percent_frame_layout_activity_hpaddings.xml b/samples/SupportPercentDemos/src/main/res/layout/percent_frame_layout_activity_hpaddings.xml
similarity index 100%
rename from samples/SupportPercentDemos/res/layout/percent_frame_layout_activity_hpaddings.xml
rename to samples/SupportPercentDemos/src/main/res/layout/percent_frame_layout_activity_hpaddings.xml
diff --git a/samples/SupportPercentDemos/res/layout/percent_frame_layout_activity_vpaddings.xml b/samples/SupportPercentDemos/src/main/res/layout/percent_frame_layout_activity_vpaddings.xml
similarity index 100%
rename from samples/SupportPercentDemos/res/layout/percent_frame_layout_activity_vpaddings.xml
rename to samples/SupportPercentDemos/src/main/res/layout/percent_frame_layout_activity_vpaddings.xml
diff --git a/samples/SupportPercentDemos/res/layout/percent_relative_layout_activity_hpaddings.xml b/samples/SupportPercentDemos/src/main/res/layout/percent_relative_layout_activity_hpaddings.xml
similarity index 100%
rename from samples/SupportPercentDemos/res/layout/percent_relative_layout_activity_hpaddings.xml
rename to samples/SupportPercentDemos/src/main/res/layout/percent_relative_layout_activity_hpaddings.xml
diff --git a/samples/SupportPercentDemos/res/layout/percent_relative_layout_activity_vpaddings.xml b/samples/SupportPercentDemos/src/main/res/layout/percent_relative_layout_activity_vpaddings.xml
similarity index 100%
rename from samples/SupportPercentDemos/res/layout/percent_relative_layout_activity_vpaddings.xml
rename to samples/SupportPercentDemos/src/main/res/layout/percent_relative_layout_activity_vpaddings.xml
diff --git a/samples/SupportPercentDemos/res/layout/simple_percent_frame_layout_activity.xml b/samples/SupportPercentDemos/src/main/res/layout/simple_percent_frame_layout_activity.xml
similarity index 100%
rename from samples/SupportPercentDemos/res/layout/simple_percent_frame_layout_activity.xml
rename to samples/SupportPercentDemos/src/main/res/layout/simple_percent_frame_layout_activity.xml
diff --git a/samples/SupportPercentDemos/res/layout/simple_percent_relative_layout_activity.xml b/samples/SupportPercentDemos/src/main/res/layout/simple_percent_relative_layout_activity.xml
similarity index 100%
rename from samples/SupportPercentDemos/res/layout/simple_percent_relative_layout_activity.xml
rename to samples/SupportPercentDemos/src/main/res/layout/simple_percent_relative_layout_activity.xml
diff --git a/samples/SupportPercentDemos/res/values/strings.xml b/samples/SupportPercentDemos/src/main/res/values/strings.xml
similarity index 100%
rename from samples/SupportPercentDemos/res/values/strings.xml
rename to samples/SupportPercentDemos/src/main/res/values/strings.xml
diff --git a/samples/SupportPreferenceDemos/build.gradle b/samples/SupportPreferenceDemos/build.gradle
index 6e78088..f720b92 100644
--- a/samples/SupportPreferenceDemos/build.gradle
+++ b/samples/SupportPreferenceDemos/build.gradle
@@ -17,12 +17,6 @@
targetSdkVersion project.ext.currentSdk
}
- sourceSets {
- main.manifest.srcFile 'AndroidManifest.xml'
- main.java.srcDirs = ['src']
- main.res.srcDirs = ['res']
- }
-
signingConfigs {
debug {
// Use a local debug keystore to avoid build server issues.
diff --git a/samples/SupportPreferenceDemos/AndroidManifest.xml b/samples/SupportPreferenceDemos/src/main/AndroidManifest.xml
similarity index 100%
rename from samples/SupportPreferenceDemos/AndroidManifest.xml
rename to samples/SupportPreferenceDemos/src/main/AndroidManifest.xml
diff --git a/samples/SupportPreferenceDemos/src/com/example/android/supportpreference/FragmentSupportPreferences.java b/samples/SupportPreferenceDemos/src/main/java/com/example/android/supportpreference/FragmentSupportPreferences.java
similarity index 100%
rename from samples/SupportPreferenceDemos/src/com/example/android/supportpreference/FragmentSupportPreferences.java
rename to samples/SupportPreferenceDemos/src/main/java/com/example/android/supportpreference/FragmentSupportPreferences.java
diff --git a/samples/SupportPreferenceDemos/src/com/example/android/supportpreference/FragmentSupportPreferencesCompat.java b/samples/SupportPreferenceDemos/src/main/java/com/example/android/supportpreference/FragmentSupportPreferencesCompat.java
similarity index 100%
rename from samples/SupportPreferenceDemos/src/com/example/android/supportpreference/FragmentSupportPreferencesCompat.java
rename to samples/SupportPreferenceDemos/src/main/java/com/example/android/supportpreference/FragmentSupportPreferencesCompat.java
diff --git a/samples/SupportPreferenceDemos/src/com/example/android/supportpreference/FragmentSupportPreferencesLeanback.java b/samples/SupportPreferenceDemos/src/main/java/com/example/android/supportpreference/FragmentSupportPreferencesLeanback.java
similarity index 100%
rename from samples/SupportPreferenceDemos/src/com/example/android/supportpreference/FragmentSupportPreferencesLeanback.java
rename to samples/SupportPreferenceDemos/src/main/java/com/example/android/supportpreference/FragmentSupportPreferencesLeanback.java
diff --git a/samples/SupportPreferenceDemos/src/com/example/android/supportpreference/SupportPreferenceDemos.java b/samples/SupportPreferenceDemos/src/main/java/com/example/android/supportpreference/SupportPreferenceDemos.java
similarity index 100%
rename from samples/SupportPreferenceDemos/src/com/example/android/supportpreference/SupportPreferenceDemos.java
rename to samples/SupportPreferenceDemos/src/main/java/com/example/android/supportpreference/SupportPreferenceDemos.java
diff --git a/samples/SupportPreferenceDemos/res/drawable-hdpi/app_sample_code.png b/samples/SupportPreferenceDemos/src/main/res/drawable-hdpi/app_sample_code.png
similarity index 100%
rename from samples/SupportPreferenceDemos/res/drawable-hdpi/app_sample_code.png
rename to samples/SupportPreferenceDemos/src/main/res/drawable-hdpi/app_sample_code.png
Binary files differ
diff --git a/samples/SupportPreferenceDemos/res/drawable-mdpi/app_sample_code.png b/samples/SupportPreferenceDemos/src/main/res/drawable-mdpi/app_sample_code.png
similarity index 100%
rename from samples/SupportPreferenceDemos/res/drawable-mdpi/app_sample_code.png
rename to samples/SupportPreferenceDemos/src/main/res/drawable-mdpi/app_sample_code.png
Binary files differ
diff --git a/samples/SupportPreferenceDemos/res/values-v17/bools.xml b/samples/SupportPreferenceDemos/src/main/res/values-v17/bools.xml
similarity index 100%
rename from samples/SupportPreferenceDemos/res/values-v17/bools.xml
rename to samples/SupportPreferenceDemos/src/main/res/values-v17/bools.xml
diff --git a/samples/SupportPreferenceDemos/res/values-v21/styles.xml b/samples/SupportPreferenceDemos/src/main/res/values-v21/styles.xml
similarity index 100%
rename from samples/SupportPreferenceDemos/res/values-v21/styles.xml
rename to samples/SupportPreferenceDemos/src/main/res/values-v21/styles.xml
diff --git a/samples/SupportPreferenceDemos/res/values/arrays.xml b/samples/SupportPreferenceDemos/src/main/res/values/arrays.xml
similarity index 100%
rename from samples/SupportPreferenceDemos/res/values/arrays.xml
rename to samples/SupportPreferenceDemos/src/main/res/values/arrays.xml
diff --git a/samples/SupportPreferenceDemos/res/values/bools.xml b/samples/SupportPreferenceDemos/src/main/res/values/bools.xml
similarity index 100%
rename from samples/SupportPreferenceDemos/res/values/bools.xml
rename to samples/SupportPreferenceDemos/src/main/res/values/bools.xml
diff --git a/samples/SupportPreferenceDemos/res/values/strings.xml b/samples/SupportPreferenceDemos/src/main/res/values/strings.xml
similarity index 100%
rename from samples/SupportPreferenceDemos/res/values/strings.xml
rename to samples/SupportPreferenceDemos/src/main/res/values/strings.xml
diff --git a/samples/SupportPreferenceDemos/res/values/styles.xml b/samples/SupportPreferenceDemos/src/main/res/values/styles.xml
similarity index 100%
rename from samples/SupportPreferenceDemos/res/values/styles.xml
rename to samples/SupportPreferenceDemos/src/main/res/values/styles.xml
diff --git a/samples/SupportPreferenceDemos/res/xml/preferences.xml b/samples/SupportPreferenceDemos/src/main/res/xml/preferences.xml
similarity index 100%
rename from samples/SupportPreferenceDemos/res/xml/preferences.xml
rename to samples/SupportPreferenceDemos/src/main/res/xml/preferences.xml
diff --git a/samples/SupportTransitionDemos/build.gradle b/samples/SupportTransitionDemos/build.gradle
index 6b34453..8719221 100644
--- a/samples/SupportTransitionDemos/build.gradle
+++ b/samples/SupportTransitionDemos/build.gradle
@@ -13,12 +13,6 @@
targetSdkVersion project.ext.currentSdk
}
- sourceSets {
- main.manifest.srcFile 'AndroidManifest.xml'
- main.java.srcDirs = ['src']
- main.res.srcDirs = ['res']
- }
-
lintOptions {
abortOnError true
check 'NewApi'
diff --git a/samples/SupportTransitionDemos/AndroidManifest.xml b/samples/SupportTransitionDemos/src/main/AndroidManifest.xml
similarity index 100%
rename from samples/SupportTransitionDemos/AndroidManifest.xml
rename to samples/SupportTransitionDemos/src/main/AndroidManifest.xml
diff --git a/samples/SupportTransitionDemos/src/com/example/android/support/transition/SupportTransitionDemos.java b/samples/SupportTransitionDemos/src/main/java/com/example/android/support/transition/SupportTransitionDemos.java
similarity index 100%
rename from samples/SupportTransitionDemos/src/com/example/android/support/transition/SupportTransitionDemos.java
rename to samples/SupportTransitionDemos/src/main/java/com/example/android/support/transition/SupportTransitionDemos.java
diff --git a/samples/SupportTransitionDemos/src/com/example/android/support/transition/widget/ArcMotionUsage.java b/samples/SupportTransitionDemos/src/main/java/com/example/android/support/transition/widget/ArcMotionUsage.java
similarity index 100%
rename from samples/SupportTransitionDemos/src/com/example/android/support/transition/widget/ArcMotionUsage.java
rename to samples/SupportTransitionDemos/src/main/java/com/example/android/support/transition/widget/ArcMotionUsage.java
diff --git a/samples/SupportTransitionDemos/src/com/example/android/support/transition/widget/BeginDelayedUsage.java b/samples/SupportTransitionDemos/src/main/java/com/example/android/support/transition/widget/BeginDelayedUsage.java
similarity index 100%
rename from samples/SupportTransitionDemos/src/com/example/android/support/transition/widget/BeginDelayedUsage.java
rename to samples/SupportTransitionDemos/src/main/java/com/example/android/support/transition/widget/BeginDelayedUsage.java
diff --git a/samples/SupportTransitionDemos/src/com/example/android/support/transition/widget/ChangeClipBoundsUsage.java b/samples/SupportTransitionDemos/src/main/java/com/example/android/support/transition/widget/ChangeClipBoundsUsage.java
similarity index 100%
rename from samples/SupportTransitionDemos/src/com/example/android/support/transition/widget/ChangeClipBoundsUsage.java
rename to samples/SupportTransitionDemos/src/main/java/com/example/android/support/transition/widget/ChangeClipBoundsUsage.java
diff --git a/samples/SupportTransitionDemos/src/com/example/android/support/transition/widget/ChangeColor.java b/samples/SupportTransitionDemos/src/main/java/com/example/android/support/transition/widget/ChangeColor.java
similarity index 100%
rename from samples/SupportTransitionDemos/src/com/example/android/support/transition/widget/ChangeColor.java
rename to samples/SupportTransitionDemos/src/main/java/com/example/android/support/transition/widget/ChangeColor.java
diff --git a/samples/SupportTransitionDemos/src/com/example/android/support/transition/widget/ChangeImageTransformUsage.java b/samples/SupportTransitionDemos/src/main/java/com/example/android/support/transition/widget/ChangeImageTransformUsage.java
similarity index 100%
rename from samples/SupportTransitionDemos/src/com/example/android/support/transition/widget/ChangeImageTransformUsage.java
rename to samples/SupportTransitionDemos/src/main/java/com/example/android/support/transition/widget/ChangeImageTransformUsage.java
diff --git a/samples/SupportTransitionDemos/src/com/example/android/support/transition/widget/ChangeTransformUsage.java b/samples/SupportTransitionDemos/src/main/java/com/example/android/support/transition/widget/ChangeTransformUsage.java
similarity index 100%
rename from samples/SupportTransitionDemos/src/com/example/android/support/transition/widget/ChangeTransformUsage.java
rename to samples/SupportTransitionDemos/src/main/java/com/example/android/support/transition/widget/ChangeTransformUsage.java
diff --git a/samples/SupportTransitionDemos/src/com/example/android/support/transition/widget/CustomUsage.java b/samples/SupportTransitionDemos/src/main/java/com/example/android/support/transition/widget/CustomUsage.java
similarity index 100%
rename from samples/SupportTransitionDemos/src/com/example/android/support/transition/widget/CustomUsage.java
rename to samples/SupportTransitionDemos/src/main/java/com/example/android/support/transition/widget/CustomUsage.java
diff --git a/samples/SupportTransitionDemos/src/com/example/android/support/transition/widget/ExplodeUsage.java b/samples/SupportTransitionDemos/src/main/java/com/example/android/support/transition/widget/ExplodeUsage.java
similarity index 100%
rename from samples/SupportTransitionDemos/src/com/example/android/support/transition/widget/ExplodeUsage.java
rename to samples/SupportTransitionDemos/src/main/java/com/example/android/support/transition/widget/ExplodeUsage.java
diff --git a/samples/SupportTransitionDemos/src/com/example/android/support/transition/widget/FragmentTransitionUsage.java b/samples/SupportTransitionDemos/src/main/java/com/example/android/support/transition/widget/FragmentTransitionUsage.java
similarity index 100%
rename from samples/SupportTransitionDemos/src/com/example/android/support/transition/widget/FragmentTransitionUsage.java
rename to samples/SupportTransitionDemos/src/main/java/com/example/android/support/transition/widget/FragmentTransitionUsage.java
diff --git a/samples/SupportTransitionDemos/src/com/example/android/support/transition/widget/ReparentImageUsage.java b/samples/SupportTransitionDemos/src/main/java/com/example/android/support/transition/widget/ReparentImageUsage.java
similarity index 100%
rename from samples/SupportTransitionDemos/src/com/example/android/support/transition/widget/ReparentImageUsage.java
rename to samples/SupportTransitionDemos/src/main/java/com/example/android/support/transition/widget/ReparentImageUsage.java
diff --git a/samples/SupportTransitionDemos/src/com/example/android/support/transition/widget/SceneUsage.java b/samples/SupportTransitionDemos/src/main/java/com/example/android/support/transition/widget/SceneUsage.java
similarity index 100%
rename from samples/SupportTransitionDemos/src/com/example/android/support/transition/widget/SceneUsage.java
rename to samples/SupportTransitionDemos/src/main/java/com/example/android/support/transition/widget/SceneUsage.java
diff --git a/samples/SupportTransitionDemos/src/com/example/android/support/transition/widget/SceneUsageBase.java b/samples/SupportTransitionDemos/src/main/java/com/example/android/support/transition/widget/SceneUsageBase.java
similarity index 100%
rename from samples/SupportTransitionDemos/src/com/example/android/support/transition/widget/SceneUsageBase.java
rename to samples/SupportTransitionDemos/src/main/java/com/example/android/support/transition/widget/SceneUsageBase.java
diff --git a/samples/SupportTransitionDemos/src/com/example/android/support/transition/widget/TransitionUsageBase.java b/samples/SupportTransitionDemos/src/main/java/com/example/android/support/transition/widget/TransitionUsageBase.java
similarity index 100%
rename from samples/SupportTransitionDemos/src/com/example/android/support/transition/widget/TransitionUsageBase.java
rename to samples/SupportTransitionDemos/src/main/java/com/example/android/support/transition/widget/TransitionUsageBase.java
diff --git a/samples/SupportTransitionDemos/res/drawable-hdpi/app_sample_code.png b/samples/SupportTransitionDemos/src/main/res/drawable-hdpi/app_sample_code.png
similarity index 100%
rename from samples/SupportTransitionDemos/res/drawable-hdpi/app_sample_code.png
rename to samples/SupportTransitionDemos/src/main/res/drawable-hdpi/app_sample_code.png
Binary files differ
diff --git a/samples/SupportTransitionDemos/res/drawable-hdpi/ic_action_navigation_menu.png b/samples/SupportTransitionDemos/src/main/res/drawable-hdpi/ic_action_navigation_menu.png
similarity index 100%
rename from samples/SupportTransitionDemos/res/drawable-hdpi/ic_action_navigation_menu.png
rename to samples/SupportTransitionDemos/src/main/res/drawable-hdpi/ic_action_navigation_menu.png
Binary files differ
diff --git a/samples/SupportTransitionDemos/res/drawable-hdpi/ic_android.png b/samples/SupportTransitionDemos/src/main/res/drawable-hdpi/ic_android.png
similarity index 100%
rename from samples/SupportTransitionDemos/res/drawable-hdpi/ic_android.png
rename to samples/SupportTransitionDemos/src/main/res/drawable-hdpi/ic_android.png
Binary files differ
diff --git a/samples/SupportTransitionDemos/res/drawable-mdpi/app_sample_code.png b/samples/SupportTransitionDemos/src/main/res/drawable-mdpi/app_sample_code.png
similarity index 100%
rename from samples/SupportTransitionDemos/res/drawable-mdpi/app_sample_code.png
rename to samples/SupportTransitionDemos/src/main/res/drawable-mdpi/app_sample_code.png
Binary files differ
diff --git a/samples/SupportTransitionDemos/res/drawable-mdpi/ic_action_navigation_menu.png b/samples/SupportTransitionDemos/src/main/res/drawable-mdpi/ic_action_navigation_menu.png
similarity index 100%
rename from samples/SupportTransitionDemos/res/drawable-mdpi/ic_action_navigation_menu.png
rename to samples/SupportTransitionDemos/src/main/res/drawable-mdpi/ic_action_navigation_menu.png
Binary files differ
diff --git a/samples/SupportTransitionDemos/res/drawable-mdpi/ic_android.png b/samples/SupportTransitionDemos/src/main/res/drawable-mdpi/ic_android.png
similarity index 100%
rename from samples/SupportTransitionDemos/res/drawable-mdpi/ic_android.png
rename to samples/SupportTransitionDemos/src/main/res/drawable-mdpi/ic_android.png
Binary files differ
diff --git a/samples/SupportTransitionDemos/res/drawable-nodpi/photo.jpg b/samples/SupportTransitionDemos/src/main/res/drawable-nodpi/photo.jpg
similarity index 100%
rename from samples/SupportTransitionDemos/res/drawable-nodpi/photo.jpg
rename to samples/SupportTransitionDemos/src/main/res/drawable-nodpi/photo.jpg
Binary files differ
diff --git a/samples/SupportTransitionDemos/res/drawable-xhdpi/ic_action_navigation_menu.png b/samples/SupportTransitionDemos/src/main/res/drawable-xhdpi/ic_action_navigation_menu.png
similarity index 100%
rename from samples/SupportTransitionDemos/res/drawable-xhdpi/ic_action_navigation_menu.png
rename to samples/SupportTransitionDemos/src/main/res/drawable-xhdpi/ic_action_navigation_menu.png
Binary files differ
diff --git a/samples/SupportTransitionDemos/res/drawable-xhdpi/ic_android.png b/samples/SupportTransitionDemos/src/main/res/drawable-xhdpi/ic_android.png
similarity index 100%
rename from samples/SupportTransitionDemos/res/drawable-xhdpi/ic_android.png
rename to samples/SupportTransitionDemos/src/main/res/drawable-xhdpi/ic_android.png
Binary files differ
diff --git a/samples/SupportTransitionDemos/res/drawable-xxhdpi/ic_action_navigation_menu.png b/samples/SupportTransitionDemos/src/main/res/drawable-xxhdpi/ic_action_navigation_menu.png
similarity index 100%
rename from samples/SupportTransitionDemos/res/drawable-xxhdpi/ic_action_navigation_menu.png
rename to samples/SupportTransitionDemos/src/main/res/drawable-xxhdpi/ic_action_navigation_menu.png
Binary files differ
diff --git a/samples/SupportTransitionDemos/res/drawable-xxhdpi/ic_add.png b/samples/SupportTransitionDemos/src/main/res/drawable-xxhdpi/ic_add.png
similarity index 100%
rename from samples/SupportTransitionDemos/res/drawable-xxhdpi/ic_add.png
rename to samples/SupportTransitionDemos/src/main/res/drawable-xxhdpi/ic_add.png
Binary files differ
diff --git a/samples/SupportTransitionDemos/res/drawable-xxhdpi/ic_android.png b/samples/SupportTransitionDemos/src/main/res/drawable-xxhdpi/ic_android.png
similarity index 100%
rename from samples/SupportTransitionDemos/res/drawable-xxhdpi/ic_android.png
rename to samples/SupportTransitionDemos/src/main/res/drawable-xxhdpi/ic_android.png
Binary files differ
diff --git a/samples/SupportTransitionDemos/res/drawable-xxxhdpi/ic_android.png b/samples/SupportTransitionDemos/src/main/res/drawable-xxxhdpi/ic_android.png
similarity index 100%
rename from samples/SupportTransitionDemos/res/drawable-xxxhdpi/ic_android.png
rename to samples/SupportTransitionDemos/src/main/res/drawable-xxxhdpi/ic_android.png
Binary files differ
diff --git a/samples/SupportTransitionDemos/res/layout/arc_motion.xml b/samples/SupportTransitionDemos/src/main/res/layout/arc_motion.xml
similarity index 100%
rename from samples/SupportTransitionDemos/res/layout/arc_motion.xml
rename to samples/SupportTransitionDemos/src/main/res/layout/arc_motion.xml
diff --git a/samples/SupportTransitionDemos/res/layout/begin_delayed.xml b/samples/SupportTransitionDemos/src/main/res/layout/begin_delayed.xml
similarity index 100%
rename from samples/SupportTransitionDemos/res/layout/begin_delayed.xml
rename to samples/SupportTransitionDemos/src/main/res/layout/begin_delayed.xml
diff --git a/samples/SupportTransitionDemos/res/layout/change_transform.xml b/samples/SupportTransitionDemos/src/main/res/layout/change_transform.xml
similarity index 100%
rename from samples/SupportTransitionDemos/res/layout/change_transform.xml
rename to samples/SupportTransitionDemos/src/main/res/layout/change_transform.xml
diff --git a/samples/SupportTransitionDemos/res/layout/clip_bounds.xml b/samples/SupportTransitionDemos/src/main/res/layout/clip_bounds.xml
similarity index 100%
rename from samples/SupportTransitionDemos/res/layout/clip_bounds.xml
rename to samples/SupportTransitionDemos/src/main/res/layout/clip_bounds.xml
diff --git a/samples/SupportTransitionDemos/res/layout/custom0.xml b/samples/SupportTransitionDemos/src/main/res/layout/custom0.xml
similarity index 100%
rename from samples/SupportTransitionDemos/res/layout/custom0.xml
rename to samples/SupportTransitionDemos/src/main/res/layout/custom0.xml
diff --git a/samples/SupportTransitionDemos/res/layout/custom1.xml b/samples/SupportTransitionDemos/src/main/res/layout/custom1.xml
similarity index 100%
rename from samples/SupportTransitionDemos/res/layout/custom1.xml
rename to samples/SupportTransitionDemos/src/main/res/layout/custom1.xml
diff --git a/samples/SupportTransitionDemos/res/layout/custom2.xml b/samples/SupportTransitionDemos/src/main/res/layout/custom2.xml
similarity index 100%
rename from samples/SupportTransitionDemos/res/layout/custom2.xml
rename to samples/SupportTransitionDemos/src/main/res/layout/custom2.xml
diff --git a/samples/SupportTransitionDemos/res/layout/explode.xml b/samples/SupportTransitionDemos/src/main/res/layout/explode.xml
similarity index 100%
rename from samples/SupportTransitionDemos/res/layout/explode.xml
rename to samples/SupportTransitionDemos/src/main/res/layout/explode.xml
diff --git a/samples/SupportTransitionDemos/res/layout/fragment_transition.xml b/samples/SupportTransitionDemos/src/main/res/layout/fragment_transition.xml
similarity index 100%
rename from samples/SupportTransitionDemos/res/layout/fragment_transition.xml
rename to samples/SupportTransitionDemos/src/main/res/layout/fragment_transition.xml
diff --git a/samples/SupportTransitionDemos/res/layout/fragment_transition_first.xml b/samples/SupportTransitionDemos/src/main/res/layout/fragment_transition_first.xml
similarity index 100%
rename from samples/SupportTransitionDemos/res/layout/fragment_transition_first.xml
rename to samples/SupportTransitionDemos/src/main/res/layout/fragment_transition_first.xml
diff --git a/samples/SupportTransitionDemos/res/layout/fragment_transition_second.xml b/samples/SupportTransitionDemos/src/main/res/layout/fragment_transition_second.xml
similarity index 100%
rename from samples/SupportTransitionDemos/res/layout/fragment_transition_second.xml
rename to samples/SupportTransitionDemos/src/main/res/layout/fragment_transition_second.xml
diff --git a/samples/SupportTransitionDemos/res/layout/image_transform.xml b/samples/SupportTransitionDemos/src/main/res/layout/image_transform.xml
similarity index 100%
rename from samples/SupportTransitionDemos/res/layout/image_transform.xml
rename to samples/SupportTransitionDemos/src/main/res/layout/image_transform.xml
diff --git a/samples/SupportTransitionDemos/res/layout/red_square.xml b/samples/SupportTransitionDemos/src/main/res/layout/red_square.xml
similarity index 100%
rename from samples/SupportTransitionDemos/res/layout/red_square.xml
rename to samples/SupportTransitionDemos/src/main/res/layout/red_square.xml
diff --git a/samples/SupportTransitionDemos/res/layout/reparent_image.xml b/samples/SupportTransitionDemos/src/main/res/layout/reparent_image.xml
similarity index 100%
rename from samples/SupportTransitionDemos/res/layout/reparent_image.xml
rename to samples/SupportTransitionDemos/src/main/res/layout/reparent_image.xml
diff --git a/samples/SupportTransitionDemos/res/layout/scene0.xml b/samples/SupportTransitionDemos/src/main/res/layout/scene0.xml
similarity index 100%
rename from samples/SupportTransitionDemos/res/layout/scene0.xml
rename to samples/SupportTransitionDemos/src/main/res/layout/scene0.xml
diff --git a/samples/SupportTransitionDemos/res/layout/scene1.xml b/samples/SupportTransitionDemos/src/main/res/layout/scene1.xml
similarity index 100%
rename from samples/SupportTransitionDemos/res/layout/scene1.xml
rename to samples/SupportTransitionDemos/src/main/res/layout/scene1.xml
diff --git a/samples/SupportTransitionDemos/res/layout/scene_usage.xml b/samples/SupportTransitionDemos/src/main/res/layout/scene_usage.xml
similarity index 100%
rename from samples/SupportTransitionDemos/res/layout/scene_usage.xml
rename to samples/SupportTransitionDemos/src/main/res/layout/scene_usage.xml
diff --git a/samples/SupportTransitionDemos/res/menu/basic_usage.xml b/samples/SupportTransitionDemos/src/main/res/menu/basic_usage.xml
similarity index 100%
rename from samples/SupportTransitionDemos/res/menu/basic_usage.xml
rename to samples/SupportTransitionDemos/src/main/res/menu/basic_usage.xml
diff --git a/samples/SupportTransitionDemos/res/values/dimens.xml b/samples/SupportTransitionDemos/src/main/res/values/dimens.xml
similarity index 100%
rename from samples/SupportTransitionDemos/res/values/dimens.xml
rename to samples/SupportTransitionDemos/src/main/res/values/dimens.xml
diff --git a/samples/SupportTransitionDemos/res/values/strings.xml b/samples/SupportTransitionDemos/src/main/res/values/strings.xml
similarity index 100%
rename from samples/SupportTransitionDemos/res/values/strings.xml
rename to samples/SupportTransitionDemos/src/main/res/values/strings.xml
diff --git a/samples/SupportTransitionDemos/res/values/styles.xml b/samples/SupportTransitionDemos/src/main/res/values/styles.xml
similarity index 100%
rename from samples/SupportTransitionDemos/res/values/styles.xml
rename to samples/SupportTransitionDemos/src/main/res/values/styles.xml
diff --git a/samples/SupportVectorDrawableDemos/build.gradle b/samples/SupportVectorDrawableDemos/build.gradle
index c47967c..e9c9d2c 100644
--- a/samples/SupportVectorDrawableDemos/build.gradle
+++ b/samples/SupportVectorDrawableDemos/build.gradle
@@ -31,12 +31,6 @@
vectorDrawables.useSupportLibrary = true
}
- sourceSets {
- main.manifest.srcFile 'AndroidManifest.xml'
- main.java.srcDirs = ['src']
- main.res.srcDirs = ['res']
- }
-
signingConfigs {
debug {
// Use a local debug keystore to avoid build server issues.
diff --git a/samples/SupportVectorDrawableDemos/AndroidManifest.xml b/samples/SupportVectorDrawableDemos/src/main/AndroidManifest.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/AndroidManifest.xml
rename to samples/SupportVectorDrawableDemos/src/main/AndroidManifest.xml
diff --git a/samples/SupportVectorDrawableDemos/src/com/example/android/support/vectordrawable/app/AVDCListenerDemo.java b/samples/SupportVectorDrawableDemos/src/main/java/com/example/android/support/vectordrawable/app/AVDCListenerDemo.java
similarity index 100%
rename from samples/SupportVectorDrawableDemos/src/com/example/android/support/vectordrawable/app/AVDCListenerDemo.java
rename to samples/SupportVectorDrawableDemos/src/main/java/com/example/android/support/vectordrawable/app/AVDCListenerDemo.java
diff --git a/samples/SupportVectorDrawableDemos/src/com/example/android/support/vectordrawable/app/SimpleAnimatedVectorDrawable.java b/samples/SupportVectorDrawableDemos/src/main/java/com/example/android/support/vectordrawable/app/SimpleAnimatedVectorDrawable.java
similarity index 100%
rename from samples/SupportVectorDrawableDemos/src/com/example/android/support/vectordrawable/app/SimpleAnimatedVectorDrawable.java
rename to samples/SupportVectorDrawableDemos/src/main/java/com/example/android/support/vectordrawable/app/SimpleAnimatedVectorDrawable.java
diff --git a/samples/SupportVectorDrawableDemos/src/com/example/android/support/vectordrawable/app/SimpleStaticVectorDrawable.java b/samples/SupportVectorDrawableDemos/src/main/java/com/example/android/support/vectordrawable/app/SimpleStaticVectorDrawable.java
similarity index 100%
rename from samples/SupportVectorDrawableDemos/src/com/example/android/support/vectordrawable/app/SimpleStaticVectorDrawable.java
rename to samples/SupportVectorDrawableDemos/src/main/java/com/example/android/support/vectordrawable/app/SimpleStaticVectorDrawable.java
diff --git a/samples/SupportVectorDrawableDemos/src/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java b/samples/SupportVectorDrawableDemos/src/main/java/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java
similarity index 100%
rename from samples/SupportVectorDrawableDemos/src/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java
rename to samples/SupportVectorDrawableDemos/src/main/java/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java
diff --git a/samples/SupportVectorDrawableDemos/res/anim/alpha_animation_progress_bar.xml b/samples/SupportVectorDrawableDemos/src/main/res/anim/alpha_animation_progress_bar.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/anim/alpha_animation_progress_bar.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/anim/alpha_animation_progress_bar.xml
diff --git a/samples/SupportVectorDrawableDemos/res/anim/animation_grouping_1_control_points_interpolator.xml b/samples/SupportVectorDrawableDemos/src/main/res/anim/animation_grouping_1_control_points_interpolator.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/anim/animation_grouping_1_control_points_interpolator.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/anim/animation_grouping_1_control_points_interpolator.xml
diff --git a/samples/SupportVectorDrawableDemos/res/anim/animation_grouping_1_path_interpolator.xml b/samples/SupportVectorDrawableDemos/src/main/res/anim/animation_grouping_1_path_interpolator.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/anim/animation_grouping_1_path_interpolator.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/anim/animation_grouping_1_path_interpolator.xml
diff --git a/samples/SupportVectorDrawableDemos/res/anim/animation_grouping_1_single_control_point_interpolator.xml b/samples/SupportVectorDrawableDemos/src/main/res/anim/animation_grouping_1_single_control_point_interpolator.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/anim/animation_grouping_1_single_control_point_interpolator.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/anim/animation_grouping_1_single_control_point_interpolator.xml
diff --git a/samples/SupportVectorDrawableDemos/res/anim/ic_hourglass_animation_fill_outlines.xml b/samples/SupportVectorDrawableDemos/src/main/res/anim/ic_hourglass_animation_fill_outlines.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/anim/ic_hourglass_animation_fill_outlines.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/anim/ic_hourglass_animation_fill_outlines.xml
diff --git a/samples/SupportVectorDrawableDemos/res/anim/ic_hourglass_animation_hourglass_frame.xml b/samples/SupportVectorDrawableDemos/src/main/res/anim/ic_hourglass_animation_hourglass_frame.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/anim/ic_hourglass_animation_hourglass_frame.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/anim/ic_hourglass_animation_hourglass_frame.xml
diff --git a/samples/SupportVectorDrawableDemos/res/anim/ic_hourglass_animation_mask_1.xml b/samples/SupportVectorDrawableDemos/src/main/res/anim/ic_hourglass_animation_mask_1.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/anim/ic_hourglass_animation_mask_1.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/anim/ic_hourglass_animation_mask_1.xml
diff --git a/samples/SupportVectorDrawableDemos/res/anim/ic_signal_airplane_v2_animation_cross_1.xml b/samples/SupportVectorDrawableDemos/src/main/res/anim/ic_signal_airplane_v2_animation_cross_1.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/anim/ic_signal_airplane_v2_animation_cross_1.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/anim/ic_signal_airplane_v2_animation_cross_1.xml
diff --git a/samples/SupportVectorDrawableDemos/res/anim/ic_signal_airplane_v2_animation_ic_signal_airplane.xml b/samples/SupportVectorDrawableDemos/src/main/res/anim/ic_signal_airplane_v2_animation_ic_signal_airplane.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/anim/ic_signal_airplane_v2_animation_ic_signal_airplane.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/anim/ic_signal_airplane_v2_animation_ic_signal_airplane.xml
diff --git a/samples/SupportVectorDrawableDemos/res/anim/ic_signal_airplane_v2_animation_mask_2.xml b/samples/SupportVectorDrawableDemos/src/main/res/anim/ic_signal_airplane_v2_animation_mask_2.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/anim/ic_signal_airplane_v2_animation_mask_2.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/anim/ic_signal_airplane_v2_animation_mask_2.xml
diff --git a/samples/SupportVectorDrawableDemos/res/anim/ic_signal_airplane_v2_animation_path_1_1.xml b/samples/SupportVectorDrawableDemos/src/main/res/anim/ic_signal_airplane_v2_animation_path_1_1.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/anim/ic_signal_airplane_v2_animation_path_1_1.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/anim/ic_signal_airplane_v2_animation_path_1_1.xml
diff --git a/samples/SupportVectorDrawableDemos/res/anim/path_motion.xml b/samples/SupportVectorDrawableDemos/src/main/res/anim/path_motion.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/anim/path_motion.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/anim/path_motion.xml
diff --git a/samples/SupportVectorDrawableDemos/res/anim/path_motion_object.xml b/samples/SupportVectorDrawableDemos/src/main/res/anim/path_motion_object.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/anim/path_motion_object.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/anim/path_motion_object.xml
diff --git a/samples/SupportVectorDrawableDemos/res/anim/trim_path_animation_progress_bar.xml b/samples/SupportVectorDrawableDemos/src/main/res/anim/trim_path_animation_progress_bar.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/anim/trim_path_animation_progress_bar.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/anim/trim_path_animation_progress_bar.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/animation_vector_drawable_grouping_1.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/animation_vector_drawable_grouping_1.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/animation_vector_drawable_grouping_1.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/animation_vector_drawable_grouping_1.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/animation_vector_drawable_grouping_1_path_motion.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/animation_vector_drawable_grouping_1_path_motion.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/animation_vector_drawable_grouping_1_path_motion.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/animation_vector_drawable_grouping_1_path_motion.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/animation_vector_drawable_grouping_1_path_motion_object.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/animation_vector_drawable_grouping_1_path_motion_object.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/animation_vector_drawable_grouping_1_path_motion_object.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/animation_vector_drawable_grouping_1_path_motion_object.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/animation_vector_drawable_grouping_accelerate.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/animation_vector_drawable_grouping_accelerate.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/animation_vector_drawable_grouping_accelerate.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/animation_vector_drawable_grouping_accelerate.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/animation_vector_drawable_grouping_decelerate.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/animation_vector_drawable_grouping_decelerate.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/animation_vector_drawable_grouping_decelerate.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/animation_vector_drawable_grouping_decelerate.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/animation_vector_progress_bar.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/animation_vector_progress_bar.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/animation_vector_progress_bar.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/animation_vector_progress_bar.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/app_sample_code.png b/samples/SupportVectorDrawableDemos/src/main/res/drawable/app_sample_code.png
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/app_sample_code.png
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/app_sample_code.png
Binary files differ
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/btn_radio_on_to_off_bundle.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/btn_radio_on_to_off_bundle.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/btn_radio_on_to_off_bundle.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/btn_radio_on_to_off_bundle.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/ic_hourglass.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/ic_hourglass.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/ic_hourglass.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/ic_hourglass.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/ic_hourglass_animation.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/ic_hourglass_animation.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/ic_hourglass_animation.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/ic_hourglass_animation.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/ic_signal_airplane_v2.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/ic_signal_airplane_v2.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/ic_signal_airplane_v2.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/ic_signal_airplane_v2.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/ic_signal_airplane_v2_animation.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/ic_signal_airplane_v2_animation.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/ic_signal_airplane_v2_animation.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/ic_signal_airplane_v2_animation.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/vector_drawable01.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable01.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/vector_drawable01.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable01.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/vector_drawable02.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable02.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/vector_drawable02.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable02.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/vector_drawable03.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable03.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/vector_drawable03.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable03.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/vector_drawable04.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable04.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/vector_drawable04.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable04.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/vector_drawable05.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable05.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/vector_drawable05.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable05.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/vector_drawable06.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable06.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/vector_drawable06.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable06.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/vector_drawable07.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable07.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/vector_drawable07.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable07.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/vector_drawable08.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable08.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/vector_drawable08.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable08.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/vector_drawable09.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable09.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/vector_drawable09.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable09.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/vector_drawable10.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable10.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/vector_drawable10.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable10.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/vector_drawable11.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable11.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/vector_drawable11.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable11.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/vector_drawable12.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable12.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/vector_drawable12.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable12.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/vector_drawable13.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable13.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/vector_drawable13.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable13.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/vector_drawable14.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable14.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/vector_drawable14.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable14.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/vector_drawable15.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable15.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/vector_drawable15.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable15.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/vector_drawable16.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable16.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/vector_drawable16.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable16.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/vector_drawable17.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable17.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/vector_drawable17.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable17.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/vector_drawable18.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable18.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/vector_drawable18.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable18.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/vector_drawable19.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable19.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/vector_drawable19.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable19.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/vector_drawable20.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable20.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/vector_drawable20.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable20.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/vector_drawable21.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable21.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/vector_drawable21.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable21.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/vector_drawable22.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable22.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/vector_drawable22.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable22.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/vector_drawable23.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable23.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/vector_drawable23.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable23.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/vector_drawable24.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable24.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/vector_drawable24.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable24.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/vector_drawable25.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable25.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/vector_drawable25.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable25.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/vector_drawable26.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable26.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/vector_drawable26.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable26.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/vector_drawable27.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable27.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/vector_drawable27.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable27.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/vector_drawable28.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable28.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/vector_drawable28.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable28.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/vector_drawable29.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable29.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/vector_drawable29.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable29.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/vector_drawable30.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable30.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/vector_drawable30.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable30.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/vector_drawable_grouping_1.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable_grouping_1.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/vector_drawable_grouping_1.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable_grouping_1.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/vector_drawable_progress_bar.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable_progress_bar.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/vector_drawable_progress_bar.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable_progress_bar.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/vector_drawable_scale0.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable_scale0.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/vector_drawable_scale0.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable_scale0.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/vector_drawable_scale1.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable_scale1.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/vector_drawable_scale1.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable_scale1.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/vector_drawable_scale2.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable_scale2.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/vector_drawable_scale2.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable_scale2.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/vector_drawable_scale3.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable_scale3.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/vector_drawable_scale3.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_drawable_scale3.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/vector_test01.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_test01.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/vector_test01.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_test01.xml
diff --git a/samples/SupportVectorDrawableDemos/res/drawable/vector_test02.xml b/samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_test02.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/drawable/vector_test02.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/drawable/vector_test02.xml
diff --git a/samples/SupportVectorDrawableDemos/res/interpolator/control_points_interpolator.xml b/samples/SupportVectorDrawableDemos/src/main/res/interpolator/control_points_interpolator.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/interpolator/control_points_interpolator.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/interpolator/control_points_interpolator.xml
diff --git a/samples/SupportVectorDrawableDemos/res/interpolator/path_interpolator.xml b/samples/SupportVectorDrawableDemos/src/main/res/interpolator/path_interpolator.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/interpolator/path_interpolator.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/interpolator/path_interpolator.xml
diff --git a/samples/SupportVectorDrawableDemos/res/interpolator/single_control_point_interpolator.xml b/samples/SupportVectorDrawableDemos/src/main/res/interpolator/single_control_point_interpolator.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/interpolator/single_control_point_interpolator.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/interpolator/single_control_point_interpolator.xml
diff --git a/samples/SupportVectorDrawableDemos/res/layout/avdc_listener.xml b/samples/SupportVectorDrawableDemos/src/main/res/layout/avdc_listener.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/layout/avdc_listener.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/layout/avdc_listener.xml
diff --git a/samples/SupportVectorDrawableDemos/res/raw/vector_drawable01.xml b/samples/SupportVectorDrawableDemos/src/main/res/raw/vector_drawable01.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/raw/vector_drawable01.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/raw/vector_drawable01.xml
diff --git a/samples/SupportVectorDrawableDemos/res/values/colors.xml b/samples/SupportVectorDrawableDemos/src/main/res/values/colors.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/values/colors.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/values/colors.xml
diff --git a/samples/SupportVectorDrawableDemos/res/values/strings.xml b/samples/SupportVectorDrawableDemos/src/main/res/values/strings.xml
similarity index 100%
rename from samples/SupportVectorDrawableDemos/res/values/strings.xml
rename to samples/SupportVectorDrawableDemos/src/main/res/values/strings.xml
diff --git a/samples/SupportWearDemos/build.gradle b/samples/SupportWearDemos/build.gradle
index e980793..99223f9 100644
--- a/samples/SupportWearDemos/build.gradle
+++ b/samples/SupportWearDemos/build.gradle
@@ -28,12 +28,6 @@
targetSdkVersion project.ext.currentSdk
}
- sourceSets {
- main.manifest.srcFile 'AndroidManifest.xml'
- main.java.srcDirs = ['src']
- main.res.srcDirs = ['res']
- }
-
signingConfigs {
debug {
// Use a local debug keystore to avoid build server issues.
diff --git a/samples/SupportWearDemos/AndroidManifest.xml b/samples/SupportWearDemos/src/main/AndroidManifest.xml
similarity index 86%
rename from samples/SupportWearDemos/AndroidManifest.xml
rename to samples/SupportWearDemos/src/main/AndroidManifest.xml
index e1309ae9..957a539 100644
--- a/samples/SupportWearDemos/AndroidManifest.xml
+++ b/samples/SupportWearDemos/src/main/AndroidManifest.xml
@@ -18,6 +18,9 @@
package="com.example.android.support.wear" >
<uses-feature android:name="android.hardware.type.watch" />
+ <!-- Required for ambient mode support. -->
+ <uses-permission android:name="android.permission.WAKE_LOCK" />
+
<application android:icon="@drawable/app_sample_code" android:label="SupportWearDemos"
android:theme="@android:style/Theme.DeviceDefault">
<activity android:name=".app.SimpleWearableRecyclerViewDemo" />
@@ -25,12 +28,15 @@
<activity android:name=".app.CircularProgressLayoutDemo" />
<activity android:name=".app.RoundedDrawableDemo" />
<activity android:name=".app.drawers.WearableDrawersDemo" android:exported="true" />
+ <activity android:name=".app.AmbientModeDemo" />
<activity android:name=".app.MainDemoActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
+
+ <uses-library android:name="com.google.android.wearable" android:required="true" />
</application>
</manifest>
diff --git a/samples/SupportWearDemos/src/main/java/com/example/android/support/wear/app/AmbientModeDemo.java b/samples/SupportWearDemos/src/main/java/com/example/android/support/wear/app/AmbientModeDemo.java
new file mode 100644
index 0000000..0e7d3de
--- /dev/null
+++ b/samples/SupportWearDemos/src/main/java/com/example/android/support/wear/app/AmbientModeDemo.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.android.support.wear.app;
+
+import android.graphics.Color;
+import android.os.Bundle;
+import android.support.v4.app.FragmentActivity;
+import android.support.wear.ambient.AmbientMode;
+import android.widget.TextView;
+
+import com.example.android.support.wear.R;
+
+/**
+ * Main activity for the AmbientMode demo.
+ */
+public class AmbientModeDemo extends FragmentActivity implements
+ AmbientMode.AmbientCallbackProvider {
+ private TextView mStateTextView;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.ambient_demo);
+ mStateTextView = findViewById(R.id.ambient_text);
+ AmbientMode.AmbientController controller = AmbientMode.attachAmbientSupport(this);
+ }
+
+ @Override
+ public AmbientMode.AmbientCallback getAmbientCallback() {
+ return new MyAmbientCallback();
+ }
+
+ private class MyAmbientCallback extends AmbientMode.AmbientCallback {
+
+ @Override
+ public void onEnterAmbient(Bundle ambientDetails) {
+ // Handle entering ambient mode
+ mStateTextView.setText("Ambient");
+ mStateTextView.setTextColor(Color.WHITE);
+ mStateTextView.getPaint().setAntiAlias(false);
+ }
+
+ @Override
+ public void onExitAmbient() {
+ // Handle exiting ambient mode
+ mStateTextView.setText("Interactive");
+ mStateTextView.setTextColor(Color.GREEN);
+ mStateTextView.getPaint().setAntiAlias(true);
+ }
+ }
+}
diff --git a/samples/SupportWearDemos/src/com/example/android/support/wear/app/CircularProgressLayoutDemo.java b/samples/SupportWearDemos/src/main/java/com/example/android/support/wear/app/CircularProgressLayoutDemo.java
similarity index 100%
rename from samples/SupportWearDemos/src/com/example/android/support/wear/app/CircularProgressLayoutDemo.java
rename to samples/SupportWearDemos/src/main/java/com/example/android/support/wear/app/CircularProgressLayoutDemo.java
diff --git a/samples/SupportWearDemos/src/com/example/android/support/wear/app/MainDemoActivity.java b/samples/SupportWearDemos/src/main/java/com/example/android/support/wear/app/MainDemoActivity.java
similarity index 97%
rename from samples/SupportWearDemos/src/com/example/android/support/wear/app/MainDemoActivity.java
rename to samples/SupportWearDemos/src/main/java/com/example/android/support/wear/app/MainDemoActivity.java
index 398adc1..0227559 100644
--- a/samples/SupportWearDemos/src/com/example/android/support/wear/app/MainDemoActivity.java
+++ b/samples/SupportWearDemos/src/main/java/com/example/android/support/wear/app/MainDemoActivity.java
@@ -62,6 +62,8 @@
this, WearableDrawersDemo.class));
contentMap.put("Rounded Drawable", new Intent(
this, RoundedDrawableDemo.class));
+ contentMap.put("Ambient Fragment", new Intent(
+ this, AmbientModeDemo.class));
return contentMap;
}
diff --git a/samples/SupportWearDemos/src/com/example/android/support/wear/app/RoundedDrawableDemo.java b/samples/SupportWearDemos/src/main/java/com/example/android/support/wear/app/RoundedDrawableDemo.java
similarity index 100%
rename from samples/SupportWearDemos/src/com/example/android/support/wear/app/RoundedDrawableDemo.java
rename to samples/SupportWearDemos/src/main/java/com/example/android/support/wear/app/RoundedDrawableDemo.java
diff --git a/samples/SupportWearDemos/src/com/example/android/support/wear/app/SimpleWearableRecyclerViewDemo.java b/samples/SupportWearDemos/src/main/java/com/example/android/support/wear/app/SimpleWearableRecyclerViewDemo.java
similarity index 100%
rename from samples/SupportWearDemos/src/com/example/android/support/wear/app/SimpleWearableRecyclerViewDemo.java
rename to samples/SupportWearDemos/src/main/java/com/example/android/support/wear/app/SimpleWearableRecyclerViewDemo.java
diff --git a/samples/SupportWearDemos/src/com/example/android/support/wear/app/WearableSwitchDemo.java b/samples/SupportWearDemos/src/main/java/com/example/android/support/wear/app/WearableSwitchDemo.java
similarity index 100%
rename from samples/SupportWearDemos/src/com/example/android/support/wear/app/WearableSwitchDemo.java
rename to samples/SupportWearDemos/src/main/java/com/example/android/support/wear/app/WearableSwitchDemo.java
diff --git a/samples/SupportWearDemos/src/com/example/android/support/wear/app/drawers/DemoNavDrawerAdapter.java b/samples/SupportWearDemos/src/main/java/com/example/android/support/wear/app/drawers/DemoNavDrawerAdapter.java
similarity index 100%
rename from samples/SupportWearDemos/src/com/example/android/support/wear/app/drawers/DemoNavDrawerAdapter.java
rename to samples/SupportWearDemos/src/main/java/com/example/android/support/wear/app/drawers/DemoNavDrawerAdapter.java
diff --git a/samples/SupportWearDemos/src/com/example/android/support/wear/app/drawers/FrameLayoutFragment.java b/samples/SupportWearDemos/src/main/java/com/example/android/support/wear/app/drawers/FrameLayoutFragment.java
similarity index 100%
rename from samples/SupportWearDemos/src/com/example/android/support/wear/app/drawers/FrameLayoutFragment.java
rename to samples/SupportWearDemos/src/main/java/com/example/android/support/wear/app/drawers/FrameLayoutFragment.java
diff --git a/samples/SupportWearDemos/src/com/example/android/support/wear/app/drawers/NavItem.java b/samples/SupportWearDemos/src/main/java/com/example/android/support/wear/app/drawers/NavItem.java
similarity index 100%
rename from samples/SupportWearDemos/src/com/example/android/support/wear/app/drawers/NavItem.java
rename to samples/SupportWearDemos/src/main/java/com/example/android/support/wear/app/drawers/NavItem.java
diff --git a/samples/SupportWearDemos/src/com/example/android/support/wear/app/drawers/ScrollViewFragment.java b/samples/SupportWearDemos/src/main/java/com/example/android/support/wear/app/drawers/ScrollViewFragment.java
similarity index 100%
rename from samples/SupportWearDemos/src/com/example/android/support/wear/app/drawers/ScrollViewFragment.java
rename to samples/SupportWearDemos/src/main/java/com/example/android/support/wear/app/drawers/ScrollViewFragment.java
diff --git a/samples/SupportWearDemos/src/com/example/android/support/wear/app/drawers/WearableDrawersDemo.java b/samples/SupportWearDemos/src/main/java/com/example/android/support/wear/app/drawers/WearableDrawersDemo.java
similarity index 100%
rename from samples/SupportWearDemos/src/com/example/android/support/wear/app/drawers/WearableDrawersDemo.java
rename to samples/SupportWearDemos/src/main/java/com/example/android/support/wear/app/drawers/WearableDrawersDemo.java
diff --git a/samples/SupportWearDemos/res/drawable/app_sample_code.png b/samples/SupportWearDemos/src/main/res/drawable/app_sample_code.png
similarity index 100%
rename from samples/SupportWearDemos/res/drawable/app_sample_code.png
rename to samples/SupportWearDemos/src/main/res/drawable/app_sample_code.png
Binary files differ
diff --git a/samples/SupportWearDemos/res/drawable/rd_example.xml b/samples/SupportWearDemos/src/main/res/drawable/rd_example.xml
similarity index 100%
rename from samples/SupportWearDemos/res/drawable/rd_example.xml
rename to samples/SupportWearDemos/src/main/res/drawable/rd_example.xml
diff --git a/samples/SupportWearDemos/res/drawable/rd_inner_drawable.xml b/samples/SupportWearDemos/src/main/res/drawable/rd_inner_drawable.xml
similarity index 100%
rename from samples/SupportWearDemos/res/drawable/rd_inner_drawable.xml
rename to samples/SupportWearDemos/src/main/res/drawable/rd_inner_drawable.xml
diff --git a/samples/SupportWearDemos/src/main/res/layout/ambient_demo.xml b/samples/SupportWearDemos/src/main/res/layout/ambient_demo.xml
new file mode 100644
index 0000000..ed7c01f
--- /dev/null
+++ b/samples/SupportWearDemos/src/main/res/layout/ambient_demo.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2017 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+<merge xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" >
+ <TextView
+ android:id="@+id/ambient_text"
+ android:layout_gravity="center"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:textColor="@android:color/holo_orange_dark"
+ android:text="hello world!!"/>
+</merge>
diff --git a/samples/SupportWearDemos/res/layout/cpl_demo.xml b/samples/SupportWearDemos/src/main/res/layout/cpl_demo.xml
similarity index 100%
rename from samples/SupportWearDemos/res/layout/cpl_demo.xml
rename to samples/SupportWearDemos/src/main/res/layout/cpl_demo.xml
diff --git a/samples/SupportWearDemos/res/layout/rd_demo.xml b/samples/SupportWearDemos/src/main/res/layout/rd_demo.xml
similarity index 100%
rename from samples/SupportWearDemos/res/layout/rd_demo.xml
rename to samples/SupportWearDemos/src/main/res/layout/rd_demo.xml
diff --git a/samples/SupportWearDemos/res/layout/switch_demo.xml b/samples/SupportWearDemos/src/main/res/layout/switch_demo.xml
similarity index 100%
rename from samples/SupportWearDemos/res/layout/switch_demo.xml
rename to samples/SupportWearDemos/src/main/res/layout/switch_demo.xml
diff --git a/samples/SupportWearDemos/res/layout/wearable_drawers_demo.xml b/samples/SupportWearDemos/src/main/res/layout/wearable_drawers_demo.xml
similarity index 100%
rename from samples/SupportWearDemos/res/layout/wearable_drawers_demo.xml
rename to samples/SupportWearDemos/src/main/res/layout/wearable_drawers_demo.xml
diff --git a/samples/SupportWearDemos/res/layout/wearable_drawers_frame_layout_demo.xml b/samples/SupportWearDemos/src/main/res/layout/wearable_drawers_frame_layout_demo.xml
similarity index 100%
rename from samples/SupportWearDemos/res/layout/wearable_drawers_frame_layout_demo.xml
rename to samples/SupportWearDemos/src/main/res/layout/wearable_drawers_frame_layout_demo.xml
diff --git a/samples/SupportWearDemos/res/layout/wearable_drawers_scroll_view_demo.xml b/samples/SupportWearDemos/src/main/res/layout/wearable_drawers_scroll_view_demo.xml
similarity index 100%
rename from samples/SupportWearDemos/res/layout/wearable_drawers_scroll_view_demo.xml
rename to samples/SupportWearDemos/src/main/res/layout/wearable_drawers_scroll_view_demo.xml
diff --git a/samples/SupportWearDemos/res/layout/wrv_demo.xml b/samples/SupportWearDemos/src/main/res/layout/wrv_demo.xml
similarity index 100%
rename from samples/SupportWearDemos/res/layout/wrv_demo.xml
rename to samples/SupportWearDemos/src/main/res/layout/wrv_demo.xml
diff --git a/samples/SupportWearDemos/res/menu/action_drawer_menu.xml b/samples/SupportWearDemos/src/main/res/menu/action_drawer_menu.xml
similarity index 100%
rename from samples/SupportWearDemos/res/menu/action_drawer_menu.xml
rename to samples/SupportWearDemos/src/main/res/menu/action_drawer_menu.xml
diff --git a/samples/SupportWearDemos/res/values/colors.xml b/samples/SupportWearDemos/src/main/res/values/colors.xml
similarity index 100%
rename from samples/SupportWearDemos/res/values/colors.xml
rename to samples/SupportWearDemos/src/main/res/values/colors.xml
diff --git a/samples/SupportWearDemos/res/values/dimens.xml b/samples/SupportWearDemos/src/main/res/values/dimens.xml
similarity index 100%
rename from samples/SupportWearDemos/res/values/dimens.xml
rename to samples/SupportWearDemos/src/main/res/values/dimens.xml
diff --git a/samples/SupportWearDemos/res/values/strings.xml b/samples/SupportWearDemos/src/main/res/values/strings.xml
similarity index 100%
rename from samples/SupportWearDemos/res/values/strings.xml
rename to samples/SupportWearDemos/src/main/res/values/strings.xml
diff --git a/transition/AndroidManifest.xml b/transition/AndroidManifest.xml
index 1b70510..40b77e2 100644
--- a/transition/AndroidManifest.xml
+++ b/transition/AndroidManifest.xml
@@ -16,8 +16,4 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.support.transition">
<uses-sdk android:minSdkVersion="14"/>
- <application>
- <meta-data android:name="android.support.transition.VERSION"
- android:value="${support-version}" />
- </application>
</manifest>
diff --git a/transition/OWNERS b/transition/OWNERS
new file mode 100644
index 0000000..7bb4398
--- /dev/null
+++ b/transition/OWNERS
@@ -0,0 +1 @@
+yaraki@google.com
\ No newline at end of file
diff --git a/transition/api/26.1.0.txt b/transition/api/26.1.0.txt
new file mode 100644
index 0000000..805fcfc
--- /dev/null
+++ b/transition/api/26.1.0.txt
@@ -0,0 +1,280 @@
+package android.support.transition {
+
+ public class ArcMotion extends android.support.transition.PathMotion {
+ ctor public ArcMotion();
+ ctor public ArcMotion(android.content.Context, android.util.AttributeSet);
+ method public float getMaximumAngle();
+ method public float getMinimumHorizontalAngle();
+ method public float getMinimumVerticalAngle();
+ method public android.graphics.Path getPath(float, float, float, float);
+ method public void setMaximumAngle(float);
+ method public void setMinimumHorizontalAngle(float);
+ method public void setMinimumVerticalAngle(float);
+ }
+
+ public class AutoTransition extends android.support.transition.TransitionSet {
+ ctor public AutoTransition();
+ ctor public AutoTransition(android.content.Context, android.util.AttributeSet);
+ }
+
+ public class ChangeBounds extends android.support.transition.Transition {
+ ctor public ChangeBounds();
+ ctor public ChangeBounds(android.content.Context, android.util.AttributeSet);
+ method public void captureEndValues(android.support.transition.TransitionValues);
+ method public void captureStartValues(android.support.transition.TransitionValues);
+ method public boolean getResizeClip();
+ method public void setResizeClip(boolean);
+ }
+
+ public class ChangeClipBounds extends android.support.transition.Transition {
+ ctor public ChangeClipBounds();
+ ctor public ChangeClipBounds(android.content.Context, android.util.AttributeSet);
+ method public void captureEndValues(android.support.transition.TransitionValues);
+ method public void captureStartValues(android.support.transition.TransitionValues);
+ }
+
+ public class ChangeImageTransform extends android.support.transition.Transition {
+ ctor public ChangeImageTransform();
+ ctor public ChangeImageTransform(android.content.Context, android.util.AttributeSet);
+ method public void captureEndValues(android.support.transition.TransitionValues);
+ method public void captureStartValues(android.support.transition.TransitionValues);
+ }
+
+ public class ChangeScroll extends android.support.transition.Transition {
+ ctor public ChangeScroll();
+ ctor public ChangeScroll(android.content.Context, android.util.AttributeSet);
+ method public void captureEndValues(android.support.transition.TransitionValues);
+ method public void captureStartValues(android.support.transition.TransitionValues);
+ }
+
+ public class ChangeTransform extends android.support.transition.Transition {
+ ctor public ChangeTransform();
+ ctor public ChangeTransform(android.content.Context, android.util.AttributeSet);
+ method public void captureEndValues(android.support.transition.TransitionValues);
+ method public void captureStartValues(android.support.transition.TransitionValues);
+ method public boolean getReparent();
+ method public boolean getReparentWithOverlay();
+ method public void setReparent(boolean);
+ method public void setReparentWithOverlay(boolean);
+ }
+
+ public class CircularPropagation extends android.support.transition.VisibilityPropagation {
+ ctor public CircularPropagation();
+ method public long getStartDelay(android.view.ViewGroup, android.support.transition.Transition, android.support.transition.TransitionValues, android.support.transition.TransitionValues);
+ method public void setPropagationSpeed(float);
+ }
+
+ public class Explode extends android.support.transition.Visibility {
+ ctor public Explode();
+ ctor public Explode(android.content.Context, android.util.AttributeSet);
+ }
+
+ public class Fade extends android.support.transition.Visibility {
+ ctor public Fade(int);
+ ctor public Fade();
+ ctor public Fade(android.content.Context, android.util.AttributeSet);
+ field public static final int IN = 1; // 0x1
+ field public static final int OUT = 2; // 0x2
+ }
+
+ public abstract class PathMotion {
+ ctor public PathMotion();
+ ctor public PathMotion(android.content.Context, android.util.AttributeSet);
+ method public abstract android.graphics.Path getPath(float, float, float, float);
+ }
+
+ public class PatternPathMotion extends android.support.transition.PathMotion {
+ ctor public PatternPathMotion();
+ ctor public PatternPathMotion(android.content.Context, android.util.AttributeSet);
+ ctor public PatternPathMotion(android.graphics.Path);
+ method public android.graphics.Path getPath(float, float, float, float);
+ method public android.graphics.Path getPatternPath();
+ method public void setPatternPath(android.graphics.Path);
+ }
+
+ public class Scene {
+ ctor public Scene(android.view.ViewGroup);
+ ctor public Scene(android.view.ViewGroup, android.view.View);
+ method public void enter();
+ method public void exit();
+ method public static android.support.transition.Scene getSceneForLayout(android.view.ViewGroup, int, android.content.Context);
+ method public android.view.ViewGroup getSceneRoot();
+ method public void setEnterAction(java.lang.Runnable);
+ method public void setExitAction(java.lang.Runnable);
+ }
+
+ public class SidePropagation extends android.support.transition.VisibilityPropagation {
+ ctor public SidePropagation();
+ method public long getStartDelay(android.view.ViewGroup, android.support.transition.Transition, android.support.transition.TransitionValues, android.support.transition.TransitionValues);
+ method public void setPropagationSpeed(float);
+ method public void setSide(int);
+ }
+
+ public class Slide extends android.support.transition.Visibility {
+ ctor public Slide();
+ ctor public Slide(int);
+ ctor public Slide(android.content.Context, android.util.AttributeSet);
+ method public int getSlideEdge();
+ method public void setSlideEdge(int);
+ }
+
+ public abstract class Transition {
+ ctor public Transition();
+ ctor public Transition(android.content.Context, android.util.AttributeSet);
+ method public android.support.transition.Transition addListener(android.support.transition.Transition.TransitionListener);
+ method public android.support.transition.Transition addTarget(android.view.View);
+ method public android.support.transition.Transition addTarget(int);
+ method public android.support.transition.Transition addTarget(java.lang.String);
+ method public android.support.transition.Transition addTarget(java.lang.Class);
+ method public abstract void captureEndValues(android.support.transition.TransitionValues);
+ method public abstract void captureStartValues(android.support.transition.TransitionValues);
+ method public android.support.transition.Transition clone();
+ method public android.animation.Animator createAnimator(android.view.ViewGroup, android.support.transition.TransitionValues, android.support.transition.TransitionValues);
+ method public android.support.transition.Transition excludeChildren(android.view.View, boolean);
+ method public android.support.transition.Transition excludeChildren(int, boolean);
+ method public android.support.transition.Transition excludeChildren(java.lang.Class, boolean);
+ method public android.support.transition.Transition excludeTarget(android.view.View, boolean);
+ method public android.support.transition.Transition excludeTarget(int, boolean);
+ method public android.support.transition.Transition excludeTarget(java.lang.String, boolean);
+ method public android.support.transition.Transition excludeTarget(java.lang.Class, boolean);
+ method public long getDuration();
+ method public android.graphics.Rect getEpicenter();
+ method public android.support.transition.Transition.EpicenterCallback getEpicenterCallback();
+ method public android.animation.TimeInterpolator getInterpolator();
+ method public java.lang.String getName();
+ method public android.support.transition.PathMotion getPathMotion();
+ method public android.support.transition.TransitionPropagation getPropagation();
+ method public long getStartDelay();
+ method public java.util.List<java.lang.Integer> getTargetIds();
+ method public java.util.List<java.lang.String> getTargetNames();
+ method public java.util.List<java.lang.Class> getTargetTypes();
+ method public java.util.List<android.view.View> getTargets();
+ method public java.lang.String[] getTransitionProperties();
+ method public android.support.transition.TransitionValues getTransitionValues(android.view.View, boolean);
+ method public boolean isTransitionRequired(android.support.transition.TransitionValues, android.support.transition.TransitionValues);
+ method public android.support.transition.Transition removeListener(android.support.transition.Transition.TransitionListener);
+ method public android.support.transition.Transition removeTarget(android.view.View);
+ method public android.support.transition.Transition removeTarget(int);
+ method public android.support.transition.Transition removeTarget(java.lang.String);
+ method public android.support.transition.Transition removeTarget(java.lang.Class);
+ method public android.support.transition.Transition setDuration(long);
+ method public void setEpicenterCallback(android.support.transition.Transition.EpicenterCallback);
+ method public android.support.transition.Transition setInterpolator(android.animation.TimeInterpolator);
+ method public void setMatchOrder(int...);
+ method public void setPathMotion(android.support.transition.PathMotion);
+ method public void setPropagation(android.support.transition.TransitionPropagation);
+ method public android.support.transition.Transition setStartDelay(long);
+ field public static final int MATCH_ID = 3; // 0x3
+ field public static final int MATCH_INSTANCE = 1; // 0x1
+ field public static final int MATCH_ITEM_ID = 4; // 0x4
+ field public static final int MATCH_NAME = 2; // 0x2
+ }
+
+ public static abstract class Transition.EpicenterCallback {
+ ctor public Transition.EpicenterCallback();
+ method public abstract android.graphics.Rect onGetEpicenter(android.support.transition.Transition);
+ }
+
+ public static abstract interface Transition.TransitionListener {
+ method public abstract void onTransitionCancel(android.support.transition.Transition);
+ method public abstract void onTransitionEnd(android.support.transition.Transition);
+ method public abstract void onTransitionPause(android.support.transition.Transition);
+ method public abstract void onTransitionResume(android.support.transition.Transition);
+ method public abstract void onTransitionStart(android.support.transition.Transition);
+ }
+
+ public class TransitionInflater {
+ method public static android.support.transition.TransitionInflater from(android.content.Context);
+ method public android.support.transition.Transition inflateTransition(int);
+ method public android.support.transition.TransitionManager inflateTransitionManager(int, android.view.ViewGroup);
+ }
+
+ public class TransitionListenerAdapter implements android.support.transition.Transition.TransitionListener {
+ ctor public TransitionListenerAdapter();
+ method public void onTransitionCancel(android.support.transition.Transition);
+ method public void onTransitionEnd(android.support.transition.Transition);
+ method public void onTransitionPause(android.support.transition.Transition);
+ method public void onTransitionResume(android.support.transition.Transition);
+ method public void onTransitionStart(android.support.transition.Transition);
+ }
+
+ public class TransitionManager {
+ ctor public TransitionManager();
+ method public static void beginDelayedTransition(android.view.ViewGroup);
+ method public static void beginDelayedTransition(android.view.ViewGroup, android.support.transition.Transition);
+ method public static void endTransitions(android.view.ViewGroup);
+ method public static void go(android.support.transition.Scene);
+ method public static void go(android.support.transition.Scene, android.support.transition.Transition);
+ method public void setTransition(android.support.transition.Scene, android.support.transition.Transition);
+ method public void setTransition(android.support.transition.Scene, android.support.transition.Scene, android.support.transition.Transition);
+ method public void transitionTo(android.support.transition.Scene);
+ }
+
+ public abstract class TransitionPropagation {
+ ctor public TransitionPropagation();
+ method public abstract void captureValues(android.support.transition.TransitionValues);
+ method public abstract java.lang.String[] getPropagationProperties();
+ method public abstract long getStartDelay(android.view.ViewGroup, android.support.transition.Transition, android.support.transition.TransitionValues, android.support.transition.TransitionValues);
+ }
+
+ public class TransitionSet extends android.support.transition.Transition {
+ ctor public TransitionSet();
+ ctor public TransitionSet(android.content.Context, android.util.AttributeSet);
+ method public android.support.transition.TransitionSet addListener(android.support.transition.Transition.TransitionListener);
+ method public android.support.transition.TransitionSet addTarget(android.view.View);
+ method public android.support.transition.TransitionSet addTarget(int);
+ method public android.support.transition.TransitionSet addTarget(java.lang.String);
+ method public android.support.transition.TransitionSet addTarget(java.lang.Class);
+ method public android.support.transition.TransitionSet addTransition(android.support.transition.Transition);
+ method public void captureEndValues(android.support.transition.TransitionValues);
+ method public void captureStartValues(android.support.transition.TransitionValues);
+ method public int getOrdering();
+ method public android.support.transition.Transition getTransitionAt(int);
+ method public int getTransitionCount();
+ method public android.support.transition.TransitionSet removeListener(android.support.transition.Transition.TransitionListener);
+ method public android.support.transition.TransitionSet removeTarget(int);
+ method public android.support.transition.TransitionSet removeTarget(android.view.View);
+ method public android.support.transition.TransitionSet removeTarget(java.lang.Class);
+ method public android.support.transition.TransitionSet removeTarget(java.lang.String);
+ method public android.support.transition.TransitionSet removeTransition(android.support.transition.Transition);
+ method public android.support.transition.TransitionSet setDuration(long);
+ method public android.support.transition.TransitionSet setInterpolator(android.animation.TimeInterpolator);
+ method public android.support.transition.TransitionSet setOrdering(int);
+ method public android.support.transition.TransitionSet setStartDelay(long);
+ field public static final int ORDERING_SEQUENTIAL = 1; // 0x1
+ field public static final int ORDERING_TOGETHER = 0; // 0x0
+ }
+
+ public class TransitionValues {
+ ctor public TransitionValues();
+ field public final java.util.Map<java.lang.String, java.lang.Object> values;
+ field public android.view.View view;
+ }
+
+ public abstract class Visibility extends android.support.transition.Transition {
+ ctor public Visibility();
+ ctor public Visibility(android.content.Context, android.util.AttributeSet);
+ method public void captureEndValues(android.support.transition.TransitionValues);
+ method public void captureStartValues(android.support.transition.TransitionValues);
+ method public int getMode();
+ method public boolean isVisible(android.support.transition.TransitionValues);
+ method public android.animation.Animator onAppear(android.view.ViewGroup, android.support.transition.TransitionValues, int, android.support.transition.TransitionValues, int);
+ method public android.animation.Animator onAppear(android.view.ViewGroup, android.view.View, android.support.transition.TransitionValues, android.support.transition.TransitionValues);
+ method public android.animation.Animator onDisappear(android.view.ViewGroup, android.support.transition.TransitionValues, int, android.support.transition.TransitionValues, int);
+ method public android.animation.Animator onDisappear(android.view.ViewGroup, android.view.View, android.support.transition.TransitionValues, android.support.transition.TransitionValues);
+ method public void setMode(int);
+ field public static final int MODE_IN = 1; // 0x1
+ field public static final int MODE_OUT = 2; // 0x2
+ }
+
+ public abstract class VisibilityPropagation extends android.support.transition.TransitionPropagation {
+ ctor public VisibilityPropagation();
+ method public void captureValues(android.support.transition.TransitionValues);
+ method public java.lang.String[] getPropagationProperties();
+ method public int getViewVisibility(android.support.transition.TransitionValues);
+ method public int getViewX(android.support.transition.TransitionValues);
+ method public int getViewY(android.support.transition.TransitionValues);
+ }
+
+}
+
diff --git a/transition/api/27.0.0.txt b/transition/api/27.0.0.txt
new file mode 100644
index 0000000..805fcfc
--- /dev/null
+++ b/transition/api/27.0.0.txt
@@ -0,0 +1,280 @@
+package android.support.transition {
+
+ public class ArcMotion extends android.support.transition.PathMotion {
+ ctor public ArcMotion();
+ ctor public ArcMotion(android.content.Context, android.util.AttributeSet);
+ method public float getMaximumAngle();
+ method public float getMinimumHorizontalAngle();
+ method public float getMinimumVerticalAngle();
+ method public android.graphics.Path getPath(float, float, float, float);
+ method public void setMaximumAngle(float);
+ method public void setMinimumHorizontalAngle(float);
+ method public void setMinimumVerticalAngle(float);
+ }
+
+ public class AutoTransition extends android.support.transition.TransitionSet {
+ ctor public AutoTransition();
+ ctor public AutoTransition(android.content.Context, android.util.AttributeSet);
+ }
+
+ public class ChangeBounds extends android.support.transition.Transition {
+ ctor public ChangeBounds();
+ ctor public ChangeBounds(android.content.Context, android.util.AttributeSet);
+ method public void captureEndValues(android.support.transition.TransitionValues);
+ method public void captureStartValues(android.support.transition.TransitionValues);
+ method public boolean getResizeClip();
+ method public void setResizeClip(boolean);
+ }
+
+ public class ChangeClipBounds extends android.support.transition.Transition {
+ ctor public ChangeClipBounds();
+ ctor public ChangeClipBounds(android.content.Context, android.util.AttributeSet);
+ method public void captureEndValues(android.support.transition.TransitionValues);
+ method public void captureStartValues(android.support.transition.TransitionValues);
+ }
+
+ public class ChangeImageTransform extends android.support.transition.Transition {
+ ctor public ChangeImageTransform();
+ ctor public ChangeImageTransform(android.content.Context, android.util.AttributeSet);
+ method public void captureEndValues(android.support.transition.TransitionValues);
+ method public void captureStartValues(android.support.transition.TransitionValues);
+ }
+
+ public class ChangeScroll extends android.support.transition.Transition {
+ ctor public ChangeScroll();
+ ctor public ChangeScroll(android.content.Context, android.util.AttributeSet);
+ method public void captureEndValues(android.support.transition.TransitionValues);
+ method public void captureStartValues(android.support.transition.TransitionValues);
+ }
+
+ public class ChangeTransform extends android.support.transition.Transition {
+ ctor public ChangeTransform();
+ ctor public ChangeTransform(android.content.Context, android.util.AttributeSet);
+ method public void captureEndValues(android.support.transition.TransitionValues);
+ method public void captureStartValues(android.support.transition.TransitionValues);
+ method public boolean getReparent();
+ method public boolean getReparentWithOverlay();
+ method public void setReparent(boolean);
+ method public void setReparentWithOverlay(boolean);
+ }
+
+ public class CircularPropagation extends android.support.transition.VisibilityPropagation {
+ ctor public CircularPropagation();
+ method public long getStartDelay(android.view.ViewGroup, android.support.transition.Transition, android.support.transition.TransitionValues, android.support.transition.TransitionValues);
+ method public void setPropagationSpeed(float);
+ }
+
+ public class Explode extends android.support.transition.Visibility {
+ ctor public Explode();
+ ctor public Explode(android.content.Context, android.util.AttributeSet);
+ }
+
+ public class Fade extends android.support.transition.Visibility {
+ ctor public Fade(int);
+ ctor public Fade();
+ ctor public Fade(android.content.Context, android.util.AttributeSet);
+ field public static final int IN = 1; // 0x1
+ field public static final int OUT = 2; // 0x2
+ }
+
+ public abstract class PathMotion {
+ ctor public PathMotion();
+ ctor public PathMotion(android.content.Context, android.util.AttributeSet);
+ method public abstract android.graphics.Path getPath(float, float, float, float);
+ }
+
+ public class PatternPathMotion extends android.support.transition.PathMotion {
+ ctor public PatternPathMotion();
+ ctor public PatternPathMotion(android.content.Context, android.util.AttributeSet);
+ ctor public PatternPathMotion(android.graphics.Path);
+ method public android.graphics.Path getPath(float, float, float, float);
+ method public android.graphics.Path getPatternPath();
+ method public void setPatternPath(android.graphics.Path);
+ }
+
+ public class Scene {
+ ctor public Scene(android.view.ViewGroup);
+ ctor public Scene(android.view.ViewGroup, android.view.View);
+ method public void enter();
+ method public void exit();
+ method public static android.support.transition.Scene getSceneForLayout(android.view.ViewGroup, int, android.content.Context);
+ method public android.view.ViewGroup getSceneRoot();
+ method public void setEnterAction(java.lang.Runnable);
+ method public void setExitAction(java.lang.Runnable);
+ }
+
+ public class SidePropagation extends android.support.transition.VisibilityPropagation {
+ ctor public SidePropagation();
+ method public long getStartDelay(android.view.ViewGroup, android.support.transition.Transition, android.support.transition.TransitionValues, android.support.transition.TransitionValues);
+ method public void setPropagationSpeed(float);
+ method public void setSide(int);
+ }
+
+ public class Slide extends android.support.transition.Visibility {
+ ctor public Slide();
+ ctor public Slide(int);
+ ctor public Slide(android.content.Context, android.util.AttributeSet);
+ method public int getSlideEdge();
+ method public void setSlideEdge(int);
+ }
+
+ public abstract class Transition {
+ ctor public Transition();
+ ctor public Transition(android.content.Context, android.util.AttributeSet);
+ method public android.support.transition.Transition addListener(android.support.transition.Transition.TransitionListener);
+ method public android.support.transition.Transition addTarget(android.view.View);
+ method public android.support.transition.Transition addTarget(int);
+ method public android.support.transition.Transition addTarget(java.lang.String);
+ method public android.support.transition.Transition addTarget(java.lang.Class);
+ method public abstract void captureEndValues(android.support.transition.TransitionValues);
+ method public abstract void captureStartValues(android.support.transition.TransitionValues);
+ method public android.support.transition.Transition clone();
+ method public android.animation.Animator createAnimator(android.view.ViewGroup, android.support.transition.TransitionValues, android.support.transition.TransitionValues);
+ method public android.support.transition.Transition excludeChildren(android.view.View, boolean);
+ method public android.support.transition.Transition excludeChildren(int, boolean);
+ method public android.support.transition.Transition excludeChildren(java.lang.Class, boolean);
+ method public android.support.transition.Transition excludeTarget(android.view.View, boolean);
+ method public android.support.transition.Transition excludeTarget(int, boolean);
+ method public android.support.transition.Transition excludeTarget(java.lang.String, boolean);
+ method public android.support.transition.Transition excludeTarget(java.lang.Class, boolean);
+ method public long getDuration();
+ method public android.graphics.Rect getEpicenter();
+ method public android.support.transition.Transition.EpicenterCallback getEpicenterCallback();
+ method public android.animation.TimeInterpolator getInterpolator();
+ method public java.lang.String getName();
+ method public android.support.transition.PathMotion getPathMotion();
+ method public android.support.transition.TransitionPropagation getPropagation();
+ method public long getStartDelay();
+ method public java.util.List<java.lang.Integer> getTargetIds();
+ method public java.util.List<java.lang.String> getTargetNames();
+ method public java.util.List<java.lang.Class> getTargetTypes();
+ method public java.util.List<android.view.View> getTargets();
+ method public java.lang.String[] getTransitionProperties();
+ method public android.support.transition.TransitionValues getTransitionValues(android.view.View, boolean);
+ method public boolean isTransitionRequired(android.support.transition.TransitionValues, android.support.transition.TransitionValues);
+ method public android.support.transition.Transition removeListener(android.support.transition.Transition.TransitionListener);
+ method public android.support.transition.Transition removeTarget(android.view.View);
+ method public android.support.transition.Transition removeTarget(int);
+ method public android.support.transition.Transition removeTarget(java.lang.String);
+ method public android.support.transition.Transition removeTarget(java.lang.Class);
+ method public android.support.transition.Transition setDuration(long);
+ method public void setEpicenterCallback(android.support.transition.Transition.EpicenterCallback);
+ method public android.support.transition.Transition setInterpolator(android.animation.TimeInterpolator);
+ method public void setMatchOrder(int...);
+ method public void setPathMotion(android.support.transition.PathMotion);
+ method public void setPropagation(android.support.transition.TransitionPropagation);
+ method public android.support.transition.Transition setStartDelay(long);
+ field public static final int MATCH_ID = 3; // 0x3
+ field public static final int MATCH_INSTANCE = 1; // 0x1
+ field public static final int MATCH_ITEM_ID = 4; // 0x4
+ field public static final int MATCH_NAME = 2; // 0x2
+ }
+
+ public static abstract class Transition.EpicenterCallback {
+ ctor public Transition.EpicenterCallback();
+ method public abstract android.graphics.Rect onGetEpicenter(android.support.transition.Transition);
+ }
+
+ public static abstract interface Transition.TransitionListener {
+ method public abstract void onTransitionCancel(android.support.transition.Transition);
+ method public abstract void onTransitionEnd(android.support.transition.Transition);
+ method public abstract void onTransitionPause(android.support.transition.Transition);
+ method public abstract void onTransitionResume(android.support.transition.Transition);
+ method public abstract void onTransitionStart(android.support.transition.Transition);
+ }
+
+ public class TransitionInflater {
+ method public static android.support.transition.TransitionInflater from(android.content.Context);
+ method public android.support.transition.Transition inflateTransition(int);
+ method public android.support.transition.TransitionManager inflateTransitionManager(int, android.view.ViewGroup);
+ }
+
+ public class TransitionListenerAdapter implements android.support.transition.Transition.TransitionListener {
+ ctor public TransitionListenerAdapter();
+ method public void onTransitionCancel(android.support.transition.Transition);
+ method public void onTransitionEnd(android.support.transition.Transition);
+ method public void onTransitionPause(android.support.transition.Transition);
+ method public void onTransitionResume(android.support.transition.Transition);
+ method public void onTransitionStart(android.support.transition.Transition);
+ }
+
+ public class TransitionManager {
+ ctor public TransitionManager();
+ method public static void beginDelayedTransition(android.view.ViewGroup);
+ method public static void beginDelayedTransition(android.view.ViewGroup, android.support.transition.Transition);
+ method public static void endTransitions(android.view.ViewGroup);
+ method public static void go(android.support.transition.Scene);
+ method public static void go(android.support.transition.Scene, android.support.transition.Transition);
+ method public void setTransition(android.support.transition.Scene, android.support.transition.Transition);
+ method public void setTransition(android.support.transition.Scene, android.support.transition.Scene, android.support.transition.Transition);
+ method public void transitionTo(android.support.transition.Scene);
+ }
+
+ public abstract class TransitionPropagation {
+ ctor public TransitionPropagation();
+ method public abstract void captureValues(android.support.transition.TransitionValues);
+ method public abstract java.lang.String[] getPropagationProperties();
+ method public abstract long getStartDelay(android.view.ViewGroup, android.support.transition.Transition, android.support.transition.TransitionValues, android.support.transition.TransitionValues);
+ }
+
+ public class TransitionSet extends android.support.transition.Transition {
+ ctor public TransitionSet();
+ ctor public TransitionSet(android.content.Context, android.util.AttributeSet);
+ method public android.support.transition.TransitionSet addListener(android.support.transition.Transition.TransitionListener);
+ method public android.support.transition.TransitionSet addTarget(android.view.View);
+ method public android.support.transition.TransitionSet addTarget(int);
+ method public android.support.transition.TransitionSet addTarget(java.lang.String);
+ method public android.support.transition.TransitionSet addTarget(java.lang.Class);
+ method public android.support.transition.TransitionSet addTransition(android.support.transition.Transition);
+ method public void captureEndValues(android.support.transition.TransitionValues);
+ method public void captureStartValues(android.support.transition.TransitionValues);
+ method public int getOrdering();
+ method public android.support.transition.Transition getTransitionAt(int);
+ method public int getTransitionCount();
+ method public android.support.transition.TransitionSet removeListener(android.support.transition.Transition.TransitionListener);
+ method public android.support.transition.TransitionSet removeTarget(int);
+ method public android.support.transition.TransitionSet removeTarget(android.view.View);
+ method public android.support.transition.TransitionSet removeTarget(java.lang.Class);
+ method public android.support.transition.TransitionSet removeTarget(java.lang.String);
+ method public android.support.transition.TransitionSet removeTransition(android.support.transition.Transition);
+ method public android.support.transition.TransitionSet setDuration(long);
+ method public android.support.transition.TransitionSet setInterpolator(android.animation.TimeInterpolator);
+ method public android.support.transition.TransitionSet setOrdering(int);
+ method public android.support.transition.TransitionSet setStartDelay(long);
+ field public static final int ORDERING_SEQUENTIAL = 1; // 0x1
+ field public static final int ORDERING_TOGETHER = 0; // 0x0
+ }
+
+ public class TransitionValues {
+ ctor public TransitionValues();
+ field public final java.util.Map<java.lang.String, java.lang.Object> values;
+ field public android.view.View view;
+ }
+
+ public abstract class Visibility extends android.support.transition.Transition {
+ ctor public Visibility();
+ ctor public Visibility(android.content.Context, android.util.AttributeSet);
+ method public void captureEndValues(android.support.transition.TransitionValues);
+ method public void captureStartValues(android.support.transition.TransitionValues);
+ method public int getMode();
+ method public boolean isVisible(android.support.transition.TransitionValues);
+ method public android.animation.Animator onAppear(android.view.ViewGroup, android.support.transition.TransitionValues, int, android.support.transition.TransitionValues, int);
+ method public android.animation.Animator onAppear(android.view.ViewGroup, android.view.View, android.support.transition.TransitionValues, android.support.transition.TransitionValues);
+ method public android.animation.Animator onDisappear(android.view.ViewGroup, android.support.transition.TransitionValues, int, android.support.transition.TransitionValues, int);
+ method public android.animation.Animator onDisappear(android.view.ViewGroup, android.view.View, android.support.transition.TransitionValues, android.support.transition.TransitionValues);
+ method public void setMode(int);
+ field public static final int MODE_IN = 1; // 0x1
+ field public static final int MODE_OUT = 2; // 0x2
+ }
+
+ public abstract class VisibilityPropagation extends android.support.transition.TransitionPropagation {
+ ctor public VisibilityPropagation();
+ method public void captureValues(android.support.transition.TransitionValues);
+ method public java.lang.String[] getPropagationProperties();
+ method public int getViewVisibility(android.support.transition.TransitionValues);
+ method public int getViewX(android.support.transition.TransitionValues);
+ method public int getViewY(android.support.transition.TransitionValues);
+ }
+
+}
+
diff --git a/transition/proguard-rules.pro b/transition/proguard-rules.pro
index 6e193b4..6cae5e6 100644
--- a/transition/proguard-rules.pro
+++ b/transition/proguard-rules.pro
@@ -15,3 +15,8 @@
# FragmentTransitionSupport is instantiated in support-fragment via reflection.
-keep public class android.support.transition.FragmentTransitionSupport {
}
+
+# Keep a field in transition that is used to keep a reference to weakly-referenced object
+-keepclassmembers class android.support.transition.ChangeBounds$* extends android.animation.AnimatorListenerAdapter {
+ android.support.transition.ChangeBounds$ViewBounds mViewBounds;
+}
diff --git a/tv-provider/Android.mk b/tv-provider/Android.mk
index 4fa8af4..9427d0d 100644
--- a/tv-provider/Android.mk
+++ b/tv-provider/Android.mk
@@ -23,7 +23,7 @@
LOCAL_USE_AAPT2 := true
LOCAL_MODULE := android-support-tv-provider
LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
+LOCAL_SRC_FILES := $(call all-java-files-under, src/main/java)
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
LOCAL_SHARED_ANDROID_LIBRARIES := \
android-support-compat \
diff --git a/tv-provider/AndroidManifest.xml b/tv-provider/AndroidManifest.xml
index f7569a6..05af532 100644
--- a/tv-provider/AndroidManifest.xml
+++ b/tv-provider/AndroidManifest.xml
@@ -18,8 +18,4 @@
<uses-sdk android:minSdkVersion="21"/>
<uses-permission android:name="com.android.providers.tv.permission.WRITE_EPG_DATA" />
<uses-permission android:name="com.android.providers.tv.permission.READ_EPG_DATA" />
- <application>
- <meta-data android:name="android.support.media.tv.VERSION"
- android:value="${support-version}" />
- </application>
</manifest>
diff --git a/tv-provider/api/26.1.0.txt b/tv-provider/api/26.1.0.txt
new file mode 100644
index 0000000..aa288f0
--- /dev/null
+++ b/tv-provider/api/26.1.0.txt
@@ -0,0 +1,527 @@
+package android.support.media.tv {
+
+ public final class Channel {
+ method public static android.support.media.tv.Channel fromCursor(android.database.Cursor);
+ method public int getAppLinkColor();
+ method public android.net.Uri getAppLinkIconUri();
+ method public android.content.Intent getAppLinkIntent() throws java.net.URISyntaxException;
+ method public android.net.Uri getAppLinkIntentUri();
+ method public android.net.Uri getAppLinkPosterArtUri();
+ method public java.lang.String getAppLinkText();
+ method public java.lang.String getDescription();
+ method public java.lang.String getDisplayName();
+ method public java.lang.String getDisplayNumber();
+ method public long getId();
+ method public java.lang.String getInputId();
+ method public byte[] getInternalProviderDataByteArray();
+ method public java.lang.Long getInternalProviderFlag1();
+ method public java.lang.Long getInternalProviderFlag2();
+ method public java.lang.Long getInternalProviderFlag3();
+ method public java.lang.Long getInternalProviderFlag4();
+ method public java.lang.String getInternalProviderId();
+ method public java.lang.String getNetworkAffiliation();
+ method public int getOriginalNetworkId();
+ method public java.lang.String getPackageName();
+ method public int getServiceId();
+ method public java.lang.String getServiceType();
+ method public int getTransportStreamId();
+ method public java.lang.String getType();
+ method public java.lang.String getVideoFormat();
+ method public boolean isBrowsable();
+ method public boolean isLocked();
+ method public boolean isSearchable();
+ method public boolean isTransient();
+ method public android.content.ContentValues toContentValues();
+ }
+
+ public static final class Channel.Builder {
+ ctor public Channel.Builder();
+ ctor public Channel.Builder(android.support.media.tv.Channel);
+ method public android.support.media.tv.Channel build();
+ method public android.support.media.tv.Channel.Builder setAppLinkColor(int);
+ method public android.support.media.tv.Channel.Builder setAppLinkIconUri(android.net.Uri);
+ method public android.support.media.tv.Channel.Builder setAppLinkIntent(android.content.Intent);
+ method public android.support.media.tv.Channel.Builder setAppLinkIntentUri(android.net.Uri);
+ method public android.support.media.tv.Channel.Builder setAppLinkPosterArtUri(android.net.Uri);
+ method public android.support.media.tv.Channel.Builder setAppLinkText(java.lang.String);
+ method public android.support.media.tv.Channel.Builder setDescription(java.lang.String);
+ method public android.support.media.tv.Channel.Builder setDisplayName(java.lang.String);
+ method public android.support.media.tv.Channel.Builder setDisplayNumber(java.lang.String);
+ method public android.support.media.tv.Channel.Builder setInputId(java.lang.String);
+ method public android.support.media.tv.Channel.Builder setInternalProviderData(byte[]);
+ method public android.support.media.tv.Channel.Builder setInternalProviderData(java.lang.String);
+ method public android.support.media.tv.Channel.Builder setInternalProviderFlag1(long);
+ method public android.support.media.tv.Channel.Builder setInternalProviderFlag2(long);
+ method public android.support.media.tv.Channel.Builder setInternalProviderFlag3(long);
+ method public android.support.media.tv.Channel.Builder setInternalProviderFlag4(long);
+ method public android.support.media.tv.Channel.Builder setInternalProviderId(java.lang.String);
+ method public android.support.media.tv.Channel.Builder setNetworkAffiliation(java.lang.String);
+ method public android.support.media.tv.Channel.Builder setOriginalNetworkId(int);
+ method public android.support.media.tv.Channel.Builder setSearchable(boolean);
+ method public android.support.media.tv.Channel.Builder setServiceId(int);
+ method public android.support.media.tv.Channel.Builder setServiceType(java.lang.String);
+ method public android.support.media.tv.Channel.Builder setTransient(boolean);
+ method public android.support.media.tv.Channel.Builder setTransportStreamId(int);
+ method public android.support.media.tv.Channel.Builder setType(java.lang.String);
+ method public android.support.media.tv.Channel.Builder setVideoFormat(java.lang.String);
+ }
+
+ public class ChannelLogoUtils {
+ ctor public ChannelLogoUtils();
+ method public static android.graphics.Bitmap loadChannelLogo(android.content.Context, long);
+ method public static boolean storeChannelLogo(android.content.Context, long, android.net.Uri);
+ method public static boolean storeChannelLogo(android.content.Context, long, android.graphics.Bitmap);
+ }
+
+ public final class PreviewProgram {
+ method public boolean equals(java.lang.Object);
+ method public static android.support.media.tv.PreviewProgram fromCursor(android.database.Cursor);
+ method public long getChannelId();
+ method public int getWeight();
+ method public android.content.ContentValues toContentValues();
+ method public java.lang.String toString();
+ }
+
+ public static final class PreviewProgram.Builder {
+ ctor public PreviewProgram.Builder();
+ ctor public PreviewProgram.Builder(android.support.media.tv.PreviewProgram);
+ method public android.support.media.tv.PreviewProgram build();
+ method public android.support.media.tv.PreviewProgram.Builder setChannelId(long);
+ method public android.support.media.tv.PreviewProgram.Builder setWeight(int);
+ }
+
+ public final class Program implements java.lang.Comparable {
+ method public int compareTo(android.support.media.tv.Program);
+ method public boolean equals(java.lang.Object);
+ method public static android.support.media.tv.Program fromCursor(android.database.Cursor);
+ method public java.lang.String[] getBroadcastGenres();
+ method public long getChannelId();
+ method public long getEndTimeUtcMillis();
+ method public long getStartTimeUtcMillis();
+ method public int hashCode();
+ method public boolean isRecordingProhibited();
+ method public android.content.ContentValues toContentValues();
+ method public java.lang.String toString();
+ }
+
+ public static class Program.Builder {
+ ctor public Program.Builder();
+ ctor public Program.Builder(android.support.media.tv.Program);
+ method public android.support.media.tv.Program build();
+ method public android.support.media.tv.Program.Builder setBroadcastGenres(java.lang.String[]);
+ method public android.support.media.tv.Program.Builder setChannelId(long);
+ method public android.support.media.tv.Program.Builder setEndTimeUtcMillis(long);
+ method public android.support.media.tv.Program.Builder setRecordingProhibited(boolean);
+ method public android.support.media.tv.Program.Builder setStartTimeUtcMillis(long);
+ }
+
+ public final class TvContractCompat {
+ method public static android.net.Uri buildChannelLogoUri(long);
+ method public static android.net.Uri buildChannelLogoUri(android.net.Uri);
+ method public static android.net.Uri buildChannelUri(long);
+ method public static android.net.Uri buildChannelUriForPassthroughInput(java.lang.String);
+ method public static android.net.Uri buildChannelsUriForInput(java.lang.String);
+ method public static java.lang.String buildInputId(android.content.ComponentName);
+ method public static android.net.Uri buildPreviewProgramUri(long);
+ method public static android.net.Uri buildPreviewProgramsUriForChannel(long);
+ method public static android.net.Uri buildPreviewProgramsUriForChannel(android.net.Uri);
+ method public static android.net.Uri buildProgramUri(long);
+ method public static android.net.Uri buildProgramsUriForChannel(long);
+ method public static android.net.Uri buildProgramsUriForChannel(android.net.Uri);
+ method public static android.net.Uri buildProgramsUriForChannel(long, long, long);
+ method public static android.net.Uri buildProgramsUriForChannel(android.net.Uri, long, long);
+ method public static android.net.Uri buildRecordedProgramUri(long);
+ method public static android.net.Uri buildWatchNextProgramUri(long);
+ method public static boolean isChannelUri(android.net.Uri);
+ method public static boolean isChannelUriForPassthroughInput(android.net.Uri);
+ method public static boolean isChannelUriForTunerInput(android.net.Uri);
+ method public static boolean isProgramUri(android.net.Uri);
+ method public static boolean isRecordedProgramUri(android.net.Uri);
+ method public static void requestChannelBrowsable(android.content.Context, long);
+ field public static final java.lang.String ACTION_INITIALIZE_PROGRAMS = "android.media.tv.action.INITIALIZE_PROGRAMS";
+ field public static final java.lang.String ACTION_PREVIEW_PROGRAM_ADDED_TO_WATCH_NEXT = "android.media.tv.action.PREVIEW_PROGRAM_ADDED_TO_WATCH_NEXT";
+ field public static final java.lang.String ACTION_PREVIEW_PROGRAM_BROWSABLE_DISABLED = "android.media.tv.action.PREVIEW_PROGRAM_BROWSABLE_DISABLED";
+ field public static final java.lang.String ACTION_REQUEST_CHANNEL_BROWSABLE = "android.media.tv.action.REQUEST_CHANNEL_BROWSABLE";
+ field public static final java.lang.String ACTION_WATCH_NEXT_PROGRAM_BROWSABLE_DISABLED = "android.media.tv.action.WATCH_NEXT_PROGRAM_BROWSABLE_DISABLED";
+ field public static final java.lang.String AUTHORITY = "android.media.tv";
+ field public static final java.lang.String EXTRA_CHANNEL_ID = "android.media.tv.extra.CHANNEL_ID";
+ field public static final java.lang.String EXTRA_PREVIEW_PROGRAM_ID = "android.media.tv.extra.PREVIEW_PROGRAM_ID";
+ field public static final java.lang.String EXTRA_WATCH_NEXT_PROGRAM_ID = "android.media.tv.extra.WATCH_NEXT_PROGRAM_ID";
+ }
+
+ public static abstract interface TvContractCompat.BaseTvColumns {
+ field public static final java.lang.String COLUMN_PACKAGE_NAME = "package_name";
+ }
+
+ public static final class TvContractCompat.Channels implements android.support.media.tv.TvContractCompat.BaseTvColumns {
+ method public static java.lang.String getVideoResolution(java.lang.String);
+ field public static final java.lang.String COLUMN_APP_LINK_COLOR = "app_link_color";
+ field public static final java.lang.String COLUMN_APP_LINK_ICON_URI = "app_link_icon_uri";
+ field public static final java.lang.String COLUMN_APP_LINK_INTENT_URI = "app_link_intent_uri";
+ field public static final java.lang.String COLUMN_APP_LINK_POSTER_ART_URI = "app_link_poster_art_uri";
+ field public static final java.lang.String COLUMN_APP_LINK_TEXT = "app_link_text";
+ field public static final java.lang.String COLUMN_BROWSABLE = "browsable";
+ field public static final java.lang.String COLUMN_DESCRIPTION = "description";
+ field public static final java.lang.String COLUMN_DISPLAY_NAME = "display_name";
+ field public static final java.lang.String COLUMN_DISPLAY_NUMBER = "display_number";
+ field public static final java.lang.String COLUMN_INPUT_ID = "input_id";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_DATA = "internal_provider_data";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG1 = "internal_provider_flag1";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG2 = "internal_provider_flag2";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG3 = "internal_provider_flag3";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG4 = "internal_provider_flag4";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_ID = "internal_provider_id";
+ field public static final java.lang.String COLUMN_LOCKED = "locked";
+ field public static final java.lang.String COLUMN_NETWORK_AFFILIATION = "network_affiliation";
+ field public static final java.lang.String COLUMN_ORIGINAL_NETWORK_ID = "original_network_id";
+ field public static final java.lang.String COLUMN_SEARCHABLE = "searchable";
+ field public static final java.lang.String COLUMN_SERVICE_ID = "service_id";
+ field public static final java.lang.String COLUMN_SERVICE_TYPE = "service_type";
+ field public static final java.lang.String COLUMN_TRANSIENT = "transient";
+ field public static final java.lang.String COLUMN_TRANSPORT_STREAM_ID = "transport_stream_id";
+ field public static final java.lang.String COLUMN_TYPE = "type";
+ field public static final java.lang.String COLUMN_VERSION_NUMBER = "version_number";
+ field public static final java.lang.String COLUMN_VIDEO_FORMAT = "video_format";
+ field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/channel";
+ field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/channel";
+ field public static final android.net.Uri CONTENT_URI;
+ field public static final java.lang.String SERVICE_TYPE_AUDIO = "SERVICE_TYPE_AUDIO";
+ field public static final java.lang.String SERVICE_TYPE_AUDIO_VIDEO = "SERVICE_TYPE_AUDIO_VIDEO";
+ field public static final java.lang.String SERVICE_TYPE_OTHER = "SERVICE_TYPE_OTHER";
+ field public static final java.lang.String TYPE_1SEG = "TYPE_1SEG";
+ field public static final java.lang.String TYPE_ATSC_C = "TYPE_ATSC_C";
+ field public static final java.lang.String TYPE_ATSC_M_H = "TYPE_ATSC_M_H";
+ field public static final java.lang.String TYPE_ATSC_T = "TYPE_ATSC_T";
+ field public static final java.lang.String TYPE_CMMB = "TYPE_CMMB";
+ field public static final java.lang.String TYPE_DTMB = "TYPE_DTMB";
+ field public static final java.lang.String TYPE_DVB_C = "TYPE_DVB_C";
+ field public static final java.lang.String TYPE_DVB_C2 = "TYPE_DVB_C2";
+ field public static final java.lang.String TYPE_DVB_H = "TYPE_DVB_H";
+ field public static final java.lang.String TYPE_DVB_S = "TYPE_DVB_S";
+ field public static final java.lang.String TYPE_DVB_S2 = "TYPE_DVB_S2";
+ field public static final java.lang.String TYPE_DVB_SH = "TYPE_DVB_SH";
+ field public static final java.lang.String TYPE_DVB_T = "TYPE_DVB_T";
+ field public static final java.lang.String TYPE_DVB_T2 = "TYPE_DVB_T2";
+ field public static final java.lang.String TYPE_ISDB_C = "TYPE_ISDB_C";
+ field public static final java.lang.String TYPE_ISDB_S = "TYPE_ISDB_S";
+ field public static final java.lang.String TYPE_ISDB_T = "TYPE_ISDB_T";
+ field public static final java.lang.String TYPE_ISDB_TB = "TYPE_ISDB_TB";
+ field public static final java.lang.String TYPE_NTSC = "TYPE_NTSC";
+ field public static final java.lang.String TYPE_OTHER = "TYPE_OTHER";
+ field public static final java.lang.String TYPE_PAL = "TYPE_PAL";
+ field public static final java.lang.String TYPE_PREVIEW = "TYPE_PREVIEW";
+ field public static final java.lang.String TYPE_SECAM = "TYPE_SECAM";
+ field public static final java.lang.String TYPE_S_DMB = "TYPE_S_DMB";
+ field public static final java.lang.String TYPE_T_DMB = "TYPE_T_DMB";
+ field public static final java.lang.String VIDEO_FORMAT_1080I = "VIDEO_FORMAT_1080I";
+ field public static final java.lang.String VIDEO_FORMAT_1080P = "VIDEO_FORMAT_1080P";
+ field public static final java.lang.String VIDEO_FORMAT_2160P = "VIDEO_FORMAT_2160P";
+ field public static final java.lang.String VIDEO_FORMAT_240P = "VIDEO_FORMAT_240P";
+ field public static final java.lang.String VIDEO_FORMAT_360P = "VIDEO_FORMAT_360P";
+ field public static final java.lang.String VIDEO_FORMAT_4320P = "VIDEO_FORMAT_4320P";
+ field public static final java.lang.String VIDEO_FORMAT_480I = "VIDEO_FORMAT_480I";
+ field public static final java.lang.String VIDEO_FORMAT_480P = "VIDEO_FORMAT_480P";
+ field public static final java.lang.String VIDEO_FORMAT_576I = "VIDEO_FORMAT_576I";
+ field public static final java.lang.String VIDEO_FORMAT_576P = "VIDEO_FORMAT_576P";
+ field public static final java.lang.String VIDEO_FORMAT_720P = "VIDEO_FORMAT_720P";
+ field public static final java.lang.String VIDEO_RESOLUTION_ED = "VIDEO_RESOLUTION_ED";
+ field public static final java.lang.String VIDEO_RESOLUTION_FHD = "VIDEO_RESOLUTION_FHD";
+ field public static final java.lang.String VIDEO_RESOLUTION_HD = "VIDEO_RESOLUTION_HD";
+ field public static final java.lang.String VIDEO_RESOLUTION_SD = "VIDEO_RESOLUTION_SD";
+ field public static final java.lang.String VIDEO_RESOLUTION_UHD = "VIDEO_RESOLUTION_UHD";
+ }
+
+ public static final class TvContractCompat.Channels.Logo {
+ field public static final java.lang.String CONTENT_DIRECTORY = "logo";
+ }
+
+ public static final class TvContractCompat.PreviewPrograms implements android.support.media.tv.TvContractCompat.BaseTvColumns {
+ field public static final int ASPECT_RATIO_16_9 = 0; // 0x0
+ field public static final int ASPECT_RATIO_1_1 = 3; // 0x3
+ field public static final int ASPECT_RATIO_2_3 = 4; // 0x4
+ field public static final int ASPECT_RATIO_3_2 = 1; // 0x1
+ field public static final int ASPECT_RATIO_4_3 = 2; // 0x2
+ field public static final int AVAILABILITY_AVAILABLE = 0; // 0x0
+ field public static final int AVAILABILITY_FREE_WITH_SUBSCRIPTION = 1; // 0x1
+ field public static final int AVAILABILITY_PAID_CONTENT = 2; // 0x2
+ field public static final java.lang.String COLUMN_AUDIO_LANGUAGE = "audio_language";
+ field public static final java.lang.String COLUMN_AUTHOR = "author";
+ field public static final java.lang.String COLUMN_AVAILABILITY = "availability";
+ field public static final java.lang.String COLUMN_BROWSABLE = "browsable";
+ field public static final java.lang.String COLUMN_CANONICAL_GENRE = "canonical_genre";
+ field public static final java.lang.String COLUMN_CHANNEL_ID = "channel_id";
+ field public static final java.lang.String COLUMN_CONTENT_ID = "content_id";
+ field public static final java.lang.String COLUMN_CONTENT_RATING = "content_rating";
+ field public static final java.lang.String COLUMN_DURATION_MILLIS = "duration_millis";
+ field public static final java.lang.String COLUMN_EPISODE_DISPLAY_NUMBER = "episode_display_number";
+ field public static final java.lang.String COLUMN_EPISODE_TITLE = "episode_title";
+ field public static final java.lang.String COLUMN_INTENT_URI = "intent_uri";
+ field public static final java.lang.String COLUMN_INTERACTION_COUNT = "interaction_count";
+ field public static final java.lang.String COLUMN_INTERACTION_TYPE = "interaction_type";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_DATA = "internal_provider_data";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG1 = "internal_provider_flag1";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG2 = "internal_provider_flag2";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG3 = "internal_provider_flag3";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG4 = "internal_provider_flag4";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_ID = "internal_provider_id";
+ field public static final java.lang.String COLUMN_ITEM_COUNT = "item_count";
+ field public static final java.lang.String COLUMN_LAST_PLAYBACK_POSITION_MILLIS = "last_playback_position_millis";
+ field public static final java.lang.String COLUMN_LIVE = "live";
+ field public static final java.lang.String COLUMN_LOGO_URI = "logo_uri";
+ field public static final java.lang.String COLUMN_LONG_DESCRIPTION = "long_description";
+ field public static final java.lang.String COLUMN_OFFER_PRICE = "offer_price";
+ field public static final java.lang.String COLUMN_POSTER_ART_ASPECT_RATIO = "poster_art_aspect_ratio";
+ field public static final java.lang.String COLUMN_POSTER_ART_URI = "poster_art_uri";
+ field public static final java.lang.String COLUMN_PREVIEW_VIDEO_URI = "preview_video_uri";
+ field public static final java.lang.String COLUMN_RELEASE_DATE = "release_date";
+ field public static final java.lang.String COLUMN_REVIEW_RATING = "review_rating";
+ field public static final java.lang.String COLUMN_REVIEW_RATING_STYLE = "review_rating_style";
+ field public static final java.lang.String COLUMN_SEARCHABLE = "searchable";
+ field public static final java.lang.String COLUMN_SEASON_DISPLAY_NUMBER = "season_display_number";
+ field public static final java.lang.String COLUMN_SEASON_TITLE = "season_title";
+ field public static final java.lang.String COLUMN_SHORT_DESCRIPTION = "short_description";
+ field public static final java.lang.String COLUMN_STARTING_PRICE = "starting_price";
+ field public static final java.lang.String COLUMN_THUMBNAIL_ASPECT_RATIO = "poster_thumbnail_aspect_ratio";
+ field public static final java.lang.String COLUMN_THUMBNAIL_URI = "thumbnail_uri";
+ field public static final java.lang.String COLUMN_TITLE = "title";
+ field public static final java.lang.String COLUMN_TRANSIENT = "transient";
+ field public static final java.lang.String COLUMN_TYPE = "type";
+ field public static final java.lang.String COLUMN_VERSION_NUMBER = "version_number";
+ field public static final java.lang.String COLUMN_VIDEO_HEIGHT = "video_height";
+ field public static final java.lang.String COLUMN_VIDEO_WIDTH = "video_width";
+ field public static final java.lang.String COLUMN_WEIGHT = "weight";
+ field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/preview_program";
+ field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/preview_program";
+ field public static final android.net.Uri CONTENT_URI;
+ field public static final int INTERACTION_TYPE_FANS = 3; // 0x3
+ field public static final int INTERACTION_TYPE_FOLLOWERS = 2; // 0x2
+ field public static final int INTERACTION_TYPE_LIKES = 4; // 0x4
+ field public static final int INTERACTION_TYPE_LISTENS = 1; // 0x1
+ field public static final int INTERACTION_TYPE_THUMBS = 5; // 0x5
+ field public static final int INTERACTION_TYPE_VIEWERS = 6; // 0x6
+ field public static final int INTERACTION_TYPE_VIEWS = 0; // 0x0
+ field public static final int REVIEW_RATING_STYLE_PERCENTAGE = 2; // 0x2
+ field public static final int REVIEW_RATING_STYLE_STARS = 0; // 0x0
+ field public static final int REVIEW_RATING_STYLE_THUMBS_UP_DOWN = 1; // 0x1
+ field public static final int TYPE_ALBUM = 8; // 0x8
+ field public static final int TYPE_ARTIST = 9; // 0x9
+ field public static final int TYPE_CHANNEL = 6; // 0x6
+ field public static final int TYPE_CLIP = 4; // 0x4
+ field public static final int TYPE_EVENT = 5; // 0x5
+ field public static final int TYPE_MOVIE = 0; // 0x0
+ field public static final int TYPE_PLAYLIST = 10; // 0xa
+ field public static final int TYPE_STATION = 11; // 0xb
+ field public static final int TYPE_TRACK = 7; // 0x7
+ field public static final int TYPE_TV_EPISODE = 3; // 0x3
+ field public static final int TYPE_TV_SEASON = 2; // 0x2
+ field public static final int TYPE_TV_SERIES = 1; // 0x1
+ }
+
+ public static final class TvContractCompat.Programs implements android.support.media.tv.TvContractCompat.BaseTvColumns {
+ field public static final java.lang.String COLUMN_AUDIO_LANGUAGE = "audio_language";
+ field public static final java.lang.String COLUMN_BROADCAST_GENRE = "broadcast_genre";
+ field public static final java.lang.String COLUMN_CANONICAL_GENRE = "canonical_genre";
+ field public static final java.lang.String COLUMN_CHANNEL_ID = "channel_id";
+ field public static final java.lang.String COLUMN_CONTENT_RATING = "content_rating";
+ field public static final java.lang.String COLUMN_END_TIME_UTC_MILLIS = "end_time_utc_millis";
+ field public static final java.lang.String COLUMN_EPISODE_DISPLAY_NUMBER = "episode_display_number";
+ field public static final deprecated java.lang.String COLUMN_EPISODE_NUMBER = "episode_number";
+ field public static final java.lang.String COLUMN_EPISODE_TITLE = "episode_title";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_DATA = "internal_provider_data";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG1 = "internal_provider_flag1";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG2 = "internal_provider_flag2";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG3 = "internal_provider_flag3";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG4 = "internal_provider_flag4";
+ field public static final java.lang.String COLUMN_LONG_DESCRIPTION = "long_description";
+ field public static final java.lang.String COLUMN_POSTER_ART_URI = "poster_art_uri";
+ field public static final java.lang.String COLUMN_RECORDING_PROHIBITED = "recording_prohibited";
+ field public static final java.lang.String COLUMN_REVIEW_RATING = "review_rating";
+ field public static final java.lang.String COLUMN_REVIEW_RATING_STYLE = "review_rating_style";
+ field public static final java.lang.String COLUMN_SEARCHABLE = "searchable";
+ field public static final java.lang.String COLUMN_SEASON_DISPLAY_NUMBER = "season_display_number";
+ field public static final deprecated java.lang.String COLUMN_SEASON_NUMBER = "season_number";
+ field public static final java.lang.String COLUMN_SEASON_TITLE = "season_title";
+ field public static final java.lang.String COLUMN_SHORT_DESCRIPTION = "short_description";
+ field public static final java.lang.String COLUMN_START_TIME_UTC_MILLIS = "start_time_utc_millis";
+ field public static final java.lang.String COLUMN_THUMBNAIL_URI = "thumbnail_uri";
+ field public static final java.lang.String COLUMN_TITLE = "title";
+ field public static final java.lang.String COLUMN_VERSION_NUMBER = "version_number";
+ field public static final java.lang.String COLUMN_VIDEO_HEIGHT = "video_height";
+ field public static final java.lang.String COLUMN_VIDEO_WIDTH = "video_width";
+ field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/program";
+ field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/program";
+ field public static final android.net.Uri CONTENT_URI;
+ field public static final int REVIEW_RATING_STYLE_PERCENTAGE = 2; // 0x2
+ field public static final int REVIEW_RATING_STYLE_STARS = 0; // 0x0
+ field public static final int REVIEW_RATING_STYLE_THUMBS_UP_DOWN = 1; // 0x1
+ }
+
+ public static final class TvContractCompat.Programs.Genres {
+ method public static java.lang.String[] decode(java.lang.String);
+ method public static java.lang.String encode(java.lang.String...);
+ method public static boolean isCanonical(java.lang.String);
+ field public static final java.lang.String ANIMAL_WILDLIFE = "ANIMAL_WILDLIFE";
+ field public static final java.lang.String ARTS = "ARTS";
+ field public static final java.lang.String COMEDY = "COMEDY";
+ field public static final java.lang.String DRAMA = "DRAMA";
+ field public static final java.lang.String EDUCATION = "EDUCATION";
+ field public static final java.lang.String ENTERTAINMENT = "ENTERTAINMENT";
+ field public static final java.lang.String FAMILY_KIDS = "FAMILY_KIDS";
+ field public static final java.lang.String GAMING = "GAMING";
+ field public static final java.lang.String LIFE_STYLE = "LIFE_STYLE";
+ field public static final java.lang.String MOVIES = "MOVIES";
+ field public static final java.lang.String MUSIC = "MUSIC";
+ field public static final java.lang.String NEWS = "NEWS";
+ field public static final java.lang.String PREMIER = "PREMIER";
+ field public static final java.lang.String SHOPPING = "SHOPPING";
+ field public static final java.lang.String SPORTS = "SPORTS";
+ field public static final java.lang.String TECH_SCIENCE = "TECH_SCIENCE";
+ field public static final java.lang.String TRAVEL = "TRAVEL";
+ }
+
+ public static final class TvContractCompat.RecordedPrograms implements android.support.media.tv.TvContractCompat.BaseTvColumns {
+ field public static final java.lang.String COLUMN_AUDIO_LANGUAGE = "audio_language";
+ field public static final java.lang.String COLUMN_BROADCAST_GENRE = "broadcast_genre";
+ field public static final java.lang.String COLUMN_CANONICAL_GENRE = "canonical_genre";
+ field public static final java.lang.String COLUMN_CHANNEL_ID = "channel_id";
+ field public static final java.lang.String COLUMN_CONTENT_RATING = "content_rating";
+ field public static final java.lang.String COLUMN_END_TIME_UTC_MILLIS = "end_time_utc_millis";
+ field public static final java.lang.String COLUMN_EPISODE_DISPLAY_NUMBER = "episode_display_number";
+ field public static final java.lang.String COLUMN_EPISODE_TITLE = "episode_title";
+ field public static final java.lang.String COLUMN_INPUT_ID = "input_id";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_DATA = "internal_provider_data";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG1 = "internal_provider_flag1";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG2 = "internal_provider_flag2";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG3 = "internal_provider_flag3";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG4 = "internal_provider_flag4";
+ field public static final java.lang.String COLUMN_LONG_DESCRIPTION = "long_description";
+ field public static final java.lang.String COLUMN_POSTER_ART_URI = "poster_art_uri";
+ field public static final java.lang.String COLUMN_RECORDING_DATA_BYTES = "recording_data_bytes";
+ field public static final java.lang.String COLUMN_RECORDING_DATA_URI = "recording_data_uri";
+ field public static final java.lang.String COLUMN_RECORDING_DURATION_MILLIS = "recording_duration_millis";
+ field public static final java.lang.String COLUMN_RECORDING_EXPIRE_TIME_UTC_MILLIS = "recording_expire_time_utc_millis";
+ field public static final java.lang.String COLUMN_REVIEW_RATING = "review_rating";
+ field public static final java.lang.String COLUMN_REVIEW_RATING_STYLE = "review_rating_style";
+ field public static final java.lang.String COLUMN_SEARCHABLE = "searchable";
+ field public static final java.lang.String COLUMN_SEASON_DISPLAY_NUMBER = "season_display_number";
+ field public static final java.lang.String COLUMN_SEASON_TITLE = "season_title";
+ field public static final java.lang.String COLUMN_SHORT_DESCRIPTION = "short_description";
+ field public static final java.lang.String COLUMN_START_TIME_UTC_MILLIS = "start_time_utc_millis";
+ field public static final java.lang.String COLUMN_THUMBNAIL_URI = "thumbnail_uri";
+ field public static final java.lang.String COLUMN_TITLE = "title";
+ field public static final java.lang.String COLUMN_VERSION_NUMBER = "version_number";
+ field public static final java.lang.String COLUMN_VIDEO_HEIGHT = "video_height";
+ field public static final java.lang.String COLUMN_VIDEO_WIDTH = "video_width";
+ field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/recorded_program";
+ field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/recorded_program";
+ field public static final android.net.Uri CONTENT_URI;
+ field public static final int REVIEW_RATING_STYLE_PERCENTAGE = 2; // 0x2
+ field public static final int REVIEW_RATING_STYLE_STARS = 0; // 0x0
+ field public static final int REVIEW_RATING_STYLE_THUMBS_UP_DOWN = 1; // 0x1
+ }
+
+ public static final class TvContractCompat.WatchNextPrograms implements android.support.media.tv.TvContractCompat.BaseTvColumns {
+ field public static final int ASPECT_RATIO_16_9 = 0; // 0x0
+ field public static final int ASPECT_RATIO_1_1 = 3; // 0x3
+ field public static final int ASPECT_RATIO_2_3 = 4; // 0x4
+ field public static final int ASPECT_RATIO_3_2 = 1; // 0x1
+ field public static final int ASPECT_RATIO_4_3 = 2; // 0x2
+ field public static final int AVAILABILITY_AVAILABLE = 0; // 0x0
+ field public static final int AVAILABILITY_FREE_WITH_SUBSCRIPTION = 1; // 0x1
+ field public static final int AVAILABILITY_PAID_CONTENT = 2; // 0x2
+ field public static final java.lang.String COLUMN_AUDIO_LANGUAGE = "audio_language";
+ field public static final java.lang.String COLUMN_AUTHOR = "author";
+ field public static final java.lang.String COLUMN_AVAILABILITY = "availability";
+ field public static final java.lang.String COLUMN_BROWSABLE = "browsable";
+ field public static final java.lang.String COLUMN_CANONICAL_GENRE = "canonical_genre";
+ field public static final java.lang.String COLUMN_CONTENT_ID = "content_id";
+ field public static final java.lang.String COLUMN_CONTENT_RATING = "content_rating";
+ field public static final java.lang.String COLUMN_DURATION_MILLIS = "duration_millis";
+ field public static final java.lang.String COLUMN_EPISODE_DISPLAY_NUMBER = "episode_display_number";
+ field public static final java.lang.String COLUMN_EPISODE_TITLE = "episode_title";
+ field public static final java.lang.String COLUMN_INTENT_URI = "intent_uri";
+ field public static final java.lang.String COLUMN_INTERACTION_COUNT = "interaction_count";
+ field public static final java.lang.String COLUMN_INTERACTION_TYPE = "interaction_type";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_DATA = "internal_provider_data";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG1 = "internal_provider_flag1";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG2 = "internal_provider_flag2";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG3 = "internal_provider_flag3";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG4 = "internal_provider_flag4";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_ID = "internal_provider_id";
+ field public static final java.lang.String COLUMN_ITEM_COUNT = "item_count";
+ field public static final java.lang.String COLUMN_LAST_ENGAGEMENT_TIME_UTC_MILLIS = "last_engagement_time_utc_millis";
+ field public static final java.lang.String COLUMN_LAST_PLAYBACK_POSITION_MILLIS = "last_playback_position_millis";
+ field public static final java.lang.String COLUMN_LIVE = "live";
+ field public static final java.lang.String COLUMN_LOGO_URI = "logo_uri";
+ field public static final java.lang.String COLUMN_LONG_DESCRIPTION = "long_description";
+ field public static final java.lang.String COLUMN_OFFER_PRICE = "offer_price";
+ field public static final java.lang.String COLUMN_POSTER_ART_ASPECT_RATIO = "poster_art_aspect_ratio";
+ field public static final java.lang.String COLUMN_POSTER_ART_URI = "poster_art_uri";
+ field public static final java.lang.String COLUMN_PREVIEW_VIDEO_URI = "preview_video_uri";
+ field public static final java.lang.String COLUMN_RELEASE_DATE = "release_date";
+ field public static final java.lang.String COLUMN_REVIEW_RATING = "review_rating";
+ field public static final java.lang.String COLUMN_REVIEW_RATING_STYLE = "review_rating_style";
+ field public static final java.lang.String COLUMN_SEARCHABLE = "searchable";
+ field public static final java.lang.String COLUMN_SEASON_DISPLAY_NUMBER = "season_display_number";
+ field public static final java.lang.String COLUMN_SEASON_TITLE = "season_title";
+ field public static final java.lang.String COLUMN_SHORT_DESCRIPTION = "short_description";
+ field public static final java.lang.String COLUMN_STARTING_PRICE = "starting_price";
+ field public static final java.lang.String COLUMN_THUMBNAIL_ASPECT_RATIO = "poster_thumbnail_aspect_ratio";
+ field public static final java.lang.String COLUMN_THUMBNAIL_URI = "thumbnail_uri";
+ field public static final java.lang.String COLUMN_TITLE = "title";
+ field public static final java.lang.String COLUMN_TRANSIENT = "transient";
+ field public static final java.lang.String COLUMN_TYPE = "type";
+ field public static final java.lang.String COLUMN_VERSION_NUMBER = "version_number";
+ field public static final java.lang.String COLUMN_VIDEO_HEIGHT = "video_height";
+ field public static final java.lang.String COLUMN_VIDEO_WIDTH = "video_width";
+ field public static final java.lang.String COLUMN_WATCH_NEXT_TYPE = "watch_next_type";
+ field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/watch_next_program";
+ field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/watch_next_program";
+ field public static final android.net.Uri CONTENT_URI;
+ field public static final int INTERACTION_TYPE_FANS = 3; // 0x3
+ field public static final int INTERACTION_TYPE_FOLLOWERS = 2; // 0x2
+ field public static final int INTERACTION_TYPE_LIKES = 4; // 0x4
+ field public static final int INTERACTION_TYPE_LISTENS = 1; // 0x1
+ field public static final int INTERACTION_TYPE_THUMBS = 5; // 0x5
+ field public static final int INTERACTION_TYPE_VIEWERS = 6; // 0x6
+ field public static final int INTERACTION_TYPE_VIEWS = 0; // 0x0
+ field public static final int REVIEW_RATING_STYLE_PERCENTAGE = 2; // 0x2
+ field public static final int REVIEW_RATING_STYLE_STARS = 0; // 0x0
+ field public static final int REVIEW_RATING_STYLE_THUMBS_UP_DOWN = 1; // 0x1
+ field public static final int TYPE_ALBUM = 8; // 0x8
+ field public static final int TYPE_ARTIST = 9; // 0x9
+ field public static final int TYPE_CHANNEL = 6; // 0x6
+ field public static final int TYPE_CLIP = 4; // 0x4
+ field public static final int TYPE_EVENT = 5; // 0x5
+ field public static final int TYPE_MOVIE = 0; // 0x0
+ field public static final int TYPE_PLAYLIST = 10; // 0xa
+ field public static final int TYPE_STATION = 11; // 0xb
+ field public static final int TYPE_TRACK = 7; // 0x7
+ field public static final int TYPE_TV_EPISODE = 3; // 0x3
+ field public static final int TYPE_TV_SEASON = 2; // 0x2
+ field public static final int TYPE_TV_SERIES = 1; // 0x1
+ field public static final int WATCH_NEXT_TYPE_CONTINUE = 0; // 0x0
+ field public static final int WATCH_NEXT_TYPE_NEW = 2; // 0x2
+ field public static final int WATCH_NEXT_TYPE_NEXT = 1; // 0x1
+ field public static final int WATCH_NEXT_TYPE_WATCHLIST = 3; // 0x3
+ }
+
+ public final class WatchNextProgram {
+ method public boolean equals(java.lang.Object);
+ method public static android.support.media.tv.WatchNextProgram fromCursor(android.database.Cursor);
+ method public long getLastEngagementTimeUtcMillis();
+ method public int getWatchNextType();
+ method public android.content.ContentValues toContentValues();
+ method public java.lang.String toString();
+ }
+
+ public static final class WatchNextProgram.Builder {
+ ctor public WatchNextProgram.Builder();
+ ctor public WatchNextProgram.Builder(android.support.media.tv.WatchNextProgram);
+ method public android.support.media.tv.WatchNextProgram build();
+ method public android.support.media.tv.WatchNextProgram.Builder setLastEngagementTimeUtcMillis(long);
+ method public android.support.media.tv.WatchNextProgram.Builder setWatchNextType(int);
+ }
+
+}
+
diff --git a/tv-provider/api/27.0.0.txt b/tv-provider/api/27.0.0.txt
new file mode 100644
index 0000000..42cad9f
--- /dev/null
+++ b/tv-provider/api/27.0.0.txt
@@ -0,0 +1,545 @@
+package android.support.media.tv {
+
+ public final class Channel {
+ method public static android.support.media.tv.Channel fromCursor(android.database.Cursor);
+ method public int getAppLinkColor();
+ method public android.net.Uri getAppLinkIconUri();
+ method public android.content.Intent getAppLinkIntent() throws java.net.URISyntaxException;
+ method public android.net.Uri getAppLinkIntentUri();
+ method public android.net.Uri getAppLinkPosterArtUri();
+ method public java.lang.String getAppLinkText();
+ method public java.lang.String getDescription();
+ method public java.lang.String getDisplayName();
+ method public java.lang.String getDisplayNumber();
+ method public long getId();
+ method public java.lang.String getInputId();
+ method public byte[] getInternalProviderDataByteArray();
+ method public java.lang.Long getInternalProviderFlag1();
+ method public java.lang.Long getInternalProviderFlag2();
+ method public java.lang.Long getInternalProviderFlag3();
+ method public java.lang.Long getInternalProviderFlag4();
+ method public java.lang.String getInternalProviderId();
+ method public java.lang.String getNetworkAffiliation();
+ method public int getOriginalNetworkId();
+ method public java.lang.String getPackageName();
+ method public int getServiceId();
+ method public java.lang.String getServiceType();
+ method public int getTransportStreamId();
+ method public java.lang.String getType();
+ method public java.lang.String getVideoFormat();
+ method public boolean isBrowsable();
+ method public boolean isLocked();
+ method public boolean isSearchable();
+ method public boolean isTransient();
+ method public android.content.ContentValues toContentValues();
+ }
+
+ public static final class Channel.Builder {
+ ctor public Channel.Builder();
+ ctor public Channel.Builder(android.support.media.tv.Channel);
+ method public android.support.media.tv.Channel build();
+ method public android.support.media.tv.Channel.Builder setAppLinkColor(int);
+ method public android.support.media.tv.Channel.Builder setAppLinkIconUri(android.net.Uri);
+ method public android.support.media.tv.Channel.Builder setAppLinkIntent(android.content.Intent);
+ method public android.support.media.tv.Channel.Builder setAppLinkIntentUri(android.net.Uri);
+ method public android.support.media.tv.Channel.Builder setAppLinkPosterArtUri(android.net.Uri);
+ method public android.support.media.tv.Channel.Builder setAppLinkText(java.lang.String);
+ method public android.support.media.tv.Channel.Builder setDescription(java.lang.String);
+ method public android.support.media.tv.Channel.Builder setDisplayName(java.lang.String);
+ method public android.support.media.tv.Channel.Builder setDisplayNumber(java.lang.String);
+ method public android.support.media.tv.Channel.Builder setInputId(java.lang.String);
+ method public android.support.media.tv.Channel.Builder setInternalProviderData(byte[]);
+ method public android.support.media.tv.Channel.Builder setInternalProviderData(java.lang.String);
+ method public android.support.media.tv.Channel.Builder setInternalProviderFlag1(long);
+ method public android.support.media.tv.Channel.Builder setInternalProviderFlag2(long);
+ method public android.support.media.tv.Channel.Builder setInternalProviderFlag3(long);
+ method public android.support.media.tv.Channel.Builder setInternalProviderFlag4(long);
+ method public android.support.media.tv.Channel.Builder setInternalProviderId(java.lang.String);
+ method public android.support.media.tv.Channel.Builder setNetworkAffiliation(java.lang.String);
+ method public android.support.media.tv.Channel.Builder setOriginalNetworkId(int);
+ method public android.support.media.tv.Channel.Builder setSearchable(boolean);
+ method public android.support.media.tv.Channel.Builder setServiceId(int);
+ method public android.support.media.tv.Channel.Builder setServiceType(java.lang.String);
+ method public android.support.media.tv.Channel.Builder setTransient(boolean);
+ method public android.support.media.tv.Channel.Builder setTransportStreamId(int);
+ method public android.support.media.tv.Channel.Builder setType(java.lang.String);
+ method public android.support.media.tv.Channel.Builder setVideoFormat(java.lang.String);
+ }
+
+ public class ChannelLogoUtils {
+ ctor public ChannelLogoUtils();
+ method public static android.graphics.Bitmap loadChannelLogo(android.content.Context, long);
+ method public static boolean storeChannelLogo(android.content.Context, long, android.net.Uri);
+ method public static boolean storeChannelLogo(android.content.Context, long, android.graphics.Bitmap);
+ }
+
+ public final class PreviewProgram {
+ method public boolean equals(java.lang.Object);
+ method public static android.support.media.tv.PreviewProgram fromCursor(android.database.Cursor);
+ method public long getChannelId();
+ method public int getWeight();
+ method public android.content.ContentValues toContentValues();
+ method public java.lang.String toString();
+ }
+
+ public static final class PreviewProgram.Builder {
+ ctor public PreviewProgram.Builder();
+ ctor public PreviewProgram.Builder(android.support.media.tv.PreviewProgram);
+ method public android.support.media.tv.PreviewProgram build();
+ method public android.support.media.tv.PreviewProgram.Builder setChannelId(long);
+ method public android.support.media.tv.PreviewProgram.Builder setWeight(int);
+ }
+
+ public final class Program implements java.lang.Comparable {
+ method public int compareTo(android.support.media.tv.Program);
+ method public boolean equals(java.lang.Object);
+ method public static android.support.media.tv.Program fromCursor(android.database.Cursor);
+ method public java.lang.String[] getBroadcastGenres();
+ method public long getChannelId();
+ method public long getEndTimeUtcMillis();
+ method public long getStartTimeUtcMillis();
+ method public int hashCode();
+ method public boolean isRecordingProhibited();
+ method public android.content.ContentValues toContentValues();
+ method public java.lang.String toString();
+ }
+
+ public static class Program.Builder {
+ ctor public Program.Builder();
+ ctor public Program.Builder(android.support.media.tv.Program);
+ method public android.support.media.tv.Program build();
+ method public android.support.media.tv.Program.Builder setBroadcastGenres(java.lang.String[]);
+ method public android.support.media.tv.Program.Builder setChannelId(long);
+ method public android.support.media.tv.Program.Builder setEndTimeUtcMillis(long);
+ method public android.support.media.tv.Program.Builder setRecordingProhibited(boolean);
+ method public android.support.media.tv.Program.Builder setStartTimeUtcMillis(long);
+ }
+
+ public final class TvContractCompat {
+ method public static android.net.Uri buildChannelLogoUri(long);
+ method public static android.net.Uri buildChannelLogoUri(android.net.Uri);
+ method public static android.net.Uri buildChannelUri(long);
+ method public static android.net.Uri buildChannelUriForPassthroughInput(java.lang.String);
+ method public static android.net.Uri buildChannelsUriForInput(java.lang.String);
+ method public static java.lang.String buildInputId(android.content.ComponentName);
+ method public static android.net.Uri buildPreviewProgramUri(long);
+ method public static android.net.Uri buildPreviewProgramsUriForChannel(long);
+ method public static android.net.Uri buildPreviewProgramsUriForChannel(android.net.Uri);
+ method public static android.net.Uri buildProgramUri(long);
+ method public static android.net.Uri buildProgramsUriForChannel(long);
+ method public static android.net.Uri buildProgramsUriForChannel(android.net.Uri);
+ method public static android.net.Uri buildProgramsUriForChannel(long, long, long);
+ method public static android.net.Uri buildProgramsUriForChannel(android.net.Uri, long, long);
+ method public static android.net.Uri buildRecordedProgramUri(long);
+ method public static android.net.Uri buildWatchNextProgramUri(long);
+ method public static boolean isChannelUri(android.net.Uri);
+ method public static boolean isChannelUriForPassthroughInput(android.net.Uri);
+ method public static boolean isChannelUriForTunerInput(android.net.Uri);
+ method public static boolean isProgramUri(android.net.Uri);
+ method public static boolean isRecordedProgramUri(android.net.Uri);
+ method public static void requestChannelBrowsable(android.content.Context, long);
+ field public static final java.lang.String ACTION_INITIALIZE_PROGRAMS = "android.media.tv.action.INITIALIZE_PROGRAMS";
+ field public static final java.lang.String ACTION_PREVIEW_PROGRAM_ADDED_TO_WATCH_NEXT = "android.media.tv.action.PREVIEW_PROGRAM_ADDED_TO_WATCH_NEXT";
+ field public static final java.lang.String ACTION_PREVIEW_PROGRAM_BROWSABLE_DISABLED = "android.media.tv.action.PREVIEW_PROGRAM_BROWSABLE_DISABLED";
+ field public static final java.lang.String ACTION_REQUEST_CHANNEL_BROWSABLE = "android.media.tv.action.REQUEST_CHANNEL_BROWSABLE";
+ field public static final java.lang.String ACTION_WATCH_NEXT_PROGRAM_BROWSABLE_DISABLED = "android.media.tv.action.WATCH_NEXT_PROGRAM_BROWSABLE_DISABLED";
+ field public static final java.lang.String AUTHORITY = "android.media.tv";
+ field public static final java.lang.String EXTRA_CHANNEL_ID = "android.media.tv.extra.CHANNEL_ID";
+ field public static final java.lang.String EXTRA_PREVIEW_PROGRAM_ID = "android.media.tv.extra.PREVIEW_PROGRAM_ID";
+ field public static final java.lang.String EXTRA_WATCH_NEXT_PROGRAM_ID = "android.media.tv.extra.WATCH_NEXT_PROGRAM_ID";
+ }
+
+ public static abstract interface TvContractCompat.BaseTvColumns {
+ field public static final java.lang.String COLUMN_PACKAGE_NAME = "package_name";
+ }
+
+ public static final class TvContractCompat.Channels implements android.support.media.tv.TvContractCompat.BaseTvColumns {
+ method public static java.lang.String getVideoResolution(java.lang.String);
+ field public static final java.lang.String COLUMN_APP_LINK_COLOR = "app_link_color";
+ field public static final java.lang.String COLUMN_APP_LINK_ICON_URI = "app_link_icon_uri";
+ field public static final java.lang.String COLUMN_APP_LINK_INTENT_URI = "app_link_intent_uri";
+ field public static final java.lang.String COLUMN_APP_LINK_POSTER_ART_URI = "app_link_poster_art_uri";
+ field public static final java.lang.String COLUMN_APP_LINK_TEXT = "app_link_text";
+ field public static final java.lang.String COLUMN_BROWSABLE = "browsable";
+ field public static final java.lang.String COLUMN_DESCRIPTION = "description";
+ field public static final java.lang.String COLUMN_DISPLAY_NAME = "display_name";
+ field public static final java.lang.String COLUMN_DISPLAY_NUMBER = "display_number";
+ field public static final java.lang.String COLUMN_INPUT_ID = "input_id";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_DATA = "internal_provider_data";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG1 = "internal_provider_flag1";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG2 = "internal_provider_flag2";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG3 = "internal_provider_flag3";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG4 = "internal_provider_flag4";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_ID = "internal_provider_id";
+ field public static final java.lang.String COLUMN_LOCKED = "locked";
+ field public static final java.lang.String COLUMN_NETWORK_AFFILIATION = "network_affiliation";
+ field public static final java.lang.String COLUMN_ORIGINAL_NETWORK_ID = "original_network_id";
+ field public static final java.lang.String COLUMN_SEARCHABLE = "searchable";
+ field public static final java.lang.String COLUMN_SERVICE_ID = "service_id";
+ field public static final java.lang.String COLUMN_SERVICE_TYPE = "service_type";
+ field public static final java.lang.String COLUMN_TRANSIENT = "transient";
+ field public static final java.lang.String COLUMN_TRANSPORT_STREAM_ID = "transport_stream_id";
+ field public static final java.lang.String COLUMN_TYPE = "type";
+ field public static final java.lang.String COLUMN_VERSION_NUMBER = "version_number";
+ field public static final java.lang.String COLUMN_VIDEO_FORMAT = "video_format";
+ field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/channel";
+ field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/channel";
+ field public static final android.net.Uri CONTENT_URI;
+ field public static final java.lang.String SERVICE_TYPE_AUDIO = "SERVICE_TYPE_AUDIO";
+ field public static final java.lang.String SERVICE_TYPE_AUDIO_VIDEO = "SERVICE_TYPE_AUDIO_VIDEO";
+ field public static final java.lang.String SERVICE_TYPE_OTHER = "SERVICE_TYPE_OTHER";
+ field public static final java.lang.String TYPE_1SEG = "TYPE_1SEG";
+ field public static final java.lang.String TYPE_ATSC_C = "TYPE_ATSC_C";
+ field public static final java.lang.String TYPE_ATSC_M_H = "TYPE_ATSC_M_H";
+ field public static final java.lang.String TYPE_ATSC_T = "TYPE_ATSC_T";
+ field public static final java.lang.String TYPE_CMMB = "TYPE_CMMB";
+ field public static final java.lang.String TYPE_DTMB = "TYPE_DTMB";
+ field public static final java.lang.String TYPE_DVB_C = "TYPE_DVB_C";
+ field public static final java.lang.String TYPE_DVB_C2 = "TYPE_DVB_C2";
+ field public static final java.lang.String TYPE_DVB_H = "TYPE_DVB_H";
+ field public static final java.lang.String TYPE_DVB_S = "TYPE_DVB_S";
+ field public static final java.lang.String TYPE_DVB_S2 = "TYPE_DVB_S2";
+ field public static final java.lang.String TYPE_DVB_SH = "TYPE_DVB_SH";
+ field public static final java.lang.String TYPE_DVB_T = "TYPE_DVB_T";
+ field public static final java.lang.String TYPE_DVB_T2 = "TYPE_DVB_T2";
+ field public static final java.lang.String TYPE_ISDB_C = "TYPE_ISDB_C";
+ field public static final java.lang.String TYPE_ISDB_S = "TYPE_ISDB_S";
+ field public static final java.lang.String TYPE_ISDB_T = "TYPE_ISDB_T";
+ field public static final java.lang.String TYPE_ISDB_TB = "TYPE_ISDB_TB";
+ field public static final java.lang.String TYPE_NTSC = "TYPE_NTSC";
+ field public static final java.lang.String TYPE_OTHER = "TYPE_OTHER";
+ field public static final java.lang.String TYPE_PAL = "TYPE_PAL";
+ field public static final java.lang.String TYPE_PREVIEW = "TYPE_PREVIEW";
+ field public static final java.lang.String TYPE_SECAM = "TYPE_SECAM";
+ field public static final java.lang.String TYPE_S_DMB = "TYPE_S_DMB";
+ field public static final java.lang.String TYPE_T_DMB = "TYPE_T_DMB";
+ field public static final java.lang.String VIDEO_FORMAT_1080I = "VIDEO_FORMAT_1080I";
+ field public static final java.lang.String VIDEO_FORMAT_1080P = "VIDEO_FORMAT_1080P";
+ field public static final java.lang.String VIDEO_FORMAT_2160P = "VIDEO_FORMAT_2160P";
+ field public static final java.lang.String VIDEO_FORMAT_240P = "VIDEO_FORMAT_240P";
+ field public static final java.lang.String VIDEO_FORMAT_360P = "VIDEO_FORMAT_360P";
+ field public static final java.lang.String VIDEO_FORMAT_4320P = "VIDEO_FORMAT_4320P";
+ field public static final java.lang.String VIDEO_FORMAT_480I = "VIDEO_FORMAT_480I";
+ field public static final java.lang.String VIDEO_FORMAT_480P = "VIDEO_FORMAT_480P";
+ field public static final java.lang.String VIDEO_FORMAT_576I = "VIDEO_FORMAT_576I";
+ field public static final java.lang.String VIDEO_FORMAT_576P = "VIDEO_FORMAT_576P";
+ field public static final java.lang.String VIDEO_FORMAT_720P = "VIDEO_FORMAT_720P";
+ field public static final java.lang.String VIDEO_RESOLUTION_ED = "VIDEO_RESOLUTION_ED";
+ field public static final java.lang.String VIDEO_RESOLUTION_FHD = "VIDEO_RESOLUTION_FHD";
+ field public static final java.lang.String VIDEO_RESOLUTION_HD = "VIDEO_RESOLUTION_HD";
+ field public static final java.lang.String VIDEO_RESOLUTION_SD = "VIDEO_RESOLUTION_SD";
+ field public static final java.lang.String VIDEO_RESOLUTION_UHD = "VIDEO_RESOLUTION_UHD";
+ }
+
+ public static final class TvContractCompat.Channels.Logo {
+ field public static final java.lang.String CONTENT_DIRECTORY = "logo";
+ }
+
+ public static final class TvContractCompat.PreviewPrograms implements android.support.media.tv.TvContractCompat.BaseTvColumns {
+ field public static final int ASPECT_RATIO_16_9 = 0; // 0x0
+ field public static final int ASPECT_RATIO_1_1 = 3; // 0x3
+ field public static final int ASPECT_RATIO_2_3 = 4; // 0x4
+ field public static final int ASPECT_RATIO_3_2 = 1; // 0x1
+ field public static final int ASPECT_RATIO_4_3 = 2; // 0x2
+ field public static final int ASPECT_RATIO_MOVIE_POSTER = 5; // 0x5
+ field public static final int AVAILABILITY_AVAILABLE = 0; // 0x0
+ field public static final int AVAILABILITY_FREE = 4; // 0x4
+ field public static final int AVAILABILITY_FREE_WITH_SUBSCRIPTION = 1; // 0x1
+ field public static final int AVAILABILITY_PAID_CONTENT = 2; // 0x2
+ field public static final int AVAILABILITY_PURCHASED = 3; // 0x3
+ field public static final java.lang.String COLUMN_AUDIO_LANGUAGE = "audio_language";
+ field public static final java.lang.String COLUMN_AUTHOR = "author";
+ field public static final java.lang.String COLUMN_AVAILABILITY = "availability";
+ field public static final java.lang.String COLUMN_BROWSABLE = "browsable";
+ field public static final java.lang.String COLUMN_CANONICAL_GENRE = "canonical_genre";
+ field public static final java.lang.String COLUMN_CHANNEL_ID = "channel_id";
+ field public static final java.lang.String COLUMN_CONTENT_ID = "content_id";
+ field public static final java.lang.String COLUMN_CONTENT_RATING = "content_rating";
+ field public static final java.lang.String COLUMN_DURATION_MILLIS = "duration_millis";
+ field public static final java.lang.String COLUMN_END_TIME_UTC_MILLIS = "end_time_utc_millis";
+ field public static final java.lang.String COLUMN_EPISODE_DISPLAY_NUMBER = "episode_display_number";
+ field public static final java.lang.String COLUMN_EPISODE_TITLE = "episode_title";
+ field public static final java.lang.String COLUMN_GENRE = "genre";
+ field public static final java.lang.String COLUMN_INTENT_URI = "intent_uri";
+ field public static final java.lang.String COLUMN_INTERACTION_COUNT = "interaction_count";
+ field public static final java.lang.String COLUMN_INTERACTION_TYPE = "interaction_type";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_DATA = "internal_provider_data";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG1 = "internal_provider_flag1";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG2 = "internal_provider_flag2";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG3 = "internal_provider_flag3";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG4 = "internal_provider_flag4";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_ID = "internal_provider_id";
+ field public static final java.lang.String COLUMN_ITEM_COUNT = "item_count";
+ field public static final java.lang.String COLUMN_LAST_PLAYBACK_POSITION_MILLIS = "last_playback_position_millis";
+ field public static final java.lang.String COLUMN_LIVE = "live";
+ field public static final java.lang.String COLUMN_LOGO_CONTENT_DESCRIPTION = "logo_content_description";
+ field public static final java.lang.String COLUMN_LOGO_URI = "logo_uri";
+ field public static final java.lang.String COLUMN_LONG_DESCRIPTION = "long_description";
+ field public static final java.lang.String COLUMN_OFFER_PRICE = "offer_price";
+ field public static final java.lang.String COLUMN_POSTER_ART_ASPECT_RATIO = "poster_art_aspect_ratio";
+ field public static final java.lang.String COLUMN_POSTER_ART_URI = "poster_art_uri";
+ field public static final java.lang.String COLUMN_PREVIEW_AUDIO_URI = "preview_audio_uri";
+ field public static final java.lang.String COLUMN_PREVIEW_VIDEO_URI = "preview_video_uri";
+ field public static final java.lang.String COLUMN_RELEASE_DATE = "release_date";
+ field public static final java.lang.String COLUMN_REVIEW_RATING = "review_rating";
+ field public static final java.lang.String COLUMN_REVIEW_RATING_STYLE = "review_rating_style";
+ field public static final java.lang.String COLUMN_SEARCHABLE = "searchable";
+ field public static final java.lang.String COLUMN_SEASON_DISPLAY_NUMBER = "season_display_number";
+ field public static final java.lang.String COLUMN_SEASON_TITLE = "season_title";
+ field public static final java.lang.String COLUMN_SHORT_DESCRIPTION = "short_description";
+ field public static final java.lang.String COLUMN_STARTING_PRICE = "starting_price";
+ field public static final java.lang.String COLUMN_START_TIME_UTC_MILLIS = "start_time_utc_millis";
+ field public static final java.lang.String COLUMN_THUMBNAIL_ASPECT_RATIO = "poster_thumbnail_aspect_ratio";
+ field public static final java.lang.String COLUMN_THUMBNAIL_URI = "thumbnail_uri";
+ field public static final java.lang.String COLUMN_TITLE = "title";
+ field public static final java.lang.String COLUMN_TRANSIENT = "transient";
+ field public static final java.lang.String COLUMN_TYPE = "type";
+ field public static final java.lang.String COLUMN_VERSION_NUMBER = "version_number";
+ field public static final java.lang.String COLUMN_VIDEO_HEIGHT = "video_height";
+ field public static final java.lang.String COLUMN_VIDEO_WIDTH = "video_width";
+ field public static final java.lang.String COLUMN_WEIGHT = "weight";
+ field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/preview_program";
+ field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/preview_program";
+ field public static final android.net.Uri CONTENT_URI;
+ field public static final int INTERACTION_TYPE_FANS = 3; // 0x3
+ field public static final int INTERACTION_TYPE_FOLLOWERS = 2; // 0x2
+ field public static final int INTERACTION_TYPE_LIKES = 4; // 0x4
+ field public static final int INTERACTION_TYPE_LISTENS = 1; // 0x1
+ field public static final int INTERACTION_TYPE_THUMBS = 5; // 0x5
+ field public static final int INTERACTION_TYPE_VIEWERS = 6; // 0x6
+ field public static final int INTERACTION_TYPE_VIEWS = 0; // 0x0
+ field public static final int REVIEW_RATING_STYLE_PERCENTAGE = 2; // 0x2
+ field public static final int REVIEW_RATING_STYLE_STARS = 0; // 0x0
+ field public static final int REVIEW_RATING_STYLE_THUMBS_UP_DOWN = 1; // 0x1
+ field public static final int TYPE_ALBUM = 8; // 0x8
+ field public static final int TYPE_ARTIST = 9; // 0x9
+ field public static final int TYPE_CHANNEL = 6; // 0x6
+ field public static final int TYPE_CLIP = 4; // 0x4
+ field public static final int TYPE_EVENT = 5; // 0x5
+ field public static final int TYPE_GAME = 12; // 0xc
+ field public static final int TYPE_MOVIE = 0; // 0x0
+ field public static final int TYPE_PLAYLIST = 10; // 0xa
+ field public static final int TYPE_STATION = 11; // 0xb
+ field public static final int TYPE_TRACK = 7; // 0x7
+ field public static final int TYPE_TV_EPISODE = 3; // 0x3
+ field public static final int TYPE_TV_SEASON = 2; // 0x2
+ field public static final int TYPE_TV_SERIES = 1; // 0x1
+ }
+
+ public static final class TvContractCompat.Programs implements android.support.media.tv.TvContractCompat.BaseTvColumns {
+ field public static final java.lang.String COLUMN_AUDIO_LANGUAGE = "audio_language";
+ field public static final java.lang.String COLUMN_BROADCAST_GENRE = "broadcast_genre";
+ field public static final java.lang.String COLUMN_CANONICAL_GENRE = "canonical_genre";
+ field public static final java.lang.String COLUMN_CHANNEL_ID = "channel_id";
+ field public static final java.lang.String COLUMN_CONTENT_RATING = "content_rating";
+ field public static final java.lang.String COLUMN_END_TIME_UTC_MILLIS = "end_time_utc_millis";
+ field public static final java.lang.String COLUMN_EPISODE_DISPLAY_NUMBER = "episode_display_number";
+ field public static final deprecated java.lang.String COLUMN_EPISODE_NUMBER = "episode_number";
+ field public static final java.lang.String COLUMN_EPISODE_TITLE = "episode_title";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_DATA = "internal_provider_data";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG1 = "internal_provider_flag1";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG2 = "internal_provider_flag2";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG3 = "internal_provider_flag3";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG4 = "internal_provider_flag4";
+ field public static final java.lang.String COLUMN_LONG_DESCRIPTION = "long_description";
+ field public static final java.lang.String COLUMN_POSTER_ART_URI = "poster_art_uri";
+ field public static final java.lang.String COLUMN_RECORDING_PROHIBITED = "recording_prohibited";
+ field public static final java.lang.String COLUMN_REVIEW_RATING = "review_rating";
+ field public static final java.lang.String COLUMN_REVIEW_RATING_STYLE = "review_rating_style";
+ field public static final java.lang.String COLUMN_SEARCHABLE = "searchable";
+ field public static final java.lang.String COLUMN_SEASON_DISPLAY_NUMBER = "season_display_number";
+ field public static final deprecated java.lang.String COLUMN_SEASON_NUMBER = "season_number";
+ field public static final java.lang.String COLUMN_SEASON_TITLE = "season_title";
+ field public static final java.lang.String COLUMN_SHORT_DESCRIPTION = "short_description";
+ field public static final java.lang.String COLUMN_START_TIME_UTC_MILLIS = "start_time_utc_millis";
+ field public static final java.lang.String COLUMN_THUMBNAIL_URI = "thumbnail_uri";
+ field public static final java.lang.String COLUMN_TITLE = "title";
+ field public static final java.lang.String COLUMN_VERSION_NUMBER = "version_number";
+ field public static final java.lang.String COLUMN_VIDEO_HEIGHT = "video_height";
+ field public static final java.lang.String COLUMN_VIDEO_WIDTH = "video_width";
+ field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/program";
+ field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/program";
+ field public static final android.net.Uri CONTENT_URI;
+ field public static final int REVIEW_RATING_STYLE_PERCENTAGE = 2; // 0x2
+ field public static final int REVIEW_RATING_STYLE_STARS = 0; // 0x0
+ field public static final int REVIEW_RATING_STYLE_THUMBS_UP_DOWN = 1; // 0x1
+ }
+
+ public static final class TvContractCompat.Programs.Genres {
+ method public static java.lang.String[] decode(java.lang.String);
+ method public static java.lang.String encode(java.lang.String...);
+ method public static boolean isCanonical(java.lang.String);
+ field public static final java.lang.String ANIMAL_WILDLIFE = "ANIMAL_WILDLIFE";
+ field public static final java.lang.String ARTS = "ARTS";
+ field public static final java.lang.String COMEDY = "COMEDY";
+ field public static final java.lang.String DRAMA = "DRAMA";
+ field public static final java.lang.String EDUCATION = "EDUCATION";
+ field public static final java.lang.String ENTERTAINMENT = "ENTERTAINMENT";
+ field public static final java.lang.String FAMILY_KIDS = "FAMILY_KIDS";
+ field public static final java.lang.String GAMING = "GAMING";
+ field public static final java.lang.String LIFE_STYLE = "LIFE_STYLE";
+ field public static final java.lang.String MOVIES = "MOVIES";
+ field public static final java.lang.String MUSIC = "MUSIC";
+ field public static final java.lang.String NEWS = "NEWS";
+ field public static final java.lang.String PREMIER = "PREMIER";
+ field public static final java.lang.String SHOPPING = "SHOPPING";
+ field public static final java.lang.String SPORTS = "SPORTS";
+ field public static final java.lang.String TECH_SCIENCE = "TECH_SCIENCE";
+ field public static final java.lang.String TRAVEL = "TRAVEL";
+ }
+
+ public static final class TvContractCompat.RecordedPrograms implements android.support.media.tv.TvContractCompat.BaseTvColumns {
+ field public static final java.lang.String COLUMN_AUDIO_LANGUAGE = "audio_language";
+ field public static final java.lang.String COLUMN_BROADCAST_GENRE = "broadcast_genre";
+ field public static final java.lang.String COLUMN_CANONICAL_GENRE = "canonical_genre";
+ field public static final java.lang.String COLUMN_CHANNEL_ID = "channel_id";
+ field public static final java.lang.String COLUMN_CONTENT_RATING = "content_rating";
+ field public static final java.lang.String COLUMN_END_TIME_UTC_MILLIS = "end_time_utc_millis";
+ field public static final java.lang.String COLUMN_EPISODE_DISPLAY_NUMBER = "episode_display_number";
+ field public static final java.lang.String COLUMN_EPISODE_TITLE = "episode_title";
+ field public static final java.lang.String COLUMN_INPUT_ID = "input_id";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_DATA = "internal_provider_data";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG1 = "internal_provider_flag1";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG2 = "internal_provider_flag2";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG3 = "internal_provider_flag3";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG4 = "internal_provider_flag4";
+ field public static final java.lang.String COLUMN_LONG_DESCRIPTION = "long_description";
+ field public static final java.lang.String COLUMN_POSTER_ART_URI = "poster_art_uri";
+ field public static final java.lang.String COLUMN_RECORDING_DATA_BYTES = "recording_data_bytes";
+ field public static final java.lang.String COLUMN_RECORDING_DATA_URI = "recording_data_uri";
+ field public static final java.lang.String COLUMN_RECORDING_DURATION_MILLIS = "recording_duration_millis";
+ field public static final java.lang.String COLUMN_RECORDING_EXPIRE_TIME_UTC_MILLIS = "recording_expire_time_utc_millis";
+ field public static final java.lang.String COLUMN_REVIEW_RATING = "review_rating";
+ field public static final java.lang.String COLUMN_REVIEW_RATING_STYLE = "review_rating_style";
+ field public static final java.lang.String COLUMN_SEARCHABLE = "searchable";
+ field public static final java.lang.String COLUMN_SEASON_DISPLAY_NUMBER = "season_display_number";
+ field public static final java.lang.String COLUMN_SEASON_TITLE = "season_title";
+ field public static final java.lang.String COLUMN_SHORT_DESCRIPTION = "short_description";
+ field public static final java.lang.String COLUMN_START_TIME_UTC_MILLIS = "start_time_utc_millis";
+ field public static final java.lang.String COLUMN_THUMBNAIL_URI = "thumbnail_uri";
+ field public static final java.lang.String COLUMN_TITLE = "title";
+ field public static final java.lang.String COLUMN_VERSION_NUMBER = "version_number";
+ field public static final java.lang.String COLUMN_VIDEO_HEIGHT = "video_height";
+ field public static final java.lang.String COLUMN_VIDEO_WIDTH = "video_width";
+ field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/recorded_program";
+ field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/recorded_program";
+ field public static final android.net.Uri CONTENT_URI;
+ field public static final int REVIEW_RATING_STYLE_PERCENTAGE = 2; // 0x2
+ field public static final int REVIEW_RATING_STYLE_STARS = 0; // 0x0
+ field public static final int REVIEW_RATING_STYLE_THUMBS_UP_DOWN = 1; // 0x1
+ }
+
+ public static final class TvContractCompat.WatchNextPrograms implements android.support.media.tv.TvContractCompat.BaseTvColumns {
+ field public static final int ASPECT_RATIO_16_9 = 0; // 0x0
+ field public static final int ASPECT_RATIO_1_1 = 3; // 0x3
+ field public static final int ASPECT_RATIO_2_3 = 4; // 0x4
+ field public static final int ASPECT_RATIO_3_2 = 1; // 0x1
+ field public static final int ASPECT_RATIO_4_3 = 2; // 0x2
+ field public static final int ASPECT_RATIO_MOVIE_POSTER = 5; // 0x5
+ field public static final int AVAILABILITY_AVAILABLE = 0; // 0x0
+ field public static final int AVAILABILITY_FREE = 4; // 0x4
+ field public static final int AVAILABILITY_FREE_WITH_SUBSCRIPTION = 1; // 0x1
+ field public static final int AVAILABILITY_PAID_CONTENT = 2; // 0x2
+ field public static final int AVAILABILITY_PURCHASED = 3; // 0x3
+ field public static final java.lang.String COLUMN_AUDIO_LANGUAGE = "audio_language";
+ field public static final java.lang.String COLUMN_AUTHOR = "author";
+ field public static final java.lang.String COLUMN_AVAILABILITY = "availability";
+ field public static final java.lang.String COLUMN_BROWSABLE = "browsable";
+ field public static final java.lang.String COLUMN_CANONICAL_GENRE = "canonical_genre";
+ field public static final java.lang.String COLUMN_CONTENT_ID = "content_id";
+ field public static final java.lang.String COLUMN_CONTENT_RATING = "content_rating";
+ field public static final java.lang.String COLUMN_DURATION_MILLIS = "duration_millis";
+ field public static final java.lang.String COLUMN_END_TIME_UTC_MILLIS = "end_time_utc_millis";
+ field public static final java.lang.String COLUMN_EPISODE_DISPLAY_NUMBER = "episode_display_number";
+ field public static final java.lang.String COLUMN_EPISODE_TITLE = "episode_title";
+ field public static final java.lang.String COLUMN_GENRE = "genre";
+ field public static final java.lang.String COLUMN_INTENT_URI = "intent_uri";
+ field public static final java.lang.String COLUMN_INTERACTION_COUNT = "interaction_count";
+ field public static final java.lang.String COLUMN_INTERACTION_TYPE = "interaction_type";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_DATA = "internal_provider_data";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG1 = "internal_provider_flag1";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG2 = "internal_provider_flag2";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG3 = "internal_provider_flag3";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG4 = "internal_provider_flag4";
+ field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_ID = "internal_provider_id";
+ field public static final java.lang.String COLUMN_ITEM_COUNT = "item_count";
+ field public static final java.lang.String COLUMN_LAST_ENGAGEMENT_TIME_UTC_MILLIS = "last_engagement_time_utc_millis";
+ field public static final java.lang.String COLUMN_LAST_PLAYBACK_POSITION_MILLIS = "last_playback_position_millis";
+ field public static final java.lang.String COLUMN_LIVE = "live";
+ field public static final java.lang.String COLUMN_LOGO_CONTENT_DESCRIPTION = "logo_content_description";
+ field public static final java.lang.String COLUMN_LOGO_URI = "logo_uri";
+ field public static final java.lang.String COLUMN_LONG_DESCRIPTION = "long_description";
+ field public static final java.lang.String COLUMN_OFFER_PRICE = "offer_price";
+ field public static final java.lang.String COLUMN_POSTER_ART_ASPECT_RATIO = "poster_art_aspect_ratio";
+ field public static final java.lang.String COLUMN_POSTER_ART_URI = "poster_art_uri";
+ field public static final java.lang.String COLUMN_PREVIEW_AUDIO_URI = "preview_audio_uri";
+ field public static final java.lang.String COLUMN_PREVIEW_VIDEO_URI = "preview_video_uri";
+ field public static final java.lang.String COLUMN_RELEASE_DATE = "release_date";
+ field public static final java.lang.String COLUMN_REVIEW_RATING = "review_rating";
+ field public static final java.lang.String COLUMN_REVIEW_RATING_STYLE = "review_rating_style";
+ field public static final java.lang.String COLUMN_SEARCHABLE = "searchable";
+ field public static final java.lang.String COLUMN_SEASON_DISPLAY_NUMBER = "season_display_number";
+ field public static final java.lang.String COLUMN_SEASON_TITLE = "season_title";
+ field public static final java.lang.String COLUMN_SHORT_DESCRIPTION = "short_description";
+ field public static final java.lang.String COLUMN_STARTING_PRICE = "starting_price";
+ field public static final java.lang.String COLUMN_START_TIME_UTC_MILLIS = "start_time_utc_millis";
+ field public static final java.lang.String COLUMN_THUMBNAIL_ASPECT_RATIO = "poster_thumbnail_aspect_ratio";
+ field public static final java.lang.String COLUMN_THUMBNAIL_URI = "thumbnail_uri";
+ field public static final java.lang.String COLUMN_TITLE = "title";
+ field public static final java.lang.String COLUMN_TRANSIENT = "transient";
+ field public static final java.lang.String COLUMN_TYPE = "type";
+ field public static final java.lang.String COLUMN_VERSION_NUMBER = "version_number";
+ field public static final java.lang.String COLUMN_VIDEO_HEIGHT = "video_height";
+ field public static final java.lang.String COLUMN_VIDEO_WIDTH = "video_width";
+ field public static final java.lang.String COLUMN_WATCH_NEXT_TYPE = "watch_next_type";
+ field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/watch_next_program";
+ field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/watch_next_program";
+ field public static final android.net.Uri CONTENT_URI;
+ field public static final int INTERACTION_TYPE_FANS = 3; // 0x3
+ field public static final int INTERACTION_TYPE_FOLLOWERS = 2; // 0x2
+ field public static final int INTERACTION_TYPE_LIKES = 4; // 0x4
+ field public static final int INTERACTION_TYPE_LISTENS = 1; // 0x1
+ field public static final int INTERACTION_TYPE_THUMBS = 5; // 0x5
+ field public static final int INTERACTION_TYPE_VIEWERS = 6; // 0x6
+ field public static final int INTERACTION_TYPE_VIEWS = 0; // 0x0
+ field public static final int REVIEW_RATING_STYLE_PERCENTAGE = 2; // 0x2
+ field public static final int REVIEW_RATING_STYLE_STARS = 0; // 0x0
+ field public static final int REVIEW_RATING_STYLE_THUMBS_UP_DOWN = 1; // 0x1
+ field public static final int TYPE_ALBUM = 8; // 0x8
+ field public static final int TYPE_ARTIST = 9; // 0x9
+ field public static final int TYPE_CHANNEL = 6; // 0x6
+ field public static final int TYPE_CLIP = 4; // 0x4
+ field public static final int TYPE_EVENT = 5; // 0x5
+ field public static final int TYPE_GAME = 12; // 0xc
+ field public static final int TYPE_MOVIE = 0; // 0x0
+ field public static final int TYPE_PLAYLIST = 10; // 0xa
+ field public static final int TYPE_STATION = 11; // 0xb
+ field public static final int TYPE_TRACK = 7; // 0x7
+ field public static final int TYPE_TV_EPISODE = 3; // 0x3
+ field public static final int TYPE_TV_SEASON = 2; // 0x2
+ field public static final int TYPE_TV_SERIES = 1; // 0x1
+ field public static final int WATCH_NEXT_TYPE_CONTINUE = 0; // 0x0
+ field public static final int WATCH_NEXT_TYPE_NEW = 2; // 0x2
+ field public static final int WATCH_NEXT_TYPE_NEXT = 1; // 0x1
+ field public static final int WATCH_NEXT_TYPE_WATCHLIST = 3; // 0x3
+ }
+
+ public final class WatchNextProgram {
+ method public boolean equals(java.lang.Object);
+ method public static android.support.media.tv.WatchNextProgram fromCursor(android.database.Cursor);
+ method public long getLastEngagementTimeUtcMillis();
+ method public int getWatchNextType();
+ method public android.content.ContentValues toContentValues();
+ method public java.lang.String toString();
+ }
+
+ public static final class WatchNextProgram.Builder {
+ ctor public WatchNextProgram.Builder();
+ ctor public WatchNextProgram.Builder(android.support.media.tv.WatchNextProgram);
+ method public android.support.media.tv.WatchNextProgram build();
+ method public android.support.media.tv.WatchNextProgram.Builder setLastEngagementTimeUtcMillis(long);
+ method public android.support.media.tv.WatchNextProgram.Builder setWatchNextType(int);
+ }
+
+}
+
diff --git a/tv-provider/build.gradle b/tv-provider/build.gradle
index 42d2d90..0545458 100644
--- a/tv-provider/build.gradle
+++ b/tv-provider/build.gradle
@@ -11,11 +11,6 @@
defaultConfig {
minSdkVersion 21
}
-
- sourceSets {
- main.java.srcDirs = ['src']
- main.res.srcDir 'res'
- }
}
supportLibrary {
diff --git a/tv-provider/lint-baseline.xml b/tv-provider/lint-baseline.xml
index d5fde3a..9814796 100644
--- a/tv-provider/lint-baseline.xml
+++ b/tv-provider/lint-baseline.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<issues format="4" by="lint 3.0.0-alpha9">
+<issues format="4" by="lint 3.0.0-beta6">
<issue
id="WrongConstant"
@@ -7,8 +7,8 @@
errorLine1=" return i == null ? INVALID_INT_VALUE : i;"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/android/support/media/tv/BasePreviewProgram.java"
- line="129"
+ file="src/main/java/android/support/media/tv/BasePreviewProgram.java"
+ line="130"
column="28"/>
</issue>
@@ -18,8 +18,8 @@
errorLine1=" return i == null ? INVALID_INT_VALUE : i;"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/android/support/media/tv/BasePreviewProgram.java"
- line="139"
+ file="src/main/java/android/support/media/tv/BasePreviewProgram.java"
+ line="140"
column="28"/>
</issue>
@@ -29,8 +29,8 @@
errorLine1=" return i == null ? INVALID_INT_VALUE : i;"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/android/support/media/tv/BasePreviewProgram.java"
- line="149"
+ file="src/main/java/android/support/media/tv/BasePreviewProgram.java"
+ line="150"
column="28"/>
</issue>
@@ -40,8 +40,8 @@
errorLine1=" return i == null ? INVALID_INT_VALUE : i;"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/android/support/media/tv/BasePreviewProgram.java"
- line="167"
+ file="src/main/java/android/support/media/tv/BasePreviewProgram.java"
+ line="168"
column="28"/>
</issue>
@@ -51,8 +51,8 @@
errorLine1=" return i == null ? INVALID_INT_VALUE : i;"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/android/support/media/tv/BasePreviewProgram.java"
- line="218"
+ file="src/main/java/android/support/media/tv/BasePreviewProgram.java"
+ line="219"
column="28"/>
</issue>
@@ -62,7 +62,7 @@
errorLine1=" return i == null ? INVALID_INT_VALUE : i;"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/android/support/media/tv/BaseProgram.java"
+ file="src/main/java/android/support/media/tv/BaseProgram.java"
line="257"
column="28"/>
</issue>
@@ -73,7 +73,7 @@
errorLine1=" mValues.put(Programs.COLUMN_BROADCAST_GENRE, Programs.Genres.encode(genres));"
errorLine2=" ~~~~~~">
<location
- file="src/android/support/media/tv/Program.java"
+ file="src/main/java/android/support/media/tv/Program.java"
line="286"
column="81"/>
</issue>
@@ -84,7 +84,7 @@
errorLine1=" return i == null ? INVALID_INT_VALUE : i;"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/android/support/media/tv/WatchNextProgram.java"
+ file="src/main/java/android/support/media/tv/WatchNextProgram.java"
line="99"
column="28"/>
</issue>
diff --git a/tv-provider/src/android/support/media/tv/BasePreviewProgram.java b/tv-provider/src/main/java/android/support/media/tv/BasePreviewProgram.java
similarity index 100%
rename from tv-provider/src/android/support/media/tv/BasePreviewProgram.java
rename to tv-provider/src/main/java/android/support/media/tv/BasePreviewProgram.java
diff --git a/tv-provider/src/android/support/media/tv/BaseProgram.java b/tv-provider/src/main/java/android/support/media/tv/BaseProgram.java
similarity index 100%
rename from tv-provider/src/android/support/media/tv/BaseProgram.java
rename to tv-provider/src/main/java/android/support/media/tv/BaseProgram.java
diff --git a/tv-provider/src/android/support/media/tv/Channel.java b/tv-provider/src/main/java/android/support/media/tv/Channel.java
similarity index 100%
rename from tv-provider/src/android/support/media/tv/Channel.java
rename to tv-provider/src/main/java/android/support/media/tv/Channel.java
diff --git a/tv-provider/src/android/support/media/tv/ChannelLogoUtils.java b/tv-provider/src/main/java/android/support/media/tv/ChannelLogoUtils.java
similarity index 100%
rename from tv-provider/src/android/support/media/tv/ChannelLogoUtils.java
rename to tv-provider/src/main/java/android/support/media/tv/ChannelLogoUtils.java
diff --git a/tv-provider/src/android/support/media/tv/CollectionUtils.java b/tv-provider/src/main/java/android/support/media/tv/CollectionUtils.java
similarity index 100%
rename from tv-provider/src/android/support/media/tv/CollectionUtils.java
rename to tv-provider/src/main/java/android/support/media/tv/CollectionUtils.java
diff --git a/tv-provider/src/android/support/media/tv/PreviewProgram.java b/tv-provider/src/main/java/android/support/media/tv/PreviewProgram.java
similarity index 100%
rename from tv-provider/src/android/support/media/tv/PreviewProgram.java
rename to tv-provider/src/main/java/android/support/media/tv/PreviewProgram.java
diff --git a/tv-provider/src/android/support/media/tv/Program.java b/tv-provider/src/main/java/android/support/media/tv/Program.java
similarity index 100%
rename from tv-provider/src/android/support/media/tv/Program.java
rename to tv-provider/src/main/java/android/support/media/tv/Program.java
diff --git a/tv-provider/src/android/support/media/tv/TvContractCompat.java b/tv-provider/src/main/java/android/support/media/tv/TvContractCompat.java
similarity index 100%
rename from tv-provider/src/android/support/media/tv/TvContractCompat.java
rename to tv-provider/src/main/java/android/support/media/tv/TvContractCompat.java
diff --git a/tv-provider/src/android/support/media/tv/TvContractUtils.java b/tv-provider/src/main/java/android/support/media/tv/TvContractUtils.java
similarity index 100%
rename from tv-provider/src/android/support/media/tv/TvContractUtils.java
rename to tv-provider/src/main/java/android/support/media/tv/TvContractUtils.java
diff --git a/tv-provider/src/android/support/media/tv/WatchNextProgram.java b/tv-provider/src/main/java/android/support/media/tv/WatchNextProgram.java
similarity index 100%
rename from tv-provider/src/android/support/media/tv/WatchNextProgram.java
rename to tv-provider/src/main/java/android/support/media/tv/WatchNextProgram.java
diff --git a/v13/AndroidManifest.xml b/v13/AndroidManifest.xml
index 6f5a696..164f757 100644
--- a/v13/AndroidManifest.xml
+++ b/v13/AndroidManifest.xml
@@ -16,8 +16,4 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.support.v13">
<uses-sdk android:minSdkVersion="14"/>
- <application>
- <meta-data android:name="android.support.v13.VERSION"
- android:value="${support-version}" />
- </application>
</manifest>
diff --git a/v13/api/26.1.0.txt b/v13/api/26.1.0.txt
new file mode 100644
index 0000000..d309fdc
--- /dev/null
+++ b/v13/api/26.1.0.txt
@@ -0,0 +1,102 @@
+package android.support.v13.app {
+
+ public class ActivityCompat extends android.support.v4.app.ActivityCompat {
+ ctor protected ActivityCompat();
+ method public static android.support.v13.view.DragAndDropPermissionsCompat requestDragAndDropPermissions(android.app.Activity, android.view.DragEvent);
+ }
+
+ public class FragmentCompat {
+ ctor public FragmentCompat();
+ method public static void requestPermissions(android.app.Fragment, java.lang.String[], int);
+ method public static deprecated void setMenuVisibility(android.app.Fragment, boolean);
+ method public static void setUserVisibleHint(android.app.Fragment, boolean);
+ method public static boolean shouldShowRequestPermissionRationale(android.app.Fragment, java.lang.String);
+ }
+
+ public static abstract interface FragmentCompat.OnRequestPermissionsResultCallback {
+ method public abstract void onRequestPermissionsResult(int, java.lang.String[], int[]);
+ }
+
+ public abstract class FragmentPagerAdapter extends android.support.v4.view.PagerAdapter {
+ ctor public FragmentPagerAdapter(android.app.FragmentManager);
+ method public abstract android.app.Fragment getItem(int);
+ method public long getItemId(int);
+ method public boolean isViewFromObject(android.view.View, java.lang.Object);
+ }
+
+ public abstract class FragmentStatePagerAdapter extends android.support.v4.view.PagerAdapter {
+ ctor public FragmentStatePagerAdapter(android.app.FragmentManager);
+ method public abstract android.app.Fragment getItem(int);
+ method public boolean isViewFromObject(android.view.View, java.lang.Object);
+ }
+
+ public class FragmentTabHost extends android.widget.TabHost implements android.widget.TabHost.OnTabChangeListener {
+ ctor public FragmentTabHost(android.content.Context);
+ ctor public FragmentTabHost(android.content.Context, android.util.AttributeSet);
+ method public void addTab(android.widget.TabHost.TabSpec, java.lang.Class<?>, android.os.Bundle);
+ method public void onTabChanged(java.lang.String);
+ method public deprecated void setup();
+ method public void setup(android.content.Context, android.app.FragmentManager);
+ method public void setup(android.content.Context, android.app.FragmentManager, int);
+ }
+
+}
+
+package android.support.v13.view {
+
+ public final class DragAndDropPermissionsCompat {
+ method public void release();
+ }
+
+ public class DragStartHelper {
+ ctor public DragStartHelper(android.view.View, android.support.v13.view.DragStartHelper.OnDragStartListener);
+ method public void attach();
+ method public void detach();
+ method public void getTouchPosition(android.graphics.Point);
+ method public boolean onLongClick(android.view.View);
+ method public boolean onTouch(android.view.View, android.view.MotionEvent);
+ }
+
+ public static abstract interface DragStartHelper.OnDragStartListener {
+ method public abstract boolean onDragStart(android.view.View, android.support.v13.view.DragStartHelper);
+ }
+
+ public deprecated class ViewCompat extends android.support.v4.view.ViewCompat {
+ }
+
+}
+
+package android.support.v13.view.inputmethod {
+
+ public final class EditorInfoCompat {
+ ctor public EditorInfoCompat();
+ method public static java.lang.String[] getContentMimeTypes(android.view.inputmethod.EditorInfo);
+ method public static void setContentMimeTypes(android.view.inputmethod.EditorInfo, java.lang.String[]);
+ field public static final int IME_FLAG_FORCE_ASCII = -2147483648; // 0x80000000
+ field public static final int IME_FLAG_NO_PERSONALIZED_LEARNING = 16777216; // 0x1000000
+ }
+
+ public final class InputConnectionCompat {
+ ctor public InputConnectionCompat();
+ method public static boolean commitContent(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo, android.support.v13.view.inputmethod.InputContentInfoCompat, int, android.os.Bundle);
+ method public static android.view.inputmethod.InputConnection createWrapper(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo, android.support.v13.view.inputmethod.InputConnectionCompat.OnCommitContentListener);
+ field public static int INPUT_CONTENT_GRANT_READ_URI_PERMISSION;
+ }
+
+ public static abstract interface InputConnectionCompat.OnCommitContentListener {
+ method public abstract boolean onCommitContent(android.support.v13.view.inputmethod.InputContentInfoCompat, int, android.os.Bundle);
+ }
+
+ public final class InputContentInfoCompat {
+ ctor public InputContentInfoCompat(android.net.Uri, android.content.ClipDescription, android.net.Uri);
+ method public android.net.Uri getContentUri();
+ method public android.content.ClipDescription getDescription();
+ method public android.net.Uri getLinkUri();
+ method public void releasePermission();
+ method public void requestPermission();
+ method public java.lang.Object unwrap();
+ method public static android.support.v13.view.inputmethod.InputContentInfoCompat wrap(java.lang.Object);
+ }
+
+}
+
diff --git a/v13/api/27.0.0.txt b/v13/api/27.0.0.txt
new file mode 100644
index 0000000..73871f6
--- /dev/null
+++ b/v13/api/27.0.0.txt
@@ -0,0 +1,107 @@
+package android.support.v13.app {
+
+ public class ActivityCompat extends android.support.v4.app.ActivityCompat {
+ ctor protected ActivityCompat();
+ method public static android.support.v13.view.DragAndDropPermissionsCompat requestDragAndDropPermissions(android.app.Activity, android.view.DragEvent);
+ }
+
+ public class FragmentCompat {
+ ctor public FragmentCompat();
+ method public static void requestPermissions(android.app.Fragment, java.lang.String[], int);
+ method public static deprecated void setMenuVisibility(android.app.Fragment, boolean);
+ method public static void setPermissionCompatDelegate(android.support.v13.app.FragmentCompat.PermissionCompatDelegate);
+ method public static void setUserVisibleHint(android.app.Fragment, boolean);
+ method public static boolean shouldShowRequestPermissionRationale(android.app.Fragment, java.lang.String);
+ }
+
+ public static abstract interface FragmentCompat.OnRequestPermissionsResultCallback {
+ method public abstract void onRequestPermissionsResult(int, java.lang.String[], int[]);
+ }
+
+ public static abstract interface FragmentCompat.PermissionCompatDelegate {
+ method public abstract boolean requestPermissions(android.app.Fragment, java.lang.String[], int);
+ }
+
+ public abstract class FragmentPagerAdapter extends android.support.v4.view.PagerAdapter {
+ ctor public FragmentPagerAdapter(android.app.FragmentManager);
+ method public abstract android.app.Fragment getItem(int);
+ method public long getItemId(int);
+ method public boolean isViewFromObject(android.view.View, java.lang.Object);
+ }
+
+ public abstract class FragmentStatePagerAdapter extends android.support.v4.view.PagerAdapter {
+ ctor public FragmentStatePagerAdapter(android.app.FragmentManager);
+ method public abstract android.app.Fragment getItem(int);
+ method public boolean isViewFromObject(android.view.View, java.lang.Object);
+ }
+
+ public class FragmentTabHost extends android.widget.TabHost implements android.widget.TabHost.OnTabChangeListener {
+ ctor public FragmentTabHost(android.content.Context);
+ ctor public FragmentTabHost(android.content.Context, android.util.AttributeSet);
+ method public void addTab(android.widget.TabHost.TabSpec, java.lang.Class<?>, android.os.Bundle);
+ method public void onTabChanged(java.lang.String);
+ method public deprecated void setup();
+ method public void setup(android.content.Context, android.app.FragmentManager);
+ method public void setup(android.content.Context, android.app.FragmentManager, int);
+ }
+
+}
+
+package android.support.v13.view {
+
+ public final class DragAndDropPermissionsCompat {
+ method public void release();
+ }
+
+ public class DragStartHelper {
+ ctor public DragStartHelper(android.view.View, android.support.v13.view.DragStartHelper.OnDragStartListener);
+ method public void attach();
+ method public void detach();
+ method public void getTouchPosition(android.graphics.Point);
+ method public boolean onLongClick(android.view.View);
+ method public boolean onTouch(android.view.View, android.view.MotionEvent);
+ }
+
+ public static abstract interface DragStartHelper.OnDragStartListener {
+ method public abstract boolean onDragStart(android.view.View, android.support.v13.view.DragStartHelper);
+ }
+
+ public deprecated class ViewCompat extends android.support.v4.view.ViewCompat {
+ }
+
+}
+
+package android.support.v13.view.inputmethod {
+
+ public final class EditorInfoCompat {
+ ctor public EditorInfoCompat();
+ method public static java.lang.String[] getContentMimeTypes(android.view.inputmethod.EditorInfo);
+ method public static void setContentMimeTypes(android.view.inputmethod.EditorInfo, java.lang.String[]);
+ field public static final int IME_FLAG_FORCE_ASCII = -2147483648; // 0x80000000
+ field public static final int IME_FLAG_NO_PERSONALIZED_LEARNING = 16777216; // 0x1000000
+ }
+
+ public final class InputConnectionCompat {
+ ctor public InputConnectionCompat();
+ method public static boolean commitContent(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo, android.support.v13.view.inputmethod.InputContentInfoCompat, int, android.os.Bundle);
+ method public static android.view.inputmethod.InputConnection createWrapper(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo, android.support.v13.view.inputmethod.InputConnectionCompat.OnCommitContentListener);
+ field public static int INPUT_CONTENT_GRANT_READ_URI_PERMISSION;
+ }
+
+ public static abstract interface InputConnectionCompat.OnCommitContentListener {
+ method public abstract boolean onCommitContent(android.support.v13.view.inputmethod.InputContentInfoCompat, int, android.os.Bundle);
+ }
+
+ public final class InputContentInfoCompat {
+ ctor public InputContentInfoCompat(android.net.Uri, android.content.ClipDescription, android.net.Uri);
+ method public android.net.Uri getContentUri();
+ method public android.content.ClipDescription getDescription();
+ method public android.net.Uri getLinkUri();
+ method public void releasePermission();
+ method public void requestPermission();
+ method public java.lang.Object unwrap();
+ method public static android.support.v13.view.inputmethod.InputContentInfoCompat wrap(java.lang.Object);
+ }
+
+}
+
diff --git a/v13/api/current.txt b/v13/api/current.txt
index d309fdc..73871f6 100644
--- a/v13/api/current.txt
+++ b/v13/api/current.txt
@@ -9,6 +9,7 @@
ctor public FragmentCompat();
method public static void requestPermissions(android.app.Fragment, java.lang.String[], int);
method public static deprecated void setMenuVisibility(android.app.Fragment, boolean);
+ method public static void setPermissionCompatDelegate(android.support.v13.app.FragmentCompat.PermissionCompatDelegate);
method public static void setUserVisibleHint(android.app.Fragment, boolean);
method public static boolean shouldShowRequestPermissionRationale(android.app.Fragment, java.lang.String);
}
@@ -17,6 +18,10 @@
method public abstract void onRequestPermissionsResult(int, java.lang.String[], int[]);
}
+ public static abstract interface FragmentCompat.PermissionCompatDelegate {
+ method public abstract boolean requestPermissions(android.app.Fragment, java.lang.String[], int);
+ }
+
public abstract class FragmentPagerAdapter extends android.support.v4.view.PagerAdapter {
ctor public FragmentPagerAdapter(android.app.FragmentManager);
method public abstract android.app.Fragment getItem(int);
diff --git a/v13/java/android/support/v13/app/FragmentCompat.java b/v13/java/android/support/v13/app/FragmentCompat.java
index 4f21052..31c2343 100644
--- a/v13/java/android/support/v13/app/FragmentCompat.java
+++ b/v13/java/android/support/v13/app/FragmentCompat.java
@@ -24,6 +24,7 @@
import android.os.Looper;
import android.support.annotation.NonNull;
import android.support.annotation.RequiresApi;
+import android.support.annotation.RestrictTo;
import java.util.Arrays;
@@ -37,6 +38,38 @@
boolean shouldShowRequestPermissionRationale(Fragment fragment, String permission);
}
+ /**
+ * Customizable delegate that allows delegating permission related compatibility methods
+ * to a custom implementation.
+ *
+ * <p>
+ * To delegate fragment compatibility methods to a custom class, implement this interface,
+ * and call {@code FragmentCompat.setPermissionCompatDelegate(delegate);}. All future calls
+ * to the compatibility methods in this class will first check whether the delegate can
+ * handle the method call, and invoke the corresponding method if it can.
+ * </p>
+ */
+ public interface PermissionCompatDelegate {
+
+ /**
+ * Determines whether the delegate should handle
+ * {@link FragmentCompat#requestPermissions(Fragment, String[], int)}, and request
+ * permissions if applicable. If this method returns true, it means that permission
+ * request is successfully handled by the delegate, and platform should not perform any
+ * further requests for permission.
+ *
+ * @param fragment The target fragment.
+ * @param permissions The requested permissions.
+ * @param requestCode Application specific request code to match with a result
+ * reported to {@link OnRequestPermissionsResultCallback#onRequestPermissionsResult(
+ * int, String[], int[])}.
+ *
+ * @return Whether the delegate has handled the permission request.
+ * @see FragmentCompat#requestPermissions(Fragment, String[], int)
+ */
+ boolean requestPermissions(Fragment fragment, String[] permissions, int requestCode);
+ }
+
static class FragmentCompatBaseImpl implements FragmentCompatImpl {
@Override
public void setUserVisibleHint(Fragment f, boolean deferStart) {
@@ -117,6 +150,26 @@
}
}
+ private static PermissionCompatDelegate sDelegate;
+
+ /**
+ * Sets the permission delegate for {@code FragmentCompat}. Replaces the previously set
+ * delegate.
+ *
+ * @param delegate The delegate to be set. {@code null} to clear the set delegate.
+ */
+ public static void setPermissionCompatDelegate(PermissionCompatDelegate delegate) {
+ sDelegate = delegate;
+ }
+
+ /**
+ * @hide
+ */
+ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+ public static PermissionCompatDelegate getPermissionCompatDelegate() {
+ return sDelegate;
+ }
+
/**
* This interface is the contract for receiving the results for permission requests.
*/
@@ -212,6 +265,11 @@
*/
public static void requestPermissions(@NonNull Fragment fragment,
@NonNull String[] permissions, int requestCode) {
+ if (sDelegate != null && sDelegate.requestPermissions(fragment, permissions, requestCode)) {
+ // Delegate has handled the request.
+ return;
+ }
+
IMPL.requestPermissions(fragment, permissions, requestCode);
}
diff --git a/v13/java/android/support/v13/app/FragmentPagerAdapter.java b/v13/java/android/support/v13/app/FragmentPagerAdapter.java
index 082f883..e0b788a 100644
--- a/v13/java/android/support/v13/app/FragmentPagerAdapter.java
+++ b/v13/java/android/support/v13/app/FragmentPagerAdapter.java
@@ -48,18 +48,18 @@
* <p>Here is an example implementation of a pager containing fragments of
* lists:
*
- * {@sample frameworks/support/samples/Support13Demos/src/com/example/android/supportv13/app/FragmentPagerSupport.java
+ * {@sample frameworks/support/samples/Support13Demos/src/main/java/com/example/android/supportv13/app/FragmentPagerSupport.java
* complete}
*
* <p>The <code>R.layout.fragment_pager</code> resource of the top-level fragment is:
*
- * {@sample frameworks/support/samples/Support13Demos/res/layout/fragment_pager.xml
+ * {@sample frameworks/support/samples/Support13Demos/src/main/res/layout/fragment_pager.xml
* complete}
*
* <p>The <code>R.layout.fragment_pager_list</code> resource containing each
* individual fragment's layout is:
*
- * {@sample frameworks/support/samples/Support13Demos/res/layout/fragment_pager_list.xml
+ * {@sample frameworks/support/samples/Support13Demos/src/main/res/layout/fragment_pager_list.xml
* complete}
*/
public abstract class FragmentPagerAdapter extends PagerAdapter {
diff --git a/v13/java/android/support/v13/app/FragmentStatePagerAdapter.java b/v13/java/android/support/v13/app/FragmentStatePagerAdapter.java
index 8907fec..45a6bf5 100644
--- a/v13/java/android/support/v13/app/FragmentStatePagerAdapter.java
+++ b/v13/java/android/support/v13/app/FragmentStatePagerAdapter.java
@@ -51,18 +51,18 @@
* <p>Here is an example implementation of a pager containing fragments of
* lists:
*
- * {@sample frameworks/support/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentStatePagerSupport.java
+ * {@sample frameworks/support/samples/Support4Demos/src/main/java/com/example/android/supportv4/app/FragmentStatePagerSupport.java
* complete}
*
* <p>The <code>R.layout.fragment_pager</code> resource of the top-level fragment is:
*
- * {@sample frameworks/support/samples/Support4Demos/res/layout/fragment_pager.xml
+ * {@sample frameworks/support/samples/Support4Demos/src/main/res/layout/fragment_pager.xml
* complete}
*
* <p>The <code>R.layout.fragment_pager_list</code> resource containing each
* individual fragment's layout is:
*
- * {@sample frameworks/support/samples/Support4Demos/res/layout/fragment_pager_list.xml
+ * {@sample frameworks/support/samples/Support4Demos/src/main/res/layout/fragment_pager_list.xml
* complete}
*/
public abstract class FragmentStatePagerAdapter extends PagerAdapter {
diff --git a/v13/tests/AndroidManifest.xml b/v13/tests/AndroidManifest.xml
index b2d04c9..541a37f 100644
--- a/v13/tests/AndroidManifest.xml
+++ b/v13/tests/AndroidManifest.xml
@@ -19,6 +19,7 @@
<uses-sdk android:targetSdkVersion="${target-sdk-version}"/>
<application>
+ <activity android:name="android.support.v13.app.FragmentCompatTestActivity" />
<activity android:name="android.support.v13.view.DragStartHelperTestActivity"/>
</application>
diff --git a/v13/tests/java/android/support/v13/app/FragmentCompatTest.java b/v13/tests/java/android/support/v13/app/FragmentCompatTest.java
new file mode 100644
index 0000000..34b01f1
--- /dev/null
+++ b/v13/tests/java/android/support/v13/app/FragmentCompatTest.java
@@ -0,0 +1,106 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v13.app;
+
+import static org.mockito.AdditionalMatchers.aryEq;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.ArgumentMatchers.same;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+
+import android.Manifest;
+import android.app.Activity;
+import android.app.Fragment;
+import android.os.Build;
+import android.support.annotation.NonNull;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.SdkSuppress;
+import android.support.test.filters.SmallTest;
+import android.support.test.rule.ActivityTestRule;
+import android.support.test.runner.AndroidJUnit4;
+import android.support.v13.app.FragmentCompat.PermissionCompatDelegate;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+@SdkSuppress(minSdkVersion = Build.VERSION_CODES.HONEYCOMB)
+public class FragmentCompatTest {
+ @Rule
+ public ActivityTestRule<FragmentCompatTestActivity> mActivityRule =
+ new ActivityTestRule<>(FragmentCompatTestActivity.class);
+
+ private Activity mActivity;
+ private TestFragment mFragment;
+
+ @Before
+ public void setup() throws Throwable {
+ mActivity = mActivityRule.getActivity();
+ mFragment = attachTestFragment();
+ }
+
+ @SmallTest
+ @Test
+ public void testFragmentCompatDelegate() {
+ FragmentCompat.PermissionCompatDelegate delegate = mock(PermissionCompatDelegate.class);
+
+ // First test setting the delegate
+ FragmentCompat.setPermissionCompatDelegate(delegate);
+
+ FragmentCompat.requestPermissions(mFragment, new String[]{
+ Manifest.permission.ACCESS_FINE_LOCATION}, 42);
+ verify(delegate).requestPermissions(same(mFragment),
+ aryEq(new String[]{Manifest.permission.ACCESS_FINE_LOCATION}), eq(42));
+
+ // Now test clearing the delegate
+ FragmentCompat.setPermissionCompatDelegate(null);
+
+ FragmentCompat.requestPermissions(mFragment, new String[]{
+ Manifest.permission.ACCESS_FINE_LOCATION}, 42);
+
+ verifyNoMoreInteractions(delegate);
+ }
+
+ private TestFragment attachTestFragment() throws Throwable {
+ final TestFragment fragment = new TestFragment();
+ mActivityRule.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mActivity.getFragmentManager().beginTransaction()
+ .add(fragment, null)
+ .addToBackStack(null)
+ .commitAllowingStateLoss();
+ mActivity.getFragmentManager().executePendingTransactions();
+ }
+ });
+ InstrumentationRegistry.getInstrumentation().waitForIdleSync();
+ return fragment;
+ }
+
+ /**
+ * Empty class to satisfy java class dependency.
+ */
+ public static class TestFragment extends Fragment implements
+ FragmentCompat.OnRequestPermissionsResultCallback {
+ @Override
+ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
+ @NonNull int[] grantResults) {}
+ }
+}
diff --git a/paging/runtime/src/androidTest/java/android/arch/paging/StringPagedList.java b/v13/tests/java/android/support/v13/app/FragmentCompatTestActivity.java
similarity index 69%
copy from paging/runtime/src/androidTest/java/android/arch/paging/StringPagedList.java
copy to v13/tests/java/android/support/v13/app/FragmentCompatTestActivity.java
index 5318d38..b3ab763 100644
--- a/paging/runtime/src/androidTest/java/android/arch/paging/StringPagedList.java
+++ b/v13/tests/java/android/support/v13/app/FragmentCompatTestActivity.java
@@ -14,12 +14,9 @@
* limitations under the License.
*/
-package android.arch.paging;
+package android.support.v13.app;
-import java.util.Arrays;
+import android.app.Activity;
-public class StringPagedList extends NullPaddedList<String> {
- public StringPagedList(int leadingNulls, int trailingNulls, String... items) {
- super(leadingNulls, Arrays.asList(items), trailingNulls);
- }
+public class FragmentCompatTestActivity extends Activity {
}
diff --git a/v14/preference/Android.mk b/v14/preference/Android.mk
index 7a0b846..4885c3e 100644
--- a/v14/preference/Android.mk
+++ b/v14/preference/Android.mk
@@ -29,7 +29,7 @@
LOCAL_USE_AAPT2 := true
LOCAL_MODULE := android-support-v14-preference
LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_SRC_FILES := $(call all-java-files-under,src)
+LOCAL_SRC_FILES := $(call all-java-files-under,src/main/java)
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
LOCAL_SHARED_ANDROID_LIBRARIES := \
android-support-v7-preference \
diff --git a/v14/preference/AndroidManifest.xml b/v14/preference/AndroidManifest.xml
index 18cc666..28dabea 100644
--- a/v14/preference/AndroidManifest.xml
+++ b/v14/preference/AndroidManifest.xml
@@ -16,8 +16,4 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.support.v14.preference">
<uses-sdk android:minSdkVersion="14" />
- <application>
- <meta-data android:name="android.support.v14.preference.VERSION"
- android:value="${support-version}" />
- </application>
</manifest>
diff --git a/v14/preference/OWNERS b/v14/preference/OWNERS
new file mode 100644
index 0000000..ddaac03
--- /dev/null
+++ b/v14/preference/OWNERS
@@ -0,0 +1 @@
+pavlis@google.com
\ No newline at end of file
diff --git a/v14/preference/api/26.1.0.txt b/v14/preference/api/26.1.0.txt
new file mode 100644
index 0000000..b92ccf9
--- /dev/null
+++ b/v14/preference/api/26.1.0.txt
@@ -0,0 +1,98 @@
+package android.support.v14.preference {
+
+ public class EditTextPreferenceDialogFragment extends android.support.v14.preference.PreferenceDialogFragment {
+ ctor public EditTextPreferenceDialogFragment();
+ method public static android.support.v14.preference.EditTextPreferenceDialogFragment newInstance(java.lang.String);
+ method public void onDialogClosed(boolean);
+ }
+
+ public class ListPreferenceDialogFragment extends android.support.v14.preference.PreferenceDialogFragment {
+ ctor public ListPreferenceDialogFragment();
+ method public static android.support.v14.preference.ListPreferenceDialogFragment newInstance(java.lang.String);
+ method public void onDialogClosed(boolean);
+ }
+
+ public class MultiSelectListPreference extends android.support.v7.preference.internal.AbstractMultiSelectListPreference {
+ ctor public MultiSelectListPreference(android.content.Context, android.util.AttributeSet, int, int);
+ ctor public MultiSelectListPreference(android.content.Context, android.util.AttributeSet, int);
+ ctor public MultiSelectListPreference(android.content.Context, android.util.AttributeSet);
+ ctor public MultiSelectListPreference(android.content.Context);
+ method public int findIndexOfValue(java.lang.String);
+ method public java.lang.CharSequence[] getEntries();
+ method public java.lang.CharSequence[] getEntryValues();
+ method protected boolean[] getSelectedItems();
+ method public java.util.Set<java.lang.String> getValues();
+ method public void setEntries(java.lang.CharSequence[]);
+ method public void setEntries(int);
+ method public void setEntryValues(java.lang.CharSequence[]);
+ method public void setEntryValues(int);
+ method public void setValues(java.util.Set<java.lang.String>);
+ }
+
+ public class MultiSelectListPreferenceDialogFragment extends android.support.v14.preference.PreferenceDialogFragment {
+ ctor public MultiSelectListPreferenceDialogFragment();
+ method public static android.support.v14.preference.MultiSelectListPreferenceDialogFragment newInstance(java.lang.String);
+ method public void onDialogClosed(boolean);
+ }
+
+ public abstract class PreferenceDialogFragment extends android.app.DialogFragment implements android.content.DialogInterface.OnClickListener {
+ ctor public PreferenceDialogFragment();
+ method public android.support.v7.preference.DialogPreference getPreference();
+ method protected void onBindDialogView(android.view.View);
+ method public void onClick(android.content.DialogInterface, int);
+ method protected android.view.View onCreateDialogView(android.content.Context);
+ method public abstract void onDialogClosed(boolean);
+ method protected void onPrepareDialogBuilder(android.app.AlertDialog.Builder);
+ field protected static final java.lang.String ARG_KEY = "key";
+ }
+
+ public abstract class PreferenceFragment extends android.app.Fragment implements android.support.v7.preference.PreferenceManager.OnDisplayPreferenceDialogListener android.support.v7.preference.PreferenceManager.OnNavigateToScreenListener android.support.v7.preference.PreferenceManager.OnPreferenceTreeClickListener {
+ ctor public PreferenceFragment();
+ method public void addPreferencesFromResource(int);
+ method public android.support.v7.preference.Preference findPreference(java.lang.CharSequence);
+ method public final android.support.v7.widget.RecyclerView getListView();
+ method public android.support.v7.preference.PreferenceManager getPreferenceManager();
+ method public android.support.v7.preference.PreferenceScreen getPreferenceScreen();
+ method protected android.support.v7.widget.RecyclerView.Adapter onCreateAdapter(android.support.v7.preference.PreferenceScreen);
+ method public android.support.v7.widget.RecyclerView.LayoutManager onCreateLayoutManager();
+ method public abstract void onCreatePreferences(android.os.Bundle, java.lang.String);
+ method public android.support.v7.widget.RecyclerView onCreateRecyclerView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
+ method public void onDisplayPreferenceDialog(android.support.v7.preference.Preference);
+ method public void onNavigateToScreen(android.support.v7.preference.PreferenceScreen);
+ method public boolean onPreferenceTreeClick(android.support.v7.preference.Preference);
+ method public void scrollToPreference(java.lang.String);
+ method public void scrollToPreference(android.support.v7.preference.Preference);
+ method public void setDivider(android.graphics.drawable.Drawable);
+ method public void setDividerHeight(int);
+ method public void setPreferenceScreen(android.support.v7.preference.PreferenceScreen);
+ method public void setPreferencesFromResource(int, java.lang.String);
+ field public static final java.lang.String ARG_PREFERENCE_ROOT = "android.support.v7.preference.PreferenceFragmentCompat.PREFERENCE_ROOT";
+ }
+
+ public static abstract interface PreferenceFragment.OnPreferenceDisplayDialogCallback {
+ method public abstract boolean onPreferenceDisplayDialog(android.support.v14.preference.PreferenceFragment, android.support.v7.preference.Preference);
+ }
+
+ public static abstract interface PreferenceFragment.OnPreferenceStartFragmentCallback {
+ method public abstract boolean onPreferenceStartFragment(android.support.v14.preference.PreferenceFragment, android.support.v7.preference.Preference);
+ }
+
+ public static abstract interface PreferenceFragment.OnPreferenceStartScreenCallback {
+ method public abstract boolean onPreferenceStartScreen(android.support.v14.preference.PreferenceFragment, android.support.v7.preference.PreferenceScreen);
+ }
+
+ public class SwitchPreference extends android.support.v7.preference.TwoStatePreference {
+ ctor public SwitchPreference(android.content.Context, android.util.AttributeSet, int, int);
+ ctor public SwitchPreference(android.content.Context, android.util.AttributeSet, int);
+ ctor public SwitchPreference(android.content.Context, android.util.AttributeSet);
+ ctor public SwitchPreference(android.content.Context);
+ method public java.lang.CharSequence getSwitchTextOff();
+ method public java.lang.CharSequence getSwitchTextOn();
+ method public void setSwitchTextOff(java.lang.CharSequence);
+ method public void setSwitchTextOff(int);
+ method public void setSwitchTextOn(java.lang.CharSequence);
+ method public void setSwitchTextOn(int);
+ }
+
+}
+
diff --git a/v14/preference/api/27.0.0.txt b/v14/preference/api/27.0.0.txt
new file mode 100644
index 0000000..b92ccf9
--- /dev/null
+++ b/v14/preference/api/27.0.0.txt
@@ -0,0 +1,98 @@
+package android.support.v14.preference {
+
+ public class EditTextPreferenceDialogFragment extends android.support.v14.preference.PreferenceDialogFragment {
+ ctor public EditTextPreferenceDialogFragment();
+ method public static android.support.v14.preference.EditTextPreferenceDialogFragment newInstance(java.lang.String);
+ method public void onDialogClosed(boolean);
+ }
+
+ public class ListPreferenceDialogFragment extends android.support.v14.preference.PreferenceDialogFragment {
+ ctor public ListPreferenceDialogFragment();
+ method public static android.support.v14.preference.ListPreferenceDialogFragment newInstance(java.lang.String);
+ method public void onDialogClosed(boolean);
+ }
+
+ public class MultiSelectListPreference extends android.support.v7.preference.internal.AbstractMultiSelectListPreference {
+ ctor public MultiSelectListPreference(android.content.Context, android.util.AttributeSet, int, int);
+ ctor public MultiSelectListPreference(android.content.Context, android.util.AttributeSet, int);
+ ctor public MultiSelectListPreference(android.content.Context, android.util.AttributeSet);
+ ctor public MultiSelectListPreference(android.content.Context);
+ method public int findIndexOfValue(java.lang.String);
+ method public java.lang.CharSequence[] getEntries();
+ method public java.lang.CharSequence[] getEntryValues();
+ method protected boolean[] getSelectedItems();
+ method public java.util.Set<java.lang.String> getValues();
+ method public void setEntries(java.lang.CharSequence[]);
+ method public void setEntries(int);
+ method public void setEntryValues(java.lang.CharSequence[]);
+ method public void setEntryValues(int);
+ method public void setValues(java.util.Set<java.lang.String>);
+ }
+
+ public class MultiSelectListPreferenceDialogFragment extends android.support.v14.preference.PreferenceDialogFragment {
+ ctor public MultiSelectListPreferenceDialogFragment();
+ method public static android.support.v14.preference.MultiSelectListPreferenceDialogFragment newInstance(java.lang.String);
+ method public void onDialogClosed(boolean);
+ }
+
+ public abstract class PreferenceDialogFragment extends android.app.DialogFragment implements android.content.DialogInterface.OnClickListener {
+ ctor public PreferenceDialogFragment();
+ method public android.support.v7.preference.DialogPreference getPreference();
+ method protected void onBindDialogView(android.view.View);
+ method public void onClick(android.content.DialogInterface, int);
+ method protected android.view.View onCreateDialogView(android.content.Context);
+ method public abstract void onDialogClosed(boolean);
+ method protected void onPrepareDialogBuilder(android.app.AlertDialog.Builder);
+ field protected static final java.lang.String ARG_KEY = "key";
+ }
+
+ public abstract class PreferenceFragment extends android.app.Fragment implements android.support.v7.preference.PreferenceManager.OnDisplayPreferenceDialogListener android.support.v7.preference.PreferenceManager.OnNavigateToScreenListener android.support.v7.preference.PreferenceManager.OnPreferenceTreeClickListener {
+ ctor public PreferenceFragment();
+ method public void addPreferencesFromResource(int);
+ method public android.support.v7.preference.Preference findPreference(java.lang.CharSequence);
+ method public final android.support.v7.widget.RecyclerView getListView();
+ method public android.support.v7.preference.PreferenceManager getPreferenceManager();
+ method public android.support.v7.preference.PreferenceScreen getPreferenceScreen();
+ method protected android.support.v7.widget.RecyclerView.Adapter onCreateAdapter(android.support.v7.preference.PreferenceScreen);
+ method public android.support.v7.widget.RecyclerView.LayoutManager onCreateLayoutManager();
+ method public abstract void onCreatePreferences(android.os.Bundle, java.lang.String);
+ method public android.support.v7.widget.RecyclerView onCreateRecyclerView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
+ method public void onDisplayPreferenceDialog(android.support.v7.preference.Preference);
+ method public void onNavigateToScreen(android.support.v7.preference.PreferenceScreen);
+ method public boolean onPreferenceTreeClick(android.support.v7.preference.Preference);
+ method public void scrollToPreference(java.lang.String);
+ method public void scrollToPreference(android.support.v7.preference.Preference);
+ method public void setDivider(android.graphics.drawable.Drawable);
+ method public void setDividerHeight(int);
+ method public void setPreferenceScreen(android.support.v7.preference.PreferenceScreen);
+ method public void setPreferencesFromResource(int, java.lang.String);
+ field public static final java.lang.String ARG_PREFERENCE_ROOT = "android.support.v7.preference.PreferenceFragmentCompat.PREFERENCE_ROOT";
+ }
+
+ public static abstract interface PreferenceFragment.OnPreferenceDisplayDialogCallback {
+ method public abstract boolean onPreferenceDisplayDialog(android.support.v14.preference.PreferenceFragment, android.support.v7.preference.Preference);
+ }
+
+ public static abstract interface PreferenceFragment.OnPreferenceStartFragmentCallback {
+ method public abstract boolean onPreferenceStartFragment(android.support.v14.preference.PreferenceFragment, android.support.v7.preference.Preference);
+ }
+
+ public static abstract interface PreferenceFragment.OnPreferenceStartScreenCallback {
+ method public abstract boolean onPreferenceStartScreen(android.support.v14.preference.PreferenceFragment, android.support.v7.preference.PreferenceScreen);
+ }
+
+ public class SwitchPreference extends android.support.v7.preference.TwoStatePreference {
+ ctor public SwitchPreference(android.content.Context, android.util.AttributeSet, int, int);
+ ctor public SwitchPreference(android.content.Context, android.util.AttributeSet, int);
+ ctor public SwitchPreference(android.content.Context, android.util.AttributeSet);
+ ctor public SwitchPreference(android.content.Context);
+ method public java.lang.CharSequence getSwitchTextOff();
+ method public java.lang.CharSequence getSwitchTextOn();
+ method public void setSwitchTextOff(java.lang.CharSequence);
+ method public void setSwitchTextOff(int);
+ method public void setSwitchTextOn(java.lang.CharSequence);
+ method public void setSwitchTextOn(int);
+ }
+
+}
+
diff --git a/v14/preference/build.gradle b/v14/preference/build.gradle
index cd3cc7e..8c66d6a 100644
--- a/v14/preference/build.gradle
+++ b/v14/preference/build.gradle
@@ -29,10 +29,7 @@
}
sourceSets {
- main.java.srcDir 'src'
main.res.srcDir 'res'
- main.assets.srcDir 'assets'
- main.resources.srcDir 'src'
}
}
diff --git a/v14/preference/src/android/support/v14/preference/EditTextPreferenceDialogFragment.java b/v14/preference/src/main/java/android/support/v14/preference/EditTextPreferenceDialogFragment.java
similarity index 100%
rename from v14/preference/src/android/support/v14/preference/EditTextPreferenceDialogFragment.java
rename to v14/preference/src/main/java/android/support/v14/preference/EditTextPreferenceDialogFragment.java
diff --git a/v14/preference/src/android/support/v14/preference/ListPreferenceDialogFragment.java b/v14/preference/src/main/java/android/support/v14/preference/ListPreferenceDialogFragment.java
similarity index 100%
rename from v14/preference/src/android/support/v14/preference/ListPreferenceDialogFragment.java
rename to v14/preference/src/main/java/android/support/v14/preference/ListPreferenceDialogFragment.java
diff --git a/v14/preference/src/android/support/v14/preference/MultiSelectListPreference.java b/v14/preference/src/main/java/android/support/v14/preference/MultiSelectListPreference.java
similarity index 100%
rename from v14/preference/src/android/support/v14/preference/MultiSelectListPreference.java
rename to v14/preference/src/main/java/android/support/v14/preference/MultiSelectListPreference.java
diff --git a/v14/preference/src/android/support/v14/preference/MultiSelectListPreferenceDialogFragment.java b/v14/preference/src/main/java/android/support/v14/preference/MultiSelectListPreferenceDialogFragment.java
similarity index 100%
rename from v14/preference/src/android/support/v14/preference/MultiSelectListPreferenceDialogFragment.java
rename to v14/preference/src/main/java/android/support/v14/preference/MultiSelectListPreferenceDialogFragment.java
diff --git a/v14/preference/src/android/support/v14/preference/PreferenceDialogFragment.java b/v14/preference/src/main/java/android/support/v14/preference/PreferenceDialogFragment.java
similarity index 100%
rename from v14/preference/src/android/support/v14/preference/PreferenceDialogFragment.java
rename to v14/preference/src/main/java/android/support/v14/preference/PreferenceDialogFragment.java
diff --git a/v14/preference/src/android/support/v14/preference/PreferenceFragment.java b/v14/preference/src/main/java/android/support/v14/preference/PreferenceFragment.java
similarity index 99%
rename from v14/preference/src/android/support/v14/preference/PreferenceFragment.java
rename to v14/preference/src/main/java/android/support/v14/preference/PreferenceFragment.java
index d1d9987..2421050 100644
--- a/v14/preference/src/android/support/v14/preference/PreferenceFragment.java
+++ b/v14/preference/src/main/java/android/support/v14/preference/PreferenceFragment.java
@@ -103,13 +103,13 @@
* <p>The following sample code shows a simple preference fragment that is
* populated from a resource. The resource it loads is:</p>
*
- * {@sample frameworks/support/samples/SupportPreferenceDemos/res/xml/preferences.xml preferences}
+ * {@sample frameworks/support/samples/SupportPreferenceDemos/src/main/res/xml/preferences.xml preferences}
*
* <p>The fragment implementation itself simply populates the preferences
* when created. Note that the preferences framework takes care of loading
* the current values out of the app preferences and writing them when changed:</p>
*
- * {@sample frameworks/support/samples/SupportPreferenceDemos/src/com/example/android/supportpreference/FragmentSupportPreferences.java
+ * {@sample frameworks/support/samples/SupportPreferenceDemos/src/main/java/com/example/android/supportpreference/FragmentSupportPreferences.java
* support_fragment}
*
* @see Preference
diff --git a/v14/preference/src/android/support/v14/preference/SwitchPreference.java b/v14/preference/src/main/java/android/support/v14/preference/SwitchPreference.java
similarity index 100%
rename from v14/preference/src/android/support/v14/preference/SwitchPreference.java
rename to v14/preference/src/main/java/android/support/v14/preference/SwitchPreference.java
diff --git a/v17/leanback/AndroidManifest.xml b/v17/leanback/AndroidManifest.xml
index 23c5c00..59ec5c0 100644
--- a/v17/leanback/AndroidManifest.xml
+++ b/v17/leanback/AndroidManifest.xml
@@ -16,8 +16,4 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.support.v17.leanback">
<uses-sdk android:minSdkVersion="17"/>
- <application>
- <meta-data android:name="android.support.v17.leanback.VERSION"
- android:value="${support-version}" />
- </application>
</manifest>
diff --git a/v17/leanback/OWNERS b/v17/leanback/OWNERS
new file mode 100644
index 0000000..063702c
--- /dev/null
+++ b/v17/leanback/OWNERS
@@ -0,0 +1 @@
+dake@google.com
\ No newline at end of file
diff --git a/v17/leanback/api/26.1.0.ignore b/v17/leanback/api/26.1.0.ignore
new file mode 100644
index 0000000..81d1fe5
--- /dev/null
+++ b/v17/leanback/api/26.1.0.ignore
@@ -0,0 +1,2 @@
+036d6d4
+07abbac
diff --git a/v17/leanback/api/26.1.0.txt b/v17/leanback/api/26.1.0.txt
new file mode 100644
index 0000000..bc0eecc
--- /dev/null
+++ b/v17/leanback/api/26.1.0.txt
@@ -0,0 +1,3204 @@
+package android.support.v17.leanback.app {
+
+ public final class BackgroundManager {
+ method public void attach(android.view.Window);
+ method public void attachToView(android.view.View);
+ method public void clearDrawable();
+ method public final int getColor();
+ method public deprecated android.graphics.drawable.Drawable getDefaultDimLayer();
+ method public deprecated android.graphics.drawable.Drawable getDimLayer();
+ method public android.graphics.drawable.Drawable getDrawable();
+ method public static android.support.v17.leanback.app.BackgroundManager getInstance(android.app.Activity);
+ method public boolean isAttached();
+ method public boolean isAutoReleaseOnStop();
+ method public void release();
+ method public void setAutoReleaseOnStop(boolean);
+ method public void setBitmap(android.graphics.Bitmap);
+ method public void setColor(int);
+ method public deprecated void setDimLayer(android.graphics.drawable.Drawable);
+ method public void setDrawable(android.graphics.drawable.Drawable);
+ method public void setThemeDrawableResourceId(int);
+ }
+
+ public class BaseFragment extends android.support.v17.leanback.app.BrandedFragment {
+ method protected java.lang.Object createEntranceTransition();
+ method public final android.support.v17.leanback.app.ProgressBarManager getProgressBarManager();
+ method protected void onEntranceTransitionEnd();
+ method protected void onEntranceTransitionPrepare();
+ method protected void onEntranceTransitionStart();
+ method public void prepareEntranceTransition();
+ method protected void runEntranceTransition(java.lang.Object);
+ method public void startEntranceTransition();
+ }
+
+ abstract class BaseRowFragment extends android.app.Fragment {
+ method public final android.support.v17.leanback.widget.ObjectAdapter getAdapter();
+ method public final android.support.v17.leanback.widget.ItemBridgeAdapter getBridgeAdapter();
+ method public final android.support.v17.leanback.widget.PresenterSelector getPresenterSelector();
+ method public int getSelectedPosition();
+ method public final android.support.v17.leanback.widget.VerticalGridView getVerticalGridView();
+ method public void onTransitionEnd();
+ method public boolean onTransitionPrepare();
+ method public void onTransitionStart();
+ method public final void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public void setAlignment(int);
+ method public final void setPresenterSelector(android.support.v17.leanback.widget.PresenterSelector);
+ method public void setSelectedPosition(int);
+ method public void setSelectedPosition(int, boolean);
+ }
+
+ abstract class BaseRowSupportFragment extends android.support.v4.app.Fragment {
+ method public final android.support.v17.leanback.widget.ObjectAdapter getAdapter();
+ method public final android.support.v17.leanback.widget.ItemBridgeAdapter getBridgeAdapter();
+ method public final android.support.v17.leanback.widget.PresenterSelector getPresenterSelector();
+ method public int getSelectedPosition();
+ method public final android.support.v17.leanback.widget.VerticalGridView getVerticalGridView();
+ method public void onTransitionEnd();
+ method public boolean onTransitionPrepare();
+ method public void onTransitionStart();
+ method public final void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public void setAlignment(int);
+ method public final void setPresenterSelector(android.support.v17.leanback.widget.PresenterSelector);
+ method public void setSelectedPosition(int);
+ method public void setSelectedPosition(int, boolean);
+ }
+
+ public class BaseSupportFragment extends android.support.v17.leanback.app.BrandedSupportFragment {
+ method protected java.lang.Object createEntranceTransition();
+ method public final android.support.v17.leanback.app.ProgressBarManager getProgressBarManager();
+ method protected void onEntranceTransitionEnd();
+ method protected void onEntranceTransitionPrepare();
+ method protected void onEntranceTransitionStart();
+ method public void prepareEntranceTransition();
+ method protected void runEntranceTransition(java.lang.Object);
+ method public void startEntranceTransition();
+ }
+
+ public class BrandedFragment extends android.app.Fragment {
+ ctor public BrandedFragment();
+ method public android.graphics.drawable.Drawable getBadgeDrawable();
+ method public int getSearchAffordanceColor();
+ method public android.support.v17.leanback.widget.SearchOrbView.Colors getSearchAffordanceColors();
+ method public java.lang.CharSequence getTitle();
+ method public android.view.View getTitleView();
+ method public android.support.v17.leanback.widget.TitleViewAdapter getTitleViewAdapter();
+ method public void installTitleView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
+ method public final boolean isShowingTitle();
+ method public android.view.View onInflateTitleView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
+ method public void setBadgeDrawable(android.graphics.drawable.Drawable);
+ method public void setOnSearchClickedListener(android.view.View.OnClickListener);
+ method public void setSearchAffordanceColor(int);
+ method public void setSearchAffordanceColors(android.support.v17.leanback.widget.SearchOrbView.Colors);
+ method public void setTitle(java.lang.CharSequence);
+ method public void setTitleView(android.view.View);
+ method public void showTitle(boolean);
+ method public void showTitle(int);
+ }
+
+ public class BrandedSupportFragment extends android.support.v4.app.Fragment {
+ ctor public BrandedSupportFragment();
+ method public android.graphics.drawable.Drawable getBadgeDrawable();
+ method public int getSearchAffordanceColor();
+ method public android.support.v17.leanback.widget.SearchOrbView.Colors getSearchAffordanceColors();
+ method public java.lang.CharSequence getTitle();
+ method public android.view.View getTitleView();
+ method public android.support.v17.leanback.widget.TitleViewAdapter getTitleViewAdapter();
+ method public void installTitleView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
+ method public final boolean isShowingTitle();
+ method public android.view.View onInflateTitleView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
+ method public void setBadgeDrawable(android.graphics.drawable.Drawable);
+ method public void setOnSearchClickedListener(android.view.View.OnClickListener);
+ method public void setSearchAffordanceColor(int);
+ method public void setSearchAffordanceColors(android.support.v17.leanback.widget.SearchOrbView.Colors);
+ method public void setTitle(java.lang.CharSequence);
+ method public void setTitleView(android.view.View);
+ method public void showTitle(boolean);
+ method public void showTitle(int);
+ }
+
+ public class BrowseFragment extends android.support.v17.leanback.app.BaseFragment {
+ ctor public BrowseFragment();
+ method public static android.os.Bundle createArgs(android.os.Bundle, java.lang.String, int);
+ method public void enableMainFragmentScaling(boolean);
+ method public deprecated void enableRowScaling(boolean);
+ method public android.support.v17.leanback.widget.ObjectAdapter getAdapter();
+ method public int getBrandColor();
+ method public android.support.v17.leanback.app.HeadersFragment getHeadersFragment();
+ method public int getHeadersState();
+ method public android.app.Fragment getMainFragment();
+ method public final android.support.v17.leanback.app.BrowseFragment.MainFragmentAdapterRegistry getMainFragmentRegistry();
+ method public android.support.v17.leanback.widget.OnItemViewClickedListener getOnItemViewClickedListener();
+ method public android.support.v17.leanback.widget.OnItemViewSelectedListener getOnItemViewSelectedListener();
+ method public android.support.v17.leanback.app.RowsFragment getRowsFragment();
+ method public int getSelectedPosition();
+ method public android.support.v17.leanback.widget.RowPresenter.ViewHolder getSelectedRowViewHolder();
+ method public final boolean isHeadersTransitionOnBackEnabled();
+ method public boolean isInHeadersTransition();
+ method public boolean isShowingHeaders();
+ method public android.support.v17.leanback.app.HeadersFragment onCreateHeadersFragment();
+ method public void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public void setBrandColor(int);
+ method public void setBrowseTransitionListener(android.support.v17.leanback.app.BrowseFragment.BrowseTransitionListener);
+ method public void setHeaderPresenterSelector(android.support.v17.leanback.widget.PresenterSelector);
+ method public void setHeadersState(int);
+ method public final void setHeadersTransitionOnBackEnabled(boolean);
+ method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.OnItemViewClickedListener);
+ method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.OnItemViewSelectedListener);
+ method public void setSelectedPosition(int);
+ method public void setSelectedPosition(int, boolean);
+ method public void setSelectedPosition(int, boolean, android.support.v17.leanback.widget.Presenter.ViewHolderTask);
+ method public void startHeadersTransition(boolean);
+ field public static final int HEADERS_DISABLED = 3; // 0x3
+ field public static final int HEADERS_ENABLED = 1; // 0x1
+ field public static final int HEADERS_HIDDEN = 2; // 0x2
+ }
+
+ public static class BrowseFragment.BrowseTransitionListener {
+ ctor public BrowseFragment.BrowseTransitionListener();
+ method public void onHeadersTransitionStart(boolean);
+ method public void onHeadersTransitionStop(boolean);
+ }
+
+ public static abstract class BrowseFragment.FragmentFactory<T extends android.app.Fragment> {
+ ctor public BrowseFragment.FragmentFactory();
+ method public abstract T createFragment(java.lang.Object);
+ }
+
+ public static abstract interface BrowseFragment.FragmentHost {
+ method public abstract void notifyDataReady(android.support.v17.leanback.app.BrowseFragment.MainFragmentAdapter);
+ method public abstract void notifyViewCreated(android.support.v17.leanback.app.BrowseFragment.MainFragmentAdapter);
+ method public abstract void showTitleView(boolean);
+ }
+
+ public static class BrowseFragment.ListRowFragmentFactory extends android.support.v17.leanback.app.BrowseFragment.FragmentFactory {
+ ctor public BrowseFragment.ListRowFragmentFactory();
+ method public android.support.v17.leanback.app.RowsFragment createFragment(java.lang.Object);
+ }
+
+ public static class BrowseFragment.MainFragmentAdapter<T extends android.app.Fragment> {
+ ctor public BrowseFragment.MainFragmentAdapter(T);
+ method public final T getFragment();
+ method public final android.support.v17.leanback.app.BrowseFragment.FragmentHost getFragmentHost();
+ method public boolean isScalingEnabled();
+ method public boolean isScrolling();
+ method public void onTransitionEnd();
+ method public boolean onTransitionPrepare();
+ method public void onTransitionStart();
+ method public void setAlignment(int);
+ method public void setEntranceTransitionState(boolean);
+ method public void setExpand(boolean);
+ method public void setScalingEnabled(boolean);
+ }
+
+ public static abstract interface BrowseFragment.MainFragmentAdapterProvider {
+ method public abstract android.support.v17.leanback.app.BrowseFragment.MainFragmentAdapter getMainFragmentAdapter();
+ }
+
+ public static final class BrowseFragment.MainFragmentAdapterRegistry {
+ ctor public BrowseFragment.MainFragmentAdapterRegistry();
+ method public android.app.Fragment createFragment(java.lang.Object);
+ method public void registerFragment(java.lang.Class, android.support.v17.leanback.app.BrowseFragment.FragmentFactory);
+ }
+
+ public static class BrowseFragment.MainFragmentRowsAdapter<T extends android.app.Fragment> {
+ ctor public BrowseFragment.MainFragmentRowsAdapter(T);
+ method public android.support.v17.leanback.widget.RowPresenter.ViewHolder findRowViewHolderByPosition(int);
+ method public final T getFragment();
+ method public int getSelectedPosition();
+ method public void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.OnItemViewClickedListener);
+ method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.OnItemViewSelectedListener);
+ method public void setSelectedPosition(int, boolean, android.support.v17.leanback.widget.Presenter.ViewHolderTask);
+ method public void setSelectedPosition(int, boolean);
+ }
+
+ public static abstract interface BrowseFragment.MainFragmentRowsAdapterProvider {
+ method public abstract android.support.v17.leanback.app.BrowseFragment.MainFragmentRowsAdapter getMainFragmentRowsAdapter();
+ }
+
+ public class BrowseSupportFragment extends android.support.v17.leanback.app.BaseSupportFragment {
+ ctor public BrowseSupportFragment();
+ method public static android.os.Bundle createArgs(android.os.Bundle, java.lang.String, int);
+ method public void enableMainFragmentScaling(boolean);
+ method public deprecated void enableRowScaling(boolean);
+ method public android.support.v17.leanback.widget.ObjectAdapter getAdapter();
+ method public int getBrandColor();
+ method public int getHeadersState();
+ method public android.support.v17.leanback.app.HeadersSupportFragment getHeadersSupportFragment();
+ method public android.support.v4.app.Fragment getMainFragment();
+ method public final android.support.v17.leanback.app.BrowseSupportFragment.MainFragmentAdapterRegistry getMainFragmentRegistry();
+ method public android.support.v17.leanback.widget.OnItemViewClickedListener getOnItemViewClickedListener();
+ method public android.support.v17.leanback.widget.OnItemViewSelectedListener getOnItemViewSelectedListener();
+ method public android.support.v17.leanback.app.RowsSupportFragment getRowsSupportFragment();
+ method public int getSelectedPosition();
+ method public android.support.v17.leanback.widget.RowPresenter.ViewHolder getSelectedRowViewHolder();
+ method public final boolean isHeadersTransitionOnBackEnabled();
+ method public boolean isInHeadersTransition();
+ method public boolean isShowingHeaders();
+ method public android.support.v17.leanback.app.HeadersSupportFragment onCreateHeadersSupportFragment();
+ method public void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public void setBrandColor(int);
+ method public void setBrowseTransitionListener(android.support.v17.leanback.app.BrowseSupportFragment.BrowseTransitionListener);
+ method public void setHeaderPresenterSelector(android.support.v17.leanback.widget.PresenterSelector);
+ method public void setHeadersState(int);
+ method public final void setHeadersTransitionOnBackEnabled(boolean);
+ method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.OnItemViewClickedListener);
+ method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.OnItemViewSelectedListener);
+ method public void setSelectedPosition(int);
+ method public void setSelectedPosition(int, boolean);
+ method public void setSelectedPosition(int, boolean, android.support.v17.leanback.widget.Presenter.ViewHolderTask);
+ method public void startHeadersTransition(boolean);
+ field public static final int HEADERS_DISABLED = 3; // 0x3
+ field public static final int HEADERS_ENABLED = 1; // 0x1
+ field public static final int HEADERS_HIDDEN = 2; // 0x2
+ }
+
+ public static class BrowseSupportFragment.BrowseTransitionListener {
+ ctor public BrowseSupportFragment.BrowseTransitionListener();
+ method public void onHeadersTransitionStart(boolean);
+ method public void onHeadersTransitionStop(boolean);
+ }
+
+ public static abstract class BrowseSupportFragment.FragmentFactory<T extends android.support.v4.app.Fragment> {
+ ctor public BrowseSupportFragment.FragmentFactory();
+ method public abstract T createFragment(java.lang.Object);
+ }
+
+ public static abstract interface BrowseSupportFragment.FragmentHost {
+ method public abstract void notifyDataReady(android.support.v17.leanback.app.BrowseSupportFragment.MainFragmentAdapter);
+ method public abstract void notifyViewCreated(android.support.v17.leanback.app.BrowseSupportFragment.MainFragmentAdapter);
+ method public abstract void showTitleView(boolean);
+ }
+
+ public static class BrowseSupportFragment.ListRowFragmentFactory extends android.support.v17.leanback.app.BrowseSupportFragment.FragmentFactory {
+ ctor public BrowseSupportFragment.ListRowFragmentFactory();
+ method public android.support.v17.leanback.app.RowsSupportFragment createFragment(java.lang.Object);
+ }
+
+ public static class BrowseSupportFragment.MainFragmentAdapter<T extends android.support.v4.app.Fragment> {
+ ctor public BrowseSupportFragment.MainFragmentAdapter(T);
+ method public final T getFragment();
+ method public final android.support.v17.leanback.app.BrowseSupportFragment.FragmentHost getFragmentHost();
+ method public boolean isScalingEnabled();
+ method public boolean isScrolling();
+ method public void onTransitionEnd();
+ method public boolean onTransitionPrepare();
+ method public void onTransitionStart();
+ method public void setAlignment(int);
+ method public void setEntranceTransitionState(boolean);
+ method public void setExpand(boolean);
+ method public void setScalingEnabled(boolean);
+ }
+
+ public static abstract interface BrowseSupportFragment.MainFragmentAdapterProvider {
+ method public abstract android.support.v17.leanback.app.BrowseSupportFragment.MainFragmentAdapter getMainFragmentAdapter();
+ }
+
+ public static final class BrowseSupportFragment.MainFragmentAdapterRegistry {
+ ctor public BrowseSupportFragment.MainFragmentAdapterRegistry();
+ method public android.support.v4.app.Fragment createFragment(java.lang.Object);
+ method public void registerFragment(java.lang.Class, android.support.v17.leanback.app.BrowseSupportFragment.FragmentFactory);
+ }
+
+ public static class BrowseSupportFragment.MainFragmentRowsAdapter<T extends android.support.v4.app.Fragment> {
+ ctor public BrowseSupportFragment.MainFragmentRowsAdapter(T);
+ method public android.support.v17.leanback.widget.RowPresenter.ViewHolder findRowViewHolderByPosition(int);
+ method public final T getFragment();
+ method public int getSelectedPosition();
+ method public void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.OnItemViewClickedListener);
+ method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.OnItemViewSelectedListener);
+ method public void setSelectedPosition(int, boolean, android.support.v17.leanback.widget.Presenter.ViewHolderTask);
+ method public void setSelectedPosition(int, boolean);
+ }
+
+ public static abstract interface BrowseSupportFragment.MainFragmentRowsAdapterProvider {
+ method public abstract android.support.v17.leanback.app.BrowseSupportFragment.MainFragmentRowsAdapter getMainFragmentRowsAdapter();
+ }
+
+ public class DetailsFragment extends android.support.v17.leanback.app.BaseFragment {
+ ctor public DetailsFragment();
+ method public android.support.v17.leanback.widget.ObjectAdapter getAdapter();
+ method public android.support.v17.leanback.widget.BaseOnItemViewClickedListener getOnItemViewClickedListener();
+ method public android.support.v17.leanback.widget.DetailsParallax getParallax();
+ method public android.support.v17.leanback.app.RowsFragment getRowsFragment();
+ method protected deprecated android.view.View inflateTitle(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
+ method protected void onSetDetailsOverviewRowStatus(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter, android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder, int, int, int);
+ method protected void onSetRowStatus(android.support.v17.leanback.widget.RowPresenter, android.support.v17.leanback.widget.RowPresenter.ViewHolder, int, int, int);
+ method public void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.BaseOnItemViewClickedListener);
+ method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.BaseOnItemViewSelectedListener);
+ method public void setSelectedPosition(int);
+ method public void setSelectedPosition(int, boolean);
+ method protected void setupDetailsOverviewRowPresenter(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter);
+ method protected void setupPresenter(android.support.v17.leanback.widget.Presenter);
+ }
+
+ public class DetailsFragmentBackgroundController {
+ ctor public DetailsFragmentBackgroundController(android.support.v17.leanback.app.DetailsFragment);
+ method public boolean canNavigateToVideoFragment();
+ method public void enableParallax();
+ method public void enableParallax(android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.support.v17.leanback.widget.ParallaxTarget.PropertyValuesHolderTarget);
+ method public final android.app.Fragment findOrCreateVideoFragment();
+ method public final android.graphics.drawable.Drawable getBottomDrawable();
+ method public final android.graphics.Bitmap getCoverBitmap();
+ method public final android.graphics.drawable.Drawable getCoverDrawable();
+ method public final int getParallaxDrawableMaxOffset();
+ method public final android.support.v17.leanback.media.PlaybackGlue getPlaybackGlue();
+ method public final int getSolidColor();
+ method public android.support.v17.leanback.media.PlaybackGlueHost onCreateGlueHost();
+ method public android.app.Fragment onCreateVideoFragment();
+ method public final void setCoverBitmap(android.graphics.Bitmap);
+ method public final void setParallaxDrawableMaxOffset(int);
+ method public final void setSolidColor(int);
+ method public void setupVideoPlayback(android.support.v17.leanback.media.PlaybackGlue);
+ method public final void switchToRows();
+ method public final void switchToVideo();
+ }
+
+ public class DetailsSupportFragment extends android.support.v17.leanback.app.BaseSupportFragment {
+ ctor public DetailsSupportFragment();
+ method public android.support.v17.leanback.widget.ObjectAdapter getAdapter();
+ method public android.support.v17.leanback.widget.BaseOnItemViewClickedListener getOnItemViewClickedListener();
+ method public android.support.v17.leanback.widget.DetailsParallax getParallax();
+ method public android.support.v17.leanback.app.RowsSupportFragment getRowsSupportFragment();
+ method protected deprecated android.view.View inflateTitle(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
+ method protected void onSetDetailsOverviewRowStatus(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter, android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder, int, int, int);
+ method protected void onSetRowStatus(android.support.v17.leanback.widget.RowPresenter, android.support.v17.leanback.widget.RowPresenter.ViewHolder, int, int, int);
+ method public void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.BaseOnItemViewClickedListener);
+ method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.BaseOnItemViewSelectedListener);
+ method public void setSelectedPosition(int);
+ method public void setSelectedPosition(int, boolean);
+ method protected void setupDetailsOverviewRowPresenter(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter);
+ method protected void setupPresenter(android.support.v17.leanback.widget.Presenter);
+ }
+
+ public class DetailsSupportFragmentBackgroundController {
+ ctor public DetailsSupportFragmentBackgroundController(android.support.v17.leanback.app.DetailsSupportFragment);
+ method public boolean canNavigateToVideoSupportFragment();
+ method public void enableParallax();
+ method public void enableParallax(android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.support.v17.leanback.widget.ParallaxTarget.PropertyValuesHolderTarget);
+ method public final android.support.v4.app.Fragment findOrCreateVideoSupportFragment();
+ method public final android.graphics.drawable.Drawable getBottomDrawable();
+ method public final android.graphics.Bitmap getCoverBitmap();
+ method public final android.graphics.drawable.Drawable getCoverDrawable();
+ method public final int getParallaxDrawableMaxOffset();
+ method public final android.support.v17.leanback.media.PlaybackGlue getPlaybackGlue();
+ method public final int getSolidColor();
+ method public android.support.v17.leanback.media.PlaybackGlueHost onCreateGlueHost();
+ method public android.support.v4.app.Fragment onCreateVideoSupportFragment();
+ method public final void setCoverBitmap(android.graphics.Bitmap);
+ method public final void setParallaxDrawableMaxOffset(int);
+ method public final void setSolidColor(int);
+ method public void setupVideoPlayback(android.support.v17.leanback.media.PlaybackGlue);
+ method public final void switchToRows();
+ method public final void switchToVideo();
+ }
+
+ public class ErrorFragment extends android.support.v17.leanback.app.BrandedFragment {
+ ctor public ErrorFragment();
+ method public android.graphics.drawable.Drawable getBackgroundDrawable();
+ method public android.view.View.OnClickListener getButtonClickListener();
+ method public java.lang.String getButtonText();
+ method public android.graphics.drawable.Drawable getImageDrawable();
+ method public java.lang.CharSequence getMessage();
+ method public boolean isBackgroundTranslucent();
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+ method public void setButtonClickListener(android.view.View.OnClickListener);
+ method public void setButtonText(java.lang.String);
+ method public void setDefaultBackground(boolean);
+ method public void setImageDrawable(android.graphics.drawable.Drawable);
+ method public void setMessage(java.lang.CharSequence);
+ }
+
+ public class ErrorSupportFragment extends android.support.v17.leanback.app.BrandedSupportFragment {
+ ctor public ErrorSupportFragment();
+ method public android.graphics.drawable.Drawable getBackgroundDrawable();
+ method public android.view.View.OnClickListener getButtonClickListener();
+ method public java.lang.String getButtonText();
+ method public android.graphics.drawable.Drawable getImageDrawable();
+ method public java.lang.CharSequence getMessage();
+ method public boolean isBackgroundTranslucent();
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+ method public void setButtonClickListener(android.view.View.OnClickListener);
+ method public void setButtonText(java.lang.String);
+ method public void setDefaultBackground(boolean);
+ method public void setImageDrawable(android.graphics.drawable.Drawable);
+ method public void setMessage(java.lang.CharSequence);
+ }
+
+ public class GuidedStepFragment extends android.app.Fragment {
+ ctor public GuidedStepFragment();
+ method public static int add(android.app.FragmentManager, android.support.v17.leanback.app.GuidedStepFragment);
+ method public static int add(android.app.FragmentManager, android.support.v17.leanback.app.GuidedStepFragment, int);
+ method public static int addAsRoot(android.app.Activity, android.support.v17.leanback.app.GuidedStepFragment, int);
+ method public void collapseAction(boolean);
+ method public void collapseSubActions();
+ method public void expandAction(android.support.v17.leanback.widget.GuidedAction, boolean);
+ method public void expandSubActions(android.support.v17.leanback.widget.GuidedAction);
+ method public android.support.v17.leanback.widget.GuidedAction findActionById(long);
+ method public int findActionPositionById(long);
+ method public android.support.v17.leanback.widget.GuidedAction findButtonActionById(long);
+ method public int findButtonActionPositionById(long);
+ method public void finishGuidedStepFragments();
+ method public android.view.View getActionItemView(int);
+ method public java.util.List<android.support.v17.leanback.widget.GuidedAction> getActions();
+ method public android.view.View getButtonActionItemView(int);
+ method public java.util.List<android.support.v17.leanback.widget.GuidedAction> getButtonActions();
+ method public static android.support.v17.leanback.app.GuidedStepFragment getCurrentGuidedStepFragment(android.app.FragmentManager);
+ method public android.support.v17.leanback.widget.GuidanceStylist getGuidanceStylist();
+ method public android.support.v17.leanback.widget.GuidedActionsStylist getGuidedActionsStylist();
+ method public android.support.v17.leanback.widget.GuidedActionsStylist getGuidedButtonActionsStylist();
+ method public int getSelectedActionPosition();
+ method public int getSelectedButtonActionPosition();
+ method public int getUiStyle();
+ method public boolean isExpanded();
+ method public boolean isFocusOutEndAllowed();
+ method public boolean isFocusOutStartAllowed();
+ method public boolean isSubActionsExpanded();
+ method public void notifyActionChanged(int);
+ method public void notifyButtonActionChanged(int);
+ method protected void onAddSharedElementTransition(android.app.FragmentTransaction, android.support.v17.leanback.app.GuidedStepFragment);
+ method public void onCreateActions(java.util.List<android.support.v17.leanback.widget.GuidedAction>, android.os.Bundle);
+ method public android.support.v17.leanback.widget.GuidedActionsStylist onCreateActionsStylist();
+ method public android.view.View onCreateBackgroundView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
+ method public void onCreateButtonActions(java.util.List<android.support.v17.leanback.widget.GuidedAction>, android.os.Bundle);
+ method public android.support.v17.leanback.widget.GuidedActionsStylist onCreateButtonActionsStylist();
+ method public android.support.v17.leanback.widget.GuidanceStylist.Guidance onCreateGuidance(android.os.Bundle);
+ method public android.support.v17.leanback.widget.GuidanceStylist onCreateGuidanceStylist();
+ method public void onGuidedActionClicked(android.support.v17.leanback.widget.GuidedAction);
+ method public void onGuidedActionEditCanceled(android.support.v17.leanback.widget.GuidedAction);
+ method public deprecated void onGuidedActionEdited(android.support.v17.leanback.widget.GuidedAction);
+ method public long onGuidedActionEditedAndProceed(android.support.v17.leanback.widget.GuidedAction);
+ method public void onGuidedActionFocused(android.support.v17.leanback.widget.GuidedAction);
+ method protected void onProvideFragmentTransitions();
+ method public int onProvideTheme();
+ method public boolean onSubGuidedActionClicked(android.support.v17.leanback.widget.GuidedAction);
+ method public void openInEditMode(android.support.v17.leanback.widget.GuidedAction);
+ method public void popBackStackToGuidedStepFragment(java.lang.Class, int);
+ method public void setActions(java.util.List<android.support.v17.leanback.widget.GuidedAction>);
+ method public void setButtonActions(java.util.List<android.support.v17.leanback.widget.GuidedAction>);
+ method public void setSelectedActionPosition(int);
+ method public void setSelectedButtonActionPosition(int);
+ method public void setUiStyle(int);
+ field public static final java.lang.String EXTRA_UI_STYLE = "uiStyle";
+ field public static final int UI_STYLE_ACTIVITY_ROOT = 2; // 0x2
+ field public static final deprecated int UI_STYLE_DEFAULT = 0; // 0x0
+ field public static final int UI_STYLE_ENTRANCE = 1; // 0x1
+ field public static final int UI_STYLE_REPLACE = 0; // 0x0
+ }
+
+ public class GuidedStepSupportFragment extends android.support.v4.app.Fragment {
+ ctor public GuidedStepSupportFragment();
+ method public static int add(android.support.v4.app.FragmentManager, android.support.v17.leanback.app.GuidedStepSupportFragment);
+ method public static int add(android.support.v4.app.FragmentManager, android.support.v17.leanback.app.GuidedStepSupportFragment, int);
+ method public static int addAsRoot(android.support.v4.app.FragmentActivity, android.support.v17.leanback.app.GuidedStepSupportFragment, int);
+ method public void collapseAction(boolean);
+ method public void collapseSubActions();
+ method public void expandAction(android.support.v17.leanback.widget.GuidedAction, boolean);
+ method public void expandSubActions(android.support.v17.leanback.widget.GuidedAction);
+ method public android.support.v17.leanback.widget.GuidedAction findActionById(long);
+ method public int findActionPositionById(long);
+ method public android.support.v17.leanback.widget.GuidedAction findButtonActionById(long);
+ method public int findButtonActionPositionById(long);
+ method public void finishGuidedStepSupportFragments();
+ method public android.view.View getActionItemView(int);
+ method public java.util.List<android.support.v17.leanback.widget.GuidedAction> getActions();
+ method public android.view.View getButtonActionItemView(int);
+ method public java.util.List<android.support.v17.leanback.widget.GuidedAction> getButtonActions();
+ method public static android.support.v17.leanback.app.GuidedStepSupportFragment getCurrentGuidedStepSupportFragment(android.support.v4.app.FragmentManager);
+ method public android.support.v17.leanback.widget.GuidanceStylist getGuidanceStylist();
+ method public android.support.v17.leanback.widget.GuidedActionsStylist getGuidedActionsStylist();
+ method public android.support.v17.leanback.widget.GuidedActionsStylist getGuidedButtonActionsStylist();
+ method public int getSelectedActionPosition();
+ method public int getSelectedButtonActionPosition();
+ method public int getUiStyle();
+ method public boolean isExpanded();
+ method public boolean isFocusOutEndAllowed();
+ method public boolean isFocusOutStartAllowed();
+ method public boolean isSubActionsExpanded();
+ method public void notifyActionChanged(int);
+ method public void notifyButtonActionChanged(int);
+ method protected void onAddSharedElementTransition(android.support.v4.app.FragmentTransaction, android.support.v17.leanback.app.GuidedStepSupportFragment);
+ method public void onCreateActions(java.util.List<android.support.v17.leanback.widget.GuidedAction>, android.os.Bundle);
+ method public android.support.v17.leanback.widget.GuidedActionsStylist onCreateActionsStylist();
+ method public android.view.View onCreateBackgroundView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
+ method public void onCreateButtonActions(java.util.List<android.support.v17.leanback.widget.GuidedAction>, android.os.Bundle);
+ method public android.support.v17.leanback.widget.GuidedActionsStylist onCreateButtonActionsStylist();
+ method public android.support.v17.leanback.widget.GuidanceStylist.Guidance onCreateGuidance(android.os.Bundle);
+ method public android.support.v17.leanback.widget.GuidanceStylist onCreateGuidanceStylist();
+ method public void onGuidedActionClicked(android.support.v17.leanback.widget.GuidedAction);
+ method public void onGuidedActionEditCanceled(android.support.v17.leanback.widget.GuidedAction);
+ method public deprecated void onGuidedActionEdited(android.support.v17.leanback.widget.GuidedAction);
+ method public long onGuidedActionEditedAndProceed(android.support.v17.leanback.widget.GuidedAction);
+ method public void onGuidedActionFocused(android.support.v17.leanback.widget.GuidedAction);
+ method protected void onProvideFragmentTransitions();
+ method public int onProvideTheme();
+ method public boolean onSubGuidedActionClicked(android.support.v17.leanback.widget.GuidedAction);
+ method public void openInEditMode(android.support.v17.leanback.widget.GuidedAction);
+ method public void popBackStackToGuidedStepSupportFragment(java.lang.Class, int);
+ method public void setActions(java.util.List<android.support.v17.leanback.widget.GuidedAction>);
+ method public void setButtonActions(java.util.List<android.support.v17.leanback.widget.GuidedAction>);
+ method public void setSelectedActionPosition(int);
+ method public void setSelectedButtonActionPosition(int);
+ method public void setUiStyle(int);
+ field public static final java.lang.String EXTRA_UI_STYLE = "uiStyle";
+ field public static final int UI_STYLE_ACTIVITY_ROOT = 2; // 0x2
+ field public static final deprecated int UI_STYLE_DEFAULT = 0; // 0x0
+ field public static final int UI_STYLE_ENTRANCE = 1; // 0x1
+ field public static final int UI_STYLE_REPLACE = 0; // 0x0
+ }
+
+ public class HeadersFragment extends android.support.v17.leanback.app.BaseRowFragment {
+ ctor public HeadersFragment();
+ method public boolean isScrolling();
+ method public void setOnHeaderClickedListener(android.support.v17.leanback.app.HeadersFragment.OnHeaderClickedListener);
+ method public void setOnHeaderViewSelectedListener(android.support.v17.leanback.app.HeadersFragment.OnHeaderViewSelectedListener);
+ }
+
+ public static abstract interface HeadersFragment.OnHeaderClickedListener {
+ method public abstract void onHeaderClicked(android.support.v17.leanback.widget.RowHeaderPresenter.ViewHolder, android.support.v17.leanback.widget.Row);
+ }
+
+ public static abstract interface HeadersFragment.OnHeaderViewSelectedListener {
+ method public abstract void onHeaderSelected(android.support.v17.leanback.widget.RowHeaderPresenter.ViewHolder, android.support.v17.leanback.widget.Row);
+ }
+
+ public class HeadersSupportFragment extends android.support.v17.leanback.app.BaseRowSupportFragment {
+ ctor public HeadersSupportFragment();
+ method public boolean isScrolling();
+ method public void setOnHeaderClickedListener(android.support.v17.leanback.app.HeadersSupportFragment.OnHeaderClickedListener);
+ method public void setOnHeaderViewSelectedListener(android.support.v17.leanback.app.HeadersSupportFragment.OnHeaderViewSelectedListener);
+ }
+
+ public static abstract interface HeadersSupportFragment.OnHeaderClickedListener {
+ method public abstract void onHeaderClicked(android.support.v17.leanback.widget.RowHeaderPresenter.ViewHolder, android.support.v17.leanback.widget.Row);
+ }
+
+ public static abstract interface HeadersSupportFragment.OnHeaderViewSelectedListener {
+ method public abstract void onHeaderSelected(android.support.v17.leanback.widget.RowHeaderPresenter.ViewHolder, android.support.v17.leanback.widget.Row);
+ }
+
+ public abstract deprecated class MediaControllerGlue extends android.support.v17.leanback.app.PlaybackControlGlue {
+ ctor public MediaControllerGlue(android.content.Context, android.support.v17.leanback.app.PlaybackOverlayFragment, int[]);
+ ctor public MediaControllerGlue(android.content.Context, android.support.v17.leanback.app.PlaybackOverlayFragment, int[], int[]);
+ method public void attachToMediaController(android.support.v4.media.session.MediaControllerCompat);
+ method public void detach();
+ method public int getCurrentPosition();
+ method public int getCurrentSpeedId();
+ method public android.graphics.drawable.Drawable getMediaArt();
+ method public final android.support.v4.media.session.MediaControllerCompat getMediaController();
+ method public int getMediaDuration();
+ method public java.lang.CharSequence getMediaSubtitle();
+ method public java.lang.CharSequence getMediaTitle();
+ method public long getSupportedActions();
+ method public boolean hasValidMedia();
+ method public boolean isMediaPlaying();
+ method protected void pausePlayback();
+ method protected void skipToNext();
+ method protected void skipToPrevious();
+ method protected void startPlayback(int);
+ }
+
+ public abstract class OnboardingFragment extends android.app.Fragment {
+ ctor public OnboardingFragment();
+ method public final int getArrowBackgroundColor();
+ method public final int getArrowColor();
+ method protected final int getCurrentPageIndex();
+ method public final int getDescriptionViewTextColor();
+ method public final int getDotBackgroundColor();
+ method public final int getIconResourceId();
+ method public final int getLogoResourceId();
+ method protected abstract int getPageCount();
+ method protected abstract java.lang.CharSequence getPageDescription(int);
+ method protected abstract java.lang.CharSequence getPageTitle(int);
+ method public final java.lang.CharSequence getStartButtonText();
+ method public final int getTitleViewTextColor();
+ method protected final boolean isLogoAnimationFinished();
+ method protected void moveToNextPage();
+ method protected void moveToPreviousPage();
+ method protected abstract android.view.View onCreateBackgroundView(android.view.LayoutInflater, android.view.ViewGroup);
+ method protected abstract android.view.View onCreateContentView(android.view.LayoutInflater, android.view.ViewGroup);
+ method protected android.animation.Animator onCreateDescriptionAnimator();
+ method protected android.animation.Animator onCreateEnterAnimation();
+ method protected abstract android.view.View onCreateForegroundView(android.view.LayoutInflater, android.view.ViewGroup);
+ method protected android.animation.Animator onCreateLogoAnimation();
+ method protected android.animation.Animator onCreateTitleAnimator();
+ method protected void onFinishFragment();
+ method protected void onLogoAnimationFinished();
+ method protected void onPageChanged(int, int);
+ method public int onProvideTheme();
+ method public void setArrowBackgroundColor(int);
+ method public void setArrowColor(int);
+ method public void setDescriptionViewTextColor(int);
+ method public void setDotBackgroundColor(int);
+ method public final void setIconResouceId(int);
+ method public final void setLogoResourceId(int);
+ method public void setStartButtonText(java.lang.CharSequence);
+ method public void setTitleViewTextColor(int);
+ method protected final void startEnterAnimation(boolean);
+ }
+
+ public abstract class OnboardingSupportFragment extends android.support.v4.app.Fragment {
+ ctor public OnboardingSupportFragment();
+ method public final int getArrowBackgroundColor();
+ method public final int getArrowColor();
+ method protected final int getCurrentPageIndex();
+ method public final int getDescriptionViewTextColor();
+ method public final int getDotBackgroundColor();
+ method public final int getIconResourceId();
+ method public final int getLogoResourceId();
+ method protected abstract int getPageCount();
+ method protected abstract java.lang.CharSequence getPageDescription(int);
+ method protected abstract java.lang.CharSequence getPageTitle(int);
+ method public final java.lang.CharSequence getStartButtonText();
+ method public final int getTitleViewTextColor();
+ method protected final boolean isLogoAnimationFinished();
+ method protected void moveToNextPage();
+ method protected void moveToPreviousPage();
+ method protected abstract android.view.View onCreateBackgroundView(android.view.LayoutInflater, android.view.ViewGroup);
+ method protected abstract android.view.View onCreateContentView(android.view.LayoutInflater, android.view.ViewGroup);
+ method protected android.animation.Animator onCreateDescriptionAnimator();
+ method protected android.animation.Animator onCreateEnterAnimation();
+ method protected abstract android.view.View onCreateForegroundView(android.view.LayoutInflater, android.view.ViewGroup);
+ method protected android.animation.Animator onCreateLogoAnimation();
+ method protected android.animation.Animator onCreateTitleAnimator();
+ method protected void onFinishFragment();
+ method protected void onLogoAnimationFinished();
+ method protected void onPageChanged(int, int);
+ method public int onProvideTheme();
+ method public void setArrowBackgroundColor(int);
+ method public void setArrowColor(int);
+ method public void setDescriptionViewTextColor(int);
+ method public void setDotBackgroundColor(int);
+ method public final void setIconResouceId(int);
+ method public final void setLogoResourceId(int);
+ method public void setStartButtonText(java.lang.CharSequence);
+ method public void setTitleViewTextColor(int);
+ method protected final void startEnterAnimation(boolean);
+ }
+
+ public abstract deprecated class PlaybackControlGlue extends android.support.v17.leanback.media.PlaybackControlGlue {
+ ctor public PlaybackControlGlue(android.content.Context, int[]);
+ ctor public PlaybackControlGlue(android.content.Context, int[], int[]);
+ ctor public PlaybackControlGlue(android.content.Context, android.support.v17.leanback.app.PlaybackOverlayFragment, int[]);
+ ctor public PlaybackControlGlue(android.content.Context, android.support.v17.leanback.app.PlaybackOverlayFragment, int[], int[]);
+ method public android.support.v17.leanback.widget.PlaybackControlsRowPresenter createControlsRowAndPresenter();
+ method protected android.support.v17.leanback.widget.SparseArrayObjectAdapter createPrimaryActionsAdapter(android.support.v17.leanback.widget.PresenterSelector);
+ method public android.support.v17.leanback.app.PlaybackOverlayFragment getFragment();
+ method public deprecated android.support.v17.leanback.widget.OnItemViewClickedListener getOnItemViewClickedListener();
+ method public final void next();
+ method protected void onRowChanged(android.support.v17.leanback.widget.PlaybackControlsRow);
+ method public final void pause();
+ method protected deprecated void pausePlayback();
+ method public final void play(int);
+ method public final void previous();
+ method public deprecated void setOnItemViewClickedListener(android.support.v17.leanback.widget.OnItemViewClickedListener);
+ method protected deprecated void skipToNext();
+ method protected deprecated void skipToPrevious();
+ method protected deprecated void startPlayback(int);
+ }
+
+ public static abstract deprecated interface PlaybackControlGlue.InputEventHandler {
+ method public abstract boolean handleInputEvent(android.view.InputEvent);
+ }
+
+ public abstract deprecated class PlaybackControlSupportGlue extends android.support.v17.leanback.app.PlaybackControlGlue {
+ ctor public PlaybackControlSupportGlue(android.content.Context, int[]);
+ ctor public PlaybackControlSupportGlue(android.content.Context, int[], int[]);
+ ctor public PlaybackControlSupportGlue(android.content.Context, android.support.v17.leanback.app.PlaybackOverlaySupportFragment, int[]);
+ ctor public PlaybackControlSupportGlue(android.content.Context, android.support.v17.leanback.app.PlaybackOverlaySupportFragment, int[], int[]);
+ field public static final int ACTION_CUSTOM_LEFT_FIRST = 1; // 0x1
+ field public static final int ACTION_CUSTOM_RIGHT_FIRST = 4096; // 0x1000
+ field public static final int ACTION_FAST_FORWARD = 128; // 0x80
+ field public static final int ACTION_PLAY_PAUSE = 64; // 0x40
+ field public static final int ACTION_REWIND = 32; // 0x20
+ field public static final int ACTION_SKIP_TO_NEXT = 256; // 0x100
+ field public static final int ACTION_SKIP_TO_PREVIOUS = 16; // 0x10
+ field public static final int PLAYBACK_SPEED_FAST_L0 = 10; // 0xa
+ field public static final int PLAYBACK_SPEED_FAST_L1 = 11; // 0xb
+ field public static final int PLAYBACK_SPEED_FAST_L2 = 12; // 0xc
+ field public static final int PLAYBACK_SPEED_FAST_L3 = 13; // 0xd
+ field public static final int PLAYBACK_SPEED_FAST_L4 = 14; // 0xe
+ field public static final int PLAYBACK_SPEED_INVALID = -1; // 0xffffffff
+ field public static final int PLAYBACK_SPEED_NORMAL = 1; // 0x1
+ field public static final int PLAYBACK_SPEED_PAUSED = 0; // 0x0
+ }
+
+ public class PlaybackFragment extends android.app.Fragment {
+ ctor public PlaybackFragment();
+ method public deprecated void fadeOut();
+ method public android.support.v17.leanback.widget.ObjectAdapter getAdapter();
+ method public int getBackgroundType();
+ method public android.support.v17.leanback.app.ProgressBarManager getProgressBarManager();
+ method public void hideControlsOverlay(boolean);
+ method public boolean isControlsOverlayAutoHideEnabled();
+ method public boolean isControlsOverlayVisible();
+ method public deprecated boolean isFadingEnabled();
+ method public void notifyPlaybackRowChanged();
+ method protected void onBufferingStateChanged(boolean);
+ method protected void onError(int, java.lang.CharSequence);
+ method protected void onVideoSizeChanged(int, int);
+ method public void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public void setBackgroundType(int);
+ method public void setControlsOverlayAutoHideEnabled(boolean);
+ method public deprecated void setFadingEnabled(boolean);
+ method public void setHostCallback(android.support.v17.leanback.media.PlaybackGlueHost.HostCallback);
+ method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.BaseOnItemViewClickedListener);
+ method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.BaseOnItemViewSelectedListener);
+ method public final void setOnKeyInterceptListener(android.view.View.OnKeyListener);
+ method public void setOnPlaybackItemViewClickedListener(android.support.v17.leanback.widget.BaseOnItemViewClickedListener);
+ method public void setPlaybackRow(android.support.v17.leanback.widget.Row);
+ method public void setPlaybackRowPresenter(android.support.v17.leanback.widget.PlaybackRowPresenter);
+ method public void setPlaybackSeekUiClient(android.support.v17.leanback.widget.PlaybackSeekUi.Client);
+ method public void setSelectedPosition(int);
+ method public void setSelectedPosition(int, boolean);
+ method public void showControlsOverlay(boolean);
+ method public void tickle();
+ field public static final int BG_DARK = 1; // 0x1
+ field public static final int BG_LIGHT = 2; // 0x2
+ field public static final int BG_NONE = 0; // 0x0
+ }
+
+ public class PlaybackFragmentGlueHost extends android.support.v17.leanback.media.PlaybackGlueHost implements android.support.v17.leanback.widget.PlaybackSeekUi {
+ ctor public PlaybackFragmentGlueHost(android.support.v17.leanback.app.PlaybackFragment);
+ method public void fadeOut();
+ method public void setPlaybackSeekUiClient(android.support.v17.leanback.widget.PlaybackSeekUi.Client);
+ }
+
+ public deprecated class PlaybackOverlayFragment extends android.support.v17.leanback.app.DetailsFragment {
+ ctor public PlaybackOverlayFragment();
+ method public void fadeOut();
+ method public int getBackgroundType();
+ method public final android.support.v17.leanback.app.PlaybackControlGlue.InputEventHandler getEventHandler();
+ method public android.support.v17.leanback.app.PlaybackOverlayFragment.OnFadeCompleteListener getFadeCompleteListener();
+ method public final deprecated android.support.v17.leanback.app.PlaybackOverlayFragment.InputEventHandler getInputEventHandler();
+ method public boolean isFadingEnabled();
+ method public void setBackgroundType(int);
+ method public final void setEventHandler(android.support.v17.leanback.app.PlaybackControlGlue.InputEventHandler);
+ method public void setFadeCompleteListener(android.support.v17.leanback.app.PlaybackOverlayFragment.OnFadeCompleteListener);
+ method public void setFadingEnabled(boolean);
+ method public final deprecated void setInputEventHandler(android.support.v17.leanback.app.PlaybackOverlayFragment.InputEventHandler);
+ method public void tickle();
+ field public static final int BG_DARK = 1; // 0x1
+ field public static final int BG_LIGHT = 2; // 0x2
+ field public static final int BG_NONE = 0; // 0x0
+ }
+
+ public static abstract deprecated interface PlaybackOverlayFragment.InputEventHandler implements android.support.v17.leanback.app.PlaybackControlGlue.InputEventHandler {
+ }
+
+ public static class PlaybackOverlayFragment.OnFadeCompleteListener {
+ ctor public PlaybackOverlayFragment.OnFadeCompleteListener();
+ method public void onFadeInComplete();
+ method public void onFadeOutComplete();
+ }
+
+ public deprecated class PlaybackOverlaySupportFragment extends android.support.v17.leanback.app.DetailsSupportFragment {
+ ctor public PlaybackOverlaySupportFragment();
+ method public void fadeOut();
+ method public int getBackgroundType();
+ method public final android.support.v17.leanback.app.PlaybackControlGlue.InputEventHandler getEventHandler();
+ method public android.support.v17.leanback.app.PlaybackOverlaySupportFragment.OnFadeCompleteListener getFadeCompleteListener();
+ method public final deprecated android.support.v17.leanback.app.PlaybackOverlaySupportFragment.InputEventHandler getInputEventHandler();
+ method public boolean isFadingEnabled();
+ method public void setBackgroundType(int);
+ method public final void setEventHandler(android.support.v17.leanback.app.PlaybackControlGlue.InputEventHandler);
+ method public void setFadeCompleteListener(android.support.v17.leanback.app.PlaybackOverlaySupportFragment.OnFadeCompleteListener);
+ method public void setFadingEnabled(boolean);
+ method public final deprecated void setInputEventHandler(android.support.v17.leanback.app.PlaybackOverlaySupportFragment.InputEventHandler);
+ method public void tickle();
+ field public static final int BG_DARK = 1; // 0x1
+ field public static final int BG_LIGHT = 2; // 0x2
+ field public static final int BG_NONE = 0; // 0x0
+ }
+
+ public static abstract deprecated interface PlaybackOverlaySupportFragment.InputEventHandler implements android.support.v17.leanback.app.PlaybackControlGlue.InputEventHandler {
+ }
+
+ public static class PlaybackOverlaySupportFragment.OnFadeCompleteListener {
+ ctor public PlaybackOverlaySupportFragment.OnFadeCompleteListener();
+ method public void onFadeInComplete();
+ method public void onFadeOutComplete();
+ }
+
+ public class PlaybackSupportFragment extends android.support.v4.app.Fragment {
+ ctor public PlaybackSupportFragment();
+ method public deprecated void fadeOut();
+ method public android.support.v17.leanback.widget.ObjectAdapter getAdapter();
+ method public int getBackgroundType();
+ method public android.support.v17.leanback.app.ProgressBarManager getProgressBarManager();
+ method public void hideControlsOverlay(boolean);
+ method public boolean isControlsOverlayAutoHideEnabled();
+ method public boolean isControlsOverlayVisible();
+ method public deprecated boolean isFadingEnabled();
+ method public void notifyPlaybackRowChanged();
+ method protected void onBufferingStateChanged(boolean);
+ method protected void onError(int, java.lang.CharSequence);
+ method protected void onVideoSizeChanged(int, int);
+ method public void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public void setBackgroundType(int);
+ method public void setControlsOverlayAutoHideEnabled(boolean);
+ method public deprecated void setFadingEnabled(boolean);
+ method public void setHostCallback(android.support.v17.leanback.media.PlaybackGlueHost.HostCallback);
+ method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.BaseOnItemViewClickedListener);
+ method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.BaseOnItemViewSelectedListener);
+ method public final void setOnKeyInterceptListener(android.view.View.OnKeyListener);
+ method public void setOnPlaybackItemViewClickedListener(android.support.v17.leanback.widget.BaseOnItemViewClickedListener);
+ method public void setPlaybackRow(android.support.v17.leanback.widget.Row);
+ method public void setPlaybackRowPresenter(android.support.v17.leanback.widget.PlaybackRowPresenter);
+ method public void setPlaybackSeekUiClient(android.support.v17.leanback.widget.PlaybackSeekUi.Client);
+ method public void setSelectedPosition(int);
+ method public void setSelectedPosition(int, boolean);
+ method public void showControlsOverlay(boolean);
+ method public void tickle();
+ field public static final int BG_DARK = 1; // 0x1
+ field public static final int BG_LIGHT = 2; // 0x2
+ field public static final int BG_NONE = 0; // 0x0
+ }
+
+ public class PlaybackSupportFragmentGlueHost extends android.support.v17.leanback.media.PlaybackGlueHost implements android.support.v17.leanback.widget.PlaybackSeekUi {
+ ctor public PlaybackSupportFragmentGlueHost(android.support.v17.leanback.app.PlaybackSupportFragment);
+ method public void fadeOut();
+ method public void setPlaybackSeekUiClient(android.support.v17.leanback.widget.PlaybackSeekUi.Client);
+ }
+
+ public final class ProgressBarManager {
+ ctor public ProgressBarManager();
+ method public void disableProgressBar();
+ method public void enableProgressBar();
+ method public long getInitialDelay();
+ method public void hide();
+ method public void setInitialDelay(long);
+ method public void setProgressBarView(android.view.View);
+ method public void setRootView(android.view.ViewGroup);
+ method public void show();
+ }
+
+ public class RowsFragment extends android.support.v17.leanback.app.BaseRowFragment implements android.support.v17.leanback.app.BrowseFragment.MainFragmentAdapterProvider android.support.v17.leanback.app.BrowseFragment.MainFragmentRowsAdapterProvider {
+ ctor public RowsFragment();
+ method public deprecated void enableRowScaling(boolean);
+ method protected android.support.v17.leanback.widget.VerticalGridView findGridViewFromRoot(android.view.View);
+ method public android.support.v17.leanback.widget.RowPresenter.ViewHolder findRowViewHolderByPosition(int);
+ method public android.support.v17.leanback.app.BrowseFragment.MainFragmentAdapter getMainFragmentAdapter();
+ method public android.support.v17.leanback.app.BrowseFragment.MainFragmentRowsAdapter getMainFragmentRowsAdapter();
+ method public android.support.v17.leanback.widget.BaseOnItemViewClickedListener getOnItemViewClickedListener();
+ method public android.support.v17.leanback.widget.BaseOnItemViewSelectedListener getOnItemViewSelectedListener();
+ method public android.support.v17.leanback.widget.RowPresenter.ViewHolder getRowViewHolder(int);
+ method public boolean isScrolling();
+ method public void setEntranceTransitionState(boolean);
+ method public void setExpand(boolean);
+ method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.BaseOnItemViewClickedListener);
+ method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.BaseOnItemViewSelectedListener);
+ method public void setSelectedPosition(int, boolean, android.support.v17.leanback.widget.Presenter.ViewHolderTask);
+ }
+
+ public static class RowsFragment.MainFragmentAdapter extends android.support.v17.leanback.app.BrowseFragment.MainFragmentAdapter {
+ ctor public RowsFragment.MainFragmentAdapter(android.support.v17.leanback.app.RowsFragment);
+ }
+
+ public static class RowsFragment.MainFragmentRowsAdapter extends android.support.v17.leanback.app.BrowseFragment.MainFragmentRowsAdapter {
+ ctor public RowsFragment.MainFragmentRowsAdapter(android.support.v17.leanback.app.RowsFragment);
+ }
+
+ public class RowsSupportFragment extends android.support.v17.leanback.app.BaseRowSupportFragment implements android.support.v17.leanback.app.BrowseSupportFragment.MainFragmentAdapterProvider android.support.v17.leanback.app.BrowseSupportFragment.MainFragmentRowsAdapterProvider {
+ ctor public RowsSupportFragment();
+ method public deprecated void enableRowScaling(boolean);
+ method protected android.support.v17.leanback.widget.VerticalGridView findGridViewFromRoot(android.view.View);
+ method public android.support.v17.leanback.widget.RowPresenter.ViewHolder findRowViewHolderByPosition(int);
+ method public android.support.v17.leanback.app.BrowseSupportFragment.MainFragmentAdapter getMainFragmentAdapter();
+ method public android.support.v17.leanback.app.BrowseSupportFragment.MainFragmentRowsAdapter getMainFragmentRowsAdapter();
+ method public android.support.v17.leanback.widget.BaseOnItemViewClickedListener getOnItemViewClickedListener();
+ method public android.support.v17.leanback.widget.BaseOnItemViewSelectedListener getOnItemViewSelectedListener();
+ method public android.support.v17.leanback.widget.RowPresenter.ViewHolder getRowViewHolder(int);
+ method public boolean isScrolling();
+ method public void setEntranceTransitionState(boolean);
+ method public void setExpand(boolean);
+ method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.BaseOnItemViewClickedListener);
+ method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.BaseOnItemViewSelectedListener);
+ method public void setSelectedPosition(int, boolean, android.support.v17.leanback.widget.Presenter.ViewHolderTask);
+ }
+
+ public static class RowsSupportFragment.MainFragmentAdapter extends android.support.v17.leanback.app.BrowseSupportFragment.MainFragmentAdapter {
+ ctor public RowsSupportFragment.MainFragmentAdapter(android.support.v17.leanback.app.RowsSupportFragment);
+ }
+
+ public static class RowsSupportFragment.MainFragmentRowsAdapter extends android.support.v17.leanback.app.BrowseSupportFragment.MainFragmentRowsAdapter {
+ ctor public RowsSupportFragment.MainFragmentRowsAdapter(android.support.v17.leanback.app.RowsSupportFragment);
+ }
+
+ public class SearchFragment extends android.app.Fragment {
+ ctor public SearchFragment();
+ method public static android.os.Bundle createArgs(android.os.Bundle, java.lang.String);
+ method public static android.os.Bundle createArgs(android.os.Bundle, java.lang.String, java.lang.String);
+ method public void displayCompletions(java.util.List<java.lang.String>);
+ method public void displayCompletions(android.view.inputmethod.CompletionInfo[]);
+ method public android.graphics.drawable.Drawable getBadgeDrawable();
+ method public android.content.Intent getRecognizerIntent();
+ method public android.support.v17.leanback.app.RowsFragment getRowsFragment();
+ method public java.lang.String getTitle();
+ method public static android.support.v17.leanback.app.SearchFragment newInstance(java.lang.String);
+ method public void setBadgeDrawable(android.graphics.drawable.Drawable);
+ method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.OnItemViewClickedListener);
+ method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.OnItemViewSelectedListener);
+ method public void setSearchAffordanceColors(android.support.v17.leanback.widget.SearchOrbView.Colors);
+ method public void setSearchAffordanceColorsInListening(android.support.v17.leanback.widget.SearchOrbView.Colors);
+ method public void setSearchQuery(java.lang.String, boolean);
+ method public void setSearchQuery(android.content.Intent, boolean);
+ method public void setSearchResultProvider(android.support.v17.leanback.app.SearchFragment.SearchResultProvider);
+ method public void setSpeechRecognitionCallback(android.support.v17.leanback.widget.SpeechRecognitionCallback);
+ method public void setTitle(java.lang.String);
+ method public void startRecognition();
+ }
+
+ public static abstract interface SearchFragment.SearchResultProvider {
+ method public abstract android.support.v17.leanback.widget.ObjectAdapter getResultsAdapter();
+ method public abstract boolean onQueryTextChange(java.lang.String);
+ method public abstract boolean onQueryTextSubmit(java.lang.String);
+ }
+
+ public class SearchSupportFragment extends android.support.v4.app.Fragment {
+ ctor public SearchSupportFragment();
+ method public static android.os.Bundle createArgs(android.os.Bundle, java.lang.String);
+ method public static android.os.Bundle createArgs(android.os.Bundle, java.lang.String, java.lang.String);
+ method public void displayCompletions(java.util.List<java.lang.String>);
+ method public void displayCompletions(android.view.inputmethod.CompletionInfo[]);
+ method public android.graphics.drawable.Drawable getBadgeDrawable();
+ method public android.content.Intent getRecognizerIntent();
+ method public android.support.v17.leanback.app.RowsSupportFragment getRowsSupportFragment();
+ method public java.lang.String getTitle();
+ method public static android.support.v17.leanback.app.SearchSupportFragment newInstance(java.lang.String);
+ method public void setBadgeDrawable(android.graphics.drawable.Drawable);
+ method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.OnItemViewClickedListener);
+ method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.OnItemViewSelectedListener);
+ method public void setSearchAffordanceColors(android.support.v17.leanback.widget.SearchOrbView.Colors);
+ method public void setSearchAffordanceColorsInListening(android.support.v17.leanback.widget.SearchOrbView.Colors);
+ method public void setSearchQuery(java.lang.String, boolean);
+ method public void setSearchQuery(android.content.Intent, boolean);
+ method public void setSearchResultProvider(android.support.v17.leanback.app.SearchSupportFragment.SearchResultProvider);
+ method public void setSpeechRecognitionCallback(android.support.v17.leanback.widget.SpeechRecognitionCallback);
+ method public void setTitle(java.lang.String);
+ method public void startRecognition();
+ }
+
+ public static abstract interface SearchSupportFragment.SearchResultProvider {
+ method public abstract android.support.v17.leanback.widget.ObjectAdapter getResultsAdapter();
+ method public abstract boolean onQueryTextChange(java.lang.String);
+ method public abstract boolean onQueryTextSubmit(java.lang.String);
+ }
+
+ public class VerticalGridFragment extends android.support.v17.leanback.app.BaseFragment {
+ ctor public VerticalGridFragment();
+ method public android.support.v17.leanback.widget.ObjectAdapter getAdapter();
+ method public android.support.v17.leanback.widget.VerticalGridPresenter getGridPresenter();
+ method public android.support.v17.leanback.widget.OnItemViewClickedListener getOnItemViewClickedListener();
+ method public void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public void setGridPresenter(android.support.v17.leanback.widget.VerticalGridPresenter);
+ method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.OnItemViewClickedListener);
+ method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.OnItemViewSelectedListener);
+ method public void setSelectedPosition(int);
+ }
+
+ public class VerticalGridSupportFragment extends android.support.v17.leanback.app.BaseSupportFragment {
+ ctor public VerticalGridSupportFragment();
+ method public android.support.v17.leanback.widget.ObjectAdapter getAdapter();
+ method public android.support.v17.leanback.widget.VerticalGridPresenter getGridPresenter();
+ method public android.support.v17.leanback.widget.OnItemViewClickedListener getOnItemViewClickedListener();
+ method public void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public void setGridPresenter(android.support.v17.leanback.widget.VerticalGridPresenter);
+ method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.OnItemViewClickedListener);
+ method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.OnItemViewSelectedListener);
+ method public void setSelectedPosition(int);
+ }
+
+ public class VideoFragment extends android.support.v17.leanback.app.PlaybackFragment {
+ ctor public VideoFragment();
+ method public android.view.SurfaceView getSurfaceView();
+ method public void setSurfaceHolderCallback(android.view.SurfaceHolder.Callback);
+ }
+
+ public class VideoFragmentGlueHost extends android.support.v17.leanback.app.PlaybackFragmentGlueHost implements android.support.v17.leanback.media.SurfaceHolderGlueHost {
+ ctor public VideoFragmentGlueHost(android.support.v17.leanback.app.VideoFragment);
+ method public void setSurfaceHolderCallback(android.view.SurfaceHolder.Callback);
+ }
+
+ public class VideoSupportFragment extends android.support.v17.leanback.app.PlaybackSupportFragment {
+ ctor public VideoSupportFragment();
+ method public android.view.SurfaceView getSurfaceView();
+ method public void setSurfaceHolderCallback(android.view.SurfaceHolder.Callback);
+ }
+
+ public class VideoSupportFragmentGlueHost extends android.support.v17.leanback.app.PlaybackSupportFragmentGlueHost implements android.support.v17.leanback.media.SurfaceHolderGlueHost {
+ ctor public VideoSupportFragmentGlueHost(android.support.v17.leanback.app.VideoSupportFragment);
+ method public void setSurfaceHolderCallback(android.view.SurfaceHolder.Callback);
+ }
+
+}
+
+package android.support.v17.leanback.database {
+
+ public abstract class CursorMapper {
+ ctor public CursorMapper();
+ method protected abstract java.lang.Object bind(android.database.Cursor);
+ method protected abstract void bindColumns(android.database.Cursor);
+ method public java.lang.Object convert(android.database.Cursor);
+ }
+
+}
+
+package android.support.v17.leanback.graphics {
+
+ public class BoundsRule {
+ ctor public BoundsRule();
+ ctor public BoundsRule(android.support.v17.leanback.graphics.BoundsRule);
+ method public void calculateBounds(android.graphics.Rect, android.graphics.Rect);
+ field public android.support.v17.leanback.graphics.BoundsRule.ValueRule bottom;
+ field public android.support.v17.leanback.graphics.BoundsRule.ValueRule left;
+ field public android.support.v17.leanback.graphics.BoundsRule.ValueRule right;
+ field public android.support.v17.leanback.graphics.BoundsRule.ValueRule top;
+ }
+
+ public static final class BoundsRule.ValueRule {
+ method public static android.support.v17.leanback.graphics.BoundsRule.ValueRule absoluteValue(int);
+ method public int getAbsoluteValue();
+ method public float getFraction();
+ method public static android.support.v17.leanback.graphics.BoundsRule.ValueRule inheritFromParent(float);
+ method public static android.support.v17.leanback.graphics.BoundsRule.ValueRule inheritFromParentWithOffset(float, int);
+ method public void setAbsoluteValue(int);
+ method public void setFraction(float);
+ }
+
+ public final class ColorFilterCache {
+ method public static android.support.v17.leanback.graphics.ColorFilterCache getColorFilterCache(int);
+ method public android.graphics.ColorFilter getFilterForLevel(float);
+ }
+
+ public final class ColorFilterDimmer {
+ method public void applyFilterToView(android.view.View);
+ method public static android.support.v17.leanback.graphics.ColorFilterDimmer create(android.support.v17.leanback.graphics.ColorFilterCache, float, float);
+ method public static android.support.v17.leanback.graphics.ColorFilterDimmer createDefault(android.content.Context);
+ method public android.graphics.ColorFilter getColorFilter();
+ method public android.graphics.Paint getPaint();
+ method public void setActiveLevel(float);
+ }
+
+ public final class ColorOverlayDimmer {
+ method public int applyToColor(int);
+ method public static android.support.v17.leanback.graphics.ColorOverlayDimmer createColorOverlayDimmer(int, float, float);
+ method public static android.support.v17.leanback.graphics.ColorOverlayDimmer createDefault(android.content.Context);
+ method public void drawColorOverlay(android.graphics.Canvas, android.view.View, boolean);
+ method public int getAlpha();
+ method public float getAlphaFloat();
+ method public android.graphics.Paint getPaint();
+ method public boolean needsDraw();
+ method public void setActiveLevel(float);
+ }
+
+ public class CompositeDrawable extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable.Callback {
+ ctor public CompositeDrawable();
+ method public void addChildDrawable(android.graphics.drawable.Drawable);
+ method public void draw(android.graphics.Canvas);
+ method public android.support.v17.leanback.graphics.CompositeDrawable.ChildDrawable getChildAt(int);
+ method public int getChildCount();
+ method public android.graphics.drawable.Drawable getDrawable(int);
+ method public int getOpacity();
+ method public void invalidateDrawable(android.graphics.drawable.Drawable);
+ method public void removeChild(int);
+ method public void removeDrawable(android.graphics.drawable.Drawable);
+ method public void scheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable, long);
+ method public void setAlpha(int);
+ method public void setChildDrawableAt(int, android.graphics.drawable.Drawable);
+ method public void setColorFilter(android.graphics.ColorFilter);
+ method public void unscheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable);
+ }
+
+ public static final class CompositeDrawable.ChildDrawable {
+ ctor public CompositeDrawable.ChildDrawable(android.graphics.drawable.Drawable, android.support.v17.leanback.graphics.CompositeDrawable);
+ method public android.support.v17.leanback.graphics.BoundsRule getBoundsRule();
+ method public android.graphics.drawable.Drawable getDrawable();
+ method public void recomputeBounds();
+ field public static final android.util.Property<android.support.v17.leanback.graphics.CompositeDrawable.ChildDrawable, java.lang.Integer> BOTTOM_ABSOLUTE;
+ field public static final android.util.Property<android.support.v17.leanback.graphics.CompositeDrawable.ChildDrawable, java.lang.Float> BOTTOM_FRACTION;
+ field public static final android.util.Property<android.support.v17.leanback.graphics.CompositeDrawable.ChildDrawable, java.lang.Integer> LEFT_ABSOLUTE;
+ field public static final android.util.Property<android.support.v17.leanback.graphics.CompositeDrawable.ChildDrawable, java.lang.Float> LEFT_FRACTION;
+ field public static final android.util.Property<android.support.v17.leanback.graphics.CompositeDrawable.ChildDrawable, java.lang.Integer> RIGHT_ABSOLUTE;
+ field public static final android.util.Property<android.support.v17.leanback.graphics.CompositeDrawable.ChildDrawable, java.lang.Float> RIGHT_FRACTION;
+ field public static final android.util.Property<android.support.v17.leanback.graphics.CompositeDrawable.ChildDrawable, java.lang.Integer> TOP_ABSOLUTE;
+ field public static final android.util.Property<android.support.v17.leanback.graphics.CompositeDrawable.ChildDrawable, java.lang.Float> TOP_FRACTION;
+ }
+
+ public class FitWidthBitmapDrawable extends android.graphics.drawable.Drawable {
+ ctor public FitWidthBitmapDrawable();
+ method public void draw(android.graphics.Canvas);
+ method public android.graphics.Bitmap getBitmap();
+ method public int getOpacity();
+ method public android.graphics.Rect getSource();
+ method public int getVerticalOffset();
+ method public void setAlpha(int);
+ method public void setBitmap(android.graphics.Bitmap);
+ method public void setColorFilter(android.graphics.ColorFilter);
+ method public void setSource(android.graphics.Rect);
+ method public void setVerticalOffset(int);
+ field public static final android.util.Property<android.support.v17.leanback.graphics.FitWidthBitmapDrawable, java.lang.Integer> PROPERTY_VERTICAL_OFFSET;
+ }
+
+}
+
+package android.support.v17.leanback.media {
+
+ public abstract class MediaControllerGlue extends android.support.v17.leanback.media.PlaybackControlGlue {
+ ctor public MediaControllerGlue(android.content.Context, int[], int[]);
+ method public void attachToMediaController(android.support.v4.media.session.MediaControllerCompat);
+ method public void detach();
+ method public int getCurrentPosition();
+ method public int getCurrentSpeedId();
+ method public android.graphics.drawable.Drawable getMediaArt();
+ method public final android.support.v4.media.session.MediaControllerCompat getMediaController();
+ method public int getMediaDuration();
+ method public java.lang.CharSequence getMediaSubtitle();
+ method public java.lang.CharSequence getMediaTitle();
+ method public long getSupportedActions();
+ method public boolean hasValidMedia();
+ method public boolean isMediaPlaying();
+ }
+
+ public class MediaPlayerAdapter extends android.support.v17.leanback.media.PlayerAdapter {
+ ctor public MediaPlayerAdapter(android.content.Context);
+ method protected boolean onError(int, int);
+ method protected boolean onInfo(int, int);
+ method protected void onSeekComplete();
+ method public void pause();
+ method public void play();
+ method public void release();
+ method public void reset();
+ method public boolean setDataSource(android.net.Uri);
+ }
+
+ public class PlaybackBannerControlGlue<T extends android.support.v17.leanback.media.PlayerAdapter> extends android.support.v17.leanback.media.PlaybackBaseControlGlue {
+ ctor public PlaybackBannerControlGlue(android.content.Context, int[], T);
+ ctor public PlaybackBannerControlGlue(android.content.Context, int[], int[], T);
+ method public int[] getFastForwardSpeeds();
+ method public int[] getRewindSpeeds();
+ method public long getSupportedActions();
+ method public void onActionClicked(android.support.v17.leanback.widget.Action);
+ method protected android.support.v17.leanback.widget.PlaybackRowPresenter onCreateRowPresenter();
+ method public boolean onKey(android.view.View, int, android.view.KeyEvent);
+ field public static final int ACTION_CUSTOM_LEFT_FIRST = 1; // 0x1
+ field public static final int ACTION_CUSTOM_RIGHT_FIRST = 4096; // 0x1000
+ field public static final int ACTION_FAST_FORWARD = 128; // 0x80
+ field public static final int ACTION_PLAY_PAUSE = 64; // 0x40
+ field public static final int ACTION_REWIND = 32; // 0x20
+ field public static final int ACTION_SKIP_TO_NEXT = 256; // 0x100
+ field public static final int ACTION_SKIP_TO_PREVIOUS = 16; // 0x10
+ field public static final int PLAYBACK_SPEED_FAST_L0 = 10; // 0xa
+ field public static final int PLAYBACK_SPEED_FAST_L1 = 11; // 0xb
+ field public static final int PLAYBACK_SPEED_FAST_L2 = 12; // 0xc
+ field public static final int PLAYBACK_SPEED_FAST_L3 = 13; // 0xd
+ field public static final int PLAYBACK_SPEED_FAST_L4 = 14; // 0xe
+ field public static final int PLAYBACK_SPEED_INVALID = -1; // 0xffffffff
+ field public static final int PLAYBACK_SPEED_NORMAL = 1; // 0x1
+ field public static final int PLAYBACK_SPEED_PAUSED = 0; // 0x0
+ }
+
+ public abstract class PlaybackBaseControlGlue<T extends android.support.v17.leanback.media.PlayerAdapter> extends android.support.v17.leanback.media.PlaybackGlue implements android.support.v17.leanback.widget.OnActionClickedListener android.view.View.OnKeyListener {
+ ctor public PlaybackBaseControlGlue(android.content.Context, T);
+ method public android.graphics.drawable.Drawable getArt();
+ method public final long getBufferedPosition();
+ method public android.support.v17.leanback.widget.PlaybackControlsRow getControlsRow();
+ method public long getCurrentPosition();
+ method public final long getDuration();
+ method public android.support.v17.leanback.widget.PlaybackRowPresenter getPlaybackRowPresenter();
+ method public final T getPlayerAdapter();
+ method public java.lang.CharSequence getSubtitle();
+ method public java.lang.CharSequence getTitle();
+ method public boolean isControlsOverlayAutoHideEnabled();
+ method public final boolean isPlaying();
+ method public final boolean isPrepared();
+ method protected static void notifyItemChanged(android.support.v17.leanback.widget.ArrayObjectAdapter, java.lang.Object);
+ method public abstract void onActionClicked(android.support.v17.leanback.widget.Action);
+ method protected void onCreatePrimaryActions(android.support.v17.leanback.widget.ArrayObjectAdapter);
+ method protected abstract android.support.v17.leanback.widget.PlaybackRowPresenter onCreateRowPresenter();
+ method protected void onCreateSecondaryActions(android.support.v17.leanback.widget.ArrayObjectAdapter);
+ method public abstract boolean onKey(android.view.View, int, android.view.KeyEvent);
+ method protected void onPlayCompleted();
+ method protected void onPlayStateChanged();
+ method protected void onPreparedStateChanged();
+ method public final void seekTo(long);
+ method public void setArt(android.graphics.drawable.Drawable);
+ method public void setControlsOverlayAutoHideEnabled(boolean);
+ method public void setControlsRow(android.support.v17.leanback.widget.PlaybackControlsRow);
+ method public void setPlaybackRowPresenter(android.support.v17.leanback.widget.PlaybackRowPresenter);
+ method public void setSubtitle(java.lang.CharSequence);
+ method public void setTitle(java.lang.CharSequence);
+ }
+
+ public abstract class PlaybackControlGlue extends android.support.v17.leanback.media.PlaybackGlue implements android.support.v17.leanback.widget.OnActionClickedListener android.view.View.OnKeyListener {
+ ctor public PlaybackControlGlue(android.content.Context, int[]);
+ ctor public PlaybackControlGlue(android.content.Context, int[], int[]);
+ method public void enableProgressUpdating(boolean);
+ method public android.support.v17.leanback.widget.PlaybackControlsRow getControlsRow();
+ method public deprecated android.support.v17.leanback.widget.PlaybackControlsRowPresenter getControlsRowPresenter();
+ method public abstract int getCurrentPosition();
+ method public abstract int getCurrentSpeedId();
+ method public int[] getFastForwardSpeeds();
+ method public abstract android.graphics.drawable.Drawable getMediaArt();
+ method public abstract int getMediaDuration();
+ method public abstract java.lang.CharSequence getMediaSubtitle();
+ method public abstract java.lang.CharSequence getMediaTitle();
+ method public android.support.v17.leanback.widget.PlaybackRowPresenter getPlaybackRowPresenter();
+ method public int[] getRewindSpeeds();
+ method public abstract long getSupportedActions();
+ method public int getUpdatePeriod();
+ method public abstract boolean hasValidMedia();
+ method public boolean isFadingEnabled();
+ method public abstract boolean isMediaPlaying();
+ method public void onActionClicked(android.support.v17.leanback.widget.Action);
+ method protected void onCreateControlsRowAndPresenter();
+ method protected void onCreatePrimaryActions(android.support.v17.leanback.widget.SparseArrayObjectAdapter);
+ method protected void onCreateSecondaryActions(android.support.v17.leanback.widget.ArrayObjectAdapter);
+ method public boolean onKey(android.view.View, int, android.view.KeyEvent);
+ method protected void onMetadataChanged();
+ method protected void onStateChanged();
+ method public void play(int);
+ method public final void play();
+ method public void setControlsRow(android.support.v17.leanback.widget.PlaybackControlsRow);
+ method public deprecated void setControlsRowPresenter(android.support.v17.leanback.widget.PlaybackControlsRowPresenter);
+ method public void setFadingEnabled(boolean);
+ method public void setPlaybackRowPresenter(android.support.v17.leanback.widget.PlaybackRowPresenter);
+ method public void updateProgress();
+ field public static final int ACTION_CUSTOM_LEFT_FIRST = 1; // 0x1
+ field public static final int ACTION_CUSTOM_RIGHT_FIRST = 4096; // 0x1000
+ field public static final int ACTION_FAST_FORWARD = 128; // 0x80
+ field public static final int ACTION_PLAY_PAUSE = 64; // 0x40
+ field public static final int ACTION_REWIND = 32; // 0x20
+ field public static final int ACTION_SKIP_TO_NEXT = 256; // 0x100
+ field public static final int ACTION_SKIP_TO_PREVIOUS = 16; // 0x10
+ field public static final int PLAYBACK_SPEED_FAST_L0 = 10; // 0xa
+ field public static final int PLAYBACK_SPEED_FAST_L1 = 11; // 0xb
+ field public static final int PLAYBACK_SPEED_FAST_L2 = 12; // 0xc
+ field public static final int PLAYBACK_SPEED_FAST_L3 = 13; // 0xd
+ field public static final int PLAYBACK_SPEED_FAST_L4 = 14; // 0xe
+ field public static final int PLAYBACK_SPEED_INVALID = -1; // 0xffffffff
+ field public static final int PLAYBACK_SPEED_NORMAL = 1; // 0x1
+ field public static final int PLAYBACK_SPEED_PAUSED = 0; // 0x0
+ }
+
+ public abstract class PlaybackGlue {
+ ctor public PlaybackGlue(android.content.Context);
+ method public void addPlayerCallback(android.support.v17.leanback.media.PlaybackGlue.PlayerCallback);
+ method public android.content.Context getContext();
+ method public android.support.v17.leanback.media.PlaybackGlueHost getHost();
+ method protected java.util.List<android.support.v17.leanback.media.PlaybackGlue.PlayerCallback> getPlayerCallbacks();
+ method public boolean isPlaying();
+ method public boolean isPrepared();
+ method public deprecated boolean isReadyForPlayback();
+ method public void next();
+ method protected void onAttachedToHost(android.support.v17.leanback.media.PlaybackGlueHost);
+ method protected void onDetachedFromHost();
+ method protected void onHostPause();
+ method protected void onHostResume();
+ method protected void onHostStart();
+ method protected void onHostStop();
+ method public void pause();
+ method public void play();
+ method public void previous();
+ method public void removePlayerCallback(android.support.v17.leanback.media.PlaybackGlue.PlayerCallback);
+ method public final void setHost(android.support.v17.leanback.media.PlaybackGlueHost);
+ method public deprecated void setPlayerCallback(android.support.v17.leanback.media.PlaybackGlue.PlayerCallback);
+ }
+
+ public static abstract class PlaybackGlue.PlayerCallback {
+ ctor public PlaybackGlue.PlayerCallback();
+ method public void onPlayCompleted(android.support.v17.leanback.media.PlaybackGlue);
+ method public void onPlayStateChanged(android.support.v17.leanback.media.PlaybackGlue);
+ method public void onPreparedStateChanged(android.support.v17.leanback.media.PlaybackGlue);
+ method public deprecated void onReadyForPlayback();
+ }
+
+ public abstract class PlaybackGlueHost {
+ ctor public PlaybackGlueHost();
+ method public deprecated void fadeOut();
+ method public android.support.v17.leanback.media.PlaybackGlueHost.PlayerCallback getPlayerCallback();
+ method public void hideControlsOverlay(boolean);
+ method public boolean isControlsOverlayAutoHideEnabled();
+ method public boolean isControlsOverlayVisible();
+ method public void notifyPlaybackRowChanged();
+ method public void setControlsOverlayAutoHideEnabled(boolean);
+ method public deprecated void setFadingEnabled(boolean);
+ method public void setHostCallback(android.support.v17.leanback.media.PlaybackGlueHost.HostCallback);
+ method public void setOnActionClickedListener(android.support.v17.leanback.widget.OnActionClickedListener);
+ method public void setOnKeyInterceptListener(android.view.View.OnKeyListener);
+ method public void setPlaybackRow(android.support.v17.leanback.widget.Row);
+ method public void setPlaybackRowPresenter(android.support.v17.leanback.widget.PlaybackRowPresenter);
+ method public void showControlsOverlay(boolean);
+ }
+
+ public static abstract class PlaybackGlueHost.HostCallback {
+ ctor public PlaybackGlueHost.HostCallback();
+ method public void onHostDestroy();
+ method public void onHostPause();
+ method public void onHostResume();
+ method public void onHostStart();
+ method public void onHostStop();
+ }
+
+ public static class PlaybackGlueHost.PlayerCallback {
+ ctor public PlaybackGlueHost.PlayerCallback();
+ method public void onBufferingStateChanged(boolean);
+ method public void onError(int, java.lang.CharSequence);
+ method public void onVideoSizeChanged(int, int);
+ }
+
+ public class PlaybackTransportControlGlue<T extends android.support.v17.leanback.media.PlayerAdapter> extends android.support.v17.leanback.media.PlaybackBaseControlGlue {
+ ctor public PlaybackTransportControlGlue(android.content.Context, T);
+ method public final android.support.v17.leanback.widget.PlaybackSeekDataProvider getSeekProvider();
+ method public final boolean isSeekEnabled();
+ method public void onActionClicked(android.support.v17.leanback.widget.Action);
+ method protected android.support.v17.leanback.widget.PlaybackRowPresenter onCreateRowPresenter();
+ method public boolean onKey(android.view.View, int, android.view.KeyEvent);
+ method public final void setSeekEnabled(boolean);
+ method public final void setSeekProvider(android.support.v17.leanback.widget.PlaybackSeekDataProvider);
+ }
+
+ public abstract class PlayerAdapter {
+ ctor public PlayerAdapter();
+ method public long getBufferedPosition();
+ method public final android.support.v17.leanback.media.PlayerAdapter.Callback getCallback();
+ method public long getCurrentPosition();
+ method public long getDuration();
+ method public boolean isPlaying();
+ method public boolean isPrepared();
+ method public void onAttachedToHost(android.support.v17.leanback.media.PlaybackGlueHost);
+ method public void onDetachedFromHost();
+ method public abstract void pause();
+ method public abstract void play();
+ method public void seekTo(long);
+ method public final void setCallback(android.support.v17.leanback.media.PlayerAdapter.Callback);
+ method public void setProgressUpdatingEnabled(boolean);
+ }
+
+ public static class PlayerAdapter.Callback {
+ ctor public PlayerAdapter.Callback();
+ method public void onBufferedPositionChanged(android.support.v17.leanback.media.PlayerAdapter);
+ method public void onBufferingStateChanged(android.support.v17.leanback.media.PlayerAdapter, boolean);
+ method public void onCurrentPositionChanged(android.support.v17.leanback.media.PlayerAdapter);
+ method public void onDurationChanged(android.support.v17.leanback.media.PlayerAdapter);
+ method public void onError(android.support.v17.leanback.media.PlayerAdapter, int, java.lang.String);
+ method public void onPlayCompleted(android.support.v17.leanback.media.PlayerAdapter);
+ method public void onPlayStateChanged(android.support.v17.leanback.media.PlayerAdapter);
+ method public void onPreparedStateChanged(android.support.v17.leanback.media.PlayerAdapter);
+ method public void onVideoSizeChanged(android.support.v17.leanback.media.PlayerAdapter, int, int);
+ }
+
+ public abstract interface SurfaceHolderGlueHost {
+ method public abstract void setSurfaceHolderCallback(android.view.SurfaceHolder.Callback);
+ }
+
+}
+
+package android.support.v17.leanback.system {
+
+ public class Settings {
+ method public boolean getBoolean(java.lang.String);
+ method public static android.support.v17.leanback.system.Settings getInstance(android.content.Context);
+ method public void setBoolean(java.lang.String, boolean);
+ field public static final java.lang.String PREFER_STATIC_SHADOWS = "PREFER_STATIC_SHADOWS";
+ }
+
+}
+
+package android.support.v17.leanback.widget {
+
+ public abstract class AbstractDetailsDescriptionPresenter extends android.support.v17.leanback.widget.Presenter {
+ ctor public AbstractDetailsDescriptionPresenter();
+ method protected abstract void onBindDescription(android.support.v17.leanback.widget.AbstractDetailsDescriptionPresenter.ViewHolder, java.lang.Object);
+ method public final void onBindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder, java.lang.Object);
+ method public final android.support.v17.leanback.widget.AbstractDetailsDescriptionPresenter.ViewHolder onCreateViewHolder(android.view.ViewGroup);
+ method public void onUnbindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder);
+ }
+
+ public static class AbstractDetailsDescriptionPresenter.ViewHolder extends android.support.v17.leanback.widget.Presenter.ViewHolder {
+ ctor public AbstractDetailsDescriptionPresenter.ViewHolder(android.view.View);
+ method public android.widget.TextView getBody();
+ method public android.widget.TextView getSubtitle();
+ method public android.widget.TextView getTitle();
+ }
+
+ public abstract class AbstractMediaItemPresenter extends android.support.v17.leanback.widget.RowPresenter {
+ ctor public AbstractMediaItemPresenter();
+ ctor public AbstractMediaItemPresenter(int);
+ method protected android.support.v17.leanback.widget.RowPresenter.ViewHolder createRowViewHolder(android.view.ViewGroup);
+ method public android.support.v17.leanback.widget.Presenter getActionPresenter();
+ method protected int getMediaPlayState(java.lang.Object);
+ method public int getThemeId();
+ method public boolean hasMediaRowSeparator();
+ method protected abstract void onBindMediaDetails(android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder, java.lang.Object);
+ method public void onBindMediaPlayState(android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder);
+ method protected void onBindRowActions(android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder);
+ method protected void onUnbindMediaDetails(android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder);
+ method public void onUnbindMediaPlayState(android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder);
+ method public void setActionPresenter(android.support.v17.leanback.widget.Presenter);
+ method public void setBackgroundColor(int);
+ method public void setHasMediaRowSeparator(boolean);
+ method public void setThemeId(int);
+ field public static final int PLAY_STATE_INITIAL = 0; // 0x0
+ field public static final int PLAY_STATE_PAUSED = 1; // 0x1
+ field public static final int PLAY_STATE_PLAYING = 2; // 0x2
+ }
+
+ public static class AbstractMediaItemPresenter.ViewHolder extends android.support.v17.leanback.widget.RowPresenter.ViewHolder {
+ ctor public AbstractMediaItemPresenter.ViewHolder(android.view.View);
+ method public android.view.ViewGroup getMediaItemActionsContainer();
+ method public android.view.View getMediaItemDetailsView();
+ method public android.widget.TextView getMediaItemDurationView();
+ method public android.widget.TextView getMediaItemNameView();
+ method public android.widget.TextView getMediaItemNumberView();
+ method public android.widget.ViewFlipper getMediaItemNumberViewFlipper();
+ method public android.view.View getMediaItemPausedView();
+ method public android.view.View getMediaItemPlayingView();
+ method public android.support.v17.leanback.widget.MultiActionsProvider.MultiAction[] getMediaItemRowActions();
+ method public android.view.View getMediaItemRowSeparator();
+ method public android.view.View getSelectorView();
+ method public void notifyActionChanged(android.support.v17.leanback.widget.MultiActionsProvider.MultiAction);
+ method public void notifyDetailsChanged();
+ method public void notifyPlayStateChanged();
+ method public void onBindRowActions();
+ method public void setSelectedMediaItemNumberView(int);
+ }
+
+ public abstract class AbstractMediaListHeaderPresenter extends android.support.v17.leanback.widget.RowPresenter {
+ ctor public AbstractMediaListHeaderPresenter(android.content.Context, int);
+ ctor public AbstractMediaListHeaderPresenter();
+ method protected android.support.v17.leanback.widget.RowPresenter.ViewHolder createRowViewHolder(android.view.ViewGroup);
+ method protected abstract void onBindMediaListHeaderViewHolder(android.support.v17.leanback.widget.AbstractMediaListHeaderPresenter.ViewHolder, java.lang.Object);
+ method public void setBackgroundColor(int);
+ }
+
+ public static class AbstractMediaListHeaderPresenter.ViewHolder extends android.support.v17.leanback.widget.RowPresenter.ViewHolder {
+ ctor public AbstractMediaListHeaderPresenter.ViewHolder(android.view.View);
+ method public android.widget.TextView getHeaderView();
+ }
+
+ public class Action {
+ ctor public Action(long);
+ ctor public Action(long, java.lang.CharSequence);
+ ctor public Action(long, java.lang.CharSequence, java.lang.CharSequence);
+ ctor public Action(long, java.lang.CharSequence, java.lang.CharSequence, android.graphics.drawable.Drawable);
+ method public final void addKeyCode(int);
+ method public final android.graphics.drawable.Drawable getIcon();
+ method public final long getId();
+ method public final java.lang.CharSequence getLabel1();
+ method public final java.lang.CharSequence getLabel2();
+ method public final void removeKeyCode(int);
+ method public final boolean respondsToKeyCode(int);
+ method public final void setIcon(android.graphics.drawable.Drawable);
+ method public final void setId(long);
+ method public final void setLabel1(java.lang.CharSequence);
+ method public final void setLabel2(java.lang.CharSequence);
+ field public static final long NO_ID = -1L; // 0xffffffffffffffffL
+ }
+
+ public class ArrayObjectAdapter extends android.support.v17.leanback.widget.ObjectAdapter {
+ ctor public ArrayObjectAdapter(android.support.v17.leanback.widget.PresenterSelector);
+ ctor public ArrayObjectAdapter(android.support.v17.leanback.widget.Presenter);
+ ctor public ArrayObjectAdapter();
+ method public void add(java.lang.Object);
+ method public void add(int, java.lang.Object);
+ method public void addAll(int, java.util.Collection);
+ method public void clear();
+ method public java.lang.Object get(int);
+ method public int indexOf(java.lang.Object);
+ method public void notifyArrayItemRangeChanged(int, int);
+ method public boolean remove(java.lang.Object);
+ method public int removeItems(int, int);
+ method public void replace(int, java.lang.Object);
+ method public int size();
+ method public <E> java.util.List<E> unmodifiableList();
+ }
+
+ public class BaseCardView extends android.widget.FrameLayout {
+ ctor public BaseCardView(android.content.Context);
+ ctor public BaseCardView(android.content.Context, android.util.AttributeSet);
+ ctor public BaseCardView(android.content.Context, android.util.AttributeSet, int);
+ method protected android.support.v17.leanback.widget.BaseCardView.LayoutParams generateDefaultLayoutParams();
+ method public android.support.v17.leanback.widget.BaseCardView.LayoutParams generateLayoutParams(android.util.AttributeSet);
+ method protected android.support.v17.leanback.widget.BaseCardView.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
+ method public int getCardType();
+ method public deprecated int getExtraVisibility();
+ method public int getInfoVisibility();
+ method public boolean isSelectedAnimationDelayed();
+ method public void setCardType(int);
+ method public deprecated void setExtraVisibility(int);
+ method public void setInfoVisibility(int);
+ method public void setSelectedAnimationDelayed(boolean);
+ field public static final int CARD_REGION_VISIBLE_ACTIVATED = 1; // 0x1
+ field public static final int CARD_REGION_VISIBLE_ALWAYS = 0; // 0x0
+ field public static final int CARD_REGION_VISIBLE_SELECTED = 2; // 0x2
+ field public static final int CARD_TYPE_INFO_OVER = 1; // 0x1
+ field public static final int CARD_TYPE_INFO_UNDER = 2; // 0x2
+ field public static final int CARD_TYPE_INFO_UNDER_WITH_EXTRA = 3; // 0x3
+ field public static final int CARD_TYPE_MAIN_ONLY = 0; // 0x0
+ }
+
+ public static class BaseCardView.LayoutParams extends android.widget.FrameLayout.LayoutParams {
+ ctor public BaseCardView.LayoutParams(android.content.Context, android.util.AttributeSet);
+ ctor public BaseCardView.LayoutParams(int, int);
+ ctor public BaseCardView.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public BaseCardView.LayoutParams(android.support.v17.leanback.widget.BaseCardView.LayoutParams);
+ field public static final int VIEW_TYPE_EXTRA = 2; // 0x2
+ field public static final int VIEW_TYPE_INFO = 1; // 0x1
+ field public static final int VIEW_TYPE_MAIN = 0; // 0x0
+ field public int viewType;
+ }
+
+ public abstract class BaseGridView extends android.support.v7.widget.RecyclerView {
+ method public void addOnChildViewHolderSelectedListener(android.support.v17.leanback.widget.OnChildViewHolderSelectedListener);
+ method public void animateIn();
+ method public void animateOut();
+ method public int getChildDrawingOrder(int, int);
+ method public deprecated int getHorizontalMargin();
+ method public int getHorizontalSpacing();
+ method public int getInitialPrefetchItemCount();
+ method public int getItemAlignmentOffset();
+ method public float getItemAlignmentOffsetPercent();
+ method public int getItemAlignmentViewId();
+ method public android.support.v17.leanback.widget.BaseGridView.OnUnhandledKeyListener getOnUnhandledKeyListener();
+ method public final int getSaveChildrenLimitNumber();
+ method public final int getSaveChildrenPolicy();
+ method public int getSelectedPosition();
+ method public deprecated int getVerticalMargin();
+ method public int getVerticalSpacing();
+ method public void getViewSelectedOffsets(android.view.View, int[]);
+ method public int getWindowAlignment();
+ method public int getWindowAlignmentOffset();
+ method public float getWindowAlignmentOffsetPercent();
+ method public boolean hasPreviousViewInSameRow(int);
+ method public boolean isChildLayoutAnimated();
+ method public boolean isFocusDrawingOrderEnabled();
+ method public final boolean isFocusSearchDisabled();
+ method public boolean isItemAlignmentOffsetWithPadding();
+ method public boolean isScrollEnabled();
+ method public boolean isWindowAlignmentPreferKeyLineOverHighEdge();
+ method public boolean isWindowAlignmentPreferKeyLineOverLowEdge();
+ method public boolean onRequestFocusInDescendants(int, android.graphics.Rect);
+ method public void removeOnChildViewHolderSelectedListener(android.support.v17.leanback.widget.OnChildViewHolderSelectedListener);
+ method public void setAnimateChildLayout(boolean);
+ method public void setChildrenVisibility(int);
+ method public void setFocusDrawingOrderEnabled(boolean);
+ method public final void setFocusSearchDisabled(boolean);
+ method public void setGravity(int);
+ method public void setHasOverlappingRendering(boolean);
+ method public deprecated void setHorizontalMargin(int);
+ method public void setHorizontalSpacing(int);
+ method public void setInitialPrefetchItemCount(int);
+ method public void setItemAlignmentOffset(int);
+ method public void setItemAlignmentOffsetPercent(float);
+ method public void setItemAlignmentOffsetWithPadding(boolean);
+ method public void setItemAlignmentViewId(int);
+ method public deprecated void setItemMargin(int);
+ method public void setItemSpacing(int);
+ method public void setLayoutEnabled(boolean);
+ method public void setOnChildLaidOutListener(android.support.v17.leanback.widget.OnChildLaidOutListener);
+ method public void setOnChildSelectedListener(android.support.v17.leanback.widget.OnChildSelectedListener);
+ method public void setOnChildViewHolderSelectedListener(android.support.v17.leanback.widget.OnChildViewHolderSelectedListener);
+ method public void setOnKeyInterceptListener(android.support.v17.leanback.widget.BaseGridView.OnKeyInterceptListener);
+ method public void setOnMotionInterceptListener(android.support.v17.leanback.widget.BaseGridView.OnMotionInterceptListener);
+ method public void setOnTouchInterceptListener(android.support.v17.leanback.widget.BaseGridView.OnTouchInterceptListener);
+ method public void setOnUnhandledKeyListener(android.support.v17.leanback.widget.BaseGridView.OnUnhandledKeyListener);
+ method public void setPruneChild(boolean);
+ method public final void setSaveChildrenLimitNumber(int);
+ method public final void setSaveChildrenPolicy(int);
+ method public void setScrollEnabled(boolean);
+ method public void setSelectedPosition(int);
+ method public void setSelectedPosition(int, int);
+ method public void setSelectedPosition(int, android.support.v17.leanback.widget.ViewHolderTask);
+ method public void setSelectedPositionSmooth(int);
+ method public void setSelectedPositionSmooth(int, android.support.v17.leanback.widget.ViewHolderTask);
+ method public deprecated void setVerticalMargin(int);
+ method public void setVerticalSpacing(int);
+ method public void setWindowAlignment(int);
+ method public void setWindowAlignmentOffset(int);
+ method public void setWindowAlignmentOffsetPercent(float);
+ method public void setWindowAlignmentPreferKeyLineOverHighEdge(boolean);
+ method public void setWindowAlignmentPreferKeyLineOverLowEdge(boolean);
+ field public static final float ITEM_ALIGN_OFFSET_PERCENT_DISABLED = -1.0f;
+ field public static final int SAVE_ALL_CHILD = 3; // 0x3
+ field public static final int SAVE_LIMITED_CHILD = 2; // 0x2
+ field public static final int SAVE_NO_CHILD = 0; // 0x0
+ field public static final int SAVE_ON_SCREEN_CHILD = 1; // 0x1
+ field public static final int WINDOW_ALIGN_BOTH_EDGE = 3; // 0x3
+ field public static final int WINDOW_ALIGN_HIGH_EDGE = 2; // 0x2
+ field public static final int WINDOW_ALIGN_LOW_EDGE = 1; // 0x1
+ field public static final int WINDOW_ALIGN_NO_EDGE = 0; // 0x0
+ field public static final float WINDOW_ALIGN_OFFSET_PERCENT_DISABLED = -1.0f;
+ }
+
+ public static abstract interface BaseGridView.OnKeyInterceptListener {
+ method public abstract boolean onInterceptKeyEvent(android.view.KeyEvent);
+ }
+
+ public static abstract interface BaseGridView.OnMotionInterceptListener {
+ method public abstract boolean onInterceptMotionEvent(android.view.MotionEvent);
+ }
+
+ public static abstract interface BaseGridView.OnTouchInterceptListener {
+ method public abstract boolean onInterceptTouchEvent(android.view.MotionEvent);
+ }
+
+ public static abstract interface BaseGridView.OnUnhandledKeyListener {
+ method public abstract boolean onUnhandledKey(android.view.KeyEvent);
+ }
+
+ public abstract interface BaseOnItemViewClickedListener<T> {
+ method public abstract void onItemClicked(android.support.v17.leanback.widget.Presenter.ViewHolder, java.lang.Object, android.support.v17.leanback.widget.RowPresenter.ViewHolder, T);
+ }
+
+ public abstract interface BaseOnItemViewSelectedListener<T> {
+ method public abstract void onItemSelected(android.support.v17.leanback.widget.Presenter.ViewHolder, java.lang.Object, android.support.v17.leanback.widget.RowPresenter.ViewHolder, T);
+ }
+
+ public class BrowseFrameLayout extends android.widget.FrameLayout {
+ ctor public BrowseFrameLayout(android.content.Context);
+ ctor public BrowseFrameLayout(android.content.Context, android.util.AttributeSet);
+ ctor public BrowseFrameLayout(android.content.Context, android.util.AttributeSet, int);
+ method public android.support.v17.leanback.widget.BrowseFrameLayout.OnChildFocusListener getOnChildFocusListener();
+ method public android.support.v17.leanback.widget.BrowseFrameLayout.OnFocusSearchListener getOnFocusSearchListener();
+ method public void setOnChildFocusListener(android.support.v17.leanback.widget.BrowseFrameLayout.OnChildFocusListener);
+ method public void setOnDispatchKeyListener(android.view.View.OnKeyListener);
+ method public void setOnFocusSearchListener(android.support.v17.leanback.widget.BrowseFrameLayout.OnFocusSearchListener);
+ }
+
+ public static abstract interface BrowseFrameLayout.OnChildFocusListener {
+ method public abstract void onRequestChildFocus(android.view.View, android.view.View);
+ method public abstract boolean onRequestFocusInDescendants(int, android.graphics.Rect);
+ }
+
+ public static abstract interface BrowseFrameLayout.OnFocusSearchListener {
+ method public abstract android.view.View onFocusSearch(android.view.View, int);
+ }
+
+ public final class ClassPresenterSelector extends android.support.v17.leanback.widget.PresenterSelector {
+ ctor public ClassPresenterSelector();
+ method public android.support.v17.leanback.widget.ClassPresenterSelector addClassPresenter(java.lang.Class<?>, android.support.v17.leanback.widget.Presenter);
+ method public android.support.v17.leanback.widget.ClassPresenterSelector addClassPresenterSelector(java.lang.Class<?>, android.support.v17.leanback.widget.PresenterSelector);
+ method public android.support.v17.leanback.widget.Presenter getPresenter(java.lang.Object);
+ }
+
+ public class ControlButtonPresenterSelector extends android.support.v17.leanback.widget.PresenterSelector {
+ ctor public ControlButtonPresenterSelector();
+ method public android.support.v17.leanback.widget.Presenter getPresenter(java.lang.Object);
+ method public android.support.v17.leanback.widget.Presenter getPrimaryPresenter();
+ method public android.support.v17.leanback.widget.Presenter getSecondaryPresenter();
+ }
+
+ public class CursorObjectAdapter extends android.support.v17.leanback.widget.ObjectAdapter {
+ ctor public CursorObjectAdapter(android.support.v17.leanback.widget.PresenterSelector);
+ ctor public CursorObjectAdapter(android.support.v17.leanback.widget.Presenter);
+ ctor public CursorObjectAdapter();
+ method public void changeCursor(android.database.Cursor);
+ method public void close();
+ method public java.lang.Object get(int);
+ method public final android.database.Cursor getCursor();
+ method public final android.support.v17.leanback.database.CursorMapper getMapper();
+ method protected final void invalidateCache(int);
+ method protected final void invalidateCache(int, int);
+ method public boolean isClosed();
+ method protected void onCursorChanged();
+ method protected void onMapperChanged();
+ method public final void setMapper(android.support.v17.leanback.database.CursorMapper);
+ method public int size();
+ method public android.database.Cursor swapCursor(android.database.Cursor);
+ }
+
+ public class DetailsOverviewLogoPresenter extends android.support.v17.leanback.widget.Presenter {
+ ctor public DetailsOverviewLogoPresenter();
+ method public boolean isBoundToImage(android.support.v17.leanback.widget.DetailsOverviewLogoPresenter.ViewHolder, android.support.v17.leanback.widget.DetailsOverviewRow);
+ method public void onBindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder, java.lang.Object);
+ method public android.view.View onCreateView(android.view.ViewGroup);
+ method public android.support.v17.leanback.widget.Presenter.ViewHolder onCreateViewHolder(android.view.ViewGroup);
+ method public void onUnbindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder);
+ method public void setContext(android.support.v17.leanback.widget.DetailsOverviewLogoPresenter.ViewHolder, android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder, android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter);
+ }
+
+ public static class DetailsOverviewLogoPresenter.ViewHolder extends android.support.v17.leanback.widget.Presenter.ViewHolder {
+ ctor public DetailsOverviewLogoPresenter.ViewHolder(android.view.View);
+ method public android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter getParentPresenter();
+ method public android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder getParentViewHolder();
+ method public boolean isSizeFromDrawableIntrinsic();
+ method public void setSizeFromDrawableIntrinsic(boolean);
+ field protected android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter mParentPresenter;
+ field protected android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder mParentViewHolder;
+ }
+
+ public class DetailsOverviewRow extends android.support.v17.leanback.widget.Row {
+ ctor public DetailsOverviewRow(java.lang.Object);
+ method public final deprecated void addAction(android.support.v17.leanback.widget.Action);
+ method public final deprecated void addAction(int, android.support.v17.leanback.widget.Action);
+ method public android.support.v17.leanback.widget.Action getActionForKeyCode(int);
+ method public final deprecated java.util.List<android.support.v17.leanback.widget.Action> getActions();
+ method public final android.support.v17.leanback.widget.ObjectAdapter getActionsAdapter();
+ method public final android.graphics.drawable.Drawable getImageDrawable();
+ method public final java.lang.Object getItem();
+ method public boolean isImageScaleUpAllowed();
+ method public final deprecated boolean removeAction(android.support.v17.leanback.widget.Action);
+ method public final void setActionsAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public final void setImageBitmap(android.content.Context, android.graphics.Bitmap);
+ method public final void setImageDrawable(android.graphics.drawable.Drawable);
+ method public void setImageScaleUpAllowed(boolean);
+ method public final void setItem(java.lang.Object);
+ }
+
+ public static class DetailsOverviewRow.Listener {
+ ctor public DetailsOverviewRow.Listener();
+ method public void onActionsAdapterChanged(android.support.v17.leanback.widget.DetailsOverviewRow);
+ method public void onImageDrawableChanged(android.support.v17.leanback.widget.DetailsOverviewRow);
+ method public void onItemChanged(android.support.v17.leanback.widget.DetailsOverviewRow);
+ }
+
+ public deprecated class DetailsOverviewRowPresenter extends android.support.v17.leanback.widget.RowPresenter {
+ ctor public DetailsOverviewRowPresenter(android.support.v17.leanback.widget.Presenter);
+ method protected android.support.v17.leanback.widget.RowPresenter.ViewHolder createRowViewHolder(android.view.ViewGroup);
+ method public int getBackgroundColor();
+ method public android.support.v17.leanback.widget.OnActionClickedListener getOnActionClickedListener();
+ method public boolean isStyleLarge();
+ method public final boolean isUsingDefaultSelectEffect();
+ method public void setBackgroundColor(int);
+ method public void setOnActionClickedListener(android.support.v17.leanback.widget.OnActionClickedListener);
+ method public final void setSharedElementEnterTransition(android.app.Activity, java.lang.String, long);
+ method public final void setSharedElementEnterTransition(android.app.Activity, java.lang.String);
+ method public void setStyleLarge(boolean);
+ }
+
+ public final class DetailsOverviewRowPresenter.ViewHolder extends android.support.v17.leanback.widget.RowPresenter.ViewHolder {
+ ctor public DetailsOverviewRowPresenter.ViewHolder(android.view.View, android.support.v17.leanback.widget.Presenter);
+ field public final android.support.v17.leanback.widget.Presenter.ViewHolder mDetailsDescriptionViewHolder;
+ }
+
+ public class DetailsParallax extends android.support.v17.leanback.widget.RecyclerViewParallax {
+ ctor public DetailsParallax();
+ method public android.support.v17.leanback.widget.Parallax.IntProperty getOverviewRowBottom();
+ method public android.support.v17.leanback.widget.Parallax.IntProperty getOverviewRowTop();
+ }
+
+ public class DividerPresenter extends android.support.v17.leanback.widget.Presenter {
+ ctor public DividerPresenter();
+ method public void onBindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder, java.lang.Object);
+ method public android.support.v17.leanback.widget.Presenter.ViewHolder onCreateViewHolder(android.view.ViewGroup);
+ method public void onUnbindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder);
+ }
+
+ public class DividerRow extends android.support.v17.leanback.widget.Row {
+ ctor public DividerRow();
+ method public final boolean isRenderedAsRowView();
+ }
+
+ public abstract interface FacetProvider {
+ method public abstract java.lang.Object getFacet(java.lang.Class<?>);
+ }
+
+ public abstract interface FacetProviderAdapter {
+ method public abstract android.support.v17.leanback.widget.FacetProvider getFacetProvider(int);
+ }
+
+ public abstract interface FocusHighlight {
+ field public static final int ZOOM_FACTOR_LARGE = 3; // 0x3
+ field public static final int ZOOM_FACTOR_MEDIUM = 2; // 0x2
+ field public static final int ZOOM_FACTOR_NONE = 0; // 0x0
+ field public static final int ZOOM_FACTOR_SMALL = 1; // 0x1
+ field public static final int ZOOM_FACTOR_XSMALL = 4; // 0x4
+ }
+
+ public class FocusHighlightHelper {
+ ctor public FocusHighlightHelper();
+ method public static void setupBrowseItemFocusHighlight(android.support.v17.leanback.widget.ItemBridgeAdapter, int, boolean);
+ method public static deprecated void setupHeaderItemFocusHighlight(android.support.v17.leanback.widget.VerticalGridView);
+ method public static deprecated void setupHeaderItemFocusHighlight(android.support.v17.leanback.widget.VerticalGridView, boolean);
+ method public static void setupHeaderItemFocusHighlight(android.support.v17.leanback.widget.ItemBridgeAdapter);
+ method public static void setupHeaderItemFocusHighlight(android.support.v17.leanback.widget.ItemBridgeAdapter, boolean);
+ }
+
+ public abstract interface FragmentAnimationProvider {
+ method public abstract void onImeAppearing(java.util.List<android.animation.Animator>);
+ method public abstract void onImeDisappearing(java.util.List<android.animation.Animator>);
+ }
+
+ public class FullWidthDetailsOverviewRowPresenter extends android.support.v17.leanback.widget.RowPresenter {
+ ctor public FullWidthDetailsOverviewRowPresenter(android.support.v17.leanback.widget.Presenter);
+ ctor public FullWidthDetailsOverviewRowPresenter(android.support.v17.leanback.widget.Presenter, android.support.v17.leanback.widget.DetailsOverviewLogoPresenter);
+ method protected android.support.v17.leanback.widget.RowPresenter.ViewHolder createRowViewHolder(android.view.ViewGroup);
+ method public final int getActionsBackgroundColor();
+ method public final int getAlignmentMode();
+ method public final int getBackgroundColor();
+ method public final int getInitialState();
+ method protected int getLayoutResourceId();
+ method public android.support.v17.leanback.widget.OnActionClickedListener getOnActionClickedListener();
+ method public final boolean isParticipatingEntranceTransition();
+ method public final boolean isUsingDefaultSelectEffect();
+ method public final void notifyOnBindLogo(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder);
+ method protected void onLayoutLogo(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder, int, boolean);
+ method protected void onLayoutOverviewFrame(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder, int, boolean);
+ method protected void onStateChanged(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder, int);
+ method public final void setActionsBackgroundColor(int);
+ method public final void setAlignmentMode(int);
+ method public final void setBackgroundColor(int);
+ method public final void setInitialState(int);
+ method public final void setListener(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.Listener);
+ method public void setOnActionClickedListener(android.support.v17.leanback.widget.OnActionClickedListener);
+ method public final void setParticipatingEntranceTransition(boolean);
+ method public final void setState(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder, int);
+ field public static final int ALIGN_MODE_MIDDLE = 1; // 0x1
+ field public static final int ALIGN_MODE_START = 0; // 0x0
+ field public static final int STATE_FULL = 1; // 0x1
+ field public static final int STATE_HALF = 0; // 0x0
+ field public static final int STATE_SMALL = 2; // 0x2
+ field protected int mInitialState;
+ }
+
+ public static abstract class FullWidthDetailsOverviewRowPresenter.Listener {
+ ctor public FullWidthDetailsOverviewRowPresenter.Listener();
+ method public void onBindLogo(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder);
+ }
+
+ public class FullWidthDetailsOverviewRowPresenter.ViewHolder extends android.support.v17.leanback.widget.RowPresenter.ViewHolder {
+ ctor public FullWidthDetailsOverviewRowPresenter.ViewHolder(android.view.View, android.support.v17.leanback.widget.Presenter, android.support.v17.leanback.widget.DetailsOverviewLogoPresenter);
+ method protected android.support.v17.leanback.widget.DetailsOverviewRow.Listener createRowListener();
+ method public final android.view.ViewGroup getActionsRow();
+ method public final android.view.ViewGroup getDetailsDescriptionFrame();
+ method public final android.support.v17.leanback.widget.Presenter.ViewHolder getDetailsDescriptionViewHolder();
+ method public final android.support.v17.leanback.widget.DetailsOverviewLogoPresenter.ViewHolder getLogoViewHolder();
+ method public final android.view.ViewGroup getOverviewView();
+ method public final int getState();
+ field protected final android.support.v17.leanback.widget.DetailsOverviewRow.Listener mRowListener;
+ }
+
+ public class FullWidthDetailsOverviewRowPresenter.ViewHolder.DetailsOverviewRowListener extends android.support.v17.leanback.widget.DetailsOverviewRow.Listener {
+ ctor public FullWidthDetailsOverviewRowPresenter.ViewHolder.DetailsOverviewRowListener();
+ }
+
+ public class FullWidthDetailsOverviewSharedElementHelper extends android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.Listener {
+ ctor public FullWidthDetailsOverviewSharedElementHelper();
+ method public boolean getAutoStartSharedElementTransition();
+ method public void setAutoStartSharedElementTransition(boolean);
+ method public void setSharedElementEnterTransition(android.app.Activity, java.lang.String);
+ method public void setSharedElementEnterTransition(android.app.Activity, java.lang.String, long);
+ method public void startPostponedEnterTransition();
+ }
+
+ public class GuidanceStylist implements android.support.v17.leanback.widget.FragmentAnimationProvider {
+ ctor public GuidanceStylist();
+ method public android.widget.TextView getBreadcrumbView();
+ method public android.widget.TextView getDescriptionView();
+ method public android.widget.ImageView getIconView();
+ method public android.widget.TextView getTitleView();
+ method public android.view.View onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.support.v17.leanback.widget.GuidanceStylist.Guidance);
+ method public void onDestroyView();
+ method public void onImeAppearing(java.util.List<android.animation.Animator>);
+ method public void onImeDisappearing(java.util.List<android.animation.Animator>);
+ method public int onProvideLayoutId();
+ }
+
+ public static class GuidanceStylist.Guidance {
+ ctor public GuidanceStylist.Guidance(java.lang.String, java.lang.String, java.lang.String, android.graphics.drawable.Drawable);
+ method public java.lang.String getBreadcrumb();
+ method public java.lang.String getDescription();
+ method public android.graphics.drawable.Drawable getIconDrawable();
+ method public java.lang.String getTitle();
+ }
+
+ public class GuidedAction extends android.support.v17.leanback.widget.Action {
+ ctor protected GuidedAction();
+ method public int getCheckSetId();
+ method public java.lang.CharSequence getDescription();
+ method public int getDescriptionEditInputType();
+ method public int getDescriptionInputType();
+ method public java.lang.CharSequence getEditDescription();
+ method public int getEditInputType();
+ method public java.lang.CharSequence getEditTitle();
+ method public int getInputType();
+ method public android.content.Intent getIntent();
+ method public java.util.List<android.support.v17.leanback.widget.GuidedAction> getSubActions();
+ method public java.lang.CharSequence getTitle();
+ method public boolean hasEditableActivatorView();
+ method public boolean hasMultilineDescription();
+ method public boolean hasNext();
+ method public boolean hasSubActions();
+ method public boolean hasTextEditable();
+ method public boolean infoOnly();
+ method public final boolean isAutoSaveRestoreEnabled();
+ method public boolean isChecked();
+ method public boolean isDescriptionEditable();
+ method public boolean isEditTitleUsed();
+ method public boolean isEditable();
+ method public boolean isEnabled();
+ method public boolean isFocusable();
+ method public void onRestoreInstanceState(android.os.Bundle, java.lang.String);
+ method public void onSaveInstanceState(android.os.Bundle, java.lang.String);
+ method public void setChecked(boolean);
+ method public void setDescription(java.lang.CharSequence);
+ method public void setEditDescription(java.lang.CharSequence);
+ method public void setEditTitle(java.lang.CharSequence);
+ method public void setEnabled(boolean);
+ method public void setFocusable(boolean);
+ method public void setIntent(android.content.Intent);
+ method public void setSubActions(java.util.List<android.support.v17.leanback.widget.GuidedAction>);
+ method public void setTitle(java.lang.CharSequence);
+ field public static final long ACTION_ID_CANCEL = -5L; // 0xfffffffffffffffbL
+ field public static final long ACTION_ID_CONTINUE = -7L; // 0xfffffffffffffff9L
+ field public static final long ACTION_ID_CURRENT = -3L; // 0xfffffffffffffffdL
+ field public static final long ACTION_ID_FINISH = -6L; // 0xfffffffffffffffaL
+ field public static final long ACTION_ID_NEXT = -2L; // 0xfffffffffffffffeL
+ field public static final long ACTION_ID_NO = -9L; // 0xfffffffffffffff7L
+ field public static final long ACTION_ID_OK = -4L; // 0xfffffffffffffffcL
+ field public static final long ACTION_ID_YES = -8L; // 0xfffffffffffffff8L
+ field public static final int CHECKBOX_CHECK_SET_ID = -1; // 0xffffffff
+ field public static final int DEFAULT_CHECK_SET_ID = 1; // 0x1
+ field public static final int NO_CHECK_SET = 0; // 0x0
+ }
+
+ public static class GuidedAction.Builder extends android.support.v17.leanback.widget.GuidedAction.BuilderBase {
+ ctor public deprecated GuidedAction.Builder();
+ ctor public GuidedAction.Builder(android.content.Context);
+ method public android.support.v17.leanback.widget.GuidedAction build();
+ }
+
+ public static abstract class GuidedAction.BuilderBase<B extends android.support.v17.leanback.widget.GuidedAction.BuilderBase> {
+ ctor public GuidedAction.BuilderBase(android.content.Context);
+ method protected final void applyValues(android.support.v17.leanback.widget.GuidedAction);
+ method public B autoSaveRestoreEnabled(boolean);
+ method public B checkSetId(int);
+ method public B checked(boolean);
+ method public B clickAction(long);
+ method public B description(java.lang.CharSequence);
+ method public B description(int);
+ method public B descriptionEditInputType(int);
+ method public B descriptionEditable(boolean);
+ method public B descriptionInputType(int);
+ method public B editDescription(java.lang.CharSequence);
+ method public B editDescription(int);
+ method public B editInputType(int);
+ method public B editTitle(java.lang.CharSequence);
+ method public B editTitle(int);
+ method public B editable(boolean);
+ method public B enabled(boolean);
+ method public B focusable(boolean);
+ method public android.content.Context getContext();
+ method public B hasEditableActivatorView(boolean);
+ method public B hasNext(boolean);
+ method public B icon(android.graphics.drawable.Drawable);
+ method public B icon(int);
+ method public deprecated B iconResourceId(int, android.content.Context);
+ method public B id(long);
+ method public B infoOnly(boolean);
+ method public B inputType(int);
+ method public B intent(android.content.Intent);
+ method public B multilineDescription(boolean);
+ method public B subActions(java.util.List<android.support.v17.leanback.widget.GuidedAction>);
+ method public B title(java.lang.CharSequence);
+ method public B title(int);
+ }
+
+ public class GuidedActionEditText extends android.widget.EditText implements android.support.v17.leanback.widget.ImeKeyMonitor {
+ ctor public GuidedActionEditText(android.content.Context);
+ ctor public GuidedActionEditText(android.content.Context, android.util.AttributeSet);
+ ctor public GuidedActionEditText(android.content.Context, android.util.AttributeSet, int);
+ method public void setImeKeyListener(android.support.v17.leanback.widget.ImeKeyMonitor.ImeKeyListener);
+ }
+
+ public class GuidedActionsStylist implements android.support.v17.leanback.widget.FragmentAnimationProvider {
+ ctor public GuidedActionsStylist();
+ method public void collapseAction(boolean);
+ method public void expandAction(android.support.v17.leanback.widget.GuidedAction, boolean);
+ method public android.support.v17.leanback.widget.VerticalGridView getActionsGridView();
+ method public android.support.v17.leanback.widget.GuidedAction getExpandedAction();
+ method public int getItemViewType(android.support.v17.leanback.widget.GuidedAction);
+ method public android.support.v17.leanback.widget.VerticalGridView getSubActionsGridView();
+ method public final boolean isBackKeyToCollapseActivatorView();
+ method public final boolean isBackKeyToCollapseSubActions();
+ method public boolean isButtonActions();
+ method public boolean isExpandTransitionSupported();
+ method public boolean isExpanded();
+ method public boolean isInExpandTransition();
+ method public boolean isSubActionsExpanded();
+ method public void onAnimateItemChecked(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, boolean);
+ method public void onAnimateItemFocused(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, boolean);
+ method public void onAnimateItemPressed(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, boolean);
+ method public void onAnimateItemPressedCancelled(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder);
+ method public void onBindActivatorView(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, android.support.v17.leanback.widget.GuidedAction);
+ method public void onBindCheckMarkView(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, android.support.v17.leanback.widget.GuidedAction);
+ method public void onBindChevronView(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, android.support.v17.leanback.widget.GuidedAction);
+ method public void onBindViewHolder(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, android.support.v17.leanback.widget.GuidedAction);
+ method public android.view.View onCreateView(android.view.LayoutInflater, android.view.ViewGroup);
+ method public android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder onCreateViewHolder(android.view.ViewGroup);
+ method public android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder onCreateViewHolder(android.view.ViewGroup, int);
+ method public void onDestroyView();
+ method protected deprecated void onEditingModeChange(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, android.support.v17.leanback.widget.GuidedAction, boolean);
+ method protected void onEditingModeChange(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, boolean, boolean);
+ method public void onImeAppearing(java.util.List<android.animation.Animator>);
+ method public void onImeDisappearing(java.util.List<android.animation.Animator>);
+ method public int onProvideItemLayoutId();
+ method public int onProvideItemLayoutId(int);
+ method public int onProvideLayoutId();
+ method public boolean onUpdateActivatorView(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, android.support.v17.leanback.widget.GuidedAction);
+ method public void onUpdateExpandedViewHolder(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder);
+ method public void openInEditMode(android.support.v17.leanback.widget.GuidedAction);
+ method public void setAsButtonActions();
+ method public final void setBackKeyToCollapseActivatorView(boolean);
+ method public final void setBackKeyToCollapseSubActions(boolean);
+ method public deprecated void setEditingMode(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, android.support.v17.leanback.widget.GuidedAction, boolean);
+ method public deprecated void setExpandedViewHolder(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder);
+ method protected void setupImeOptions(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, android.support.v17.leanback.widget.GuidedAction);
+ method public deprecated void startExpandedTransition(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder);
+ field public static final int VIEW_TYPE_DATE_PICKER = 1; // 0x1
+ field public static final int VIEW_TYPE_DEFAULT = 0; // 0x0
+ }
+
+ public static class GuidedActionsStylist.ViewHolder extends android.support.v7.widget.RecyclerView.ViewHolder implements android.support.v17.leanback.widget.FacetProvider {
+ ctor public GuidedActionsStylist.ViewHolder(android.view.View);
+ ctor public GuidedActionsStylist.ViewHolder(android.view.View, boolean);
+ method public android.support.v17.leanback.widget.GuidedAction getAction();
+ method public android.widget.ImageView getCheckmarkView();
+ method public android.widget.ImageView getChevronView();
+ method public android.view.View getContentView();
+ method public android.widget.TextView getDescriptionView();
+ method public android.widget.EditText getEditableDescriptionView();
+ method public android.widget.EditText getEditableTitleView();
+ method public android.view.View getEditingView();
+ method public java.lang.Object getFacet(java.lang.Class<?>);
+ method public android.widget.ImageView getIconView();
+ method public android.widget.TextView getTitleView();
+ method public boolean isInEditing();
+ method public boolean isInEditingActivatorView();
+ method public boolean isInEditingDescription();
+ method public boolean isInEditingText();
+ method public boolean isInEditingTitle();
+ method public boolean isSubAction();
+ }
+
+ public class GuidedDatePickerAction extends android.support.v17.leanback.widget.GuidedAction {
+ ctor public GuidedDatePickerAction();
+ method public long getDate();
+ method public java.lang.String getDatePickerFormat();
+ method public long getMaxDate();
+ method public long getMinDate();
+ method public void setDate(long);
+ }
+
+ public static final class GuidedDatePickerAction.Builder extends android.support.v17.leanback.widget.GuidedDatePickerAction.BuilderBase {
+ ctor public GuidedDatePickerAction.Builder(android.content.Context);
+ method public android.support.v17.leanback.widget.GuidedDatePickerAction build();
+ }
+
+ public static abstract class GuidedDatePickerAction.BuilderBase<B extends android.support.v17.leanback.widget.GuidedDatePickerAction.BuilderBase> extends android.support.v17.leanback.widget.GuidedAction.BuilderBase {
+ ctor public GuidedDatePickerAction.BuilderBase(android.content.Context);
+ method protected final void applyDatePickerValues(android.support.v17.leanback.widget.GuidedDatePickerAction);
+ method public B date(long);
+ method public B datePickerFormat(java.lang.String);
+ method public B maxDate(long);
+ method public B minDate(long);
+ }
+
+ public class HeaderItem {
+ ctor public HeaderItem(long, java.lang.String);
+ ctor public HeaderItem(java.lang.String);
+ method public java.lang.CharSequence getContentDescription();
+ method public java.lang.CharSequence getDescription();
+ method public final long getId();
+ method public final java.lang.String getName();
+ method public void setContentDescription(java.lang.CharSequence);
+ method public void setDescription(java.lang.CharSequence);
+ }
+
+ public class HorizontalGridView extends android.support.v17.leanback.widget.BaseGridView {
+ ctor public HorizontalGridView(android.content.Context);
+ ctor public HorizontalGridView(android.content.Context, android.util.AttributeSet);
+ ctor public HorizontalGridView(android.content.Context, android.util.AttributeSet, int);
+ method public final boolean getFadingLeftEdge();
+ method public final int getFadingLeftEdgeLength();
+ method public final int getFadingLeftEdgeOffset();
+ method public final boolean getFadingRightEdge();
+ method public final int getFadingRightEdgeLength();
+ method public final int getFadingRightEdgeOffset();
+ method protected void initAttributes(android.content.Context, android.util.AttributeSet);
+ method public final void setFadingLeftEdge(boolean);
+ method public final void setFadingLeftEdgeLength(int);
+ method public final void setFadingLeftEdgeOffset(int);
+ method public final void setFadingRightEdge(boolean);
+ method public final void setFadingRightEdgeLength(int);
+ method public final void setFadingRightEdgeOffset(int);
+ method public void setNumRows(int);
+ method public void setRowHeight(int);
+ }
+
+ public final class HorizontalHoverCardSwitcher extends android.support.v17.leanback.widget.PresenterSwitcher {
+ ctor public HorizontalHoverCardSwitcher();
+ method protected void insertView(android.view.View);
+ method public void select(android.support.v17.leanback.widget.HorizontalGridView, android.view.View, java.lang.Object);
+ }
+
+ public class ImageCardView extends android.support.v17.leanback.widget.BaseCardView {
+ ctor public deprecated ImageCardView(android.content.Context, int);
+ ctor public ImageCardView(android.content.Context, android.util.AttributeSet, int);
+ ctor public ImageCardView(android.content.Context);
+ ctor public ImageCardView(android.content.Context, android.util.AttributeSet);
+ method public android.graphics.drawable.Drawable getBadgeImage();
+ method public java.lang.CharSequence getContentText();
+ method public android.graphics.drawable.Drawable getInfoAreaBackground();
+ method public android.graphics.drawable.Drawable getMainImage();
+ method public final android.widget.ImageView getMainImageView();
+ method public java.lang.CharSequence getTitleText();
+ method public void setBadgeImage(android.graphics.drawable.Drawable);
+ method public void setContentText(java.lang.CharSequence);
+ method public void setInfoAreaBackground(android.graphics.drawable.Drawable);
+ method public void setInfoAreaBackgroundColor(int);
+ method public void setMainImage(android.graphics.drawable.Drawable);
+ method public void setMainImage(android.graphics.drawable.Drawable, boolean);
+ method public void setMainImageAdjustViewBounds(boolean);
+ method public void setMainImageDimensions(int, int);
+ method public void setMainImageScaleType(android.widget.ImageView.ScaleType);
+ method public void setTitleText(java.lang.CharSequence);
+ field public static final int CARD_TYPE_FLAG_CONTENT = 2; // 0x2
+ field public static final int CARD_TYPE_FLAG_ICON_LEFT = 8; // 0x8
+ field public static final int CARD_TYPE_FLAG_ICON_RIGHT = 4; // 0x4
+ field public static final int CARD_TYPE_FLAG_IMAGE_ONLY = 0; // 0x0
+ field public static final int CARD_TYPE_FLAG_TITLE = 1; // 0x1
+ }
+
+ public abstract interface ImeKeyMonitor {
+ method public abstract void setImeKeyListener(android.support.v17.leanback.widget.ImeKeyMonitor.ImeKeyListener);
+ }
+
+ public static abstract interface ImeKeyMonitor.ImeKeyListener {
+ method public abstract boolean onKeyPreIme(android.widget.EditText, int, android.view.KeyEvent);
+ }
+
+ public final class ItemAlignmentFacet {
+ ctor public ItemAlignmentFacet();
+ method public android.support.v17.leanback.widget.ItemAlignmentFacet.ItemAlignmentDef[] getAlignmentDefs();
+ method public boolean isMultiAlignment();
+ method public void setAlignmentDefs(android.support.v17.leanback.widget.ItemAlignmentFacet.ItemAlignmentDef[]);
+ field public static final float ITEM_ALIGN_OFFSET_PERCENT_DISABLED = -1.0f;
+ }
+
+ public static class ItemAlignmentFacet.ItemAlignmentDef {
+ ctor public ItemAlignmentFacet.ItemAlignmentDef();
+ method public final int getItemAlignmentFocusViewId();
+ method public final int getItemAlignmentOffset();
+ method public final float getItemAlignmentOffsetPercent();
+ method public final int getItemAlignmentViewId();
+ method public boolean isAlignedToTextViewBaseLine();
+ method public final boolean isItemAlignmentOffsetWithPadding();
+ method public final void setAlignedToTextViewBaseline(boolean);
+ method public final void setItemAlignmentFocusViewId(int);
+ method public final void setItemAlignmentOffset(int);
+ method public final void setItemAlignmentOffsetPercent(float);
+ method public final void setItemAlignmentOffsetWithPadding(boolean);
+ method public final void setItemAlignmentViewId(int);
+ }
+
+ public class ItemBridgeAdapter extends android.support.v7.widget.RecyclerView.Adapter implements android.support.v17.leanback.widget.FacetProviderAdapter {
+ ctor public ItemBridgeAdapter(android.support.v17.leanback.widget.ObjectAdapter, android.support.v17.leanback.widget.PresenterSelector);
+ ctor public ItemBridgeAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ ctor public ItemBridgeAdapter();
+ method public void clear();
+ method public android.support.v17.leanback.widget.FacetProvider getFacetProvider(int);
+ method public int getItemCount();
+ method public java.util.ArrayList<android.support.v17.leanback.widget.Presenter> getPresenterMapper();
+ method public android.support.v17.leanback.widget.ItemBridgeAdapter.Wrapper getWrapper();
+ method protected void onAddPresenter(android.support.v17.leanback.widget.Presenter, int);
+ method protected void onAttachedToWindow(android.support.v17.leanback.widget.ItemBridgeAdapter.ViewHolder);
+ method protected void onBind(android.support.v17.leanback.widget.ItemBridgeAdapter.ViewHolder);
+ method public final void onBindViewHolder(android.support.v7.widget.RecyclerView.ViewHolder, int);
+ method protected void onCreate(android.support.v17.leanback.widget.ItemBridgeAdapter.ViewHolder);
+ method public final android.support.v7.widget.RecyclerView.ViewHolder onCreateViewHolder(android.view.ViewGroup, int);
+ method protected void onDetachedFromWindow(android.support.v17.leanback.widget.ItemBridgeAdapter.ViewHolder);
+ method protected void onUnbind(android.support.v17.leanback.widget.ItemBridgeAdapter.ViewHolder);
+ method public final void onViewAttachedToWindow(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public final void onViewDetachedFromWindow(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public final void onViewRecycled(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public void setAdapterListener(android.support.v17.leanback.widget.ItemBridgeAdapter.AdapterListener);
+ method public void setPresenter(android.support.v17.leanback.widget.PresenterSelector);
+ method public void setPresenterMapper(java.util.ArrayList<android.support.v17.leanback.widget.Presenter>);
+ method public void setWrapper(android.support.v17.leanback.widget.ItemBridgeAdapter.Wrapper);
+ }
+
+ public static class ItemBridgeAdapter.AdapterListener {
+ ctor public ItemBridgeAdapter.AdapterListener();
+ method public void onAddPresenter(android.support.v17.leanback.widget.Presenter, int);
+ method public void onAttachedToWindow(android.support.v17.leanback.widget.ItemBridgeAdapter.ViewHolder);
+ method public void onBind(android.support.v17.leanback.widget.ItemBridgeAdapter.ViewHolder);
+ method public void onCreate(android.support.v17.leanback.widget.ItemBridgeAdapter.ViewHolder);
+ method public void onDetachedFromWindow(android.support.v17.leanback.widget.ItemBridgeAdapter.ViewHolder);
+ method public void onUnbind(android.support.v17.leanback.widget.ItemBridgeAdapter.ViewHolder);
+ }
+
+ public class ItemBridgeAdapter.ViewHolder extends android.support.v7.widget.RecyclerView.ViewHolder implements android.support.v17.leanback.widget.FacetProvider {
+ method public final java.lang.Object getExtraObject();
+ method public java.lang.Object getFacet(java.lang.Class<?>);
+ method public final java.lang.Object getItem();
+ method public final android.support.v17.leanback.widget.Presenter getPresenter();
+ method public final android.support.v17.leanback.widget.Presenter.ViewHolder getViewHolder();
+ method public void setExtraObject(java.lang.Object);
+ }
+
+ public static abstract class ItemBridgeAdapter.Wrapper {
+ ctor public ItemBridgeAdapter.Wrapper();
+ method public abstract android.view.View createWrapper(android.view.View);
+ method public abstract void wrap(android.view.View, android.view.View);
+ }
+
+ public class ItemBridgeAdapterShadowOverlayWrapper extends android.support.v17.leanback.widget.ItemBridgeAdapter.Wrapper {
+ ctor public ItemBridgeAdapterShadowOverlayWrapper(android.support.v17.leanback.widget.ShadowOverlayHelper);
+ method public android.view.View createWrapper(android.view.View);
+ method public void wrap(android.view.View, android.view.View);
+ }
+
+ public class ListRow extends android.support.v17.leanback.widget.Row {
+ ctor public ListRow(android.support.v17.leanback.widget.HeaderItem, android.support.v17.leanback.widget.ObjectAdapter);
+ ctor public ListRow(long, android.support.v17.leanback.widget.HeaderItem, android.support.v17.leanback.widget.ObjectAdapter);
+ ctor public ListRow(android.support.v17.leanback.widget.ObjectAdapter);
+ method public final android.support.v17.leanback.widget.ObjectAdapter getAdapter();
+ method public java.lang.CharSequence getContentDescription();
+ method public void setContentDescription(java.lang.CharSequence);
+ }
+
+ public final class ListRowHoverCardView extends android.widget.LinearLayout {
+ ctor public ListRowHoverCardView(android.content.Context);
+ ctor public ListRowHoverCardView(android.content.Context, android.util.AttributeSet);
+ ctor public ListRowHoverCardView(android.content.Context, android.util.AttributeSet, int);
+ method public final java.lang.CharSequence getDescription();
+ method public final java.lang.CharSequence getTitle();
+ method public final void setDescription(java.lang.CharSequence);
+ method public final void setTitle(java.lang.CharSequence);
+ }
+
+ public class ListRowPresenter extends android.support.v17.leanback.widget.RowPresenter {
+ ctor public ListRowPresenter();
+ ctor public ListRowPresenter(int);
+ ctor public ListRowPresenter(int, boolean);
+ method protected void applySelectLevelToChild(android.support.v17.leanback.widget.ListRowPresenter.ViewHolder, android.view.View);
+ method public final boolean areChildRoundedCornersEnabled();
+ method protected android.support.v17.leanback.widget.RowPresenter.ViewHolder createRowViewHolder(android.view.ViewGroup);
+ method protected android.support.v17.leanback.widget.ShadowOverlayHelper.Options createShadowOverlayOptions();
+ method public final void enableChildRoundedCorners(boolean);
+ method public int getExpandedRowHeight();
+ method public final int getFocusZoomFactor();
+ method public final android.support.v17.leanback.widget.PresenterSelector getHoverCardPresenterSelector();
+ method public int getRecycledPoolSize(android.support.v17.leanback.widget.Presenter);
+ method public int getRowHeight();
+ method public final boolean getShadowEnabled();
+ method public final deprecated int getZoomFactor();
+ method public final boolean isFocusDimmerUsed();
+ method public final boolean isKeepChildForeground();
+ method public boolean isUsingDefaultListSelectEffect();
+ method public final boolean isUsingDefaultSelectEffect();
+ method public boolean isUsingDefaultShadow();
+ method public boolean isUsingZOrder(android.content.Context);
+ method public void setExpandedRowHeight(int);
+ method public final void setHoverCardPresenterSelector(android.support.v17.leanback.widget.PresenterSelector);
+ method public final void setKeepChildForeground(boolean);
+ method public void setNumRows(int);
+ method public void setRecycledPoolSize(android.support.v17.leanback.widget.Presenter, int);
+ method public void setRowHeight(int);
+ method public final void setShadowEnabled(boolean);
+ }
+
+ public static class ListRowPresenter.SelectItemViewHolderTask extends android.support.v17.leanback.widget.Presenter.ViewHolderTask {
+ ctor public ListRowPresenter.SelectItemViewHolderTask(int);
+ method public int getItemPosition();
+ method public android.support.v17.leanback.widget.Presenter.ViewHolderTask getItemTask();
+ method public boolean isSmoothScroll();
+ method public void setItemPosition(int);
+ method public void setItemTask(android.support.v17.leanback.widget.Presenter.ViewHolderTask);
+ method public void setSmoothScroll(boolean);
+ }
+
+ public static class ListRowPresenter.ViewHolder extends android.support.v17.leanback.widget.RowPresenter.ViewHolder {
+ ctor public ListRowPresenter.ViewHolder(android.view.View, android.support.v17.leanback.widget.HorizontalGridView, android.support.v17.leanback.widget.ListRowPresenter);
+ method public final android.support.v17.leanback.widget.ItemBridgeAdapter getBridgeAdapter();
+ method public final android.support.v17.leanback.widget.HorizontalGridView getGridView();
+ method public android.support.v17.leanback.widget.Presenter.ViewHolder getItemViewHolder(int);
+ method public final android.support.v17.leanback.widget.ListRowPresenter getListRowPresenter();
+ method public int getSelectedPosition();
+ }
+
+ public final class ListRowView extends android.widget.LinearLayout {
+ ctor public ListRowView(android.content.Context);
+ ctor public ListRowView(android.content.Context, android.util.AttributeSet);
+ ctor public ListRowView(android.content.Context, android.util.AttributeSet, int);
+ method public android.support.v17.leanback.widget.HorizontalGridView getGridView();
+ }
+
+ public abstract interface MultiActionsProvider {
+ method public abstract android.support.v17.leanback.widget.MultiActionsProvider.MultiAction[] getActions();
+ }
+
+ public static class MultiActionsProvider.MultiAction {
+ ctor public MultiActionsProvider.MultiAction(long);
+ method public android.graphics.drawable.Drawable getCurrentDrawable();
+ method public android.graphics.drawable.Drawable[] getDrawables();
+ method public long getId();
+ method public int getIndex();
+ method public void incrementIndex();
+ method public void setDrawables(android.graphics.drawable.Drawable[]);
+ method public void setIndex(int);
+ }
+
+ public abstract class ObjectAdapter {
+ ctor public ObjectAdapter(android.support.v17.leanback.widget.PresenterSelector);
+ ctor public ObjectAdapter(android.support.v17.leanback.widget.Presenter);
+ ctor public ObjectAdapter();
+ method public abstract java.lang.Object get(int);
+ method public long getId(int);
+ method public final android.support.v17.leanback.widget.Presenter getPresenter(java.lang.Object);
+ method public final android.support.v17.leanback.widget.PresenterSelector getPresenterSelector();
+ method public final boolean hasStableIds();
+ method public boolean isImmediateNotifySupported();
+ method protected final void notifyChanged();
+ method public final void notifyItemRangeChanged(int, int);
+ method protected final void notifyItemRangeInserted(int, int);
+ method protected final void notifyItemRangeRemoved(int, int);
+ method protected void onHasStableIdsChanged();
+ method protected void onPresenterSelectorChanged();
+ method public final void registerObserver(android.support.v17.leanback.widget.ObjectAdapter.DataObserver);
+ method public final void setHasStableIds(boolean);
+ method public final void setPresenterSelector(android.support.v17.leanback.widget.PresenterSelector);
+ method public abstract int size();
+ method public final void unregisterAllObservers();
+ method public final void unregisterObserver(android.support.v17.leanback.widget.ObjectAdapter.DataObserver);
+ field public static final int NO_ID = -1; // 0xffffffff
+ }
+
+ public static abstract class ObjectAdapter.DataObserver {
+ ctor public ObjectAdapter.DataObserver();
+ method public void onChanged();
+ method public void onItemRangeChanged(int, int);
+ method public void onItemRangeInserted(int, int);
+ method public void onItemRangeRemoved(int, int);
+ }
+
+ public abstract interface OnActionClickedListener {
+ method public abstract void onActionClicked(android.support.v17.leanback.widget.Action);
+ }
+
+ public abstract interface OnChildLaidOutListener {
+ method public abstract void onChildLaidOut(android.view.ViewGroup, android.view.View, int, long);
+ }
+
+ public abstract deprecated interface OnChildSelectedListener {
+ method public abstract void onChildSelected(android.view.ViewGroup, android.view.View, int, long);
+ }
+
+ public abstract class OnChildViewHolderSelectedListener {
+ ctor public OnChildViewHolderSelectedListener();
+ method public void onChildViewHolderSelected(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder, int, int);
+ method public void onChildViewHolderSelectedAndPositioned(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder, int, int);
+ }
+
+ public abstract interface OnItemViewClickedListener implements android.support.v17.leanback.widget.BaseOnItemViewClickedListener {
+ }
+
+ public abstract interface OnItemViewSelectedListener implements android.support.v17.leanback.widget.BaseOnItemViewSelectedListener {
+ }
+
+ public class PageRow extends android.support.v17.leanback.widget.Row {
+ ctor public PageRow(android.support.v17.leanback.widget.HeaderItem);
+ method public final boolean isRenderedAsRowView();
+ }
+
+ public abstract class Parallax<PropertyT extends android.util.Property> {
+ ctor public Parallax();
+ method public android.support.v17.leanback.widget.ParallaxEffect addEffect(android.support.v17.leanback.widget.Parallax.PropertyMarkerValue...);
+ method public final PropertyT addProperty(java.lang.String);
+ method public abstract PropertyT createProperty(java.lang.String, int);
+ method public java.util.List<android.support.v17.leanback.widget.ParallaxEffect> getEffects();
+ method public abstract float getMaxValue();
+ method public final java.util.List<PropertyT> getProperties();
+ method public void removeAllEffects();
+ method public void removeEffect(android.support.v17.leanback.widget.ParallaxEffect);
+ method public void updateValues();
+ }
+
+ public static class Parallax.FloatProperty extends android.util.Property {
+ ctor public Parallax.FloatProperty(java.lang.String, int);
+ method public final android.support.v17.leanback.widget.Parallax.PropertyMarkerValue at(float, float);
+ method public final android.support.v17.leanback.widget.Parallax.PropertyMarkerValue atAbsolute(float);
+ method public final android.support.v17.leanback.widget.Parallax.PropertyMarkerValue atFraction(float);
+ method public final android.support.v17.leanback.widget.Parallax.PropertyMarkerValue atMax();
+ method public final android.support.v17.leanback.widget.Parallax.PropertyMarkerValue atMin();
+ method public final java.lang.Float get(android.support.v17.leanback.widget.Parallax);
+ method public final int getIndex();
+ method public final float getValue(android.support.v17.leanback.widget.Parallax);
+ method public final void set(android.support.v17.leanback.widget.Parallax, java.lang.Float);
+ method public final void setValue(android.support.v17.leanback.widget.Parallax, float);
+ field public static final float UNKNOWN_AFTER = 3.4028235E38f;
+ field public static final float UNKNOWN_BEFORE = -3.4028235E38f;
+ }
+
+ public static class Parallax.IntProperty extends android.util.Property {
+ ctor public Parallax.IntProperty(java.lang.String, int);
+ method public final android.support.v17.leanback.widget.Parallax.PropertyMarkerValue at(int, float);
+ method public final android.support.v17.leanback.widget.Parallax.PropertyMarkerValue atAbsolute(int);
+ method public final android.support.v17.leanback.widget.Parallax.PropertyMarkerValue atFraction(float);
+ method public final android.support.v17.leanback.widget.Parallax.PropertyMarkerValue atMax();
+ method public final android.support.v17.leanback.widget.Parallax.PropertyMarkerValue atMin();
+ method public final java.lang.Integer get(android.support.v17.leanback.widget.Parallax);
+ method public final int getIndex();
+ method public final int getValue(android.support.v17.leanback.widget.Parallax);
+ method public final void set(android.support.v17.leanback.widget.Parallax, java.lang.Integer);
+ method public final void setValue(android.support.v17.leanback.widget.Parallax, int);
+ field public static final int UNKNOWN_AFTER = 2147483647; // 0x7fffffff
+ field public static final int UNKNOWN_BEFORE = -2147483648; // 0x80000000
+ }
+
+ public static class Parallax.PropertyMarkerValue<PropertyT> {
+ ctor public Parallax.PropertyMarkerValue(PropertyT);
+ method public PropertyT getProperty();
+ }
+
+ public abstract class ParallaxEffect {
+ method public final void addTarget(android.support.v17.leanback.widget.ParallaxTarget);
+ method public final java.util.List<android.support.v17.leanback.widget.Parallax.PropertyMarkerValue> getPropertyRanges();
+ method public final java.util.List<android.support.v17.leanback.widget.ParallaxTarget> getTargets();
+ method public final void performMapping(android.support.v17.leanback.widget.Parallax);
+ method public final void removeTarget(android.support.v17.leanback.widget.ParallaxTarget);
+ method public final void setPropertyRanges(android.support.v17.leanback.widget.Parallax.PropertyMarkerValue...);
+ method public final android.support.v17.leanback.widget.ParallaxEffect target(android.support.v17.leanback.widget.ParallaxTarget);
+ method public final android.support.v17.leanback.widget.ParallaxEffect target(java.lang.Object, android.animation.PropertyValuesHolder);
+ method public final <T, V extends java.lang.Number> android.support.v17.leanback.widget.ParallaxEffect target(T, android.util.Property<T, V>);
+ }
+
+ public abstract class ParallaxTarget {
+ ctor public ParallaxTarget();
+ method public void directUpdate(java.lang.Number);
+ method public boolean isDirectMapping();
+ method public void update(float);
+ }
+
+ public static final class ParallaxTarget.DirectPropertyTarget<T, V extends java.lang.Number> extends android.support.v17.leanback.widget.ParallaxTarget {
+ ctor public ParallaxTarget.DirectPropertyTarget(java.lang.Object, android.util.Property<T, V>);
+ }
+
+ public static final class ParallaxTarget.PropertyValuesHolderTarget extends android.support.v17.leanback.widget.ParallaxTarget {
+ ctor public ParallaxTarget.PropertyValuesHolderTarget(java.lang.Object, android.animation.PropertyValuesHolder);
+ }
+
+ public class PlaybackControlsRow extends android.support.v17.leanback.widget.Row {
+ ctor public PlaybackControlsRow(java.lang.Object);
+ ctor public PlaybackControlsRow();
+ method public android.support.v17.leanback.widget.Action getActionForKeyCode(int);
+ method public android.support.v17.leanback.widget.Action getActionForKeyCode(android.support.v17.leanback.widget.ObjectAdapter, int);
+ method public long getBufferedPosition();
+ method public deprecated int getBufferedProgress();
+ method public deprecated long getBufferedProgressLong();
+ method public long getCurrentPosition();
+ method public deprecated int getCurrentTime();
+ method public deprecated long getCurrentTimeLong();
+ method public long getDuration();
+ method public final android.graphics.drawable.Drawable getImageDrawable();
+ method public final java.lang.Object getItem();
+ method public final android.support.v17.leanback.widget.ObjectAdapter getPrimaryActionsAdapter();
+ method public final android.support.v17.leanback.widget.ObjectAdapter getSecondaryActionsAdapter();
+ method public deprecated int getTotalTime();
+ method public deprecated long getTotalTimeLong();
+ method public void setBufferedPosition(long);
+ method public deprecated void setBufferedProgress(int);
+ method public deprecated void setBufferedProgressLong(long);
+ method public void setCurrentPosition(long);
+ method public deprecated void setCurrentTime(int);
+ method public deprecated void setCurrentTimeLong(long);
+ method public void setDuration(long);
+ method public final void setImageBitmap(android.content.Context, android.graphics.Bitmap);
+ method public final void setImageDrawable(android.graphics.drawable.Drawable);
+ method public void setOnPlaybackProgressChangedListener(android.support.v17.leanback.widget.PlaybackControlsRow.OnPlaybackProgressCallback);
+ method public final void setPrimaryActionsAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public final void setSecondaryActionsAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public deprecated void setTotalTime(int);
+ method public deprecated void setTotalTimeLong(long);
+ }
+
+ public static class PlaybackControlsRow.ClosedCaptioningAction extends android.support.v17.leanback.widget.PlaybackControlsRow.MultiAction {
+ ctor public PlaybackControlsRow.ClosedCaptioningAction(android.content.Context);
+ ctor public PlaybackControlsRow.ClosedCaptioningAction(android.content.Context, int);
+ field public static final int INDEX_OFF = 0; // 0x0
+ field public static final int INDEX_ON = 1; // 0x1
+ field public static deprecated int OFF;
+ field public static deprecated int ON;
+ }
+
+ public static class PlaybackControlsRow.FastForwardAction extends android.support.v17.leanback.widget.PlaybackControlsRow.MultiAction {
+ ctor public PlaybackControlsRow.FastForwardAction(android.content.Context);
+ ctor public PlaybackControlsRow.FastForwardAction(android.content.Context, int);
+ }
+
+ public static class PlaybackControlsRow.HighQualityAction extends android.support.v17.leanback.widget.PlaybackControlsRow.MultiAction {
+ ctor public PlaybackControlsRow.HighQualityAction(android.content.Context);
+ ctor public PlaybackControlsRow.HighQualityAction(android.content.Context, int);
+ field public static final int INDEX_OFF = 0; // 0x0
+ field public static final int INDEX_ON = 1; // 0x1
+ field public static deprecated int OFF;
+ field public static deprecated int ON;
+ }
+
+ public static class PlaybackControlsRow.MoreActions extends android.support.v17.leanback.widget.Action {
+ ctor public PlaybackControlsRow.MoreActions(android.content.Context);
+ }
+
+ public static abstract class PlaybackControlsRow.MultiAction extends android.support.v17.leanback.widget.Action {
+ ctor public PlaybackControlsRow.MultiAction(int);
+ method public int getActionCount();
+ method public android.graphics.drawable.Drawable getDrawable(int);
+ method public int getIndex();
+ method public java.lang.String getLabel(int);
+ method public java.lang.String getSecondaryLabel(int);
+ method public void nextIndex();
+ method public void setDrawables(android.graphics.drawable.Drawable[]);
+ method public void setIndex(int);
+ method public void setLabels(java.lang.String[]);
+ method public void setSecondaryLabels(java.lang.String[]);
+ }
+
+ public static class PlaybackControlsRow.OnPlaybackProgressCallback {
+ ctor public PlaybackControlsRow.OnPlaybackProgressCallback();
+ method public void onBufferedPositionChanged(android.support.v17.leanback.widget.PlaybackControlsRow, long);
+ method public void onCurrentPositionChanged(android.support.v17.leanback.widget.PlaybackControlsRow, long);
+ method public void onDurationChanged(android.support.v17.leanback.widget.PlaybackControlsRow, long);
+ }
+
+ public static class PlaybackControlsRow.PictureInPictureAction extends android.support.v17.leanback.widget.Action {
+ ctor public PlaybackControlsRow.PictureInPictureAction(android.content.Context);
+ }
+
+ public static class PlaybackControlsRow.PlayPauseAction extends android.support.v17.leanback.widget.PlaybackControlsRow.MultiAction {
+ ctor public PlaybackControlsRow.PlayPauseAction(android.content.Context);
+ field public static final int INDEX_PAUSE = 1; // 0x1
+ field public static final int INDEX_PLAY = 0; // 0x0
+ field public static deprecated int PAUSE;
+ field public static deprecated int PLAY;
+ }
+
+ public static class PlaybackControlsRow.RepeatAction extends android.support.v17.leanback.widget.PlaybackControlsRow.MultiAction {
+ ctor public PlaybackControlsRow.RepeatAction(android.content.Context);
+ ctor public PlaybackControlsRow.RepeatAction(android.content.Context, int);
+ ctor public PlaybackControlsRow.RepeatAction(android.content.Context, int, int);
+ field public static deprecated int ALL;
+ field public static final int INDEX_ALL = 1; // 0x1
+ field public static final int INDEX_NONE = 0; // 0x0
+ field public static final int INDEX_ONE = 2; // 0x2
+ field public static deprecated int NONE;
+ field public static deprecated int ONE;
+ }
+
+ public static class PlaybackControlsRow.RewindAction extends android.support.v17.leanback.widget.PlaybackControlsRow.MultiAction {
+ ctor public PlaybackControlsRow.RewindAction(android.content.Context);
+ ctor public PlaybackControlsRow.RewindAction(android.content.Context, int);
+ }
+
+ public static class PlaybackControlsRow.ShuffleAction extends android.support.v17.leanback.widget.PlaybackControlsRow.MultiAction {
+ ctor public PlaybackControlsRow.ShuffleAction(android.content.Context);
+ ctor public PlaybackControlsRow.ShuffleAction(android.content.Context, int);
+ field public static final int INDEX_OFF = 0; // 0x0
+ field public static final int INDEX_ON = 1; // 0x1
+ field public static deprecated int OFF;
+ field public static deprecated int ON;
+ }
+
+ public static class PlaybackControlsRow.SkipNextAction extends android.support.v17.leanback.widget.Action {
+ ctor public PlaybackControlsRow.SkipNextAction(android.content.Context);
+ }
+
+ public static class PlaybackControlsRow.SkipPreviousAction extends android.support.v17.leanback.widget.Action {
+ ctor public PlaybackControlsRow.SkipPreviousAction(android.content.Context);
+ }
+
+ public static abstract class PlaybackControlsRow.ThumbsAction extends android.support.v17.leanback.widget.PlaybackControlsRow.MultiAction {
+ ctor public PlaybackControlsRow.ThumbsAction(int, android.content.Context, int, int);
+ field public static final int INDEX_OUTLINE = 1; // 0x1
+ field public static final int INDEX_SOLID = 0; // 0x0
+ field public static deprecated int OUTLINE;
+ field public static deprecated int SOLID;
+ }
+
+ public static class PlaybackControlsRow.ThumbsDownAction extends android.support.v17.leanback.widget.PlaybackControlsRow.ThumbsAction {
+ ctor public PlaybackControlsRow.ThumbsDownAction(android.content.Context);
+ }
+
+ public static class PlaybackControlsRow.ThumbsUpAction extends android.support.v17.leanback.widget.PlaybackControlsRow.ThumbsAction {
+ ctor public PlaybackControlsRow.ThumbsUpAction(android.content.Context);
+ }
+
+ public class PlaybackControlsRowPresenter extends android.support.v17.leanback.widget.PlaybackRowPresenter {
+ ctor public PlaybackControlsRowPresenter(android.support.v17.leanback.widget.Presenter);
+ ctor public PlaybackControlsRowPresenter();
+ method public boolean areSecondaryActionsHidden();
+ method protected android.support.v17.leanback.widget.RowPresenter.ViewHolder createRowViewHolder(android.view.ViewGroup);
+ method public int getBackgroundColor();
+ method public android.support.v17.leanback.widget.OnActionClickedListener getOnActionClickedListener();
+ method public int getProgressColor();
+ method public void setBackgroundColor(int);
+ method public void setOnActionClickedListener(android.support.v17.leanback.widget.OnActionClickedListener);
+ method public void setProgressColor(int);
+ method public void setSecondaryActionsHidden(boolean);
+ method public void showBottomSpace(android.support.v17.leanback.widget.PlaybackControlsRowPresenter.ViewHolder, boolean);
+ method public void showPrimaryActions(android.support.v17.leanback.widget.PlaybackControlsRowPresenter.ViewHolder);
+ }
+
+ public class PlaybackControlsRowPresenter.ViewHolder extends android.support.v17.leanback.widget.PlaybackRowPresenter.ViewHolder {
+ field public final android.support.v17.leanback.widget.Presenter.ViewHolder mDescriptionViewHolder;
+ }
+
+ public abstract class PlaybackRowPresenter extends android.support.v17.leanback.widget.RowPresenter {
+ ctor public PlaybackRowPresenter();
+ method public void onReappear(android.support.v17.leanback.widget.RowPresenter.ViewHolder);
+ }
+
+ public static class PlaybackRowPresenter.ViewHolder extends android.support.v17.leanback.widget.RowPresenter.ViewHolder {
+ ctor public PlaybackRowPresenter.ViewHolder(android.view.View);
+ }
+
+ public class PlaybackSeekDataProvider {
+ ctor public PlaybackSeekDataProvider();
+ method public long[] getSeekPositions();
+ method public void getThumbnail(int, android.support.v17.leanback.widget.PlaybackSeekDataProvider.ResultCallback);
+ method public void reset();
+ }
+
+ public static class PlaybackSeekDataProvider.ResultCallback {
+ ctor public PlaybackSeekDataProvider.ResultCallback();
+ method public void onThumbnailLoaded(android.graphics.Bitmap, int);
+ }
+
+ public abstract interface PlaybackSeekUi {
+ method public abstract void setPlaybackSeekUiClient(android.support.v17.leanback.widget.PlaybackSeekUi.Client);
+ }
+
+ public static class PlaybackSeekUi.Client {
+ ctor public PlaybackSeekUi.Client();
+ method public android.support.v17.leanback.widget.PlaybackSeekDataProvider getPlaybackSeekDataProvider();
+ method public boolean isSeekEnabled();
+ method public void onSeekFinished(boolean);
+ method public void onSeekPositionChanged(long);
+ method public void onSeekStarted();
+ }
+
+ public class PlaybackTransportRowPresenter extends android.support.v17.leanback.widget.PlaybackRowPresenter {
+ ctor public PlaybackTransportRowPresenter();
+ method protected android.support.v17.leanback.widget.RowPresenter.ViewHolder createRowViewHolder(android.view.ViewGroup);
+ method public float getDefaultSeekIncrement();
+ method public android.support.v17.leanback.widget.OnActionClickedListener getOnActionClickedListener();
+ method public int getProgressColor();
+ method protected void onProgressBarClicked(android.support.v17.leanback.widget.PlaybackTransportRowPresenter.ViewHolder);
+ method public void setDefaultSeekIncrement(float);
+ method public void setDescriptionPresenter(android.support.v17.leanback.widget.Presenter);
+ method public void setOnActionClickedListener(android.support.v17.leanback.widget.OnActionClickedListener);
+ method public void setProgressColor(int);
+ }
+
+ public class PlaybackTransportRowPresenter.ViewHolder extends android.support.v17.leanback.widget.PlaybackRowPresenter.ViewHolder implements android.support.v17.leanback.widget.PlaybackSeekUi {
+ ctor public PlaybackTransportRowPresenter.ViewHolder(android.view.View, android.support.v17.leanback.widget.Presenter);
+ method public final android.widget.TextView getCurrentPositionView();
+ method public final android.support.v17.leanback.widget.Presenter.ViewHolder getDescriptionViewHolder();
+ method public final android.widget.TextView getDurationView();
+ method protected void onSetCurrentPositionLabel(long);
+ method protected void onSetDurationLabel(long);
+ method public void setPlaybackSeekUiClient(android.support.v17.leanback.widget.PlaybackSeekUi.Client);
+ }
+
+ public abstract class Presenter implements android.support.v17.leanback.widget.FacetProvider {
+ ctor public Presenter();
+ method protected static void cancelAnimationsRecursive(android.view.View);
+ method public final java.lang.Object getFacet(java.lang.Class<?>);
+ method public abstract void onBindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder, java.lang.Object);
+ method public abstract android.support.v17.leanback.widget.Presenter.ViewHolder onCreateViewHolder(android.view.ViewGroup);
+ method public abstract void onUnbindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder);
+ method public void onViewAttachedToWindow(android.support.v17.leanback.widget.Presenter.ViewHolder);
+ method public void onViewDetachedFromWindow(android.support.v17.leanback.widget.Presenter.ViewHolder);
+ method public final void setFacet(java.lang.Class<?>, java.lang.Object);
+ method public void setOnClickListener(android.support.v17.leanback.widget.Presenter.ViewHolder, android.view.View.OnClickListener);
+ }
+
+ public static class Presenter.ViewHolder implements android.support.v17.leanback.widget.FacetProvider {
+ ctor public Presenter.ViewHolder(android.view.View);
+ method public final java.lang.Object getFacet(java.lang.Class<?>);
+ method public final void setFacet(java.lang.Class<?>, java.lang.Object);
+ field public final android.view.View view;
+ }
+
+ public static abstract class Presenter.ViewHolderTask {
+ ctor public Presenter.ViewHolderTask();
+ method public void run(android.support.v17.leanback.widget.Presenter.ViewHolder);
+ }
+
+ public abstract class PresenterSelector {
+ ctor public PresenterSelector();
+ method public abstract android.support.v17.leanback.widget.Presenter getPresenter(java.lang.Object);
+ method public android.support.v17.leanback.widget.Presenter[] getPresenters();
+ }
+
+ public abstract class PresenterSwitcher {
+ ctor public PresenterSwitcher();
+ method public void clear();
+ method public final android.view.ViewGroup getParentViewGroup();
+ method public void init(android.view.ViewGroup, android.support.v17.leanback.widget.PresenterSelector);
+ method protected abstract void insertView(android.view.View);
+ method protected void onViewSelected(android.view.View);
+ method public void select(java.lang.Object);
+ method protected void showView(android.view.View, boolean);
+ method public void unselect();
+ }
+
+ public class RecyclerViewParallax extends android.support.v17.leanback.widget.Parallax {
+ ctor public RecyclerViewParallax();
+ method public android.support.v17.leanback.widget.RecyclerViewParallax.ChildPositionProperty createProperty(java.lang.String, int);
+ method public float getMaxValue();
+ method public android.support.v7.widget.RecyclerView getRecyclerView();
+ method public void setRecyclerView(android.support.v7.widget.RecyclerView);
+ }
+
+ public static final class RecyclerViewParallax.ChildPositionProperty extends android.support.v17.leanback.widget.Parallax.IntProperty {
+ method public android.support.v17.leanback.widget.RecyclerViewParallax.ChildPositionProperty adapterPosition(int);
+ method public android.support.v17.leanback.widget.RecyclerViewParallax.ChildPositionProperty fraction(float);
+ method public int getAdapterPosition();
+ method public float getFraction();
+ method public int getOffset();
+ method public int getViewId();
+ method public android.support.v17.leanback.widget.RecyclerViewParallax.ChildPositionProperty offset(int);
+ method public android.support.v17.leanback.widget.RecyclerViewParallax.ChildPositionProperty viewId(int);
+ }
+
+ public class Row {
+ ctor public Row(long, android.support.v17.leanback.widget.HeaderItem);
+ ctor public Row(android.support.v17.leanback.widget.HeaderItem);
+ ctor public Row();
+ method public final android.support.v17.leanback.widget.HeaderItem getHeaderItem();
+ method public final long getId();
+ method public boolean isRenderedAsRowView();
+ method public final void setHeaderItem(android.support.v17.leanback.widget.HeaderItem);
+ method public final void setId(long);
+ }
+
+ public class RowHeaderPresenter extends android.support.v17.leanback.widget.Presenter {
+ ctor public RowHeaderPresenter();
+ method protected static float getFontDescent(android.widget.TextView, android.graphics.Paint);
+ method public int getSpaceUnderBaseline(android.support.v17.leanback.widget.RowHeaderPresenter.ViewHolder);
+ method public boolean isNullItemVisibilityGone();
+ method public void onBindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder, java.lang.Object);
+ method public android.support.v17.leanback.widget.Presenter.ViewHolder onCreateViewHolder(android.view.ViewGroup);
+ method protected void onSelectLevelChanged(android.support.v17.leanback.widget.RowHeaderPresenter.ViewHolder);
+ method public void onUnbindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder);
+ method public void setNullItemVisibilityGone(boolean);
+ method public final void setSelectLevel(android.support.v17.leanback.widget.RowHeaderPresenter.ViewHolder, float);
+ }
+
+ public static class RowHeaderPresenter.ViewHolder extends android.support.v17.leanback.widget.Presenter.ViewHolder {
+ ctor public RowHeaderPresenter.ViewHolder(android.view.View);
+ method public final float getSelectLevel();
+ }
+
+ public final class RowHeaderView extends android.widget.TextView {
+ ctor public RowHeaderView(android.content.Context);
+ ctor public RowHeaderView(android.content.Context, android.util.AttributeSet);
+ ctor public RowHeaderView(android.content.Context, android.util.AttributeSet, int);
+ }
+
+ public abstract class RowPresenter extends android.support.v17.leanback.widget.Presenter {
+ ctor public RowPresenter();
+ method protected abstract android.support.v17.leanback.widget.RowPresenter.ViewHolder createRowViewHolder(android.view.ViewGroup);
+ method protected void dispatchItemSelectedListener(android.support.v17.leanback.widget.RowPresenter.ViewHolder, boolean);
+ method public void freeze(android.support.v17.leanback.widget.RowPresenter.ViewHolder, boolean);
+ method public final android.support.v17.leanback.widget.RowHeaderPresenter getHeaderPresenter();
+ method public final android.support.v17.leanback.widget.RowPresenter.ViewHolder getRowViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder);
+ method public final boolean getSelectEffectEnabled();
+ method public final float getSelectLevel(android.support.v17.leanback.widget.Presenter.ViewHolder);
+ method public final int getSyncActivatePolicy();
+ method protected void initializeRowViewHolder(android.support.v17.leanback.widget.RowPresenter.ViewHolder);
+ method protected boolean isClippingChildren();
+ method public boolean isUsingDefaultSelectEffect();
+ method protected void onBindRowViewHolder(android.support.v17.leanback.widget.RowPresenter.ViewHolder, java.lang.Object);
+ method public final void onBindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder, java.lang.Object);
+ method public final android.support.v17.leanback.widget.Presenter.ViewHolder onCreateViewHolder(android.view.ViewGroup);
+ method protected void onRowViewAttachedToWindow(android.support.v17.leanback.widget.RowPresenter.ViewHolder);
+ method protected void onRowViewDetachedFromWindow(android.support.v17.leanback.widget.RowPresenter.ViewHolder);
+ method protected void onRowViewExpanded(android.support.v17.leanback.widget.RowPresenter.ViewHolder, boolean);
+ method protected void onRowViewSelected(android.support.v17.leanback.widget.RowPresenter.ViewHolder, boolean);
+ method protected void onSelectLevelChanged(android.support.v17.leanback.widget.RowPresenter.ViewHolder);
+ method protected void onUnbindRowViewHolder(android.support.v17.leanback.widget.RowPresenter.ViewHolder);
+ method public final void onUnbindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder);
+ method public final void onViewAttachedToWindow(android.support.v17.leanback.widget.Presenter.ViewHolder);
+ method public final void onViewDetachedFromWindow(android.support.v17.leanback.widget.Presenter.ViewHolder);
+ method public void setEntranceTransitionState(android.support.v17.leanback.widget.RowPresenter.ViewHolder, boolean);
+ method public final void setHeaderPresenter(android.support.v17.leanback.widget.RowHeaderPresenter);
+ method public final void setRowViewExpanded(android.support.v17.leanback.widget.Presenter.ViewHolder, boolean);
+ method public final void setRowViewSelected(android.support.v17.leanback.widget.Presenter.ViewHolder, boolean);
+ method public final void setSelectEffectEnabled(boolean);
+ method public final void setSelectLevel(android.support.v17.leanback.widget.Presenter.ViewHolder, float);
+ method public final void setSyncActivatePolicy(int);
+ field public static final int SYNC_ACTIVATED_CUSTOM = 0; // 0x0
+ field public static final int SYNC_ACTIVATED_TO_EXPANDED = 1; // 0x1
+ field public static final int SYNC_ACTIVATED_TO_EXPANDED_AND_SELECTED = 3; // 0x3
+ field public static final int SYNC_ACTIVATED_TO_SELECTED = 2; // 0x2
+ }
+
+ public static class RowPresenter.ViewHolder extends android.support.v17.leanback.widget.Presenter.ViewHolder {
+ ctor public RowPresenter.ViewHolder(android.view.View);
+ method public final android.support.v17.leanback.widget.RowHeaderPresenter.ViewHolder getHeaderViewHolder();
+ method public final android.support.v17.leanback.widget.BaseOnItemViewClickedListener getOnItemViewClickedListener();
+ method public final android.support.v17.leanback.widget.BaseOnItemViewSelectedListener getOnItemViewSelectedListener();
+ method public android.view.View.OnKeyListener getOnKeyListener();
+ method public final android.support.v17.leanback.widget.Row getRow();
+ method public final java.lang.Object getRowObject();
+ method public final float getSelectLevel();
+ method public java.lang.Object getSelectedItem();
+ method public android.support.v17.leanback.widget.Presenter.ViewHolder getSelectedItemViewHolder();
+ method public final boolean isExpanded();
+ method public final boolean isSelected();
+ method public final void setActivated(boolean);
+ method public final void setOnItemViewClickedListener(android.support.v17.leanback.widget.BaseOnItemViewClickedListener);
+ method public final void setOnItemViewSelectedListener(android.support.v17.leanback.widget.BaseOnItemViewSelectedListener);
+ method public void setOnKeyListener(android.view.View.OnKeyListener);
+ method public final void syncActivatedStatus(android.view.View);
+ field protected final android.support.v17.leanback.graphics.ColorOverlayDimmer mColorDimmer;
+ }
+
+ public class SearchBar extends android.widget.RelativeLayout {
+ ctor public SearchBar(android.content.Context);
+ ctor public SearchBar(android.content.Context, android.util.AttributeSet);
+ ctor public SearchBar(android.content.Context, android.util.AttributeSet, int);
+ method public void displayCompletions(java.util.List<java.lang.String>);
+ method public void displayCompletions(android.view.inputmethod.CompletionInfo[]);
+ method public android.graphics.drawable.Drawable getBadgeDrawable();
+ method public java.lang.CharSequence getHint();
+ method public java.lang.String getTitle();
+ method public boolean isRecognizing();
+ method public void setBadgeDrawable(android.graphics.drawable.Drawable);
+ method public void setPermissionListener(android.support.v17.leanback.widget.SearchBar.SearchBarPermissionListener);
+ method public void setSearchAffordanceColors(android.support.v17.leanback.widget.SearchOrbView.Colors);
+ method public void setSearchAffordanceColorsInListening(android.support.v17.leanback.widget.SearchOrbView.Colors);
+ method public void setSearchBarListener(android.support.v17.leanback.widget.SearchBar.SearchBarListener);
+ method public void setSearchQuery(java.lang.String);
+ method public void setSpeechRecognitionCallback(android.support.v17.leanback.widget.SpeechRecognitionCallback);
+ method public void setSpeechRecognizer(android.speech.SpeechRecognizer);
+ method public void setTitle(java.lang.String);
+ method public void startRecognition();
+ method public void stopRecognition();
+ }
+
+ public static abstract interface SearchBar.SearchBarListener {
+ method public abstract void onKeyboardDismiss(java.lang.String);
+ method public abstract void onSearchQueryChange(java.lang.String);
+ method public abstract void onSearchQuerySubmit(java.lang.String);
+ }
+
+ public static abstract interface SearchBar.SearchBarPermissionListener {
+ method public abstract void requestAudioPermission();
+ }
+
+ public class SearchEditText extends android.support.v17.leanback.widget.StreamingTextView {
+ ctor public SearchEditText(android.content.Context);
+ ctor public SearchEditText(android.content.Context, android.util.AttributeSet);
+ ctor public SearchEditText(android.content.Context, android.util.AttributeSet, int);
+ method public void setOnKeyboardDismissListener(android.support.v17.leanback.widget.SearchEditText.OnKeyboardDismissListener);
+ }
+
+ public static abstract interface SearchEditText.OnKeyboardDismissListener {
+ method public abstract void onKeyboardDismiss();
+ }
+
+ public class SearchOrbView extends android.widget.FrameLayout implements android.view.View.OnClickListener {
+ ctor public SearchOrbView(android.content.Context);
+ ctor public SearchOrbView(android.content.Context, android.util.AttributeSet);
+ ctor public SearchOrbView(android.content.Context, android.util.AttributeSet, int);
+ method public void enableOrbColorAnimation(boolean);
+ method public int getOrbColor();
+ method public android.support.v17.leanback.widget.SearchOrbView.Colors getOrbColors();
+ method public android.graphics.drawable.Drawable getOrbIcon();
+ method public void onClick(android.view.View);
+ method public void setOnOrbClickedListener(android.view.View.OnClickListener);
+ method public void setOrbColor(int);
+ method public deprecated void setOrbColor(int, int);
+ method public void setOrbColors(android.support.v17.leanback.widget.SearchOrbView.Colors);
+ method public void setOrbIcon(android.graphics.drawable.Drawable);
+ }
+
+ public static class SearchOrbView.Colors {
+ ctor public SearchOrbView.Colors(int);
+ ctor public SearchOrbView.Colors(int, int);
+ ctor public SearchOrbView.Colors(int, int, int);
+ method public static int getBrightColor(int);
+ field public int brightColor;
+ field public int color;
+ field public int iconColor;
+ }
+
+ public class SectionRow extends android.support.v17.leanback.widget.Row {
+ ctor public SectionRow(android.support.v17.leanback.widget.HeaderItem);
+ ctor public SectionRow(long, java.lang.String);
+ ctor public SectionRow(java.lang.String);
+ method public final boolean isRenderedAsRowView();
+ }
+
+ public class ShadowOverlayContainer extends android.widget.FrameLayout {
+ ctor public ShadowOverlayContainer(android.content.Context);
+ ctor public ShadowOverlayContainer(android.content.Context, android.util.AttributeSet);
+ ctor public ShadowOverlayContainer(android.content.Context, android.util.AttributeSet, int);
+ method public int getShadowType();
+ method public android.view.View getWrappedView();
+ method public deprecated void initialize(boolean, boolean);
+ method public deprecated void initialize(boolean, boolean, boolean);
+ method public static void prepareParentForShadow(android.view.ViewGroup);
+ method public void setOverlayColor(int);
+ method public void setShadowFocusLevel(float);
+ method public static boolean supportsDynamicShadow();
+ method public static boolean supportsShadow();
+ method public void useDynamicShadow();
+ method public void useDynamicShadow(float, float);
+ method public void useStaticShadow();
+ method public void wrap(android.view.View);
+ field public static final int SHADOW_DYNAMIC = 3; // 0x3
+ field public static final int SHADOW_NONE = 1; // 0x1
+ field public static final int SHADOW_STATIC = 2; // 0x2
+ }
+
+ public final class ShadowOverlayHelper {
+ method public android.support.v17.leanback.widget.ShadowOverlayContainer createShadowOverlayContainer(android.content.Context);
+ method public int getShadowType();
+ method public boolean needsOverlay();
+ method public boolean needsRoundedCorner();
+ method public boolean needsWrapper();
+ method public void onViewCreated(android.view.View);
+ method public void prepareParentForShadow(android.view.ViewGroup);
+ method public static void setNoneWrapperOverlayColor(android.view.View, int);
+ method public static void setNoneWrapperShadowFocusLevel(android.view.View, float);
+ method public void setOverlayColor(android.view.View, int);
+ method public void setShadowFocusLevel(android.view.View, float);
+ method public static boolean supportsDynamicShadow();
+ method public static boolean supportsForeground();
+ method public static boolean supportsRoundedCorner();
+ method public static boolean supportsShadow();
+ field public static final int SHADOW_DYNAMIC = 3; // 0x3
+ field public static final int SHADOW_NONE = 1; // 0x1
+ field public static final int SHADOW_STATIC = 2; // 0x2
+ }
+
+ public static final class ShadowOverlayHelper.Builder {
+ ctor public ShadowOverlayHelper.Builder();
+ method public android.support.v17.leanback.widget.ShadowOverlayHelper build(android.content.Context);
+ method public android.support.v17.leanback.widget.ShadowOverlayHelper.Builder keepForegroundDrawable(boolean);
+ method public android.support.v17.leanback.widget.ShadowOverlayHelper.Builder needsOverlay(boolean);
+ method public android.support.v17.leanback.widget.ShadowOverlayHelper.Builder needsRoundedCorner(boolean);
+ method public android.support.v17.leanback.widget.ShadowOverlayHelper.Builder needsShadow(boolean);
+ method public android.support.v17.leanback.widget.ShadowOverlayHelper.Builder options(android.support.v17.leanback.widget.ShadowOverlayHelper.Options);
+ method public android.support.v17.leanback.widget.ShadowOverlayHelper.Builder preferZOrder(boolean);
+ }
+
+ public static final class ShadowOverlayHelper.Options {
+ ctor public ShadowOverlayHelper.Options();
+ method public android.support.v17.leanback.widget.ShadowOverlayHelper.Options dynamicShadowZ(float, float);
+ method public final float getDynamicShadowFocusedZ();
+ method public final float getDynamicShadowUnfocusedZ();
+ method public final int getRoundedCornerRadius();
+ method public android.support.v17.leanback.widget.ShadowOverlayHelper.Options roundedCornerRadius(int);
+ field public static final android.support.v17.leanback.widget.ShadowOverlayHelper.Options DEFAULT;
+ }
+
+ public final class SinglePresenterSelector extends android.support.v17.leanback.widget.PresenterSelector {
+ ctor public SinglePresenterSelector(android.support.v17.leanback.widget.Presenter);
+ method public android.support.v17.leanback.widget.Presenter getPresenter(java.lang.Object);
+ }
+
+ public class SparseArrayObjectAdapter extends android.support.v17.leanback.widget.ObjectAdapter {
+ ctor public SparseArrayObjectAdapter(android.support.v17.leanback.widget.PresenterSelector);
+ ctor public SparseArrayObjectAdapter(android.support.v17.leanback.widget.Presenter);
+ ctor public SparseArrayObjectAdapter();
+ method public void clear(int);
+ method public void clear();
+ method public java.lang.Object get(int);
+ method public int indexOf(java.lang.Object);
+ method public int indexOf(int);
+ method public java.lang.Object lookup(int);
+ method public void notifyArrayItemRangeChanged(int, int);
+ method public void set(int, java.lang.Object);
+ method public int size();
+ }
+
+ public class SpeechOrbView extends android.support.v17.leanback.widget.SearchOrbView {
+ ctor public SpeechOrbView(android.content.Context);
+ ctor public SpeechOrbView(android.content.Context, android.util.AttributeSet);
+ ctor public SpeechOrbView(android.content.Context, android.util.AttributeSet, int);
+ method public void setListeningOrbColors(android.support.v17.leanback.widget.SearchOrbView.Colors);
+ method public void setNotListeningOrbColors(android.support.v17.leanback.widget.SearchOrbView.Colors);
+ method public void setSoundLevel(int);
+ method public void showListening();
+ method public void showNotListening();
+ }
+
+ public abstract interface SpeechRecognitionCallback {
+ method public abstract void recognizeSpeech();
+ }
+
+ class StreamingTextView extends android.widget.EditText {
+ ctor public StreamingTextView(android.content.Context, android.util.AttributeSet);
+ ctor public StreamingTextView(android.content.Context, android.util.AttributeSet, int);
+ method public static boolean isLayoutRtl(android.view.View);
+ method public void reset();
+ method public void setFinalRecognizedText(java.lang.CharSequence);
+ method public void updateRecognizedText(java.lang.String, java.lang.String);
+ method public void updateRecognizedText(java.lang.String, java.util.List<java.lang.Float>);
+ }
+
+ public class TitleHelper {
+ ctor public TitleHelper(android.view.ViewGroup, android.view.View);
+ method public android.support.v17.leanback.widget.BrowseFrameLayout.OnFocusSearchListener getOnFocusSearchListener();
+ method public android.view.ViewGroup getSceneRoot();
+ method public android.view.View getTitleView();
+ method public void showTitle(boolean);
+ }
+
+ public class TitleView extends android.widget.FrameLayout implements android.support.v17.leanback.widget.TitleViewAdapter.Provider {
+ ctor public TitleView(android.content.Context);
+ ctor public TitleView(android.content.Context, android.util.AttributeSet);
+ ctor public TitleView(android.content.Context, android.util.AttributeSet, int);
+ method public void enableAnimation(boolean);
+ method public android.graphics.drawable.Drawable getBadgeDrawable();
+ method public android.support.v17.leanback.widget.SearchOrbView.Colors getSearchAffordanceColors();
+ method public android.view.View getSearchAffordanceView();
+ method public java.lang.CharSequence getTitle();
+ method public android.support.v17.leanback.widget.TitleViewAdapter getTitleViewAdapter();
+ method public void setBadgeDrawable(android.graphics.drawable.Drawable);
+ method public void setOnSearchClickedListener(android.view.View.OnClickListener);
+ method public void setSearchAffordanceColors(android.support.v17.leanback.widget.SearchOrbView.Colors);
+ method public void setTitle(java.lang.CharSequence);
+ method public void updateComponentsVisibility(int);
+ }
+
+ public abstract class TitleViewAdapter {
+ ctor public TitleViewAdapter();
+ method public android.graphics.drawable.Drawable getBadgeDrawable();
+ method public android.support.v17.leanback.widget.SearchOrbView.Colors getSearchAffordanceColors();
+ method public abstract android.view.View getSearchAffordanceView();
+ method public java.lang.CharSequence getTitle();
+ method public void setAnimationEnabled(boolean);
+ method public void setBadgeDrawable(android.graphics.drawable.Drawable);
+ method public void setOnSearchClickedListener(android.view.View.OnClickListener);
+ method public void setSearchAffordanceColors(android.support.v17.leanback.widget.SearchOrbView.Colors);
+ method public void setTitle(java.lang.CharSequence);
+ method public void updateComponentsVisibility(int);
+ field public static final int BRANDING_VIEW_VISIBLE = 2; // 0x2
+ field public static final int FULL_VIEW_VISIBLE = 6; // 0x6
+ field public static final int SEARCH_VIEW_VISIBLE = 4; // 0x4
+ }
+
+ public static abstract interface TitleViewAdapter.Provider {
+ method public abstract android.support.v17.leanback.widget.TitleViewAdapter getTitleViewAdapter();
+ }
+
+ public class VerticalGridPresenter extends android.support.v17.leanback.widget.Presenter {
+ ctor public VerticalGridPresenter();
+ ctor public VerticalGridPresenter(int);
+ ctor public VerticalGridPresenter(int, boolean);
+ method public final boolean areChildRoundedCornersEnabled();
+ method protected android.support.v17.leanback.widget.VerticalGridPresenter.ViewHolder createGridViewHolder(android.view.ViewGroup);
+ method protected android.support.v17.leanback.widget.ShadowOverlayHelper.Options createShadowOverlayOptions();
+ method public final void enableChildRoundedCorners(boolean);
+ method public final int getFocusZoomFactor();
+ method public final boolean getKeepChildForeground();
+ method public int getNumberOfColumns();
+ method public final android.support.v17.leanback.widget.OnItemViewClickedListener getOnItemViewClickedListener();
+ method public final android.support.v17.leanback.widget.OnItemViewSelectedListener getOnItemViewSelectedListener();
+ method public final boolean getShadowEnabled();
+ method protected void initializeGridViewHolder(android.support.v17.leanback.widget.VerticalGridPresenter.ViewHolder);
+ method public final boolean isFocusDimmerUsed();
+ method public boolean isUsingDefaultShadow();
+ method public boolean isUsingZOrder(android.content.Context);
+ method public void onBindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder, java.lang.Object);
+ method public final android.support.v17.leanback.widget.VerticalGridPresenter.ViewHolder onCreateViewHolder(android.view.ViewGroup);
+ method public void onUnbindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder);
+ method public void setEntranceTransitionState(android.support.v17.leanback.widget.VerticalGridPresenter.ViewHolder, boolean);
+ method public final void setKeepChildForeground(boolean);
+ method public void setNumberOfColumns(int);
+ method public final void setOnItemViewClickedListener(android.support.v17.leanback.widget.OnItemViewClickedListener);
+ method public final void setOnItemViewSelectedListener(android.support.v17.leanback.widget.OnItemViewSelectedListener);
+ method public final void setShadowEnabled(boolean);
+ }
+
+ public static class VerticalGridPresenter.ViewHolder extends android.support.v17.leanback.widget.Presenter.ViewHolder {
+ ctor public VerticalGridPresenter.ViewHolder(android.support.v17.leanback.widget.VerticalGridView);
+ method public android.support.v17.leanback.widget.VerticalGridView getGridView();
+ }
+
+ public class VerticalGridView extends android.support.v17.leanback.widget.BaseGridView {
+ ctor public VerticalGridView(android.content.Context);
+ ctor public VerticalGridView(android.content.Context, android.util.AttributeSet);
+ ctor public VerticalGridView(android.content.Context, android.util.AttributeSet, int);
+ method protected void initAttributes(android.content.Context, android.util.AttributeSet);
+ method public void setColumnWidth(int);
+ method public void setNumColumns(int);
+ }
+
+ public abstract interface ViewHolderTask {
+ method public abstract void run(android.support.v7.widget.RecyclerView.ViewHolder);
+ }
+
+}
+
+package android.support.v17.leanback.widget.picker {
+
+ public class Picker extends android.widget.FrameLayout {
+ ctor public Picker(android.content.Context, android.util.AttributeSet, int);
+ method public void addOnValueChangedListener(android.support.v17.leanback.widget.picker.Picker.PickerValueListener);
+ method public float getActivatedVisibleItemCount();
+ method public android.support.v17.leanback.widget.picker.PickerColumn getColumnAt(int);
+ method public int getColumnsCount();
+ method protected int getPickerItemHeightPixels();
+ method public final int getPickerItemLayoutId();
+ method public final int getPickerItemTextViewId();
+ method public int getSelectedColumn();
+ method public final java.lang.CharSequence getSeparator();
+ method public float getVisibleItemCount();
+ method public void onColumnValueChanged(int, int);
+ method public void removeOnValueChangedListener(android.support.v17.leanback.widget.picker.Picker.PickerValueListener);
+ method public void setActivatedVisibleItemCount(float);
+ method public void setColumnAt(int, android.support.v17.leanback.widget.picker.PickerColumn);
+ method public void setColumnValue(int, int, boolean);
+ method public void setColumns(java.util.List<android.support.v17.leanback.widget.picker.PickerColumn>);
+ method public final void setPickerItemTextViewId(int);
+ method public void setSelectedColumn(int);
+ method public final void setSeparator(java.lang.CharSequence);
+ method public void setVisibleItemCount(float);
+ }
+
+ public static abstract interface Picker.PickerValueListener {
+ method public abstract void onValueChanged(android.support.v17.leanback.widget.picker.Picker, int);
+ }
+
+ public class PickerColumn {
+ ctor public PickerColumn();
+ method public int getCount();
+ method public int getCurrentValue();
+ method public java.lang.CharSequence getLabelFor(int);
+ method public java.lang.String getLabelFormat();
+ method public int getMaxValue();
+ method public int getMinValue();
+ method public java.lang.CharSequence[] getStaticLabels();
+ method public void setCurrentValue(int);
+ method public void setLabelFormat(java.lang.String);
+ method public void setMaxValue(int);
+ method public void setMinValue(int);
+ method public void setStaticLabels(java.lang.CharSequence[]);
+ }
+
+ public class TimePicker extends android.support.v17.leanback.widget.picker.Picker {
+ ctor public TimePicker(android.content.Context, android.util.AttributeSet);
+ ctor public TimePicker(android.content.Context, android.util.AttributeSet, int);
+ method public int getHour();
+ method public int getMinute();
+ method public boolean is24Hour();
+ method public boolean isPm();
+ method public void setHour(int);
+ method public void setIs24Hour(boolean);
+ method public void setMinute(int);
+ }
+
+}
+
diff --git a/v17/leanback/api/27.0.0.txt b/v17/leanback/api/27.0.0.txt
new file mode 100644
index 0000000..4ee4d94
--- /dev/null
+++ b/v17/leanback/api/27.0.0.txt
@@ -0,0 +1,3129 @@
+package android.support.v17.leanback.app {
+
+ public final class BackgroundManager {
+ method public void attach(android.view.Window);
+ method public void attachToView(android.view.View);
+ method public void clearDrawable();
+ method public final int getColor();
+ method public deprecated android.graphics.drawable.Drawable getDefaultDimLayer();
+ method public deprecated android.graphics.drawable.Drawable getDimLayer();
+ method public android.graphics.drawable.Drawable getDrawable();
+ method public static android.support.v17.leanback.app.BackgroundManager getInstance(android.app.Activity);
+ method public boolean isAttached();
+ method public boolean isAutoReleaseOnStop();
+ method public void release();
+ method public void setAutoReleaseOnStop(boolean);
+ method public void setBitmap(android.graphics.Bitmap);
+ method public void setColor(int);
+ method public deprecated void setDimLayer(android.graphics.drawable.Drawable);
+ method public void setDrawable(android.graphics.drawable.Drawable);
+ method public void setThemeDrawableResourceId(int);
+ }
+
+ public class BaseFragment extends android.support.v17.leanback.app.BrandedFragment {
+ method protected java.lang.Object createEntranceTransition();
+ method public final android.support.v17.leanback.app.ProgressBarManager getProgressBarManager();
+ method protected void onEntranceTransitionEnd();
+ method protected void onEntranceTransitionPrepare();
+ method protected void onEntranceTransitionStart();
+ method public void prepareEntranceTransition();
+ method protected void runEntranceTransition(java.lang.Object);
+ method public void startEntranceTransition();
+ }
+
+ abstract class BaseRowFragment extends android.app.Fragment {
+ method public final android.support.v17.leanback.widget.ObjectAdapter getAdapter();
+ method public final android.support.v17.leanback.widget.ItemBridgeAdapter getBridgeAdapter();
+ method public final android.support.v17.leanback.widget.PresenterSelector getPresenterSelector();
+ method public int getSelectedPosition();
+ method public final android.support.v17.leanback.widget.VerticalGridView getVerticalGridView();
+ method public void onTransitionEnd();
+ method public boolean onTransitionPrepare();
+ method public void onTransitionStart();
+ method public final void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public void setAlignment(int);
+ method public final void setPresenterSelector(android.support.v17.leanback.widget.PresenterSelector);
+ method public void setSelectedPosition(int);
+ method public void setSelectedPosition(int, boolean);
+ }
+
+ abstract class BaseRowSupportFragment extends android.support.v4.app.Fragment {
+ method public final android.support.v17.leanback.widget.ObjectAdapter getAdapter();
+ method public final android.support.v17.leanback.widget.ItemBridgeAdapter getBridgeAdapter();
+ method public final android.support.v17.leanback.widget.PresenterSelector getPresenterSelector();
+ method public int getSelectedPosition();
+ method public final android.support.v17.leanback.widget.VerticalGridView getVerticalGridView();
+ method public void onTransitionEnd();
+ method public boolean onTransitionPrepare();
+ method public void onTransitionStart();
+ method public final void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public void setAlignment(int);
+ method public final void setPresenterSelector(android.support.v17.leanback.widget.PresenterSelector);
+ method public void setSelectedPosition(int);
+ method public void setSelectedPosition(int, boolean);
+ }
+
+ public class BaseSupportFragment extends android.support.v17.leanback.app.BrandedSupportFragment {
+ method protected java.lang.Object createEntranceTransition();
+ method public final android.support.v17.leanback.app.ProgressBarManager getProgressBarManager();
+ method protected void onEntranceTransitionEnd();
+ method protected void onEntranceTransitionPrepare();
+ method protected void onEntranceTransitionStart();
+ method public void prepareEntranceTransition();
+ method protected void runEntranceTransition(java.lang.Object);
+ method public void startEntranceTransition();
+ }
+
+ public class BrandedFragment extends android.app.Fragment {
+ ctor public BrandedFragment();
+ method public android.graphics.drawable.Drawable getBadgeDrawable();
+ method public int getSearchAffordanceColor();
+ method public android.support.v17.leanback.widget.SearchOrbView.Colors getSearchAffordanceColors();
+ method public java.lang.CharSequence getTitle();
+ method public android.view.View getTitleView();
+ method public android.support.v17.leanback.widget.TitleViewAdapter getTitleViewAdapter();
+ method public void installTitleView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
+ method public final boolean isShowingTitle();
+ method public android.view.View onInflateTitleView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
+ method public void setBadgeDrawable(android.graphics.drawable.Drawable);
+ method public void setOnSearchClickedListener(android.view.View.OnClickListener);
+ method public void setSearchAffordanceColor(int);
+ method public void setSearchAffordanceColors(android.support.v17.leanback.widget.SearchOrbView.Colors);
+ method public void setTitle(java.lang.CharSequence);
+ method public void setTitleView(android.view.View);
+ method public void showTitle(boolean);
+ method public void showTitle(int);
+ }
+
+ public class BrandedSupportFragment extends android.support.v4.app.Fragment {
+ ctor public BrandedSupportFragment();
+ method public android.graphics.drawable.Drawable getBadgeDrawable();
+ method public int getSearchAffordanceColor();
+ method public android.support.v17.leanback.widget.SearchOrbView.Colors getSearchAffordanceColors();
+ method public java.lang.CharSequence getTitle();
+ method public android.view.View getTitleView();
+ method public android.support.v17.leanback.widget.TitleViewAdapter getTitleViewAdapter();
+ method public void installTitleView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
+ method public final boolean isShowingTitle();
+ method public android.view.View onInflateTitleView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
+ method public void setBadgeDrawable(android.graphics.drawable.Drawable);
+ method public void setOnSearchClickedListener(android.view.View.OnClickListener);
+ method public void setSearchAffordanceColor(int);
+ method public void setSearchAffordanceColors(android.support.v17.leanback.widget.SearchOrbView.Colors);
+ method public void setTitle(java.lang.CharSequence);
+ method public void setTitleView(android.view.View);
+ method public void showTitle(boolean);
+ method public void showTitle(int);
+ }
+
+ public class BrowseFragment extends android.support.v17.leanback.app.BaseFragment {
+ ctor public BrowseFragment();
+ method public static android.os.Bundle createArgs(android.os.Bundle, java.lang.String, int);
+ method public void enableMainFragmentScaling(boolean);
+ method public deprecated void enableRowScaling(boolean);
+ method public android.support.v17.leanback.widget.ObjectAdapter getAdapter();
+ method public int getBrandColor();
+ method public android.support.v17.leanback.app.HeadersFragment getHeadersFragment();
+ method public int getHeadersState();
+ method public android.app.Fragment getMainFragment();
+ method public final android.support.v17.leanback.app.BrowseFragment.MainFragmentAdapterRegistry getMainFragmentRegistry();
+ method public android.support.v17.leanback.widget.OnItemViewClickedListener getOnItemViewClickedListener();
+ method public android.support.v17.leanback.widget.OnItemViewSelectedListener getOnItemViewSelectedListener();
+ method public android.support.v17.leanback.app.RowsFragment getRowsFragment();
+ method public int getSelectedPosition();
+ method public android.support.v17.leanback.widget.RowPresenter.ViewHolder getSelectedRowViewHolder();
+ method public final boolean isHeadersTransitionOnBackEnabled();
+ method public boolean isInHeadersTransition();
+ method public boolean isShowingHeaders();
+ method public android.support.v17.leanback.app.HeadersFragment onCreateHeadersFragment();
+ method public void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public void setBrandColor(int);
+ method public void setBrowseTransitionListener(android.support.v17.leanback.app.BrowseFragment.BrowseTransitionListener);
+ method public void setHeaderPresenterSelector(android.support.v17.leanback.widget.PresenterSelector);
+ method public void setHeadersState(int);
+ method public final void setHeadersTransitionOnBackEnabled(boolean);
+ method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.OnItemViewClickedListener);
+ method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.OnItemViewSelectedListener);
+ method public void setSelectedPosition(int);
+ method public void setSelectedPosition(int, boolean);
+ method public void setSelectedPosition(int, boolean, android.support.v17.leanback.widget.Presenter.ViewHolderTask);
+ method public void startHeadersTransition(boolean);
+ field public static final int HEADERS_DISABLED = 3; // 0x3
+ field public static final int HEADERS_ENABLED = 1; // 0x1
+ field public static final int HEADERS_HIDDEN = 2; // 0x2
+ }
+
+ public static class BrowseFragment.BrowseTransitionListener {
+ ctor public BrowseFragment.BrowseTransitionListener();
+ method public void onHeadersTransitionStart(boolean);
+ method public void onHeadersTransitionStop(boolean);
+ }
+
+ public static abstract class BrowseFragment.FragmentFactory<T extends android.app.Fragment> {
+ ctor public BrowseFragment.FragmentFactory();
+ method public abstract T createFragment(java.lang.Object);
+ }
+
+ public static abstract interface BrowseFragment.FragmentHost {
+ method public abstract void notifyDataReady(android.support.v17.leanback.app.BrowseFragment.MainFragmentAdapter);
+ method public abstract void notifyViewCreated(android.support.v17.leanback.app.BrowseFragment.MainFragmentAdapter);
+ method public abstract void showTitleView(boolean);
+ }
+
+ public static class BrowseFragment.ListRowFragmentFactory extends android.support.v17.leanback.app.BrowseFragment.FragmentFactory {
+ ctor public BrowseFragment.ListRowFragmentFactory();
+ method public android.support.v17.leanback.app.RowsFragment createFragment(java.lang.Object);
+ }
+
+ public static class BrowseFragment.MainFragmentAdapter<T extends android.app.Fragment> {
+ ctor public BrowseFragment.MainFragmentAdapter(T);
+ method public final T getFragment();
+ method public final android.support.v17.leanback.app.BrowseFragment.FragmentHost getFragmentHost();
+ method public boolean isScalingEnabled();
+ method public boolean isScrolling();
+ method public void onTransitionEnd();
+ method public boolean onTransitionPrepare();
+ method public void onTransitionStart();
+ method public void setAlignment(int);
+ method public void setEntranceTransitionState(boolean);
+ method public void setExpand(boolean);
+ method public void setScalingEnabled(boolean);
+ }
+
+ public static abstract interface BrowseFragment.MainFragmentAdapterProvider {
+ method public abstract android.support.v17.leanback.app.BrowseFragment.MainFragmentAdapter getMainFragmentAdapter();
+ }
+
+ public static final class BrowseFragment.MainFragmentAdapterRegistry {
+ ctor public BrowseFragment.MainFragmentAdapterRegistry();
+ method public android.app.Fragment createFragment(java.lang.Object);
+ method public void registerFragment(java.lang.Class, android.support.v17.leanback.app.BrowseFragment.FragmentFactory);
+ }
+
+ public static class BrowseFragment.MainFragmentRowsAdapter<T extends android.app.Fragment> {
+ ctor public BrowseFragment.MainFragmentRowsAdapter(T);
+ method public android.support.v17.leanback.widget.RowPresenter.ViewHolder findRowViewHolderByPosition(int);
+ method public final T getFragment();
+ method public int getSelectedPosition();
+ method public void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.OnItemViewClickedListener);
+ method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.OnItemViewSelectedListener);
+ method public void setSelectedPosition(int, boolean, android.support.v17.leanback.widget.Presenter.ViewHolderTask);
+ method public void setSelectedPosition(int, boolean);
+ }
+
+ public static abstract interface BrowseFragment.MainFragmentRowsAdapterProvider {
+ method public abstract android.support.v17.leanback.app.BrowseFragment.MainFragmentRowsAdapter getMainFragmentRowsAdapter();
+ }
+
+ public class BrowseSupportFragment extends android.support.v17.leanback.app.BaseSupportFragment {
+ ctor public BrowseSupportFragment();
+ method public static android.os.Bundle createArgs(android.os.Bundle, java.lang.String, int);
+ method public void enableMainFragmentScaling(boolean);
+ method public deprecated void enableRowScaling(boolean);
+ method public android.support.v17.leanback.widget.ObjectAdapter getAdapter();
+ method public int getBrandColor();
+ method public int getHeadersState();
+ method public android.support.v17.leanback.app.HeadersSupportFragment getHeadersSupportFragment();
+ method public android.support.v4.app.Fragment getMainFragment();
+ method public final android.support.v17.leanback.app.BrowseSupportFragment.MainFragmentAdapterRegistry getMainFragmentRegistry();
+ method public android.support.v17.leanback.widget.OnItemViewClickedListener getOnItemViewClickedListener();
+ method public android.support.v17.leanback.widget.OnItemViewSelectedListener getOnItemViewSelectedListener();
+ method public android.support.v17.leanback.app.RowsSupportFragment getRowsSupportFragment();
+ method public int getSelectedPosition();
+ method public android.support.v17.leanback.widget.RowPresenter.ViewHolder getSelectedRowViewHolder();
+ method public final boolean isHeadersTransitionOnBackEnabled();
+ method public boolean isInHeadersTransition();
+ method public boolean isShowingHeaders();
+ method public android.support.v17.leanback.app.HeadersSupportFragment onCreateHeadersSupportFragment();
+ method public void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public void setBrandColor(int);
+ method public void setBrowseTransitionListener(android.support.v17.leanback.app.BrowseSupportFragment.BrowseTransitionListener);
+ method public void setHeaderPresenterSelector(android.support.v17.leanback.widget.PresenterSelector);
+ method public void setHeadersState(int);
+ method public final void setHeadersTransitionOnBackEnabled(boolean);
+ method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.OnItemViewClickedListener);
+ method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.OnItemViewSelectedListener);
+ method public void setSelectedPosition(int);
+ method public void setSelectedPosition(int, boolean);
+ method public void setSelectedPosition(int, boolean, android.support.v17.leanback.widget.Presenter.ViewHolderTask);
+ method public void startHeadersTransition(boolean);
+ field public static final int HEADERS_DISABLED = 3; // 0x3
+ field public static final int HEADERS_ENABLED = 1; // 0x1
+ field public static final int HEADERS_HIDDEN = 2; // 0x2
+ }
+
+ public static class BrowseSupportFragment.BrowseTransitionListener {
+ ctor public BrowseSupportFragment.BrowseTransitionListener();
+ method public void onHeadersTransitionStart(boolean);
+ method public void onHeadersTransitionStop(boolean);
+ }
+
+ public static abstract class BrowseSupportFragment.FragmentFactory<T extends android.support.v4.app.Fragment> {
+ ctor public BrowseSupportFragment.FragmentFactory();
+ method public abstract T createFragment(java.lang.Object);
+ }
+
+ public static abstract interface BrowseSupportFragment.FragmentHost {
+ method public abstract void notifyDataReady(android.support.v17.leanback.app.BrowseSupportFragment.MainFragmentAdapter);
+ method public abstract void notifyViewCreated(android.support.v17.leanback.app.BrowseSupportFragment.MainFragmentAdapter);
+ method public abstract void showTitleView(boolean);
+ }
+
+ public static class BrowseSupportFragment.ListRowFragmentFactory extends android.support.v17.leanback.app.BrowseSupportFragment.FragmentFactory {
+ ctor public BrowseSupportFragment.ListRowFragmentFactory();
+ method public android.support.v17.leanback.app.RowsSupportFragment createFragment(java.lang.Object);
+ }
+
+ public static class BrowseSupportFragment.MainFragmentAdapter<T extends android.support.v4.app.Fragment> {
+ ctor public BrowseSupportFragment.MainFragmentAdapter(T);
+ method public final T getFragment();
+ method public final android.support.v17.leanback.app.BrowseSupportFragment.FragmentHost getFragmentHost();
+ method public boolean isScalingEnabled();
+ method public boolean isScrolling();
+ method public void onTransitionEnd();
+ method public boolean onTransitionPrepare();
+ method public void onTransitionStart();
+ method public void setAlignment(int);
+ method public void setEntranceTransitionState(boolean);
+ method public void setExpand(boolean);
+ method public void setScalingEnabled(boolean);
+ }
+
+ public static abstract interface BrowseSupportFragment.MainFragmentAdapterProvider {
+ method public abstract android.support.v17.leanback.app.BrowseSupportFragment.MainFragmentAdapter getMainFragmentAdapter();
+ }
+
+ public static final class BrowseSupportFragment.MainFragmentAdapterRegistry {
+ ctor public BrowseSupportFragment.MainFragmentAdapterRegistry();
+ method public android.support.v4.app.Fragment createFragment(java.lang.Object);
+ method public void registerFragment(java.lang.Class, android.support.v17.leanback.app.BrowseSupportFragment.FragmentFactory);
+ }
+
+ public static class BrowseSupportFragment.MainFragmentRowsAdapter<T extends android.support.v4.app.Fragment> {
+ ctor public BrowseSupportFragment.MainFragmentRowsAdapter(T);
+ method public android.support.v17.leanback.widget.RowPresenter.ViewHolder findRowViewHolderByPosition(int);
+ method public final T getFragment();
+ method public int getSelectedPosition();
+ method public void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.OnItemViewClickedListener);
+ method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.OnItemViewSelectedListener);
+ method public void setSelectedPosition(int, boolean, android.support.v17.leanback.widget.Presenter.ViewHolderTask);
+ method public void setSelectedPosition(int, boolean);
+ }
+
+ public static abstract interface BrowseSupportFragment.MainFragmentRowsAdapterProvider {
+ method public abstract android.support.v17.leanback.app.BrowseSupportFragment.MainFragmentRowsAdapter getMainFragmentRowsAdapter();
+ }
+
+ public class DetailsFragment extends android.support.v17.leanback.app.BaseFragment {
+ ctor public DetailsFragment();
+ method public android.support.v17.leanback.widget.ObjectAdapter getAdapter();
+ method public android.support.v17.leanback.widget.BaseOnItemViewClickedListener getOnItemViewClickedListener();
+ method public android.support.v17.leanback.widget.DetailsParallax getParallax();
+ method public android.support.v17.leanback.app.RowsFragment getRowsFragment();
+ method protected deprecated android.view.View inflateTitle(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
+ method protected void onSetDetailsOverviewRowStatus(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter, android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder, int, int, int);
+ method protected void onSetRowStatus(android.support.v17.leanback.widget.RowPresenter, android.support.v17.leanback.widget.RowPresenter.ViewHolder, int, int, int);
+ method public void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.BaseOnItemViewClickedListener);
+ method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.BaseOnItemViewSelectedListener);
+ method public void setSelectedPosition(int);
+ method public void setSelectedPosition(int, boolean);
+ method protected void setupDetailsOverviewRowPresenter(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter);
+ method protected void setupPresenter(android.support.v17.leanback.widget.Presenter);
+ }
+
+ public class DetailsFragmentBackgroundController {
+ ctor public DetailsFragmentBackgroundController(android.support.v17.leanback.app.DetailsFragment);
+ method public boolean canNavigateToVideoFragment();
+ method public void enableParallax();
+ method public void enableParallax(android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.support.v17.leanback.widget.ParallaxTarget.PropertyValuesHolderTarget);
+ method public final android.app.Fragment findOrCreateVideoFragment();
+ method public final android.graphics.drawable.Drawable getBottomDrawable();
+ method public final android.graphics.Bitmap getCoverBitmap();
+ method public final android.graphics.drawable.Drawable getCoverDrawable();
+ method public final int getParallaxDrawableMaxOffset();
+ method public final android.support.v17.leanback.media.PlaybackGlue getPlaybackGlue();
+ method public final int getSolidColor();
+ method public android.support.v17.leanback.media.PlaybackGlueHost onCreateGlueHost();
+ method public android.app.Fragment onCreateVideoFragment();
+ method public final void setCoverBitmap(android.graphics.Bitmap);
+ method public final void setParallaxDrawableMaxOffset(int);
+ method public final void setSolidColor(int);
+ method public void setupVideoPlayback(android.support.v17.leanback.media.PlaybackGlue);
+ method public final void switchToRows();
+ method public final void switchToVideo();
+ }
+
+ public class DetailsSupportFragment extends android.support.v17.leanback.app.BaseSupportFragment {
+ ctor public DetailsSupportFragment();
+ method public android.support.v17.leanback.widget.ObjectAdapter getAdapter();
+ method public android.support.v17.leanback.widget.BaseOnItemViewClickedListener getOnItemViewClickedListener();
+ method public android.support.v17.leanback.widget.DetailsParallax getParallax();
+ method public android.support.v17.leanback.app.RowsSupportFragment getRowsSupportFragment();
+ method protected deprecated android.view.View inflateTitle(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
+ method protected void onSetDetailsOverviewRowStatus(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter, android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder, int, int, int);
+ method protected void onSetRowStatus(android.support.v17.leanback.widget.RowPresenter, android.support.v17.leanback.widget.RowPresenter.ViewHolder, int, int, int);
+ method public void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.BaseOnItemViewClickedListener);
+ method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.BaseOnItemViewSelectedListener);
+ method public void setSelectedPosition(int);
+ method public void setSelectedPosition(int, boolean);
+ method protected void setupDetailsOverviewRowPresenter(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter);
+ method protected void setupPresenter(android.support.v17.leanback.widget.Presenter);
+ }
+
+ public class DetailsSupportFragmentBackgroundController {
+ ctor public DetailsSupportFragmentBackgroundController(android.support.v17.leanback.app.DetailsSupportFragment);
+ method public boolean canNavigateToVideoSupportFragment();
+ method public void enableParallax();
+ method public void enableParallax(android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.support.v17.leanback.widget.ParallaxTarget.PropertyValuesHolderTarget);
+ method public final android.support.v4.app.Fragment findOrCreateVideoSupportFragment();
+ method public final android.graphics.drawable.Drawable getBottomDrawable();
+ method public final android.graphics.Bitmap getCoverBitmap();
+ method public final android.graphics.drawable.Drawable getCoverDrawable();
+ method public final int getParallaxDrawableMaxOffset();
+ method public final android.support.v17.leanback.media.PlaybackGlue getPlaybackGlue();
+ method public final int getSolidColor();
+ method public android.support.v17.leanback.media.PlaybackGlueHost onCreateGlueHost();
+ method public android.support.v4.app.Fragment onCreateVideoSupportFragment();
+ method public final void setCoverBitmap(android.graphics.Bitmap);
+ method public final void setParallaxDrawableMaxOffset(int);
+ method public final void setSolidColor(int);
+ method public void setupVideoPlayback(android.support.v17.leanback.media.PlaybackGlue);
+ method public final void switchToRows();
+ method public final void switchToVideo();
+ }
+
+ public class ErrorFragment extends android.support.v17.leanback.app.BrandedFragment {
+ ctor public ErrorFragment();
+ method public android.graphics.drawable.Drawable getBackgroundDrawable();
+ method public android.view.View.OnClickListener getButtonClickListener();
+ method public java.lang.String getButtonText();
+ method public android.graphics.drawable.Drawable getImageDrawable();
+ method public java.lang.CharSequence getMessage();
+ method public boolean isBackgroundTranslucent();
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+ method public void setButtonClickListener(android.view.View.OnClickListener);
+ method public void setButtonText(java.lang.String);
+ method public void setDefaultBackground(boolean);
+ method public void setImageDrawable(android.graphics.drawable.Drawable);
+ method public void setMessage(java.lang.CharSequence);
+ }
+
+ public class ErrorSupportFragment extends android.support.v17.leanback.app.BrandedSupportFragment {
+ ctor public ErrorSupportFragment();
+ method public android.graphics.drawable.Drawable getBackgroundDrawable();
+ method public android.view.View.OnClickListener getButtonClickListener();
+ method public java.lang.String getButtonText();
+ method public android.graphics.drawable.Drawable getImageDrawable();
+ method public java.lang.CharSequence getMessage();
+ method public boolean isBackgroundTranslucent();
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+ method public void setButtonClickListener(android.view.View.OnClickListener);
+ method public void setButtonText(java.lang.String);
+ method public void setDefaultBackground(boolean);
+ method public void setImageDrawable(android.graphics.drawable.Drawable);
+ method public void setMessage(java.lang.CharSequence);
+ }
+
+ public class GuidedStepFragment extends android.app.Fragment {
+ ctor public GuidedStepFragment();
+ method public static int add(android.app.FragmentManager, android.support.v17.leanback.app.GuidedStepFragment);
+ method public static int add(android.app.FragmentManager, android.support.v17.leanback.app.GuidedStepFragment, int);
+ method public static int addAsRoot(android.app.Activity, android.support.v17.leanback.app.GuidedStepFragment, int);
+ method public void collapseAction(boolean);
+ method public void collapseSubActions();
+ method public void expandAction(android.support.v17.leanback.widget.GuidedAction, boolean);
+ method public void expandSubActions(android.support.v17.leanback.widget.GuidedAction);
+ method public android.support.v17.leanback.widget.GuidedAction findActionById(long);
+ method public int findActionPositionById(long);
+ method public android.support.v17.leanback.widget.GuidedAction findButtonActionById(long);
+ method public int findButtonActionPositionById(long);
+ method public void finishGuidedStepFragments();
+ method public android.view.View getActionItemView(int);
+ method public java.util.List<android.support.v17.leanback.widget.GuidedAction> getActions();
+ method public android.view.View getButtonActionItemView(int);
+ method public java.util.List<android.support.v17.leanback.widget.GuidedAction> getButtonActions();
+ method public static android.support.v17.leanback.app.GuidedStepFragment getCurrentGuidedStepFragment(android.app.FragmentManager);
+ method public android.support.v17.leanback.widget.GuidanceStylist getGuidanceStylist();
+ method public android.support.v17.leanback.widget.GuidedActionsStylist getGuidedActionsStylist();
+ method public android.support.v17.leanback.widget.GuidedActionsStylist getGuidedButtonActionsStylist();
+ method public int getSelectedActionPosition();
+ method public int getSelectedButtonActionPosition();
+ method public int getUiStyle();
+ method public boolean isExpanded();
+ method public boolean isFocusOutEndAllowed();
+ method public boolean isFocusOutStartAllowed();
+ method public boolean isSubActionsExpanded();
+ method public void notifyActionChanged(int);
+ method public void notifyButtonActionChanged(int);
+ method protected void onAddSharedElementTransition(android.app.FragmentTransaction, android.support.v17.leanback.app.GuidedStepFragment);
+ method public void onCreateActions(java.util.List<android.support.v17.leanback.widget.GuidedAction>, android.os.Bundle);
+ method public android.support.v17.leanback.widget.GuidedActionsStylist onCreateActionsStylist();
+ method public android.view.View onCreateBackgroundView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
+ method public void onCreateButtonActions(java.util.List<android.support.v17.leanback.widget.GuidedAction>, android.os.Bundle);
+ method public android.support.v17.leanback.widget.GuidedActionsStylist onCreateButtonActionsStylist();
+ method public android.support.v17.leanback.widget.GuidanceStylist.Guidance onCreateGuidance(android.os.Bundle);
+ method public android.support.v17.leanback.widget.GuidanceStylist onCreateGuidanceStylist();
+ method public void onGuidedActionClicked(android.support.v17.leanback.widget.GuidedAction);
+ method public void onGuidedActionEditCanceled(android.support.v17.leanback.widget.GuidedAction);
+ method public deprecated void onGuidedActionEdited(android.support.v17.leanback.widget.GuidedAction);
+ method public long onGuidedActionEditedAndProceed(android.support.v17.leanback.widget.GuidedAction);
+ method public void onGuidedActionFocused(android.support.v17.leanback.widget.GuidedAction);
+ method protected void onProvideFragmentTransitions();
+ method public int onProvideTheme();
+ method public boolean onSubGuidedActionClicked(android.support.v17.leanback.widget.GuidedAction);
+ method public void openInEditMode(android.support.v17.leanback.widget.GuidedAction);
+ method public void popBackStackToGuidedStepFragment(java.lang.Class, int);
+ method public void setActions(java.util.List<android.support.v17.leanback.widget.GuidedAction>);
+ method public void setButtonActions(java.util.List<android.support.v17.leanback.widget.GuidedAction>);
+ method public void setSelectedActionPosition(int);
+ method public void setSelectedButtonActionPosition(int);
+ method public void setUiStyle(int);
+ field public static final java.lang.String EXTRA_UI_STYLE = "uiStyle";
+ field public static final int UI_STYLE_ACTIVITY_ROOT = 2; // 0x2
+ field public static final deprecated int UI_STYLE_DEFAULT = 0; // 0x0
+ field public static final int UI_STYLE_ENTRANCE = 1; // 0x1
+ field public static final int UI_STYLE_REPLACE = 0; // 0x0
+ }
+
+ public class GuidedStepSupportFragment extends android.support.v4.app.Fragment {
+ ctor public GuidedStepSupportFragment();
+ method public static int add(android.support.v4.app.FragmentManager, android.support.v17.leanback.app.GuidedStepSupportFragment);
+ method public static int add(android.support.v4.app.FragmentManager, android.support.v17.leanback.app.GuidedStepSupportFragment, int);
+ method public static int addAsRoot(android.support.v4.app.FragmentActivity, android.support.v17.leanback.app.GuidedStepSupportFragment, int);
+ method public void collapseAction(boolean);
+ method public void collapseSubActions();
+ method public void expandAction(android.support.v17.leanback.widget.GuidedAction, boolean);
+ method public void expandSubActions(android.support.v17.leanback.widget.GuidedAction);
+ method public android.support.v17.leanback.widget.GuidedAction findActionById(long);
+ method public int findActionPositionById(long);
+ method public android.support.v17.leanback.widget.GuidedAction findButtonActionById(long);
+ method public int findButtonActionPositionById(long);
+ method public void finishGuidedStepSupportFragments();
+ method public android.view.View getActionItemView(int);
+ method public java.util.List<android.support.v17.leanback.widget.GuidedAction> getActions();
+ method public android.view.View getButtonActionItemView(int);
+ method public java.util.List<android.support.v17.leanback.widget.GuidedAction> getButtonActions();
+ method public static android.support.v17.leanback.app.GuidedStepSupportFragment getCurrentGuidedStepSupportFragment(android.support.v4.app.FragmentManager);
+ method public android.support.v17.leanback.widget.GuidanceStylist getGuidanceStylist();
+ method public android.support.v17.leanback.widget.GuidedActionsStylist getGuidedActionsStylist();
+ method public android.support.v17.leanback.widget.GuidedActionsStylist getGuidedButtonActionsStylist();
+ method public int getSelectedActionPosition();
+ method public int getSelectedButtonActionPosition();
+ method public int getUiStyle();
+ method public boolean isExpanded();
+ method public boolean isFocusOutEndAllowed();
+ method public boolean isFocusOutStartAllowed();
+ method public boolean isSubActionsExpanded();
+ method public void notifyActionChanged(int);
+ method public void notifyButtonActionChanged(int);
+ method protected void onAddSharedElementTransition(android.support.v4.app.FragmentTransaction, android.support.v17.leanback.app.GuidedStepSupportFragment);
+ method public void onCreateActions(java.util.List<android.support.v17.leanback.widget.GuidedAction>, android.os.Bundle);
+ method public android.support.v17.leanback.widget.GuidedActionsStylist onCreateActionsStylist();
+ method public android.view.View onCreateBackgroundView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
+ method public void onCreateButtonActions(java.util.List<android.support.v17.leanback.widget.GuidedAction>, android.os.Bundle);
+ method public android.support.v17.leanback.widget.GuidedActionsStylist onCreateButtonActionsStylist();
+ method public android.support.v17.leanback.widget.GuidanceStylist.Guidance onCreateGuidance(android.os.Bundle);
+ method public android.support.v17.leanback.widget.GuidanceStylist onCreateGuidanceStylist();
+ method public void onGuidedActionClicked(android.support.v17.leanback.widget.GuidedAction);
+ method public void onGuidedActionEditCanceled(android.support.v17.leanback.widget.GuidedAction);
+ method public deprecated void onGuidedActionEdited(android.support.v17.leanback.widget.GuidedAction);
+ method public long onGuidedActionEditedAndProceed(android.support.v17.leanback.widget.GuidedAction);
+ method public void onGuidedActionFocused(android.support.v17.leanback.widget.GuidedAction);
+ method protected void onProvideFragmentTransitions();
+ method public int onProvideTheme();
+ method public boolean onSubGuidedActionClicked(android.support.v17.leanback.widget.GuidedAction);
+ method public void openInEditMode(android.support.v17.leanback.widget.GuidedAction);
+ method public void popBackStackToGuidedStepSupportFragment(java.lang.Class, int);
+ method public void setActions(java.util.List<android.support.v17.leanback.widget.GuidedAction>);
+ method public void setButtonActions(java.util.List<android.support.v17.leanback.widget.GuidedAction>);
+ method public void setSelectedActionPosition(int);
+ method public void setSelectedButtonActionPosition(int);
+ method public void setUiStyle(int);
+ field public static final java.lang.String EXTRA_UI_STYLE = "uiStyle";
+ field public static final int UI_STYLE_ACTIVITY_ROOT = 2; // 0x2
+ field public static final deprecated int UI_STYLE_DEFAULT = 0; // 0x0
+ field public static final int UI_STYLE_ENTRANCE = 1; // 0x1
+ field public static final int UI_STYLE_REPLACE = 0; // 0x0
+ }
+
+ public class HeadersFragment extends android.support.v17.leanback.app.BaseRowFragment {
+ ctor public HeadersFragment();
+ method public boolean isScrolling();
+ method public void setOnHeaderClickedListener(android.support.v17.leanback.app.HeadersFragment.OnHeaderClickedListener);
+ method public void setOnHeaderViewSelectedListener(android.support.v17.leanback.app.HeadersFragment.OnHeaderViewSelectedListener);
+ }
+
+ public static abstract interface HeadersFragment.OnHeaderClickedListener {
+ method public abstract void onHeaderClicked(android.support.v17.leanback.widget.RowHeaderPresenter.ViewHolder, android.support.v17.leanback.widget.Row);
+ }
+
+ public static abstract interface HeadersFragment.OnHeaderViewSelectedListener {
+ method public abstract void onHeaderSelected(android.support.v17.leanback.widget.RowHeaderPresenter.ViewHolder, android.support.v17.leanback.widget.Row);
+ }
+
+ public class HeadersSupportFragment extends android.support.v17.leanback.app.BaseRowSupportFragment {
+ ctor public HeadersSupportFragment();
+ method public boolean isScrolling();
+ method public void setOnHeaderClickedListener(android.support.v17.leanback.app.HeadersSupportFragment.OnHeaderClickedListener);
+ method public void setOnHeaderViewSelectedListener(android.support.v17.leanback.app.HeadersSupportFragment.OnHeaderViewSelectedListener);
+ }
+
+ public static abstract interface HeadersSupportFragment.OnHeaderClickedListener {
+ method public abstract void onHeaderClicked(android.support.v17.leanback.widget.RowHeaderPresenter.ViewHolder, android.support.v17.leanback.widget.Row);
+ }
+
+ public static abstract interface HeadersSupportFragment.OnHeaderViewSelectedListener {
+ method public abstract void onHeaderSelected(android.support.v17.leanback.widget.RowHeaderPresenter.ViewHolder, android.support.v17.leanback.widget.Row);
+ }
+
+ public abstract class OnboardingFragment extends android.app.Fragment {
+ ctor public OnboardingFragment();
+ method public final int getArrowBackgroundColor();
+ method public final int getArrowColor();
+ method protected final int getCurrentPageIndex();
+ method public final int getDescriptionViewTextColor();
+ method public final int getDotBackgroundColor();
+ method public final int getIconResourceId();
+ method public final int getLogoResourceId();
+ method protected abstract int getPageCount();
+ method protected abstract java.lang.CharSequence getPageDescription(int);
+ method protected abstract java.lang.CharSequence getPageTitle(int);
+ method public final java.lang.CharSequence getStartButtonText();
+ method public final int getTitleViewTextColor();
+ method protected final boolean isLogoAnimationFinished();
+ method protected void moveToNextPage();
+ method protected void moveToPreviousPage();
+ method protected abstract android.view.View onCreateBackgroundView(android.view.LayoutInflater, android.view.ViewGroup);
+ method protected abstract android.view.View onCreateContentView(android.view.LayoutInflater, android.view.ViewGroup);
+ method protected android.animation.Animator onCreateDescriptionAnimator();
+ method protected android.animation.Animator onCreateEnterAnimation();
+ method protected abstract android.view.View onCreateForegroundView(android.view.LayoutInflater, android.view.ViewGroup);
+ method protected android.animation.Animator onCreateLogoAnimation();
+ method protected android.animation.Animator onCreateTitleAnimator();
+ method protected void onFinishFragment();
+ method protected void onLogoAnimationFinished();
+ method protected void onPageChanged(int, int);
+ method public int onProvideTheme();
+ method public void setArrowBackgroundColor(int);
+ method public void setArrowColor(int);
+ method public void setDescriptionViewTextColor(int);
+ method public void setDotBackgroundColor(int);
+ method public final void setIconResouceId(int);
+ method public final void setLogoResourceId(int);
+ method public void setStartButtonText(java.lang.CharSequence);
+ method public void setTitleViewTextColor(int);
+ method protected final void startEnterAnimation(boolean);
+ }
+
+ public abstract class OnboardingSupportFragment extends android.support.v4.app.Fragment {
+ ctor public OnboardingSupportFragment();
+ method public final int getArrowBackgroundColor();
+ method public final int getArrowColor();
+ method protected final int getCurrentPageIndex();
+ method public final int getDescriptionViewTextColor();
+ method public final int getDotBackgroundColor();
+ method public final int getIconResourceId();
+ method public final int getLogoResourceId();
+ method protected abstract int getPageCount();
+ method protected abstract java.lang.CharSequence getPageDescription(int);
+ method protected abstract java.lang.CharSequence getPageTitle(int);
+ method public final java.lang.CharSequence getStartButtonText();
+ method public final int getTitleViewTextColor();
+ method protected final boolean isLogoAnimationFinished();
+ method protected void moveToNextPage();
+ method protected void moveToPreviousPage();
+ method protected abstract android.view.View onCreateBackgroundView(android.view.LayoutInflater, android.view.ViewGroup);
+ method protected abstract android.view.View onCreateContentView(android.view.LayoutInflater, android.view.ViewGroup);
+ method protected android.animation.Animator onCreateDescriptionAnimator();
+ method protected android.animation.Animator onCreateEnterAnimation();
+ method protected abstract android.view.View onCreateForegroundView(android.view.LayoutInflater, android.view.ViewGroup);
+ method protected android.animation.Animator onCreateLogoAnimation();
+ method protected android.animation.Animator onCreateTitleAnimator();
+ method protected void onFinishFragment();
+ method protected void onLogoAnimationFinished();
+ method protected void onPageChanged(int, int);
+ method public int onProvideTheme();
+ method public void setArrowBackgroundColor(int);
+ method public void setArrowColor(int);
+ method public void setDescriptionViewTextColor(int);
+ method public void setDotBackgroundColor(int);
+ method public final void setIconResouceId(int);
+ method public final void setLogoResourceId(int);
+ method public void setStartButtonText(java.lang.CharSequence);
+ method public void setTitleViewTextColor(int);
+ method protected final void startEnterAnimation(boolean);
+ }
+
+ public class PlaybackFragment extends android.app.Fragment {
+ ctor public PlaybackFragment();
+ method public deprecated void fadeOut();
+ method public android.support.v17.leanback.widget.ObjectAdapter getAdapter();
+ method public int getBackgroundType();
+ method public android.support.v17.leanback.app.ProgressBarManager getProgressBarManager();
+ method public void hideControlsOverlay(boolean);
+ method public boolean isControlsOverlayAutoHideEnabled();
+ method public boolean isControlsOverlayVisible();
+ method public deprecated boolean isFadingEnabled();
+ method public void notifyPlaybackRowChanged();
+ method protected void onBufferingStateChanged(boolean);
+ method protected void onError(int, java.lang.CharSequence);
+ method protected void onVideoSizeChanged(int, int);
+ method public void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public void setBackgroundType(int);
+ method public void setControlsOverlayAutoHideEnabled(boolean);
+ method public deprecated void setFadingEnabled(boolean);
+ method public void setHostCallback(android.support.v17.leanback.media.PlaybackGlueHost.HostCallback);
+ method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.BaseOnItemViewClickedListener);
+ method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.BaseOnItemViewSelectedListener);
+ method public final void setOnKeyInterceptListener(android.view.View.OnKeyListener);
+ method public void setOnPlaybackItemViewClickedListener(android.support.v17.leanback.widget.BaseOnItemViewClickedListener);
+ method public void setPlaybackRow(android.support.v17.leanback.widget.Row);
+ method public void setPlaybackRowPresenter(android.support.v17.leanback.widget.PlaybackRowPresenter);
+ method public void setPlaybackSeekUiClient(android.support.v17.leanback.widget.PlaybackSeekUi.Client);
+ method public void setSelectedPosition(int);
+ method public void setSelectedPosition(int, boolean);
+ method public void showControlsOverlay(boolean);
+ method public void tickle();
+ field public static final int BG_DARK = 1; // 0x1
+ field public static final int BG_LIGHT = 2; // 0x2
+ field public static final int BG_NONE = 0; // 0x0
+ }
+
+ public class PlaybackFragmentGlueHost extends android.support.v17.leanback.media.PlaybackGlueHost implements android.support.v17.leanback.widget.PlaybackSeekUi {
+ ctor public PlaybackFragmentGlueHost(android.support.v17.leanback.app.PlaybackFragment);
+ method public void fadeOut();
+ method public void setPlaybackSeekUiClient(android.support.v17.leanback.widget.PlaybackSeekUi.Client);
+ }
+
+ public class PlaybackSupportFragment extends android.support.v4.app.Fragment {
+ ctor public PlaybackSupportFragment();
+ method public deprecated void fadeOut();
+ method public android.support.v17.leanback.widget.ObjectAdapter getAdapter();
+ method public int getBackgroundType();
+ method public android.support.v17.leanback.app.ProgressBarManager getProgressBarManager();
+ method public void hideControlsOverlay(boolean);
+ method public boolean isControlsOverlayAutoHideEnabled();
+ method public boolean isControlsOverlayVisible();
+ method public deprecated boolean isFadingEnabled();
+ method public void notifyPlaybackRowChanged();
+ method protected void onBufferingStateChanged(boolean);
+ method protected void onError(int, java.lang.CharSequence);
+ method protected void onVideoSizeChanged(int, int);
+ method public void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public void setBackgroundType(int);
+ method public void setControlsOverlayAutoHideEnabled(boolean);
+ method public deprecated void setFadingEnabled(boolean);
+ method public void setHostCallback(android.support.v17.leanback.media.PlaybackGlueHost.HostCallback);
+ method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.BaseOnItemViewClickedListener);
+ method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.BaseOnItemViewSelectedListener);
+ method public final void setOnKeyInterceptListener(android.view.View.OnKeyListener);
+ method public void setOnPlaybackItemViewClickedListener(android.support.v17.leanback.widget.BaseOnItemViewClickedListener);
+ method public void setPlaybackRow(android.support.v17.leanback.widget.Row);
+ method public void setPlaybackRowPresenter(android.support.v17.leanback.widget.PlaybackRowPresenter);
+ method public void setPlaybackSeekUiClient(android.support.v17.leanback.widget.PlaybackSeekUi.Client);
+ method public void setSelectedPosition(int);
+ method public void setSelectedPosition(int, boolean);
+ method public void showControlsOverlay(boolean);
+ method public void tickle();
+ field public static final int BG_DARK = 1; // 0x1
+ field public static final int BG_LIGHT = 2; // 0x2
+ field public static final int BG_NONE = 0; // 0x0
+ }
+
+ public class PlaybackSupportFragmentGlueHost extends android.support.v17.leanback.media.PlaybackGlueHost implements android.support.v17.leanback.widget.PlaybackSeekUi {
+ ctor public PlaybackSupportFragmentGlueHost(android.support.v17.leanback.app.PlaybackSupportFragment);
+ method public void fadeOut();
+ method public void setPlaybackSeekUiClient(android.support.v17.leanback.widget.PlaybackSeekUi.Client);
+ }
+
+ public final class ProgressBarManager {
+ ctor public ProgressBarManager();
+ method public void disableProgressBar();
+ method public void enableProgressBar();
+ method public long getInitialDelay();
+ method public void hide();
+ method public void setInitialDelay(long);
+ method public void setProgressBarView(android.view.View);
+ method public void setRootView(android.view.ViewGroup);
+ method public void show();
+ }
+
+ public class RowsFragment extends android.support.v17.leanback.app.BaseRowFragment implements android.support.v17.leanback.app.BrowseFragment.MainFragmentAdapterProvider android.support.v17.leanback.app.BrowseFragment.MainFragmentRowsAdapterProvider {
+ ctor public RowsFragment();
+ method public deprecated void enableRowScaling(boolean);
+ method protected android.support.v17.leanback.widget.VerticalGridView findGridViewFromRoot(android.view.View);
+ method public android.support.v17.leanback.widget.RowPresenter.ViewHolder findRowViewHolderByPosition(int);
+ method public android.support.v17.leanback.app.BrowseFragment.MainFragmentAdapter getMainFragmentAdapter();
+ method public android.support.v17.leanback.app.BrowseFragment.MainFragmentRowsAdapter getMainFragmentRowsAdapter();
+ method public android.support.v17.leanback.widget.BaseOnItemViewClickedListener getOnItemViewClickedListener();
+ method public android.support.v17.leanback.widget.BaseOnItemViewSelectedListener getOnItemViewSelectedListener();
+ method public android.support.v17.leanback.widget.RowPresenter.ViewHolder getRowViewHolder(int);
+ method public boolean isScrolling();
+ method public void setEntranceTransitionState(boolean);
+ method public void setExpand(boolean);
+ method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.BaseOnItemViewClickedListener);
+ method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.BaseOnItemViewSelectedListener);
+ method public void setSelectedPosition(int, boolean, android.support.v17.leanback.widget.Presenter.ViewHolderTask);
+ }
+
+ public static class RowsFragment.MainFragmentAdapter extends android.support.v17.leanback.app.BrowseFragment.MainFragmentAdapter {
+ ctor public RowsFragment.MainFragmentAdapter(android.support.v17.leanback.app.RowsFragment);
+ }
+
+ public static class RowsFragment.MainFragmentRowsAdapter extends android.support.v17.leanback.app.BrowseFragment.MainFragmentRowsAdapter {
+ ctor public RowsFragment.MainFragmentRowsAdapter(android.support.v17.leanback.app.RowsFragment);
+ }
+
+ public class RowsSupportFragment extends android.support.v17.leanback.app.BaseRowSupportFragment implements android.support.v17.leanback.app.BrowseSupportFragment.MainFragmentAdapterProvider android.support.v17.leanback.app.BrowseSupportFragment.MainFragmentRowsAdapterProvider {
+ ctor public RowsSupportFragment();
+ method public deprecated void enableRowScaling(boolean);
+ method protected android.support.v17.leanback.widget.VerticalGridView findGridViewFromRoot(android.view.View);
+ method public android.support.v17.leanback.widget.RowPresenter.ViewHolder findRowViewHolderByPosition(int);
+ method public android.support.v17.leanback.app.BrowseSupportFragment.MainFragmentAdapter getMainFragmentAdapter();
+ method public android.support.v17.leanback.app.BrowseSupportFragment.MainFragmentRowsAdapter getMainFragmentRowsAdapter();
+ method public android.support.v17.leanback.widget.BaseOnItemViewClickedListener getOnItemViewClickedListener();
+ method public android.support.v17.leanback.widget.BaseOnItemViewSelectedListener getOnItemViewSelectedListener();
+ method public android.support.v17.leanback.widget.RowPresenter.ViewHolder getRowViewHolder(int);
+ method public boolean isScrolling();
+ method public void setEntranceTransitionState(boolean);
+ method public void setExpand(boolean);
+ method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.BaseOnItemViewClickedListener);
+ method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.BaseOnItemViewSelectedListener);
+ method public void setSelectedPosition(int, boolean, android.support.v17.leanback.widget.Presenter.ViewHolderTask);
+ }
+
+ public static class RowsSupportFragment.MainFragmentAdapter extends android.support.v17.leanback.app.BrowseSupportFragment.MainFragmentAdapter {
+ ctor public RowsSupportFragment.MainFragmentAdapter(android.support.v17.leanback.app.RowsSupportFragment);
+ }
+
+ public static class RowsSupportFragment.MainFragmentRowsAdapter extends android.support.v17.leanback.app.BrowseSupportFragment.MainFragmentRowsAdapter {
+ ctor public RowsSupportFragment.MainFragmentRowsAdapter(android.support.v17.leanback.app.RowsSupportFragment);
+ }
+
+ public class SearchFragment extends android.app.Fragment {
+ ctor public SearchFragment();
+ method public static android.os.Bundle createArgs(android.os.Bundle, java.lang.String);
+ method public static android.os.Bundle createArgs(android.os.Bundle, java.lang.String, java.lang.String);
+ method public void displayCompletions(java.util.List<java.lang.String>);
+ method public void displayCompletions(android.view.inputmethod.CompletionInfo[]);
+ method public android.graphics.drawable.Drawable getBadgeDrawable();
+ method public android.content.Intent getRecognizerIntent();
+ method public android.support.v17.leanback.app.RowsFragment getRowsFragment();
+ method public java.lang.String getTitle();
+ method public static android.support.v17.leanback.app.SearchFragment newInstance(java.lang.String);
+ method public void setBadgeDrawable(android.graphics.drawable.Drawable);
+ method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.OnItemViewClickedListener);
+ method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.OnItemViewSelectedListener);
+ method public void setSearchAffordanceColors(android.support.v17.leanback.widget.SearchOrbView.Colors);
+ method public void setSearchAffordanceColorsInListening(android.support.v17.leanback.widget.SearchOrbView.Colors);
+ method public void setSearchQuery(java.lang.String, boolean);
+ method public void setSearchQuery(android.content.Intent, boolean);
+ method public void setSearchResultProvider(android.support.v17.leanback.app.SearchFragment.SearchResultProvider);
+ method public deprecated void setSpeechRecognitionCallback(android.support.v17.leanback.widget.SpeechRecognitionCallback);
+ method public void setTitle(java.lang.String);
+ method public void startRecognition();
+ }
+
+ public static abstract interface SearchFragment.SearchResultProvider {
+ method public abstract android.support.v17.leanback.widget.ObjectAdapter getResultsAdapter();
+ method public abstract boolean onQueryTextChange(java.lang.String);
+ method public abstract boolean onQueryTextSubmit(java.lang.String);
+ }
+
+ public class SearchSupportFragment extends android.support.v4.app.Fragment {
+ ctor public SearchSupportFragment();
+ method public static android.os.Bundle createArgs(android.os.Bundle, java.lang.String);
+ method public static android.os.Bundle createArgs(android.os.Bundle, java.lang.String, java.lang.String);
+ method public void displayCompletions(java.util.List<java.lang.String>);
+ method public void displayCompletions(android.view.inputmethod.CompletionInfo[]);
+ method public android.graphics.drawable.Drawable getBadgeDrawable();
+ method public android.content.Intent getRecognizerIntent();
+ method public android.support.v17.leanback.app.RowsSupportFragment getRowsSupportFragment();
+ method public java.lang.String getTitle();
+ method public static android.support.v17.leanback.app.SearchSupportFragment newInstance(java.lang.String);
+ method public void setBadgeDrawable(android.graphics.drawable.Drawable);
+ method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.OnItemViewClickedListener);
+ method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.OnItemViewSelectedListener);
+ method public void setSearchAffordanceColors(android.support.v17.leanback.widget.SearchOrbView.Colors);
+ method public void setSearchAffordanceColorsInListening(android.support.v17.leanback.widget.SearchOrbView.Colors);
+ method public void setSearchQuery(java.lang.String, boolean);
+ method public void setSearchQuery(android.content.Intent, boolean);
+ method public void setSearchResultProvider(android.support.v17.leanback.app.SearchSupportFragment.SearchResultProvider);
+ method public deprecated void setSpeechRecognitionCallback(android.support.v17.leanback.widget.SpeechRecognitionCallback);
+ method public void setTitle(java.lang.String);
+ method public void startRecognition();
+ }
+
+ public static abstract interface SearchSupportFragment.SearchResultProvider {
+ method public abstract android.support.v17.leanback.widget.ObjectAdapter getResultsAdapter();
+ method public abstract boolean onQueryTextChange(java.lang.String);
+ method public abstract boolean onQueryTextSubmit(java.lang.String);
+ }
+
+ public class VerticalGridFragment extends android.support.v17.leanback.app.BaseFragment {
+ ctor public VerticalGridFragment();
+ method public android.support.v17.leanback.widget.ObjectAdapter getAdapter();
+ method public android.support.v17.leanback.widget.VerticalGridPresenter getGridPresenter();
+ method public android.support.v17.leanback.widget.OnItemViewClickedListener getOnItemViewClickedListener();
+ method public void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public void setGridPresenter(android.support.v17.leanback.widget.VerticalGridPresenter);
+ method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.OnItemViewClickedListener);
+ method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.OnItemViewSelectedListener);
+ method public void setSelectedPosition(int);
+ }
+
+ public class VerticalGridSupportFragment extends android.support.v17.leanback.app.BaseSupportFragment {
+ ctor public VerticalGridSupportFragment();
+ method public android.support.v17.leanback.widget.ObjectAdapter getAdapter();
+ method public android.support.v17.leanback.widget.VerticalGridPresenter getGridPresenter();
+ method public android.support.v17.leanback.widget.OnItemViewClickedListener getOnItemViewClickedListener();
+ method public void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public void setGridPresenter(android.support.v17.leanback.widget.VerticalGridPresenter);
+ method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.OnItemViewClickedListener);
+ method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.OnItemViewSelectedListener);
+ method public void setSelectedPosition(int);
+ }
+
+ public class VideoFragment extends android.support.v17.leanback.app.PlaybackFragment {
+ ctor public VideoFragment();
+ method public android.view.SurfaceView getSurfaceView();
+ method public void setSurfaceHolderCallback(android.view.SurfaceHolder.Callback);
+ }
+
+ public class VideoFragmentGlueHost extends android.support.v17.leanback.app.PlaybackFragmentGlueHost implements android.support.v17.leanback.media.SurfaceHolderGlueHost {
+ ctor public VideoFragmentGlueHost(android.support.v17.leanback.app.VideoFragment);
+ method public void setSurfaceHolderCallback(android.view.SurfaceHolder.Callback);
+ }
+
+ public class VideoSupportFragment extends android.support.v17.leanback.app.PlaybackSupportFragment {
+ ctor public VideoSupportFragment();
+ method public android.view.SurfaceView getSurfaceView();
+ method public void setSurfaceHolderCallback(android.view.SurfaceHolder.Callback);
+ }
+
+ public class VideoSupportFragmentGlueHost extends android.support.v17.leanback.app.PlaybackSupportFragmentGlueHost implements android.support.v17.leanback.media.SurfaceHolderGlueHost {
+ ctor public VideoSupportFragmentGlueHost(android.support.v17.leanback.app.VideoSupportFragment);
+ method public void setSurfaceHolderCallback(android.view.SurfaceHolder.Callback);
+ }
+
+}
+
+package android.support.v17.leanback.database {
+
+ public abstract class CursorMapper {
+ ctor public CursorMapper();
+ method protected abstract java.lang.Object bind(android.database.Cursor);
+ method protected abstract void bindColumns(android.database.Cursor);
+ method public java.lang.Object convert(android.database.Cursor);
+ }
+
+}
+
+package android.support.v17.leanback.graphics {
+
+ public class BoundsRule {
+ ctor public BoundsRule();
+ ctor public BoundsRule(android.support.v17.leanback.graphics.BoundsRule);
+ method public void calculateBounds(android.graphics.Rect, android.graphics.Rect);
+ field public android.support.v17.leanback.graphics.BoundsRule.ValueRule bottom;
+ field public android.support.v17.leanback.graphics.BoundsRule.ValueRule left;
+ field public android.support.v17.leanback.graphics.BoundsRule.ValueRule right;
+ field public android.support.v17.leanback.graphics.BoundsRule.ValueRule top;
+ }
+
+ public static final class BoundsRule.ValueRule {
+ method public static android.support.v17.leanback.graphics.BoundsRule.ValueRule absoluteValue(int);
+ method public int getAbsoluteValue();
+ method public float getFraction();
+ method public static android.support.v17.leanback.graphics.BoundsRule.ValueRule inheritFromParent(float);
+ method public static android.support.v17.leanback.graphics.BoundsRule.ValueRule inheritFromParentWithOffset(float, int);
+ method public void setAbsoluteValue(int);
+ method public void setFraction(float);
+ }
+
+ public final class ColorFilterCache {
+ method public static android.support.v17.leanback.graphics.ColorFilterCache getColorFilterCache(int);
+ method public android.graphics.ColorFilter getFilterForLevel(float);
+ }
+
+ public final class ColorFilterDimmer {
+ method public void applyFilterToView(android.view.View);
+ method public static android.support.v17.leanback.graphics.ColorFilterDimmer create(android.support.v17.leanback.graphics.ColorFilterCache, float, float);
+ method public static android.support.v17.leanback.graphics.ColorFilterDimmer createDefault(android.content.Context);
+ method public android.graphics.ColorFilter getColorFilter();
+ method public android.graphics.Paint getPaint();
+ method public void setActiveLevel(float);
+ }
+
+ public final class ColorOverlayDimmer {
+ method public int applyToColor(int);
+ method public static android.support.v17.leanback.graphics.ColorOverlayDimmer createColorOverlayDimmer(int, float, float);
+ method public static android.support.v17.leanback.graphics.ColorOverlayDimmer createDefault(android.content.Context);
+ method public void drawColorOverlay(android.graphics.Canvas, android.view.View, boolean);
+ method public int getAlpha();
+ method public float getAlphaFloat();
+ method public android.graphics.Paint getPaint();
+ method public boolean needsDraw();
+ method public void setActiveLevel(float);
+ }
+
+ public class CompositeDrawable extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable.Callback {
+ ctor public CompositeDrawable();
+ method public void addChildDrawable(android.graphics.drawable.Drawable);
+ method public void draw(android.graphics.Canvas);
+ method public android.support.v17.leanback.graphics.CompositeDrawable.ChildDrawable getChildAt(int);
+ method public int getChildCount();
+ method public android.graphics.drawable.Drawable getDrawable(int);
+ method public int getOpacity();
+ method public void invalidateDrawable(android.graphics.drawable.Drawable);
+ method public void removeChild(int);
+ method public void removeDrawable(android.graphics.drawable.Drawable);
+ method public void scheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable, long);
+ method public void setAlpha(int);
+ method public void setChildDrawableAt(int, android.graphics.drawable.Drawable);
+ method public void setColorFilter(android.graphics.ColorFilter);
+ method public void unscheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable);
+ }
+
+ public static final class CompositeDrawable.ChildDrawable {
+ ctor public CompositeDrawable.ChildDrawable(android.graphics.drawable.Drawable, android.support.v17.leanback.graphics.CompositeDrawable);
+ method public android.support.v17.leanback.graphics.BoundsRule getBoundsRule();
+ method public android.graphics.drawable.Drawable getDrawable();
+ method public void recomputeBounds();
+ field public static final android.util.Property<android.support.v17.leanback.graphics.CompositeDrawable.ChildDrawable, java.lang.Integer> BOTTOM_ABSOLUTE;
+ field public static final android.util.Property<android.support.v17.leanback.graphics.CompositeDrawable.ChildDrawable, java.lang.Float> BOTTOM_FRACTION;
+ field public static final android.util.Property<android.support.v17.leanback.graphics.CompositeDrawable.ChildDrawable, java.lang.Integer> LEFT_ABSOLUTE;
+ field public static final android.util.Property<android.support.v17.leanback.graphics.CompositeDrawable.ChildDrawable, java.lang.Float> LEFT_FRACTION;
+ field public static final android.util.Property<android.support.v17.leanback.graphics.CompositeDrawable.ChildDrawable, java.lang.Integer> RIGHT_ABSOLUTE;
+ field public static final android.util.Property<android.support.v17.leanback.graphics.CompositeDrawable.ChildDrawable, java.lang.Float> RIGHT_FRACTION;
+ field public static final android.util.Property<android.support.v17.leanback.graphics.CompositeDrawable.ChildDrawable, java.lang.Integer> TOP_ABSOLUTE;
+ field public static final android.util.Property<android.support.v17.leanback.graphics.CompositeDrawable.ChildDrawable, java.lang.Float> TOP_FRACTION;
+ }
+
+ public class FitWidthBitmapDrawable extends android.graphics.drawable.Drawable {
+ ctor public FitWidthBitmapDrawable();
+ method public void draw(android.graphics.Canvas);
+ method public android.graphics.Bitmap getBitmap();
+ method public int getOpacity();
+ method public android.graphics.Rect getSource();
+ method public int getVerticalOffset();
+ method public void setAlpha(int);
+ method public void setBitmap(android.graphics.Bitmap);
+ method public void setColorFilter(android.graphics.ColorFilter);
+ method public void setSource(android.graphics.Rect);
+ method public void setVerticalOffset(int);
+ field public static final android.util.Property<android.support.v17.leanback.graphics.FitWidthBitmapDrawable, java.lang.Integer> PROPERTY_VERTICAL_OFFSET;
+ }
+
+}
+
+package android.support.v17.leanback.media {
+
+ public class MediaControllerAdapter extends android.support.v17.leanback.media.PlayerAdapter {
+ ctor public MediaControllerAdapter(android.support.v4.media.session.MediaControllerCompat);
+ method public android.graphics.drawable.Drawable getMediaArt(android.content.Context);
+ method public android.support.v4.media.session.MediaControllerCompat getMediaController();
+ method public java.lang.CharSequence getMediaSubtitle();
+ method public java.lang.CharSequence getMediaTitle();
+ method public void pause();
+ method public void play();
+ }
+
+ public abstract deprecated class MediaControllerGlue extends android.support.v17.leanback.media.PlaybackControlGlue {
+ ctor public MediaControllerGlue(android.content.Context, int[], int[]);
+ method public void attachToMediaController(android.support.v4.media.session.MediaControllerCompat);
+ method public void detach();
+ method public int getCurrentPosition();
+ method public int getCurrentSpeedId();
+ method public android.graphics.drawable.Drawable getMediaArt();
+ method public final android.support.v4.media.session.MediaControllerCompat getMediaController();
+ method public int getMediaDuration();
+ method public java.lang.CharSequence getMediaSubtitle();
+ method public java.lang.CharSequence getMediaTitle();
+ method public long getSupportedActions();
+ method public boolean hasValidMedia();
+ method public boolean isMediaPlaying();
+ }
+
+ public class MediaPlayerAdapter extends android.support.v17.leanback.media.PlayerAdapter {
+ ctor public MediaPlayerAdapter(android.content.Context);
+ method protected boolean onError(int, int);
+ method protected boolean onInfo(int, int);
+ method protected void onSeekComplete();
+ method public void pause();
+ method public void play();
+ method public void release();
+ method public void reset();
+ method public boolean setDataSource(android.net.Uri);
+ }
+
+ public class PlaybackBannerControlGlue<T extends android.support.v17.leanback.media.PlayerAdapter> extends android.support.v17.leanback.media.PlaybackBaseControlGlue {
+ ctor public PlaybackBannerControlGlue(android.content.Context, int[], T);
+ ctor public PlaybackBannerControlGlue(android.content.Context, int[], int[], T);
+ method public int[] getFastForwardSpeeds();
+ method public int[] getRewindSpeeds();
+ method public void onActionClicked(android.support.v17.leanback.widget.Action);
+ method protected android.support.v17.leanback.widget.PlaybackRowPresenter onCreateRowPresenter();
+ method public boolean onKey(android.view.View, int, android.view.KeyEvent);
+ field public static final int ACTION_CUSTOM_LEFT_FIRST = 1; // 0x1
+ field public static final int ACTION_CUSTOM_RIGHT_FIRST = 4096; // 0x1000
+ field public static final int ACTION_FAST_FORWARD = 128; // 0x80
+ field public static final int ACTION_PLAY_PAUSE = 64; // 0x40
+ field public static final int ACTION_REWIND = 32; // 0x20
+ field public static final int ACTION_SKIP_TO_NEXT = 256; // 0x100
+ field public static final int ACTION_SKIP_TO_PREVIOUS = 16; // 0x10
+ field public static final int PLAYBACK_SPEED_FAST_L0 = 10; // 0xa
+ field public static final int PLAYBACK_SPEED_FAST_L1 = 11; // 0xb
+ field public static final int PLAYBACK_SPEED_FAST_L2 = 12; // 0xc
+ field public static final int PLAYBACK_SPEED_FAST_L3 = 13; // 0xd
+ field public static final int PLAYBACK_SPEED_FAST_L4 = 14; // 0xe
+ field public static final int PLAYBACK_SPEED_INVALID = -1; // 0xffffffff
+ field public static final int PLAYBACK_SPEED_NORMAL = 1; // 0x1
+ field public static final int PLAYBACK_SPEED_PAUSED = 0; // 0x0
+ }
+
+ public abstract class PlaybackBaseControlGlue<T extends android.support.v17.leanback.media.PlayerAdapter> extends android.support.v17.leanback.media.PlaybackGlue implements android.support.v17.leanback.widget.OnActionClickedListener android.view.View.OnKeyListener {
+ ctor public PlaybackBaseControlGlue(android.content.Context, T);
+ method public android.graphics.drawable.Drawable getArt();
+ method public final long getBufferedPosition();
+ method public android.support.v17.leanback.widget.PlaybackControlsRow getControlsRow();
+ method public long getCurrentPosition();
+ method public final long getDuration();
+ method public android.support.v17.leanback.widget.PlaybackRowPresenter getPlaybackRowPresenter();
+ method public final T getPlayerAdapter();
+ method public java.lang.CharSequence getSubtitle();
+ method public long getSupportedActions();
+ method public java.lang.CharSequence getTitle();
+ method public boolean isControlsOverlayAutoHideEnabled();
+ method public final boolean isPlaying();
+ method public final boolean isPrepared();
+ method protected static void notifyItemChanged(android.support.v17.leanback.widget.ArrayObjectAdapter, java.lang.Object);
+ method public abstract void onActionClicked(android.support.v17.leanback.widget.Action);
+ method protected void onCreatePrimaryActions(android.support.v17.leanback.widget.ArrayObjectAdapter);
+ method protected abstract android.support.v17.leanback.widget.PlaybackRowPresenter onCreateRowPresenter();
+ method protected void onCreateSecondaryActions(android.support.v17.leanback.widget.ArrayObjectAdapter);
+ method public abstract boolean onKey(android.view.View, int, android.view.KeyEvent);
+ method protected void onMetadataChanged();
+ method protected void onPlayCompleted();
+ method protected void onPlayStateChanged();
+ method protected void onPreparedStateChanged();
+ method protected void onUpdateBufferedProgress();
+ method protected void onUpdateDuration();
+ method protected void onUpdateProgress();
+ method public final void seekTo(long);
+ method public void setArt(android.graphics.drawable.Drawable);
+ method public void setControlsOverlayAutoHideEnabled(boolean);
+ method public void setControlsRow(android.support.v17.leanback.widget.PlaybackControlsRow);
+ method public void setPlaybackRowPresenter(android.support.v17.leanback.widget.PlaybackRowPresenter);
+ method public void setSubtitle(java.lang.CharSequence);
+ method public void setTitle(java.lang.CharSequence);
+ field public static final int ACTION_CUSTOM_LEFT_FIRST = 1; // 0x1
+ field public static final int ACTION_CUSTOM_RIGHT_FIRST = 4096; // 0x1000
+ field public static final int ACTION_FAST_FORWARD = 128; // 0x80
+ field public static final int ACTION_PLAY_PAUSE = 64; // 0x40
+ field public static final int ACTION_REPEAT = 512; // 0x200
+ field public static final int ACTION_REWIND = 32; // 0x20
+ field public static final int ACTION_SHUFFLE = 1024; // 0x400
+ field public static final int ACTION_SKIP_TO_NEXT = 256; // 0x100
+ field public static final int ACTION_SKIP_TO_PREVIOUS = 16; // 0x10
+ }
+
+ public abstract class PlaybackControlGlue extends android.support.v17.leanback.media.PlaybackGlue implements android.support.v17.leanback.widget.OnActionClickedListener android.view.View.OnKeyListener {
+ ctor public PlaybackControlGlue(android.content.Context, int[]);
+ ctor public PlaybackControlGlue(android.content.Context, int[], int[]);
+ method public void enableProgressUpdating(boolean);
+ method public android.support.v17.leanback.widget.PlaybackControlsRow getControlsRow();
+ method public deprecated android.support.v17.leanback.widget.PlaybackControlsRowPresenter getControlsRowPresenter();
+ method public abstract int getCurrentPosition();
+ method public abstract int getCurrentSpeedId();
+ method public int[] getFastForwardSpeeds();
+ method public abstract android.graphics.drawable.Drawable getMediaArt();
+ method public abstract int getMediaDuration();
+ method public abstract java.lang.CharSequence getMediaSubtitle();
+ method public abstract java.lang.CharSequence getMediaTitle();
+ method public android.support.v17.leanback.widget.PlaybackRowPresenter getPlaybackRowPresenter();
+ method public int[] getRewindSpeeds();
+ method public abstract long getSupportedActions();
+ method public int getUpdatePeriod();
+ method public abstract boolean hasValidMedia();
+ method public boolean isFadingEnabled();
+ method public abstract boolean isMediaPlaying();
+ method public void onActionClicked(android.support.v17.leanback.widget.Action);
+ method protected void onCreateControlsRowAndPresenter();
+ method protected void onCreatePrimaryActions(android.support.v17.leanback.widget.SparseArrayObjectAdapter);
+ method protected void onCreateSecondaryActions(android.support.v17.leanback.widget.ArrayObjectAdapter);
+ method public boolean onKey(android.view.View, int, android.view.KeyEvent);
+ method protected void onMetadataChanged();
+ method protected void onStateChanged();
+ method public void play(int);
+ method public final void play();
+ method public void setControlsRow(android.support.v17.leanback.widget.PlaybackControlsRow);
+ method public deprecated void setControlsRowPresenter(android.support.v17.leanback.widget.PlaybackControlsRowPresenter);
+ method public void setFadingEnabled(boolean);
+ method public void setPlaybackRowPresenter(android.support.v17.leanback.widget.PlaybackRowPresenter);
+ method public void updateProgress();
+ field public static final int ACTION_CUSTOM_LEFT_FIRST = 1; // 0x1
+ field public static final int ACTION_CUSTOM_RIGHT_FIRST = 4096; // 0x1000
+ field public static final int ACTION_FAST_FORWARD = 128; // 0x80
+ field public static final int ACTION_PLAY_PAUSE = 64; // 0x40
+ field public static final int ACTION_REWIND = 32; // 0x20
+ field public static final int ACTION_SKIP_TO_NEXT = 256; // 0x100
+ field public static final int ACTION_SKIP_TO_PREVIOUS = 16; // 0x10
+ field public static final int PLAYBACK_SPEED_FAST_L0 = 10; // 0xa
+ field public static final int PLAYBACK_SPEED_FAST_L1 = 11; // 0xb
+ field public static final int PLAYBACK_SPEED_FAST_L2 = 12; // 0xc
+ field public static final int PLAYBACK_SPEED_FAST_L3 = 13; // 0xd
+ field public static final int PLAYBACK_SPEED_FAST_L4 = 14; // 0xe
+ field public static final int PLAYBACK_SPEED_INVALID = -1; // 0xffffffff
+ field public static final int PLAYBACK_SPEED_NORMAL = 1; // 0x1
+ field public static final int PLAYBACK_SPEED_PAUSED = 0; // 0x0
+ }
+
+ public abstract class PlaybackGlue {
+ ctor public PlaybackGlue(android.content.Context);
+ method public void addPlayerCallback(android.support.v17.leanback.media.PlaybackGlue.PlayerCallback);
+ method public android.content.Context getContext();
+ method public android.support.v17.leanback.media.PlaybackGlueHost getHost();
+ method protected java.util.List<android.support.v17.leanback.media.PlaybackGlue.PlayerCallback> getPlayerCallbacks();
+ method public boolean isPlaying();
+ method public boolean isPrepared();
+ method public void next();
+ method protected void onAttachedToHost(android.support.v17.leanback.media.PlaybackGlueHost);
+ method protected void onDetachedFromHost();
+ method protected void onHostPause();
+ method protected void onHostResume();
+ method protected void onHostStart();
+ method protected void onHostStop();
+ method public void pause();
+ method public void play();
+ method public void playWhenPrepared();
+ method public void previous();
+ method public void removePlayerCallback(android.support.v17.leanback.media.PlaybackGlue.PlayerCallback);
+ method public final void setHost(android.support.v17.leanback.media.PlaybackGlueHost);
+ }
+
+ public static abstract class PlaybackGlue.PlayerCallback {
+ ctor public PlaybackGlue.PlayerCallback();
+ method public void onPlayCompleted(android.support.v17.leanback.media.PlaybackGlue);
+ method public void onPlayStateChanged(android.support.v17.leanback.media.PlaybackGlue);
+ method public void onPreparedStateChanged(android.support.v17.leanback.media.PlaybackGlue);
+ }
+
+ public abstract class PlaybackGlueHost {
+ ctor public PlaybackGlueHost();
+ method public deprecated void fadeOut();
+ method public android.support.v17.leanback.media.PlaybackGlueHost.PlayerCallback getPlayerCallback();
+ method public void hideControlsOverlay(boolean);
+ method public boolean isControlsOverlayAutoHideEnabled();
+ method public boolean isControlsOverlayVisible();
+ method public void notifyPlaybackRowChanged();
+ method public void setControlsOverlayAutoHideEnabled(boolean);
+ method public deprecated void setFadingEnabled(boolean);
+ method public void setHostCallback(android.support.v17.leanback.media.PlaybackGlueHost.HostCallback);
+ method public void setOnActionClickedListener(android.support.v17.leanback.widget.OnActionClickedListener);
+ method public void setOnKeyInterceptListener(android.view.View.OnKeyListener);
+ method public void setPlaybackRow(android.support.v17.leanback.widget.Row);
+ method public void setPlaybackRowPresenter(android.support.v17.leanback.widget.PlaybackRowPresenter);
+ method public void showControlsOverlay(boolean);
+ }
+
+ public static abstract class PlaybackGlueHost.HostCallback {
+ ctor public PlaybackGlueHost.HostCallback();
+ method public void onHostDestroy();
+ method public void onHostPause();
+ method public void onHostResume();
+ method public void onHostStart();
+ method public void onHostStop();
+ }
+
+ public static class PlaybackGlueHost.PlayerCallback {
+ ctor public PlaybackGlueHost.PlayerCallback();
+ method public void onBufferingStateChanged(boolean);
+ method public void onError(int, java.lang.CharSequence);
+ method public void onVideoSizeChanged(int, int);
+ }
+
+ public class PlaybackTransportControlGlue<T extends android.support.v17.leanback.media.PlayerAdapter> extends android.support.v17.leanback.media.PlaybackBaseControlGlue {
+ ctor public PlaybackTransportControlGlue(android.content.Context, T);
+ method public final android.support.v17.leanback.widget.PlaybackSeekDataProvider getSeekProvider();
+ method public final boolean isSeekEnabled();
+ method public void onActionClicked(android.support.v17.leanback.widget.Action);
+ method protected android.support.v17.leanback.widget.PlaybackRowPresenter onCreateRowPresenter();
+ method public boolean onKey(android.view.View, int, android.view.KeyEvent);
+ method public final void setSeekEnabled(boolean);
+ method public final void setSeekProvider(android.support.v17.leanback.widget.PlaybackSeekDataProvider);
+ }
+
+ public abstract class PlayerAdapter {
+ ctor public PlayerAdapter();
+ method public void fastForward();
+ method public long getBufferedPosition();
+ method public final android.support.v17.leanback.media.PlayerAdapter.Callback getCallback();
+ method public long getCurrentPosition();
+ method public long getDuration();
+ method public long getSupportedActions();
+ method public boolean isPlaying();
+ method public boolean isPrepared();
+ method public void next();
+ method public void onAttachedToHost(android.support.v17.leanback.media.PlaybackGlueHost);
+ method public void onDetachedFromHost();
+ method public abstract void pause();
+ method public abstract void play();
+ method public void previous();
+ method public void rewind();
+ method public void seekTo(long);
+ method public final void setCallback(android.support.v17.leanback.media.PlayerAdapter.Callback);
+ method public void setProgressUpdatingEnabled(boolean);
+ method public void setRepeatAction(int);
+ method public void setShuffleAction(int);
+ }
+
+ public static class PlayerAdapter.Callback {
+ ctor public PlayerAdapter.Callback();
+ method public void onBufferedPositionChanged(android.support.v17.leanback.media.PlayerAdapter);
+ method public void onBufferingStateChanged(android.support.v17.leanback.media.PlayerAdapter, boolean);
+ method public void onCurrentPositionChanged(android.support.v17.leanback.media.PlayerAdapter);
+ method public void onDurationChanged(android.support.v17.leanback.media.PlayerAdapter);
+ method public void onError(android.support.v17.leanback.media.PlayerAdapter, int, java.lang.String);
+ method public void onMetadataChanged(android.support.v17.leanback.media.PlayerAdapter);
+ method public void onPlayCompleted(android.support.v17.leanback.media.PlayerAdapter);
+ method public void onPlayStateChanged(android.support.v17.leanback.media.PlayerAdapter);
+ method public void onPreparedStateChanged(android.support.v17.leanback.media.PlayerAdapter);
+ method public void onVideoSizeChanged(android.support.v17.leanback.media.PlayerAdapter, int, int);
+ }
+
+ public abstract interface SurfaceHolderGlueHost {
+ method public abstract void setSurfaceHolderCallback(android.view.SurfaceHolder.Callback);
+ }
+
+}
+
+package android.support.v17.leanback.system {
+
+ public class Settings {
+ method public boolean getBoolean(java.lang.String);
+ method public static android.support.v17.leanback.system.Settings getInstance(android.content.Context);
+ method public void setBoolean(java.lang.String, boolean);
+ field public static final java.lang.String OUTLINE_CLIPPING_DISABLED = "OUTLINE_CLIPPING_DISABLED";
+ field public static final java.lang.String PREFER_STATIC_SHADOWS = "PREFER_STATIC_SHADOWS";
+ }
+
+}
+
+package android.support.v17.leanback.widget {
+
+ public abstract class AbstractDetailsDescriptionPresenter extends android.support.v17.leanback.widget.Presenter {
+ ctor public AbstractDetailsDescriptionPresenter();
+ method protected abstract void onBindDescription(android.support.v17.leanback.widget.AbstractDetailsDescriptionPresenter.ViewHolder, java.lang.Object);
+ method public final void onBindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder, java.lang.Object);
+ method public final android.support.v17.leanback.widget.AbstractDetailsDescriptionPresenter.ViewHolder onCreateViewHolder(android.view.ViewGroup);
+ method public void onUnbindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder);
+ }
+
+ public static class AbstractDetailsDescriptionPresenter.ViewHolder extends android.support.v17.leanback.widget.Presenter.ViewHolder {
+ ctor public AbstractDetailsDescriptionPresenter.ViewHolder(android.view.View);
+ method public android.widget.TextView getBody();
+ method public android.widget.TextView getSubtitle();
+ method public android.widget.TextView getTitle();
+ }
+
+ public abstract class AbstractMediaItemPresenter extends android.support.v17.leanback.widget.RowPresenter {
+ ctor public AbstractMediaItemPresenter();
+ ctor public AbstractMediaItemPresenter(int);
+ method protected android.support.v17.leanback.widget.RowPresenter.ViewHolder createRowViewHolder(android.view.ViewGroup);
+ method public android.support.v17.leanback.widget.Presenter getActionPresenter();
+ method protected int getMediaPlayState(java.lang.Object);
+ method public int getThemeId();
+ method public boolean hasMediaRowSeparator();
+ method protected abstract void onBindMediaDetails(android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder, java.lang.Object);
+ method public void onBindMediaPlayState(android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder);
+ method protected void onBindRowActions(android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder);
+ method protected void onUnbindMediaDetails(android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder);
+ method public void onUnbindMediaPlayState(android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder);
+ method public void setActionPresenter(android.support.v17.leanback.widget.Presenter);
+ method public void setBackgroundColor(int);
+ method public void setHasMediaRowSeparator(boolean);
+ method public void setThemeId(int);
+ field public static final int PLAY_STATE_INITIAL = 0; // 0x0
+ field public static final int PLAY_STATE_PAUSED = 1; // 0x1
+ field public static final int PLAY_STATE_PLAYING = 2; // 0x2
+ }
+
+ public static class AbstractMediaItemPresenter.ViewHolder extends android.support.v17.leanback.widget.RowPresenter.ViewHolder {
+ ctor public AbstractMediaItemPresenter.ViewHolder(android.view.View);
+ method public android.view.ViewGroup getMediaItemActionsContainer();
+ method public android.view.View getMediaItemDetailsView();
+ method public android.widget.TextView getMediaItemDurationView();
+ method public android.widget.TextView getMediaItemNameView();
+ method public android.widget.TextView getMediaItemNumberView();
+ method public android.widget.ViewFlipper getMediaItemNumberViewFlipper();
+ method public android.view.View getMediaItemPausedView();
+ method public android.view.View getMediaItemPlayingView();
+ method public android.support.v17.leanback.widget.MultiActionsProvider.MultiAction[] getMediaItemRowActions();
+ method public android.view.View getMediaItemRowSeparator();
+ method public android.view.View getSelectorView();
+ method public void notifyActionChanged(android.support.v17.leanback.widget.MultiActionsProvider.MultiAction);
+ method public void notifyDetailsChanged();
+ method public void notifyPlayStateChanged();
+ method public void onBindRowActions();
+ method public void setSelectedMediaItemNumberView(int);
+ }
+
+ public abstract class AbstractMediaListHeaderPresenter extends android.support.v17.leanback.widget.RowPresenter {
+ ctor public AbstractMediaListHeaderPresenter(android.content.Context, int);
+ ctor public AbstractMediaListHeaderPresenter();
+ method protected android.support.v17.leanback.widget.RowPresenter.ViewHolder createRowViewHolder(android.view.ViewGroup);
+ method protected abstract void onBindMediaListHeaderViewHolder(android.support.v17.leanback.widget.AbstractMediaListHeaderPresenter.ViewHolder, java.lang.Object);
+ method public void setBackgroundColor(int);
+ }
+
+ public static class AbstractMediaListHeaderPresenter.ViewHolder extends android.support.v17.leanback.widget.RowPresenter.ViewHolder {
+ ctor public AbstractMediaListHeaderPresenter.ViewHolder(android.view.View);
+ method public android.widget.TextView getHeaderView();
+ }
+
+ public class Action {
+ ctor public Action(long);
+ ctor public Action(long, java.lang.CharSequence);
+ ctor public Action(long, java.lang.CharSequence, java.lang.CharSequence);
+ ctor public Action(long, java.lang.CharSequence, java.lang.CharSequence, android.graphics.drawable.Drawable);
+ method public final void addKeyCode(int);
+ method public final android.graphics.drawable.Drawable getIcon();
+ method public final long getId();
+ method public final java.lang.CharSequence getLabel1();
+ method public final java.lang.CharSequence getLabel2();
+ method public final void removeKeyCode(int);
+ method public final boolean respondsToKeyCode(int);
+ method public final void setIcon(android.graphics.drawable.Drawable);
+ method public final void setId(long);
+ method public final void setLabel1(java.lang.CharSequence);
+ method public final void setLabel2(java.lang.CharSequence);
+ field public static final long NO_ID = -1L; // 0xffffffffffffffffL
+ }
+
+ public class ArrayObjectAdapter extends android.support.v17.leanback.widget.ObjectAdapter {
+ ctor public ArrayObjectAdapter(android.support.v17.leanback.widget.PresenterSelector);
+ ctor public ArrayObjectAdapter(android.support.v17.leanback.widget.Presenter);
+ ctor public ArrayObjectAdapter();
+ method public void add(java.lang.Object);
+ method public void add(int, java.lang.Object);
+ method public void addAll(int, java.util.Collection);
+ method public void clear();
+ method public java.lang.Object get(int);
+ method public int indexOf(java.lang.Object);
+ method public void move(int, int);
+ method public void notifyArrayItemRangeChanged(int, int);
+ method public boolean remove(java.lang.Object);
+ method public int removeItems(int, int);
+ method public void replace(int, java.lang.Object);
+ method public void setItems(java.util.List, android.support.v17.leanback.widget.DiffCallback);
+ method public int size();
+ method public <E> java.util.List<E> unmodifiableList();
+ }
+
+ public class BaseCardView extends android.widget.FrameLayout {
+ ctor public BaseCardView(android.content.Context);
+ ctor public BaseCardView(android.content.Context, android.util.AttributeSet);
+ ctor public BaseCardView(android.content.Context, android.util.AttributeSet, int);
+ method protected android.support.v17.leanback.widget.BaseCardView.LayoutParams generateDefaultLayoutParams();
+ method public android.support.v17.leanback.widget.BaseCardView.LayoutParams generateLayoutParams(android.util.AttributeSet);
+ method protected android.support.v17.leanback.widget.BaseCardView.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
+ method public int getCardType();
+ method public deprecated int getExtraVisibility();
+ method public int getInfoVisibility();
+ method public boolean isSelectedAnimationDelayed();
+ method public void setCardType(int);
+ method public deprecated void setExtraVisibility(int);
+ method public void setInfoVisibility(int);
+ method public void setSelectedAnimationDelayed(boolean);
+ field public static final int CARD_REGION_VISIBLE_ACTIVATED = 1; // 0x1
+ field public static final int CARD_REGION_VISIBLE_ALWAYS = 0; // 0x0
+ field public static final int CARD_REGION_VISIBLE_SELECTED = 2; // 0x2
+ field public static final int CARD_TYPE_INFO_OVER = 1; // 0x1
+ field public static final int CARD_TYPE_INFO_UNDER = 2; // 0x2
+ field public static final int CARD_TYPE_INFO_UNDER_WITH_EXTRA = 3; // 0x3
+ field public static final int CARD_TYPE_MAIN_ONLY = 0; // 0x0
+ }
+
+ public static class BaseCardView.LayoutParams extends android.widget.FrameLayout.LayoutParams {
+ ctor public BaseCardView.LayoutParams(android.content.Context, android.util.AttributeSet);
+ ctor public BaseCardView.LayoutParams(int, int);
+ ctor public BaseCardView.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public BaseCardView.LayoutParams(android.support.v17.leanback.widget.BaseCardView.LayoutParams);
+ field public static final int VIEW_TYPE_EXTRA = 2; // 0x2
+ field public static final int VIEW_TYPE_INFO = 1; // 0x1
+ field public static final int VIEW_TYPE_MAIN = 0; // 0x0
+ field public int viewType;
+ }
+
+ public abstract class BaseGridView extends android.support.v7.widget.RecyclerView {
+ method public void addOnChildViewHolderSelectedListener(android.support.v17.leanback.widget.OnChildViewHolderSelectedListener);
+ method public void animateIn();
+ method public void animateOut();
+ method public int getChildDrawingOrder(int, int);
+ method public deprecated int getHorizontalMargin();
+ method public int getHorizontalSpacing();
+ method public int getInitialPrefetchItemCount();
+ method public int getItemAlignmentOffset();
+ method public float getItemAlignmentOffsetPercent();
+ method public int getItemAlignmentViewId();
+ method public android.support.v17.leanback.widget.BaseGridView.OnUnhandledKeyListener getOnUnhandledKeyListener();
+ method public final int getSaveChildrenLimitNumber();
+ method public final int getSaveChildrenPolicy();
+ method public int getSelectedPosition();
+ method public deprecated int getVerticalMargin();
+ method public int getVerticalSpacing();
+ method public void getViewSelectedOffsets(android.view.View, int[]);
+ method public int getWindowAlignment();
+ method public int getWindowAlignmentOffset();
+ method public float getWindowAlignmentOffsetPercent();
+ method public boolean hasPreviousViewInSameRow(int);
+ method public boolean isChildLayoutAnimated();
+ method public boolean isFocusDrawingOrderEnabled();
+ method public final boolean isFocusSearchDisabled();
+ method public boolean isItemAlignmentOffsetWithPadding();
+ method public boolean isScrollEnabled();
+ method public boolean isWindowAlignmentPreferKeyLineOverHighEdge();
+ method public boolean isWindowAlignmentPreferKeyLineOverLowEdge();
+ method public boolean onRequestFocusInDescendants(int, android.graphics.Rect);
+ method public void removeOnChildViewHolderSelectedListener(android.support.v17.leanback.widget.OnChildViewHolderSelectedListener);
+ method public void setAnimateChildLayout(boolean);
+ method public void setChildrenVisibility(int);
+ method public void setFocusDrawingOrderEnabled(boolean);
+ method public final void setFocusSearchDisabled(boolean);
+ method public void setGravity(int);
+ method public void setHasOverlappingRendering(boolean);
+ method public deprecated void setHorizontalMargin(int);
+ method public void setHorizontalSpacing(int);
+ method public void setInitialPrefetchItemCount(int);
+ method public void setItemAlignmentOffset(int);
+ method public void setItemAlignmentOffsetPercent(float);
+ method public void setItemAlignmentOffsetWithPadding(boolean);
+ method public void setItemAlignmentViewId(int);
+ method public deprecated void setItemMargin(int);
+ method public void setItemSpacing(int);
+ method public void setLayoutEnabled(boolean);
+ method public void setOnChildLaidOutListener(android.support.v17.leanback.widget.OnChildLaidOutListener);
+ method public void setOnChildSelectedListener(android.support.v17.leanback.widget.OnChildSelectedListener);
+ method public void setOnChildViewHolderSelectedListener(android.support.v17.leanback.widget.OnChildViewHolderSelectedListener);
+ method public void setOnKeyInterceptListener(android.support.v17.leanback.widget.BaseGridView.OnKeyInterceptListener);
+ method public void setOnMotionInterceptListener(android.support.v17.leanback.widget.BaseGridView.OnMotionInterceptListener);
+ method public void setOnTouchInterceptListener(android.support.v17.leanback.widget.BaseGridView.OnTouchInterceptListener);
+ method public void setOnUnhandledKeyListener(android.support.v17.leanback.widget.BaseGridView.OnUnhandledKeyListener);
+ method public void setPruneChild(boolean);
+ method public final void setSaveChildrenLimitNumber(int);
+ method public final void setSaveChildrenPolicy(int);
+ method public void setScrollEnabled(boolean);
+ method public void setSelectedPosition(int);
+ method public void setSelectedPosition(int, int);
+ method public void setSelectedPosition(int, android.support.v17.leanback.widget.ViewHolderTask);
+ method public void setSelectedPositionSmooth(int);
+ method public void setSelectedPositionSmooth(int, android.support.v17.leanback.widget.ViewHolderTask);
+ method public deprecated void setVerticalMargin(int);
+ method public void setVerticalSpacing(int);
+ method public void setWindowAlignment(int);
+ method public void setWindowAlignmentOffset(int);
+ method public void setWindowAlignmentOffsetPercent(float);
+ method public void setWindowAlignmentPreferKeyLineOverHighEdge(boolean);
+ method public void setWindowAlignmentPreferKeyLineOverLowEdge(boolean);
+ field public static final float ITEM_ALIGN_OFFSET_PERCENT_DISABLED = -1.0f;
+ field public static final int SAVE_ALL_CHILD = 3; // 0x3
+ field public static final int SAVE_LIMITED_CHILD = 2; // 0x2
+ field public static final int SAVE_NO_CHILD = 0; // 0x0
+ field public static final int SAVE_ON_SCREEN_CHILD = 1; // 0x1
+ field public static final int WINDOW_ALIGN_BOTH_EDGE = 3; // 0x3
+ field public static final int WINDOW_ALIGN_HIGH_EDGE = 2; // 0x2
+ field public static final int WINDOW_ALIGN_LOW_EDGE = 1; // 0x1
+ field public static final int WINDOW_ALIGN_NO_EDGE = 0; // 0x0
+ field public static final float WINDOW_ALIGN_OFFSET_PERCENT_DISABLED = -1.0f;
+ }
+
+ public static abstract interface BaseGridView.OnKeyInterceptListener {
+ method public abstract boolean onInterceptKeyEvent(android.view.KeyEvent);
+ }
+
+ public static abstract interface BaseGridView.OnMotionInterceptListener {
+ method public abstract boolean onInterceptMotionEvent(android.view.MotionEvent);
+ }
+
+ public static abstract interface BaseGridView.OnTouchInterceptListener {
+ method public abstract boolean onInterceptTouchEvent(android.view.MotionEvent);
+ }
+
+ public static abstract interface BaseGridView.OnUnhandledKeyListener {
+ method public abstract boolean onUnhandledKey(android.view.KeyEvent);
+ }
+
+ public abstract interface BaseOnItemViewClickedListener<T> {
+ method public abstract void onItemClicked(android.support.v17.leanback.widget.Presenter.ViewHolder, java.lang.Object, android.support.v17.leanback.widget.RowPresenter.ViewHolder, T);
+ }
+
+ public abstract interface BaseOnItemViewSelectedListener<T> {
+ method public abstract void onItemSelected(android.support.v17.leanback.widget.Presenter.ViewHolder, java.lang.Object, android.support.v17.leanback.widget.RowPresenter.ViewHolder, T);
+ }
+
+ public class BrowseFrameLayout extends android.widget.FrameLayout {
+ ctor public BrowseFrameLayout(android.content.Context);
+ ctor public BrowseFrameLayout(android.content.Context, android.util.AttributeSet);
+ ctor public BrowseFrameLayout(android.content.Context, android.util.AttributeSet, int);
+ method public android.support.v17.leanback.widget.BrowseFrameLayout.OnChildFocusListener getOnChildFocusListener();
+ method public android.support.v17.leanback.widget.BrowseFrameLayout.OnFocusSearchListener getOnFocusSearchListener();
+ method public void setOnChildFocusListener(android.support.v17.leanback.widget.BrowseFrameLayout.OnChildFocusListener);
+ method public void setOnDispatchKeyListener(android.view.View.OnKeyListener);
+ method public void setOnFocusSearchListener(android.support.v17.leanback.widget.BrowseFrameLayout.OnFocusSearchListener);
+ }
+
+ public static abstract interface BrowseFrameLayout.OnChildFocusListener {
+ method public abstract void onRequestChildFocus(android.view.View, android.view.View);
+ method public abstract boolean onRequestFocusInDescendants(int, android.graphics.Rect);
+ }
+
+ public static abstract interface BrowseFrameLayout.OnFocusSearchListener {
+ method public abstract android.view.View onFocusSearch(android.view.View, int);
+ }
+
+ public final class ClassPresenterSelector extends android.support.v17.leanback.widget.PresenterSelector {
+ ctor public ClassPresenterSelector();
+ method public android.support.v17.leanback.widget.ClassPresenterSelector addClassPresenter(java.lang.Class<?>, android.support.v17.leanback.widget.Presenter);
+ method public android.support.v17.leanback.widget.ClassPresenterSelector addClassPresenterSelector(java.lang.Class<?>, android.support.v17.leanback.widget.PresenterSelector);
+ method public android.support.v17.leanback.widget.Presenter getPresenter(java.lang.Object);
+ }
+
+ public class ControlButtonPresenterSelector extends android.support.v17.leanback.widget.PresenterSelector {
+ ctor public ControlButtonPresenterSelector();
+ method public android.support.v17.leanback.widget.Presenter getPresenter(java.lang.Object);
+ method public android.support.v17.leanback.widget.Presenter getPrimaryPresenter();
+ method public android.support.v17.leanback.widget.Presenter getSecondaryPresenter();
+ }
+
+ public class CursorObjectAdapter extends android.support.v17.leanback.widget.ObjectAdapter {
+ ctor public CursorObjectAdapter(android.support.v17.leanback.widget.PresenterSelector);
+ ctor public CursorObjectAdapter(android.support.v17.leanback.widget.Presenter);
+ ctor public CursorObjectAdapter();
+ method public void changeCursor(android.database.Cursor);
+ method public void close();
+ method public java.lang.Object get(int);
+ method public final android.database.Cursor getCursor();
+ method public final android.support.v17.leanback.database.CursorMapper getMapper();
+ method protected final void invalidateCache(int);
+ method protected final void invalidateCache(int, int);
+ method public boolean isClosed();
+ method protected void onCursorChanged();
+ method protected void onMapperChanged();
+ method public final void setMapper(android.support.v17.leanback.database.CursorMapper);
+ method public int size();
+ method public android.database.Cursor swapCursor(android.database.Cursor);
+ }
+
+ public class DetailsOverviewLogoPresenter extends android.support.v17.leanback.widget.Presenter {
+ ctor public DetailsOverviewLogoPresenter();
+ method public boolean isBoundToImage(android.support.v17.leanback.widget.DetailsOverviewLogoPresenter.ViewHolder, android.support.v17.leanback.widget.DetailsOverviewRow);
+ method public void onBindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder, java.lang.Object);
+ method public android.view.View onCreateView(android.view.ViewGroup);
+ method public android.support.v17.leanback.widget.Presenter.ViewHolder onCreateViewHolder(android.view.ViewGroup);
+ method public void onUnbindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder);
+ method public void setContext(android.support.v17.leanback.widget.DetailsOverviewLogoPresenter.ViewHolder, android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder, android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter);
+ }
+
+ public static class DetailsOverviewLogoPresenter.ViewHolder extends android.support.v17.leanback.widget.Presenter.ViewHolder {
+ ctor public DetailsOverviewLogoPresenter.ViewHolder(android.view.View);
+ method public android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter getParentPresenter();
+ method public android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder getParentViewHolder();
+ method public boolean isSizeFromDrawableIntrinsic();
+ method public void setSizeFromDrawableIntrinsic(boolean);
+ field protected android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter mParentPresenter;
+ field protected android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder mParentViewHolder;
+ }
+
+ public class DetailsOverviewRow extends android.support.v17.leanback.widget.Row {
+ ctor public DetailsOverviewRow(java.lang.Object);
+ method public final deprecated void addAction(android.support.v17.leanback.widget.Action);
+ method public final deprecated void addAction(int, android.support.v17.leanback.widget.Action);
+ method public android.support.v17.leanback.widget.Action getActionForKeyCode(int);
+ method public final deprecated java.util.List<android.support.v17.leanback.widget.Action> getActions();
+ method public final android.support.v17.leanback.widget.ObjectAdapter getActionsAdapter();
+ method public final android.graphics.drawable.Drawable getImageDrawable();
+ method public final java.lang.Object getItem();
+ method public boolean isImageScaleUpAllowed();
+ method public final deprecated boolean removeAction(android.support.v17.leanback.widget.Action);
+ method public final void setActionsAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public final void setImageBitmap(android.content.Context, android.graphics.Bitmap);
+ method public final void setImageDrawable(android.graphics.drawable.Drawable);
+ method public void setImageScaleUpAllowed(boolean);
+ method public final void setItem(java.lang.Object);
+ }
+
+ public static class DetailsOverviewRow.Listener {
+ ctor public DetailsOverviewRow.Listener();
+ method public void onActionsAdapterChanged(android.support.v17.leanback.widget.DetailsOverviewRow);
+ method public void onImageDrawableChanged(android.support.v17.leanback.widget.DetailsOverviewRow);
+ method public void onItemChanged(android.support.v17.leanback.widget.DetailsOverviewRow);
+ }
+
+ public deprecated class DetailsOverviewRowPresenter extends android.support.v17.leanback.widget.RowPresenter {
+ ctor public DetailsOverviewRowPresenter(android.support.v17.leanback.widget.Presenter);
+ method protected android.support.v17.leanback.widget.RowPresenter.ViewHolder createRowViewHolder(android.view.ViewGroup);
+ method public int getBackgroundColor();
+ method public android.support.v17.leanback.widget.OnActionClickedListener getOnActionClickedListener();
+ method public boolean isStyleLarge();
+ method public final boolean isUsingDefaultSelectEffect();
+ method public void setBackgroundColor(int);
+ method public void setOnActionClickedListener(android.support.v17.leanback.widget.OnActionClickedListener);
+ method public final void setSharedElementEnterTransition(android.app.Activity, java.lang.String, long);
+ method public final void setSharedElementEnterTransition(android.app.Activity, java.lang.String);
+ method public void setStyleLarge(boolean);
+ }
+
+ public final class DetailsOverviewRowPresenter.ViewHolder extends android.support.v17.leanback.widget.RowPresenter.ViewHolder {
+ ctor public DetailsOverviewRowPresenter.ViewHolder(android.view.View, android.support.v17.leanback.widget.Presenter);
+ field public final android.support.v17.leanback.widget.Presenter.ViewHolder mDetailsDescriptionViewHolder;
+ }
+
+ public class DetailsParallax extends android.support.v17.leanback.widget.RecyclerViewParallax {
+ ctor public DetailsParallax();
+ method public android.support.v17.leanback.widget.Parallax.IntProperty getOverviewRowBottom();
+ method public android.support.v17.leanback.widget.Parallax.IntProperty getOverviewRowTop();
+ }
+
+ public abstract class DiffCallback<Value> {
+ ctor public DiffCallback();
+ method public abstract boolean areContentsTheSame(Value, Value);
+ method public abstract boolean areItemsTheSame(Value, Value);
+ method public java.lang.Object getChangePayload(Value, Value);
+ }
+
+ public class DividerPresenter extends android.support.v17.leanback.widget.Presenter {
+ ctor public DividerPresenter();
+ method public void onBindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder, java.lang.Object);
+ method public android.support.v17.leanback.widget.Presenter.ViewHolder onCreateViewHolder(android.view.ViewGroup);
+ method public void onUnbindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder);
+ }
+
+ public class DividerRow extends android.support.v17.leanback.widget.Row {
+ ctor public DividerRow();
+ method public final boolean isRenderedAsRowView();
+ }
+
+ public abstract interface FacetProvider {
+ method public abstract java.lang.Object getFacet(java.lang.Class<?>);
+ }
+
+ public abstract interface FacetProviderAdapter {
+ method public abstract android.support.v17.leanback.widget.FacetProvider getFacetProvider(int);
+ }
+
+ public abstract interface FocusHighlight {
+ field public static final int ZOOM_FACTOR_LARGE = 3; // 0x3
+ field public static final int ZOOM_FACTOR_MEDIUM = 2; // 0x2
+ field public static final int ZOOM_FACTOR_NONE = 0; // 0x0
+ field public static final int ZOOM_FACTOR_SMALL = 1; // 0x1
+ field public static final int ZOOM_FACTOR_XSMALL = 4; // 0x4
+ }
+
+ public class FocusHighlightHelper {
+ ctor public FocusHighlightHelper();
+ method public static void setupBrowseItemFocusHighlight(android.support.v17.leanback.widget.ItemBridgeAdapter, int, boolean);
+ method public static deprecated void setupHeaderItemFocusHighlight(android.support.v17.leanback.widget.VerticalGridView);
+ method public static deprecated void setupHeaderItemFocusHighlight(android.support.v17.leanback.widget.VerticalGridView, boolean);
+ method public static void setupHeaderItemFocusHighlight(android.support.v17.leanback.widget.ItemBridgeAdapter);
+ method public static void setupHeaderItemFocusHighlight(android.support.v17.leanback.widget.ItemBridgeAdapter, boolean);
+ }
+
+ public abstract interface FragmentAnimationProvider {
+ method public abstract void onImeAppearing(java.util.List<android.animation.Animator>);
+ method public abstract void onImeDisappearing(java.util.List<android.animation.Animator>);
+ }
+
+ public class FullWidthDetailsOverviewRowPresenter extends android.support.v17.leanback.widget.RowPresenter {
+ ctor public FullWidthDetailsOverviewRowPresenter(android.support.v17.leanback.widget.Presenter);
+ ctor public FullWidthDetailsOverviewRowPresenter(android.support.v17.leanback.widget.Presenter, android.support.v17.leanback.widget.DetailsOverviewLogoPresenter);
+ method protected android.support.v17.leanback.widget.RowPresenter.ViewHolder createRowViewHolder(android.view.ViewGroup);
+ method public final int getActionsBackgroundColor();
+ method public final int getAlignmentMode();
+ method public final int getBackgroundColor();
+ method public final int getInitialState();
+ method protected int getLayoutResourceId();
+ method public android.support.v17.leanback.widget.OnActionClickedListener getOnActionClickedListener();
+ method public final boolean isParticipatingEntranceTransition();
+ method public final boolean isUsingDefaultSelectEffect();
+ method public final void notifyOnBindLogo(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder);
+ method protected void onLayoutLogo(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder, int, boolean);
+ method protected void onLayoutOverviewFrame(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder, int, boolean);
+ method protected void onStateChanged(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder, int);
+ method public final void setActionsBackgroundColor(int);
+ method public final void setAlignmentMode(int);
+ method public final void setBackgroundColor(int);
+ method public final void setInitialState(int);
+ method public final void setListener(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.Listener);
+ method public void setOnActionClickedListener(android.support.v17.leanback.widget.OnActionClickedListener);
+ method public final void setParticipatingEntranceTransition(boolean);
+ method public final void setState(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder, int);
+ field public static final int ALIGN_MODE_MIDDLE = 1; // 0x1
+ field public static final int ALIGN_MODE_START = 0; // 0x0
+ field public static final int STATE_FULL = 1; // 0x1
+ field public static final int STATE_HALF = 0; // 0x0
+ field public static final int STATE_SMALL = 2; // 0x2
+ field protected int mInitialState;
+ }
+
+ public static abstract class FullWidthDetailsOverviewRowPresenter.Listener {
+ ctor public FullWidthDetailsOverviewRowPresenter.Listener();
+ method public void onBindLogo(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder);
+ }
+
+ public class FullWidthDetailsOverviewRowPresenter.ViewHolder extends android.support.v17.leanback.widget.RowPresenter.ViewHolder {
+ ctor public FullWidthDetailsOverviewRowPresenter.ViewHolder(android.view.View, android.support.v17.leanback.widget.Presenter, android.support.v17.leanback.widget.DetailsOverviewLogoPresenter);
+ method protected android.support.v17.leanback.widget.DetailsOverviewRow.Listener createRowListener();
+ method public final android.view.ViewGroup getActionsRow();
+ method public final android.view.ViewGroup getDetailsDescriptionFrame();
+ method public final android.support.v17.leanback.widget.Presenter.ViewHolder getDetailsDescriptionViewHolder();
+ method public final android.support.v17.leanback.widget.DetailsOverviewLogoPresenter.ViewHolder getLogoViewHolder();
+ method public final android.view.ViewGroup getOverviewView();
+ method public final int getState();
+ field protected final android.support.v17.leanback.widget.DetailsOverviewRow.Listener mRowListener;
+ }
+
+ public class FullWidthDetailsOverviewRowPresenter.ViewHolder.DetailsOverviewRowListener extends android.support.v17.leanback.widget.DetailsOverviewRow.Listener {
+ ctor public FullWidthDetailsOverviewRowPresenter.ViewHolder.DetailsOverviewRowListener();
+ }
+
+ public class FullWidthDetailsOverviewSharedElementHelper extends android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.Listener {
+ ctor public FullWidthDetailsOverviewSharedElementHelper();
+ method public boolean getAutoStartSharedElementTransition();
+ method public void setAutoStartSharedElementTransition(boolean);
+ method public void setSharedElementEnterTransition(android.app.Activity, java.lang.String);
+ method public void setSharedElementEnterTransition(android.app.Activity, java.lang.String, long);
+ method public void startPostponedEnterTransition();
+ }
+
+ public class GuidanceStylist implements android.support.v17.leanback.widget.FragmentAnimationProvider {
+ ctor public GuidanceStylist();
+ method public android.widget.TextView getBreadcrumbView();
+ method public android.widget.TextView getDescriptionView();
+ method public android.widget.ImageView getIconView();
+ method public android.widget.TextView getTitleView();
+ method public android.view.View onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.support.v17.leanback.widget.GuidanceStylist.Guidance);
+ method public void onDestroyView();
+ method public void onImeAppearing(java.util.List<android.animation.Animator>);
+ method public void onImeDisappearing(java.util.List<android.animation.Animator>);
+ method public int onProvideLayoutId();
+ }
+
+ public static class GuidanceStylist.Guidance {
+ ctor public GuidanceStylist.Guidance(java.lang.String, java.lang.String, java.lang.String, android.graphics.drawable.Drawable);
+ method public java.lang.String getBreadcrumb();
+ method public java.lang.String getDescription();
+ method public android.graphics.drawable.Drawable getIconDrawable();
+ method public java.lang.String getTitle();
+ }
+
+ public class GuidedAction extends android.support.v17.leanback.widget.Action {
+ ctor protected GuidedAction();
+ method public int getCheckSetId();
+ method public java.lang.CharSequence getDescription();
+ method public int getDescriptionEditInputType();
+ method public int getDescriptionInputType();
+ method public java.lang.CharSequence getEditDescription();
+ method public int getEditInputType();
+ method public java.lang.CharSequence getEditTitle();
+ method public int getInputType();
+ method public android.content.Intent getIntent();
+ method public java.util.List<android.support.v17.leanback.widget.GuidedAction> getSubActions();
+ method public java.lang.CharSequence getTitle();
+ method public boolean hasEditableActivatorView();
+ method public boolean hasMultilineDescription();
+ method public boolean hasNext();
+ method public boolean hasSubActions();
+ method public boolean hasTextEditable();
+ method public boolean infoOnly();
+ method public final boolean isAutoSaveRestoreEnabled();
+ method public boolean isChecked();
+ method public boolean isDescriptionEditable();
+ method public boolean isEditTitleUsed();
+ method public boolean isEditable();
+ method public boolean isEnabled();
+ method public boolean isFocusable();
+ method public void onRestoreInstanceState(android.os.Bundle, java.lang.String);
+ method public void onSaveInstanceState(android.os.Bundle, java.lang.String);
+ method public void setChecked(boolean);
+ method public void setDescription(java.lang.CharSequence);
+ method public void setEditDescription(java.lang.CharSequence);
+ method public void setEditTitle(java.lang.CharSequence);
+ method public void setEnabled(boolean);
+ method public void setFocusable(boolean);
+ method public void setIntent(android.content.Intent);
+ method public void setSubActions(java.util.List<android.support.v17.leanback.widget.GuidedAction>);
+ method public void setTitle(java.lang.CharSequence);
+ field public static final long ACTION_ID_CANCEL = -5L; // 0xfffffffffffffffbL
+ field public static final long ACTION_ID_CONTINUE = -7L; // 0xfffffffffffffff9L
+ field public static final long ACTION_ID_CURRENT = -3L; // 0xfffffffffffffffdL
+ field public static final long ACTION_ID_FINISH = -6L; // 0xfffffffffffffffaL
+ field public static final long ACTION_ID_NEXT = -2L; // 0xfffffffffffffffeL
+ field public static final long ACTION_ID_NO = -9L; // 0xfffffffffffffff7L
+ field public static final long ACTION_ID_OK = -4L; // 0xfffffffffffffffcL
+ field public static final long ACTION_ID_YES = -8L; // 0xfffffffffffffff8L
+ field public static final int CHECKBOX_CHECK_SET_ID = -1; // 0xffffffff
+ field public static final int DEFAULT_CHECK_SET_ID = 1; // 0x1
+ field public static final int NO_CHECK_SET = 0; // 0x0
+ }
+
+ public static class GuidedAction.Builder extends android.support.v17.leanback.widget.GuidedAction.BuilderBase {
+ ctor public deprecated GuidedAction.Builder();
+ ctor public GuidedAction.Builder(android.content.Context);
+ method public android.support.v17.leanback.widget.GuidedAction build();
+ }
+
+ public static abstract class GuidedAction.BuilderBase<B extends android.support.v17.leanback.widget.GuidedAction.BuilderBase> {
+ ctor public GuidedAction.BuilderBase(android.content.Context);
+ method protected final void applyValues(android.support.v17.leanback.widget.GuidedAction);
+ method public B autoSaveRestoreEnabled(boolean);
+ method public B checkSetId(int);
+ method public B checked(boolean);
+ method public B clickAction(long);
+ method public B description(java.lang.CharSequence);
+ method public B description(int);
+ method public B descriptionEditInputType(int);
+ method public B descriptionEditable(boolean);
+ method public B descriptionInputType(int);
+ method public B editDescription(java.lang.CharSequence);
+ method public B editDescription(int);
+ method public B editInputType(int);
+ method public B editTitle(java.lang.CharSequence);
+ method public B editTitle(int);
+ method public B editable(boolean);
+ method public B enabled(boolean);
+ method public B focusable(boolean);
+ method public android.content.Context getContext();
+ method public B hasEditableActivatorView(boolean);
+ method public B hasNext(boolean);
+ method public B icon(android.graphics.drawable.Drawable);
+ method public B icon(int);
+ method public deprecated B iconResourceId(int, android.content.Context);
+ method public B id(long);
+ method public B infoOnly(boolean);
+ method public B inputType(int);
+ method public B intent(android.content.Intent);
+ method public B multilineDescription(boolean);
+ method public B subActions(java.util.List<android.support.v17.leanback.widget.GuidedAction>);
+ method public B title(java.lang.CharSequence);
+ method public B title(int);
+ }
+
+ public class GuidedActionEditText extends android.widget.EditText implements android.support.v17.leanback.widget.ImeKeyMonitor {
+ ctor public GuidedActionEditText(android.content.Context);
+ ctor public GuidedActionEditText(android.content.Context, android.util.AttributeSet);
+ ctor public GuidedActionEditText(android.content.Context, android.util.AttributeSet, int);
+ method public void setImeKeyListener(android.support.v17.leanback.widget.ImeKeyMonitor.ImeKeyListener);
+ }
+
+ public class GuidedActionsStylist implements android.support.v17.leanback.widget.FragmentAnimationProvider {
+ ctor public GuidedActionsStylist();
+ method public void collapseAction(boolean);
+ method public void expandAction(android.support.v17.leanback.widget.GuidedAction, boolean);
+ method public android.support.v17.leanback.widget.VerticalGridView getActionsGridView();
+ method public android.support.v17.leanback.widget.GuidedAction getExpandedAction();
+ method public int getItemViewType(android.support.v17.leanback.widget.GuidedAction);
+ method public android.support.v17.leanback.widget.VerticalGridView getSubActionsGridView();
+ method public final boolean isBackKeyToCollapseActivatorView();
+ method public final boolean isBackKeyToCollapseSubActions();
+ method public boolean isButtonActions();
+ method public boolean isExpandTransitionSupported();
+ method public boolean isExpanded();
+ method public boolean isInExpandTransition();
+ method public boolean isSubActionsExpanded();
+ method public void onAnimateItemChecked(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, boolean);
+ method public void onAnimateItemFocused(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, boolean);
+ method public void onAnimateItemPressed(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, boolean);
+ method public void onAnimateItemPressedCancelled(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder);
+ method public void onBindActivatorView(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, android.support.v17.leanback.widget.GuidedAction);
+ method public void onBindCheckMarkView(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, android.support.v17.leanback.widget.GuidedAction);
+ method public void onBindChevronView(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, android.support.v17.leanback.widget.GuidedAction);
+ method public void onBindViewHolder(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, android.support.v17.leanback.widget.GuidedAction);
+ method public android.view.View onCreateView(android.view.LayoutInflater, android.view.ViewGroup);
+ method public android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder onCreateViewHolder(android.view.ViewGroup);
+ method public android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder onCreateViewHolder(android.view.ViewGroup, int);
+ method public void onDestroyView();
+ method protected deprecated void onEditingModeChange(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, android.support.v17.leanback.widget.GuidedAction, boolean);
+ method protected void onEditingModeChange(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, boolean, boolean);
+ method public void onImeAppearing(java.util.List<android.animation.Animator>);
+ method public void onImeDisappearing(java.util.List<android.animation.Animator>);
+ method public int onProvideItemLayoutId();
+ method public int onProvideItemLayoutId(int);
+ method public int onProvideLayoutId();
+ method public boolean onUpdateActivatorView(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, android.support.v17.leanback.widget.GuidedAction);
+ method public void onUpdateExpandedViewHolder(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder);
+ method public void openInEditMode(android.support.v17.leanback.widget.GuidedAction);
+ method public void setAsButtonActions();
+ method public final void setBackKeyToCollapseActivatorView(boolean);
+ method public final void setBackKeyToCollapseSubActions(boolean);
+ method public deprecated void setEditingMode(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, android.support.v17.leanback.widget.GuidedAction, boolean);
+ method public deprecated void setExpandedViewHolder(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder);
+ method protected void setupImeOptions(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, android.support.v17.leanback.widget.GuidedAction);
+ method public deprecated void startExpandedTransition(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder);
+ field public static final int VIEW_TYPE_DATE_PICKER = 1; // 0x1
+ field public static final int VIEW_TYPE_DEFAULT = 0; // 0x0
+ }
+
+ public static class GuidedActionsStylist.ViewHolder extends android.support.v7.widget.RecyclerView.ViewHolder implements android.support.v17.leanback.widget.FacetProvider {
+ ctor public GuidedActionsStylist.ViewHolder(android.view.View);
+ ctor public GuidedActionsStylist.ViewHolder(android.view.View, boolean);
+ method public android.support.v17.leanback.widget.GuidedAction getAction();
+ method public android.widget.ImageView getCheckmarkView();
+ method public android.widget.ImageView getChevronView();
+ method public android.view.View getContentView();
+ method public android.widget.TextView getDescriptionView();
+ method public android.widget.EditText getEditableDescriptionView();
+ method public android.widget.EditText getEditableTitleView();
+ method public android.view.View getEditingView();
+ method public java.lang.Object getFacet(java.lang.Class<?>);
+ method public android.widget.ImageView getIconView();
+ method public android.widget.TextView getTitleView();
+ method public boolean isInEditing();
+ method public boolean isInEditingActivatorView();
+ method public boolean isInEditingDescription();
+ method public boolean isInEditingText();
+ method public boolean isInEditingTitle();
+ method public boolean isSubAction();
+ }
+
+ public class GuidedDatePickerAction extends android.support.v17.leanback.widget.GuidedAction {
+ ctor public GuidedDatePickerAction();
+ method public long getDate();
+ method public java.lang.String getDatePickerFormat();
+ method public long getMaxDate();
+ method public long getMinDate();
+ method public void setDate(long);
+ }
+
+ public static final class GuidedDatePickerAction.Builder extends android.support.v17.leanback.widget.GuidedDatePickerAction.BuilderBase {
+ ctor public GuidedDatePickerAction.Builder(android.content.Context);
+ method public android.support.v17.leanback.widget.GuidedDatePickerAction build();
+ }
+
+ public static abstract class GuidedDatePickerAction.BuilderBase<B extends android.support.v17.leanback.widget.GuidedDatePickerAction.BuilderBase> extends android.support.v17.leanback.widget.GuidedAction.BuilderBase {
+ ctor public GuidedDatePickerAction.BuilderBase(android.content.Context);
+ method protected final void applyDatePickerValues(android.support.v17.leanback.widget.GuidedDatePickerAction);
+ method public B date(long);
+ method public B datePickerFormat(java.lang.String);
+ method public B maxDate(long);
+ method public B minDate(long);
+ }
+
+ public class HeaderItem {
+ ctor public HeaderItem(long, java.lang.String);
+ ctor public HeaderItem(java.lang.String);
+ method public java.lang.CharSequence getContentDescription();
+ method public java.lang.CharSequence getDescription();
+ method public final long getId();
+ method public final java.lang.String getName();
+ method public void setContentDescription(java.lang.CharSequence);
+ method public void setDescription(java.lang.CharSequence);
+ }
+
+ public class HorizontalGridView extends android.support.v17.leanback.widget.BaseGridView {
+ ctor public HorizontalGridView(android.content.Context);
+ ctor public HorizontalGridView(android.content.Context, android.util.AttributeSet);
+ ctor public HorizontalGridView(android.content.Context, android.util.AttributeSet, int);
+ method public final boolean getFadingLeftEdge();
+ method public final int getFadingLeftEdgeLength();
+ method public final int getFadingLeftEdgeOffset();
+ method public final boolean getFadingRightEdge();
+ method public final int getFadingRightEdgeLength();
+ method public final int getFadingRightEdgeOffset();
+ method protected void initAttributes(android.content.Context, android.util.AttributeSet);
+ method public final void setFadingLeftEdge(boolean);
+ method public final void setFadingLeftEdgeLength(int);
+ method public final void setFadingLeftEdgeOffset(int);
+ method public final void setFadingRightEdge(boolean);
+ method public final void setFadingRightEdgeLength(int);
+ method public final void setFadingRightEdgeOffset(int);
+ method public void setNumRows(int);
+ method public void setRowHeight(int);
+ }
+
+ public final class HorizontalHoverCardSwitcher extends android.support.v17.leanback.widget.PresenterSwitcher {
+ ctor public HorizontalHoverCardSwitcher();
+ method protected void insertView(android.view.View);
+ method public void select(android.support.v17.leanback.widget.HorizontalGridView, android.view.View, java.lang.Object);
+ }
+
+ public class ImageCardView extends android.support.v17.leanback.widget.BaseCardView {
+ ctor public deprecated ImageCardView(android.content.Context, int);
+ ctor public ImageCardView(android.content.Context, android.util.AttributeSet, int);
+ ctor public ImageCardView(android.content.Context);
+ ctor public ImageCardView(android.content.Context, android.util.AttributeSet);
+ method public android.graphics.drawable.Drawable getBadgeImage();
+ method public java.lang.CharSequence getContentText();
+ method public android.graphics.drawable.Drawable getInfoAreaBackground();
+ method public android.graphics.drawable.Drawable getMainImage();
+ method public final android.widget.ImageView getMainImageView();
+ method public java.lang.CharSequence getTitleText();
+ method public void setBadgeImage(android.graphics.drawable.Drawable);
+ method public void setContentText(java.lang.CharSequence);
+ method public void setInfoAreaBackground(android.graphics.drawable.Drawable);
+ method public void setInfoAreaBackgroundColor(int);
+ method public void setMainImage(android.graphics.drawable.Drawable);
+ method public void setMainImage(android.graphics.drawable.Drawable, boolean);
+ method public void setMainImageAdjustViewBounds(boolean);
+ method public void setMainImageDimensions(int, int);
+ method public void setMainImageScaleType(android.widget.ImageView.ScaleType);
+ method public void setTitleText(java.lang.CharSequence);
+ field public static final int CARD_TYPE_FLAG_CONTENT = 2; // 0x2
+ field public static final int CARD_TYPE_FLAG_ICON_LEFT = 8; // 0x8
+ field public static final int CARD_TYPE_FLAG_ICON_RIGHT = 4; // 0x4
+ field public static final int CARD_TYPE_FLAG_IMAGE_ONLY = 0; // 0x0
+ field public static final int CARD_TYPE_FLAG_TITLE = 1; // 0x1
+ }
+
+ public abstract interface ImeKeyMonitor {
+ method public abstract void setImeKeyListener(android.support.v17.leanback.widget.ImeKeyMonitor.ImeKeyListener);
+ }
+
+ public static abstract interface ImeKeyMonitor.ImeKeyListener {
+ method public abstract boolean onKeyPreIme(android.widget.EditText, int, android.view.KeyEvent);
+ }
+
+ public final class ItemAlignmentFacet {
+ ctor public ItemAlignmentFacet();
+ method public android.support.v17.leanback.widget.ItemAlignmentFacet.ItemAlignmentDef[] getAlignmentDefs();
+ method public boolean isMultiAlignment();
+ method public void setAlignmentDefs(android.support.v17.leanback.widget.ItemAlignmentFacet.ItemAlignmentDef[]);
+ field public static final float ITEM_ALIGN_OFFSET_PERCENT_DISABLED = -1.0f;
+ }
+
+ public static class ItemAlignmentFacet.ItemAlignmentDef {
+ ctor public ItemAlignmentFacet.ItemAlignmentDef();
+ method public final int getItemAlignmentFocusViewId();
+ method public final int getItemAlignmentOffset();
+ method public final float getItemAlignmentOffsetPercent();
+ method public final int getItemAlignmentViewId();
+ method public boolean isAlignedToTextViewBaseLine();
+ method public final boolean isItemAlignmentOffsetWithPadding();
+ method public final void setAlignedToTextViewBaseline(boolean);
+ method public final void setItemAlignmentFocusViewId(int);
+ method public final void setItemAlignmentOffset(int);
+ method public final void setItemAlignmentOffsetPercent(float);
+ method public final void setItemAlignmentOffsetWithPadding(boolean);
+ method public final void setItemAlignmentViewId(int);
+ }
+
+ public class ItemBridgeAdapter extends android.support.v7.widget.RecyclerView.Adapter implements android.support.v17.leanback.widget.FacetProviderAdapter {
+ ctor public ItemBridgeAdapter(android.support.v17.leanback.widget.ObjectAdapter, android.support.v17.leanback.widget.PresenterSelector);
+ ctor public ItemBridgeAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ ctor public ItemBridgeAdapter();
+ method public void clear();
+ method public android.support.v17.leanback.widget.FacetProvider getFacetProvider(int);
+ method public int getItemCount();
+ method public java.util.ArrayList<android.support.v17.leanback.widget.Presenter> getPresenterMapper();
+ method public android.support.v17.leanback.widget.ItemBridgeAdapter.Wrapper getWrapper();
+ method protected void onAddPresenter(android.support.v17.leanback.widget.Presenter, int);
+ method protected void onAttachedToWindow(android.support.v17.leanback.widget.ItemBridgeAdapter.ViewHolder);
+ method protected void onBind(android.support.v17.leanback.widget.ItemBridgeAdapter.ViewHolder);
+ method public final void onBindViewHolder(android.support.v7.widget.RecyclerView.ViewHolder, int);
+ method public final void onBindViewHolder(android.support.v7.widget.RecyclerView.ViewHolder, int, java.util.List);
+ method protected void onCreate(android.support.v17.leanback.widget.ItemBridgeAdapter.ViewHolder);
+ method public final android.support.v7.widget.RecyclerView.ViewHolder onCreateViewHolder(android.view.ViewGroup, int);
+ method protected void onDetachedFromWindow(android.support.v17.leanback.widget.ItemBridgeAdapter.ViewHolder);
+ method protected void onUnbind(android.support.v17.leanback.widget.ItemBridgeAdapter.ViewHolder);
+ method public final void onViewAttachedToWindow(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public final void onViewDetachedFromWindow(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public final void onViewRecycled(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public void setAdapterListener(android.support.v17.leanback.widget.ItemBridgeAdapter.AdapterListener);
+ method public void setPresenter(android.support.v17.leanback.widget.PresenterSelector);
+ method public void setPresenterMapper(java.util.ArrayList<android.support.v17.leanback.widget.Presenter>);
+ method public void setWrapper(android.support.v17.leanback.widget.ItemBridgeAdapter.Wrapper);
+ }
+
+ public static class ItemBridgeAdapter.AdapterListener {
+ ctor public ItemBridgeAdapter.AdapterListener();
+ method public void onAddPresenter(android.support.v17.leanback.widget.Presenter, int);
+ method public void onAttachedToWindow(android.support.v17.leanback.widget.ItemBridgeAdapter.ViewHolder);
+ method public void onBind(android.support.v17.leanback.widget.ItemBridgeAdapter.ViewHolder);
+ method public void onBind(android.support.v17.leanback.widget.ItemBridgeAdapter.ViewHolder, java.util.List);
+ method public void onCreate(android.support.v17.leanback.widget.ItemBridgeAdapter.ViewHolder);
+ method public void onDetachedFromWindow(android.support.v17.leanback.widget.ItemBridgeAdapter.ViewHolder);
+ method public void onUnbind(android.support.v17.leanback.widget.ItemBridgeAdapter.ViewHolder);
+ }
+
+ public class ItemBridgeAdapter.ViewHolder extends android.support.v7.widget.RecyclerView.ViewHolder implements android.support.v17.leanback.widget.FacetProvider {
+ method public final java.lang.Object getExtraObject();
+ method public java.lang.Object getFacet(java.lang.Class<?>);
+ method public final java.lang.Object getItem();
+ method public final android.support.v17.leanback.widget.Presenter getPresenter();
+ method public final android.support.v17.leanback.widget.Presenter.ViewHolder getViewHolder();
+ method public void setExtraObject(java.lang.Object);
+ }
+
+ public static abstract class ItemBridgeAdapter.Wrapper {
+ ctor public ItemBridgeAdapter.Wrapper();
+ method public abstract android.view.View createWrapper(android.view.View);
+ method public abstract void wrap(android.view.View, android.view.View);
+ }
+
+ public class ItemBridgeAdapterShadowOverlayWrapper extends android.support.v17.leanback.widget.ItemBridgeAdapter.Wrapper {
+ ctor public ItemBridgeAdapterShadowOverlayWrapper(android.support.v17.leanback.widget.ShadowOverlayHelper);
+ method public android.view.View createWrapper(android.view.View);
+ method public void wrap(android.view.View, android.view.View);
+ }
+
+ public class ListRow extends android.support.v17.leanback.widget.Row {
+ ctor public ListRow(android.support.v17.leanback.widget.HeaderItem, android.support.v17.leanback.widget.ObjectAdapter);
+ ctor public ListRow(long, android.support.v17.leanback.widget.HeaderItem, android.support.v17.leanback.widget.ObjectAdapter);
+ ctor public ListRow(android.support.v17.leanback.widget.ObjectAdapter);
+ method public final android.support.v17.leanback.widget.ObjectAdapter getAdapter();
+ method public java.lang.CharSequence getContentDescription();
+ method public void setContentDescription(java.lang.CharSequence);
+ }
+
+ public final class ListRowHoverCardView extends android.widget.LinearLayout {
+ ctor public ListRowHoverCardView(android.content.Context);
+ ctor public ListRowHoverCardView(android.content.Context, android.util.AttributeSet);
+ ctor public ListRowHoverCardView(android.content.Context, android.util.AttributeSet, int);
+ method public final java.lang.CharSequence getDescription();
+ method public final java.lang.CharSequence getTitle();
+ method public final void setDescription(java.lang.CharSequence);
+ method public final void setTitle(java.lang.CharSequence);
+ }
+
+ public class ListRowPresenter extends android.support.v17.leanback.widget.RowPresenter {
+ ctor public ListRowPresenter();
+ ctor public ListRowPresenter(int);
+ ctor public ListRowPresenter(int, boolean);
+ method protected void applySelectLevelToChild(android.support.v17.leanback.widget.ListRowPresenter.ViewHolder, android.view.View);
+ method public final boolean areChildRoundedCornersEnabled();
+ method protected android.support.v17.leanback.widget.RowPresenter.ViewHolder createRowViewHolder(android.view.ViewGroup);
+ method protected android.support.v17.leanback.widget.ShadowOverlayHelper.Options createShadowOverlayOptions();
+ method public final void enableChildRoundedCorners(boolean);
+ method public int getExpandedRowHeight();
+ method public final int getFocusZoomFactor();
+ method public final android.support.v17.leanback.widget.PresenterSelector getHoverCardPresenterSelector();
+ method public int getRecycledPoolSize(android.support.v17.leanback.widget.Presenter);
+ method public int getRowHeight();
+ method public final boolean getShadowEnabled();
+ method public final deprecated int getZoomFactor();
+ method public final boolean isFocusDimmerUsed();
+ method public final boolean isKeepChildForeground();
+ method public boolean isUsingDefaultListSelectEffect();
+ method public final boolean isUsingDefaultSelectEffect();
+ method public boolean isUsingDefaultShadow();
+ method public boolean isUsingOutlineClipping(android.content.Context);
+ method public boolean isUsingZOrder(android.content.Context);
+ method public void setExpandedRowHeight(int);
+ method public final void setHoverCardPresenterSelector(android.support.v17.leanback.widget.PresenterSelector);
+ method public final void setKeepChildForeground(boolean);
+ method public void setNumRows(int);
+ method public void setRecycledPoolSize(android.support.v17.leanback.widget.Presenter, int);
+ method public void setRowHeight(int);
+ method public final void setShadowEnabled(boolean);
+ }
+
+ public static class ListRowPresenter.SelectItemViewHolderTask extends android.support.v17.leanback.widget.Presenter.ViewHolderTask {
+ ctor public ListRowPresenter.SelectItemViewHolderTask(int);
+ method public int getItemPosition();
+ method public android.support.v17.leanback.widget.Presenter.ViewHolderTask getItemTask();
+ method public boolean isSmoothScroll();
+ method public void setItemPosition(int);
+ method public void setItemTask(android.support.v17.leanback.widget.Presenter.ViewHolderTask);
+ method public void setSmoothScroll(boolean);
+ }
+
+ public static class ListRowPresenter.ViewHolder extends android.support.v17.leanback.widget.RowPresenter.ViewHolder {
+ ctor public ListRowPresenter.ViewHolder(android.view.View, android.support.v17.leanback.widget.HorizontalGridView, android.support.v17.leanback.widget.ListRowPresenter);
+ method public final android.support.v17.leanback.widget.ItemBridgeAdapter getBridgeAdapter();
+ method public final android.support.v17.leanback.widget.HorizontalGridView getGridView();
+ method public android.support.v17.leanback.widget.Presenter.ViewHolder getItemViewHolder(int);
+ method public final android.support.v17.leanback.widget.ListRowPresenter getListRowPresenter();
+ method public int getSelectedPosition();
+ }
+
+ public final class ListRowView extends android.widget.LinearLayout {
+ ctor public ListRowView(android.content.Context);
+ ctor public ListRowView(android.content.Context, android.util.AttributeSet);
+ ctor public ListRowView(android.content.Context, android.util.AttributeSet, int);
+ method public android.support.v17.leanback.widget.HorizontalGridView getGridView();
+ }
+
+ public abstract interface MultiActionsProvider {
+ method public abstract android.support.v17.leanback.widget.MultiActionsProvider.MultiAction[] getActions();
+ }
+
+ public static class MultiActionsProvider.MultiAction {
+ ctor public MultiActionsProvider.MultiAction(long);
+ method public android.graphics.drawable.Drawable getCurrentDrawable();
+ method public android.graphics.drawable.Drawable[] getDrawables();
+ method public long getId();
+ method public int getIndex();
+ method public void incrementIndex();
+ method public void setDrawables(android.graphics.drawable.Drawable[]);
+ method public void setIndex(int);
+ }
+
+ public abstract class ObjectAdapter {
+ ctor public ObjectAdapter(android.support.v17.leanback.widget.PresenterSelector);
+ ctor public ObjectAdapter(android.support.v17.leanback.widget.Presenter);
+ ctor public ObjectAdapter();
+ method public abstract java.lang.Object get(int);
+ method public long getId(int);
+ method public final android.support.v17.leanback.widget.Presenter getPresenter(java.lang.Object);
+ method public final android.support.v17.leanback.widget.PresenterSelector getPresenterSelector();
+ method public final boolean hasStableIds();
+ method public boolean isImmediateNotifySupported();
+ method protected final void notifyChanged();
+ method protected final void notifyItemMoved(int, int);
+ method public final void notifyItemRangeChanged(int, int);
+ method public final void notifyItemRangeChanged(int, int, java.lang.Object);
+ method protected final void notifyItemRangeInserted(int, int);
+ method protected final void notifyItemRangeRemoved(int, int);
+ method protected void onHasStableIdsChanged();
+ method protected void onPresenterSelectorChanged();
+ method public final void registerObserver(android.support.v17.leanback.widget.ObjectAdapter.DataObserver);
+ method public final void setHasStableIds(boolean);
+ method public final void setPresenterSelector(android.support.v17.leanback.widget.PresenterSelector);
+ method public abstract int size();
+ method public final void unregisterAllObservers();
+ method public final void unregisterObserver(android.support.v17.leanback.widget.ObjectAdapter.DataObserver);
+ field public static final int NO_ID = -1; // 0xffffffff
+ }
+
+ public static abstract class ObjectAdapter.DataObserver {
+ ctor public ObjectAdapter.DataObserver();
+ method public void onChanged();
+ method public void onItemMoved(int, int);
+ method public void onItemRangeChanged(int, int);
+ method public void onItemRangeChanged(int, int, java.lang.Object);
+ method public void onItemRangeInserted(int, int);
+ method public void onItemRangeRemoved(int, int);
+ }
+
+ public abstract interface OnActionClickedListener {
+ method public abstract void onActionClicked(android.support.v17.leanback.widget.Action);
+ }
+
+ public abstract interface OnChildLaidOutListener {
+ method public abstract void onChildLaidOut(android.view.ViewGroup, android.view.View, int, long);
+ }
+
+ public abstract deprecated interface OnChildSelectedListener {
+ method public abstract void onChildSelected(android.view.ViewGroup, android.view.View, int, long);
+ }
+
+ public abstract class OnChildViewHolderSelectedListener {
+ ctor public OnChildViewHolderSelectedListener();
+ method public void onChildViewHolderSelected(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder, int, int);
+ method public void onChildViewHolderSelectedAndPositioned(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder, int, int);
+ }
+
+ public abstract interface OnItemViewClickedListener implements android.support.v17.leanback.widget.BaseOnItemViewClickedListener {
+ }
+
+ public abstract interface OnItemViewSelectedListener implements android.support.v17.leanback.widget.BaseOnItemViewSelectedListener {
+ }
+
+ public class PageRow extends android.support.v17.leanback.widget.Row {
+ ctor public PageRow(android.support.v17.leanback.widget.HeaderItem);
+ method public final boolean isRenderedAsRowView();
+ }
+
+ public abstract class Parallax<PropertyT extends android.util.Property> {
+ ctor public Parallax();
+ method public android.support.v17.leanback.widget.ParallaxEffect addEffect(android.support.v17.leanback.widget.Parallax.PropertyMarkerValue...);
+ method public final PropertyT addProperty(java.lang.String);
+ method public abstract PropertyT createProperty(java.lang.String, int);
+ method public java.util.List<android.support.v17.leanback.widget.ParallaxEffect> getEffects();
+ method public abstract float getMaxValue();
+ method public final java.util.List<PropertyT> getProperties();
+ method public void removeAllEffects();
+ method public void removeEffect(android.support.v17.leanback.widget.ParallaxEffect);
+ method public void updateValues();
+ }
+
+ public static class Parallax.FloatProperty extends android.util.Property {
+ ctor public Parallax.FloatProperty(java.lang.String, int);
+ method public final android.support.v17.leanback.widget.Parallax.PropertyMarkerValue at(float, float);
+ method public final android.support.v17.leanback.widget.Parallax.PropertyMarkerValue atAbsolute(float);
+ method public final android.support.v17.leanback.widget.Parallax.PropertyMarkerValue atFraction(float);
+ method public final android.support.v17.leanback.widget.Parallax.PropertyMarkerValue atMax();
+ method public final android.support.v17.leanback.widget.Parallax.PropertyMarkerValue atMin();
+ method public final java.lang.Float get(android.support.v17.leanback.widget.Parallax);
+ method public final int getIndex();
+ method public final float getValue(android.support.v17.leanback.widget.Parallax);
+ method public final void set(android.support.v17.leanback.widget.Parallax, java.lang.Float);
+ method public final void setValue(android.support.v17.leanback.widget.Parallax, float);
+ field public static final float UNKNOWN_AFTER = 3.4028235E38f;
+ field public static final float UNKNOWN_BEFORE = -3.4028235E38f;
+ }
+
+ public static class Parallax.IntProperty extends android.util.Property {
+ ctor public Parallax.IntProperty(java.lang.String, int);
+ method public final android.support.v17.leanback.widget.Parallax.PropertyMarkerValue at(int, float);
+ method public final android.support.v17.leanback.widget.Parallax.PropertyMarkerValue atAbsolute(int);
+ method public final android.support.v17.leanback.widget.Parallax.PropertyMarkerValue atFraction(float);
+ method public final android.support.v17.leanback.widget.Parallax.PropertyMarkerValue atMax();
+ method public final android.support.v17.leanback.widget.Parallax.PropertyMarkerValue atMin();
+ method public final java.lang.Integer get(android.support.v17.leanback.widget.Parallax);
+ method public final int getIndex();
+ method public final int getValue(android.support.v17.leanback.widget.Parallax);
+ method public final void set(android.support.v17.leanback.widget.Parallax, java.lang.Integer);
+ method public final void setValue(android.support.v17.leanback.widget.Parallax, int);
+ field public static final int UNKNOWN_AFTER = 2147483647; // 0x7fffffff
+ field public static final int UNKNOWN_BEFORE = -2147483648; // 0x80000000
+ }
+
+ public static class Parallax.PropertyMarkerValue<PropertyT> {
+ ctor public Parallax.PropertyMarkerValue(PropertyT);
+ method public PropertyT getProperty();
+ }
+
+ public abstract class ParallaxEffect {
+ method public final void addTarget(android.support.v17.leanback.widget.ParallaxTarget);
+ method public final java.util.List<android.support.v17.leanback.widget.Parallax.PropertyMarkerValue> getPropertyRanges();
+ method public final java.util.List<android.support.v17.leanback.widget.ParallaxTarget> getTargets();
+ method public final void performMapping(android.support.v17.leanback.widget.Parallax);
+ method public final void removeTarget(android.support.v17.leanback.widget.ParallaxTarget);
+ method public final void setPropertyRanges(android.support.v17.leanback.widget.Parallax.PropertyMarkerValue...);
+ method public final android.support.v17.leanback.widget.ParallaxEffect target(android.support.v17.leanback.widget.ParallaxTarget);
+ method public final android.support.v17.leanback.widget.ParallaxEffect target(java.lang.Object, android.animation.PropertyValuesHolder);
+ method public final <T, V extends java.lang.Number> android.support.v17.leanback.widget.ParallaxEffect target(T, android.util.Property<T, V>);
+ }
+
+ public abstract class ParallaxTarget {
+ ctor public ParallaxTarget();
+ method public void directUpdate(java.lang.Number);
+ method public boolean isDirectMapping();
+ method public void update(float);
+ }
+
+ public static final class ParallaxTarget.DirectPropertyTarget<T, V extends java.lang.Number> extends android.support.v17.leanback.widget.ParallaxTarget {
+ ctor public ParallaxTarget.DirectPropertyTarget(java.lang.Object, android.util.Property<T, V>);
+ }
+
+ public static final class ParallaxTarget.PropertyValuesHolderTarget extends android.support.v17.leanback.widget.ParallaxTarget {
+ ctor public ParallaxTarget.PropertyValuesHolderTarget(java.lang.Object, android.animation.PropertyValuesHolder);
+ }
+
+ public class PlaybackControlsRow extends android.support.v17.leanback.widget.Row {
+ ctor public PlaybackControlsRow(java.lang.Object);
+ ctor public PlaybackControlsRow();
+ method public android.support.v17.leanback.widget.Action getActionForKeyCode(int);
+ method public android.support.v17.leanback.widget.Action getActionForKeyCode(android.support.v17.leanback.widget.ObjectAdapter, int);
+ method public long getBufferedPosition();
+ method public deprecated int getBufferedProgress();
+ method public deprecated long getBufferedProgressLong();
+ method public long getCurrentPosition();
+ method public deprecated int getCurrentTime();
+ method public deprecated long getCurrentTimeLong();
+ method public long getDuration();
+ method public final android.graphics.drawable.Drawable getImageDrawable();
+ method public final java.lang.Object getItem();
+ method public final android.support.v17.leanback.widget.ObjectAdapter getPrimaryActionsAdapter();
+ method public final android.support.v17.leanback.widget.ObjectAdapter getSecondaryActionsAdapter();
+ method public deprecated int getTotalTime();
+ method public deprecated long getTotalTimeLong();
+ method public void setBufferedPosition(long);
+ method public deprecated void setBufferedProgress(int);
+ method public deprecated void setBufferedProgressLong(long);
+ method public void setCurrentPosition(long);
+ method public deprecated void setCurrentTime(int);
+ method public deprecated void setCurrentTimeLong(long);
+ method public void setDuration(long);
+ method public final void setImageBitmap(android.content.Context, android.graphics.Bitmap);
+ method public final void setImageDrawable(android.graphics.drawable.Drawable);
+ method public void setOnPlaybackProgressChangedListener(android.support.v17.leanback.widget.PlaybackControlsRow.OnPlaybackProgressCallback);
+ method public final void setPrimaryActionsAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public final void setSecondaryActionsAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public deprecated void setTotalTime(int);
+ method public deprecated void setTotalTimeLong(long);
+ }
+
+ public static class PlaybackControlsRow.ClosedCaptioningAction extends android.support.v17.leanback.widget.PlaybackControlsRow.MultiAction {
+ ctor public PlaybackControlsRow.ClosedCaptioningAction(android.content.Context);
+ ctor public PlaybackControlsRow.ClosedCaptioningAction(android.content.Context, int);
+ field public static final int INDEX_OFF = 0; // 0x0
+ field public static final int INDEX_ON = 1; // 0x1
+ field public static deprecated int OFF;
+ field public static deprecated int ON;
+ }
+
+ public static class PlaybackControlsRow.FastForwardAction extends android.support.v17.leanback.widget.PlaybackControlsRow.MultiAction {
+ ctor public PlaybackControlsRow.FastForwardAction(android.content.Context);
+ ctor public PlaybackControlsRow.FastForwardAction(android.content.Context, int);
+ }
+
+ public static class PlaybackControlsRow.HighQualityAction extends android.support.v17.leanback.widget.PlaybackControlsRow.MultiAction {
+ ctor public PlaybackControlsRow.HighQualityAction(android.content.Context);
+ ctor public PlaybackControlsRow.HighQualityAction(android.content.Context, int);
+ field public static final int INDEX_OFF = 0; // 0x0
+ field public static final int INDEX_ON = 1; // 0x1
+ field public static deprecated int OFF;
+ field public static deprecated int ON;
+ }
+
+ public static class PlaybackControlsRow.MoreActions extends android.support.v17.leanback.widget.Action {
+ ctor public PlaybackControlsRow.MoreActions(android.content.Context);
+ }
+
+ public static abstract class PlaybackControlsRow.MultiAction extends android.support.v17.leanback.widget.Action {
+ ctor public PlaybackControlsRow.MultiAction(int);
+ method public int getActionCount();
+ method public android.graphics.drawable.Drawable getDrawable(int);
+ method public int getIndex();
+ method public java.lang.String getLabel(int);
+ method public java.lang.String getSecondaryLabel(int);
+ method public void nextIndex();
+ method public void setDrawables(android.graphics.drawable.Drawable[]);
+ method public void setIndex(int);
+ method public void setLabels(java.lang.String[]);
+ method public void setSecondaryLabels(java.lang.String[]);
+ }
+
+ public static class PlaybackControlsRow.OnPlaybackProgressCallback {
+ ctor public PlaybackControlsRow.OnPlaybackProgressCallback();
+ method public void onBufferedPositionChanged(android.support.v17.leanback.widget.PlaybackControlsRow, long);
+ method public void onCurrentPositionChanged(android.support.v17.leanback.widget.PlaybackControlsRow, long);
+ method public void onDurationChanged(android.support.v17.leanback.widget.PlaybackControlsRow, long);
+ }
+
+ public static class PlaybackControlsRow.PictureInPictureAction extends android.support.v17.leanback.widget.Action {
+ ctor public PlaybackControlsRow.PictureInPictureAction(android.content.Context);
+ }
+
+ public static class PlaybackControlsRow.PlayPauseAction extends android.support.v17.leanback.widget.PlaybackControlsRow.MultiAction {
+ ctor public PlaybackControlsRow.PlayPauseAction(android.content.Context);
+ field public static final int INDEX_PAUSE = 1; // 0x1
+ field public static final int INDEX_PLAY = 0; // 0x0
+ field public static deprecated int PAUSE;
+ field public static deprecated int PLAY;
+ }
+
+ public static class PlaybackControlsRow.RepeatAction extends android.support.v17.leanback.widget.PlaybackControlsRow.MultiAction {
+ ctor public PlaybackControlsRow.RepeatAction(android.content.Context);
+ ctor public PlaybackControlsRow.RepeatAction(android.content.Context, int);
+ ctor public PlaybackControlsRow.RepeatAction(android.content.Context, int, int);
+ field public static deprecated int ALL;
+ field public static final int INDEX_ALL = 1; // 0x1
+ field public static final int INDEX_NONE = 0; // 0x0
+ field public static final int INDEX_ONE = 2; // 0x2
+ field public static deprecated int NONE;
+ field public static deprecated int ONE;
+ }
+
+ public static class PlaybackControlsRow.RewindAction extends android.support.v17.leanback.widget.PlaybackControlsRow.MultiAction {
+ ctor public PlaybackControlsRow.RewindAction(android.content.Context);
+ ctor public PlaybackControlsRow.RewindAction(android.content.Context, int);
+ }
+
+ public static class PlaybackControlsRow.ShuffleAction extends android.support.v17.leanback.widget.PlaybackControlsRow.MultiAction {
+ ctor public PlaybackControlsRow.ShuffleAction(android.content.Context);
+ ctor public PlaybackControlsRow.ShuffleAction(android.content.Context, int);
+ field public static final int INDEX_OFF = 0; // 0x0
+ field public static final int INDEX_ON = 1; // 0x1
+ field public static deprecated int OFF;
+ field public static deprecated int ON;
+ }
+
+ public static class PlaybackControlsRow.SkipNextAction extends android.support.v17.leanback.widget.Action {
+ ctor public PlaybackControlsRow.SkipNextAction(android.content.Context);
+ }
+
+ public static class PlaybackControlsRow.SkipPreviousAction extends android.support.v17.leanback.widget.Action {
+ ctor public PlaybackControlsRow.SkipPreviousAction(android.content.Context);
+ }
+
+ public static abstract class PlaybackControlsRow.ThumbsAction extends android.support.v17.leanback.widget.PlaybackControlsRow.MultiAction {
+ ctor public PlaybackControlsRow.ThumbsAction(int, android.content.Context, int, int);
+ field public static final int INDEX_OUTLINE = 1; // 0x1
+ field public static final int INDEX_SOLID = 0; // 0x0
+ field public static deprecated int OUTLINE;
+ field public static deprecated int SOLID;
+ }
+
+ public static class PlaybackControlsRow.ThumbsDownAction extends android.support.v17.leanback.widget.PlaybackControlsRow.ThumbsAction {
+ ctor public PlaybackControlsRow.ThumbsDownAction(android.content.Context);
+ }
+
+ public static class PlaybackControlsRow.ThumbsUpAction extends android.support.v17.leanback.widget.PlaybackControlsRow.ThumbsAction {
+ ctor public PlaybackControlsRow.ThumbsUpAction(android.content.Context);
+ }
+
+ public class PlaybackControlsRowPresenter extends android.support.v17.leanback.widget.PlaybackRowPresenter {
+ ctor public PlaybackControlsRowPresenter(android.support.v17.leanback.widget.Presenter);
+ ctor public PlaybackControlsRowPresenter();
+ method public boolean areSecondaryActionsHidden();
+ method protected android.support.v17.leanback.widget.RowPresenter.ViewHolder createRowViewHolder(android.view.ViewGroup);
+ method public int getBackgroundColor();
+ method public android.support.v17.leanback.widget.OnActionClickedListener getOnActionClickedListener();
+ method public int getProgressColor();
+ method public void setBackgroundColor(int);
+ method public void setOnActionClickedListener(android.support.v17.leanback.widget.OnActionClickedListener);
+ method public void setProgressColor(int);
+ method public void setSecondaryActionsHidden(boolean);
+ method public void showBottomSpace(android.support.v17.leanback.widget.PlaybackControlsRowPresenter.ViewHolder, boolean);
+ method public void showPrimaryActions(android.support.v17.leanback.widget.PlaybackControlsRowPresenter.ViewHolder);
+ }
+
+ public class PlaybackControlsRowPresenter.ViewHolder extends android.support.v17.leanback.widget.PlaybackRowPresenter.ViewHolder {
+ field public final android.support.v17.leanback.widget.Presenter.ViewHolder mDescriptionViewHolder;
+ }
+
+ public abstract class PlaybackRowPresenter extends android.support.v17.leanback.widget.RowPresenter {
+ ctor public PlaybackRowPresenter();
+ method public void onReappear(android.support.v17.leanback.widget.RowPresenter.ViewHolder);
+ }
+
+ public static class PlaybackRowPresenter.ViewHolder extends android.support.v17.leanback.widget.RowPresenter.ViewHolder {
+ ctor public PlaybackRowPresenter.ViewHolder(android.view.View);
+ }
+
+ public class PlaybackSeekDataProvider {
+ ctor public PlaybackSeekDataProvider();
+ method public long[] getSeekPositions();
+ method public void getThumbnail(int, android.support.v17.leanback.widget.PlaybackSeekDataProvider.ResultCallback);
+ method public void reset();
+ }
+
+ public static class PlaybackSeekDataProvider.ResultCallback {
+ ctor public PlaybackSeekDataProvider.ResultCallback();
+ method public void onThumbnailLoaded(android.graphics.Bitmap, int);
+ }
+
+ public abstract interface PlaybackSeekUi {
+ method public abstract void setPlaybackSeekUiClient(android.support.v17.leanback.widget.PlaybackSeekUi.Client);
+ }
+
+ public static class PlaybackSeekUi.Client {
+ ctor public PlaybackSeekUi.Client();
+ method public android.support.v17.leanback.widget.PlaybackSeekDataProvider getPlaybackSeekDataProvider();
+ method public boolean isSeekEnabled();
+ method public void onSeekFinished(boolean);
+ method public void onSeekPositionChanged(long);
+ method public void onSeekStarted();
+ }
+
+ public class PlaybackTransportRowPresenter extends android.support.v17.leanback.widget.PlaybackRowPresenter {
+ ctor public PlaybackTransportRowPresenter();
+ method protected android.support.v17.leanback.widget.RowPresenter.ViewHolder createRowViewHolder(android.view.ViewGroup);
+ method public float getDefaultSeekIncrement();
+ method public android.support.v17.leanback.widget.OnActionClickedListener getOnActionClickedListener();
+ method public int getProgressColor();
+ method protected void onProgressBarClicked(android.support.v17.leanback.widget.PlaybackTransportRowPresenter.ViewHolder);
+ method public void setDefaultSeekIncrement(float);
+ method public void setDescriptionPresenter(android.support.v17.leanback.widget.Presenter);
+ method public void setOnActionClickedListener(android.support.v17.leanback.widget.OnActionClickedListener);
+ method public void setProgressColor(int);
+ }
+
+ public class PlaybackTransportRowPresenter.ViewHolder extends android.support.v17.leanback.widget.PlaybackRowPresenter.ViewHolder implements android.support.v17.leanback.widget.PlaybackSeekUi {
+ ctor public PlaybackTransportRowPresenter.ViewHolder(android.view.View, android.support.v17.leanback.widget.Presenter);
+ method public final android.widget.TextView getCurrentPositionView();
+ method public final android.support.v17.leanback.widget.Presenter.ViewHolder getDescriptionViewHolder();
+ method public final android.widget.TextView getDurationView();
+ method protected void onSetCurrentPositionLabel(long);
+ method protected void onSetDurationLabel(long);
+ method public void setPlaybackSeekUiClient(android.support.v17.leanback.widget.PlaybackSeekUi.Client);
+ }
+
+ public abstract class Presenter implements android.support.v17.leanback.widget.FacetProvider {
+ ctor public Presenter();
+ method protected static void cancelAnimationsRecursive(android.view.View);
+ method public final java.lang.Object getFacet(java.lang.Class<?>);
+ method public abstract void onBindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder, java.lang.Object);
+ method public void onBindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder, java.lang.Object, java.util.List<java.lang.Object>);
+ method public abstract android.support.v17.leanback.widget.Presenter.ViewHolder onCreateViewHolder(android.view.ViewGroup);
+ method public abstract void onUnbindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder);
+ method public void onViewAttachedToWindow(android.support.v17.leanback.widget.Presenter.ViewHolder);
+ method public void onViewDetachedFromWindow(android.support.v17.leanback.widget.Presenter.ViewHolder);
+ method public final void setFacet(java.lang.Class<?>, java.lang.Object);
+ method public void setOnClickListener(android.support.v17.leanback.widget.Presenter.ViewHolder, android.view.View.OnClickListener);
+ }
+
+ public static class Presenter.ViewHolder implements android.support.v17.leanback.widget.FacetProvider {
+ ctor public Presenter.ViewHolder(android.view.View);
+ method public final java.lang.Object getFacet(java.lang.Class<?>);
+ method public final void setFacet(java.lang.Class<?>, java.lang.Object);
+ field public final android.view.View view;
+ }
+
+ public static abstract class Presenter.ViewHolderTask {
+ ctor public Presenter.ViewHolderTask();
+ method public void run(android.support.v17.leanback.widget.Presenter.ViewHolder);
+ }
+
+ public abstract class PresenterSelector {
+ ctor public PresenterSelector();
+ method public abstract android.support.v17.leanback.widget.Presenter getPresenter(java.lang.Object);
+ method public android.support.v17.leanback.widget.Presenter[] getPresenters();
+ }
+
+ public abstract class PresenterSwitcher {
+ ctor public PresenterSwitcher();
+ method public void clear();
+ method public final android.view.ViewGroup getParentViewGroup();
+ method public void init(android.view.ViewGroup, android.support.v17.leanback.widget.PresenterSelector);
+ method protected abstract void insertView(android.view.View);
+ method protected void onViewSelected(android.view.View);
+ method public void select(java.lang.Object);
+ method protected void showView(android.view.View, boolean);
+ method public void unselect();
+ }
+
+ public class RecyclerViewParallax extends android.support.v17.leanback.widget.Parallax {
+ ctor public RecyclerViewParallax();
+ method public android.support.v17.leanback.widget.RecyclerViewParallax.ChildPositionProperty createProperty(java.lang.String, int);
+ method public float getMaxValue();
+ method public android.support.v7.widget.RecyclerView getRecyclerView();
+ method public void setRecyclerView(android.support.v7.widget.RecyclerView);
+ }
+
+ public static final class RecyclerViewParallax.ChildPositionProperty extends android.support.v17.leanback.widget.Parallax.IntProperty {
+ method public android.support.v17.leanback.widget.RecyclerViewParallax.ChildPositionProperty adapterPosition(int);
+ method public android.support.v17.leanback.widget.RecyclerViewParallax.ChildPositionProperty fraction(float);
+ method public int getAdapterPosition();
+ method public float getFraction();
+ method public int getOffset();
+ method public int getViewId();
+ method public android.support.v17.leanback.widget.RecyclerViewParallax.ChildPositionProperty offset(int);
+ method public android.support.v17.leanback.widget.RecyclerViewParallax.ChildPositionProperty viewId(int);
+ }
+
+ public class Row {
+ ctor public Row(long, android.support.v17.leanback.widget.HeaderItem);
+ ctor public Row(android.support.v17.leanback.widget.HeaderItem);
+ ctor public Row();
+ method public final android.support.v17.leanback.widget.HeaderItem getHeaderItem();
+ method public final long getId();
+ method public boolean isRenderedAsRowView();
+ method public final void setHeaderItem(android.support.v17.leanback.widget.HeaderItem);
+ method public final void setId(long);
+ }
+
+ public class RowHeaderPresenter extends android.support.v17.leanback.widget.Presenter {
+ ctor public RowHeaderPresenter();
+ method protected static float getFontDescent(android.widget.TextView, android.graphics.Paint);
+ method public int getSpaceUnderBaseline(android.support.v17.leanback.widget.RowHeaderPresenter.ViewHolder);
+ method public boolean isNullItemVisibilityGone();
+ method public void onBindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder, java.lang.Object);
+ method public android.support.v17.leanback.widget.Presenter.ViewHolder onCreateViewHolder(android.view.ViewGroup);
+ method protected void onSelectLevelChanged(android.support.v17.leanback.widget.RowHeaderPresenter.ViewHolder);
+ method public void onUnbindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder);
+ method public void setNullItemVisibilityGone(boolean);
+ method public final void setSelectLevel(android.support.v17.leanback.widget.RowHeaderPresenter.ViewHolder, float);
+ }
+
+ public static class RowHeaderPresenter.ViewHolder extends android.support.v17.leanback.widget.Presenter.ViewHolder {
+ ctor public RowHeaderPresenter.ViewHolder(android.view.View);
+ method public final float getSelectLevel();
+ }
+
+ public final class RowHeaderView extends android.widget.TextView {
+ ctor public RowHeaderView(android.content.Context);
+ ctor public RowHeaderView(android.content.Context, android.util.AttributeSet);
+ ctor public RowHeaderView(android.content.Context, android.util.AttributeSet, int);
+ }
+
+ public abstract class RowPresenter extends android.support.v17.leanback.widget.Presenter {
+ ctor public RowPresenter();
+ method protected abstract android.support.v17.leanback.widget.RowPresenter.ViewHolder createRowViewHolder(android.view.ViewGroup);
+ method protected void dispatchItemSelectedListener(android.support.v17.leanback.widget.RowPresenter.ViewHolder, boolean);
+ method public void freeze(android.support.v17.leanback.widget.RowPresenter.ViewHolder, boolean);
+ method public final android.support.v17.leanback.widget.RowHeaderPresenter getHeaderPresenter();
+ method public final android.support.v17.leanback.widget.RowPresenter.ViewHolder getRowViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder);
+ method public final boolean getSelectEffectEnabled();
+ method public final float getSelectLevel(android.support.v17.leanback.widget.Presenter.ViewHolder);
+ method public final int getSyncActivatePolicy();
+ method protected void initializeRowViewHolder(android.support.v17.leanback.widget.RowPresenter.ViewHolder);
+ method protected boolean isClippingChildren();
+ method public boolean isUsingDefaultSelectEffect();
+ method protected void onBindRowViewHolder(android.support.v17.leanback.widget.RowPresenter.ViewHolder, java.lang.Object);
+ method public final void onBindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder, java.lang.Object);
+ method public final android.support.v17.leanback.widget.Presenter.ViewHolder onCreateViewHolder(android.view.ViewGroup);
+ method protected void onRowViewAttachedToWindow(android.support.v17.leanback.widget.RowPresenter.ViewHolder);
+ method protected void onRowViewDetachedFromWindow(android.support.v17.leanback.widget.RowPresenter.ViewHolder);
+ method protected void onRowViewExpanded(android.support.v17.leanback.widget.RowPresenter.ViewHolder, boolean);
+ method protected void onRowViewSelected(android.support.v17.leanback.widget.RowPresenter.ViewHolder, boolean);
+ method protected void onSelectLevelChanged(android.support.v17.leanback.widget.RowPresenter.ViewHolder);
+ method protected void onUnbindRowViewHolder(android.support.v17.leanback.widget.RowPresenter.ViewHolder);
+ method public final void onUnbindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder);
+ method public final void onViewAttachedToWindow(android.support.v17.leanback.widget.Presenter.ViewHolder);
+ method public final void onViewDetachedFromWindow(android.support.v17.leanback.widget.Presenter.ViewHolder);
+ method public void setEntranceTransitionState(android.support.v17.leanback.widget.RowPresenter.ViewHolder, boolean);
+ method public final void setHeaderPresenter(android.support.v17.leanback.widget.RowHeaderPresenter);
+ method public final void setRowViewExpanded(android.support.v17.leanback.widget.Presenter.ViewHolder, boolean);
+ method public final void setRowViewSelected(android.support.v17.leanback.widget.Presenter.ViewHolder, boolean);
+ method public final void setSelectEffectEnabled(boolean);
+ method public final void setSelectLevel(android.support.v17.leanback.widget.Presenter.ViewHolder, float);
+ method public final void setSyncActivatePolicy(int);
+ field public static final int SYNC_ACTIVATED_CUSTOM = 0; // 0x0
+ field public static final int SYNC_ACTIVATED_TO_EXPANDED = 1; // 0x1
+ field public static final int SYNC_ACTIVATED_TO_EXPANDED_AND_SELECTED = 3; // 0x3
+ field public static final int SYNC_ACTIVATED_TO_SELECTED = 2; // 0x2
+ }
+
+ public static class RowPresenter.ViewHolder extends android.support.v17.leanback.widget.Presenter.ViewHolder {
+ ctor public RowPresenter.ViewHolder(android.view.View);
+ method public final android.support.v17.leanback.widget.RowHeaderPresenter.ViewHolder getHeaderViewHolder();
+ method public final android.support.v17.leanback.widget.BaseOnItemViewClickedListener getOnItemViewClickedListener();
+ method public final android.support.v17.leanback.widget.BaseOnItemViewSelectedListener getOnItemViewSelectedListener();
+ method public android.view.View.OnKeyListener getOnKeyListener();
+ method public final android.support.v17.leanback.widget.Row getRow();
+ method public final java.lang.Object getRowObject();
+ method public final float getSelectLevel();
+ method public java.lang.Object getSelectedItem();
+ method public android.support.v17.leanback.widget.Presenter.ViewHolder getSelectedItemViewHolder();
+ method public final boolean isExpanded();
+ method public final boolean isSelected();
+ method public final void setActivated(boolean);
+ method public final void setOnItemViewClickedListener(android.support.v17.leanback.widget.BaseOnItemViewClickedListener);
+ method public final void setOnItemViewSelectedListener(android.support.v17.leanback.widget.BaseOnItemViewSelectedListener);
+ method public void setOnKeyListener(android.view.View.OnKeyListener);
+ method public final void syncActivatedStatus(android.view.View);
+ field protected final android.support.v17.leanback.graphics.ColorOverlayDimmer mColorDimmer;
+ }
+
+ public class SearchBar extends android.widget.RelativeLayout {
+ ctor public SearchBar(android.content.Context);
+ ctor public SearchBar(android.content.Context, android.util.AttributeSet);
+ ctor public SearchBar(android.content.Context, android.util.AttributeSet, int);
+ method public void displayCompletions(java.util.List<java.lang.String>);
+ method public void displayCompletions(android.view.inputmethod.CompletionInfo[]);
+ method public android.graphics.drawable.Drawable getBadgeDrawable();
+ method public java.lang.CharSequence getHint();
+ method public java.lang.String getTitle();
+ method public boolean isRecognizing();
+ method public void setBadgeDrawable(android.graphics.drawable.Drawable);
+ method public void setPermissionListener(android.support.v17.leanback.widget.SearchBar.SearchBarPermissionListener);
+ method public void setSearchAffordanceColors(android.support.v17.leanback.widget.SearchOrbView.Colors);
+ method public void setSearchAffordanceColorsInListening(android.support.v17.leanback.widget.SearchOrbView.Colors);
+ method public void setSearchBarListener(android.support.v17.leanback.widget.SearchBar.SearchBarListener);
+ method public void setSearchQuery(java.lang.String);
+ method public deprecated void setSpeechRecognitionCallback(android.support.v17.leanback.widget.SpeechRecognitionCallback);
+ method public void setSpeechRecognizer(android.speech.SpeechRecognizer);
+ method public void setTitle(java.lang.String);
+ method public void startRecognition();
+ method public void stopRecognition();
+ }
+
+ public static abstract interface SearchBar.SearchBarListener {
+ method public abstract void onKeyboardDismiss(java.lang.String);
+ method public abstract void onSearchQueryChange(java.lang.String);
+ method public abstract void onSearchQuerySubmit(java.lang.String);
+ }
+
+ public static abstract interface SearchBar.SearchBarPermissionListener {
+ method public abstract void requestAudioPermission();
+ }
+
+ public class SearchEditText extends android.support.v17.leanback.widget.StreamingTextView {
+ ctor public SearchEditText(android.content.Context);
+ ctor public SearchEditText(android.content.Context, android.util.AttributeSet);
+ ctor public SearchEditText(android.content.Context, android.util.AttributeSet, int);
+ method public void setOnKeyboardDismissListener(android.support.v17.leanback.widget.SearchEditText.OnKeyboardDismissListener);
+ }
+
+ public static abstract interface SearchEditText.OnKeyboardDismissListener {
+ method public abstract void onKeyboardDismiss();
+ }
+
+ public class SearchOrbView extends android.widget.FrameLayout implements android.view.View.OnClickListener {
+ ctor public SearchOrbView(android.content.Context);
+ ctor public SearchOrbView(android.content.Context, android.util.AttributeSet);
+ ctor public SearchOrbView(android.content.Context, android.util.AttributeSet, int);
+ method public void enableOrbColorAnimation(boolean);
+ method public int getOrbColor();
+ method public android.support.v17.leanback.widget.SearchOrbView.Colors getOrbColors();
+ method public android.graphics.drawable.Drawable getOrbIcon();
+ method public void onClick(android.view.View);
+ method public void setOnOrbClickedListener(android.view.View.OnClickListener);
+ method public void setOrbColor(int);
+ method public deprecated void setOrbColor(int, int);
+ method public void setOrbColors(android.support.v17.leanback.widget.SearchOrbView.Colors);
+ method public void setOrbIcon(android.graphics.drawable.Drawable);
+ }
+
+ public static class SearchOrbView.Colors {
+ ctor public SearchOrbView.Colors(int);
+ ctor public SearchOrbView.Colors(int, int);
+ ctor public SearchOrbView.Colors(int, int, int);
+ method public static int getBrightColor(int);
+ field public int brightColor;
+ field public int color;
+ field public int iconColor;
+ }
+
+ public class SectionRow extends android.support.v17.leanback.widget.Row {
+ ctor public SectionRow(android.support.v17.leanback.widget.HeaderItem);
+ ctor public SectionRow(long, java.lang.String);
+ ctor public SectionRow(java.lang.String);
+ method public final boolean isRenderedAsRowView();
+ }
+
+ public class ShadowOverlayContainer extends android.widget.FrameLayout {
+ ctor public ShadowOverlayContainer(android.content.Context);
+ ctor public ShadowOverlayContainer(android.content.Context, android.util.AttributeSet);
+ ctor public ShadowOverlayContainer(android.content.Context, android.util.AttributeSet, int);
+ method public int getShadowType();
+ method public android.view.View getWrappedView();
+ method public deprecated void initialize(boolean, boolean);
+ method public deprecated void initialize(boolean, boolean, boolean);
+ method public static void prepareParentForShadow(android.view.ViewGroup);
+ method public void setOverlayColor(int);
+ method public void setShadowFocusLevel(float);
+ method public static boolean supportsDynamicShadow();
+ method public static boolean supportsShadow();
+ method public void useDynamicShadow();
+ method public void useDynamicShadow(float, float);
+ method public void useStaticShadow();
+ method public void wrap(android.view.View);
+ field public static final int SHADOW_DYNAMIC = 3; // 0x3
+ field public static final int SHADOW_NONE = 1; // 0x1
+ field public static final int SHADOW_STATIC = 2; // 0x2
+ }
+
+ public final class ShadowOverlayHelper {
+ method public android.support.v17.leanback.widget.ShadowOverlayContainer createShadowOverlayContainer(android.content.Context);
+ method public int getShadowType();
+ method public boolean needsOverlay();
+ method public boolean needsRoundedCorner();
+ method public boolean needsWrapper();
+ method public void onViewCreated(android.view.View);
+ method public void prepareParentForShadow(android.view.ViewGroup);
+ method public static void setNoneWrapperOverlayColor(android.view.View, int);
+ method public static void setNoneWrapperShadowFocusLevel(android.view.View, float);
+ method public void setOverlayColor(android.view.View, int);
+ method public void setShadowFocusLevel(android.view.View, float);
+ method public static boolean supportsDynamicShadow();
+ method public static boolean supportsForeground();
+ method public static boolean supportsRoundedCorner();
+ method public static boolean supportsShadow();
+ field public static final int SHADOW_DYNAMIC = 3; // 0x3
+ field public static final int SHADOW_NONE = 1; // 0x1
+ field public static final int SHADOW_STATIC = 2; // 0x2
+ }
+
+ public static final class ShadowOverlayHelper.Builder {
+ ctor public ShadowOverlayHelper.Builder();
+ method public android.support.v17.leanback.widget.ShadowOverlayHelper build(android.content.Context);
+ method public android.support.v17.leanback.widget.ShadowOverlayHelper.Builder keepForegroundDrawable(boolean);
+ method public android.support.v17.leanback.widget.ShadowOverlayHelper.Builder needsOverlay(boolean);
+ method public android.support.v17.leanback.widget.ShadowOverlayHelper.Builder needsRoundedCorner(boolean);
+ method public android.support.v17.leanback.widget.ShadowOverlayHelper.Builder needsShadow(boolean);
+ method public android.support.v17.leanback.widget.ShadowOverlayHelper.Builder options(android.support.v17.leanback.widget.ShadowOverlayHelper.Options);
+ method public android.support.v17.leanback.widget.ShadowOverlayHelper.Builder preferZOrder(boolean);
+ }
+
+ public static final class ShadowOverlayHelper.Options {
+ ctor public ShadowOverlayHelper.Options();
+ method public android.support.v17.leanback.widget.ShadowOverlayHelper.Options dynamicShadowZ(float, float);
+ method public final float getDynamicShadowFocusedZ();
+ method public final float getDynamicShadowUnfocusedZ();
+ method public final int getRoundedCornerRadius();
+ method public android.support.v17.leanback.widget.ShadowOverlayHelper.Options roundedCornerRadius(int);
+ field public static final android.support.v17.leanback.widget.ShadowOverlayHelper.Options DEFAULT;
+ }
+
+ public final class SinglePresenterSelector extends android.support.v17.leanback.widget.PresenterSelector {
+ ctor public SinglePresenterSelector(android.support.v17.leanback.widget.Presenter);
+ method public android.support.v17.leanback.widget.Presenter getPresenter(java.lang.Object);
+ }
+
+ public class SparseArrayObjectAdapter extends android.support.v17.leanback.widget.ObjectAdapter {
+ ctor public SparseArrayObjectAdapter(android.support.v17.leanback.widget.PresenterSelector);
+ ctor public SparseArrayObjectAdapter(android.support.v17.leanback.widget.Presenter);
+ ctor public SparseArrayObjectAdapter();
+ method public void clear(int);
+ method public void clear();
+ method public java.lang.Object get(int);
+ method public int indexOf(java.lang.Object);
+ method public int indexOf(int);
+ method public java.lang.Object lookup(int);
+ method public void notifyArrayItemRangeChanged(int, int);
+ method public void set(int, java.lang.Object);
+ method public int size();
+ }
+
+ public class SpeechOrbView extends android.support.v17.leanback.widget.SearchOrbView {
+ ctor public SpeechOrbView(android.content.Context);
+ ctor public SpeechOrbView(android.content.Context, android.util.AttributeSet);
+ ctor public SpeechOrbView(android.content.Context, android.util.AttributeSet, int);
+ method public void setListeningOrbColors(android.support.v17.leanback.widget.SearchOrbView.Colors);
+ method public void setNotListeningOrbColors(android.support.v17.leanback.widget.SearchOrbView.Colors);
+ method public void setSoundLevel(int);
+ method public void showListening();
+ method public void showNotListening();
+ }
+
+ public abstract deprecated interface SpeechRecognitionCallback {
+ method public abstract void recognizeSpeech();
+ }
+
+ class StreamingTextView extends android.widget.EditText {
+ ctor public StreamingTextView(android.content.Context, android.util.AttributeSet);
+ ctor public StreamingTextView(android.content.Context, android.util.AttributeSet, int);
+ method public static boolean isLayoutRtl(android.view.View);
+ method public void reset();
+ method public void setFinalRecognizedText(java.lang.CharSequence);
+ method public void updateRecognizedText(java.lang.String, java.lang.String);
+ method public void updateRecognizedText(java.lang.String, java.util.List<java.lang.Float>);
+ }
+
+ public class TitleHelper {
+ ctor public TitleHelper(android.view.ViewGroup, android.view.View);
+ method public android.support.v17.leanback.widget.BrowseFrameLayout.OnFocusSearchListener getOnFocusSearchListener();
+ method public android.view.ViewGroup getSceneRoot();
+ method public android.view.View getTitleView();
+ method public void showTitle(boolean);
+ }
+
+ public class TitleView extends android.widget.FrameLayout implements android.support.v17.leanback.widget.TitleViewAdapter.Provider {
+ ctor public TitleView(android.content.Context);
+ ctor public TitleView(android.content.Context, android.util.AttributeSet);
+ ctor public TitleView(android.content.Context, android.util.AttributeSet, int);
+ method public void enableAnimation(boolean);
+ method public android.graphics.drawable.Drawable getBadgeDrawable();
+ method public android.support.v17.leanback.widget.SearchOrbView.Colors getSearchAffordanceColors();
+ method public android.view.View getSearchAffordanceView();
+ method public java.lang.CharSequence getTitle();
+ method public android.support.v17.leanback.widget.TitleViewAdapter getTitleViewAdapter();
+ method public void setBadgeDrawable(android.graphics.drawable.Drawable);
+ method public void setOnSearchClickedListener(android.view.View.OnClickListener);
+ method public void setSearchAffordanceColors(android.support.v17.leanback.widget.SearchOrbView.Colors);
+ method public void setTitle(java.lang.CharSequence);
+ method public void updateComponentsVisibility(int);
+ }
+
+ public abstract class TitleViewAdapter {
+ ctor public TitleViewAdapter();
+ method public android.graphics.drawable.Drawable getBadgeDrawable();
+ method public android.support.v17.leanback.widget.SearchOrbView.Colors getSearchAffordanceColors();
+ method public abstract android.view.View getSearchAffordanceView();
+ method public java.lang.CharSequence getTitle();
+ method public void setAnimationEnabled(boolean);
+ method public void setBadgeDrawable(android.graphics.drawable.Drawable);
+ method public void setOnSearchClickedListener(android.view.View.OnClickListener);
+ method public void setSearchAffordanceColors(android.support.v17.leanback.widget.SearchOrbView.Colors);
+ method public void setTitle(java.lang.CharSequence);
+ method public void updateComponentsVisibility(int);
+ field public static final int BRANDING_VIEW_VISIBLE = 2; // 0x2
+ field public static final int FULL_VIEW_VISIBLE = 6; // 0x6
+ field public static final int SEARCH_VIEW_VISIBLE = 4; // 0x4
+ }
+
+ public static abstract interface TitleViewAdapter.Provider {
+ method public abstract android.support.v17.leanback.widget.TitleViewAdapter getTitleViewAdapter();
+ }
+
+ public class VerticalGridPresenter extends android.support.v17.leanback.widget.Presenter {
+ ctor public VerticalGridPresenter();
+ ctor public VerticalGridPresenter(int);
+ ctor public VerticalGridPresenter(int, boolean);
+ method public final boolean areChildRoundedCornersEnabled();
+ method protected android.support.v17.leanback.widget.VerticalGridPresenter.ViewHolder createGridViewHolder(android.view.ViewGroup);
+ method protected android.support.v17.leanback.widget.ShadowOverlayHelper.Options createShadowOverlayOptions();
+ method public final void enableChildRoundedCorners(boolean);
+ method public final int getFocusZoomFactor();
+ method public final boolean getKeepChildForeground();
+ method public int getNumberOfColumns();
+ method public final android.support.v17.leanback.widget.OnItemViewClickedListener getOnItemViewClickedListener();
+ method public final android.support.v17.leanback.widget.OnItemViewSelectedListener getOnItemViewSelectedListener();
+ method public final boolean getShadowEnabled();
+ method protected void initializeGridViewHolder(android.support.v17.leanback.widget.VerticalGridPresenter.ViewHolder);
+ method public final boolean isFocusDimmerUsed();
+ method public boolean isUsingDefaultShadow();
+ method public boolean isUsingZOrder(android.content.Context);
+ method public void onBindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder, java.lang.Object);
+ method public final android.support.v17.leanback.widget.VerticalGridPresenter.ViewHolder onCreateViewHolder(android.view.ViewGroup);
+ method public void onUnbindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder);
+ method public void setEntranceTransitionState(android.support.v17.leanback.widget.VerticalGridPresenter.ViewHolder, boolean);
+ method public final void setKeepChildForeground(boolean);
+ method public void setNumberOfColumns(int);
+ method public final void setOnItemViewClickedListener(android.support.v17.leanback.widget.OnItemViewClickedListener);
+ method public final void setOnItemViewSelectedListener(android.support.v17.leanback.widget.OnItemViewSelectedListener);
+ method public final void setShadowEnabled(boolean);
+ }
+
+ public static class VerticalGridPresenter.ViewHolder extends android.support.v17.leanback.widget.Presenter.ViewHolder {
+ ctor public VerticalGridPresenter.ViewHolder(android.support.v17.leanback.widget.VerticalGridView);
+ method public android.support.v17.leanback.widget.VerticalGridView getGridView();
+ }
+
+ public class VerticalGridView extends android.support.v17.leanback.widget.BaseGridView {
+ ctor public VerticalGridView(android.content.Context);
+ ctor public VerticalGridView(android.content.Context, android.util.AttributeSet);
+ ctor public VerticalGridView(android.content.Context, android.util.AttributeSet, int);
+ method protected void initAttributes(android.content.Context, android.util.AttributeSet);
+ method public void setColumnWidth(int);
+ method public void setNumColumns(int);
+ }
+
+ public abstract interface ViewHolderTask {
+ method public abstract void run(android.support.v7.widget.RecyclerView.ViewHolder);
+ }
+
+}
+
+package android.support.v17.leanback.widget.picker {
+
+ public class Picker extends android.widget.FrameLayout {
+ ctor public Picker(android.content.Context, android.util.AttributeSet, int);
+ method public void addOnValueChangedListener(android.support.v17.leanback.widget.picker.Picker.PickerValueListener);
+ method public float getActivatedVisibleItemCount();
+ method public android.support.v17.leanback.widget.picker.PickerColumn getColumnAt(int);
+ method public int getColumnsCount();
+ method protected int getPickerItemHeightPixels();
+ method public final int getPickerItemLayoutId();
+ method public final int getPickerItemTextViewId();
+ method public int getSelectedColumn();
+ method public final deprecated java.lang.CharSequence getSeparator();
+ method public final java.util.List<java.lang.CharSequence> getSeparators();
+ method public float getVisibleItemCount();
+ method public void onColumnValueChanged(int, int);
+ method public void removeOnValueChangedListener(android.support.v17.leanback.widget.picker.Picker.PickerValueListener);
+ method public void setActivatedVisibleItemCount(float);
+ method public void setColumnAt(int, android.support.v17.leanback.widget.picker.PickerColumn);
+ method public void setColumnValue(int, int, boolean);
+ method public void setColumns(java.util.List<android.support.v17.leanback.widget.picker.PickerColumn>);
+ method public final void setPickerItemTextViewId(int);
+ method public void setSelectedColumn(int);
+ method public final void setSeparator(java.lang.CharSequence);
+ method public final void setSeparators(java.util.List<java.lang.CharSequence>);
+ method public void setVisibleItemCount(float);
+ }
+
+ public static abstract interface Picker.PickerValueListener {
+ method public abstract void onValueChanged(android.support.v17.leanback.widget.picker.Picker, int);
+ }
+
+ public class PickerColumn {
+ ctor public PickerColumn();
+ method public int getCount();
+ method public int getCurrentValue();
+ method public java.lang.CharSequence getLabelFor(int);
+ method public java.lang.String getLabelFormat();
+ method public int getMaxValue();
+ method public int getMinValue();
+ method public java.lang.CharSequence[] getStaticLabels();
+ method public void setCurrentValue(int);
+ method public void setLabelFormat(java.lang.String);
+ method public void setMaxValue(int);
+ method public void setMinValue(int);
+ method public void setStaticLabels(java.lang.CharSequence[]);
+ }
+
+ public class TimePicker extends android.support.v17.leanback.widget.picker.Picker {
+ ctor public TimePicker(android.content.Context, android.util.AttributeSet);
+ ctor public TimePicker(android.content.Context, android.util.AttributeSet, int);
+ method public int getHour();
+ method public int getMinute();
+ method public boolean is24Hour();
+ method public boolean isPm();
+ method public void setHour(int);
+ method public void setIs24Hour(boolean);
+ method public void setMinute(int);
+ }
+
+}
+
diff --git a/v17/leanback/api/current.txt b/v17/leanback/api/current.txt
index d67ba42..4ee4d94 100644
--- a/v17/leanback/api/current.txt
+++ b/v17/leanback/api/current.txt
@@ -823,7 +823,7 @@
method public void setSearchQuery(java.lang.String, boolean);
method public void setSearchQuery(android.content.Intent, boolean);
method public void setSearchResultProvider(android.support.v17.leanback.app.SearchFragment.SearchResultProvider);
- method public void setSpeechRecognitionCallback(android.support.v17.leanback.widget.SpeechRecognitionCallback);
+ method public deprecated void setSpeechRecognitionCallback(android.support.v17.leanback.widget.SpeechRecognitionCallback);
method public void setTitle(java.lang.String);
method public void startRecognition();
}
@@ -853,7 +853,7 @@
method public void setSearchQuery(java.lang.String, boolean);
method public void setSearchQuery(android.content.Intent, boolean);
method public void setSearchResultProvider(android.support.v17.leanback.app.SearchSupportFragment.SearchResultProvider);
- method public void setSpeechRecognitionCallback(android.support.v17.leanback.widget.SpeechRecognitionCallback);
+ method public deprecated void setSpeechRecognitionCallback(android.support.v17.leanback.widget.SpeechRecognitionCallback);
method public void setTitle(java.lang.String);
method public void startRecognition();
}
@@ -2800,7 +2800,7 @@
method public void setSearchAffordanceColorsInListening(android.support.v17.leanback.widget.SearchOrbView.Colors);
method public void setSearchBarListener(android.support.v17.leanback.widget.SearchBar.SearchBarListener);
method public void setSearchQuery(java.lang.String);
- method public void setSpeechRecognitionCallback(android.support.v17.leanback.widget.SpeechRecognitionCallback);
+ method public deprecated void setSpeechRecognitionCallback(android.support.v17.leanback.widget.SpeechRecognitionCallback);
method public void setSpeechRecognizer(android.speech.SpeechRecognizer);
method public void setTitle(java.lang.String);
method public void startRecognition();
@@ -2956,7 +2956,7 @@
method public void showNotListening();
}
- public abstract interface SpeechRecognitionCallback {
+ public abstract deprecated interface SpeechRecognitionCallback {
method public abstract void recognizeSpeech();
}
diff --git a/v17/leanback/src/android/support/v17/leanback/app/BaseFragment.java b/v17/leanback/src/android/support/v17/leanback/app/BaseFragment.java
index 278c1ac..bdb213f 100644
--- a/v17/leanback/src/android/support/v17/leanback/app/BaseFragment.java
+++ b/v17/leanback/src/android/support/v17/leanback/app/BaseFragment.java
@@ -18,6 +18,8 @@
import android.annotation.SuppressLint;
import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.v17.leanback.transition.TransitionHelper;
import android.support.v17.leanback.transition.TransitionListener;
import android.support.v17.leanback.util.StateMachine;
@@ -180,7 +182,7 @@
}
@Override
- public void onViewCreated(View view, Bundle savedInstanceState) {
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mStateMachine.fireEvent(EVT_ON_CREATEVIEW);
}
diff --git a/v17/leanback/src/android/support/v17/leanback/app/BaseRowFragment.java b/v17/leanback/src/android/support/v17/leanback/app/BaseRowFragment.java
index ac67d2b..2d79f3e 100644
--- a/v17/leanback/src/android/support/v17/leanback/app/BaseRowFragment.java
+++ b/v17/leanback/src/android/support/v17/leanback/app/BaseRowFragment.java
@@ -17,6 +17,8 @@
package android.support.v17.leanback.app;
import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.v17.leanback.widget.ItemBridgeAdapter;
import android.support.v17.leanback.widget.ListRow;
import android.support.v17.leanback.widget.ObjectAdapter;
@@ -78,7 +80,7 @@
}
@Override
- public void onViewCreated(View view, Bundle savedInstanceState) {
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
if (savedInstanceState != null) {
mSelectedPosition = savedInstanceState.getInt(CURRENT_SELECTED_POSITION, -1);
}
diff --git a/v17/leanback/src/android/support/v17/leanback/app/BaseRowSupportFragment.java b/v17/leanback/src/android/support/v17/leanback/app/BaseRowSupportFragment.java
index 7431da7..dba78da 100644
--- a/v17/leanback/src/android/support/v17/leanback/app/BaseRowSupportFragment.java
+++ b/v17/leanback/src/android/support/v17/leanback/app/BaseRowSupportFragment.java
@@ -14,6 +14,8 @@
package android.support.v17.leanback.app;
import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.v17.leanback.widget.ItemBridgeAdapter;
import android.support.v17.leanback.widget.ListRow;
import android.support.v17.leanback.widget.ObjectAdapter;
@@ -75,7 +77,7 @@
}
@Override
- public void onViewCreated(View view, Bundle savedInstanceState) {
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
if (savedInstanceState != null) {
mSelectedPosition = savedInstanceState.getInt(CURRENT_SELECTED_POSITION, -1);
}
diff --git a/v17/leanback/src/android/support/v17/leanback/app/BaseSupportFragment.java b/v17/leanback/src/android/support/v17/leanback/app/BaseSupportFragment.java
index 177052d..d89cf39 100644
--- a/v17/leanback/src/android/support/v17/leanback/app/BaseSupportFragment.java
+++ b/v17/leanback/src/android/support/v17/leanback/app/BaseSupportFragment.java
@@ -15,6 +15,8 @@
import android.annotation.SuppressLint;
import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.v17.leanback.transition.TransitionHelper;
import android.support.v17.leanback.transition.TransitionListener;
import android.support.v17.leanback.util.StateMachine;
@@ -177,7 +179,7 @@
}
@Override
- public void onViewCreated(View view, Bundle savedInstanceState) {
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mStateMachine.fireEvent(EVT_ON_CREATEVIEW);
}
diff --git a/v17/leanback/src/android/support/v17/leanback/app/BrandedFragment.java b/v17/leanback/src/android/support/v17/leanback/app/BrandedFragment.java
index b80bd7c..1f6ad29 100644
--- a/v17/leanback/src/android/support/v17/leanback/app/BrandedFragment.java
+++ b/v17/leanback/src/android/support/v17/leanback/app/BrandedFragment.java
@@ -18,6 +18,8 @@
import android.graphics.drawable.Drawable;
import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.v17.leanback.R;
import android.support.v17.leanback.widget.SearchOrbView;
import android.support.v17.leanback.widget.TitleHelper;
@@ -146,7 +148,7 @@
}
@Override
- public void onViewCreated(View view, Bundle savedInstanceState) {
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
if (savedInstanceState != null) {
mShowingTitle = savedInstanceState.getBoolean(TITLE_SHOW);
diff --git a/v17/leanback/src/android/support/v17/leanback/app/BrandedSupportFragment.java b/v17/leanback/src/android/support/v17/leanback/app/BrandedSupportFragment.java
index aff8c89..306e1f1 100644
--- a/v17/leanback/src/android/support/v17/leanback/app/BrandedSupportFragment.java
+++ b/v17/leanback/src/android/support/v17/leanback/app/BrandedSupportFragment.java
@@ -15,6 +15,8 @@
import android.graphics.drawable.Drawable;
import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.v17.leanback.R;
import android.support.v17.leanback.widget.SearchOrbView;
import android.support.v17.leanback.widget.TitleHelper;
@@ -143,7 +145,7 @@
}
@Override
- public void onViewCreated(View view, Bundle savedInstanceState) {
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
if (savedInstanceState != null) {
mShowingTitle = savedInstanceState.getBoolean(TITLE_SHOW);
diff --git a/v17/leanback/src/android/support/v17/leanback/app/HeadersFragment.java b/v17/leanback/src/android/support/v17/leanback/app/HeadersFragment.java
index 12cdcd7..dd037d2 100644
--- a/v17/leanback/src/android/support/v17/leanback/app/HeadersFragment.java
+++ b/v17/leanback/src/android/support/v17/leanback/app/HeadersFragment.java
@@ -23,6 +23,8 @@
import android.graphics.drawable.Drawable;
import android.graphics.drawable.GradientDrawable;
import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.v17.leanback.R;
import android.support.v17.leanback.widget.ClassPresenterSelector;
import android.support.v17.leanback.widget.DividerPresenter;
@@ -163,7 +165,7 @@
}
@Override
- public void onViewCreated(View view, Bundle savedInstanceState) {
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
final VerticalGridView listView = getVerticalGridView();
if (listView == null) {
diff --git a/v17/leanback/src/android/support/v17/leanback/app/HeadersSupportFragment.java b/v17/leanback/src/android/support/v17/leanback/app/HeadersSupportFragment.java
index 7a45630..56c85af 100644
--- a/v17/leanback/src/android/support/v17/leanback/app/HeadersSupportFragment.java
+++ b/v17/leanback/src/android/support/v17/leanback/app/HeadersSupportFragment.java
@@ -20,6 +20,8 @@
import android.graphics.drawable.Drawable;
import android.graphics.drawable.GradientDrawable;
import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.v17.leanback.R;
import android.support.v17.leanback.widget.ClassPresenterSelector;
import android.support.v17.leanback.widget.DividerPresenter;
@@ -160,7 +162,7 @@
}
@Override
- public void onViewCreated(View view, Bundle savedInstanceState) {
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
final VerticalGridView listView = getVerticalGridView();
if (listView == null) {
diff --git a/v17/leanback/src/android/support/v17/leanback/app/OnboardingFragment.java b/v17/leanback/src/android/support/v17/leanback/app/OnboardingFragment.java
index 74affd6..b69d5a7 100644
--- a/v17/leanback/src/android/support/v17/leanback/app/OnboardingFragment.java
+++ b/v17/leanback/src/android/support/v17/leanback/app/OnboardingFragment.java
@@ -29,6 +29,7 @@
import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.ColorInt;
+import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v17.leanback.R;
import android.support.v17.leanback.widget.PagingIndicator;
@@ -353,7 +354,7 @@
}
@Override
- public void onViewCreated(View view, Bundle savedInstanceState) {
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
if (savedInstanceState == null) {
mCurrentPageIndex = 0;
diff --git a/v17/leanback/src/android/support/v17/leanback/app/OnboardingSupportFragment.java b/v17/leanback/src/android/support/v17/leanback/app/OnboardingSupportFragment.java
index 9892625..51cb2de 100644
--- a/v17/leanback/src/android/support/v17/leanback/app/OnboardingSupportFragment.java
+++ b/v17/leanback/src/android/support/v17/leanback/app/OnboardingSupportFragment.java
@@ -26,6 +26,7 @@
import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.ColorInt;
+import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v17.leanback.R;
import android.support.v17.leanback.widget.PagingIndicator;
@@ -350,7 +351,7 @@
}
@Override
- public void onViewCreated(View view, Bundle savedInstanceState) {
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
if (savedInstanceState == null) {
mCurrentPageIndex = 0;
diff --git a/v17/leanback/src/android/support/v17/leanback/app/PlaybackFragment.java b/v17/leanback/src/android/support/v17/leanback/app/PlaybackFragment.java
index 1279521..33e787c 100644
--- a/v17/leanback/src/android/support/v17/leanback/app/PlaybackFragment.java
+++ b/v17/leanback/src/android/support/v17/leanback/app/PlaybackFragment.java
@@ -27,6 +27,8 @@
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.v17.leanback.R;
import android.support.v17.leanback.animation.LogAccelerateInterpolator;
import android.support.v17.leanback.animation.LogDecelerateInterpolator;
@@ -450,7 +452,7 @@
}
@Override
- public void onViewCreated(View view, Bundle savedInstanceState) {
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
// controls view are initially visible, make it invisible
// if app has called hideControlsOverlay() before view created.
diff --git a/v17/leanback/src/android/support/v17/leanback/app/PlaybackSupportFragment.java b/v17/leanback/src/android/support/v17/leanback/app/PlaybackSupportFragment.java
index 197e275..a8741ab 100644
--- a/v17/leanback/src/android/support/v17/leanback/app/PlaybackSupportFragment.java
+++ b/v17/leanback/src/android/support/v17/leanback/app/PlaybackSupportFragment.java
@@ -24,6 +24,8 @@
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.v17.leanback.R;
import android.support.v17.leanback.animation.LogAccelerateInterpolator;
import android.support.v17.leanback.animation.LogDecelerateInterpolator;
@@ -447,7 +449,7 @@
}
@Override
- public void onViewCreated(View view, Bundle savedInstanceState) {
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
// controls view are initially visible, make it invisible
// if app has called hideControlsOverlay() before view created.
diff --git a/v17/leanback/src/android/support/v17/leanback/app/RowsFragment.java b/v17/leanback/src/android/support/v17/leanback/app/RowsFragment.java
index 46ad417..a008ad6 100644
--- a/v17/leanback/src/android/support/v17/leanback/app/RowsFragment.java
+++ b/v17/leanback/src/android/support/v17/leanback/app/RowsFragment.java
@@ -19,6 +19,8 @@
import android.animation.TimeAnimator;
import android.animation.TimeAnimator.TimeListener;
import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.v17.leanback.R;
import android.support.v17.leanback.widget.BaseOnItemViewClickedListener;
import android.support.v17.leanback.widget.BaseOnItemViewSelectedListener;
@@ -288,7 +290,7 @@
}
@Override
- public void onViewCreated(View view, Bundle savedInstanceState) {
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
if (DEBUG) Log.v(TAG, "onViewCreated");
super.onViewCreated(view, savedInstanceState);
// Align the top edge of child with id row_content.
diff --git a/v17/leanback/src/android/support/v17/leanback/app/RowsSupportFragment.java b/v17/leanback/src/android/support/v17/leanback/app/RowsSupportFragment.java
index dd357ac..05e3813 100644
--- a/v17/leanback/src/android/support/v17/leanback/app/RowsSupportFragment.java
+++ b/v17/leanback/src/android/support/v17/leanback/app/RowsSupportFragment.java
@@ -16,6 +16,8 @@
import android.animation.TimeAnimator;
import android.animation.TimeAnimator.TimeListener;
import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.v17.leanback.R;
import android.support.v17.leanback.widget.BaseOnItemViewClickedListener;
import android.support.v17.leanback.widget.BaseOnItemViewSelectedListener;
@@ -285,7 +287,7 @@
}
@Override
- public void onViewCreated(View view, Bundle savedInstanceState) {
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
if (DEBUG) Log.v(TAG, "onViewCreated");
super.onViewCreated(view, savedInstanceState);
// Align the top edge of child with id row_content.
diff --git a/v17/leanback/src/android/support/v17/leanback/app/SearchFragment.java b/v17/leanback/src/android/support/v17/leanback/app/SearchFragment.java
index 8e99bd3..2154ff2 100644
--- a/v17/leanback/src/android/support/v17/leanback/app/SearchFragment.java
+++ b/v17/leanback/src/android/support/v17/leanback/app/SearchFragment.java
@@ -55,12 +55,11 @@
* into a {@link RowsFragment}, in the same way that they are in a {@link
* BrowseFragment}.
*
- * <p>If you do not supply a callback via
- * {@link #setSpeechRecognitionCallback(SpeechRecognitionCallback)}, an internal speech
- * recognizer will be used for which your application will need to declare
+ * <p>A SpeechRecognizer object will be created for which your application will need to declare
* android.permission.RECORD_AUDIO in AndroidManifest file. If app's target version is >= 23 and
* the device version is >= 23, a permission dialog will show first time using speech recognition.
* 0 will be used as requestCode in requestPermissions() call.
+ * {@link #setSpeechRecognitionCallback(SpeechRecognitionCallback)} is deprecated.
* </p>
* <p>
* Speech recognition is automatically started when fragment is created, but
@@ -579,8 +578,11 @@
/**
* Sets this callback to have the fragment pass speech recognition requests
- * to the activity rather than using an internal recognizer.
+ * to the activity rather than using a SpeechRecognizer object.
+ * @deprecated Launching voice recognition activity is no longer supported. App should declare
+ * android.permission.RECORD_AUDIO in AndroidManifest file.
*/
+ @Deprecated
public void setSpeechRecognitionCallback(SpeechRecognitionCallback callback) {
mSpeechRecognitionCallback = callback;
if (mSearchBar != null) {
diff --git a/v17/leanback/src/android/support/v17/leanback/app/SearchSupportFragment.java b/v17/leanback/src/android/support/v17/leanback/app/SearchSupportFragment.java
index e26f5ba..ed2a679 100644
--- a/v17/leanback/src/android/support/v17/leanback/app/SearchSupportFragment.java
+++ b/v17/leanback/src/android/support/v17/leanback/app/SearchSupportFragment.java
@@ -52,12 +52,11 @@
* into a {@link RowsSupportFragment}, in the same way that they are in a {@link
* BrowseSupportFragment}.
*
- * <p>If you do not supply a callback via
- * {@link #setSpeechRecognitionCallback(SpeechRecognitionCallback)}, an internal speech
- * recognizer will be used for which your application will need to declare
+ * <p>A SpeechRecognizer object will be created for which your application will need to declare
* android.permission.RECORD_AUDIO in AndroidManifest file. If app's target version is >= 23 and
* the device version is >= 23, a permission dialog will show first time using speech recognition.
* 0 will be used as requestCode in requestPermissions() call.
+ * {@link #setSpeechRecognitionCallback(SpeechRecognitionCallback)} is deprecated.
* </p>
* <p>
* Speech recognition is automatically started when fragment is created, but
@@ -576,8 +575,11 @@
/**
* Sets this callback to have the fragment pass speech recognition requests
- * to the activity rather than using an internal recognizer.
+ * to the activity rather than using a SpeechRecognizer object.
+ * @deprecated Launching voice recognition activity is no longer supported. App should declare
+ * android.permission.RECORD_AUDIO in AndroidManifest file.
*/
+ @Deprecated
public void setSpeechRecognitionCallback(SpeechRecognitionCallback callback) {
mSpeechRecognitionCallback = callback;
if (mSearchBar != null) {
diff --git a/v17/leanback/src/android/support/v17/leanback/widget/ActionPresenterSelector.java b/v17/leanback/src/android/support/v17/leanback/widget/ActionPresenterSelector.java
index 1ced4d4..a018c2e 100644
--- a/v17/leanback/src/android/support/v17/leanback/widget/ActionPresenterSelector.java
+++ b/v17/leanback/src/android/support/v17/leanback/widget/ActionPresenterSelector.java
@@ -55,43 +55,13 @@
}
}
- static class OneLineActionPresenter extends Presenter {
- @Override
- public ViewHolder onCreateViewHolder(ViewGroup parent) {
- View v = LayoutInflater.from(parent.getContext())
- .inflate(R.layout.lb_action_1_line, parent, false);
- return new ActionViewHolder(v, parent.getLayoutDirection());
- }
-
+ abstract static class ActionPresenter extends Presenter {
@Override
public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {
Action action = (Action) item;
ActionViewHolder vh = (ActionViewHolder) viewHolder;
vh.mAction = action;
- vh.mButton.setText(action.getLabel1());
- }
-
- @Override
- public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) {
- ((ActionViewHolder) viewHolder).mAction = null;
- }
- }
-
- static class TwoLineActionPresenter extends Presenter {
- @Override
- public ViewHolder onCreateViewHolder(ViewGroup parent) {
- View v = LayoutInflater.from(parent.getContext())
- .inflate(R.layout.lb_action_2_lines, parent, false);
- return new ActionViewHolder(v, parent.getLayoutDirection());
- }
-
- @Override
- public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {
- Action action = (Action) item;
- ActionViewHolder vh = (ActionViewHolder) viewHolder;
Drawable icon = action.getIcon();
- vh.mAction = action;
-
if (icon != null) {
final int startPadding = vh.view.getResources()
.getDimensionPixelSize(R.dimen.lb_action_with_icon_padding_start);
@@ -108,6 +78,47 @@
} else {
vh.mButton.setCompoundDrawablesWithIntrinsicBounds(icon, null, null, null);
}
+ }
+
+ @Override
+ public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) {
+ ActionViewHolder vh = (ActionViewHolder) viewHolder;
+ vh.mButton.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null);
+ vh.view.setPadding(0, 0, 0, 0);
+ vh.mAction = null;
+ }
+ }
+
+ static class OneLineActionPresenter extends ActionPresenter {
+ @Override
+ public ViewHolder onCreateViewHolder(ViewGroup parent) {
+ View v = LayoutInflater.from(parent.getContext())
+ .inflate(R.layout.lb_action_1_line, parent, false);
+ return new ActionViewHolder(v, parent.getLayoutDirection());
+ }
+
+ @Override
+ public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {
+ super.onBindViewHolder(viewHolder, item);
+ ActionViewHolder vh = ((ActionViewHolder) viewHolder);
+ Action action = (Action) item;
+ vh.mButton.setText(action.getLabel1());
+ }
+ }
+
+ static class TwoLineActionPresenter extends ActionPresenter {
+ @Override
+ public ViewHolder onCreateViewHolder(ViewGroup parent) {
+ View v = LayoutInflater.from(parent.getContext())
+ .inflate(R.layout.lb_action_2_lines, parent, false);
+ return new ActionViewHolder(v, parent.getLayoutDirection());
+ }
+
+ @Override
+ public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {
+ super.onBindViewHolder(viewHolder, item);
+ Action action = (Action) item;
+ ActionViewHolder vh = (ActionViewHolder) viewHolder;
CharSequence line1 = action.getLabel1();
CharSequence line2 = action.getLabel2();
@@ -119,13 +130,5 @@
vh.mButton.setText(line1 + "\n" + line2);
}
}
-
- @Override
- public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) {
- ActionViewHolder vh = (ActionViewHolder) viewHolder;
- vh.mButton.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null);
- vh.view.setPadding(0, 0, 0, 0);
- vh.mAction = null;
- }
}
}
diff --git a/v17/leanback/src/android/support/v17/leanback/widget/GridLayoutManager.java b/v17/leanback/src/android/support/v17/leanback/widget/GridLayoutManager.java
index 8143197..af37f77 100644
--- a/v17/leanback/src/android/support/v17/leanback/widget/GridLayoutManager.java
+++ b/v17/leanback/src/android/support/v17/leanback/widget/GridLayoutManager.java
@@ -2240,10 +2240,24 @@
focusToViewInLayout(hadFocus, scrollToFocus, -deltaPrimary, -deltaSecondary);
appendVisibleItems();
prependVisibleItems();
- removeInvisibleViewsAtFront();
- removeInvisibleViewsAtEnd();
+ // b/67370222: do not removeInvisibleViewsAtFront/End() in the loop, otherwise
+ // loop may bounce between scroll forward and scroll backward forever. Example:
+ // Assuming there are 19 items, child#18 and child#19 are both in RV, we are
+ // trying to focus to child#18 and there are 200px remaining scroll distance.
+ // 1 focusToViewInLayout() tries scroll forward 50 px to align focused child#18 on
+ // right edge, but there to compensate remaining scroll 200px, also scroll
+ // backward 200px, 150px pushes last child#19 out side of right edge.
+ // 2 removeInvisibleViewsAtEnd() remove last child#19, updateScrollLimits()
+ // invalidates scroll max
+ // 3 In next iteration, when scroll max/min is unknown, focusToViewInLayout() will
+ // align focused child#18 at center of screen.
+ // 4 Because #18 is aligned at center, appendVisibleItems() will fill child#19 to
+ // the right.
+ // 5 (back to 1 and loop forever)
} while (mGrid.getFirstVisibleIndex() != oldFirstVisible
|| mGrid.getLastVisibleIndex() != oldLastVisible);
+ removeInvisibleViewsAtFront();
+ removeInvisibleViewsAtEnd();
if (state.willRunPredictiveAnimations()) {
fillScrapViewsInPostLayout();
diff --git a/v17/leanback/src/android/support/v17/leanback/widget/SearchBar.java b/v17/leanback/src/android/support/v17/leanback/widget/SearchBar.java
index 18f608e..1094343 100644
--- a/v17/leanback/src/android/support/v17/leanback/widget/SearchBar.java
+++ b/v17/leanback/src/android/support/v17/leanback/widget/SearchBar.java
@@ -116,14 +116,6 @@
}
- private AudioManager.OnAudioFocusChangeListener mAudioFocusChangeListener =
- new AudioManager.OnAudioFocusChangeListener() {
- @Override
- public void onAudioFocusChange(int focusChange) {
- stopRecognition();
- }
- };
-
SearchBarListener mSearchBarListener;
SearchEditText mSearchTextEditor;
SpeechOrbView mSpeechOrbView;
@@ -495,7 +487,12 @@
/**
* Sets the speech recognition callback.
+ *
+ * @deprecated Launching voice recognition activity is no longer supported. App should declare
+ * android.permission.RECORD_AUDIO in AndroidManifest file. See details in
+ * {@link android.support.v17.leanback.app.SearchSupportFragment}.
*/
+ @Deprecated
public void setSpeechRecognitionCallback(SpeechRecognitionCallback request) {
mSpeechRecognitionCallback = request;
if (mSpeechRecognitionCallback != null && mSpeechRecognizer != null) {
@@ -582,7 +579,6 @@
if (mListening) {
mSpeechRecognizer.cancel();
mListening = false;
- mAudioManager.abandonAudioFocus(mAudioFocusChangeListener);
}
mSpeechRecognizer.setRecognitionListener(null);
@@ -624,17 +620,6 @@
}
mRecognizing = true;
- // Request audio focus
- int result = mAudioManager.requestAudioFocus(mAudioFocusChangeListener,
- // Use the music stream.
- AudioManager.STREAM_MUSIC,
- // Request exclusive transient focus.
- AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK);
-
-
- if (result != AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
- Log.w(TAG, "Could not get audio focus");
- }
mSearchTextEditor.setText("");
diff --git a/v17/leanback/src/android/support/v17/leanback/widget/SpeechRecognitionCallback.java b/v17/leanback/src/android/support/v17/leanback/widget/SpeechRecognitionCallback.java
index 02b0990..173444d 100644
--- a/v17/leanback/src/android/support/v17/leanback/widget/SpeechRecognitionCallback.java
+++ b/v17/leanback/src/android/support/v17/leanback/widget/SpeechRecognitionCallback.java
@@ -15,7 +15,12 @@
/**
* Interface for receiving notification that speech recognition should be initiated.
+ *
+ * @deprecated Launching voice recognition activity is no longer supported. App should declare
+ * android.permission.RECORD_AUDIO in AndroidManifest file. See details in
+ * {@link android.support.v17.leanback.app.SearchSupportFragment}.
*/
+@Deprecated
public interface SpeechRecognitionCallback {
/**
* Method invoked when speech recognition should be initiated.
diff --git a/v17/leanback/tests/java/android/support/v17/leanback/media/MediaControllerAdapterTest.java b/v17/leanback/tests/java/android/support/v17/leanback/media/MediaControllerAdapterTest.java
index 080dee0..cdcbec6 100644
--- a/v17/leanback/tests/java/android/support/v17/leanback/media/MediaControllerAdapterTest.java
+++ b/v17/leanback/tests/java/android/support/v17/leanback/media/MediaControllerAdapterTest.java
@@ -789,7 +789,6 @@
private class MediaSessionCallback extends MediaSessionCompat.Callback {
private long mSeekPosition;
private int mRepeatMode;
- private boolean mShuffleModeEnabled;
private int mShuffleMode;
private boolean mOnPlayCalled;
@@ -805,7 +804,6 @@
public void reset() {
mSeekPosition = -1;
- mShuffleModeEnabled = false;
mRepeatMode = PlaybackStateCompat.REPEAT_MODE_NONE;
mShuffleMode = PlaybackStateCompat.SHUFFLE_MODE_NONE;
diff --git a/v17/leanback/tests/java/android/support/v17/leanback/widget/GridWidgetTest.java b/v17/leanback/tests/java/android/support/v17/leanback/widget/GridWidgetTest.java
index b6fe3c4..5de0aa7 100644
--- a/v17/leanback/tests/java/android/support/v17/leanback/widget/GridWidgetTest.java
+++ b/v17/leanback/tests/java/android/support/v17/leanback/widget/GridWidgetTest.java
@@ -1387,6 +1387,68 @@
}
@Test
+ public void testScrollAndStuck() throws Throwable {
+ // see b/67370222 fastRelayout() may be stuck.
+ final int numItems = 19;
+ final int[] itemsLength = new int[numItems];
+ for (int i = 0; i < numItems; i++) {
+ itemsLength[i] = 288;
+ }
+ Intent intent = new Intent();
+ intent.putExtra(GridActivity.EXTRA_LAYOUT_RESOURCE_ID,
+ R.layout.horizontal_linear);
+ intent.putExtra(GridActivity.EXTRA_ITEMS, itemsLength);
+ initActivity(intent);
+ mOrientation = BaseGridView.HORIZONTAL;
+ mNumRows = 1;
+
+ // set left right padding to 112, space between items to be 16.
+ mActivityTestRule.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ ViewGroup.LayoutParams lp = mGridView.getLayoutParams();
+ lp.width = 1920;
+ mGridView.setLayoutParams(lp);
+ mGridView.setPadding(112, mGridView.getPaddingTop(), 112,
+ mGridView.getPaddingBottom());
+ mGridView.setItemSpacing(16);
+ }
+ });
+ waitOneUiCycle();
+
+ int scrollPos = 0;
+ while (true) {
+ final View view = mGridView.getChildAt(mGridView.getChildCount() - 1);
+ final int pos = mGridView.getChildViewHolder(view).getAdapterPosition();
+ if (scrollPos != pos) {
+ scrollPos = pos;
+ mActivityTestRule.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mGridView.smoothScrollToPosition(pos);
+ }
+ });
+ }
+ // wait until we see 2nd from last:
+ if (pos >= 17) {
+ if (pos == 17) {
+ // great we can test fastRelayout() bug.
+ Thread.sleep(50);
+ mActivityTestRule.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ view.requestLayout();
+ }
+ });
+ }
+ break;
+ }
+ Thread.sleep(16);
+ }
+ waitForScrollIdle();
+ }
+
+ @Test
public void testSwapAfterScroll() throws Throwable {
Intent intent = new Intent();
intent.putExtra(GridActivity.EXTRA_LAYOUT_RESOURCE_ID,
diff --git a/v17/preference-leanback/AndroidManifest.xml b/v17/preference-leanback/AndroidManifest.xml
index c34c254..028f582 100644
--- a/v17/preference-leanback/AndroidManifest.xml
+++ b/v17/preference-leanback/AndroidManifest.xml
@@ -18,8 +18,4 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.support.v17.preference">
<uses-sdk android:minSdkVersion="17" />
- <application>
- <meta-data android:name="android.support.v17.preference.VERSION"
- android:value="${support-version}" />
- </application>
</manifest>
diff --git a/v17/preference-leanback/OWNERS b/v17/preference-leanback/OWNERS
new file mode 100644
index 0000000..727cc8e
--- /dev/null
+++ b/v17/preference-leanback/OWNERS
@@ -0,0 +1 @@
+nicoya@google.com
\ No newline at end of file
diff --git a/v17/preference-leanback/api/26.1.0.txt b/v17/preference-leanback/api/26.1.0.txt
new file mode 100644
index 0000000..7bae10d
--- /dev/null
+++ b/v17/preference-leanback/api/26.1.0.txt
@@ -0,0 +1,62 @@
+package android.support.v17.preference {
+
+ public abstract class BaseLeanbackPreferenceFragment extends android.support.v14.preference.PreferenceFragment {
+ ctor public BaseLeanbackPreferenceFragment();
+ }
+
+ public class LeanbackListPreferenceDialogFragment extends android.support.v17.preference.LeanbackPreferenceDialogFragment {
+ ctor public LeanbackListPreferenceDialogFragment();
+ method public static android.support.v17.preference.LeanbackListPreferenceDialogFragment newInstanceMulti(java.lang.String);
+ method public static android.support.v17.preference.LeanbackListPreferenceDialogFragment newInstanceSingle(java.lang.String);
+ method public android.support.v7.widget.RecyclerView.Adapter onCreateAdapter();
+ }
+
+ public class LeanbackListPreferenceDialogFragment.AdapterMulti extends android.support.v7.widget.RecyclerView.Adapter implements android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder.OnItemClickListener {
+ ctor public LeanbackListPreferenceDialogFragment.AdapterMulti(java.lang.CharSequence[], java.lang.CharSequence[], java.util.Set<java.lang.String>);
+ method public int getItemCount();
+ method public void onBindViewHolder(android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder, int);
+ method public android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder onCreateViewHolder(android.view.ViewGroup, int);
+ method public void onItemClick(android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder);
+ }
+
+ public class LeanbackListPreferenceDialogFragment.AdapterSingle extends android.support.v7.widget.RecyclerView.Adapter implements android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder.OnItemClickListener {
+ ctor public LeanbackListPreferenceDialogFragment.AdapterSingle(java.lang.CharSequence[], java.lang.CharSequence[], java.lang.CharSequence);
+ method public int getItemCount();
+ method public void onBindViewHolder(android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder, int);
+ method public android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder onCreateViewHolder(android.view.ViewGroup, int);
+ method public void onItemClick(android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder);
+ }
+
+ public static class LeanbackListPreferenceDialogFragment.ViewHolder extends android.support.v7.widget.RecyclerView.ViewHolder implements android.view.View.OnClickListener {
+ ctor public LeanbackListPreferenceDialogFragment.ViewHolder(android.view.View, android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder.OnItemClickListener);
+ method public android.view.ViewGroup getContainer();
+ method public android.widget.TextView getTitleView();
+ method public android.widget.Checkable getWidgetView();
+ method public void onClick(android.view.View);
+ }
+
+ public static abstract interface LeanbackListPreferenceDialogFragment.ViewHolder.OnItemClickListener {
+ method public abstract void onItemClick(android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder);
+ }
+
+ public class LeanbackPreferenceDialogFragment extends android.app.Fragment {
+ ctor public LeanbackPreferenceDialogFragment();
+ method public android.support.v7.preference.DialogPreference getPreference();
+ field public static final java.lang.String ARG_KEY = "key";
+ }
+
+ public abstract class LeanbackPreferenceFragment extends android.support.v17.preference.BaseLeanbackPreferenceFragment {
+ ctor public LeanbackPreferenceFragment();
+ method public void setTitle(java.lang.CharSequence);
+ }
+
+ public abstract class LeanbackSettingsFragment extends android.app.Fragment {
+ ctor public LeanbackSettingsFragment();
+ method public boolean onPreferenceDisplayDialog(android.support.v14.preference.PreferenceFragment, android.support.v7.preference.Preference);
+ method public abstract void onPreferenceStartInitialScreen();
+ method public void startImmersiveFragment(android.app.Fragment);
+ method public void startPreferenceFragment(android.app.Fragment);
+ }
+
+}
+
diff --git a/v17/preference-leanback/api/27.0.0.txt b/v17/preference-leanback/api/27.0.0.txt
new file mode 100644
index 0000000..7bae10d
--- /dev/null
+++ b/v17/preference-leanback/api/27.0.0.txt
@@ -0,0 +1,62 @@
+package android.support.v17.preference {
+
+ public abstract class BaseLeanbackPreferenceFragment extends android.support.v14.preference.PreferenceFragment {
+ ctor public BaseLeanbackPreferenceFragment();
+ }
+
+ public class LeanbackListPreferenceDialogFragment extends android.support.v17.preference.LeanbackPreferenceDialogFragment {
+ ctor public LeanbackListPreferenceDialogFragment();
+ method public static android.support.v17.preference.LeanbackListPreferenceDialogFragment newInstanceMulti(java.lang.String);
+ method public static android.support.v17.preference.LeanbackListPreferenceDialogFragment newInstanceSingle(java.lang.String);
+ method public android.support.v7.widget.RecyclerView.Adapter onCreateAdapter();
+ }
+
+ public class LeanbackListPreferenceDialogFragment.AdapterMulti extends android.support.v7.widget.RecyclerView.Adapter implements android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder.OnItemClickListener {
+ ctor public LeanbackListPreferenceDialogFragment.AdapterMulti(java.lang.CharSequence[], java.lang.CharSequence[], java.util.Set<java.lang.String>);
+ method public int getItemCount();
+ method public void onBindViewHolder(android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder, int);
+ method public android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder onCreateViewHolder(android.view.ViewGroup, int);
+ method public void onItemClick(android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder);
+ }
+
+ public class LeanbackListPreferenceDialogFragment.AdapterSingle extends android.support.v7.widget.RecyclerView.Adapter implements android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder.OnItemClickListener {
+ ctor public LeanbackListPreferenceDialogFragment.AdapterSingle(java.lang.CharSequence[], java.lang.CharSequence[], java.lang.CharSequence);
+ method public int getItemCount();
+ method public void onBindViewHolder(android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder, int);
+ method public android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder onCreateViewHolder(android.view.ViewGroup, int);
+ method public void onItemClick(android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder);
+ }
+
+ public static class LeanbackListPreferenceDialogFragment.ViewHolder extends android.support.v7.widget.RecyclerView.ViewHolder implements android.view.View.OnClickListener {
+ ctor public LeanbackListPreferenceDialogFragment.ViewHolder(android.view.View, android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder.OnItemClickListener);
+ method public android.view.ViewGroup getContainer();
+ method public android.widget.TextView getTitleView();
+ method public android.widget.Checkable getWidgetView();
+ method public void onClick(android.view.View);
+ }
+
+ public static abstract interface LeanbackListPreferenceDialogFragment.ViewHolder.OnItemClickListener {
+ method public abstract void onItemClick(android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder);
+ }
+
+ public class LeanbackPreferenceDialogFragment extends android.app.Fragment {
+ ctor public LeanbackPreferenceDialogFragment();
+ method public android.support.v7.preference.DialogPreference getPreference();
+ field public static final java.lang.String ARG_KEY = "key";
+ }
+
+ public abstract class LeanbackPreferenceFragment extends android.support.v17.preference.BaseLeanbackPreferenceFragment {
+ ctor public LeanbackPreferenceFragment();
+ method public void setTitle(java.lang.CharSequence);
+ }
+
+ public abstract class LeanbackSettingsFragment extends android.app.Fragment {
+ ctor public LeanbackSettingsFragment();
+ method public boolean onPreferenceDisplayDialog(android.support.v14.preference.PreferenceFragment, android.support.v7.preference.Preference);
+ method public abstract void onPreferenceStartInitialScreen();
+ method public void startImmersiveFragment(android.app.Fragment);
+ method public void startPreferenceFragment(android.app.Fragment);
+ }
+
+}
+
diff --git a/v17/preference-leanback/src/android/support/v17/preference/LeanbackPreferenceFragment.java b/v17/preference-leanback/src/android/support/v17/preference/LeanbackPreferenceFragment.java
index dbff1c8..48d14b8 100644
--- a/v17/preference-leanback/src/android/support/v17/preference/LeanbackPreferenceFragment.java
+++ b/v17/preference-leanback/src/android/support/v17/preference/LeanbackPreferenceFragment.java
@@ -30,12 +30,12 @@
* <p>The following sample code shows a simple leanback preference fragment that is
* populated from a resource. The resource it loads is:</p>
*
- * {@sample frameworks/support/samples/SupportPreferenceDemos/res/xml/preferences.xml preferences}
+ * {@sample frameworks/support/samples/SupportPreferenceDemos/src/main/res/xml/preferences.xml preferences}
*
* <p>The fragment needs only to implement {@link #onCreatePreferences(Bundle, String)} to populate
* the list of preference objects:</p>
*
- * {@sample frameworks/support/samples/SupportPreferenceDemos/src/com/example/android/supportpreference/FragmentSupportPreferencesLeanback.java
+ * {@sample frameworks/support/samples/SupportPreferenceDemos/src/main/java/com/example/android/supportpreference/FragmentSupportPreferencesLeanback.java
* support_fragment_leanback}
*/
public abstract class LeanbackPreferenceFragment extends BaseLeanbackPreferenceFragment {
diff --git a/v17/preference-leanback/src/android/support/v17/preference/LeanbackSettingsFragment.java b/v17/preference-leanback/src/android/support/v17/preference/LeanbackSettingsFragment.java
index 08f19c4..d56a2a6 100644
--- a/v17/preference-leanback/src/android/support/v17/preference/LeanbackSettingsFragment.java
+++ b/v17/preference-leanback/src/android/support/v17/preference/LeanbackSettingsFragment.java
@@ -42,14 +42,14 @@
* <p>The following sample code shows a simple leanback preference fragment that is
* populated from a resource. The resource it loads is:</p>
*
- * {@sample frameworks/support/samples/SupportPreferenceDemos/res/xml/preferences.xml preferences}
+ * {@sample frameworks/support/samples/SupportPreferenceDemos/src/main/res/xml/preferences.xml preferences}
*
* <p>The sample implements
* {@link PreferenceFragment.OnPreferenceStartFragmentCallback#onPreferenceStartFragment(PreferenceFragment, Preference)},
* {@link PreferenceFragment.OnPreferenceStartScreenCallback#onPreferenceStartScreen(PreferenceFragment, PreferenceScreen)},
* and {@link #onPreferenceStartInitialScreen()}:</p>
*
- * {@sample frameworks/support/samples/SupportPreferenceDemos/src/com/example/android/supportpreference/FragmentSupportPreferencesLeanback.java
+ * {@sample frameworks/support/samples/SupportPreferenceDemos/src/main/java/com/example/android/supportpreference/FragmentSupportPreferencesLeanback.java
* support_fragment_leanback}
*/
public abstract class LeanbackSettingsFragment extends Fragment
diff --git a/v4/AndroidManifest.xml b/v4/AndroidManifest.xml
index c179eb2..bc1ee8e 100644
--- a/v4/AndroidManifest.xml
+++ b/v4/AndroidManifest.xml
@@ -16,8 +16,4 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.support.v4">
<uses-sdk android:minSdkVersion="14"/>
- <application>
- <meta-data android:name="android.support.v4.VERSION"
- android:value="${support-version}" />
- </application>
</manifest>
diff --git a/v7/appcompat/Android.mk b/v7/appcompat/Android.mk
index 93baa95..500a2a2 100644
--- a/v7/appcompat/Android.mk
+++ b/v7/appcompat/Android.mk
@@ -26,7 +26,7 @@
LOCAL_USE_AAPT2 := true
LOCAL_MODULE := android-support-v7-appcompat
LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_SRC_FILES := $(call all-java-files-under,src)
+LOCAL_SRC_FILES := $(call all-java-files-under,src/main/java)
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
LOCAL_STATIC_JAVA_LIBRARIES := \
android-support-vectordrawable \
diff --git a/v7/appcompat/AndroidManifest.xml b/v7/appcompat/AndroidManifest.xml
index 786d361..76b8a23 100644
--- a/v7/appcompat/AndroidManifest.xml
+++ b/v7/appcompat/AndroidManifest.xml
@@ -16,8 +16,4 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.support.v7.appcompat">
<uses-sdk android:minSdkVersion="14" />
- <application>
- <meta-data android:name="android.support.v7.appcompat.VERSION"
- android:value="${support-version}" />
- </application>
</manifest>
diff --git a/v7/appcompat/OWNERS b/v7/appcompat/OWNERS
new file mode 100644
index 0000000..9ac21f4
--- /dev/null
+++ b/v7/appcompat/OWNERS
@@ -0,0 +1,2 @@
+clarabayarri@google.com
+kirillg@google.com
\ No newline at end of file
diff --git a/v7/appcompat/api/26.1.0.txt b/v7/appcompat/api/26.1.0.txt
new file mode 100644
index 0000000..0b26bb7
--- /dev/null
+++ b/v7/appcompat/api/26.1.0.txt
@@ -0,0 +1,890 @@
+package android.support.v7.app {
+
+ public abstract class ActionBar {
+ ctor public ActionBar();
+ method public abstract void addOnMenuVisibilityListener(android.support.v7.app.ActionBar.OnMenuVisibilityListener);
+ method public abstract deprecated void addTab(android.support.v7.app.ActionBar.Tab);
+ method public abstract deprecated void addTab(android.support.v7.app.ActionBar.Tab, boolean);
+ method public abstract deprecated void addTab(android.support.v7.app.ActionBar.Tab, int);
+ method public abstract deprecated void addTab(android.support.v7.app.ActionBar.Tab, int, boolean);
+ method public abstract android.view.View getCustomView();
+ method public abstract int getDisplayOptions();
+ method public float getElevation();
+ method public abstract int getHeight();
+ method public int getHideOffset();
+ method public abstract deprecated int getNavigationItemCount();
+ method public abstract deprecated int getNavigationMode();
+ method public abstract deprecated int getSelectedNavigationIndex();
+ method public abstract deprecated android.support.v7.app.ActionBar.Tab getSelectedTab();
+ method public abstract java.lang.CharSequence getSubtitle();
+ method public abstract deprecated android.support.v7.app.ActionBar.Tab getTabAt(int);
+ method public abstract deprecated int getTabCount();
+ method public android.content.Context getThemedContext();
+ method public abstract java.lang.CharSequence getTitle();
+ method public abstract void hide();
+ method public boolean isHideOnContentScrollEnabled();
+ method public abstract boolean isShowing();
+ method public abstract deprecated android.support.v7.app.ActionBar.Tab newTab();
+ method public abstract deprecated void removeAllTabs();
+ method public abstract void removeOnMenuVisibilityListener(android.support.v7.app.ActionBar.OnMenuVisibilityListener);
+ method public abstract deprecated void removeTab(android.support.v7.app.ActionBar.Tab);
+ method public abstract deprecated void removeTabAt(int);
+ method public abstract deprecated void selectTab(android.support.v7.app.ActionBar.Tab);
+ method public abstract void setBackgroundDrawable(android.graphics.drawable.Drawable);
+ method public abstract void setCustomView(android.view.View);
+ method public abstract void setCustomView(android.view.View, android.support.v7.app.ActionBar.LayoutParams);
+ method public abstract void setCustomView(int);
+ method public abstract void setDisplayHomeAsUpEnabled(boolean);
+ method public abstract void setDisplayOptions(int);
+ method public abstract void setDisplayOptions(int, int);
+ method public abstract void setDisplayShowCustomEnabled(boolean);
+ method public abstract void setDisplayShowHomeEnabled(boolean);
+ method public abstract void setDisplayShowTitleEnabled(boolean);
+ method public abstract void setDisplayUseLogoEnabled(boolean);
+ method public void setElevation(float);
+ method public void setHideOffset(int);
+ method public void setHideOnContentScrollEnabled(boolean);
+ method public void setHomeActionContentDescription(java.lang.CharSequence);
+ method public void setHomeActionContentDescription(int);
+ method public void setHomeAsUpIndicator(android.graphics.drawable.Drawable);
+ method public void setHomeAsUpIndicator(int);
+ method public void setHomeButtonEnabled(boolean);
+ method public abstract void setIcon(int);
+ method public abstract void setIcon(android.graphics.drawable.Drawable);
+ method public abstract deprecated void setListNavigationCallbacks(android.widget.SpinnerAdapter, android.support.v7.app.ActionBar.OnNavigationListener);
+ method public abstract void setLogo(int);
+ method public abstract void setLogo(android.graphics.drawable.Drawable);
+ method public abstract deprecated void setNavigationMode(int);
+ method public abstract deprecated void setSelectedNavigationItem(int);
+ method public void setSplitBackgroundDrawable(android.graphics.drawable.Drawable);
+ method public void setStackedBackgroundDrawable(android.graphics.drawable.Drawable);
+ method public abstract void setSubtitle(java.lang.CharSequence);
+ method public abstract void setSubtitle(int);
+ method public abstract void setTitle(java.lang.CharSequence);
+ method public abstract void setTitle(int);
+ method public abstract void show();
+ field public static final int DISPLAY_HOME_AS_UP = 4; // 0x4
+ field public static final int DISPLAY_SHOW_CUSTOM = 16; // 0x10
+ field public static final int DISPLAY_SHOW_HOME = 2; // 0x2
+ field public static final int DISPLAY_SHOW_TITLE = 8; // 0x8
+ field public static final int DISPLAY_USE_LOGO = 1; // 0x1
+ field public static final deprecated int NAVIGATION_MODE_LIST = 1; // 0x1
+ field public static final deprecated int NAVIGATION_MODE_STANDARD = 0; // 0x0
+ field public static final deprecated int NAVIGATION_MODE_TABS = 2; // 0x2
+ }
+
+ public static class ActionBar.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+ ctor public ActionBar.LayoutParams(android.content.Context, android.util.AttributeSet);
+ ctor public ActionBar.LayoutParams(int, int);
+ ctor public ActionBar.LayoutParams(int, int, int);
+ ctor public ActionBar.LayoutParams(int);
+ ctor public ActionBar.LayoutParams(android.support.v7.app.ActionBar.LayoutParams);
+ ctor public ActionBar.LayoutParams(android.view.ViewGroup.LayoutParams);
+ field public int gravity;
+ }
+
+ public static abstract interface ActionBar.OnMenuVisibilityListener {
+ method public abstract void onMenuVisibilityChanged(boolean);
+ }
+
+ public static abstract deprecated interface ActionBar.OnNavigationListener {
+ method public abstract boolean onNavigationItemSelected(int, long);
+ }
+
+ public static abstract deprecated class ActionBar.Tab {
+ ctor public ActionBar.Tab();
+ method public abstract java.lang.CharSequence getContentDescription();
+ method public abstract android.view.View getCustomView();
+ method public abstract android.graphics.drawable.Drawable getIcon();
+ method public abstract int getPosition();
+ method public abstract java.lang.Object getTag();
+ method public abstract java.lang.CharSequence getText();
+ method public abstract void select();
+ method public abstract android.support.v7.app.ActionBar.Tab setContentDescription(int);
+ method public abstract android.support.v7.app.ActionBar.Tab setContentDescription(java.lang.CharSequence);
+ method public abstract android.support.v7.app.ActionBar.Tab setCustomView(android.view.View);
+ method public abstract android.support.v7.app.ActionBar.Tab setCustomView(int);
+ method public abstract android.support.v7.app.ActionBar.Tab setIcon(android.graphics.drawable.Drawable);
+ method public abstract android.support.v7.app.ActionBar.Tab setIcon(int);
+ method public abstract android.support.v7.app.ActionBar.Tab setTabListener(android.support.v7.app.ActionBar.TabListener);
+ method public abstract android.support.v7.app.ActionBar.Tab setTag(java.lang.Object);
+ method public abstract android.support.v7.app.ActionBar.Tab setText(java.lang.CharSequence);
+ method public abstract android.support.v7.app.ActionBar.Tab setText(int);
+ field public static final int INVALID_POSITION = -1; // 0xffffffff
+ }
+
+ public static abstract deprecated interface ActionBar.TabListener {
+ method public abstract void onTabReselected(android.support.v7.app.ActionBar.Tab, android.support.v4.app.FragmentTransaction);
+ method public abstract void onTabSelected(android.support.v7.app.ActionBar.Tab, android.support.v4.app.FragmentTransaction);
+ method public abstract void onTabUnselected(android.support.v7.app.ActionBar.Tab, android.support.v4.app.FragmentTransaction);
+ }
+
+ public class ActionBarDrawerToggle implements android.support.v4.widget.DrawerLayout.DrawerListener {
+ ctor public ActionBarDrawerToggle(android.app.Activity, android.support.v4.widget.DrawerLayout, int, int);
+ ctor public ActionBarDrawerToggle(android.app.Activity, android.support.v4.widget.DrawerLayout, android.support.v7.widget.Toolbar, int, int);
+ method public android.support.v7.graphics.drawable.DrawerArrowDrawable getDrawerArrowDrawable();
+ method public android.view.View.OnClickListener getToolbarNavigationClickListener();
+ method public boolean isDrawerIndicatorEnabled();
+ method public boolean isDrawerSlideAnimationEnabled();
+ method public void onConfigurationChanged(android.content.res.Configuration);
+ method public void onDrawerClosed(android.view.View);
+ method public void onDrawerOpened(android.view.View);
+ method public void onDrawerSlide(android.view.View, float);
+ method public void onDrawerStateChanged(int);
+ method public boolean onOptionsItemSelected(android.view.MenuItem);
+ method public void setDrawerArrowDrawable(android.support.v7.graphics.drawable.DrawerArrowDrawable);
+ method public void setDrawerIndicatorEnabled(boolean);
+ method public void setDrawerSlideAnimationEnabled(boolean);
+ method public void setHomeAsUpIndicator(android.graphics.drawable.Drawable);
+ method public void setHomeAsUpIndicator(int);
+ method public void setToolbarNavigationClickListener(android.view.View.OnClickListener);
+ method public void syncState();
+ }
+
+ public static abstract interface ActionBarDrawerToggle.Delegate {
+ method public abstract android.content.Context getActionBarThemedContext();
+ method public abstract android.graphics.drawable.Drawable getThemeUpIndicator();
+ method public abstract boolean isNavigationVisible();
+ method public abstract void setActionBarDescription(int);
+ method public abstract void setActionBarUpIndicator(android.graphics.drawable.Drawable, int);
+ }
+
+ public static abstract interface ActionBarDrawerToggle.DelegateProvider {
+ method public abstract android.support.v7.app.ActionBarDrawerToggle.Delegate getDrawerToggleDelegate();
+ }
+
+ public class AlertDialog extends android.support.v7.app.AppCompatDialog implements android.content.DialogInterface {
+ ctor protected AlertDialog(android.content.Context);
+ ctor protected AlertDialog(android.content.Context, int);
+ ctor protected AlertDialog(android.content.Context, boolean, android.content.DialogInterface.OnCancelListener);
+ method public android.widget.Button getButton(int);
+ method public android.widget.ListView getListView();
+ method public void setButton(int, java.lang.CharSequence, android.os.Message);
+ method public void setButton(int, java.lang.CharSequence, android.content.DialogInterface.OnClickListener);
+ method public void setCustomTitle(android.view.View);
+ method public void setIcon(int);
+ method public void setIcon(android.graphics.drawable.Drawable);
+ method public void setIconAttribute(int);
+ method public void setMessage(java.lang.CharSequence);
+ method public void setView(android.view.View);
+ method public void setView(android.view.View, int, int, int, int);
+ }
+
+ public static class AlertDialog.Builder {
+ ctor public AlertDialog.Builder(android.content.Context);
+ ctor public AlertDialog.Builder(android.content.Context, int);
+ method public android.support.v7.app.AlertDialog create();
+ method public android.content.Context getContext();
+ method public android.support.v7.app.AlertDialog.Builder setAdapter(android.widget.ListAdapter, android.content.DialogInterface.OnClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setCancelable(boolean);
+ method public android.support.v7.app.AlertDialog.Builder setCursor(android.database.Cursor, android.content.DialogInterface.OnClickListener, java.lang.String);
+ method public android.support.v7.app.AlertDialog.Builder setCustomTitle(android.view.View);
+ method public android.support.v7.app.AlertDialog.Builder setIcon(int);
+ method public android.support.v7.app.AlertDialog.Builder setIcon(android.graphics.drawable.Drawable);
+ method public android.support.v7.app.AlertDialog.Builder setIconAttribute(int);
+ method public deprecated android.support.v7.app.AlertDialog.Builder setInverseBackgroundForced(boolean);
+ method public android.support.v7.app.AlertDialog.Builder setItems(int, android.content.DialogInterface.OnClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setItems(java.lang.CharSequence[], android.content.DialogInterface.OnClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setMessage(int);
+ method public android.support.v7.app.AlertDialog.Builder setMessage(java.lang.CharSequence);
+ method public android.support.v7.app.AlertDialog.Builder setMultiChoiceItems(int, boolean[], android.content.DialogInterface.OnMultiChoiceClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setMultiChoiceItems(java.lang.CharSequence[], boolean[], android.content.DialogInterface.OnMultiChoiceClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setMultiChoiceItems(android.database.Cursor, java.lang.String, java.lang.String, android.content.DialogInterface.OnMultiChoiceClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setNegativeButton(int, android.content.DialogInterface.OnClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setNegativeButton(java.lang.CharSequence, android.content.DialogInterface.OnClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setNeutralButton(int, android.content.DialogInterface.OnClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setNeutralButton(java.lang.CharSequence, android.content.DialogInterface.OnClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setOnCancelListener(android.content.DialogInterface.OnCancelListener);
+ method public android.support.v7.app.AlertDialog.Builder setOnDismissListener(android.content.DialogInterface.OnDismissListener);
+ method public android.support.v7.app.AlertDialog.Builder setOnItemSelectedListener(android.widget.AdapterView.OnItemSelectedListener);
+ method public android.support.v7.app.AlertDialog.Builder setOnKeyListener(android.content.DialogInterface.OnKeyListener);
+ method public android.support.v7.app.AlertDialog.Builder setPositiveButton(int, android.content.DialogInterface.OnClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setPositiveButton(java.lang.CharSequence, android.content.DialogInterface.OnClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setSingleChoiceItems(int, int, android.content.DialogInterface.OnClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setSingleChoiceItems(android.database.Cursor, int, java.lang.String, android.content.DialogInterface.OnClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setSingleChoiceItems(java.lang.CharSequence[], int, android.content.DialogInterface.OnClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setSingleChoiceItems(android.widget.ListAdapter, int, android.content.DialogInterface.OnClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setTitle(int);
+ method public android.support.v7.app.AlertDialog.Builder setTitle(java.lang.CharSequence);
+ method public android.support.v7.app.AlertDialog.Builder setView(int);
+ method public android.support.v7.app.AlertDialog.Builder setView(android.view.View);
+ method public android.support.v7.app.AlertDialog show();
+ }
+
+ public class AppCompatActivity extends android.support.v4.app.FragmentActivity implements android.support.v7.app.ActionBarDrawerToggle.DelegateProvider android.support.v7.app.AppCompatCallback {
+ ctor public AppCompatActivity();
+ method public android.support.v7.app.AppCompatDelegate getDelegate();
+ method public android.support.v7.app.ActionBarDrawerToggle.Delegate getDrawerToggleDelegate();
+ method public android.support.v7.app.ActionBar getSupportActionBar();
+ method public android.content.Intent getSupportParentActivityIntent();
+ method public void onCreateSupportNavigateUpTaskStack(android.support.v4.app.TaskStackBuilder);
+ method public final boolean onMenuItemSelected(int, android.view.MenuItem);
+ method public void onPrepareSupportNavigateUpTaskStack(android.support.v4.app.TaskStackBuilder);
+ method public void onSupportActionModeFinished(android.support.v7.view.ActionMode);
+ method public void onSupportActionModeStarted(android.support.v7.view.ActionMode);
+ method public deprecated void onSupportContentChanged();
+ method public boolean onSupportNavigateUp();
+ method public android.support.v7.view.ActionMode onWindowStartingSupportActionMode(android.support.v7.view.ActionMode.Callback);
+ method public void setSupportActionBar(android.support.v7.widget.Toolbar);
+ method public deprecated void setSupportProgress(int);
+ method public deprecated void setSupportProgressBarIndeterminate(boolean);
+ method public deprecated void setSupportProgressBarIndeterminateVisibility(boolean);
+ method public deprecated void setSupportProgressBarVisibility(boolean);
+ method public android.support.v7.view.ActionMode startSupportActionMode(android.support.v7.view.ActionMode.Callback);
+ method public void supportInvalidateOptionsMenu();
+ method public void supportNavigateUpTo(android.content.Intent);
+ method public boolean supportRequestWindowFeature(int);
+ method public boolean supportShouldUpRecreateTask(android.content.Intent);
+ }
+
+ public abstract interface AppCompatCallback {
+ method public abstract void onSupportActionModeFinished(android.support.v7.view.ActionMode);
+ method public abstract void onSupportActionModeStarted(android.support.v7.view.ActionMode);
+ method public abstract android.support.v7.view.ActionMode onWindowStartingSupportActionMode(android.support.v7.view.ActionMode.Callback);
+ }
+
+ public abstract class AppCompatDelegate {
+ method public abstract void addContentView(android.view.View, android.view.ViewGroup.LayoutParams);
+ method public abstract boolean applyDayNight();
+ method public static android.support.v7.app.AppCompatDelegate create(android.app.Activity, android.support.v7.app.AppCompatCallback);
+ method public static android.support.v7.app.AppCompatDelegate create(android.app.Dialog, android.support.v7.app.AppCompatCallback);
+ method public abstract android.view.View createView(android.view.View, java.lang.String, android.content.Context, android.util.AttributeSet);
+ method public abstract <T extends android.view.View> T findViewById(int);
+ method public static int getDefaultNightMode();
+ method public abstract android.support.v7.app.ActionBarDrawerToggle.Delegate getDrawerToggleDelegate();
+ method public abstract android.view.MenuInflater getMenuInflater();
+ method public abstract android.support.v7.app.ActionBar getSupportActionBar();
+ method public abstract boolean hasWindowFeature(int);
+ method public abstract void installViewFactory();
+ method public abstract void invalidateOptionsMenu();
+ method public static boolean isCompatVectorFromResourcesEnabled();
+ method public abstract boolean isHandleNativeActionModesEnabled();
+ method public abstract void onConfigurationChanged(android.content.res.Configuration);
+ method public abstract void onCreate(android.os.Bundle);
+ method public abstract void onDestroy();
+ method public abstract void onPostCreate(android.os.Bundle);
+ method public abstract void onPostResume();
+ method public abstract void onSaveInstanceState(android.os.Bundle);
+ method public abstract void onStart();
+ method public abstract void onStop();
+ method public abstract boolean requestWindowFeature(int);
+ method public static void setCompatVectorFromResourcesEnabled(boolean);
+ method public abstract void setContentView(android.view.View);
+ method public abstract void setContentView(int);
+ method public abstract void setContentView(android.view.View, android.view.ViewGroup.LayoutParams);
+ method public static void setDefaultNightMode(int);
+ method public abstract void setHandleNativeActionModesEnabled(boolean);
+ method public abstract void setLocalNightMode(int);
+ method public abstract void setSupportActionBar(android.support.v7.widget.Toolbar);
+ method public abstract void setTitle(java.lang.CharSequence);
+ method public abstract android.support.v7.view.ActionMode startSupportActionMode(android.support.v7.view.ActionMode.Callback);
+ field public static final int FEATURE_ACTION_MODE_OVERLAY = 10; // 0xa
+ field public static final int FEATURE_SUPPORT_ACTION_BAR = 108; // 0x6c
+ field public static final int FEATURE_SUPPORT_ACTION_BAR_OVERLAY = 109; // 0x6d
+ field public static final int MODE_NIGHT_AUTO = 0; // 0x0
+ field public static final int MODE_NIGHT_FOLLOW_SYSTEM = -1; // 0xffffffff
+ field public static final int MODE_NIGHT_NO = 1; // 0x1
+ field public static final int MODE_NIGHT_YES = 2; // 0x2
+ }
+
+ public class AppCompatDialog extends android.app.Dialog implements android.support.v7.app.AppCompatCallback {
+ ctor public AppCompatDialog(android.content.Context);
+ ctor public AppCompatDialog(android.content.Context, int);
+ ctor protected AppCompatDialog(android.content.Context, boolean, android.content.DialogInterface.OnCancelListener);
+ method public android.support.v7.app.AppCompatDelegate getDelegate();
+ method public android.support.v7.app.ActionBar getSupportActionBar();
+ method public void onSupportActionModeFinished(android.support.v7.view.ActionMode);
+ method public void onSupportActionModeStarted(android.support.v7.view.ActionMode);
+ method public android.support.v7.view.ActionMode onWindowStartingSupportActionMode(android.support.v7.view.ActionMode.Callback);
+ method public boolean supportRequestWindowFeature(int);
+ }
+
+ public class AppCompatDialogFragment extends android.support.v4.app.DialogFragment {
+ ctor public AppCompatDialogFragment();
+ }
+
+ public deprecated class NotificationCompat extends android.support.v4.app.NotificationCompat {
+ ctor public deprecated NotificationCompat();
+ method public static deprecated android.support.v4.media.session.MediaSessionCompat.Token getMediaSession(android.app.Notification);
+ }
+
+ public static deprecated class NotificationCompat.Builder extends android.support.v4.app.NotificationCompat.Builder {
+ ctor public deprecated NotificationCompat.Builder(android.content.Context);
+ }
+
+ public static deprecated class NotificationCompat.DecoratedCustomViewStyle extends android.support.v4.app.NotificationCompat.DecoratedCustomViewStyle {
+ ctor public deprecated NotificationCompat.DecoratedCustomViewStyle();
+ }
+
+ public static deprecated class NotificationCompat.DecoratedMediaCustomViewStyle extends android.support.v4.media.app.NotificationCompat.DecoratedMediaCustomViewStyle {
+ ctor public deprecated NotificationCompat.DecoratedMediaCustomViewStyle();
+ }
+
+ public static deprecated class NotificationCompat.MediaStyle extends android.support.v4.media.app.NotificationCompat.MediaStyle {
+ ctor public deprecated NotificationCompat.MediaStyle();
+ ctor public deprecated NotificationCompat.MediaStyle(android.support.v4.app.NotificationCompat.Builder);
+ method public deprecated android.support.v7.app.NotificationCompat.MediaStyle setCancelButtonIntent(android.app.PendingIntent);
+ method public deprecated android.support.v7.app.NotificationCompat.MediaStyle setMediaSession(android.support.v4.media.session.MediaSessionCompat.Token);
+ method public deprecated android.support.v7.app.NotificationCompat.MediaStyle setShowActionsInCompactView(int...);
+ method public deprecated android.support.v7.app.NotificationCompat.MediaStyle setShowCancelButton(boolean);
+ }
+
+}
+
+package android.support.v7.content.res {
+
+ public final class AppCompatResources {
+ method public static android.content.res.ColorStateList getColorStateList(android.content.Context, int);
+ method public static android.graphics.drawable.Drawable getDrawable(android.content.Context, int);
+ }
+
+}
+
+package android.support.v7.graphics.drawable {
+
+ public class DrawerArrowDrawable extends android.graphics.drawable.Drawable {
+ ctor public DrawerArrowDrawable(android.content.Context);
+ method public void draw(android.graphics.Canvas);
+ method public float getArrowHeadLength();
+ method public float getArrowShaftLength();
+ method public float getBarLength();
+ method public float getBarThickness();
+ method public int getColor();
+ method public int getDirection();
+ method public float getGapSize();
+ method public int getOpacity();
+ method public final android.graphics.Paint getPaint();
+ method public float getProgress();
+ method public boolean isSpinEnabled();
+ method public void setAlpha(int);
+ method public void setArrowHeadLength(float);
+ method public void setArrowShaftLength(float);
+ method public void setBarLength(float);
+ method public void setBarThickness(float);
+ method public void setColor(int);
+ method public void setColorFilter(android.graphics.ColorFilter);
+ method public void setDirection(int);
+ method public void setGapSize(float);
+ method public void setProgress(float);
+ method public void setSpinEnabled(boolean);
+ method public void setVerticalMirror(boolean);
+ field public static final int ARROW_DIRECTION_END = 3; // 0x3
+ field public static final int ARROW_DIRECTION_LEFT = 0; // 0x0
+ field public static final int ARROW_DIRECTION_RIGHT = 1; // 0x1
+ field public static final int ARROW_DIRECTION_START = 2; // 0x2
+ }
+
+}
+
+package android.support.v7.view {
+
+ public abstract class ActionMode {
+ ctor public ActionMode();
+ method public abstract void finish();
+ method public abstract android.view.View getCustomView();
+ method public abstract android.view.Menu getMenu();
+ method public abstract android.view.MenuInflater getMenuInflater();
+ method public abstract java.lang.CharSequence getSubtitle();
+ method public java.lang.Object getTag();
+ method public abstract java.lang.CharSequence getTitle();
+ method public boolean getTitleOptionalHint();
+ method public abstract void invalidate();
+ method public boolean isTitleOptional();
+ method public abstract void setCustomView(android.view.View);
+ method public abstract void setSubtitle(java.lang.CharSequence);
+ method public abstract void setSubtitle(int);
+ method public void setTag(java.lang.Object);
+ method public abstract void setTitle(java.lang.CharSequence);
+ method public abstract void setTitle(int);
+ method public void setTitleOptionalHint(boolean);
+ }
+
+ public static abstract interface ActionMode.Callback {
+ method public abstract boolean onActionItemClicked(android.support.v7.view.ActionMode, android.view.MenuItem);
+ method public abstract boolean onCreateActionMode(android.support.v7.view.ActionMode, android.view.Menu);
+ method public abstract void onDestroyActionMode(android.support.v7.view.ActionMode);
+ method public abstract boolean onPrepareActionMode(android.support.v7.view.ActionMode, android.view.Menu);
+ }
+
+ public abstract interface CollapsibleActionView {
+ method public abstract void onActionViewCollapsed();
+ method public abstract void onActionViewExpanded();
+ }
+
+}
+
+package android.support.v7.widget {
+
+ public class ActionMenuView extends android.support.v7.widget.LinearLayoutCompat {
+ ctor public ActionMenuView(android.content.Context);
+ ctor public ActionMenuView(android.content.Context, android.util.AttributeSet);
+ method public void dismissPopupMenus();
+ method protected android.support.v7.widget.ActionMenuView.LayoutParams generateDefaultLayoutParams();
+ method public android.support.v7.widget.ActionMenuView.LayoutParams generateLayoutParams(android.util.AttributeSet);
+ method protected android.support.v7.widget.ActionMenuView.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
+ method public android.view.Menu getMenu();
+ method public android.graphics.drawable.Drawable getOverflowIcon();
+ method public int getPopupTheme();
+ method public boolean hideOverflowMenu();
+ method public boolean isOverflowMenuShowing();
+ method public void onConfigurationChanged(android.content.res.Configuration);
+ method public void onDetachedFromWindow();
+ method public void setOnMenuItemClickListener(android.support.v7.widget.ActionMenuView.OnMenuItemClickListener);
+ method public void setOverflowIcon(android.graphics.drawable.Drawable);
+ method public void setPopupTheme(int);
+ method public boolean showOverflowMenu();
+ }
+
+ public static class ActionMenuView.LayoutParams extends android.support.v7.widget.LinearLayoutCompat.LayoutParams {
+ ctor public ActionMenuView.LayoutParams(android.content.Context, android.util.AttributeSet);
+ ctor public ActionMenuView.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public ActionMenuView.LayoutParams(android.support.v7.widget.ActionMenuView.LayoutParams);
+ ctor public ActionMenuView.LayoutParams(int, int);
+ field public int cellsUsed;
+ field public boolean expandable;
+ field public int extraPixels;
+ field public boolean isOverflowButton;
+ field public boolean preventEdgeOffset;
+ }
+
+ public static abstract interface ActionMenuView.OnMenuItemClickListener {
+ method public abstract boolean onMenuItemClick(android.view.MenuItem);
+ }
+
+ public class AppCompatAutoCompleteTextView extends android.widget.AutoCompleteTextView {
+ ctor public AppCompatAutoCompleteTextView(android.content.Context);
+ ctor public AppCompatAutoCompleteTextView(android.content.Context, android.util.AttributeSet);
+ ctor public AppCompatAutoCompleteTextView(android.content.Context, android.util.AttributeSet, int);
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+ method public void setTextAppearance(android.content.Context, int);
+ }
+
+ public class AppCompatButton extends android.widget.Button {
+ ctor public AppCompatButton(android.content.Context);
+ ctor public AppCompatButton(android.content.Context, android.util.AttributeSet);
+ ctor public AppCompatButton(android.content.Context, android.util.AttributeSet, int);
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+ method public void setSupportAllCaps(boolean);
+ method public void setTextAppearance(android.content.Context, int);
+ }
+
+ public class AppCompatCheckBox extends android.widget.CheckBox {
+ ctor public AppCompatCheckBox(android.content.Context);
+ ctor public AppCompatCheckBox(android.content.Context, android.util.AttributeSet);
+ ctor public AppCompatCheckBox(android.content.Context, android.util.AttributeSet, int);
+ }
+
+ public class AppCompatCheckedTextView extends android.widget.CheckedTextView {
+ ctor public AppCompatCheckedTextView(android.content.Context);
+ ctor public AppCompatCheckedTextView(android.content.Context, android.util.AttributeSet);
+ ctor public AppCompatCheckedTextView(android.content.Context, android.util.AttributeSet, int);
+ method public void setTextAppearance(android.content.Context, int);
+ }
+
+ public class AppCompatEditText extends android.widget.EditText {
+ ctor public AppCompatEditText(android.content.Context);
+ ctor public AppCompatEditText(android.content.Context, android.util.AttributeSet);
+ ctor public AppCompatEditText(android.content.Context, android.util.AttributeSet, int);
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+ method public void setTextAppearance(android.content.Context, int);
+ }
+
+ public class AppCompatImageButton extends android.widget.ImageButton {
+ ctor public AppCompatImageButton(android.content.Context);
+ ctor public AppCompatImageButton(android.content.Context, android.util.AttributeSet);
+ ctor public AppCompatImageButton(android.content.Context, android.util.AttributeSet, int);
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+ }
+
+ public class AppCompatImageView extends android.widget.ImageView {
+ ctor public AppCompatImageView(android.content.Context);
+ ctor public AppCompatImageView(android.content.Context, android.util.AttributeSet);
+ ctor public AppCompatImageView(android.content.Context, android.util.AttributeSet, int);
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+ }
+
+ public class AppCompatMultiAutoCompleteTextView extends android.widget.MultiAutoCompleteTextView {
+ ctor public AppCompatMultiAutoCompleteTextView(android.content.Context);
+ ctor public AppCompatMultiAutoCompleteTextView(android.content.Context, android.util.AttributeSet);
+ ctor public AppCompatMultiAutoCompleteTextView(android.content.Context, android.util.AttributeSet, int);
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+ method public void setTextAppearance(android.content.Context, int);
+ }
+
+ public class AppCompatRadioButton extends android.widget.RadioButton {
+ ctor public AppCompatRadioButton(android.content.Context);
+ ctor public AppCompatRadioButton(android.content.Context, android.util.AttributeSet);
+ ctor public AppCompatRadioButton(android.content.Context, android.util.AttributeSet, int);
+ }
+
+ public class AppCompatRatingBar extends android.widget.RatingBar {
+ ctor public AppCompatRatingBar(android.content.Context);
+ ctor public AppCompatRatingBar(android.content.Context, android.util.AttributeSet);
+ ctor public AppCompatRatingBar(android.content.Context, android.util.AttributeSet, int);
+ }
+
+ public class AppCompatSeekBar extends android.widget.SeekBar {
+ ctor public AppCompatSeekBar(android.content.Context);
+ ctor public AppCompatSeekBar(android.content.Context, android.util.AttributeSet);
+ ctor public AppCompatSeekBar(android.content.Context, android.util.AttributeSet, int);
+ }
+
+ public class AppCompatSpinner extends android.widget.Spinner {
+ ctor public AppCompatSpinner(android.content.Context);
+ ctor public AppCompatSpinner(android.content.Context, int);
+ ctor public AppCompatSpinner(android.content.Context, android.util.AttributeSet);
+ ctor public AppCompatSpinner(android.content.Context, android.util.AttributeSet, int);
+ ctor public AppCompatSpinner(android.content.Context, android.util.AttributeSet, int, int);
+ ctor public AppCompatSpinner(android.content.Context, android.util.AttributeSet, int, int, android.content.res.Resources.Theme);
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+ }
+
+ public class AppCompatTextView extends android.widget.TextView {
+ ctor public AppCompatTextView(android.content.Context);
+ ctor public AppCompatTextView(android.content.Context, android.util.AttributeSet);
+ ctor public AppCompatTextView(android.content.Context, android.util.AttributeSet, int);
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+ method public void setTextAppearance(android.content.Context, int);
+ }
+
+ public class LinearLayoutCompat extends android.view.ViewGroup {
+ ctor public LinearLayoutCompat(android.content.Context);
+ ctor public LinearLayoutCompat(android.content.Context, android.util.AttributeSet);
+ ctor public LinearLayoutCompat(android.content.Context, android.util.AttributeSet, int);
+ method protected android.support.v7.widget.LinearLayoutCompat.LayoutParams generateDefaultLayoutParams();
+ method public android.support.v7.widget.LinearLayoutCompat.LayoutParams generateLayoutParams(android.util.AttributeSet);
+ method protected android.support.v7.widget.LinearLayoutCompat.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
+ method public int getBaselineAlignedChildIndex();
+ method public android.graphics.drawable.Drawable getDividerDrawable();
+ method public int getDividerPadding();
+ method public int getGravity();
+ method public int getOrientation();
+ method public int getShowDividers();
+ method public float getWeightSum();
+ method public boolean isBaselineAligned();
+ method public boolean isMeasureWithLargestChildEnabled();
+ method protected void onLayout(boolean, int, int, int, int);
+ method public void setBaselineAligned(boolean);
+ method public void setBaselineAlignedChildIndex(int);
+ method public void setDividerDrawable(android.graphics.drawable.Drawable);
+ method public void setDividerPadding(int);
+ method public void setGravity(int);
+ method public void setHorizontalGravity(int);
+ method public void setMeasureWithLargestChildEnabled(boolean);
+ method public void setOrientation(int);
+ method public void setShowDividers(int);
+ method public void setVerticalGravity(int);
+ method public void setWeightSum(float);
+ field public static final int HORIZONTAL = 0; // 0x0
+ field public static final int SHOW_DIVIDER_BEGINNING = 1; // 0x1
+ field public static final int SHOW_DIVIDER_END = 4; // 0x4
+ field public static final int SHOW_DIVIDER_MIDDLE = 2; // 0x2
+ field public static final int SHOW_DIVIDER_NONE = 0; // 0x0
+ field public static final int VERTICAL = 1; // 0x1
+ }
+
+ public static class LinearLayoutCompat.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+ ctor public LinearLayoutCompat.LayoutParams(android.content.Context, android.util.AttributeSet);
+ ctor public LinearLayoutCompat.LayoutParams(int, int);
+ ctor public LinearLayoutCompat.LayoutParams(int, int, float);
+ ctor public LinearLayoutCompat.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public LinearLayoutCompat.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ ctor public LinearLayoutCompat.LayoutParams(android.support.v7.widget.LinearLayoutCompat.LayoutParams);
+ field public int gravity;
+ field public float weight;
+ }
+
+ public class ListPopupWindow {
+ ctor public ListPopupWindow(android.content.Context);
+ ctor public ListPopupWindow(android.content.Context, android.util.AttributeSet);
+ ctor public ListPopupWindow(android.content.Context, android.util.AttributeSet, int);
+ ctor public ListPopupWindow(android.content.Context, android.util.AttributeSet, int, int);
+ method public void clearListSelection();
+ method public android.view.View.OnTouchListener createDragToOpenListener(android.view.View);
+ method public void dismiss();
+ method public android.view.View getAnchorView();
+ method public int getAnimationStyle();
+ method public android.graphics.drawable.Drawable getBackground();
+ method public int getHeight();
+ method public int getHorizontalOffset();
+ method public int getInputMethodMode();
+ method public android.widget.ListView getListView();
+ method public int getPromptPosition();
+ method public java.lang.Object getSelectedItem();
+ method public long getSelectedItemId();
+ method public int getSelectedItemPosition();
+ method public android.view.View getSelectedView();
+ method public int getSoftInputMode();
+ method public int getVerticalOffset();
+ method public int getWidth();
+ method public boolean isInputMethodNotNeeded();
+ method public boolean isModal();
+ method public boolean isShowing();
+ method public boolean onKeyDown(int, android.view.KeyEvent);
+ method public boolean onKeyPreIme(int, android.view.KeyEvent);
+ method public boolean onKeyUp(int, android.view.KeyEvent);
+ method public boolean performItemClick(int);
+ method public void postShow();
+ method public void setAdapter(android.widget.ListAdapter);
+ method public void setAnchorView(android.view.View);
+ method public void setAnimationStyle(int);
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+ method public void setContentWidth(int);
+ method public void setDropDownGravity(int);
+ method public void setHeight(int);
+ method public void setHorizontalOffset(int);
+ method public void setInputMethodMode(int);
+ method public void setListSelector(android.graphics.drawable.Drawable);
+ method public void setModal(boolean);
+ method public void setOnDismissListener(android.widget.PopupWindow.OnDismissListener);
+ method public void setOnItemClickListener(android.widget.AdapterView.OnItemClickListener);
+ method public void setOnItemSelectedListener(android.widget.AdapterView.OnItemSelectedListener);
+ method public void setPromptPosition(int);
+ method public void setPromptView(android.view.View);
+ method public void setSelection(int);
+ method public void setSoftInputMode(int);
+ method public void setVerticalOffset(int);
+ method public void setWidth(int);
+ method public void setWindowLayoutType(int);
+ method public void show();
+ field public static final int INPUT_METHOD_FROM_FOCUSABLE = 0; // 0x0
+ field public static final int INPUT_METHOD_NEEDED = 1; // 0x1
+ field public static final int INPUT_METHOD_NOT_NEEDED = 2; // 0x2
+ field public static final int MATCH_PARENT = -1; // 0xffffffff
+ field public static final int POSITION_PROMPT_ABOVE = 0; // 0x0
+ field public static final int POSITION_PROMPT_BELOW = 1; // 0x1
+ field public static final int WRAP_CONTENT = -2; // 0xfffffffe
+ }
+
+ public class PopupMenu {
+ ctor public PopupMenu(android.content.Context, android.view.View);
+ ctor public PopupMenu(android.content.Context, android.view.View, int);
+ ctor public PopupMenu(android.content.Context, android.view.View, int, int, int);
+ method public void dismiss();
+ method public android.view.View.OnTouchListener getDragToOpenListener();
+ method public int getGravity();
+ method public android.view.Menu getMenu();
+ method public android.view.MenuInflater getMenuInflater();
+ method public void inflate(int);
+ method public void setGravity(int);
+ method public void setOnDismissListener(android.support.v7.widget.PopupMenu.OnDismissListener);
+ method public void setOnMenuItemClickListener(android.support.v7.widget.PopupMenu.OnMenuItemClickListener);
+ method public void show();
+ }
+
+ public static abstract interface PopupMenu.OnDismissListener {
+ method public abstract void onDismiss(android.support.v7.widget.PopupMenu);
+ }
+
+ public static abstract interface PopupMenu.OnMenuItemClickListener {
+ method public abstract boolean onMenuItemClick(android.view.MenuItem);
+ }
+
+ public class SearchView extends android.support.v7.widget.LinearLayoutCompat implements android.support.v7.view.CollapsibleActionView {
+ ctor public SearchView(android.content.Context);
+ ctor public SearchView(android.content.Context, android.util.AttributeSet);
+ ctor public SearchView(android.content.Context, android.util.AttributeSet, int);
+ method public int getImeOptions();
+ method public int getInputType();
+ method public int getMaxWidth();
+ method public java.lang.CharSequence getQuery();
+ method public java.lang.CharSequence getQueryHint();
+ method public android.support.v4.widget.CursorAdapter getSuggestionsAdapter();
+ method public boolean isIconfiedByDefault();
+ method public boolean isIconified();
+ method public boolean isQueryRefinementEnabled();
+ method public boolean isSubmitButtonEnabled();
+ method public void onActionViewCollapsed();
+ method public void onActionViewExpanded();
+ method public void setIconified(boolean);
+ method public void setIconifiedByDefault(boolean);
+ method public void setImeOptions(int);
+ method public void setInputType(int);
+ method public void setMaxWidth(int);
+ method public void setOnCloseListener(android.support.v7.widget.SearchView.OnCloseListener);
+ method public void setOnQueryTextFocusChangeListener(android.view.View.OnFocusChangeListener);
+ method public void setOnQueryTextListener(android.support.v7.widget.SearchView.OnQueryTextListener);
+ method public void setOnSearchClickListener(android.view.View.OnClickListener);
+ method public void setOnSuggestionListener(android.support.v7.widget.SearchView.OnSuggestionListener);
+ method public void setQuery(java.lang.CharSequence, boolean);
+ method public void setQueryHint(java.lang.CharSequence);
+ method public void setQueryRefinementEnabled(boolean);
+ method public void setSearchableInfo(android.app.SearchableInfo);
+ method public void setSubmitButtonEnabled(boolean);
+ method public void setSuggestionsAdapter(android.support.v4.widget.CursorAdapter);
+ }
+
+ public static abstract interface SearchView.OnCloseListener {
+ method public abstract boolean onClose();
+ }
+
+ public static abstract interface SearchView.OnQueryTextListener {
+ method public abstract boolean onQueryTextChange(java.lang.String);
+ method public abstract boolean onQueryTextSubmit(java.lang.String);
+ }
+
+ public static abstract interface SearchView.OnSuggestionListener {
+ method public abstract boolean onSuggestionClick(int);
+ method public abstract boolean onSuggestionSelect(int);
+ }
+
+ public class ShareActionProvider extends android.support.v4.view.ActionProvider {
+ ctor public ShareActionProvider(android.content.Context);
+ method public android.view.View onCreateActionView();
+ method public void setOnShareTargetSelectedListener(android.support.v7.widget.ShareActionProvider.OnShareTargetSelectedListener);
+ method public void setShareHistoryFileName(java.lang.String);
+ method public void setShareIntent(android.content.Intent);
+ field public static final java.lang.String DEFAULT_SHARE_HISTORY_FILE_NAME = "share_history.xml";
+ }
+
+ public static abstract interface ShareActionProvider.OnShareTargetSelectedListener {
+ method public abstract boolean onShareTargetSelected(android.support.v7.widget.ShareActionProvider, android.content.Intent);
+ }
+
+ public class SwitchCompat extends android.widget.CompoundButton {
+ ctor public SwitchCompat(android.content.Context);
+ ctor public SwitchCompat(android.content.Context, android.util.AttributeSet);
+ ctor public SwitchCompat(android.content.Context, android.util.AttributeSet, int);
+ method public boolean getShowText();
+ method public boolean getSplitTrack();
+ method public int getSwitchMinWidth();
+ method public int getSwitchPadding();
+ method public java.lang.CharSequence getTextOff();
+ method public java.lang.CharSequence getTextOn();
+ method public android.graphics.drawable.Drawable getThumbDrawable();
+ method public int getThumbTextPadding();
+ method public android.content.res.ColorStateList getThumbTintList();
+ method public android.graphics.PorterDuff.Mode getThumbTintMode();
+ method public android.graphics.drawable.Drawable getTrackDrawable();
+ method public android.content.res.ColorStateList getTrackTintList();
+ method public android.graphics.PorterDuff.Mode getTrackTintMode();
+ method public void onMeasure(int, int);
+ method public void setShowText(boolean);
+ method public void setSplitTrack(boolean);
+ method public void setSwitchMinWidth(int);
+ method public void setSwitchPadding(int);
+ method public void setSwitchTextAppearance(android.content.Context, int);
+ method public void setSwitchTypeface(android.graphics.Typeface, int);
+ method public void setSwitchTypeface(android.graphics.Typeface);
+ method public void setTextOff(java.lang.CharSequence);
+ method public void setTextOn(java.lang.CharSequence);
+ method public void setThumbDrawable(android.graphics.drawable.Drawable);
+ method public void setThumbResource(int);
+ method public void setThumbTextPadding(int);
+ method public void setThumbTintList(android.content.res.ColorStateList);
+ method public void setThumbTintMode(android.graphics.PorterDuff.Mode);
+ method public void setTrackDrawable(android.graphics.drawable.Drawable);
+ method public void setTrackResource(int);
+ method public void setTrackTintList(android.content.res.ColorStateList);
+ method public void setTrackTintMode(android.graphics.PorterDuff.Mode);
+ }
+
+ public abstract interface ThemedSpinnerAdapter implements android.widget.SpinnerAdapter {
+ method public abstract android.content.res.Resources.Theme getDropDownViewTheme();
+ method public abstract void setDropDownViewTheme(android.content.res.Resources.Theme);
+ }
+
+ public static final class ThemedSpinnerAdapter.Helper {
+ ctor public ThemedSpinnerAdapter.Helper(android.content.Context);
+ method public android.view.LayoutInflater getDropDownViewInflater();
+ method public android.content.res.Resources.Theme getDropDownViewTheme();
+ method public void setDropDownViewTheme(android.content.res.Resources.Theme);
+ }
+
+ public class Toolbar extends android.view.ViewGroup {
+ ctor public Toolbar(android.content.Context);
+ ctor public Toolbar(android.content.Context, android.util.AttributeSet);
+ ctor public Toolbar(android.content.Context, android.util.AttributeSet, int);
+ method public void collapseActionView();
+ method public void dismissPopupMenus();
+ method protected android.support.v7.widget.Toolbar.LayoutParams generateDefaultLayoutParams();
+ method public android.support.v7.widget.Toolbar.LayoutParams generateLayoutParams(android.util.AttributeSet);
+ method protected android.support.v7.widget.Toolbar.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
+ method public int getContentInsetEnd();
+ method public int getContentInsetEndWithActions();
+ method public int getContentInsetLeft();
+ method public int getContentInsetRight();
+ method public int getContentInsetStart();
+ method public int getContentInsetStartWithNavigation();
+ method public int getCurrentContentInsetEnd();
+ method public int getCurrentContentInsetLeft();
+ method public int getCurrentContentInsetRight();
+ method public int getCurrentContentInsetStart();
+ method public android.graphics.drawable.Drawable getLogo();
+ method public java.lang.CharSequence getLogoDescription();
+ method public android.view.Menu getMenu();
+ method public java.lang.CharSequence getNavigationContentDescription();
+ method public android.graphics.drawable.Drawable getNavigationIcon();
+ method public android.graphics.drawable.Drawable getOverflowIcon();
+ method public int getPopupTheme();
+ method public java.lang.CharSequence getSubtitle();
+ method public java.lang.CharSequence getTitle();
+ method public int getTitleMarginBottom();
+ method public int getTitleMarginEnd();
+ method public int getTitleMarginStart();
+ method public int getTitleMarginTop();
+ method public boolean hasExpandedActionView();
+ method public boolean hideOverflowMenu();
+ method public void inflateMenu(int);
+ method public boolean isOverflowMenuShowing();
+ method protected void onLayout(boolean, int, int, int, int);
+ method public void setContentInsetEndWithActions(int);
+ method public void setContentInsetStartWithNavigation(int);
+ method public void setContentInsetsAbsolute(int, int);
+ method public void setContentInsetsRelative(int, int);
+ method public void setLogo(int);
+ method public void setLogo(android.graphics.drawable.Drawable);
+ method public void setLogoDescription(int);
+ method public void setLogoDescription(java.lang.CharSequence);
+ method public void setNavigationContentDescription(int);
+ method public void setNavigationContentDescription(java.lang.CharSequence);
+ method public void setNavigationIcon(int);
+ method public void setNavigationIcon(android.graphics.drawable.Drawable);
+ method public void setNavigationOnClickListener(android.view.View.OnClickListener);
+ method public void setOnMenuItemClickListener(android.support.v7.widget.Toolbar.OnMenuItemClickListener);
+ method public void setOverflowIcon(android.graphics.drawable.Drawable);
+ method public void setPopupTheme(int);
+ method public void setSubtitle(int);
+ method public void setSubtitle(java.lang.CharSequence);
+ method public void setSubtitleTextAppearance(android.content.Context, int);
+ method public void setSubtitleTextColor(int);
+ method public void setTitle(int);
+ method public void setTitle(java.lang.CharSequence);
+ method public void setTitleMargin(int, int, int, int);
+ method public void setTitleMarginBottom(int);
+ method public void setTitleMarginEnd(int);
+ method public void setTitleMarginStart(int);
+ method public void setTitleMarginTop(int);
+ method public void setTitleTextAppearance(android.content.Context, int);
+ method public void setTitleTextColor(int);
+ method public boolean showOverflowMenu();
+ }
+
+ public static class Toolbar.LayoutParams extends android.support.v7.app.ActionBar.LayoutParams {
+ ctor public Toolbar.LayoutParams(android.content.Context, android.util.AttributeSet);
+ ctor public Toolbar.LayoutParams(int, int);
+ ctor public Toolbar.LayoutParams(int, int, int);
+ ctor public Toolbar.LayoutParams(int);
+ ctor public Toolbar.LayoutParams(android.support.v7.widget.Toolbar.LayoutParams);
+ ctor public Toolbar.LayoutParams(android.support.v7.app.ActionBar.LayoutParams);
+ ctor public Toolbar.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ ctor public Toolbar.LayoutParams(android.view.ViewGroup.LayoutParams);
+ }
+
+ public static abstract interface Toolbar.OnMenuItemClickListener {
+ method public abstract boolean onMenuItemClick(android.view.MenuItem);
+ }
+
+ public static class Toolbar.SavedState extends android.support.v4.view.AbsSavedState {
+ ctor public Toolbar.SavedState(android.os.Parcel);
+ ctor public Toolbar.SavedState(android.os.Parcel, java.lang.ClassLoader);
+ ctor public Toolbar.SavedState(android.os.Parcelable);
+ field public static final android.os.Parcelable.Creator<android.support.v7.widget.Toolbar.SavedState> CREATOR;
+ }
+
+ public class TooltipCompat {
+ method public static void setTooltipText(android.view.View, java.lang.CharSequence);
+ }
+
+}
+
diff --git a/v7/appcompat/api/27.0.0.txt b/v7/appcompat/api/27.0.0.txt
new file mode 100644
index 0000000..93d0186
--- /dev/null
+++ b/v7/appcompat/api/27.0.0.txt
@@ -0,0 +1,864 @@
+package android.support.v7.app {
+
+ public abstract class ActionBar {
+ ctor public ActionBar();
+ method public abstract void addOnMenuVisibilityListener(android.support.v7.app.ActionBar.OnMenuVisibilityListener);
+ method public abstract deprecated void addTab(android.support.v7.app.ActionBar.Tab);
+ method public abstract deprecated void addTab(android.support.v7.app.ActionBar.Tab, boolean);
+ method public abstract deprecated void addTab(android.support.v7.app.ActionBar.Tab, int);
+ method public abstract deprecated void addTab(android.support.v7.app.ActionBar.Tab, int, boolean);
+ method public abstract android.view.View getCustomView();
+ method public abstract int getDisplayOptions();
+ method public float getElevation();
+ method public abstract int getHeight();
+ method public int getHideOffset();
+ method public abstract deprecated int getNavigationItemCount();
+ method public abstract deprecated int getNavigationMode();
+ method public abstract deprecated int getSelectedNavigationIndex();
+ method public abstract deprecated android.support.v7.app.ActionBar.Tab getSelectedTab();
+ method public abstract java.lang.CharSequence getSubtitle();
+ method public abstract deprecated android.support.v7.app.ActionBar.Tab getTabAt(int);
+ method public abstract deprecated int getTabCount();
+ method public android.content.Context getThemedContext();
+ method public abstract java.lang.CharSequence getTitle();
+ method public abstract void hide();
+ method public boolean isHideOnContentScrollEnabled();
+ method public abstract boolean isShowing();
+ method public abstract deprecated android.support.v7.app.ActionBar.Tab newTab();
+ method public abstract deprecated void removeAllTabs();
+ method public abstract void removeOnMenuVisibilityListener(android.support.v7.app.ActionBar.OnMenuVisibilityListener);
+ method public abstract deprecated void removeTab(android.support.v7.app.ActionBar.Tab);
+ method public abstract deprecated void removeTabAt(int);
+ method public abstract deprecated void selectTab(android.support.v7.app.ActionBar.Tab);
+ method public abstract void setBackgroundDrawable(android.graphics.drawable.Drawable);
+ method public abstract void setCustomView(android.view.View);
+ method public abstract void setCustomView(android.view.View, android.support.v7.app.ActionBar.LayoutParams);
+ method public abstract void setCustomView(int);
+ method public abstract void setDisplayHomeAsUpEnabled(boolean);
+ method public abstract void setDisplayOptions(int);
+ method public abstract void setDisplayOptions(int, int);
+ method public abstract void setDisplayShowCustomEnabled(boolean);
+ method public abstract void setDisplayShowHomeEnabled(boolean);
+ method public abstract void setDisplayShowTitleEnabled(boolean);
+ method public abstract void setDisplayUseLogoEnabled(boolean);
+ method public void setElevation(float);
+ method public void setHideOffset(int);
+ method public void setHideOnContentScrollEnabled(boolean);
+ method public void setHomeActionContentDescription(java.lang.CharSequence);
+ method public void setHomeActionContentDescription(int);
+ method public void setHomeAsUpIndicator(android.graphics.drawable.Drawable);
+ method public void setHomeAsUpIndicator(int);
+ method public void setHomeButtonEnabled(boolean);
+ method public abstract void setIcon(int);
+ method public abstract void setIcon(android.graphics.drawable.Drawable);
+ method public abstract deprecated void setListNavigationCallbacks(android.widget.SpinnerAdapter, android.support.v7.app.ActionBar.OnNavigationListener);
+ method public abstract void setLogo(int);
+ method public abstract void setLogo(android.graphics.drawable.Drawable);
+ method public abstract deprecated void setNavigationMode(int);
+ method public abstract deprecated void setSelectedNavigationItem(int);
+ method public void setSplitBackgroundDrawable(android.graphics.drawable.Drawable);
+ method public void setStackedBackgroundDrawable(android.graphics.drawable.Drawable);
+ method public abstract void setSubtitle(java.lang.CharSequence);
+ method public abstract void setSubtitle(int);
+ method public abstract void setTitle(java.lang.CharSequence);
+ method public abstract void setTitle(int);
+ method public abstract void show();
+ field public static final int DISPLAY_HOME_AS_UP = 4; // 0x4
+ field public static final int DISPLAY_SHOW_CUSTOM = 16; // 0x10
+ field public static final int DISPLAY_SHOW_HOME = 2; // 0x2
+ field public static final int DISPLAY_SHOW_TITLE = 8; // 0x8
+ field public static final int DISPLAY_USE_LOGO = 1; // 0x1
+ field public static final deprecated int NAVIGATION_MODE_LIST = 1; // 0x1
+ field public static final deprecated int NAVIGATION_MODE_STANDARD = 0; // 0x0
+ field public static final deprecated int NAVIGATION_MODE_TABS = 2; // 0x2
+ }
+
+ public static class ActionBar.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+ ctor public ActionBar.LayoutParams(android.content.Context, android.util.AttributeSet);
+ ctor public ActionBar.LayoutParams(int, int);
+ ctor public ActionBar.LayoutParams(int, int, int);
+ ctor public ActionBar.LayoutParams(int);
+ ctor public ActionBar.LayoutParams(android.support.v7.app.ActionBar.LayoutParams);
+ ctor public ActionBar.LayoutParams(android.view.ViewGroup.LayoutParams);
+ field public int gravity;
+ }
+
+ public static abstract interface ActionBar.OnMenuVisibilityListener {
+ method public abstract void onMenuVisibilityChanged(boolean);
+ }
+
+ public static abstract deprecated interface ActionBar.OnNavigationListener {
+ method public abstract boolean onNavigationItemSelected(int, long);
+ }
+
+ public static abstract deprecated class ActionBar.Tab {
+ ctor public ActionBar.Tab();
+ method public abstract java.lang.CharSequence getContentDescription();
+ method public abstract android.view.View getCustomView();
+ method public abstract android.graphics.drawable.Drawable getIcon();
+ method public abstract int getPosition();
+ method public abstract java.lang.Object getTag();
+ method public abstract java.lang.CharSequence getText();
+ method public abstract void select();
+ method public abstract android.support.v7.app.ActionBar.Tab setContentDescription(int);
+ method public abstract android.support.v7.app.ActionBar.Tab setContentDescription(java.lang.CharSequence);
+ method public abstract android.support.v7.app.ActionBar.Tab setCustomView(android.view.View);
+ method public abstract android.support.v7.app.ActionBar.Tab setCustomView(int);
+ method public abstract android.support.v7.app.ActionBar.Tab setIcon(android.graphics.drawable.Drawable);
+ method public abstract android.support.v7.app.ActionBar.Tab setIcon(int);
+ method public abstract android.support.v7.app.ActionBar.Tab setTabListener(android.support.v7.app.ActionBar.TabListener);
+ method public abstract android.support.v7.app.ActionBar.Tab setTag(java.lang.Object);
+ method public abstract android.support.v7.app.ActionBar.Tab setText(java.lang.CharSequence);
+ method public abstract android.support.v7.app.ActionBar.Tab setText(int);
+ field public static final int INVALID_POSITION = -1; // 0xffffffff
+ }
+
+ public static abstract deprecated interface ActionBar.TabListener {
+ method public abstract void onTabReselected(android.support.v7.app.ActionBar.Tab, android.support.v4.app.FragmentTransaction);
+ method public abstract void onTabSelected(android.support.v7.app.ActionBar.Tab, android.support.v4.app.FragmentTransaction);
+ method public abstract void onTabUnselected(android.support.v7.app.ActionBar.Tab, android.support.v4.app.FragmentTransaction);
+ }
+
+ public class ActionBarDrawerToggle implements android.support.v4.widget.DrawerLayout.DrawerListener {
+ ctor public ActionBarDrawerToggle(android.app.Activity, android.support.v4.widget.DrawerLayout, int, int);
+ ctor public ActionBarDrawerToggle(android.app.Activity, android.support.v4.widget.DrawerLayout, android.support.v7.widget.Toolbar, int, int);
+ method public android.support.v7.graphics.drawable.DrawerArrowDrawable getDrawerArrowDrawable();
+ method public android.view.View.OnClickListener getToolbarNavigationClickListener();
+ method public boolean isDrawerIndicatorEnabled();
+ method public boolean isDrawerSlideAnimationEnabled();
+ method public void onConfigurationChanged(android.content.res.Configuration);
+ method public void onDrawerClosed(android.view.View);
+ method public void onDrawerOpened(android.view.View);
+ method public void onDrawerSlide(android.view.View, float);
+ method public void onDrawerStateChanged(int);
+ method public boolean onOptionsItemSelected(android.view.MenuItem);
+ method public void setDrawerArrowDrawable(android.support.v7.graphics.drawable.DrawerArrowDrawable);
+ method public void setDrawerIndicatorEnabled(boolean);
+ method public void setDrawerSlideAnimationEnabled(boolean);
+ method public void setHomeAsUpIndicator(android.graphics.drawable.Drawable);
+ method public void setHomeAsUpIndicator(int);
+ method public void setToolbarNavigationClickListener(android.view.View.OnClickListener);
+ method public void syncState();
+ }
+
+ public static abstract interface ActionBarDrawerToggle.Delegate {
+ method public abstract android.content.Context getActionBarThemedContext();
+ method public abstract android.graphics.drawable.Drawable getThemeUpIndicator();
+ method public abstract boolean isNavigationVisible();
+ method public abstract void setActionBarDescription(int);
+ method public abstract void setActionBarUpIndicator(android.graphics.drawable.Drawable, int);
+ }
+
+ public static abstract interface ActionBarDrawerToggle.DelegateProvider {
+ method public abstract android.support.v7.app.ActionBarDrawerToggle.Delegate getDrawerToggleDelegate();
+ }
+
+ public class AlertDialog extends android.support.v7.app.AppCompatDialog implements android.content.DialogInterface {
+ ctor protected AlertDialog(android.content.Context);
+ ctor protected AlertDialog(android.content.Context, int);
+ ctor protected AlertDialog(android.content.Context, boolean, android.content.DialogInterface.OnCancelListener);
+ method public android.widget.Button getButton(int);
+ method public android.widget.ListView getListView();
+ method public void setButton(int, java.lang.CharSequence, android.os.Message);
+ method public void setButton(int, java.lang.CharSequence, android.content.DialogInterface.OnClickListener);
+ method public void setCustomTitle(android.view.View);
+ method public void setIcon(int);
+ method public void setIcon(android.graphics.drawable.Drawable);
+ method public void setIconAttribute(int);
+ method public void setMessage(java.lang.CharSequence);
+ method public void setView(android.view.View);
+ method public void setView(android.view.View, int, int, int, int);
+ }
+
+ public static class AlertDialog.Builder {
+ ctor public AlertDialog.Builder(android.content.Context);
+ ctor public AlertDialog.Builder(android.content.Context, int);
+ method public android.support.v7.app.AlertDialog create();
+ method public android.content.Context getContext();
+ method public android.support.v7.app.AlertDialog.Builder setAdapter(android.widget.ListAdapter, android.content.DialogInterface.OnClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setCancelable(boolean);
+ method public android.support.v7.app.AlertDialog.Builder setCursor(android.database.Cursor, android.content.DialogInterface.OnClickListener, java.lang.String);
+ method public android.support.v7.app.AlertDialog.Builder setCustomTitle(android.view.View);
+ method public android.support.v7.app.AlertDialog.Builder setIcon(int);
+ method public android.support.v7.app.AlertDialog.Builder setIcon(android.graphics.drawable.Drawable);
+ method public android.support.v7.app.AlertDialog.Builder setIconAttribute(int);
+ method public deprecated android.support.v7.app.AlertDialog.Builder setInverseBackgroundForced(boolean);
+ method public android.support.v7.app.AlertDialog.Builder setItems(int, android.content.DialogInterface.OnClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setItems(java.lang.CharSequence[], android.content.DialogInterface.OnClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setMessage(int);
+ method public android.support.v7.app.AlertDialog.Builder setMessage(java.lang.CharSequence);
+ method public android.support.v7.app.AlertDialog.Builder setMultiChoiceItems(int, boolean[], android.content.DialogInterface.OnMultiChoiceClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setMultiChoiceItems(java.lang.CharSequence[], boolean[], android.content.DialogInterface.OnMultiChoiceClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setMultiChoiceItems(android.database.Cursor, java.lang.String, java.lang.String, android.content.DialogInterface.OnMultiChoiceClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setNegativeButton(int, android.content.DialogInterface.OnClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setNegativeButton(java.lang.CharSequence, android.content.DialogInterface.OnClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setNeutralButton(int, android.content.DialogInterface.OnClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setNeutralButton(java.lang.CharSequence, android.content.DialogInterface.OnClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setOnCancelListener(android.content.DialogInterface.OnCancelListener);
+ method public android.support.v7.app.AlertDialog.Builder setOnDismissListener(android.content.DialogInterface.OnDismissListener);
+ method public android.support.v7.app.AlertDialog.Builder setOnItemSelectedListener(android.widget.AdapterView.OnItemSelectedListener);
+ method public android.support.v7.app.AlertDialog.Builder setOnKeyListener(android.content.DialogInterface.OnKeyListener);
+ method public android.support.v7.app.AlertDialog.Builder setPositiveButton(int, android.content.DialogInterface.OnClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setPositiveButton(java.lang.CharSequence, android.content.DialogInterface.OnClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setSingleChoiceItems(int, int, android.content.DialogInterface.OnClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setSingleChoiceItems(android.database.Cursor, int, java.lang.String, android.content.DialogInterface.OnClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setSingleChoiceItems(java.lang.CharSequence[], int, android.content.DialogInterface.OnClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setSingleChoiceItems(android.widget.ListAdapter, int, android.content.DialogInterface.OnClickListener);
+ method public android.support.v7.app.AlertDialog.Builder setTitle(int);
+ method public android.support.v7.app.AlertDialog.Builder setTitle(java.lang.CharSequence);
+ method public android.support.v7.app.AlertDialog.Builder setView(int);
+ method public android.support.v7.app.AlertDialog.Builder setView(android.view.View);
+ method public android.support.v7.app.AlertDialog show();
+ }
+
+ public class AppCompatActivity extends android.support.v4.app.FragmentActivity implements android.support.v7.app.ActionBarDrawerToggle.DelegateProvider android.support.v7.app.AppCompatCallback {
+ ctor public AppCompatActivity();
+ method public android.support.v7.app.AppCompatDelegate getDelegate();
+ method public android.support.v7.app.ActionBarDrawerToggle.Delegate getDrawerToggleDelegate();
+ method public android.support.v7.app.ActionBar getSupportActionBar();
+ method public android.content.Intent getSupportParentActivityIntent();
+ method public void onCreateSupportNavigateUpTaskStack(android.support.v4.app.TaskStackBuilder);
+ method public final boolean onMenuItemSelected(int, android.view.MenuItem);
+ method public void onPrepareSupportNavigateUpTaskStack(android.support.v4.app.TaskStackBuilder);
+ method public void onSupportActionModeFinished(android.support.v7.view.ActionMode);
+ method public void onSupportActionModeStarted(android.support.v7.view.ActionMode);
+ method public deprecated void onSupportContentChanged();
+ method public boolean onSupportNavigateUp();
+ method public android.support.v7.view.ActionMode onWindowStartingSupportActionMode(android.support.v7.view.ActionMode.Callback);
+ method public void setSupportActionBar(android.support.v7.widget.Toolbar);
+ method public deprecated void setSupportProgress(int);
+ method public deprecated void setSupportProgressBarIndeterminate(boolean);
+ method public deprecated void setSupportProgressBarIndeterminateVisibility(boolean);
+ method public deprecated void setSupportProgressBarVisibility(boolean);
+ method public android.support.v7.view.ActionMode startSupportActionMode(android.support.v7.view.ActionMode.Callback);
+ method public void supportInvalidateOptionsMenu();
+ method public void supportNavigateUpTo(android.content.Intent);
+ method public boolean supportRequestWindowFeature(int);
+ method public boolean supportShouldUpRecreateTask(android.content.Intent);
+ }
+
+ public abstract interface AppCompatCallback {
+ method public abstract void onSupportActionModeFinished(android.support.v7.view.ActionMode);
+ method public abstract void onSupportActionModeStarted(android.support.v7.view.ActionMode);
+ method public abstract android.support.v7.view.ActionMode onWindowStartingSupportActionMode(android.support.v7.view.ActionMode.Callback);
+ }
+
+ public abstract class AppCompatDelegate {
+ method public abstract void addContentView(android.view.View, android.view.ViewGroup.LayoutParams);
+ method public abstract boolean applyDayNight();
+ method public static android.support.v7.app.AppCompatDelegate create(android.app.Activity, android.support.v7.app.AppCompatCallback);
+ method public static android.support.v7.app.AppCompatDelegate create(android.app.Dialog, android.support.v7.app.AppCompatCallback);
+ method public abstract android.view.View createView(android.view.View, java.lang.String, android.content.Context, android.util.AttributeSet);
+ method public abstract <T extends android.view.View> T findViewById(int);
+ method public static int getDefaultNightMode();
+ method public abstract android.support.v7.app.ActionBarDrawerToggle.Delegate getDrawerToggleDelegate();
+ method public abstract android.view.MenuInflater getMenuInflater();
+ method public abstract android.support.v7.app.ActionBar getSupportActionBar();
+ method public abstract boolean hasWindowFeature(int);
+ method public abstract void installViewFactory();
+ method public abstract void invalidateOptionsMenu();
+ method public static boolean isCompatVectorFromResourcesEnabled();
+ method public abstract boolean isHandleNativeActionModesEnabled();
+ method public abstract void onConfigurationChanged(android.content.res.Configuration);
+ method public abstract void onCreate(android.os.Bundle);
+ method public abstract void onDestroy();
+ method public abstract void onPostCreate(android.os.Bundle);
+ method public abstract void onPostResume();
+ method public abstract void onSaveInstanceState(android.os.Bundle);
+ method public abstract void onStart();
+ method public abstract void onStop();
+ method public abstract boolean requestWindowFeature(int);
+ method public static void setCompatVectorFromResourcesEnabled(boolean);
+ method public abstract void setContentView(android.view.View);
+ method public abstract void setContentView(int);
+ method public abstract void setContentView(android.view.View, android.view.ViewGroup.LayoutParams);
+ method public static void setDefaultNightMode(int);
+ method public abstract void setHandleNativeActionModesEnabled(boolean);
+ method public abstract void setLocalNightMode(int);
+ method public abstract void setSupportActionBar(android.support.v7.widget.Toolbar);
+ method public abstract void setTitle(java.lang.CharSequence);
+ method public abstract android.support.v7.view.ActionMode startSupportActionMode(android.support.v7.view.ActionMode.Callback);
+ field public static final int FEATURE_ACTION_MODE_OVERLAY = 10; // 0xa
+ field public static final int FEATURE_SUPPORT_ACTION_BAR = 108; // 0x6c
+ field public static final int FEATURE_SUPPORT_ACTION_BAR_OVERLAY = 109; // 0x6d
+ field public static final int MODE_NIGHT_AUTO = 0; // 0x0
+ field public static final int MODE_NIGHT_FOLLOW_SYSTEM = -1; // 0xffffffff
+ field public static final int MODE_NIGHT_NO = 1; // 0x1
+ field public static final int MODE_NIGHT_YES = 2; // 0x2
+ }
+
+ public class AppCompatDialog extends android.app.Dialog implements android.support.v7.app.AppCompatCallback {
+ ctor public AppCompatDialog(android.content.Context);
+ ctor public AppCompatDialog(android.content.Context, int);
+ ctor protected AppCompatDialog(android.content.Context, boolean, android.content.DialogInterface.OnCancelListener);
+ method public android.support.v7.app.AppCompatDelegate getDelegate();
+ method public android.support.v7.app.ActionBar getSupportActionBar();
+ method public void onSupportActionModeFinished(android.support.v7.view.ActionMode);
+ method public void onSupportActionModeStarted(android.support.v7.view.ActionMode);
+ method public android.support.v7.view.ActionMode onWindowStartingSupportActionMode(android.support.v7.view.ActionMode.Callback);
+ method public boolean supportRequestWindowFeature(int);
+ }
+
+ public class AppCompatDialogFragment extends android.support.v4.app.DialogFragment {
+ ctor public AppCompatDialogFragment();
+ }
+
+}
+
+package android.support.v7.content.res {
+
+ public final class AppCompatResources {
+ method public static android.content.res.ColorStateList getColorStateList(android.content.Context, int);
+ method public static android.graphics.drawable.Drawable getDrawable(android.content.Context, int);
+ }
+
+}
+
+package android.support.v7.graphics.drawable {
+
+ public class DrawerArrowDrawable extends android.graphics.drawable.Drawable {
+ ctor public DrawerArrowDrawable(android.content.Context);
+ method public void draw(android.graphics.Canvas);
+ method public float getArrowHeadLength();
+ method public float getArrowShaftLength();
+ method public float getBarLength();
+ method public float getBarThickness();
+ method public int getColor();
+ method public int getDirection();
+ method public float getGapSize();
+ method public int getOpacity();
+ method public final android.graphics.Paint getPaint();
+ method public float getProgress();
+ method public boolean isSpinEnabled();
+ method public void setAlpha(int);
+ method public void setArrowHeadLength(float);
+ method public void setArrowShaftLength(float);
+ method public void setBarLength(float);
+ method public void setBarThickness(float);
+ method public void setColor(int);
+ method public void setColorFilter(android.graphics.ColorFilter);
+ method public void setDirection(int);
+ method public void setGapSize(float);
+ method public void setProgress(float);
+ method public void setSpinEnabled(boolean);
+ method public void setVerticalMirror(boolean);
+ field public static final int ARROW_DIRECTION_END = 3; // 0x3
+ field public static final int ARROW_DIRECTION_LEFT = 0; // 0x0
+ field public static final int ARROW_DIRECTION_RIGHT = 1; // 0x1
+ field public static final int ARROW_DIRECTION_START = 2; // 0x2
+ }
+
+}
+
+package android.support.v7.view {
+
+ public abstract class ActionMode {
+ ctor public ActionMode();
+ method public abstract void finish();
+ method public abstract android.view.View getCustomView();
+ method public abstract android.view.Menu getMenu();
+ method public abstract android.view.MenuInflater getMenuInflater();
+ method public abstract java.lang.CharSequence getSubtitle();
+ method public java.lang.Object getTag();
+ method public abstract java.lang.CharSequence getTitle();
+ method public boolean getTitleOptionalHint();
+ method public abstract void invalidate();
+ method public boolean isTitleOptional();
+ method public abstract void setCustomView(android.view.View);
+ method public abstract void setSubtitle(java.lang.CharSequence);
+ method public abstract void setSubtitle(int);
+ method public void setTag(java.lang.Object);
+ method public abstract void setTitle(java.lang.CharSequence);
+ method public abstract void setTitle(int);
+ method public void setTitleOptionalHint(boolean);
+ }
+
+ public static abstract interface ActionMode.Callback {
+ method public abstract boolean onActionItemClicked(android.support.v7.view.ActionMode, android.view.MenuItem);
+ method public abstract boolean onCreateActionMode(android.support.v7.view.ActionMode, android.view.Menu);
+ method public abstract void onDestroyActionMode(android.support.v7.view.ActionMode);
+ method public abstract boolean onPrepareActionMode(android.support.v7.view.ActionMode, android.view.Menu);
+ }
+
+ public abstract interface CollapsibleActionView {
+ method public abstract void onActionViewCollapsed();
+ method public abstract void onActionViewExpanded();
+ }
+
+}
+
+package android.support.v7.widget {
+
+ public class ActionMenuView extends android.support.v7.widget.LinearLayoutCompat {
+ ctor public ActionMenuView(android.content.Context);
+ ctor public ActionMenuView(android.content.Context, android.util.AttributeSet);
+ method public void dismissPopupMenus();
+ method protected android.support.v7.widget.ActionMenuView.LayoutParams generateDefaultLayoutParams();
+ method public android.support.v7.widget.ActionMenuView.LayoutParams generateLayoutParams(android.util.AttributeSet);
+ method protected android.support.v7.widget.ActionMenuView.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
+ method public android.view.Menu getMenu();
+ method public android.graphics.drawable.Drawable getOverflowIcon();
+ method public int getPopupTheme();
+ method public boolean hideOverflowMenu();
+ method public boolean isOverflowMenuShowing();
+ method public void onConfigurationChanged(android.content.res.Configuration);
+ method public void onDetachedFromWindow();
+ method public void setOnMenuItemClickListener(android.support.v7.widget.ActionMenuView.OnMenuItemClickListener);
+ method public void setOverflowIcon(android.graphics.drawable.Drawable);
+ method public void setPopupTheme(int);
+ method public boolean showOverflowMenu();
+ }
+
+ public static class ActionMenuView.LayoutParams extends android.support.v7.widget.LinearLayoutCompat.LayoutParams {
+ ctor public ActionMenuView.LayoutParams(android.content.Context, android.util.AttributeSet);
+ ctor public ActionMenuView.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public ActionMenuView.LayoutParams(android.support.v7.widget.ActionMenuView.LayoutParams);
+ ctor public ActionMenuView.LayoutParams(int, int);
+ field public int cellsUsed;
+ field public boolean expandable;
+ field public int extraPixels;
+ field public boolean isOverflowButton;
+ field public boolean preventEdgeOffset;
+ }
+
+ public static abstract interface ActionMenuView.OnMenuItemClickListener {
+ method public abstract boolean onMenuItemClick(android.view.MenuItem);
+ }
+
+ public class AppCompatAutoCompleteTextView extends android.widget.AutoCompleteTextView {
+ ctor public AppCompatAutoCompleteTextView(android.content.Context);
+ ctor public AppCompatAutoCompleteTextView(android.content.Context, android.util.AttributeSet);
+ ctor public AppCompatAutoCompleteTextView(android.content.Context, android.util.AttributeSet, int);
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+ method public void setTextAppearance(android.content.Context, int);
+ }
+
+ public class AppCompatButton extends android.widget.Button {
+ ctor public AppCompatButton(android.content.Context);
+ ctor public AppCompatButton(android.content.Context, android.util.AttributeSet);
+ ctor public AppCompatButton(android.content.Context, android.util.AttributeSet, int);
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+ method public void setSupportAllCaps(boolean);
+ method public void setTextAppearance(android.content.Context, int);
+ }
+
+ public class AppCompatCheckBox extends android.widget.CheckBox {
+ ctor public AppCompatCheckBox(android.content.Context);
+ ctor public AppCompatCheckBox(android.content.Context, android.util.AttributeSet);
+ ctor public AppCompatCheckBox(android.content.Context, android.util.AttributeSet, int);
+ }
+
+ public class AppCompatCheckedTextView extends android.widget.CheckedTextView {
+ ctor public AppCompatCheckedTextView(android.content.Context);
+ ctor public AppCompatCheckedTextView(android.content.Context, android.util.AttributeSet);
+ ctor public AppCompatCheckedTextView(android.content.Context, android.util.AttributeSet, int);
+ method public void setTextAppearance(android.content.Context, int);
+ }
+
+ public class AppCompatEditText extends android.widget.EditText {
+ ctor public AppCompatEditText(android.content.Context);
+ ctor public AppCompatEditText(android.content.Context, android.util.AttributeSet);
+ ctor public AppCompatEditText(android.content.Context, android.util.AttributeSet, int);
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+ method public void setTextAppearance(android.content.Context, int);
+ }
+
+ public class AppCompatImageButton extends android.widget.ImageButton {
+ ctor public AppCompatImageButton(android.content.Context);
+ ctor public AppCompatImageButton(android.content.Context, android.util.AttributeSet);
+ ctor public AppCompatImageButton(android.content.Context, android.util.AttributeSet, int);
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+ }
+
+ public class AppCompatImageView extends android.widget.ImageView {
+ ctor public AppCompatImageView(android.content.Context);
+ ctor public AppCompatImageView(android.content.Context, android.util.AttributeSet);
+ ctor public AppCompatImageView(android.content.Context, android.util.AttributeSet, int);
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+ }
+
+ public class AppCompatMultiAutoCompleteTextView extends android.widget.MultiAutoCompleteTextView {
+ ctor public AppCompatMultiAutoCompleteTextView(android.content.Context);
+ ctor public AppCompatMultiAutoCompleteTextView(android.content.Context, android.util.AttributeSet);
+ ctor public AppCompatMultiAutoCompleteTextView(android.content.Context, android.util.AttributeSet, int);
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+ method public void setTextAppearance(android.content.Context, int);
+ }
+
+ public class AppCompatRadioButton extends android.widget.RadioButton {
+ ctor public AppCompatRadioButton(android.content.Context);
+ ctor public AppCompatRadioButton(android.content.Context, android.util.AttributeSet);
+ ctor public AppCompatRadioButton(android.content.Context, android.util.AttributeSet, int);
+ }
+
+ public class AppCompatRatingBar extends android.widget.RatingBar {
+ ctor public AppCompatRatingBar(android.content.Context);
+ ctor public AppCompatRatingBar(android.content.Context, android.util.AttributeSet);
+ ctor public AppCompatRatingBar(android.content.Context, android.util.AttributeSet, int);
+ }
+
+ public class AppCompatSeekBar extends android.widget.SeekBar {
+ ctor public AppCompatSeekBar(android.content.Context);
+ ctor public AppCompatSeekBar(android.content.Context, android.util.AttributeSet);
+ ctor public AppCompatSeekBar(android.content.Context, android.util.AttributeSet, int);
+ }
+
+ public class AppCompatSpinner extends android.widget.Spinner {
+ ctor public AppCompatSpinner(android.content.Context);
+ ctor public AppCompatSpinner(android.content.Context, int);
+ ctor public AppCompatSpinner(android.content.Context, android.util.AttributeSet);
+ ctor public AppCompatSpinner(android.content.Context, android.util.AttributeSet, int);
+ ctor public AppCompatSpinner(android.content.Context, android.util.AttributeSet, int, int);
+ ctor public AppCompatSpinner(android.content.Context, android.util.AttributeSet, int, int, android.content.res.Resources.Theme);
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+ }
+
+ public class AppCompatTextView extends android.widget.TextView {
+ ctor public AppCompatTextView(android.content.Context);
+ ctor public AppCompatTextView(android.content.Context, android.util.AttributeSet);
+ ctor public AppCompatTextView(android.content.Context, android.util.AttributeSet, int);
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+ method public void setTextAppearance(android.content.Context, int);
+ }
+
+ public class LinearLayoutCompat extends android.view.ViewGroup {
+ ctor public LinearLayoutCompat(android.content.Context);
+ ctor public LinearLayoutCompat(android.content.Context, android.util.AttributeSet);
+ ctor public LinearLayoutCompat(android.content.Context, android.util.AttributeSet, int);
+ method protected android.support.v7.widget.LinearLayoutCompat.LayoutParams generateDefaultLayoutParams();
+ method public android.support.v7.widget.LinearLayoutCompat.LayoutParams generateLayoutParams(android.util.AttributeSet);
+ method protected android.support.v7.widget.LinearLayoutCompat.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
+ method public int getBaselineAlignedChildIndex();
+ method public android.graphics.drawable.Drawable getDividerDrawable();
+ method public int getDividerPadding();
+ method public int getGravity();
+ method public int getOrientation();
+ method public int getShowDividers();
+ method public float getWeightSum();
+ method public boolean isBaselineAligned();
+ method public boolean isMeasureWithLargestChildEnabled();
+ method protected void onLayout(boolean, int, int, int, int);
+ method public void setBaselineAligned(boolean);
+ method public void setBaselineAlignedChildIndex(int);
+ method public void setDividerDrawable(android.graphics.drawable.Drawable);
+ method public void setDividerPadding(int);
+ method public void setGravity(int);
+ method public void setHorizontalGravity(int);
+ method public void setMeasureWithLargestChildEnabled(boolean);
+ method public void setOrientation(int);
+ method public void setShowDividers(int);
+ method public void setVerticalGravity(int);
+ method public void setWeightSum(float);
+ field public static final int HORIZONTAL = 0; // 0x0
+ field public static final int SHOW_DIVIDER_BEGINNING = 1; // 0x1
+ field public static final int SHOW_DIVIDER_END = 4; // 0x4
+ field public static final int SHOW_DIVIDER_MIDDLE = 2; // 0x2
+ field public static final int SHOW_DIVIDER_NONE = 0; // 0x0
+ field public static final int VERTICAL = 1; // 0x1
+ }
+
+ public static class LinearLayoutCompat.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+ ctor public LinearLayoutCompat.LayoutParams(android.content.Context, android.util.AttributeSet);
+ ctor public LinearLayoutCompat.LayoutParams(int, int);
+ ctor public LinearLayoutCompat.LayoutParams(int, int, float);
+ ctor public LinearLayoutCompat.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public LinearLayoutCompat.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ ctor public LinearLayoutCompat.LayoutParams(android.support.v7.widget.LinearLayoutCompat.LayoutParams);
+ field public int gravity;
+ field public float weight;
+ }
+
+ public class ListPopupWindow {
+ ctor public ListPopupWindow(android.content.Context);
+ ctor public ListPopupWindow(android.content.Context, android.util.AttributeSet);
+ ctor public ListPopupWindow(android.content.Context, android.util.AttributeSet, int);
+ ctor public ListPopupWindow(android.content.Context, android.util.AttributeSet, int, int);
+ method public void clearListSelection();
+ method public android.view.View.OnTouchListener createDragToOpenListener(android.view.View);
+ method public void dismiss();
+ method public android.view.View getAnchorView();
+ method public int getAnimationStyle();
+ method public android.graphics.drawable.Drawable getBackground();
+ method public int getHeight();
+ method public int getHorizontalOffset();
+ method public int getInputMethodMode();
+ method public android.widget.ListView getListView();
+ method public int getPromptPosition();
+ method public java.lang.Object getSelectedItem();
+ method public long getSelectedItemId();
+ method public int getSelectedItemPosition();
+ method public android.view.View getSelectedView();
+ method public int getSoftInputMode();
+ method public int getVerticalOffset();
+ method public int getWidth();
+ method public boolean isInputMethodNotNeeded();
+ method public boolean isModal();
+ method public boolean isShowing();
+ method public boolean onKeyDown(int, android.view.KeyEvent);
+ method public boolean onKeyPreIme(int, android.view.KeyEvent);
+ method public boolean onKeyUp(int, android.view.KeyEvent);
+ method public boolean performItemClick(int);
+ method public void postShow();
+ method public void setAdapter(android.widget.ListAdapter);
+ method public void setAnchorView(android.view.View);
+ method public void setAnimationStyle(int);
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+ method public void setContentWidth(int);
+ method public void setDropDownGravity(int);
+ method public void setHeight(int);
+ method public void setHorizontalOffset(int);
+ method public void setInputMethodMode(int);
+ method public void setListSelector(android.graphics.drawable.Drawable);
+ method public void setModal(boolean);
+ method public void setOnDismissListener(android.widget.PopupWindow.OnDismissListener);
+ method public void setOnItemClickListener(android.widget.AdapterView.OnItemClickListener);
+ method public void setOnItemSelectedListener(android.widget.AdapterView.OnItemSelectedListener);
+ method public void setPromptPosition(int);
+ method public void setPromptView(android.view.View);
+ method public void setSelection(int);
+ method public void setSoftInputMode(int);
+ method public void setVerticalOffset(int);
+ method public void setWidth(int);
+ method public void setWindowLayoutType(int);
+ method public void show();
+ field public static final int INPUT_METHOD_FROM_FOCUSABLE = 0; // 0x0
+ field public static final int INPUT_METHOD_NEEDED = 1; // 0x1
+ field public static final int INPUT_METHOD_NOT_NEEDED = 2; // 0x2
+ field public static final int MATCH_PARENT = -1; // 0xffffffff
+ field public static final int POSITION_PROMPT_ABOVE = 0; // 0x0
+ field public static final int POSITION_PROMPT_BELOW = 1; // 0x1
+ field public static final int WRAP_CONTENT = -2; // 0xfffffffe
+ }
+
+ public class PopupMenu {
+ ctor public PopupMenu(android.content.Context, android.view.View);
+ ctor public PopupMenu(android.content.Context, android.view.View, int);
+ ctor public PopupMenu(android.content.Context, android.view.View, int, int, int);
+ method public void dismiss();
+ method public android.view.View.OnTouchListener getDragToOpenListener();
+ method public int getGravity();
+ method public android.view.Menu getMenu();
+ method public android.view.MenuInflater getMenuInflater();
+ method public void inflate(int);
+ method public void setGravity(int);
+ method public void setOnDismissListener(android.support.v7.widget.PopupMenu.OnDismissListener);
+ method public void setOnMenuItemClickListener(android.support.v7.widget.PopupMenu.OnMenuItemClickListener);
+ method public void show();
+ }
+
+ public static abstract interface PopupMenu.OnDismissListener {
+ method public abstract void onDismiss(android.support.v7.widget.PopupMenu);
+ }
+
+ public static abstract interface PopupMenu.OnMenuItemClickListener {
+ method public abstract boolean onMenuItemClick(android.view.MenuItem);
+ }
+
+ public class SearchView extends android.support.v7.widget.LinearLayoutCompat implements android.support.v7.view.CollapsibleActionView {
+ ctor public SearchView(android.content.Context);
+ ctor public SearchView(android.content.Context, android.util.AttributeSet);
+ ctor public SearchView(android.content.Context, android.util.AttributeSet, int);
+ method public int getImeOptions();
+ method public int getInputType();
+ method public int getMaxWidth();
+ method public java.lang.CharSequence getQuery();
+ method public java.lang.CharSequence getQueryHint();
+ method public android.support.v4.widget.CursorAdapter getSuggestionsAdapter();
+ method public boolean isIconfiedByDefault();
+ method public boolean isIconified();
+ method public boolean isQueryRefinementEnabled();
+ method public boolean isSubmitButtonEnabled();
+ method public void onActionViewCollapsed();
+ method public void onActionViewExpanded();
+ method public void setIconified(boolean);
+ method public void setIconifiedByDefault(boolean);
+ method public void setImeOptions(int);
+ method public void setInputType(int);
+ method public void setMaxWidth(int);
+ method public void setOnCloseListener(android.support.v7.widget.SearchView.OnCloseListener);
+ method public void setOnQueryTextFocusChangeListener(android.view.View.OnFocusChangeListener);
+ method public void setOnQueryTextListener(android.support.v7.widget.SearchView.OnQueryTextListener);
+ method public void setOnSearchClickListener(android.view.View.OnClickListener);
+ method public void setOnSuggestionListener(android.support.v7.widget.SearchView.OnSuggestionListener);
+ method public void setQuery(java.lang.CharSequence, boolean);
+ method public void setQueryHint(java.lang.CharSequence);
+ method public void setQueryRefinementEnabled(boolean);
+ method public void setSearchableInfo(android.app.SearchableInfo);
+ method public void setSubmitButtonEnabled(boolean);
+ method public void setSuggestionsAdapter(android.support.v4.widget.CursorAdapter);
+ }
+
+ public static abstract interface SearchView.OnCloseListener {
+ method public abstract boolean onClose();
+ }
+
+ public static abstract interface SearchView.OnQueryTextListener {
+ method public abstract boolean onQueryTextChange(java.lang.String);
+ method public abstract boolean onQueryTextSubmit(java.lang.String);
+ }
+
+ public static abstract interface SearchView.OnSuggestionListener {
+ method public abstract boolean onSuggestionClick(int);
+ method public abstract boolean onSuggestionSelect(int);
+ }
+
+ public class ShareActionProvider extends android.support.v4.view.ActionProvider {
+ ctor public ShareActionProvider(android.content.Context);
+ method public android.view.View onCreateActionView();
+ method public void setOnShareTargetSelectedListener(android.support.v7.widget.ShareActionProvider.OnShareTargetSelectedListener);
+ method public void setShareHistoryFileName(java.lang.String);
+ method public void setShareIntent(android.content.Intent);
+ field public static final java.lang.String DEFAULT_SHARE_HISTORY_FILE_NAME = "share_history.xml";
+ }
+
+ public static abstract interface ShareActionProvider.OnShareTargetSelectedListener {
+ method public abstract boolean onShareTargetSelected(android.support.v7.widget.ShareActionProvider, android.content.Intent);
+ }
+
+ public class SwitchCompat extends android.widget.CompoundButton {
+ ctor public SwitchCompat(android.content.Context);
+ ctor public SwitchCompat(android.content.Context, android.util.AttributeSet);
+ ctor public SwitchCompat(android.content.Context, android.util.AttributeSet, int);
+ method public boolean getShowText();
+ method public boolean getSplitTrack();
+ method public int getSwitchMinWidth();
+ method public int getSwitchPadding();
+ method public java.lang.CharSequence getTextOff();
+ method public java.lang.CharSequence getTextOn();
+ method public android.graphics.drawable.Drawable getThumbDrawable();
+ method public int getThumbTextPadding();
+ method public android.content.res.ColorStateList getThumbTintList();
+ method public android.graphics.PorterDuff.Mode getThumbTintMode();
+ method public android.graphics.drawable.Drawable getTrackDrawable();
+ method public android.content.res.ColorStateList getTrackTintList();
+ method public android.graphics.PorterDuff.Mode getTrackTintMode();
+ method public void onMeasure(int, int);
+ method public void setShowText(boolean);
+ method public void setSplitTrack(boolean);
+ method public void setSwitchMinWidth(int);
+ method public void setSwitchPadding(int);
+ method public void setSwitchTextAppearance(android.content.Context, int);
+ method public void setSwitchTypeface(android.graphics.Typeface, int);
+ method public void setSwitchTypeface(android.graphics.Typeface);
+ method public void setTextOff(java.lang.CharSequence);
+ method public void setTextOn(java.lang.CharSequence);
+ method public void setThumbDrawable(android.graphics.drawable.Drawable);
+ method public void setThumbResource(int);
+ method public void setThumbTextPadding(int);
+ method public void setThumbTintList(android.content.res.ColorStateList);
+ method public void setThumbTintMode(android.graphics.PorterDuff.Mode);
+ method public void setTrackDrawable(android.graphics.drawable.Drawable);
+ method public void setTrackResource(int);
+ method public void setTrackTintList(android.content.res.ColorStateList);
+ method public void setTrackTintMode(android.graphics.PorterDuff.Mode);
+ }
+
+ public abstract interface ThemedSpinnerAdapter implements android.widget.SpinnerAdapter {
+ method public abstract android.content.res.Resources.Theme getDropDownViewTheme();
+ method public abstract void setDropDownViewTheme(android.content.res.Resources.Theme);
+ }
+
+ public static final class ThemedSpinnerAdapter.Helper {
+ ctor public ThemedSpinnerAdapter.Helper(android.content.Context);
+ method public android.view.LayoutInflater getDropDownViewInflater();
+ method public android.content.res.Resources.Theme getDropDownViewTheme();
+ method public void setDropDownViewTheme(android.content.res.Resources.Theme);
+ }
+
+ public class Toolbar extends android.view.ViewGroup {
+ ctor public Toolbar(android.content.Context);
+ ctor public Toolbar(android.content.Context, android.util.AttributeSet);
+ ctor public Toolbar(android.content.Context, android.util.AttributeSet, int);
+ method public void collapseActionView();
+ method public void dismissPopupMenus();
+ method protected android.support.v7.widget.Toolbar.LayoutParams generateDefaultLayoutParams();
+ method public android.support.v7.widget.Toolbar.LayoutParams generateLayoutParams(android.util.AttributeSet);
+ method protected android.support.v7.widget.Toolbar.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
+ method public int getContentInsetEnd();
+ method public int getContentInsetEndWithActions();
+ method public int getContentInsetLeft();
+ method public int getContentInsetRight();
+ method public int getContentInsetStart();
+ method public int getContentInsetStartWithNavigation();
+ method public int getCurrentContentInsetEnd();
+ method public int getCurrentContentInsetLeft();
+ method public int getCurrentContentInsetRight();
+ method public int getCurrentContentInsetStart();
+ method public android.graphics.drawable.Drawable getLogo();
+ method public java.lang.CharSequence getLogoDescription();
+ method public android.view.Menu getMenu();
+ method public java.lang.CharSequence getNavigationContentDescription();
+ method public android.graphics.drawable.Drawable getNavigationIcon();
+ method public android.graphics.drawable.Drawable getOverflowIcon();
+ method public int getPopupTheme();
+ method public java.lang.CharSequence getSubtitle();
+ method public java.lang.CharSequence getTitle();
+ method public int getTitleMarginBottom();
+ method public int getTitleMarginEnd();
+ method public int getTitleMarginStart();
+ method public int getTitleMarginTop();
+ method public boolean hasExpandedActionView();
+ method public boolean hideOverflowMenu();
+ method public void inflateMenu(int);
+ method public boolean isOverflowMenuShowing();
+ method protected void onLayout(boolean, int, int, int, int);
+ method public void setContentInsetEndWithActions(int);
+ method public void setContentInsetStartWithNavigation(int);
+ method public void setContentInsetsAbsolute(int, int);
+ method public void setContentInsetsRelative(int, int);
+ method public void setLogo(int);
+ method public void setLogo(android.graphics.drawable.Drawable);
+ method public void setLogoDescription(int);
+ method public void setLogoDescription(java.lang.CharSequence);
+ method public void setNavigationContentDescription(int);
+ method public void setNavigationContentDescription(java.lang.CharSequence);
+ method public void setNavigationIcon(int);
+ method public void setNavigationIcon(android.graphics.drawable.Drawable);
+ method public void setNavigationOnClickListener(android.view.View.OnClickListener);
+ method public void setOnMenuItemClickListener(android.support.v7.widget.Toolbar.OnMenuItemClickListener);
+ method public void setOverflowIcon(android.graphics.drawable.Drawable);
+ method public void setPopupTheme(int);
+ method public void setSubtitle(int);
+ method public void setSubtitle(java.lang.CharSequence);
+ method public void setSubtitleTextAppearance(android.content.Context, int);
+ method public void setSubtitleTextColor(int);
+ method public void setTitle(int);
+ method public void setTitle(java.lang.CharSequence);
+ method public void setTitleMargin(int, int, int, int);
+ method public void setTitleMarginBottom(int);
+ method public void setTitleMarginEnd(int);
+ method public void setTitleMarginStart(int);
+ method public void setTitleMarginTop(int);
+ method public void setTitleTextAppearance(android.content.Context, int);
+ method public void setTitleTextColor(int);
+ method public boolean showOverflowMenu();
+ }
+
+ public static class Toolbar.LayoutParams extends android.support.v7.app.ActionBar.LayoutParams {
+ ctor public Toolbar.LayoutParams(android.content.Context, android.util.AttributeSet);
+ ctor public Toolbar.LayoutParams(int, int);
+ ctor public Toolbar.LayoutParams(int, int, int);
+ ctor public Toolbar.LayoutParams(int);
+ ctor public Toolbar.LayoutParams(android.support.v7.widget.Toolbar.LayoutParams);
+ ctor public Toolbar.LayoutParams(android.support.v7.app.ActionBar.LayoutParams);
+ ctor public Toolbar.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ ctor public Toolbar.LayoutParams(android.view.ViewGroup.LayoutParams);
+ }
+
+ public static abstract interface Toolbar.OnMenuItemClickListener {
+ method public abstract boolean onMenuItemClick(android.view.MenuItem);
+ }
+
+ public static class Toolbar.SavedState extends android.support.v4.view.AbsSavedState {
+ ctor public Toolbar.SavedState(android.os.Parcel);
+ ctor public Toolbar.SavedState(android.os.Parcel, java.lang.ClassLoader);
+ ctor public Toolbar.SavedState(android.os.Parcelable);
+ field public static final android.os.Parcelable.Creator<android.support.v7.widget.Toolbar.SavedState> CREATOR;
+ }
+
+ public class TooltipCompat {
+ method public static void setTooltipText(android.view.View, java.lang.CharSequence);
+ }
+
+}
+
diff --git a/v7/appcompat/build.gradle b/v7/appcompat/build.gradle
index a0e5290..2d57ac4 100644
--- a/v7/appcompat/build.gradle
+++ b/v7/appcompat/build.gradle
@@ -22,10 +22,7 @@
}
sourceSets {
- main.java.srcDir 'src'
main.res.srcDirs 'res', 'res-public'
- main.assets.srcDir 'assets'
- main.resources.srcDir 'src'
}
aaptOptions {
diff --git a/v7/appcompat/res/color-v21/abc_btn_colored_borderless_text_material.xml b/v7/appcompat/res/color-v21/abc_btn_colored_borderless_text_material.xml
new file mode 100644
index 0000000..f5585e3
--- /dev/null
+++ b/v7/appcompat/res/color-v21/abc_btn_colored_borderless_text_material.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2017 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<!-- Used for the text of a borderless colored button. -->
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_enabled="false"
+ android:color="?android:attr/textColorSecondary"/>
+ <item android:color="?attr/colorAccent"/>
+</selector>
\ No newline at end of file
diff --git a/v7/appcompat/res/values-vi/strings.xml b/v7/appcompat/res/values-vi/strings.xml
index 4560b4b..9587bed 100644
--- a/v7/appcompat/res/values-vi/strings.xml
+++ b/v7/appcompat/res/values-vi/strings.xml
@@ -19,7 +19,7 @@
<string name="abc_action_mode_done" msgid="4076576682505996667">"Xong"</string>
<string name="abc_action_bar_home_description" msgid="4600421777120114993">"Điều hướng về trang chủ"</string>
<string name="abc_action_bar_up_description" msgid="1594238315039666878">"Điều hướng lên trên"</string>
- <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"Tùy chọn khác"</string>
+ <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"Thêm tùy chọn"</string>
<string name="abc_toolbar_collapse_description" msgid="1603543279005712093">"Thu gọn"</string>
<string name="abc_searchview_description_search" msgid="8264924765203268293">"Tìm kiếm"</string>
<string name="abc_search_hint" msgid="7723749260725869598">"Tìm kiếm…"</string>
diff --git a/v7/appcompat/src/android/support/v7/app/ActionBar.java b/v7/appcompat/src/main/java/android/support/v7/app/ActionBar.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/app/ActionBar.java
rename to v7/appcompat/src/main/java/android/support/v7/app/ActionBar.java
diff --git a/v7/appcompat/src/android/support/v7/app/ActionBarDrawerToggle.java b/v7/appcompat/src/main/java/android/support/v7/app/ActionBarDrawerToggle.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/app/ActionBarDrawerToggle.java
rename to v7/appcompat/src/main/java/android/support/v7/app/ActionBarDrawerToggle.java
diff --git a/v7/appcompat/src/android/support/v7/app/ActionBarDrawerToggleHoneycomb.java b/v7/appcompat/src/main/java/android/support/v7/app/ActionBarDrawerToggleHoneycomb.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/app/ActionBarDrawerToggleHoneycomb.java
rename to v7/appcompat/src/main/java/android/support/v7/app/ActionBarDrawerToggleHoneycomb.java
diff --git a/v7/appcompat/src/android/support/v7/app/AlertController.java b/v7/appcompat/src/main/java/android/support/v7/app/AlertController.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/app/AlertController.java
rename to v7/appcompat/src/main/java/android/support/v7/app/AlertController.java
diff --git a/v7/appcompat/src/android/support/v7/app/AlertDialog.java b/v7/appcompat/src/main/java/android/support/v7/app/AlertDialog.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/app/AlertDialog.java
rename to v7/appcompat/src/main/java/android/support/v7/app/AlertDialog.java
diff --git a/v7/appcompat/src/android/support/v7/app/AppCompatActivity.java b/v7/appcompat/src/main/java/android/support/v7/app/AppCompatActivity.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/app/AppCompatActivity.java
rename to v7/appcompat/src/main/java/android/support/v7/app/AppCompatActivity.java
diff --git a/v7/appcompat/src/android/support/v7/app/AppCompatCallback.java b/v7/appcompat/src/main/java/android/support/v7/app/AppCompatCallback.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/app/AppCompatCallback.java
rename to v7/appcompat/src/main/java/android/support/v7/app/AppCompatCallback.java
diff --git a/v7/appcompat/src/android/support/v7/app/AppCompatDelegate.java b/v7/appcompat/src/main/java/android/support/v7/app/AppCompatDelegate.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/app/AppCompatDelegate.java
rename to v7/appcompat/src/main/java/android/support/v7/app/AppCompatDelegate.java
diff --git a/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplBase.java b/v7/appcompat/src/main/java/android/support/v7/app/AppCompatDelegateImplBase.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplBase.java
rename to v7/appcompat/src/main/java/android/support/v7/app/AppCompatDelegateImplBase.java
diff --git a/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplN.java b/v7/appcompat/src/main/java/android/support/v7/app/AppCompatDelegateImplN.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplN.java
rename to v7/appcompat/src/main/java/android/support/v7/app/AppCompatDelegateImplN.java
diff --git a/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplV11.java b/v7/appcompat/src/main/java/android/support/v7/app/AppCompatDelegateImplV11.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplV11.java
rename to v7/appcompat/src/main/java/android/support/v7/app/AppCompatDelegateImplV11.java
diff --git a/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplV14.java b/v7/appcompat/src/main/java/android/support/v7/app/AppCompatDelegateImplV14.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplV14.java
rename to v7/appcompat/src/main/java/android/support/v7/app/AppCompatDelegateImplV14.java
diff --git a/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplV23.java b/v7/appcompat/src/main/java/android/support/v7/app/AppCompatDelegateImplV23.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplV23.java
rename to v7/appcompat/src/main/java/android/support/v7/app/AppCompatDelegateImplV23.java
diff --git a/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplV9.java b/v7/appcompat/src/main/java/android/support/v7/app/AppCompatDelegateImplV9.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplV9.java
rename to v7/appcompat/src/main/java/android/support/v7/app/AppCompatDelegateImplV9.java
diff --git a/v7/appcompat/src/android/support/v7/app/AppCompatDialog.java b/v7/appcompat/src/main/java/android/support/v7/app/AppCompatDialog.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/app/AppCompatDialog.java
rename to v7/appcompat/src/main/java/android/support/v7/app/AppCompatDialog.java
diff --git a/v7/appcompat/src/android/support/v7/app/AppCompatDialogFragment.java b/v7/appcompat/src/main/java/android/support/v7/app/AppCompatDialogFragment.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/app/AppCompatDialogFragment.java
rename to v7/appcompat/src/main/java/android/support/v7/app/AppCompatDialogFragment.java
diff --git a/v7/appcompat/src/android/support/v7/app/AppCompatViewInflater.java b/v7/appcompat/src/main/java/android/support/v7/app/AppCompatViewInflater.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/app/AppCompatViewInflater.java
rename to v7/appcompat/src/main/java/android/support/v7/app/AppCompatViewInflater.java
diff --git a/v7/appcompat/src/android/support/v7/app/NavItemSelectedListener.java b/v7/appcompat/src/main/java/android/support/v7/app/NavItemSelectedListener.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/app/NavItemSelectedListener.java
rename to v7/appcompat/src/main/java/android/support/v7/app/NavItemSelectedListener.java
diff --git a/v7/appcompat/src/android/support/v7/app/ResourcesFlusher.java b/v7/appcompat/src/main/java/android/support/v7/app/ResourcesFlusher.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/app/ResourcesFlusher.java
rename to v7/appcompat/src/main/java/android/support/v7/app/ResourcesFlusher.java
diff --git a/v7/appcompat/src/android/support/v7/app/ToolbarActionBar.java b/v7/appcompat/src/main/java/android/support/v7/app/ToolbarActionBar.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/app/ToolbarActionBar.java
rename to v7/appcompat/src/main/java/android/support/v7/app/ToolbarActionBar.java
diff --git a/v7/appcompat/src/android/support/v7/app/TwilightCalculator.java b/v7/appcompat/src/main/java/android/support/v7/app/TwilightCalculator.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/app/TwilightCalculator.java
rename to v7/appcompat/src/main/java/android/support/v7/app/TwilightCalculator.java
diff --git a/v7/appcompat/src/android/support/v7/app/TwilightManager.java b/v7/appcompat/src/main/java/android/support/v7/app/TwilightManager.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/app/TwilightManager.java
rename to v7/appcompat/src/main/java/android/support/v7/app/TwilightManager.java
diff --git a/v7/appcompat/src/android/support/v7/app/WindowDecorActionBar.java b/v7/appcompat/src/main/java/android/support/v7/app/WindowDecorActionBar.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/app/WindowDecorActionBar.java
rename to v7/appcompat/src/main/java/android/support/v7/app/WindowDecorActionBar.java
diff --git a/v7/appcompat/src/android/support/v7/content/res/AppCompatColorStateListInflater.java b/v7/appcompat/src/main/java/android/support/v7/content/res/AppCompatColorStateListInflater.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/content/res/AppCompatColorStateListInflater.java
rename to v7/appcompat/src/main/java/android/support/v7/content/res/AppCompatColorStateListInflater.java
diff --git a/v7/appcompat/src/android/support/v7/content/res/AppCompatResources.java b/v7/appcompat/src/main/java/android/support/v7/content/res/AppCompatResources.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/content/res/AppCompatResources.java
rename to v7/appcompat/src/main/java/android/support/v7/content/res/AppCompatResources.java
diff --git a/v7/appcompat/src/android/support/v7/content/res/GrowingArrayUtils.java b/v7/appcompat/src/main/java/android/support/v7/content/res/GrowingArrayUtils.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/content/res/GrowingArrayUtils.java
rename to v7/appcompat/src/main/java/android/support/v7/content/res/GrowingArrayUtils.java
diff --git a/v7/appcompat/src/android/support/v7/graphics/drawable/DrawableWrapper.java b/v7/appcompat/src/main/java/android/support/v7/graphics/drawable/DrawableWrapper.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/graphics/drawable/DrawableWrapper.java
rename to v7/appcompat/src/main/java/android/support/v7/graphics/drawable/DrawableWrapper.java
diff --git a/v7/appcompat/src/android/support/v7/graphics/drawable/DrawerArrowDrawable.java b/v7/appcompat/src/main/java/android/support/v7/graphics/drawable/DrawerArrowDrawable.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/graphics/drawable/DrawerArrowDrawable.java
rename to v7/appcompat/src/main/java/android/support/v7/graphics/drawable/DrawerArrowDrawable.java
diff --git a/v7/appcompat/src/android/support/v7/text/AllCapsTransformationMethod.java b/v7/appcompat/src/main/java/android/support/v7/text/AllCapsTransformationMethod.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/text/AllCapsTransformationMethod.java
rename to v7/appcompat/src/main/java/android/support/v7/text/AllCapsTransformationMethod.java
diff --git a/v7/appcompat/src/android/support/v7/view/ActionBarPolicy.java b/v7/appcompat/src/main/java/android/support/v7/view/ActionBarPolicy.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/view/ActionBarPolicy.java
rename to v7/appcompat/src/main/java/android/support/v7/view/ActionBarPolicy.java
diff --git a/v7/appcompat/src/android/support/v7/view/ActionMode.java b/v7/appcompat/src/main/java/android/support/v7/view/ActionMode.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/view/ActionMode.java
rename to v7/appcompat/src/main/java/android/support/v7/view/ActionMode.java
diff --git a/v7/appcompat/src/android/support/v7/view/CollapsibleActionView.java b/v7/appcompat/src/main/java/android/support/v7/view/CollapsibleActionView.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/view/CollapsibleActionView.java
rename to v7/appcompat/src/main/java/android/support/v7/view/CollapsibleActionView.java
diff --git a/v7/appcompat/src/android/support/v7/view/ContextThemeWrapper.java b/v7/appcompat/src/main/java/android/support/v7/view/ContextThemeWrapper.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/view/ContextThemeWrapper.java
rename to v7/appcompat/src/main/java/android/support/v7/view/ContextThemeWrapper.java
diff --git a/v7/appcompat/src/android/support/v7/view/StandaloneActionMode.java b/v7/appcompat/src/main/java/android/support/v7/view/StandaloneActionMode.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/view/StandaloneActionMode.java
rename to v7/appcompat/src/main/java/android/support/v7/view/StandaloneActionMode.java
diff --git a/v7/appcompat/src/android/support/v7/view/SupportActionModeWrapper.java b/v7/appcompat/src/main/java/android/support/v7/view/SupportActionModeWrapper.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/view/SupportActionModeWrapper.java
rename to v7/appcompat/src/main/java/android/support/v7/view/SupportActionModeWrapper.java
diff --git a/v7/appcompat/src/android/support/v7/view/SupportMenuInflater.java b/v7/appcompat/src/main/java/android/support/v7/view/SupportMenuInflater.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/view/SupportMenuInflater.java
rename to v7/appcompat/src/main/java/android/support/v7/view/SupportMenuInflater.java
diff --git a/v7/appcompat/src/android/support/v7/view/ViewPropertyAnimatorCompatSet.java b/v7/appcompat/src/main/java/android/support/v7/view/ViewPropertyAnimatorCompatSet.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/view/ViewPropertyAnimatorCompatSet.java
rename to v7/appcompat/src/main/java/android/support/v7/view/ViewPropertyAnimatorCompatSet.java
diff --git a/v7/appcompat/src/android/support/v7/view/WindowCallbackWrapper.java b/v7/appcompat/src/main/java/android/support/v7/view/WindowCallbackWrapper.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/view/WindowCallbackWrapper.java
rename to v7/appcompat/src/main/java/android/support/v7/view/WindowCallbackWrapper.java
diff --git a/v7/appcompat/src/android/support/v7/view/menu/ActionMenuItem.java b/v7/appcompat/src/main/java/android/support/v7/view/menu/ActionMenuItem.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/view/menu/ActionMenuItem.java
rename to v7/appcompat/src/main/java/android/support/v7/view/menu/ActionMenuItem.java
diff --git a/v7/appcompat/src/android/support/v7/view/menu/ActionMenuItemView.java b/v7/appcompat/src/main/java/android/support/v7/view/menu/ActionMenuItemView.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/view/menu/ActionMenuItemView.java
rename to v7/appcompat/src/main/java/android/support/v7/view/menu/ActionMenuItemView.java
diff --git a/v7/appcompat/src/android/support/v7/view/menu/BaseMenuPresenter.java b/v7/appcompat/src/main/java/android/support/v7/view/menu/BaseMenuPresenter.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/view/menu/BaseMenuPresenter.java
rename to v7/appcompat/src/main/java/android/support/v7/view/menu/BaseMenuPresenter.java
diff --git a/v7/appcompat/src/android/support/v7/view/menu/BaseMenuWrapper.java b/v7/appcompat/src/main/java/android/support/v7/view/menu/BaseMenuWrapper.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/view/menu/BaseMenuWrapper.java
rename to v7/appcompat/src/main/java/android/support/v7/view/menu/BaseMenuWrapper.java
diff --git a/v7/appcompat/src/android/support/v7/view/menu/BaseWrapper.java b/v7/appcompat/src/main/java/android/support/v7/view/menu/BaseWrapper.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/view/menu/BaseWrapper.java
rename to v7/appcompat/src/main/java/android/support/v7/view/menu/BaseWrapper.java
diff --git a/v7/appcompat/src/android/support/v7/view/menu/CascadingMenuPopup.java b/v7/appcompat/src/main/java/android/support/v7/view/menu/CascadingMenuPopup.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/view/menu/CascadingMenuPopup.java
rename to v7/appcompat/src/main/java/android/support/v7/view/menu/CascadingMenuPopup.java
diff --git a/v7/appcompat/src/android/support/v7/view/menu/ExpandedMenuView.java b/v7/appcompat/src/main/java/android/support/v7/view/menu/ExpandedMenuView.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/view/menu/ExpandedMenuView.java
rename to v7/appcompat/src/main/java/android/support/v7/view/menu/ExpandedMenuView.java
diff --git a/v7/appcompat/src/android/support/v7/view/menu/ListMenuItemView.java b/v7/appcompat/src/main/java/android/support/v7/view/menu/ListMenuItemView.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/view/menu/ListMenuItemView.java
rename to v7/appcompat/src/main/java/android/support/v7/view/menu/ListMenuItemView.java
diff --git a/v7/appcompat/src/android/support/v7/view/menu/ListMenuPresenter.java b/v7/appcompat/src/main/java/android/support/v7/view/menu/ListMenuPresenter.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/view/menu/ListMenuPresenter.java
rename to v7/appcompat/src/main/java/android/support/v7/view/menu/ListMenuPresenter.java
diff --git a/v7/appcompat/src/android/support/v7/view/menu/MenuAdapter.java b/v7/appcompat/src/main/java/android/support/v7/view/menu/MenuAdapter.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/view/menu/MenuAdapter.java
rename to v7/appcompat/src/main/java/android/support/v7/view/menu/MenuAdapter.java
diff --git a/v7/appcompat/src/android/support/v7/view/menu/MenuBuilder.java b/v7/appcompat/src/main/java/android/support/v7/view/menu/MenuBuilder.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/view/menu/MenuBuilder.java
rename to v7/appcompat/src/main/java/android/support/v7/view/menu/MenuBuilder.java
diff --git a/v7/appcompat/src/android/support/v7/view/menu/MenuDialogHelper.java b/v7/appcompat/src/main/java/android/support/v7/view/menu/MenuDialogHelper.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/view/menu/MenuDialogHelper.java
rename to v7/appcompat/src/main/java/android/support/v7/view/menu/MenuDialogHelper.java
diff --git a/v7/appcompat/src/android/support/v7/view/menu/MenuHelper.java b/v7/appcompat/src/main/java/android/support/v7/view/menu/MenuHelper.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/view/menu/MenuHelper.java
rename to v7/appcompat/src/main/java/android/support/v7/view/menu/MenuHelper.java
diff --git a/v7/appcompat/src/android/support/v7/view/menu/MenuItemImpl.java b/v7/appcompat/src/main/java/android/support/v7/view/menu/MenuItemImpl.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/view/menu/MenuItemImpl.java
rename to v7/appcompat/src/main/java/android/support/v7/view/menu/MenuItemImpl.java
diff --git a/v7/appcompat/src/android/support/v7/view/menu/MenuItemWrapperICS.java b/v7/appcompat/src/main/java/android/support/v7/view/menu/MenuItemWrapperICS.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/view/menu/MenuItemWrapperICS.java
rename to v7/appcompat/src/main/java/android/support/v7/view/menu/MenuItemWrapperICS.java
diff --git a/v7/appcompat/src/android/support/v7/view/menu/MenuItemWrapperJB.java b/v7/appcompat/src/main/java/android/support/v7/view/menu/MenuItemWrapperJB.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/view/menu/MenuItemWrapperJB.java
rename to v7/appcompat/src/main/java/android/support/v7/view/menu/MenuItemWrapperJB.java
diff --git a/v7/appcompat/src/android/support/v7/view/menu/MenuPopup.java b/v7/appcompat/src/main/java/android/support/v7/view/menu/MenuPopup.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/view/menu/MenuPopup.java
rename to v7/appcompat/src/main/java/android/support/v7/view/menu/MenuPopup.java
diff --git a/v7/appcompat/src/android/support/v7/view/menu/MenuPopupHelper.java b/v7/appcompat/src/main/java/android/support/v7/view/menu/MenuPopupHelper.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/view/menu/MenuPopupHelper.java
rename to v7/appcompat/src/main/java/android/support/v7/view/menu/MenuPopupHelper.java
diff --git a/v7/appcompat/src/android/support/v7/view/menu/MenuPresenter.java b/v7/appcompat/src/main/java/android/support/v7/view/menu/MenuPresenter.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/view/menu/MenuPresenter.java
rename to v7/appcompat/src/main/java/android/support/v7/view/menu/MenuPresenter.java
diff --git a/v7/appcompat/src/android/support/v7/view/menu/MenuView.java b/v7/appcompat/src/main/java/android/support/v7/view/menu/MenuView.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/view/menu/MenuView.java
rename to v7/appcompat/src/main/java/android/support/v7/view/menu/MenuView.java
diff --git a/v7/appcompat/src/android/support/v7/view/menu/MenuWrapperFactory.java b/v7/appcompat/src/main/java/android/support/v7/view/menu/MenuWrapperFactory.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/view/menu/MenuWrapperFactory.java
rename to v7/appcompat/src/main/java/android/support/v7/view/menu/MenuWrapperFactory.java
diff --git a/v7/appcompat/src/android/support/v7/view/menu/MenuWrapperICS.java b/v7/appcompat/src/main/java/android/support/v7/view/menu/MenuWrapperICS.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/view/menu/MenuWrapperICS.java
rename to v7/appcompat/src/main/java/android/support/v7/view/menu/MenuWrapperICS.java
diff --git a/v7/appcompat/src/android/support/v7/view/menu/ShowableListMenu.java b/v7/appcompat/src/main/java/android/support/v7/view/menu/ShowableListMenu.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/view/menu/ShowableListMenu.java
rename to v7/appcompat/src/main/java/android/support/v7/view/menu/ShowableListMenu.java
diff --git a/v7/appcompat/src/android/support/v7/view/menu/StandardMenuPopup.java b/v7/appcompat/src/main/java/android/support/v7/view/menu/StandardMenuPopup.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/view/menu/StandardMenuPopup.java
rename to v7/appcompat/src/main/java/android/support/v7/view/menu/StandardMenuPopup.java
diff --git a/v7/appcompat/src/android/support/v7/view/menu/SubMenuBuilder.java b/v7/appcompat/src/main/java/android/support/v7/view/menu/SubMenuBuilder.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/view/menu/SubMenuBuilder.java
rename to v7/appcompat/src/main/java/android/support/v7/view/menu/SubMenuBuilder.java
diff --git a/v7/appcompat/src/android/support/v7/view/menu/SubMenuWrapperICS.java b/v7/appcompat/src/main/java/android/support/v7/view/menu/SubMenuWrapperICS.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/view/menu/SubMenuWrapperICS.java
rename to v7/appcompat/src/main/java/android/support/v7/view/menu/SubMenuWrapperICS.java
diff --git a/v7/appcompat/src/android/support/v7/widget/AbsActionBarView.java b/v7/appcompat/src/main/java/android/support/v7/widget/AbsActionBarView.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/AbsActionBarView.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/AbsActionBarView.java
diff --git a/v7/appcompat/src/android/support/v7/widget/ActionBarBackgroundDrawable.java b/v7/appcompat/src/main/java/android/support/v7/widget/ActionBarBackgroundDrawable.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/ActionBarBackgroundDrawable.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/ActionBarBackgroundDrawable.java
diff --git a/v7/appcompat/src/android/support/v7/widget/ActionBarBackgroundDrawableV21.java b/v7/appcompat/src/main/java/android/support/v7/widget/ActionBarBackgroundDrawableV21.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/ActionBarBackgroundDrawableV21.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/ActionBarBackgroundDrawableV21.java
diff --git a/v7/appcompat/src/android/support/v7/widget/ActionBarContainer.java b/v7/appcompat/src/main/java/android/support/v7/widget/ActionBarContainer.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/ActionBarContainer.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/ActionBarContainer.java
diff --git a/v7/appcompat/src/android/support/v7/widget/ActionBarContextView.java b/v7/appcompat/src/main/java/android/support/v7/widget/ActionBarContextView.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/ActionBarContextView.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/ActionBarContextView.java
diff --git a/v7/appcompat/src/android/support/v7/widget/ActionBarOverlayLayout.java b/v7/appcompat/src/main/java/android/support/v7/widget/ActionBarOverlayLayout.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/ActionBarOverlayLayout.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/ActionBarOverlayLayout.java
diff --git a/v7/appcompat/src/android/support/v7/widget/ActionMenuPresenter.java b/v7/appcompat/src/main/java/android/support/v7/widget/ActionMenuPresenter.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/ActionMenuPresenter.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/ActionMenuPresenter.java
diff --git a/v7/appcompat/src/android/support/v7/widget/ActionMenuView.java b/v7/appcompat/src/main/java/android/support/v7/widget/ActionMenuView.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/ActionMenuView.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/ActionMenuView.java
diff --git a/v7/appcompat/src/android/support/v7/widget/ActivityChooserModel.java b/v7/appcompat/src/main/java/android/support/v7/widget/ActivityChooserModel.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/ActivityChooserModel.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/ActivityChooserModel.java
diff --git a/v7/appcompat/src/android/support/v7/widget/ActivityChooserView.java b/v7/appcompat/src/main/java/android/support/v7/widget/ActivityChooserView.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/ActivityChooserView.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/ActivityChooserView.java
diff --git a/v7/appcompat/src/android/support/v7/widget/AlertDialogLayout.java b/v7/appcompat/src/main/java/android/support/v7/widget/AlertDialogLayout.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/AlertDialogLayout.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/AlertDialogLayout.java
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatAutoCompleteTextView.java b/v7/appcompat/src/main/java/android/support/v7/widget/AppCompatAutoCompleteTextView.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/AppCompatAutoCompleteTextView.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/AppCompatAutoCompleteTextView.java
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatBackgroundHelper.java b/v7/appcompat/src/main/java/android/support/v7/widget/AppCompatBackgroundHelper.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/AppCompatBackgroundHelper.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/AppCompatBackgroundHelper.java
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatButton.java b/v7/appcompat/src/main/java/android/support/v7/widget/AppCompatButton.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/AppCompatButton.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/AppCompatButton.java
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatCheckBox.java b/v7/appcompat/src/main/java/android/support/v7/widget/AppCompatCheckBox.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/AppCompatCheckBox.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/AppCompatCheckBox.java
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatCheckedTextView.java b/v7/appcompat/src/main/java/android/support/v7/widget/AppCompatCheckedTextView.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/AppCompatCheckedTextView.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/AppCompatCheckedTextView.java
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatCompoundButtonHelper.java b/v7/appcompat/src/main/java/android/support/v7/widget/AppCompatCompoundButtonHelper.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/AppCompatCompoundButtonHelper.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/AppCompatCompoundButtonHelper.java
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatDrawableManager.java b/v7/appcompat/src/main/java/android/support/v7/widget/AppCompatDrawableManager.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/AppCompatDrawableManager.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/AppCompatDrawableManager.java
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatEditText.java b/v7/appcompat/src/main/java/android/support/v7/widget/AppCompatEditText.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/AppCompatEditText.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/AppCompatEditText.java
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatImageButton.java b/v7/appcompat/src/main/java/android/support/v7/widget/AppCompatImageButton.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/AppCompatImageButton.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/AppCompatImageButton.java
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatImageHelper.java b/v7/appcompat/src/main/java/android/support/v7/widget/AppCompatImageHelper.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/AppCompatImageHelper.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/AppCompatImageHelper.java
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatImageView.java b/v7/appcompat/src/main/java/android/support/v7/widget/AppCompatImageView.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/AppCompatImageView.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/AppCompatImageView.java
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatMultiAutoCompleteTextView.java b/v7/appcompat/src/main/java/android/support/v7/widget/AppCompatMultiAutoCompleteTextView.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/AppCompatMultiAutoCompleteTextView.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/AppCompatMultiAutoCompleteTextView.java
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatPopupWindow.java b/v7/appcompat/src/main/java/android/support/v7/widget/AppCompatPopupWindow.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/AppCompatPopupWindow.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/AppCompatPopupWindow.java
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatProgressBarHelper.java b/v7/appcompat/src/main/java/android/support/v7/widget/AppCompatProgressBarHelper.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/AppCompatProgressBarHelper.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/AppCompatProgressBarHelper.java
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatRadioButton.java b/v7/appcompat/src/main/java/android/support/v7/widget/AppCompatRadioButton.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/AppCompatRadioButton.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/AppCompatRadioButton.java
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatRatingBar.java b/v7/appcompat/src/main/java/android/support/v7/widget/AppCompatRatingBar.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/AppCompatRatingBar.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/AppCompatRatingBar.java
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatSeekBar.java b/v7/appcompat/src/main/java/android/support/v7/widget/AppCompatSeekBar.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/AppCompatSeekBar.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/AppCompatSeekBar.java
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatSeekBarHelper.java b/v7/appcompat/src/main/java/android/support/v7/widget/AppCompatSeekBarHelper.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/AppCompatSeekBarHelper.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/AppCompatSeekBarHelper.java
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatSpinner.java b/v7/appcompat/src/main/java/android/support/v7/widget/AppCompatSpinner.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/AppCompatSpinner.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/AppCompatSpinner.java
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatTextHelper.java b/v7/appcompat/src/main/java/android/support/v7/widget/AppCompatTextHelper.java
similarity index 90%
rename from v7/appcompat/src/android/support/v7/widget/AppCompatTextHelper.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/AppCompatTextHelper.java
index 75fa38f..fa6196f 100644
--- a/v7/appcompat/src/android/support/v7/widget/AppCompatTextHelper.java
+++ b/v7/appcompat/src/main/java/android/support/v7/widget/AppCompatTextHelper.java
@@ -29,6 +29,7 @@
import android.support.annotation.NonNull;
import android.support.annotation.RequiresApi;
import android.support.annotation.RestrictTo;
+import android.support.v4.content.res.ResourcesCompat;
import android.support.v4.widget.TextViewCompat;
import android.support.v7.appcompat.R;
import android.text.method.PasswordTransformationMethod;
@@ -36,6 +37,8 @@
import android.util.TypedValue;
import android.widget.TextView;
+import java.lang.ref.WeakReference;
+
@RequiresApi(9)
class AppCompatTextHelper {
@@ -63,6 +66,7 @@
private int mStyle = Typeface.NORMAL;
private Typeface mFontTypeface;
+ private boolean mAsyncFontPending;
AppCompatTextHelper(TextView view) {
mView = view;
@@ -213,8 +217,23 @@
? R.styleable.TextAppearance_android_fontFamily
: R.styleable.TextAppearance_fontFamily;
if (!context.isRestricted()) {
+ final WeakReference<TextView> textViewWeak = new WeakReference<>(mView);
+ ResourcesCompat.FontCallback replyCallback = new ResourcesCompat.FontCallback() {
+ @Override
+ public void onFontRetrieved(@NonNull Typeface typeface) {
+ onAsyncTypefaceReceived(textViewWeak, typeface);
+ }
+
+ @Override
+ public void onFontRetrievalFailed(int reason) {
+ // Do nothing.
+ }
+ };
try {
- mFontTypeface = a.getFont(fontFamilyId, mStyle, mView);
+ // Note the callback will be triggered on the UI thread.
+ mFontTypeface = a.getFont(fontFamilyId, mStyle, replyCallback);
+ // If this call gave us an immediate result, ignore any pending callbacks.
+ mAsyncFontPending = mFontTypeface == null;
} catch (UnsupportedOperationException | Resources.NotFoundException e) {
// Expected if it is not a font resource.
}
@@ -222,12 +241,16 @@
if (mFontTypeface == null) {
// Try with String. This is done by TextView JB+, but fails in ICS
String fontFamilyName = a.getString(fontFamilyId);
- mFontTypeface = Typeface.create(fontFamilyName, mStyle);
+ if (fontFamilyName != null) {
+ mFontTypeface = Typeface.create(fontFamilyName, mStyle);
+ }
}
return;
}
if (a.hasValue(R.styleable.TextAppearance_android_typeface)) {
+ // Ignore previous pending fonts
+ mAsyncFontPending = false;
int typefaceIndex = a.getInt(R.styleable.TextAppearance_android_typeface, SANS);
switch (typefaceIndex) {
case SANS:
@@ -245,6 +268,16 @@
}
}
+ private void onAsyncTypefaceReceived(WeakReference<TextView> textViewWeak, Typeface typeface) {
+ if (mAsyncFontPending) {
+ mFontTypeface = typeface;
+ final TextView textView = textViewWeak.get();
+ if (textView != null) {
+ textView.setTypeface(typeface, mStyle);
+ }
+ }
+ }
+
void onSetTextAppearance(Context context, int resId) {
final TintTypedArray a = TintTypedArray.obtainStyledAttributes(context,
resId, R.styleable.TextAppearance);
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatTextHelperV17.java b/v7/appcompat/src/main/java/android/support/v7/widget/AppCompatTextHelperV17.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/AppCompatTextHelperV17.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/AppCompatTextHelperV17.java
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatTextView.java b/v7/appcompat/src/main/java/android/support/v7/widget/AppCompatTextView.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/AppCompatTextView.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/AppCompatTextView.java
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatTextViewAutoSizeHelper.java b/v7/appcompat/src/main/java/android/support/v7/widget/AppCompatTextViewAutoSizeHelper.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/AppCompatTextViewAutoSizeHelper.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/AppCompatTextViewAutoSizeHelper.java
diff --git a/v7/appcompat/src/android/support/v7/widget/ButtonBarLayout.java b/v7/appcompat/src/main/java/android/support/v7/widget/ButtonBarLayout.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/ButtonBarLayout.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/ButtonBarLayout.java
diff --git a/v7/appcompat/src/android/support/v7/widget/ContentFrameLayout.java b/v7/appcompat/src/main/java/android/support/v7/widget/ContentFrameLayout.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/ContentFrameLayout.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/ContentFrameLayout.java
diff --git a/v7/appcompat/src/android/support/v7/widget/DecorContentParent.java b/v7/appcompat/src/main/java/android/support/v7/widget/DecorContentParent.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/DecorContentParent.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/DecorContentParent.java
diff --git a/v7/appcompat/src/android/support/v7/widget/DecorToolbar.java b/v7/appcompat/src/main/java/android/support/v7/widget/DecorToolbar.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/DecorToolbar.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/DecorToolbar.java
diff --git a/v7/appcompat/src/android/support/v7/widget/DialogTitle.java b/v7/appcompat/src/main/java/android/support/v7/widget/DialogTitle.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/DialogTitle.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/DialogTitle.java
diff --git a/v7/appcompat/src/android/support/v7/widget/DrawableUtils.java b/v7/appcompat/src/main/java/android/support/v7/widget/DrawableUtils.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/DrawableUtils.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/DrawableUtils.java
diff --git a/v7/appcompat/src/android/support/v7/widget/DropDownListView.java b/v7/appcompat/src/main/java/android/support/v7/widget/DropDownListView.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/DropDownListView.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/DropDownListView.java
diff --git a/v7/appcompat/src/android/support/v7/widget/FitWindowsFrameLayout.java b/v7/appcompat/src/main/java/android/support/v7/widget/FitWindowsFrameLayout.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/FitWindowsFrameLayout.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/FitWindowsFrameLayout.java
diff --git a/v7/appcompat/src/android/support/v7/widget/FitWindowsLinearLayout.java b/v7/appcompat/src/main/java/android/support/v7/widget/FitWindowsLinearLayout.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/FitWindowsLinearLayout.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/FitWindowsLinearLayout.java
diff --git a/v7/appcompat/src/android/support/v7/widget/FitWindowsViewGroup.java b/v7/appcompat/src/main/java/android/support/v7/widget/FitWindowsViewGroup.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/FitWindowsViewGroup.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/FitWindowsViewGroup.java
diff --git a/v7/appcompat/src/android/support/v7/widget/ForwardingListener.java b/v7/appcompat/src/main/java/android/support/v7/widget/ForwardingListener.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/ForwardingListener.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/ForwardingListener.java
diff --git a/v7/appcompat/src/android/support/v7/widget/LinearLayoutCompat.java b/v7/appcompat/src/main/java/android/support/v7/widget/LinearLayoutCompat.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/LinearLayoutCompat.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/LinearLayoutCompat.java
diff --git a/v7/appcompat/src/android/support/v7/widget/ListPopupWindow.java b/v7/appcompat/src/main/java/android/support/v7/widget/ListPopupWindow.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/ListPopupWindow.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/ListPopupWindow.java
diff --git a/v7/appcompat/src/android/support/v7/widget/ListViewCompat.java b/v7/appcompat/src/main/java/android/support/v7/widget/ListViewCompat.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/ListViewCompat.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/ListViewCompat.java
diff --git a/v7/appcompat/src/android/support/v7/widget/MenuItemHoverListener.java b/v7/appcompat/src/main/java/android/support/v7/widget/MenuItemHoverListener.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/MenuItemHoverListener.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/MenuItemHoverListener.java
diff --git a/v7/appcompat/src/android/support/v7/widget/MenuPopupWindow.java b/v7/appcompat/src/main/java/android/support/v7/widget/MenuPopupWindow.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/MenuPopupWindow.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/MenuPopupWindow.java
diff --git a/v7/appcompat/src/android/support/v7/widget/PopupMenu.java b/v7/appcompat/src/main/java/android/support/v7/widget/PopupMenu.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/PopupMenu.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/PopupMenu.java
diff --git a/v7/appcompat/src/android/support/v7/widget/ResourcesWrapper.java b/v7/appcompat/src/main/java/android/support/v7/widget/ResourcesWrapper.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/ResourcesWrapper.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/ResourcesWrapper.java
diff --git a/v7/appcompat/src/android/support/v7/widget/RtlSpacingHelper.java b/v7/appcompat/src/main/java/android/support/v7/widget/RtlSpacingHelper.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/RtlSpacingHelper.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/RtlSpacingHelper.java
diff --git a/v7/appcompat/src/android/support/v7/widget/ScrollingTabContainerView.java b/v7/appcompat/src/main/java/android/support/v7/widget/ScrollingTabContainerView.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/ScrollingTabContainerView.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/ScrollingTabContainerView.java
diff --git a/v7/appcompat/src/android/support/v7/widget/SearchView.java b/v7/appcompat/src/main/java/android/support/v7/widget/SearchView.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/SearchView.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/SearchView.java
diff --git a/v7/appcompat/src/android/support/v7/widget/ShareActionProvider.java b/v7/appcompat/src/main/java/android/support/v7/widget/ShareActionProvider.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/ShareActionProvider.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/ShareActionProvider.java
diff --git a/v7/appcompat/src/android/support/v7/widget/SuggestionsAdapter.java b/v7/appcompat/src/main/java/android/support/v7/widget/SuggestionsAdapter.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/SuggestionsAdapter.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/SuggestionsAdapter.java
diff --git a/v7/appcompat/src/android/support/v7/widget/SwitchCompat.java b/v7/appcompat/src/main/java/android/support/v7/widget/SwitchCompat.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/SwitchCompat.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/SwitchCompat.java
diff --git a/v7/appcompat/src/android/support/v7/widget/ThemeUtils.java b/v7/appcompat/src/main/java/android/support/v7/widget/ThemeUtils.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/ThemeUtils.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/ThemeUtils.java
diff --git a/v7/appcompat/src/android/support/v7/widget/ThemedSpinnerAdapter.java b/v7/appcompat/src/main/java/android/support/v7/widget/ThemedSpinnerAdapter.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/ThemedSpinnerAdapter.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/ThemedSpinnerAdapter.java
diff --git a/v7/appcompat/src/android/support/v7/widget/TintContextWrapper.java b/v7/appcompat/src/main/java/android/support/v7/widget/TintContextWrapper.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/TintContextWrapper.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/TintContextWrapper.java
diff --git a/v7/appcompat/src/android/support/v7/widget/TintInfo.java b/v7/appcompat/src/main/java/android/support/v7/widget/TintInfo.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/TintInfo.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/TintInfo.java
diff --git a/v7/appcompat/src/android/support/v7/widget/TintResources.java b/v7/appcompat/src/main/java/android/support/v7/widget/TintResources.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/TintResources.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/TintResources.java
diff --git a/v7/appcompat/src/android/support/v7/widget/TintTypedArray.java b/v7/appcompat/src/main/java/android/support/v7/widget/TintTypedArray.java
similarity index 95%
rename from v7/appcompat/src/android/support/v7/widget/TintTypedArray.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/TintTypedArray.java
index 2213dd3..384c461 100644
--- a/v7/appcompat/src/android/support/v7/widget/TintTypedArray.java
+++ b/v7/appcompat/src/main/java/android/support/v7/widget/TintTypedArray.java
@@ -25,7 +25,6 @@
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.os.Build;
-import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
import android.support.annotation.RestrictTo;
@@ -34,7 +33,6 @@
import android.support.v7.content.res.AppCompatResources;
import android.util.AttributeSet;
import android.util.TypedValue;
-import android.widget.TextView;
/**
* A class that wraps a {@link android.content.res.TypedArray} and provides the same public API
@@ -98,9 +96,9 @@
*
* @param index Index of attribute to retrieve.
* @param style A style value used for selecting best match font from the list of family. Note
- * that this value will be ignored if the platform supports font family(API 24 or later).
- * @param targetView A text view to be applied this font. If async loading is specified in XML,
- * this view will be refreshed with result typeface.
+ * that this value will be ignored if the platform supports font family (API 24 or later).
+ * @param fontCallback A callback to receive async fetching of this font. If async loading is
+ * specified in XML, this callback will be triggered.
*
* @return Typeface for the attribute, or {@code null} if not defined.
* @throws RuntimeException if the TypedArray has already been recycled.
@@ -108,7 +106,8 @@
* not a font resource.
*/
@Nullable
- public Typeface getFont(@StyleableRes int index, int style, @NonNull TextView targetView) {
+ public Typeface getFont(@StyleableRes int index, int style,
+ @Nullable ResourcesCompat.FontCallback fontCallback) {
final int resourceId = mWrapped.getResourceId(index, 0);
if (resourceId == 0) {
return null;
@@ -116,7 +115,7 @@
if (mTypedValue == null) {
mTypedValue = new TypedValue();
}
- return ResourcesCompat.getFont(mContext, resourceId, mTypedValue, style, targetView);
+ return ResourcesCompat.getFont(mContext, resourceId, mTypedValue, style, fontCallback);
}
public int length() {
diff --git a/v7/appcompat/src/android/support/v7/widget/Toolbar.java b/v7/appcompat/src/main/java/android/support/v7/widget/Toolbar.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/Toolbar.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/Toolbar.java
diff --git a/v7/appcompat/src/android/support/v7/widget/ToolbarWidgetWrapper.java b/v7/appcompat/src/main/java/android/support/v7/widget/ToolbarWidgetWrapper.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/ToolbarWidgetWrapper.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/ToolbarWidgetWrapper.java
diff --git a/v7/appcompat/src/android/support/v7/widget/TooltipCompat.java b/v7/appcompat/src/main/java/android/support/v7/widget/TooltipCompat.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/TooltipCompat.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/TooltipCompat.java
diff --git a/v7/appcompat/src/android/support/v7/widget/TooltipCompatHandler.java b/v7/appcompat/src/main/java/android/support/v7/widget/TooltipCompatHandler.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/TooltipCompatHandler.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/TooltipCompatHandler.java
diff --git a/v7/appcompat/src/android/support/v7/widget/TooltipPopup.java b/v7/appcompat/src/main/java/android/support/v7/widget/TooltipPopup.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/TooltipPopup.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/TooltipPopup.java
diff --git a/v7/appcompat/src/android/support/v7/widget/VectorEnabledTintResources.java b/v7/appcompat/src/main/java/android/support/v7/widget/VectorEnabledTintResources.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/VectorEnabledTintResources.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/VectorEnabledTintResources.java
diff --git a/v7/appcompat/src/android/support/v7/widget/ViewStubCompat.java b/v7/appcompat/src/main/java/android/support/v7/widget/ViewStubCompat.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/ViewStubCompat.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/ViewStubCompat.java
diff --git a/v7/appcompat/src/android/support/v7/widget/ViewUtils.java b/v7/appcompat/src/main/java/android/support/v7/widget/ViewUtils.java
similarity index 100%
rename from v7/appcompat/src/android/support/v7/widget/ViewUtils.java
rename to v7/appcompat/src/main/java/android/support/v7/widget/ViewUtils.java
diff --git a/v7/appcompat/tests/src/android/support/v7/widget/PopupMenuTest.java b/v7/appcompat/tests/src/android/support/v7/widget/PopupMenuTest.java
index f55ca17..361662a 100644
--- a/v7/appcompat/tests/src/android/support/v7/widget/PopupMenuTest.java
+++ b/v7/appcompat/tests/src/android/support/v7/widget/PopupMenuTest.java
@@ -48,6 +48,7 @@
import android.support.test.espresso.Root;
import android.support.test.espresso.UiController;
import android.support.test.espresso.ViewAction;
+import android.support.test.filters.FlakyTest;
import android.support.test.filters.LargeTest;
import android.support.test.filters.MediumTest;
import android.support.test.rule.ActivityTestRule;
@@ -305,6 +306,7 @@
};
}
+ @FlakyTest(bugId = 33669575)
@Test
@LargeTest
public void testAnchoring() {
diff --git a/v7/cardview/Android.mk b/v7/cardview/Android.mk
index 56fa996..19d377c 100644
--- a/v7/cardview/Android.mk
+++ b/v7/cardview/Android.mk
@@ -25,7 +25,7 @@
LOCAL_MODULE := android-support-v7-cardview
LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
LOCAL_SRC_FILES := \
- $(call all-java-files-under,src)
+ $(call all-java-files-under,src/main/java)
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
LOCAL_SHARED_ANDROID_LIBRARIES := \
android-support-annotations
diff --git a/v7/cardview/AndroidManifest.xml b/v7/cardview/AndroidManifest.xml
index af07bbc..3831492 100644
--- a/v7/cardview/AndroidManifest.xml
+++ b/v7/cardview/AndroidManifest.xml
@@ -16,8 +16,4 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.support.v7.cardview">
<uses-sdk android:minSdkVersion="14"/>
- <application>
- <meta-data android:name="android.support.v7.cardview.VERSION"
- android:value="${support-version}" />
- </application>
</manifest>
diff --git a/v7/cardview/api/26.1.0.txt b/v7/cardview/api/26.1.0.txt
new file mode 100644
index 0000000..6732501
--- /dev/null
+++ b/v7/cardview/api/26.1.0.txt
@@ -0,0 +1,28 @@
+package android.support.v7.widget {
+
+ public class CardView extends android.widget.FrameLayout {
+ ctor public CardView(android.content.Context);
+ ctor public CardView(android.content.Context, android.util.AttributeSet);
+ ctor public CardView(android.content.Context, android.util.AttributeSet, int);
+ method public android.content.res.ColorStateList getCardBackgroundColor();
+ method public float getCardElevation();
+ method public int getContentPaddingBottom();
+ method public int getContentPaddingLeft();
+ method public int getContentPaddingRight();
+ method public int getContentPaddingTop();
+ method public float getMaxCardElevation();
+ method public boolean getPreventCornerOverlap();
+ method public float getRadius();
+ method public boolean getUseCompatPadding();
+ method public void setCardBackgroundColor(int);
+ method public void setCardBackgroundColor(android.content.res.ColorStateList);
+ method public void setCardElevation(float);
+ method public void setContentPadding(int, int, int, int);
+ method public void setMaxCardElevation(float);
+ method public void setPreventCornerOverlap(boolean);
+ method public void setRadius(float);
+ method public void setUseCompatPadding(boolean);
+ }
+
+}
+
diff --git a/v7/cardview/api/27.0.0.txt b/v7/cardview/api/27.0.0.txt
new file mode 100644
index 0000000..6732501
--- /dev/null
+++ b/v7/cardview/api/27.0.0.txt
@@ -0,0 +1,28 @@
+package android.support.v7.widget {
+
+ public class CardView extends android.widget.FrameLayout {
+ ctor public CardView(android.content.Context);
+ ctor public CardView(android.content.Context, android.util.AttributeSet);
+ ctor public CardView(android.content.Context, android.util.AttributeSet, int);
+ method public android.content.res.ColorStateList getCardBackgroundColor();
+ method public float getCardElevation();
+ method public int getContentPaddingBottom();
+ method public int getContentPaddingLeft();
+ method public int getContentPaddingRight();
+ method public int getContentPaddingTop();
+ method public float getMaxCardElevation();
+ method public boolean getPreventCornerOverlap();
+ method public float getRadius();
+ method public boolean getUseCompatPadding();
+ method public void setCardBackgroundColor(int);
+ method public void setCardBackgroundColor(android.content.res.ColorStateList);
+ method public void setCardElevation(float);
+ method public void setContentPadding(int, int, int, int);
+ method public void setMaxCardElevation(float);
+ method public void setPreventCornerOverlap(boolean);
+ method public void setRadius(float);
+ method public void setUseCompatPadding(boolean);
+ }
+
+}
+
diff --git a/v7/cardview/build.gradle b/v7/cardview/build.gradle
index 5d9494e..76c3bf3 100644
--- a/v7/cardview/build.gradle
+++ b/v7/cardview/build.gradle
@@ -10,9 +10,6 @@
}
sourceSets {
- main.java.srcDirs = [
- 'src'
- ]
main.res.srcDir 'res'
}
}
diff --git a/v7/cardview/src/android/support/v7/widget/CardView.java b/v7/cardview/src/main/java/android/support/v7/widget/CardView.java
similarity index 98%
rename from v7/cardview/src/android/support/v7/widget/CardView.java
rename to v7/cardview/src/main/java/android/support/v7/widget/CardView.java
index 3df45d9..58a04f0 100644
--- a/v7/cardview/src/android/support/v7/widget/CardView.java
+++ b/v7/cardview/src/main/java/android/support/v7/widget/CardView.java
@@ -24,6 +24,7 @@
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.support.annotation.ColorInt;
+import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.cardview.R;
import android.util.AttributeSet;
@@ -106,17 +107,17 @@
final Rect mShadowBounds = new Rect();
- public CardView(Context context) {
+ public CardView(@NonNull Context context) {
super(context);
initialize(context, null, 0);
}
- public CardView(Context context, AttributeSet attrs) {
+ public CardView(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
initialize(context, attrs, 0);
}
- public CardView(Context context, AttributeSet attrs, int defStyleAttr) {
+ public CardView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initialize(context, attrs, defStyleAttr);
}
@@ -300,6 +301,7 @@
*
* @return The background color state list of the CardView.
*/
+ @NonNull
public ColorStateList getCardBackgroundColor() {
return IMPL.getBackgroundColor(mCardViewDelegate);
}
diff --git a/v7/cardview/src/android/support/v7/widget/CardViewApi17Impl.java b/v7/cardview/src/main/java/android/support/v7/widget/CardViewApi17Impl.java
similarity index 100%
rename from v7/cardview/src/android/support/v7/widget/CardViewApi17Impl.java
rename to v7/cardview/src/main/java/android/support/v7/widget/CardViewApi17Impl.java
diff --git a/v7/cardview/src/android/support/v7/widget/CardViewApi21Impl.java b/v7/cardview/src/main/java/android/support/v7/widget/CardViewApi21Impl.java
similarity index 100%
rename from v7/cardview/src/android/support/v7/widget/CardViewApi21Impl.java
rename to v7/cardview/src/main/java/android/support/v7/widget/CardViewApi21Impl.java
diff --git a/v7/cardview/src/android/support/v7/widget/CardViewBaseImpl.java b/v7/cardview/src/main/java/android/support/v7/widget/CardViewBaseImpl.java
similarity index 100%
rename from v7/cardview/src/android/support/v7/widget/CardViewBaseImpl.java
rename to v7/cardview/src/main/java/android/support/v7/widget/CardViewBaseImpl.java
diff --git a/v7/cardview/src/android/support/v7/widget/CardViewDelegate.java b/v7/cardview/src/main/java/android/support/v7/widget/CardViewDelegate.java
similarity index 100%
rename from v7/cardview/src/android/support/v7/widget/CardViewDelegate.java
rename to v7/cardview/src/main/java/android/support/v7/widget/CardViewDelegate.java
diff --git a/v7/cardview/src/android/support/v7/widget/CardViewImpl.java b/v7/cardview/src/main/java/android/support/v7/widget/CardViewImpl.java
similarity index 100%
rename from v7/cardview/src/android/support/v7/widget/CardViewImpl.java
rename to v7/cardview/src/main/java/android/support/v7/widget/CardViewImpl.java
diff --git a/v7/cardview/src/android/support/v7/widget/RoundRectDrawable.java b/v7/cardview/src/main/java/android/support/v7/widget/RoundRectDrawable.java
similarity index 100%
rename from v7/cardview/src/android/support/v7/widget/RoundRectDrawable.java
rename to v7/cardview/src/main/java/android/support/v7/widget/RoundRectDrawable.java
diff --git a/v7/cardview/src/android/support/v7/widget/RoundRectDrawableWithShadow.java b/v7/cardview/src/main/java/android/support/v7/widget/RoundRectDrawableWithShadow.java
similarity index 100%
rename from v7/cardview/src/android/support/v7/widget/RoundRectDrawableWithShadow.java
rename to v7/cardview/src/main/java/android/support/v7/widget/RoundRectDrawableWithShadow.java
diff --git a/v7/gridlayout/Android.mk b/v7/gridlayout/Android.mk
index 6eac23b4..5091081 100644
--- a/v7/gridlayout/Android.mk
+++ b/v7/gridlayout/Android.mk
@@ -27,7 +27,7 @@
LOCAL_USE_AAPT2 := true
LOCAL_MODULE := android-support-v7-gridlayout
LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
+LOCAL_SRC_FILES := $(call all-java-files-under, src/main/java)
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
LOCAL_SHARED_ANDROID_LIBRARIES := \
android-support-compat \
diff --git a/v7/gridlayout/AndroidManifest.xml b/v7/gridlayout/AndroidManifest.xml
index c18f5a1..288bb34 100644
--- a/v7/gridlayout/AndroidManifest.xml
+++ b/v7/gridlayout/AndroidManifest.xml
@@ -16,8 +16,4 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.support.v7.gridlayout">
<uses-sdk android:minSdkVersion="14"/>
- <application>
- <meta-data android:name="android.support.v7.gridlayout.VERSION"
- android:value="${support-version}" />
- </application>
</manifest>
diff --git a/v7/gridlayout/api/26.1.0.txt b/v7/gridlayout/api/26.1.0.txt
new file mode 100644
index 0000000..1fc6e1d
--- /dev/null
+++ b/v7/gridlayout/api/26.1.0.txt
@@ -0,0 +1,71 @@
+package android.support.v7.widget {
+
+ public class GridLayout extends android.view.ViewGroup {
+ ctor public GridLayout(android.content.Context, android.util.AttributeSet, int);
+ ctor public GridLayout(android.content.Context, android.util.AttributeSet);
+ ctor public GridLayout(android.content.Context);
+ method protected android.support.v7.widget.GridLayout.LayoutParams generateDefaultLayoutParams();
+ method public android.support.v7.widget.GridLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
+ method protected android.support.v7.widget.GridLayout.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
+ method public int getAlignmentMode();
+ method public int getColumnCount();
+ method public int getOrientation();
+ method public android.util.Printer getPrinter();
+ method public int getRowCount();
+ method public boolean getUseDefaultMargins();
+ method public boolean isColumnOrderPreserved();
+ method public boolean isRowOrderPreserved();
+ method protected void onLayout(boolean, int, int, int, int);
+ method public void setAlignmentMode(int);
+ method public void setColumnCount(int);
+ method public void setColumnOrderPreserved(boolean);
+ method public void setOrientation(int);
+ method public void setPrinter(android.util.Printer);
+ method public void setRowCount(int);
+ method public void setRowOrderPreserved(boolean);
+ method public void setUseDefaultMargins(boolean);
+ method public static android.support.v7.widget.GridLayout.Spec spec(int, int, android.support.v7.widget.GridLayout.Alignment, float);
+ method public static android.support.v7.widget.GridLayout.Spec spec(int, android.support.v7.widget.GridLayout.Alignment, float);
+ method public static android.support.v7.widget.GridLayout.Spec spec(int, int, float);
+ method public static android.support.v7.widget.GridLayout.Spec spec(int, float);
+ method public static android.support.v7.widget.GridLayout.Spec spec(int, int, android.support.v7.widget.GridLayout.Alignment);
+ method public static android.support.v7.widget.GridLayout.Spec spec(int, android.support.v7.widget.GridLayout.Alignment);
+ method public static android.support.v7.widget.GridLayout.Spec spec(int, int);
+ method public static android.support.v7.widget.GridLayout.Spec spec(int);
+ field public static final int ALIGN_BOUNDS = 0; // 0x0
+ field public static final int ALIGN_MARGINS = 1; // 0x1
+ field public static final android.support.v7.widget.GridLayout.Alignment BASELINE;
+ field public static final android.support.v7.widget.GridLayout.Alignment BOTTOM;
+ field public static final android.support.v7.widget.GridLayout.Alignment CENTER;
+ field public static final android.support.v7.widget.GridLayout.Alignment END;
+ field public static final android.support.v7.widget.GridLayout.Alignment FILL;
+ field public static final int HORIZONTAL = 0; // 0x0
+ field public static final android.support.v7.widget.GridLayout.Alignment LEFT;
+ field public static final android.support.v7.widget.GridLayout.Alignment RIGHT;
+ field public static final android.support.v7.widget.GridLayout.Alignment START;
+ field public static final android.support.v7.widget.GridLayout.Alignment TOP;
+ field public static final int UNDEFINED = -2147483648; // 0x80000000
+ field public static final int VERTICAL = 1; // 0x1
+ }
+
+ public static abstract class GridLayout.Alignment {
+ }
+
+ public static class GridLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+ ctor public GridLayout.LayoutParams(android.support.v7.widget.GridLayout.Spec, android.support.v7.widget.GridLayout.Spec);
+ ctor public GridLayout.LayoutParams();
+ ctor public GridLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public GridLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ ctor public GridLayout.LayoutParams(android.support.v7.widget.GridLayout.LayoutParams);
+ ctor public GridLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
+ method public void setGravity(int);
+ field public android.support.v7.widget.GridLayout.Spec columnSpec;
+ field public android.support.v7.widget.GridLayout.Spec rowSpec;
+ }
+
+ public static class GridLayout.Spec {
+ method public android.support.v7.widget.GridLayout.Alignment getAbsoluteAlignment(boolean);
+ }
+
+}
+
diff --git a/v7/gridlayout/api/27.0.0.txt b/v7/gridlayout/api/27.0.0.txt
new file mode 100644
index 0000000..1fc6e1d
--- /dev/null
+++ b/v7/gridlayout/api/27.0.0.txt
@@ -0,0 +1,71 @@
+package android.support.v7.widget {
+
+ public class GridLayout extends android.view.ViewGroup {
+ ctor public GridLayout(android.content.Context, android.util.AttributeSet, int);
+ ctor public GridLayout(android.content.Context, android.util.AttributeSet);
+ ctor public GridLayout(android.content.Context);
+ method protected android.support.v7.widget.GridLayout.LayoutParams generateDefaultLayoutParams();
+ method public android.support.v7.widget.GridLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
+ method protected android.support.v7.widget.GridLayout.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
+ method public int getAlignmentMode();
+ method public int getColumnCount();
+ method public int getOrientation();
+ method public android.util.Printer getPrinter();
+ method public int getRowCount();
+ method public boolean getUseDefaultMargins();
+ method public boolean isColumnOrderPreserved();
+ method public boolean isRowOrderPreserved();
+ method protected void onLayout(boolean, int, int, int, int);
+ method public void setAlignmentMode(int);
+ method public void setColumnCount(int);
+ method public void setColumnOrderPreserved(boolean);
+ method public void setOrientation(int);
+ method public void setPrinter(android.util.Printer);
+ method public void setRowCount(int);
+ method public void setRowOrderPreserved(boolean);
+ method public void setUseDefaultMargins(boolean);
+ method public static android.support.v7.widget.GridLayout.Spec spec(int, int, android.support.v7.widget.GridLayout.Alignment, float);
+ method public static android.support.v7.widget.GridLayout.Spec spec(int, android.support.v7.widget.GridLayout.Alignment, float);
+ method public static android.support.v7.widget.GridLayout.Spec spec(int, int, float);
+ method public static android.support.v7.widget.GridLayout.Spec spec(int, float);
+ method public static android.support.v7.widget.GridLayout.Spec spec(int, int, android.support.v7.widget.GridLayout.Alignment);
+ method public static android.support.v7.widget.GridLayout.Spec spec(int, android.support.v7.widget.GridLayout.Alignment);
+ method public static android.support.v7.widget.GridLayout.Spec spec(int, int);
+ method public static android.support.v7.widget.GridLayout.Spec spec(int);
+ field public static final int ALIGN_BOUNDS = 0; // 0x0
+ field public static final int ALIGN_MARGINS = 1; // 0x1
+ field public static final android.support.v7.widget.GridLayout.Alignment BASELINE;
+ field public static final android.support.v7.widget.GridLayout.Alignment BOTTOM;
+ field public static final android.support.v7.widget.GridLayout.Alignment CENTER;
+ field public static final android.support.v7.widget.GridLayout.Alignment END;
+ field public static final android.support.v7.widget.GridLayout.Alignment FILL;
+ field public static final int HORIZONTAL = 0; // 0x0
+ field public static final android.support.v7.widget.GridLayout.Alignment LEFT;
+ field public static final android.support.v7.widget.GridLayout.Alignment RIGHT;
+ field public static final android.support.v7.widget.GridLayout.Alignment START;
+ field public static final android.support.v7.widget.GridLayout.Alignment TOP;
+ field public static final int UNDEFINED = -2147483648; // 0x80000000
+ field public static final int VERTICAL = 1; // 0x1
+ }
+
+ public static abstract class GridLayout.Alignment {
+ }
+
+ public static class GridLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+ ctor public GridLayout.LayoutParams(android.support.v7.widget.GridLayout.Spec, android.support.v7.widget.GridLayout.Spec);
+ ctor public GridLayout.LayoutParams();
+ ctor public GridLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public GridLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ ctor public GridLayout.LayoutParams(android.support.v7.widget.GridLayout.LayoutParams);
+ ctor public GridLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
+ method public void setGravity(int);
+ field public android.support.v7.widget.GridLayout.Spec columnSpec;
+ field public android.support.v7.widget.GridLayout.Spec rowSpec;
+ }
+
+ public static class GridLayout.Spec {
+ method public android.support.v7.widget.GridLayout.Alignment getAbsoluteAlignment(boolean);
+ }
+
+}
+
diff --git a/v7/gridlayout/build.gradle b/v7/gridlayout/build.gradle
index e0df821..d4d467d 100644
--- a/v7/gridlayout/build.gradle
+++ b/v7/gridlayout/build.gradle
@@ -14,7 +14,6 @@
}
sourceSets {
- main.java.srcDir 'src'
main.res.srcDir 'res'
}
}
diff --git a/v7/gridlayout/src/android/support/v7/widget/GridLayout.java b/v7/gridlayout/src/main/java/android/support/v7/widget/GridLayout.java
similarity index 100%
rename from v7/gridlayout/src/android/support/v7/widget/GridLayout.java
rename to v7/gridlayout/src/main/java/android/support/v7/widget/GridLayout.java
diff --git a/v7/mediarouter/AndroidManifest.xml b/v7/mediarouter/AndroidManifest.xml
index c2c4ee3..c20a5c0 100644
--- a/v7/mediarouter/AndroidManifest.xml
+++ b/v7/mediarouter/AndroidManifest.xml
@@ -16,8 +16,4 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.support.v7.mediarouter">
<uses-sdk android:minSdkVersion="14"/>
- <application>
- <meta-data android:name="android.support.v7.mediarouter.VERSION"
- android:value="${support-version}" />
- </application>
</manifest>
diff --git a/v7/mediarouter/api/26.1.0.txt b/v7/mediarouter/api/26.1.0.txt
new file mode 100644
index 0000000..7670978
--- /dev/null
+++ b/v7/mediarouter/api/26.1.0.txt
@@ -0,0 +1,476 @@
+package android.support.v7.app {
+
+ public class MediaRouteActionProvider extends android.support.v4.view.ActionProvider {
+ ctor public MediaRouteActionProvider(android.content.Context);
+ method public android.support.v7.app.MediaRouteDialogFactory getDialogFactory();
+ method public android.support.v7.app.MediaRouteButton getMediaRouteButton();
+ method public android.support.v7.media.MediaRouteSelector getRouteSelector();
+ method public android.view.View onCreateActionView();
+ method public android.support.v7.app.MediaRouteButton onCreateMediaRouteButton();
+ method public void setDialogFactory(android.support.v7.app.MediaRouteDialogFactory);
+ method public void setRouteSelector(android.support.v7.media.MediaRouteSelector);
+ }
+
+ public class MediaRouteButton extends android.view.View {
+ ctor public MediaRouteButton(android.content.Context);
+ ctor public MediaRouteButton(android.content.Context, android.util.AttributeSet);
+ ctor public MediaRouteButton(android.content.Context, android.util.AttributeSet, int);
+ method public android.support.v7.app.MediaRouteDialogFactory getDialogFactory();
+ method public android.support.v7.media.MediaRouteSelector getRouteSelector();
+ method public void onAttachedToWindow();
+ method public void onDetachedFromWindow();
+ method public void setDialogFactory(android.support.v7.app.MediaRouteDialogFactory);
+ method public void setRemoteIndicatorDrawable(android.graphics.drawable.Drawable);
+ method public void setRouteSelector(android.support.v7.media.MediaRouteSelector);
+ method public boolean showDialog();
+ }
+
+ public class MediaRouteChooserDialog extends android.support.v7.app.AppCompatDialog {
+ ctor public MediaRouteChooserDialog(android.content.Context);
+ ctor public MediaRouteChooserDialog(android.content.Context, int);
+ method public android.support.v7.media.MediaRouteSelector getRouteSelector();
+ method public boolean onFilterRoute(android.support.v7.media.MediaRouter.RouteInfo);
+ method public void onFilterRoutes(java.util.List<android.support.v7.media.MediaRouter.RouteInfo>);
+ method public void refreshRoutes();
+ method public void setRouteSelector(android.support.v7.media.MediaRouteSelector);
+ }
+
+ public class MediaRouteChooserDialogFragment extends android.support.v4.app.DialogFragment {
+ ctor public MediaRouteChooserDialogFragment();
+ method public android.support.v7.media.MediaRouteSelector getRouteSelector();
+ method public android.support.v7.app.MediaRouteChooserDialog onCreateChooserDialog(android.content.Context, android.os.Bundle);
+ method public void setRouteSelector(android.support.v7.media.MediaRouteSelector);
+ }
+
+ public class MediaRouteControllerDialog extends android.support.v7.app.AlertDialog {
+ ctor public MediaRouteControllerDialog(android.content.Context);
+ ctor public MediaRouteControllerDialog(android.content.Context, int);
+ method public android.view.View getMediaControlView();
+ method public android.support.v4.media.session.MediaSessionCompat.Token getMediaSession();
+ method public android.support.v7.media.MediaRouter.RouteInfo getRoute();
+ method public boolean isVolumeControlEnabled();
+ method public android.view.View onCreateMediaControlView(android.os.Bundle);
+ method public void setVolumeControlEnabled(boolean);
+ }
+
+ public class MediaRouteControllerDialogFragment extends android.support.v4.app.DialogFragment {
+ ctor public MediaRouteControllerDialogFragment();
+ method public android.support.v7.app.MediaRouteControllerDialog onCreateControllerDialog(android.content.Context, android.os.Bundle);
+ }
+
+ public class MediaRouteDialogFactory {
+ ctor public MediaRouteDialogFactory();
+ method public static android.support.v7.app.MediaRouteDialogFactory getDefault();
+ method public android.support.v7.app.MediaRouteChooserDialogFragment onCreateChooserDialogFragment();
+ method public android.support.v7.app.MediaRouteControllerDialogFragment onCreateControllerDialogFragment();
+ }
+
+ public class MediaRouteDiscoveryFragment extends android.support.v4.app.Fragment {
+ ctor public MediaRouteDiscoveryFragment();
+ method public android.support.v7.media.MediaRouter getMediaRouter();
+ method public android.support.v7.media.MediaRouteSelector getRouteSelector();
+ method public android.support.v7.media.MediaRouter.Callback onCreateCallback();
+ method public int onPrepareCallbackFlags();
+ method public void setRouteSelector(android.support.v7.media.MediaRouteSelector);
+ }
+
+}
+
+package android.support.v7.media {
+
+ public final class MediaControlIntent {
+ field public static final java.lang.String ACTION_END_SESSION = "android.media.intent.action.END_SESSION";
+ field public static final java.lang.String ACTION_ENQUEUE = "android.media.intent.action.ENQUEUE";
+ field public static final java.lang.String ACTION_GET_SESSION_STATUS = "android.media.intent.action.GET_SESSION_STATUS";
+ field public static final java.lang.String ACTION_GET_STATUS = "android.media.intent.action.GET_STATUS";
+ field public static final java.lang.String ACTION_PAUSE = "android.media.intent.action.PAUSE";
+ field public static final java.lang.String ACTION_PLAY = "android.media.intent.action.PLAY";
+ field public static final java.lang.String ACTION_REMOVE = "android.media.intent.action.REMOVE";
+ field public static final java.lang.String ACTION_RESUME = "android.media.intent.action.RESUME";
+ field public static final java.lang.String ACTION_SEEK = "android.media.intent.action.SEEK";
+ field public static final java.lang.String ACTION_SEND_MESSAGE = "android.media.intent.action.SEND_MESSAGE";
+ field public static final java.lang.String ACTION_START_SESSION = "android.media.intent.action.START_SESSION";
+ field public static final java.lang.String ACTION_STOP = "android.media.intent.action.STOP";
+ field public static final java.lang.String CATEGORY_LIVE_AUDIO = "android.media.intent.category.LIVE_AUDIO";
+ field public static final java.lang.String CATEGORY_LIVE_VIDEO = "android.media.intent.category.LIVE_VIDEO";
+ field public static final java.lang.String CATEGORY_REMOTE_PLAYBACK = "android.media.intent.category.REMOTE_PLAYBACK";
+ field public static final int ERROR_INVALID_ITEM_ID = 3; // 0x3
+ field public static final int ERROR_INVALID_SESSION_ID = 2; // 0x2
+ field public static final int ERROR_UNKNOWN = 0; // 0x0
+ field public static final int ERROR_UNSUPPORTED_OPERATION = 1; // 0x1
+ field public static final java.lang.String EXTRA_ERROR_CODE = "android.media.intent.extra.ERROR_CODE";
+ field public static final java.lang.String EXTRA_ITEM_CONTENT_POSITION = "android.media.intent.extra.ITEM_POSITION";
+ field public static final java.lang.String EXTRA_ITEM_HTTP_HEADERS = "android.media.intent.extra.HTTP_HEADERS";
+ field public static final java.lang.String EXTRA_ITEM_ID = "android.media.intent.extra.ITEM_ID";
+ field public static final java.lang.String EXTRA_ITEM_METADATA = "android.media.intent.extra.ITEM_METADATA";
+ field public static final java.lang.String EXTRA_ITEM_STATUS = "android.media.intent.extra.ITEM_STATUS";
+ field public static final java.lang.String EXTRA_ITEM_STATUS_UPDATE_RECEIVER = "android.media.intent.extra.ITEM_STATUS_UPDATE_RECEIVER";
+ field public static final java.lang.String EXTRA_MESSAGE = "android.media.intent.extra.MESSAGE";
+ field public static final java.lang.String EXTRA_MESSAGE_RECEIVER = "android.media.intent.extra.MESSAGE_RECEIVER";
+ field public static final java.lang.String EXTRA_SESSION_ID = "android.media.intent.extra.SESSION_ID";
+ field public static final java.lang.String EXTRA_SESSION_STATUS = "android.media.intent.extra.SESSION_STATUS";
+ field public static final java.lang.String EXTRA_SESSION_STATUS_UPDATE_RECEIVER = "android.media.intent.extra.SESSION_STATUS_UPDATE_RECEIVER";
+ }
+
+ public final class MediaItemMetadata {
+ field public static final java.lang.String KEY_ALBUM_ARTIST = "android.media.metadata.ALBUM_ARTIST";
+ field public static final java.lang.String KEY_ALBUM_TITLE = "android.media.metadata.ALBUM_TITLE";
+ field public static final java.lang.String KEY_ARTIST = "android.media.metadata.ARTIST";
+ field public static final java.lang.String KEY_ARTWORK_URI = "android.media.metadata.ARTWORK_URI";
+ field public static final java.lang.String KEY_AUTHOR = "android.media.metadata.AUTHOR";
+ field public static final java.lang.String KEY_COMPOSER = "android.media.metadata.COMPOSER";
+ field public static final java.lang.String KEY_DISC_NUMBER = "android.media.metadata.DISC_NUMBER";
+ field public static final java.lang.String KEY_DURATION = "android.media.metadata.DURATION";
+ field public static final java.lang.String KEY_TITLE = "android.media.metadata.TITLE";
+ field public static final java.lang.String KEY_TRACK_NUMBER = "android.media.metadata.TRACK_NUMBER";
+ field public static final java.lang.String KEY_YEAR = "android.media.metadata.YEAR";
+ }
+
+ public final class MediaItemStatus {
+ method public android.os.Bundle asBundle();
+ method public static android.support.v7.media.MediaItemStatus fromBundle(android.os.Bundle);
+ method public long getContentDuration();
+ method public long getContentPosition();
+ method public android.os.Bundle getExtras();
+ method public int getPlaybackState();
+ method public long getTimestamp();
+ field public static final java.lang.String EXTRA_HTTP_RESPONSE_HEADERS = "android.media.status.extra.HTTP_RESPONSE_HEADERS";
+ field public static final java.lang.String EXTRA_HTTP_STATUS_CODE = "android.media.status.extra.HTTP_STATUS_CODE";
+ field public static final int PLAYBACK_STATE_BUFFERING = 3; // 0x3
+ field public static final int PLAYBACK_STATE_CANCELED = 5; // 0x5
+ field public static final int PLAYBACK_STATE_ERROR = 7; // 0x7
+ field public static final int PLAYBACK_STATE_FINISHED = 4; // 0x4
+ field public static final int PLAYBACK_STATE_INVALIDATED = 6; // 0x6
+ field public static final int PLAYBACK_STATE_PAUSED = 2; // 0x2
+ field public static final int PLAYBACK_STATE_PENDING = 0; // 0x0
+ field public static final int PLAYBACK_STATE_PLAYING = 1; // 0x1
+ }
+
+ public static final class MediaItemStatus.Builder {
+ ctor public MediaItemStatus.Builder(int);
+ ctor public MediaItemStatus.Builder(android.support.v7.media.MediaItemStatus);
+ method public android.support.v7.media.MediaItemStatus build();
+ method public android.support.v7.media.MediaItemStatus.Builder setContentDuration(long);
+ method public android.support.v7.media.MediaItemStatus.Builder setContentPosition(long);
+ method public android.support.v7.media.MediaItemStatus.Builder setExtras(android.os.Bundle);
+ method public android.support.v7.media.MediaItemStatus.Builder setPlaybackState(int);
+ method public android.support.v7.media.MediaItemStatus.Builder setTimestamp(long);
+ }
+
+ public final class MediaRouteDescriptor {
+ method public android.os.Bundle asBundle();
+ method public boolean canDisconnectAndKeepPlaying();
+ method public static android.support.v7.media.MediaRouteDescriptor fromBundle(android.os.Bundle);
+ method public int getConnectionState();
+ method public java.util.List<android.content.IntentFilter> getControlFilters();
+ method public java.lang.String getDescription();
+ method public int getDeviceType();
+ method public android.os.Bundle getExtras();
+ method public android.net.Uri getIconUri();
+ method public java.lang.String getId();
+ method public java.lang.String getName();
+ method public int getPlaybackStream();
+ method public int getPlaybackType();
+ method public int getPresentationDisplayId();
+ method public android.content.IntentSender getSettingsActivity();
+ method public int getVolume();
+ method public int getVolumeHandling();
+ method public int getVolumeMax();
+ method public deprecated boolean isConnecting();
+ method public boolean isEnabled();
+ method public boolean isValid();
+ }
+
+ public static final class MediaRouteDescriptor.Builder {
+ ctor public MediaRouteDescriptor.Builder(java.lang.String, java.lang.String);
+ ctor public MediaRouteDescriptor.Builder(android.support.v7.media.MediaRouteDescriptor);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder addControlFilter(android.content.IntentFilter);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder addControlFilters(java.util.Collection<android.content.IntentFilter>);
+ method public android.support.v7.media.MediaRouteDescriptor build();
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setCanDisconnect(boolean);
+ method public deprecated android.support.v7.media.MediaRouteDescriptor.Builder setConnecting(boolean);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setConnectionState(int);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setDescription(java.lang.String);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setDeviceType(int);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setEnabled(boolean);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setExtras(android.os.Bundle);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setIconUri(android.net.Uri);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setId(java.lang.String);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setName(java.lang.String);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setPlaybackStream(int);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setPlaybackType(int);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setPresentationDisplayId(int);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setSettingsActivity(android.content.IntentSender);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setVolume(int);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setVolumeHandling(int);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setVolumeMax(int);
+ }
+
+ public final class MediaRouteDiscoveryRequest {
+ ctor public MediaRouteDiscoveryRequest(android.support.v7.media.MediaRouteSelector, boolean);
+ method public android.os.Bundle asBundle();
+ method public static android.support.v7.media.MediaRouteDiscoveryRequest fromBundle(android.os.Bundle);
+ method public android.support.v7.media.MediaRouteSelector getSelector();
+ method public boolean isActiveScan();
+ method public boolean isValid();
+ }
+
+ public abstract class MediaRouteProvider {
+ ctor public MediaRouteProvider(android.content.Context);
+ method public final android.content.Context getContext();
+ method public final android.support.v7.media.MediaRouteProviderDescriptor getDescriptor();
+ method public final android.support.v7.media.MediaRouteDiscoveryRequest getDiscoveryRequest();
+ method public final android.os.Handler getHandler();
+ method public final android.support.v7.media.MediaRouteProvider.ProviderMetadata getMetadata();
+ method public android.support.v7.media.MediaRouteProvider.RouteController onCreateRouteController(java.lang.String);
+ method public void onDiscoveryRequestChanged(android.support.v7.media.MediaRouteDiscoveryRequest);
+ method public final void setCallback(android.support.v7.media.MediaRouteProvider.Callback);
+ method public final void setDescriptor(android.support.v7.media.MediaRouteProviderDescriptor);
+ method public final void setDiscoveryRequest(android.support.v7.media.MediaRouteDiscoveryRequest);
+ }
+
+ public static abstract class MediaRouteProvider.Callback {
+ ctor public MediaRouteProvider.Callback();
+ method public void onDescriptorChanged(android.support.v7.media.MediaRouteProvider, android.support.v7.media.MediaRouteProviderDescriptor);
+ }
+
+ public static final class MediaRouteProvider.ProviderMetadata {
+ method public android.content.ComponentName getComponentName();
+ method public java.lang.String getPackageName();
+ }
+
+ public static abstract class MediaRouteProvider.RouteController {
+ ctor public MediaRouteProvider.RouteController();
+ method public boolean onControlRequest(android.content.Intent, android.support.v7.media.MediaRouter.ControlRequestCallback);
+ method public void onRelease();
+ method public void onSelect();
+ method public void onSetVolume(int);
+ method public void onUnselect();
+ method public void onUnselect(int);
+ method public void onUpdateVolume(int);
+ }
+
+ public final class MediaRouteProviderDescriptor {
+ method public android.os.Bundle asBundle();
+ method public static android.support.v7.media.MediaRouteProviderDescriptor fromBundle(android.os.Bundle);
+ method public java.util.List<android.support.v7.media.MediaRouteDescriptor> getRoutes();
+ method public boolean isValid();
+ }
+
+ public static final class MediaRouteProviderDescriptor.Builder {
+ ctor public MediaRouteProviderDescriptor.Builder();
+ ctor public MediaRouteProviderDescriptor.Builder(android.support.v7.media.MediaRouteProviderDescriptor);
+ method public android.support.v7.media.MediaRouteProviderDescriptor.Builder addRoute(android.support.v7.media.MediaRouteDescriptor);
+ method public android.support.v7.media.MediaRouteProviderDescriptor.Builder addRoutes(java.util.Collection<android.support.v7.media.MediaRouteDescriptor>);
+ method public android.support.v7.media.MediaRouteProviderDescriptor build();
+ }
+
+ public abstract class MediaRouteProviderService extends android.app.Service {
+ ctor public MediaRouteProviderService();
+ method public android.support.v7.media.MediaRouteProvider getMediaRouteProvider();
+ method public android.os.IBinder onBind(android.content.Intent);
+ method public abstract android.support.v7.media.MediaRouteProvider onCreateMediaRouteProvider();
+ field public static final java.lang.String SERVICE_INTERFACE = "android.media.MediaRouteProviderService";
+ }
+
+ public final class MediaRouteSelector {
+ method public android.os.Bundle asBundle();
+ method public boolean contains(android.support.v7.media.MediaRouteSelector);
+ method public static android.support.v7.media.MediaRouteSelector fromBundle(android.os.Bundle);
+ method public java.util.List<java.lang.String> getControlCategories();
+ method public boolean hasControlCategory(java.lang.String);
+ method public boolean isEmpty();
+ method public boolean isValid();
+ method public boolean matchesControlFilters(java.util.List<android.content.IntentFilter>);
+ field public static final android.support.v7.media.MediaRouteSelector EMPTY;
+ }
+
+ public static final class MediaRouteSelector.Builder {
+ ctor public MediaRouteSelector.Builder();
+ ctor public MediaRouteSelector.Builder(android.support.v7.media.MediaRouteSelector);
+ method public android.support.v7.media.MediaRouteSelector.Builder addControlCategories(java.util.Collection<java.lang.String>);
+ method public android.support.v7.media.MediaRouteSelector.Builder addControlCategory(java.lang.String);
+ method public android.support.v7.media.MediaRouteSelector.Builder addSelector(android.support.v7.media.MediaRouteSelector);
+ method public android.support.v7.media.MediaRouteSelector build();
+ }
+
+ public final class MediaRouter {
+ method public void addCallback(android.support.v7.media.MediaRouteSelector, android.support.v7.media.MediaRouter.Callback);
+ method public void addCallback(android.support.v7.media.MediaRouteSelector, android.support.v7.media.MediaRouter.Callback, int);
+ method public void addProvider(android.support.v7.media.MediaRouteProvider);
+ method public void addRemoteControlClient(java.lang.Object);
+ method public android.support.v7.media.MediaRouter.RouteInfo getBluetoothRoute();
+ method public android.support.v7.media.MediaRouter.RouteInfo getDefaultRoute();
+ method public static android.support.v7.media.MediaRouter getInstance(android.content.Context);
+ method public android.support.v4.media.session.MediaSessionCompat.Token getMediaSessionToken();
+ method public java.util.List<android.support.v7.media.MediaRouter.ProviderInfo> getProviders();
+ method public java.util.List<android.support.v7.media.MediaRouter.RouteInfo> getRoutes();
+ method public android.support.v7.media.MediaRouter.RouteInfo getSelectedRoute();
+ method public boolean isRouteAvailable(android.support.v7.media.MediaRouteSelector, int);
+ method public void removeCallback(android.support.v7.media.MediaRouter.Callback);
+ method public void removeProvider(android.support.v7.media.MediaRouteProvider);
+ method public void removeRemoteControlClient(java.lang.Object);
+ method public void selectRoute(android.support.v7.media.MediaRouter.RouteInfo);
+ method public void setMediaSession(java.lang.Object);
+ method public void setMediaSessionCompat(android.support.v4.media.session.MediaSessionCompat);
+ method public void unselect(int);
+ method public android.support.v7.media.MediaRouter.RouteInfo updateSelectedRoute(android.support.v7.media.MediaRouteSelector);
+ field public static final int AVAILABILITY_FLAG_IGNORE_DEFAULT_ROUTE = 1; // 0x1
+ field public static final int AVAILABILITY_FLAG_REQUIRE_MATCH = 2; // 0x2
+ field public static final int CALLBACK_FLAG_FORCE_DISCOVERY = 8; // 0x8
+ field public static final int CALLBACK_FLAG_PERFORM_ACTIVE_SCAN = 1; // 0x1
+ field public static final int CALLBACK_FLAG_REQUEST_DISCOVERY = 4; // 0x4
+ field public static final int CALLBACK_FLAG_UNFILTERED_EVENTS = 2; // 0x2
+ field public static final int UNSELECT_REASON_DISCONNECTED = 1; // 0x1
+ field public static final int UNSELECT_REASON_ROUTE_CHANGED = 3; // 0x3
+ field public static final int UNSELECT_REASON_STOPPED = 2; // 0x2
+ field public static final int UNSELECT_REASON_UNKNOWN = 0; // 0x0
+ }
+
+ public static abstract class MediaRouter.Callback {
+ ctor public MediaRouter.Callback();
+ method public void onProviderAdded(android.support.v7.media.MediaRouter, android.support.v7.media.MediaRouter.ProviderInfo);
+ method public void onProviderChanged(android.support.v7.media.MediaRouter, android.support.v7.media.MediaRouter.ProviderInfo);
+ method public void onProviderRemoved(android.support.v7.media.MediaRouter, android.support.v7.media.MediaRouter.ProviderInfo);
+ method public void onRouteAdded(android.support.v7.media.MediaRouter, android.support.v7.media.MediaRouter.RouteInfo);
+ method public void onRouteChanged(android.support.v7.media.MediaRouter, android.support.v7.media.MediaRouter.RouteInfo);
+ method public void onRoutePresentationDisplayChanged(android.support.v7.media.MediaRouter, android.support.v7.media.MediaRouter.RouteInfo);
+ method public void onRouteRemoved(android.support.v7.media.MediaRouter, android.support.v7.media.MediaRouter.RouteInfo);
+ method public void onRouteSelected(android.support.v7.media.MediaRouter, android.support.v7.media.MediaRouter.RouteInfo);
+ method public void onRouteUnselected(android.support.v7.media.MediaRouter, android.support.v7.media.MediaRouter.RouteInfo);
+ method public void onRouteUnselected(android.support.v7.media.MediaRouter, android.support.v7.media.MediaRouter.RouteInfo, int);
+ method public void onRouteVolumeChanged(android.support.v7.media.MediaRouter, android.support.v7.media.MediaRouter.RouteInfo);
+ }
+
+ public static abstract class MediaRouter.ControlRequestCallback {
+ ctor public MediaRouter.ControlRequestCallback();
+ method public void onError(java.lang.String, android.os.Bundle);
+ method public void onResult(android.os.Bundle);
+ }
+
+ public static final class MediaRouter.ProviderInfo {
+ method public android.content.ComponentName getComponentName();
+ method public java.lang.String getPackageName();
+ method public android.support.v7.media.MediaRouteProvider getProviderInstance();
+ method public java.util.List<android.support.v7.media.MediaRouter.RouteInfo> getRoutes();
+ }
+
+ public static class MediaRouter.RouteInfo {
+ method public boolean canDisconnect();
+ method public int getConnectionState();
+ method public java.util.List<android.content.IntentFilter> getControlFilters();
+ method public java.lang.String getDescription();
+ method public int getDeviceType();
+ method public android.os.Bundle getExtras();
+ method public android.net.Uri getIconUri();
+ method public java.lang.String getId();
+ method public java.lang.String getName();
+ method public int getPlaybackStream();
+ method public int getPlaybackType();
+ method public android.view.Display getPresentationDisplay();
+ method public android.support.v7.media.MediaRouter.ProviderInfo getProvider();
+ method public android.content.IntentSender getSettingsIntent();
+ method public int getVolume();
+ method public int getVolumeHandling();
+ method public int getVolumeMax();
+ method public boolean isBluetooth();
+ method public boolean isConnecting();
+ method public boolean isDefault();
+ method public boolean isDeviceSpeaker();
+ method public boolean isEnabled();
+ method public boolean isSelected();
+ method public boolean matchesSelector(android.support.v7.media.MediaRouteSelector);
+ method public void requestSetVolume(int);
+ method public void requestUpdateVolume(int);
+ method public void select();
+ method public void sendControlRequest(android.content.Intent, android.support.v7.media.MediaRouter.ControlRequestCallback);
+ method public boolean supportsControlAction(java.lang.String, java.lang.String);
+ method public boolean supportsControlCategory(java.lang.String);
+ method public boolean supportsControlRequest(android.content.Intent);
+ field public static final int CONNECTION_STATE_CONNECTED = 2; // 0x2
+ field public static final int CONNECTION_STATE_CONNECTING = 1; // 0x1
+ field public static final int CONNECTION_STATE_DISCONNECTED = 0; // 0x0
+ field public static final int DEVICE_TYPE_SPEAKER = 2; // 0x2
+ field public static final int DEVICE_TYPE_TV = 1; // 0x1
+ field public static final int PLAYBACK_TYPE_LOCAL = 0; // 0x0
+ field public static final int PLAYBACK_TYPE_REMOTE = 1; // 0x1
+ field public static final int PLAYBACK_VOLUME_FIXED = 0; // 0x0
+ field public static final int PLAYBACK_VOLUME_VARIABLE = 1; // 0x1
+ }
+
+ public final class MediaSessionStatus {
+ method public android.os.Bundle asBundle();
+ method public static android.support.v7.media.MediaSessionStatus fromBundle(android.os.Bundle);
+ method public android.os.Bundle getExtras();
+ method public int getSessionState();
+ method public long getTimestamp();
+ method public boolean isQueuePaused();
+ field public static final int SESSION_STATE_ACTIVE = 0; // 0x0
+ field public static final int SESSION_STATE_ENDED = 1; // 0x1
+ field public static final int SESSION_STATE_INVALIDATED = 2; // 0x2
+ }
+
+ public static final class MediaSessionStatus.Builder {
+ ctor public MediaSessionStatus.Builder(int);
+ ctor public MediaSessionStatus.Builder(android.support.v7.media.MediaSessionStatus);
+ method public android.support.v7.media.MediaSessionStatus build();
+ method public android.support.v7.media.MediaSessionStatus.Builder setExtras(android.os.Bundle);
+ method public android.support.v7.media.MediaSessionStatus.Builder setQueuePaused(boolean);
+ method public android.support.v7.media.MediaSessionStatus.Builder setSessionState(int);
+ method public android.support.v7.media.MediaSessionStatus.Builder setTimestamp(long);
+ }
+
+ public class RemotePlaybackClient {
+ ctor public RemotePlaybackClient(android.content.Context, android.support.v7.media.MediaRouter.RouteInfo);
+ method public void endSession(android.os.Bundle, android.support.v7.media.RemotePlaybackClient.SessionActionCallback);
+ method public void enqueue(android.net.Uri, java.lang.String, android.os.Bundle, long, android.os.Bundle, android.support.v7.media.RemotePlaybackClient.ItemActionCallback);
+ method public java.lang.String getSessionId();
+ method public void getSessionStatus(android.os.Bundle, android.support.v7.media.RemotePlaybackClient.SessionActionCallback);
+ method public void getStatus(java.lang.String, android.os.Bundle, android.support.v7.media.RemotePlaybackClient.ItemActionCallback);
+ method public boolean hasSession();
+ method public boolean isMessagingSupported();
+ method public boolean isQueuingSupported();
+ method public boolean isRemotePlaybackSupported();
+ method public boolean isSessionManagementSupported();
+ method public void pause(android.os.Bundle, android.support.v7.media.RemotePlaybackClient.SessionActionCallback);
+ method public void play(android.net.Uri, java.lang.String, android.os.Bundle, long, android.os.Bundle, android.support.v7.media.RemotePlaybackClient.ItemActionCallback);
+ method public void release();
+ method public void remove(java.lang.String, android.os.Bundle, android.support.v7.media.RemotePlaybackClient.ItemActionCallback);
+ method public void resume(android.os.Bundle, android.support.v7.media.RemotePlaybackClient.SessionActionCallback);
+ method public void seek(java.lang.String, long, android.os.Bundle, android.support.v7.media.RemotePlaybackClient.ItemActionCallback);
+ method public void sendMessage(android.os.Bundle, android.support.v7.media.RemotePlaybackClient.SessionActionCallback);
+ method public void setOnMessageReceivedListener(android.support.v7.media.RemotePlaybackClient.OnMessageReceivedListener);
+ method public void setSessionId(java.lang.String);
+ method public void setStatusCallback(android.support.v7.media.RemotePlaybackClient.StatusCallback);
+ method public void startSession(android.os.Bundle, android.support.v7.media.RemotePlaybackClient.SessionActionCallback);
+ method public void stop(android.os.Bundle, android.support.v7.media.RemotePlaybackClient.SessionActionCallback);
+ }
+
+ public static abstract class RemotePlaybackClient.ActionCallback {
+ ctor public RemotePlaybackClient.ActionCallback();
+ method public void onError(java.lang.String, int, android.os.Bundle);
+ }
+
+ public static abstract class RemotePlaybackClient.ItemActionCallback extends android.support.v7.media.RemotePlaybackClient.ActionCallback {
+ ctor public RemotePlaybackClient.ItemActionCallback();
+ method public void onResult(android.os.Bundle, java.lang.String, android.support.v7.media.MediaSessionStatus, java.lang.String, android.support.v7.media.MediaItemStatus);
+ }
+
+ public static abstract interface RemotePlaybackClient.OnMessageReceivedListener {
+ method public abstract void onMessageReceived(java.lang.String, android.os.Bundle);
+ }
+
+ public static abstract class RemotePlaybackClient.SessionActionCallback extends android.support.v7.media.RemotePlaybackClient.ActionCallback {
+ ctor public RemotePlaybackClient.SessionActionCallback();
+ method public void onResult(android.os.Bundle, java.lang.String, android.support.v7.media.MediaSessionStatus);
+ }
+
+ public static abstract class RemotePlaybackClient.StatusCallback {
+ ctor public RemotePlaybackClient.StatusCallback();
+ method public void onItemStatusChanged(android.os.Bundle, java.lang.String, android.support.v7.media.MediaSessionStatus, java.lang.String, android.support.v7.media.MediaItemStatus);
+ method public void onSessionChanged(java.lang.String);
+ method public void onSessionStatusChanged(android.os.Bundle, java.lang.String, android.support.v7.media.MediaSessionStatus);
+ }
+
+}
+
diff --git a/v7/mediarouter/api/27.0.0.txt b/v7/mediarouter/api/27.0.0.txt
new file mode 100644
index 0000000..7670978
--- /dev/null
+++ b/v7/mediarouter/api/27.0.0.txt
@@ -0,0 +1,476 @@
+package android.support.v7.app {
+
+ public class MediaRouteActionProvider extends android.support.v4.view.ActionProvider {
+ ctor public MediaRouteActionProvider(android.content.Context);
+ method public android.support.v7.app.MediaRouteDialogFactory getDialogFactory();
+ method public android.support.v7.app.MediaRouteButton getMediaRouteButton();
+ method public android.support.v7.media.MediaRouteSelector getRouteSelector();
+ method public android.view.View onCreateActionView();
+ method public android.support.v7.app.MediaRouteButton onCreateMediaRouteButton();
+ method public void setDialogFactory(android.support.v7.app.MediaRouteDialogFactory);
+ method public void setRouteSelector(android.support.v7.media.MediaRouteSelector);
+ }
+
+ public class MediaRouteButton extends android.view.View {
+ ctor public MediaRouteButton(android.content.Context);
+ ctor public MediaRouteButton(android.content.Context, android.util.AttributeSet);
+ ctor public MediaRouteButton(android.content.Context, android.util.AttributeSet, int);
+ method public android.support.v7.app.MediaRouteDialogFactory getDialogFactory();
+ method public android.support.v7.media.MediaRouteSelector getRouteSelector();
+ method public void onAttachedToWindow();
+ method public void onDetachedFromWindow();
+ method public void setDialogFactory(android.support.v7.app.MediaRouteDialogFactory);
+ method public void setRemoteIndicatorDrawable(android.graphics.drawable.Drawable);
+ method public void setRouteSelector(android.support.v7.media.MediaRouteSelector);
+ method public boolean showDialog();
+ }
+
+ public class MediaRouteChooserDialog extends android.support.v7.app.AppCompatDialog {
+ ctor public MediaRouteChooserDialog(android.content.Context);
+ ctor public MediaRouteChooserDialog(android.content.Context, int);
+ method public android.support.v7.media.MediaRouteSelector getRouteSelector();
+ method public boolean onFilterRoute(android.support.v7.media.MediaRouter.RouteInfo);
+ method public void onFilterRoutes(java.util.List<android.support.v7.media.MediaRouter.RouteInfo>);
+ method public void refreshRoutes();
+ method public void setRouteSelector(android.support.v7.media.MediaRouteSelector);
+ }
+
+ public class MediaRouteChooserDialogFragment extends android.support.v4.app.DialogFragment {
+ ctor public MediaRouteChooserDialogFragment();
+ method public android.support.v7.media.MediaRouteSelector getRouteSelector();
+ method public android.support.v7.app.MediaRouteChooserDialog onCreateChooserDialog(android.content.Context, android.os.Bundle);
+ method public void setRouteSelector(android.support.v7.media.MediaRouteSelector);
+ }
+
+ public class MediaRouteControllerDialog extends android.support.v7.app.AlertDialog {
+ ctor public MediaRouteControllerDialog(android.content.Context);
+ ctor public MediaRouteControllerDialog(android.content.Context, int);
+ method public android.view.View getMediaControlView();
+ method public android.support.v4.media.session.MediaSessionCompat.Token getMediaSession();
+ method public android.support.v7.media.MediaRouter.RouteInfo getRoute();
+ method public boolean isVolumeControlEnabled();
+ method public android.view.View onCreateMediaControlView(android.os.Bundle);
+ method public void setVolumeControlEnabled(boolean);
+ }
+
+ public class MediaRouteControllerDialogFragment extends android.support.v4.app.DialogFragment {
+ ctor public MediaRouteControllerDialogFragment();
+ method public android.support.v7.app.MediaRouteControllerDialog onCreateControllerDialog(android.content.Context, android.os.Bundle);
+ }
+
+ public class MediaRouteDialogFactory {
+ ctor public MediaRouteDialogFactory();
+ method public static android.support.v7.app.MediaRouteDialogFactory getDefault();
+ method public android.support.v7.app.MediaRouteChooserDialogFragment onCreateChooserDialogFragment();
+ method public android.support.v7.app.MediaRouteControllerDialogFragment onCreateControllerDialogFragment();
+ }
+
+ public class MediaRouteDiscoveryFragment extends android.support.v4.app.Fragment {
+ ctor public MediaRouteDiscoveryFragment();
+ method public android.support.v7.media.MediaRouter getMediaRouter();
+ method public android.support.v7.media.MediaRouteSelector getRouteSelector();
+ method public android.support.v7.media.MediaRouter.Callback onCreateCallback();
+ method public int onPrepareCallbackFlags();
+ method public void setRouteSelector(android.support.v7.media.MediaRouteSelector);
+ }
+
+}
+
+package android.support.v7.media {
+
+ public final class MediaControlIntent {
+ field public static final java.lang.String ACTION_END_SESSION = "android.media.intent.action.END_SESSION";
+ field public static final java.lang.String ACTION_ENQUEUE = "android.media.intent.action.ENQUEUE";
+ field public static final java.lang.String ACTION_GET_SESSION_STATUS = "android.media.intent.action.GET_SESSION_STATUS";
+ field public static final java.lang.String ACTION_GET_STATUS = "android.media.intent.action.GET_STATUS";
+ field public static final java.lang.String ACTION_PAUSE = "android.media.intent.action.PAUSE";
+ field public static final java.lang.String ACTION_PLAY = "android.media.intent.action.PLAY";
+ field public static final java.lang.String ACTION_REMOVE = "android.media.intent.action.REMOVE";
+ field public static final java.lang.String ACTION_RESUME = "android.media.intent.action.RESUME";
+ field public static final java.lang.String ACTION_SEEK = "android.media.intent.action.SEEK";
+ field public static final java.lang.String ACTION_SEND_MESSAGE = "android.media.intent.action.SEND_MESSAGE";
+ field public static final java.lang.String ACTION_START_SESSION = "android.media.intent.action.START_SESSION";
+ field public static final java.lang.String ACTION_STOP = "android.media.intent.action.STOP";
+ field public static final java.lang.String CATEGORY_LIVE_AUDIO = "android.media.intent.category.LIVE_AUDIO";
+ field public static final java.lang.String CATEGORY_LIVE_VIDEO = "android.media.intent.category.LIVE_VIDEO";
+ field public static final java.lang.String CATEGORY_REMOTE_PLAYBACK = "android.media.intent.category.REMOTE_PLAYBACK";
+ field public static final int ERROR_INVALID_ITEM_ID = 3; // 0x3
+ field public static final int ERROR_INVALID_SESSION_ID = 2; // 0x2
+ field public static final int ERROR_UNKNOWN = 0; // 0x0
+ field public static final int ERROR_UNSUPPORTED_OPERATION = 1; // 0x1
+ field public static final java.lang.String EXTRA_ERROR_CODE = "android.media.intent.extra.ERROR_CODE";
+ field public static final java.lang.String EXTRA_ITEM_CONTENT_POSITION = "android.media.intent.extra.ITEM_POSITION";
+ field public static final java.lang.String EXTRA_ITEM_HTTP_HEADERS = "android.media.intent.extra.HTTP_HEADERS";
+ field public static final java.lang.String EXTRA_ITEM_ID = "android.media.intent.extra.ITEM_ID";
+ field public static final java.lang.String EXTRA_ITEM_METADATA = "android.media.intent.extra.ITEM_METADATA";
+ field public static final java.lang.String EXTRA_ITEM_STATUS = "android.media.intent.extra.ITEM_STATUS";
+ field public static final java.lang.String EXTRA_ITEM_STATUS_UPDATE_RECEIVER = "android.media.intent.extra.ITEM_STATUS_UPDATE_RECEIVER";
+ field public static final java.lang.String EXTRA_MESSAGE = "android.media.intent.extra.MESSAGE";
+ field public static final java.lang.String EXTRA_MESSAGE_RECEIVER = "android.media.intent.extra.MESSAGE_RECEIVER";
+ field public static final java.lang.String EXTRA_SESSION_ID = "android.media.intent.extra.SESSION_ID";
+ field public static final java.lang.String EXTRA_SESSION_STATUS = "android.media.intent.extra.SESSION_STATUS";
+ field public static final java.lang.String EXTRA_SESSION_STATUS_UPDATE_RECEIVER = "android.media.intent.extra.SESSION_STATUS_UPDATE_RECEIVER";
+ }
+
+ public final class MediaItemMetadata {
+ field public static final java.lang.String KEY_ALBUM_ARTIST = "android.media.metadata.ALBUM_ARTIST";
+ field public static final java.lang.String KEY_ALBUM_TITLE = "android.media.metadata.ALBUM_TITLE";
+ field public static final java.lang.String KEY_ARTIST = "android.media.metadata.ARTIST";
+ field public static final java.lang.String KEY_ARTWORK_URI = "android.media.metadata.ARTWORK_URI";
+ field public static final java.lang.String KEY_AUTHOR = "android.media.metadata.AUTHOR";
+ field public static final java.lang.String KEY_COMPOSER = "android.media.metadata.COMPOSER";
+ field public static final java.lang.String KEY_DISC_NUMBER = "android.media.metadata.DISC_NUMBER";
+ field public static final java.lang.String KEY_DURATION = "android.media.metadata.DURATION";
+ field public static final java.lang.String KEY_TITLE = "android.media.metadata.TITLE";
+ field public static final java.lang.String KEY_TRACK_NUMBER = "android.media.metadata.TRACK_NUMBER";
+ field public static final java.lang.String KEY_YEAR = "android.media.metadata.YEAR";
+ }
+
+ public final class MediaItemStatus {
+ method public android.os.Bundle asBundle();
+ method public static android.support.v7.media.MediaItemStatus fromBundle(android.os.Bundle);
+ method public long getContentDuration();
+ method public long getContentPosition();
+ method public android.os.Bundle getExtras();
+ method public int getPlaybackState();
+ method public long getTimestamp();
+ field public static final java.lang.String EXTRA_HTTP_RESPONSE_HEADERS = "android.media.status.extra.HTTP_RESPONSE_HEADERS";
+ field public static final java.lang.String EXTRA_HTTP_STATUS_CODE = "android.media.status.extra.HTTP_STATUS_CODE";
+ field public static final int PLAYBACK_STATE_BUFFERING = 3; // 0x3
+ field public static final int PLAYBACK_STATE_CANCELED = 5; // 0x5
+ field public static final int PLAYBACK_STATE_ERROR = 7; // 0x7
+ field public static final int PLAYBACK_STATE_FINISHED = 4; // 0x4
+ field public static final int PLAYBACK_STATE_INVALIDATED = 6; // 0x6
+ field public static final int PLAYBACK_STATE_PAUSED = 2; // 0x2
+ field public static final int PLAYBACK_STATE_PENDING = 0; // 0x0
+ field public static final int PLAYBACK_STATE_PLAYING = 1; // 0x1
+ }
+
+ public static final class MediaItemStatus.Builder {
+ ctor public MediaItemStatus.Builder(int);
+ ctor public MediaItemStatus.Builder(android.support.v7.media.MediaItemStatus);
+ method public android.support.v7.media.MediaItemStatus build();
+ method public android.support.v7.media.MediaItemStatus.Builder setContentDuration(long);
+ method public android.support.v7.media.MediaItemStatus.Builder setContentPosition(long);
+ method public android.support.v7.media.MediaItemStatus.Builder setExtras(android.os.Bundle);
+ method public android.support.v7.media.MediaItemStatus.Builder setPlaybackState(int);
+ method public android.support.v7.media.MediaItemStatus.Builder setTimestamp(long);
+ }
+
+ public final class MediaRouteDescriptor {
+ method public android.os.Bundle asBundle();
+ method public boolean canDisconnectAndKeepPlaying();
+ method public static android.support.v7.media.MediaRouteDescriptor fromBundle(android.os.Bundle);
+ method public int getConnectionState();
+ method public java.util.List<android.content.IntentFilter> getControlFilters();
+ method public java.lang.String getDescription();
+ method public int getDeviceType();
+ method public android.os.Bundle getExtras();
+ method public android.net.Uri getIconUri();
+ method public java.lang.String getId();
+ method public java.lang.String getName();
+ method public int getPlaybackStream();
+ method public int getPlaybackType();
+ method public int getPresentationDisplayId();
+ method public android.content.IntentSender getSettingsActivity();
+ method public int getVolume();
+ method public int getVolumeHandling();
+ method public int getVolumeMax();
+ method public deprecated boolean isConnecting();
+ method public boolean isEnabled();
+ method public boolean isValid();
+ }
+
+ public static final class MediaRouteDescriptor.Builder {
+ ctor public MediaRouteDescriptor.Builder(java.lang.String, java.lang.String);
+ ctor public MediaRouteDescriptor.Builder(android.support.v7.media.MediaRouteDescriptor);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder addControlFilter(android.content.IntentFilter);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder addControlFilters(java.util.Collection<android.content.IntentFilter>);
+ method public android.support.v7.media.MediaRouteDescriptor build();
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setCanDisconnect(boolean);
+ method public deprecated android.support.v7.media.MediaRouteDescriptor.Builder setConnecting(boolean);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setConnectionState(int);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setDescription(java.lang.String);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setDeviceType(int);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setEnabled(boolean);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setExtras(android.os.Bundle);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setIconUri(android.net.Uri);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setId(java.lang.String);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setName(java.lang.String);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setPlaybackStream(int);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setPlaybackType(int);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setPresentationDisplayId(int);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setSettingsActivity(android.content.IntentSender);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setVolume(int);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setVolumeHandling(int);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setVolumeMax(int);
+ }
+
+ public final class MediaRouteDiscoveryRequest {
+ ctor public MediaRouteDiscoveryRequest(android.support.v7.media.MediaRouteSelector, boolean);
+ method public android.os.Bundle asBundle();
+ method public static android.support.v7.media.MediaRouteDiscoveryRequest fromBundle(android.os.Bundle);
+ method public android.support.v7.media.MediaRouteSelector getSelector();
+ method public boolean isActiveScan();
+ method public boolean isValid();
+ }
+
+ public abstract class MediaRouteProvider {
+ ctor public MediaRouteProvider(android.content.Context);
+ method public final android.content.Context getContext();
+ method public final android.support.v7.media.MediaRouteProviderDescriptor getDescriptor();
+ method public final android.support.v7.media.MediaRouteDiscoveryRequest getDiscoveryRequest();
+ method public final android.os.Handler getHandler();
+ method public final android.support.v7.media.MediaRouteProvider.ProviderMetadata getMetadata();
+ method public android.support.v7.media.MediaRouteProvider.RouteController onCreateRouteController(java.lang.String);
+ method public void onDiscoveryRequestChanged(android.support.v7.media.MediaRouteDiscoveryRequest);
+ method public final void setCallback(android.support.v7.media.MediaRouteProvider.Callback);
+ method public final void setDescriptor(android.support.v7.media.MediaRouteProviderDescriptor);
+ method public final void setDiscoveryRequest(android.support.v7.media.MediaRouteDiscoveryRequest);
+ }
+
+ public static abstract class MediaRouteProvider.Callback {
+ ctor public MediaRouteProvider.Callback();
+ method public void onDescriptorChanged(android.support.v7.media.MediaRouteProvider, android.support.v7.media.MediaRouteProviderDescriptor);
+ }
+
+ public static final class MediaRouteProvider.ProviderMetadata {
+ method public android.content.ComponentName getComponentName();
+ method public java.lang.String getPackageName();
+ }
+
+ public static abstract class MediaRouteProvider.RouteController {
+ ctor public MediaRouteProvider.RouteController();
+ method public boolean onControlRequest(android.content.Intent, android.support.v7.media.MediaRouter.ControlRequestCallback);
+ method public void onRelease();
+ method public void onSelect();
+ method public void onSetVolume(int);
+ method public void onUnselect();
+ method public void onUnselect(int);
+ method public void onUpdateVolume(int);
+ }
+
+ public final class MediaRouteProviderDescriptor {
+ method public android.os.Bundle asBundle();
+ method public static android.support.v7.media.MediaRouteProviderDescriptor fromBundle(android.os.Bundle);
+ method public java.util.List<android.support.v7.media.MediaRouteDescriptor> getRoutes();
+ method public boolean isValid();
+ }
+
+ public static final class MediaRouteProviderDescriptor.Builder {
+ ctor public MediaRouteProviderDescriptor.Builder();
+ ctor public MediaRouteProviderDescriptor.Builder(android.support.v7.media.MediaRouteProviderDescriptor);
+ method public android.support.v7.media.MediaRouteProviderDescriptor.Builder addRoute(android.support.v7.media.MediaRouteDescriptor);
+ method public android.support.v7.media.MediaRouteProviderDescriptor.Builder addRoutes(java.util.Collection<android.support.v7.media.MediaRouteDescriptor>);
+ method public android.support.v7.media.MediaRouteProviderDescriptor build();
+ }
+
+ public abstract class MediaRouteProviderService extends android.app.Service {
+ ctor public MediaRouteProviderService();
+ method public android.support.v7.media.MediaRouteProvider getMediaRouteProvider();
+ method public android.os.IBinder onBind(android.content.Intent);
+ method public abstract android.support.v7.media.MediaRouteProvider onCreateMediaRouteProvider();
+ field public static final java.lang.String SERVICE_INTERFACE = "android.media.MediaRouteProviderService";
+ }
+
+ public final class MediaRouteSelector {
+ method public android.os.Bundle asBundle();
+ method public boolean contains(android.support.v7.media.MediaRouteSelector);
+ method public static android.support.v7.media.MediaRouteSelector fromBundle(android.os.Bundle);
+ method public java.util.List<java.lang.String> getControlCategories();
+ method public boolean hasControlCategory(java.lang.String);
+ method public boolean isEmpty();
+ method public boolean isValid();
+ method public boolean matchesControlFilters(java.util.List<android.content.IntentFilter>);
+ field public static final android.support.v7.media.MediaRouteSelector EMPTY;
+ }
+
+ public static final class MediaRouteSelector.Builder {
+ ctor public MediaRouteSelector.Builder();
+ ctor public MediaRouteSelector.Builder(android.support.v7.media.MediaRouteSelector);
+ method public android.support.v7.media.MediaRouteSelector.Builder addControlCategories(java.util.Collection<java.lang.String>);
+ method public android.support.v7.media.MediaRouteSelector.Builder addControlCategory(java.lang.String);
+ method public android.support.v7.media.MediaRouteSelector.Builder addSelector(android.support.v7.media.MediaRouteSelector);
+ method public android.support.v7.media.MediaRouteSelector build();
+ }
+
+ public final class MediaRouter {
+ method public void addCallback(android.support.v7.media.MediaRouteSelector, android.support.v7.media.MediaRouter.Callback);
+ method public void addCallback(android.support.v7.media.MediaRouteSelector, android.support.v7.media.MediaRouter.Callback, int);
+ method public void addProvider(android.support.v7.media.MediaRouteProvider);
+ method public void addRemoteControlClient(java.lang.Object);
+ method public android.support.v7.media.MediaRouter.RouteInfo getBluetoothRoute();
+ method public android.support.v7.media.MediaRouter.RouteInfo getDefaultRoute();
+ method public static android.support.v7.media.MediaRouter getInstance(android.content.Context);
+ method public android.support.v4.media.session.MediaSessionCompat.Token getMediaSessionToken();
+ method public java.util.List<android.support.v7.media.MediaRouter.ProviderInfo> getProviders();
+ method public java.util.List<android.support.v7.media.MediaRouter.RouteInfo> getRoutes();
+ method public android.support.v7.media.MediaRouter.RouteInfo getSelectedRoute();
+ method public boolean isRouteAvailable(android.support.v7.media.MediaRouteSelector, int);
+ method public void removeCallback(android.support.v7.media.MediaRouter.Callback);
+ method public void removeProvider(android.support.v7.media.MediaRouteProvider);
+ method public void removeRemoteControlClient(java.lang.Object);
+ method public void selectRoute(android.support.v7.media.MediaRouter.RouteInfo);
+ method public void setMediaSession(java.lang.Object);
+ method public void setMediaSessionCompat(android.support.v4.media.session.MediaSessionCompat);
+ method public void unselect(int);
+ method public android.support.v7.media.MediaRouter.RouteInfo updateSelectedRoute(android.support.v7.media.MediaRouteSelector);
+ field public static final int AVAILABILITY_FLAG_IGNORE_DEFAULT_ROUTE = 1; // 0x1
+ field public static final int AVAILABILITY_FLAG_REQUIRE_MATCH = 2; // 0x2
+ field public static final int CALLBACK_FLAG_FORCE_DISCOVERY = 8; // 0x8
+ field public static final int CALLBACK_FLAG_PERFORM_ACTIVE_SCAN = 1; // 0x1
+ field public static final int CALLBACK_FLAG_REQUEST_DISCOVERY = 4; // 0x4
+ field public static final int CALLBACK_FLAG_UNFILTERED_EVENTS = 2; // 0x2
+ field public static final int UNSELECT_REASON_DISCONNECTED = 1; // 0x1
+ field public static final int UNSELECT_REASON_ROUTE_CHANGED = 3; // 0x3
+ field public static final int UNSELECT_REASON_STOPPED = 2; // 0x2
+ field public static final int UNSELECT_REASON_UNKNOWN = 0; // 0x0
+ }
+
+ public static abstract class MediaRouter.Callback {
+ ctor public MediaRouter.Callback();
+ method public void onProviderAdded(android.support.v7.media.MediaRouter, android.support.v7.media.MediaRouter.ProviderInfo);
+ method public void onProviderChanged(android.support.v7.media.MediaRouter, android.support.v7.media.MediaRouter.ProviderInfo);
+ method public void onProviderRemoved(android.support.v7.media.MediaRouter, android.support.v7.media.MediaRouter.ProviderInfo);
+ method public void onRouteAdded(android.support.v7.media.MediaRouter, android.support.v7.media.MediaRouter.RouteInfo);
+ method public void onRouteChanged(android.support.v7.media.MediaRouter, android.support.v7.media.MediaRouter.RouteInfo);
+ method public void onRoutePresentationDisplayChanged(android.support.v7.media.MediaRouter, android.support.v7.media.MediaRouter.RouteInfo);
+ method public void onRouteRemoved(android.support.v7.media.MediaRouter, android.support.v7.media.MediaRouter.RouteInfo);
+ method public void onRouteSelected(android.support.v7.media.MediaRouter, android.support.v7.media.MediaRouter.RouteInfo);
+ method public void onRouteUnselected(android.support.v7.media.MediaRouter, android.support.v7.media.MediaRouter.RouteInfo);
+ method public void onRouteUnselected(android.support.v7.media.MediaRouter, android.support.v7.media.MediaRouter.RouteInfo, int);
+ method public void onRouteVolumeChanged(android.support.v7.media.MediaRouter, android.support.v7.media.MediaRouter.RouteInfo);
+ }
+
+ public static abstract class MediaRouter.ControlRequestCallback {
+ ctor public MediaRouter.ControlRequestCallback();
+ method public void onError(java.lang.String, android.os.Bundle);
+ method public void onResult(android.os.Bundle);
+ }
+
+ public static final class MediaRouter.ProviderInfo {
+ method public android.content.ComponentName getComponentName();
+ method public java.lang.String getPackageName();
+ method public android.support.v7.media.MediaRouteProvider getProviderInstance();
+ method public java.util.List<android.support.v7.media.MediaRouter.RouteInfo> getRoutes();
+ }
+
+ public static class MediaRouter.RouteInfo {
+ method public boolean canDisconnect();
+ method public int getConnectionState();
+ method public java.util.List<android.content.IntentFilter> getControlFilters();
+ method public java.lang.String getDescription();
+ method public int getDeviceType();
+ method public android.os.Bundle getExtras();
+ method public android.net.Uri getIconUri();
+ method public java.lang.String getId();
+ method public java.lang.String getName();
+ method public int getPlaybackStream();
+ method public int getPlaybackType();
+ method public android.view.Display getPresentationDisplay();
+ method public android.support.v7.media.MediaRouter.ProviderInfo getProvider();
+ method public android.content.IntentSender getSettingsIntent();
+ method public int getVolume();
+ method public int getVolumeHandling();
+ method public int getVolumeMax();
+ method public boolean isBluetooth();
+ method public boolean isConnecting();
+ method public boolean isDefault();
+ method public boolean isDeviceSpeaker();
+ method public boolean isEnabled();
+ method public boolean isSelected();
+ method public boolean matchesSelector(android.support.v7.media.MediaRouteSelector);
+ method public void requestSetVolume(int);
+ method public void requestUpdateVolume(int);
+ method public void select();
+ method public void sendControlRequest(android.content.Intent, android.support.v7.media.MediaRouter.ControlRequestCallback);
+ method public boolean supportsControlAction(java.lang.String, java.lang.String);
+ method public boolean supportsControlCategory(java.lang.String);
+ method public boolean supportsControlRequest(android.content.Intent);
+ field public static final int CONNECTION_STATE_CONNECTED = 2; // 0x2
+ field public static final int CONNECTION_STATE_CONNECTING = 1; // 0x1
+ field public static final int CONNECTION_STATE_DISCONNECTED = 0; // 0x0
+ field public static final int DEVICE_TYPE_SPEAKER = 2; // 0x2
+ field public static final int DEVICE_TYPE_TV = 1; // 0x1
+ field public static final int PLAYBACK_TYPE_LOCAL = 0; // 0x0
+ field public static final int PLAYBACK_TYPE_REMOTE = 1; // 0x1
+ field public static final int PLAYBACK_VOLUME_FIXED = 0; // 0x0
+ field public static final int PLAYBACK_VOLUME_VARIABLE = 1; // 0x1
+ }
+
+ public final class MediaSessionStatus {
+ method public android.os.Bundle asBundle();
+ method public static android.support.v7.media.MediaSessionStatus fromBundle(android.os.Bundle);
+ method public android.os.Bundle getExtras();
+ method public int getSessionState();
+ method public long getTimestamp();
+ method public boolean isQueuePaused();
+ field public static final int SESSION_STATE_ACTIVE = 0; // 0x0
+ field public static final int SESSION_STATE_ENDED = 1; // 0x1
+ field public static final int SESSION_STATE_INVALIDATED = 2; // 0x2
+ }
+
+ public static final class MediaSessionStatus.Builder {
+ ctor public MediaSessionStatus.Builder(int);
+ ctor public MediaSessionStatus.Builder(android.support.v7.media.MediaSessionStatus);
+ method public android.support.v7.media.MediaSessionStatus build();
+ method public android.support.v7.media.MediaSessionStatus.Builder setExtras(android.os.Bundle);
+ method public android.support.v7.media.MediaSessionStatus.Builder setQueuePaused(boolean);
+ method public android.support.v7.media.MediaSessionStatus.Builder setSessionState(int);
+ method public android.support.v7.media.MediaSessionStatus.Builder setTimestamp(long);
+ }
+
+ public class RemotePlaybackClient {
+ ctor public RemotePlaybackClient(android.content.Context, android.support.v7.media.MediaRouter.RouteInfo);
+ method public void endSession(android.os.Bundle, android.support.v7.media.RemotePlaybackClient.SessionActionCallback);
+ method public void enqueue(android.net.Uri, java.lang.String, android.os.Bundle, long, android.os.Bundle, android.support.v7.media.RemotePlaybackClient.ItemActionCallback);
+ method public java.lang.String getSessionId();
+ method public void getSessionStatus(android.os.Bundle, android.support.v7.media.RemotePlaybackClient.SessionActionCallback);
+ method public void getStatus(java.lang.String, android.os.Bundle, android.support.v7.media.RemotePlaybackClient.ItemActionCallback);
+ method public boolean hasSession();
+ method public boolean isMessagingSupported();
+ method public boolean isQueuingSupported();
+ method public boolean isRemotePlaybackSupported();
+ method public boolean isSessionManagementSupported();
+ method public void pause(android.os.Bundle, android.support.v7.media.RemotePlaybackClient.SessionActionCallback);
+ method public void play(android.net.Uri, java.lang.String, android.os.Bundle, long, android.os.Bundle, android.support.v7.media.RemotePlaybackClient.ItemActionCallback);
+ method public void release();
+ method public void remove(java.lang.String, android.os.Bundle, android.support.v7.media.RemotePlaybackClient.ItemActionCallback);
+ method public void resume(android.os.Bundle, android.support.v7.media.RemotePlaybackClient.SessionActionCallback);
+ method public void seek(java.lang.String, long, android.os.Bundle, android.support.v7.media.RemotePlaybackClient.ItemActionCallback);
+ method public void sendMessage(android.os.Bundle, android.support.v7.media.RemotePlaybackClient.SessionActionCallback);
+ method public void setOnMessageReceivedListener(android.support.v7.media.RemotePlaybackClient.OnMessageReceivedListener);
+ method public void setSessionId(java.lang.String);
+ method public void setStatusCallback(android.support.v7.media.RemotePlaybackClient.StatusCallback);
+ method public void startSession(android.os.Bundle, android.support.v7.media.RemotePlaybackClient.SessionActionCallback);
+ method public void stop(android.os.Bundle, android.support.v7.media.RemotePlaybackClient.SessionActionCallback);
+ }
+
+ public static abstract class RemotePlaybackClient.ActionCallback {
+ ctor public RemotePlaybackClient.ActionCallback();
+ method public void onError(java.lang.String, int, android.os.Bundle);
+ }
+
+ public static abstract class RemotePlaybackClient.ItemActionCallback extends android.support.v7.media.RemotePlaybackClient.ActionCallback {
+ ctor public RemotePlaybackClient.ItemActionCallback();
+ method public void onResult(android.os.Bundle, java.lang.String, android.support.v7.media.MediaSessionStatus, java.lang.String, android.support.v7.media.MediaItemStatus);
+ }
+
+ public static abstract interface RemotePlaybackClient.OnMessageReceivedListener {
+ method public abstract void onMessageReceived(java.lang.String, android.os.Bundle);
+ }
+
+ public static abstract class RemotePlaybackClient.SessionActionCallback extends android.support.v7.media.RemotePlaybackClient.ActionCallback {
+ ctor public RemotePlaybackClient.SessionActionCallback();
+ method public void onResult(android.os.Bundle, java.lang.String, android.support.v7.media.MediaSessionStatus);
+ }
+
+ public static abstract class RemotePlaybackClient.StatusCallback {
+ ctor public RemotePlaybackClient.StatusCallback();
+ method public void onItemStatusChanged(android.os.Bundle, java.lang.String, android.support.v7.media.MediaSessionStatus, java.lang.String, android.support.v7.media.MediaItemStatus);
+ method public void onSessionChanged(java.lang.String);
+ method public void onSessionStatusChanged(android.os.Bundle, java.lang.String, android.support.v7.media.MediaSessionStatus);
+ }
+
+}
+
diff --git a/v7/mediarouter/res/values-in/strings.xml b/v7/mediarouter/res/values-in/strings.xml
index e76b3e8..5e537af 100644
--- a/v7/mediarouter/res/values-in/strings.xml
+++ b/v7/mediarouter/res/values-in/strings.xml
@@ -18,10 +18,10 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="mr_system_route_name" msgid="5441529851481176817">"Sistem"</string>
<string name="mr_user_route_category_name" msgid="7498112907524977311">"Perangkat"</string>
- <string name="mr_button_content_description" msgid="3698378085901466129">"Tombol Cast"</string>
- <string name="mr_cast_button_disconnected" msgid="816305490427819240">"Tombol Cast. Terputus"</string>
- <string name="mr_cast_button_connecting" msgid="2187642765091873834">"Tombol Cast. Menghubungkan"</string>
- <string name="mr_cast_button_connected" msgid="5088427771788648085">"Tombol Cast. Terhubung"</string>
+ <string name="mr_button_content_description" msgid="3698378085901466129">"Tombol transmisi"</string>
+ <string name="mr_cast_button_disconnected" msgid="816305490427819240">"Tombol transmisi. Terputus"</string>
+ <string name="mr_cast_button_connecting" msgid="2187642765091873834">"Tombol transmisi. Menghubungkan"</string>
+ <string name="mr_cast_button_connected" msgid="5088427771788648085">"Tombol transmisi. Terhubung"</string>
<string name="mr_chooser_title" msgid="414301941546135990">"Transmisikan ke"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Mencari perangkat"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Putuskan sambungan"</string>
diff --git a/v7/mediarouter/res/values-ml/strings.xml b/v7/mediarouter/res/values-ml/strings.xml
index 62258fb..c7b50be 100644
--- a/v7/mediarouter/res/values-ml/strings.xml
+++ b/v7/mediarouter/res/values-ml/strings.xml
@@ -26,7 +26,7 @@
<string name="mr_chooser_searching" msgid="6349900579507521956">"ഉപകരണങ്ങൾ കണ്ടെത്തുന്നു"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"വിച്ഛേദിക്കുക"</string>
<string name="mr_controller_stop_casting" msgid="8857886794086583226">"കാസ്റ്റുചെയ്യൽ നിർത്തുക"</string>
- <string name="mr_controller_close_description" msgid="7333862312480583260">"അവസാനിപ്പിക്കുക"</string>
+ <string name="mr_controller_close_description" msgid="7333862312480583260">"അടയ്ക്കുക"</string>
<string name="mr_controller_play" msgid="683634565969987458">"പ്ലേ ചെയ്യുക"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"തൽക്കാലം നിർത്തൂ"</string>
<string name="mr_controller_stop" msgid="735874641921425123">"നിര്ത്തുക"</string>
diff --git a/v7/mediarouter/res/values-ta/strings.xml b/v7/mediarouter/res/values-ta/strings.xml
index 9888472..99c6172 100644
--- a/v7/mediarouter/res/values-ta/strings.xml
+++ b/v7/mediarouter/res/values-ta/strings.xml
@@ -22,7 +22,7 @@
<string name="mr_cast_button_disconnected" msgid="816305490427819240">"அனுப்புதல் பொத்தான். துண்டிக்கப்பட்டது"</string>
<string name="mr_cast_button_connecting" msgid="2187642765091873834">"அனுப்புதல் பொத்தான். இணைக்கிறது"</string>
<string name="mr_cast_button_connected" msgid="5088427771788648085">"அனுப்புதல் பொத்தான். இணைக்கப்பட்டது"</string>
- <string name="mr_chooser_title" msgid="414301941546135990">"இதற்கு அனுப்பு"</string>
+ <string name="mr_chooser_title" msgid="414301941546135990">"இதில் திரையிடு"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"சாதனங்களைத் தேடுகிறது"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"தொடர்பைத் துண்டி"</string>
<string name="mr_controller_stop_casting" msgid="8857886794086583226">"அனுப்புவதை நிறுத்து"</string>
diff --git a/v7/mediarouter/res/values-tr/strings.xml b/v7/mediarouter/res/values-tr/strings.xml
index 8189092..a0eb2e4 100644
--- a/v7/mediarouter/res/values-tr/strings.xml
+++ b/v7/mediarouter/res/values-tr/strings.xml
@@ -18,7 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="mr_system_route_name" msgid="5441529851481176817">"Sistem"</string>
<string name="mr_user_route_category_name" msgid="7498112907524977311">"Cihazlar"</string>
- <string name="mr_button_content_description" msgid="3698378085901466129">"Yayınla düğmesi"</string>
+ <string name="mr_button_content_description" msgid="3698378085901466129">"Yayın düğmesi"</string>
<string name="mr_cast_button_disconnected" msgid="816305490427819240">"Yayınla düğmesi. Bağlantı kesildi"</string>
<string name="mr_cast_button_connecting" msgid="2187642765091873834">"Yayınla düğmesi. Bağlanıyor"</string>
<string name="mr_cast_button_connected" msgid="5088427771788648085">"Yayınla düğmesi. Bağlandı"</string>
diff --git a/v7/palette/AndroidManifest.xml b/v7/palette/AndroidManifest.xml
index 491cc8e..61bddd2 100644
--- a/v7/palette/AndroidManifest.xml
+++ b/v7/palette/AndroidManifest.xml
@@ -16,8 +16,4 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.support.v7.palette">
<uses-sdk android:minSdkVersion="14"/>
- <application>
- <meta-data android:name="android.support.v7.palette.VERSION"
- android:value="${support-version}" />
- </application>
</manifest>
diff --git a/v7/palette/api/26.1.0.txt b/v7/palette/api/26.1.0.txt
new file mode 100644
index 0000000..2ff5fd3
--- /dev/null
+++ b/v7/palette/api/26.1.0.txt
@@ -0,0 +1,99 @@
+package android.support.v7.graphics {
+
+ public final class Palette {
+ method public static android.support.v7.graphics.Palette.Builder from(android.graphics.Bitmap);
+ method public static android.support.v7.graphics.Palette from(java.util.List<android.support.v7.graphics.Palette.Swatch>);
+ method public static deprecated android.support.v7.graphics.Palette generate(android.graphics.Bitmap);
+ method public static deprecated android.support.v7.graphics.Palette generate(android.graphics.Bitmap, int);
+ method public static deprecated android.os.AsyncTask<android.graphics.Bitmap, java.lang.Void, android.support.v7.graphics.Palette> generateAsync(android.graphics.Bitmap, android.support.v7.graphics.Palette.PaletteAsyncListener);
+ method public static deprecated android.os.AsyncTask<android.graphics.Bitmap, java.lang.Void, android.support.v7.graphics.Palette> generateAsync(android.graphics.Bitmap, int, android.support.v7.graphics.Palette.PaletteAsyncListener);
+ method public int getColorForTarget(android.support.v7.graphics.Target, int);
+ method public int getDarkMutedColor(int);
+ method public android.support.v7.graphics.Palette.Swatch getDarkMutedSwatch();
+ method public int getDarkVibrantColor(int);
+ method public android.support.v7.graphics.Palette.Swatch getDarkVibrantSwatch();
+ method public int getDominantColor(int);
+ method public android.support.v7.graphics.Palette.Swatch getDominantSwatch();
+ method public int getLightMutedColor(int);
+ method public android.support.v7.graphics.Palette.Swatch getLightMutedSwatch();
+ method public int getLightVibrantColor(int);
+ method public android.support.v7.graphics.Palette.Swatch getLightVibrantSwatch();
+ method public int getMutedColor(int);
+ method public android.support.v7.graphics.Palette.Swatch getMutedSwatch();
+ method public android.support.v7.graphics.Palette.Swatch getSwatchForTarget(android.support.v7.graphics.Target);
+ method public java.util.List<android.support.v7.graphics.Palette.Swatch> getSwatches();
+ method public java.util.List<android.support.v7.graphics.Target> getTargets();
+ method public int getVibrantColor(int);
+ method public android.support.v7.graphics.Palette.Swatch getVibrantSwatch();
+ }
+
+ public static final class Palette.Builder {
+ ctor public Palette.Builder(android.graphics.Bitmap);
+ ctor public Palette.Builder(java.util.List<android.support.v7.graphics.Palette.Swatch>);
+ method public android.support.v7.graphics.Palette.Builder addFilter(android.support.v7.graphics.Palette.Filter);
+ method public android.support.v7.graphics.Palette.Builder addTarget(android.support.v7.graphics.Target);
+ method public android.support.v7.graphics.Palette.Builder clearFilters();
+ method public android.support.v7.graphics.Palette.Builder clearRegion();
+ method public android.support.v7.graphics.Palette.Builder clearTargets();
+ method public android.support.v7.graphics.Palette generate();
+ method public android.os.AsyncTask<android.graphics.Bitmap, java.lang.Void, android.support.v7.graphics.Palette> generate(android.support.v7.graphics.Palette.PaletteAsyncListener);
+ method public android.support.v7.graphics.Palette.Builder maximumColorCount(int);
+ method public android.support.v7.graphics.Palette.Builder resizeBitmapArea(int);
+ method public deprecated android.support.v7.graphics.Palette.Builder resizeBitmapSize(int);
+ method public android.support.v7.graphics.Palette.Builder setRegion(int, int, int, int);
+ }
+
+ public static abstract interface Palette.Filter {
+ method public abstract boolean isAllowed(int, float[]);
+ }
+
+ public static abstract interface Palette.PaletteAsyncListener {
+ method public abstract void onGenerated(android.support.v7.graphics.Palette);
+ }
+
+ public static final class Palette.Swatch {
+ ctor public Palette.Swatch(int, int);
+ method public int getBodyTextColor();
+ method public float[] getHsl();
+ method public int getPopulation();
+ method public int getRgb();
+ method public int getTitleTextColor();
+ }
+
+ public final class Target {
+ method public float getLightnessWeight();
+ method public float getMaximumLightness();
+ method public float getMaximumSaturation();
+ method public float getMinimumLightness();
+ method public float getMinimumSaturation();
+ method public float getPopulationWeight();
+ method public float getSaturationWeight();
+ method public float getTargetLightness();
+ method public float getTargetSaturation();
+ method public boolean isExclusive();
+ field public static final android.support.v7.graphics.Target DARK_MUTED;
+ field public static final android.support.v7.graphics.Target DARK_VIBRANT;
+ field public static final android.support.v7.graphics.Target LIGHT_MUTED;
+ field public static final android.support.v7.graphics.Target LIGHT_VIBRANT;
+ field public static final android.support.v7.graphics.Target MUTED;
+ field public static final android.support.v7.graphics.Target VIBRANT;
+ }
+
+ public static final class Target.Builder {
+ ctor public Target.Builder();
+ ctor public Target.Builder(android.support.v7.graphics.Target);
+ method public android.support.v7.graphics.Target build();
+ method public android.support.v7.graphics.Target.Builder setExclusive(boolean);
+ method public android.support.v7.graphics.Target.Builder setLightnessWeight(float);
+ method public android.support.v7.graphics.Target.Builder setMaximumLightness(float);
+ method public android.support.v7.graphics.Target.Builder setMaximumSaturation(float);
+ method public android.support.v7.graphics.Target.Builder setMinimumLightness(float);
+ method public android.support.v7.graphics.Target.Builder setMinimumSaturation(float);
+ method public android.support.v7.graphics.Target.Builder setPopulationWeight(float);
+ method public android.support.v7.graphics.Target.Builder setSaturationWeight(float);
+ method public android.support.v7.graphics.Target.Builder setTargetLightness(float);
+ method public android.support.v7.graphics.Target.Builder setTargetSaturation(float);
+ }
+
+}
+
diff --git a/v7/palette/api/27.0.0.txt b/v7/palette/api/27.0.0.txt
new file mode 100644
index 0000000..2ff5fd3
--- /dev/null
+++ b/v7/palette/api/27.0.0.txt
@@ -0,0 +1,99 @@
+package android.support.v7.graphics {
+
+ public final class Palette {
+ method public static android.support.v7.graphics.Palette.Builder from(android.graphics.Bitmap);
+ method public static android.support.v7.graphics.Palette from(java.util.List<android.support.v7.graphics.Palette.Swatch>);
+ method public static deprecated android.support.v7.graphics.Palette generate(android.graphics.Bitmap);
+ method public static deprecated android.support.v7.graphics.Palette generate(android.graphics.Bitmap, int);
+ method public static deprecated android.os.AsyncTask<android.graphics.Bitmap, java.lang.Void, android.support.v7.graphics.Palette> generateAsync(android.graphics.Bitmap, android.support.v7.graphics.Palette.PaletteAsyncListener);
+ method public static deprecated android.os.AsyncTask<android.graphics.Bitmap, java.lang.Void, android.support.v7.graphics.Palette> generateAsync(android.graphics.Bitmap, int, android.support.v7.graphics.Palette.PaletteAsyncListener);
+ method public int getColorForTarget(android.support.v7.graphics.Target, int);
+ method public int getDarkMutedColor(int);
+ method public android.support.v7.graphics.Palette.Swatch getDarkMutedSwatch();
+ method public int getDarkVibrantColor(int);
+ method public android.support.v7.graphics.Palette.Swatch getDarkVibrantSwatch();
+ method public int getDominantColor(int);
+ method public android.support.v7.graphics.Palette.Swatch getDominantSwatch();
+ method public int getLightMutedColor(int);
+ method public android.support.v7.graphics.Palette.Swatch getLightMutedSwatch();
+ method public int getLightVibrantColor(int);
+ method public android.support.v7.graphics.Palette.Swatch getLightVibrantSwatch();
+ method public int getMutedColor(int);
+ method public android.support.v7.graphics.Palette.Swatch getMutedSwatch();
+ method public android.support.v7.graphics.Palette.Swatch getSwatchForTarget(android.support.v7.graphics.Target);
+ method public java.util.List<android.support.v7.graphics.Palette.Swatch> getSwatches();
+ method public java.util.List<android.support.v7.graphics.Target> getTargets();
+ method public int getVibrantColor(int);
+ method public android.support.v7.graphics.Palette.Swatch getVibrantSwatch();
+ }
+
+ public static final class Palette.Builder {
+ ctor public Palette.Builder(android.graphics.Bitmap);
+ ctor public Palette.Builder(java.util.List<android.support.v7.graphics.Palette.Swatch>);
+ method public android.support.v7.graphics.Palette.Builder addFilter(android.support.v7.graphics.Palette.Filter);
+ method public android.support.v7.graphics.Palette.Builder addTarget(android.support.v7.graphics.Target);
+ method public android.support.v7.graphics.Palette.Builder clearFilters();
+ method public android.support.v7.graphics.Palette.Builder clearRegion();
+ method public android.support.v7.graphics.Palette.Builder clearTargets();
+ method public android.support.v7.graphics.Palette generate();
+ method public android.os.AsyncTask<android.graphics.Bitmap, java.lang.Void, android.support.v7.graphics.Palette> generate(android.support.v7.graphics.Palette.PaletteAsyncListener);
+ method public android.support.v7.graphics.Palette.Builder maximumColorCount(int);
+ method public android.support.v7.graphics.Palette.Builder resizeBitmapArea(int);
+ method public deprecated android.support.v7.graphics.Palette.Builder resizeBitmapSize(int);
+ method public android.support.v7.graphics.Palette.Builder setRegion(int, int, int, int);
+ }
+
+ public static abstract interface Palette.Filter {
+ method public abstract boolean isAllowed(int, float[]);
+ }
+
+ public static abstract interface Palette.PaletteAsyncListener {
+ method public abstract void onGenerated(android.support.v7.graphics.Palette);
+ }
+
+ public static final class Palette.Swatch {
+ ctor public Palette.Swatch(int, int);
+ method public int getBodyTextColor();
+ method public float[] getHsl();
+ method public int getPopulation();
+ method public int getRgb();
+ method public int getTitleTextColor();
+ }
+
+ public final class Target {
+ method public float getLightnessWeight();
+ method public float getMaximumLightness();
+ method public float getMaximumSaturation();
+ method public float getMinimumLightness();
+ method public float getMinimumSaturation();
+ method public float getPopulationWeight();
+ method public float getSaturationWeight();
+ method public float getTargetLightness();
+ method public float getTargetSaturation();
+ method public boolean isExclusive();
+ field public static final android.support.v7.graphics.Target DARK_MUTED;
+ field public static final android.support.v7.graphics.Target DARK_VIBRANT;
+ field public static final android.support.v7.graphics.Target LIGHT_MUTED;
+ field public static final android.support.v7.graphics.Target LIGHT_VIBRANT;
+ field public static final android.support.v7.graphics.Target MUTED;
+ field public static final android.support.v7.graphics.Target VIBRANT;
+ }
+
+ public static final class Target.Builder {
+ ctor public Target.Builder();
+ ctor public Target.Builder(android.support.v7.graphics.Target);
+ method public android.support.v7.graphics.Target build();
+ method public android.support.v7.graphics.Target.Builder setExclusive(boolean);
+ method public android.support.v7.graphics.Target.Builder setLightnessWeight(float);
+ method public android.support.v7.graphics.Target.Builder setMaximumLightness(float);
+ method public android.support.v7.graphics.Target.Builder setMaximumSaturation(float);
+ method public android.support.v7.graphics.Target.Builder setMinimumLightness(float);
+ method public android.support.v7.graphics.Target.Builder setMinimumSaturation(float);
+ method public android.support.v7.graphics.Target.Builder setPopulationWeight(float);
+ method public android.support.v7.graphics.Target.Builder setSaturationWeight(float);
+ method public android.support.v7.graphics.Target.Builder setTargetLightness(float);
+ method public android.support.v7.graphics.Target.Builder setTargetSaturation(float);
+ }
+
+}
+
diff --git a/v7/palette/src/main/java/android/support/v7/graphics/Palette.java b/v7/palette/src/main/java/android/support/v7/graphics/Palette.java
index b7fb054..e716fb5 100644
--- a/v7/palette/src/main/java/android/support/v7/graphics/Palette.java
+++ b/v7/palette/src/main/java/android/support/v7/graphics/Palette.java
@@ -80,7 +80,7 @@
/**
* Called when the {@link Palette} has been generated.
*/
- void onGenerated(Palette palette);
+ void onGenerated(@NonNull Palette palette);
}
static final int DEFAULT_RESIZE_BITMAP_AREA = 112 * 112;
@@ -95,7 +95,8 @@
/**
* Start generating a {@link Palette} with the returned {@link Builder} instance.
*/
- public static Builder from(Bitmap bitmap) {
+ @NonNull
+ public static Builder from(@NonNull Bitmap bitmap) {
return new Builder(bitmap);
}
@@ -104,7 +105,8 @@
* This is useful for testing, or if you want to resurrect a {@link Palette} instance from a
* list of swatches. Will return null if the {@code swatches} is null.
*/
- public static Palette from(List<Swatch> swatches) {
+ @NonNull
+ public static Palette from(@NonNull List<Swatch> swatches) {
return new Builder(swatches).generate();
}
@@ -484,6 +486,7 @@
* hsv[1] is Saturation [0...1]
* hsv[2] is Lightness [0...1]
*/
+ @NonNull
public float[] getHsl() {
if (mHsl == null) {
mHsl = new float[3];
@@ -610,7 +613,7 @@
/**
* Construct a new {@link Builder} using a source {@link Bitmap}
*/
- public Builder(Bitmap bitmap) {
+ public Builder(@NonNull Bitmap bitmap) {
if (bitmap == null || bitmap.isRecycled()) {
throw new IllegalArgumentException("Bitmap is not valid");
}
@@ -631,7 +634,7 @@
* Construct a new {@link Builder} using a list of {@link Swatch} instances.
* Typically only used for testing.
*/
- public Builder(List<Swatch> swatches) {
+ public Builder(@NonNull List<Swatch> swatches) {
if (swatches == null || swatches.isEmpty()) {
throw new IllegalArgumentException("List of Swatches is not valid");
}
@@ -850,7 +853,8 @@
* generated.
*/
@NonNull
- public AsyncTask<Bitmap, Void, Palette> generate(final PaletteAsyncListener listener) {
+ public AsyncTask<Bitmap, Void, Palette> generate(
+ @NonNull final PaletteAsyncListener listener) {
if (listener == null) {
throw new IllegalArgumentException("listener can not be null");
}
@@ -943,7 +947,7 @@
*
* @see Builder#addFilter(Filter)
*/
- boolean isAllowed(int rgb, float[] hsl);
+ boolean isAllowed(@ColorInt int rgb, @NonNull float[] hsl);
}
/**
diff --git a/v7/palette/src/main/java/android/support/v7/graphics/Target.java b/v7/palette/src/main/java/android/support/v7/graphics/Target.java
index 640970b..0eff90b 100644
--- a/v7/palette/src/main/java/android/support/v7/graphics/Target.java
+++ b/v7/palette/src/main/java/android/support/v7/graphics/Target.java
@@ -17,6 +17,7 @@
package android.support.v7.graphics;
import android.support.annotation.FloatRange;
+import android.support.annotation.NonNull;
/**
* A class which allows custom selection of colors in a {@link Palette}'s generation. Instances
@@ -122,7 +123,7 @@
setDefaultWeights();
}
- Target(Target from) {
+ Target(@NonNull Target from) {
System.arraycopy(from.mSaturationTargets, 0, mSaturationTargets, 0,
mSaturationTargets.length);
System.arraycopy(from.mLightnessTargets, 0, mLightnessTargets, 0,
@@ -295,13 +296,14 @@
/**
* Create a new builder based on an existing {@link Target}.
*/
- public Builder(Target target) {
+ public Builder(@NonNull Target target) {
mTarget = new Target(target);
}
/**
* Set the minimum saturation value for this target.
*/
+ @NonNull
public Builder setMinimumSaturation(@FloatRange(from = 0, to = 1) float value) {
mTarget.mSaturationTargets[INDEX_MIN] = value;
return this;
@@ -310,6 +312,7 @@
/**
* Set the target/ideal saturation value for this target.
*/
+ @NonNull
public Builder setTargetSaturation(@FloatRange(from = 0, to = 1) float value) {
mTarget.mSaturationTargets[INDEX_TARGET] = value;
return this;
@@ -318,6 +321,7 @@
/**
* Set the maximum saturation value for this target.
*/
+ @NonNull
public Builder setMaximumSaturation(@FloatRange(from = 0, to = 1) float value) {
mTarget.mSaturationTargets[INDEX_MAX] = value;
return this;
@@ -326,6 +330,7 @@
/**
* Set the minimum lightness value for this target.
*/
+ @NonNull
public Builder setMinimumLightness(@FloatRange(from = 0, to = 1) float value) {
mTarget.mLightnessTargets[INDEX_MIN] = value;
return this;
@@ -334,6 +339,7 @@
/**
* Set the target/ideal lightness value for this target.
*/
+ @NonNull
public Builder setTargetLightness(@FloatRange(from = 0, to = 1) float value) {
mTarget.mLightnessTargets[INDEX_TARGET] = value;
return this;
@@ -342,6 +348,7 @@
/**
* Set the maximum lightness value for this target.
*/
+ @NonNull
public Builder setMaximumLightness(@FloatRange(from = 0, to = 1) float value) {
mTarget.mLightnessTargets[INDEX_MAX] = value;
return this;
@@ -358,6 +365,7 @@
*
* @see #setTargetSaturation(float)
*/
+ @NonNull
public Builder setSaturationWeight(@FloatRange(from = 0) float weight) {
mTarget.mWeights[INDEX_WEIGHT_SAT] = weight;
return this;
@@ -374,6 +382,7 @@
*
* @see #setTargetLightness(float)
*/
+ @NonNull
public Builder setLightnessWeight(@FloatRange(from = 0) float weight) {
mTarget.mWeights[INDEX_WEIGHT_LUMA] = weight;
return this;
@@ -389,6 +398,7 @@
* <p>A weight of 0 means that it has no weight, and thus has no
* bearing on the selection.</p>
*/
+ @NonNull
public Builder setPopulationWeight(@FloatRange(from = 0) float weight) {
mTarget.mWeights[INDEX_WEIGHT_POP] = weight;
return this;
@@ -401,6 +411,7 @@
* @param exclusive true if any the color is exclusive to this target, or false is the
* color can be selected for other targets.
*/
+ @NonNull
public Builder setExclusive(boolean exclusive) {
mTarget.mIsExclusive = exclusive;
return this;
@@ -409,6 +420,7 @@
/**
* Builds and returns the resulting {@link Target}.
*/
+ @NonNull
public Target build() {
return mTarget;
}
diff --git a/v7/preference/Android.mk b/v7/preference/Android.mk
index e751e1c..1e3e0b6 100644
--- a/v7/preference/Android.mk
+++ b/v7/preference/Android.mk
@@ -29,8 +29,7 @@
LOCAL_MODULE := android-support-v7-preference
LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
LOCAL_SRC_FILES := \
- $(call all-java-files-under,constants) \
- $(call all-java-files-under,src)
+ $(call all-java-files-under,src/main/java)
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
LOCAL_SHARED_ANDROID_LIBRARIES := \
android-support-v7-appcompat \
diff --git a/v7/preference/AndroidManifest.xml b/v7/preference/AndroidManifest.xml
index c8df9a0..3195a03 100644
--- a/v7/preference/AndroidManifest.xml
+++ b/v7/preference/AndroidManifest.xml
@@ -16,8 +16,4 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.support.v7.preference">
<uses-sdk android:minSdkVersion="14" />
- <application>
- <meta-data android:name="android.support.v7.preference.VERSION"
- android:value="${support-version}" />
- </application>
</manifest>
diff --git a/v7/preference/OWNERS b/v7/preference/OWNERS
new file mode 100644
index 0000000..ddaac03
--- /dev/null
+++ b/v7/preference/OWNERS
@@ -0,0 +1 @@
+pavlis@google.com
\ No newline at end of file
diff --git a/v7/preference/api/26.1.0.txt b/v7/preference/api/26.1.0.txt
new file mode 100644
index 0000000..04c7329
--- /dev/null
+++ b/v7/preference/api/26.1.0.txt
@@ -0,0 +1,412 @@
+package android.support.v7.preference {
+
+ public class CheckBoxPreference extends android.support.v7.preference.TwoStatePreference {
+ ctor public CheckBoxPreference(android.content.Context, android.util.AttributeSet, int);
+ ctor public CheckBoxPreference(android.content.Context, android.util.AttributeSet, int, int);
+ ctor public CheckBoxPreference(android.content.Context, android.util.AttributeSet);
+ ctor public CheckBoxPreference(android.content.Context);
+ }
+
+ public abstract class DialogPreference extends android.support.v7.preference.Preference {
+ ctor public DialogPreference(android.content.Context, android.util.AttributeSet, int, int);
+ ctor public DialogPreference(android.content.Context, android.util.AttributeSet, int);
+ ctor public DialogPreference(android.content.Context, android.util.AttributeSet);
+ ctor public DialogPreference(android.content.Context);
+ method public android.graphics.drawable.Drawable getDialogIcon();
+ method public int getDialogLayoutResource();
+ method public java.lang.CharSequence getDialogMessage();
+ method public java.lang.CharSequence getDialogTitle();
+ method public java.lang.CharSequence getNegativeButtonText();
+ method public java.lang.CharSequence getPositiveButtonText();
+ method public void setDialogIcon(android.graphics.drawable.Drawable);
+ method public void setDialogIcon(int);
+ method public void setDialogLayoutResource(int);
+ method public void setDialogMessage(java.lang.CharSequence);
+ method public void setDialogMessage(int);
+ method public void setDialogTitle(java.lang.CharSequence);
+ method public void setDialogTitle(int);
+ method public void setNegativeButtonText(java.lang.CharSequence);
+ method public void setNegativeButtonText(int);
+ method public void setPositiveButtonText(java.lang.CharSequence);
+ method public void setPositiveButtonText(int);
+ }
+
+ public static abstract interface DialogPreference.TargetFragment {
+ method public abstract android.support.v7.preference.Preference findPreference(java.lang.CharSequence);
+ }
+
+ public class DropDownPreference extends android.support.v7.preference.ListPreference {
+ ctor public DropDownPreference(android.content.Context);
+ ctor public DropDownPreference(android.content.Context, android.util.AttributeSet);
+ ctor public DropDownPreference(android.content.Context, android.util.AttributeSet, int);
+ ctor public DropDownPreference(android.content.Context, android.util.AttributeSet, int, int);
+ method protected android.widget.ArrayAdapter createAdapter();
+ }
+
+ public class EditTextPreference extends android.support.v7.preference.DialogPreference {
+ ctor public EditTextPreference(android.content.Context, android.util.AttributeSet, int, int);
+ ctor public EditTextPreference(android.content.Context, android.util.AttributeSet, int);
+ ctor public EditTextPreference(android.content.Context, android.util.AttributeSet);
+ ctor public EditTextPreference(android.content.Context);
+ method public java.lang.String getText();
+ method public void setText(java.lang.String);
+ }
+
+ public class EditTextPreferenceDialogFragmentCompat extends android.support.v7.preference.PreferenceDialogFragmentCompat {
+ ctor public EditTextPreferenceDialogFragmentCompat();
+ method public static android.support.v7.preference.EditTextPreferenceDialogFragmentCompat newInstance(java.lang.String);
+ method public void onDialogClosed(boolean);
+ }
+
+ public class ListPreference extends android.support.v7.preference.DialogPreference {
+ ctor public ListPreference(android.content.Context, android.util.AttributeSet, int, int);
+ ctor public ListPreference(android.content.Context, android.util.AttributeSet, int);
+ ctor public ListPreference(android.content.Context, android.util.AttributeSet);
+ ctor public ListPreference(android.content.Context);
+ method public int findIndexOfValue(java.lang.String);
+ method public java.lang.CharSequence[] getEntries();
+ method public java.lang.CharSequence getEntry();
+ method public java.lang.CharSequence[] getEntryValues();
+ method public java.lang.String getValue();
+ method public void setEntries(java.lang.CharSequence[]);
+ method public void setEntries(int);
+ method public void setEntryValues(java.lang.CharSequence[]);
+ method public void setEntryValues(int);
+ method public void setValue(java.lang.String);
+ method public void setValueIndex(int);
+ }
+
+ public class ListPreferenceDialogFragmentCompat extends android.support.v7.preference.PreferenceDialogFragmentCompat {
+ ctor public ListPreferenceDialogFragmentCompat();
+ method public static android.support.v7.preference.ListPreferenceDialogFragmentCompat newInstance(java.lang.String);
+ method public void onDialogClosed(boolean);
+ }
+
+ public class MultiSelectListPreferenceDialogFragmentCompat extends android.support.v7.preference.PreferenceDialogFragmentCompat {
+ ctor public MultiSelectListPreferenceDialogFragmentCompat();
+ method public static android.support.v7.preference.MultiSelectListPreferenceDialogFragmentCompat newInstance(java.lang.String);
+ method public void onDialogClosed(boolean);
+ }
+
+ public class Preference implements java.lang.Comparable {
+ ctor public Preference(android.content.Context, android.util.AttributeSet, int, int);
+ ctor public Preference(android.content.Context, android.util.AttributeSet, int);
+ ctor public Preference(android.content.Context, android.util.AttributeSet);
+ ctor public Preference(android.content.Context);
+ method public boolean callChangeListener(java.lang.Object);
+ method public int compareTo(android.support.v7.preference.Preference);
+ method protected android.support.v7.preference.Preference findPreferenceInHierarchy(java.lang.String);
+ method public android.content.Context getContext();
+ method public java.lang.String getDependency();
+ method public android.os.Bundle getExtras();
+ method public java.lang.String getFragment();
+ method public android.graphics.drawable.Drawable getIcon();
+ method public android.content.Intent getIntent();
+ method public java.lang.String getKey();
+ method public final int getLayoutResource();
+ method public android.support.v7.preference.Preference.OnPreferenceChangeListener getOnPreferenceChangeListener();
+ method public android.support.v7.preference.Preference.OnPreferenceClickListener getOnPreferenceClickListener();
+ method public int getOrder();
+ method public android.support.v7.preference.PreferenceGroup getParent();
+ method protected boolean getPersistedBoolean(boolean);
+ method protected float getPersistedFloat(float);
+ method protected int getPersistedInt(int);
+ method protected long getPersistedLong(long);
+ method protected java.lang.String getPersistedString(java.lang.String);
+ method public java.util.Set<java.lang.String> getPersistedStringSet(java.util.Set<java.lang.String>);
+ method public android.support.v7.preference.PreferenceDataStore getPreferenceDataStore();
+ method public android.support.v7.preference.PreferenceManager getPreferenceManager();
+ method public android.content.SharedPreferences getSharedPreferences();
+ method public boolean getShouldDisableView();
+ method public java.lang.CharSequence getSummary();
+ method public java.lang.CharSequence getTitle();
+ method public final int getWidgetLayoutResource();
+ method public boolean hasKey();
+ method public boolean isEnabled();
+ method public boolean isIconSpaceReserved();
+ method public boolean isPersistent();
+ method public boolean isSelectable();
+ method public boolean isSingleLineTitle();
+ method public final boolean isVisible();
+ method protected void notifyChanged();
+ method public void notifyDependencyChange(boolean);
+ method protected void notifyHierarchyChanged();
+ method public void onAttached();
+ method protected void onAttachedToHierarchy(android.support.v7.preference.PreferenceManager);
+ method public void onBindViewHolder(android.support.v7.preference.PreferenceViewHolder);
+ method protected void onClick();
+ method public void onDependencyChanged(android.support.v7.preference.Preference, boolean);
+ method public void onDetached();
+ method protected java.lang.Object onGetDefaultValue(android.content.res.TypedArray, int);
+ method public void onInitializeAccessibilityNodeInfo(android.support.v4.view.accessibility.AccessibilityNodeInfoCompat);
+ method public void onParentChanged(android.support.v7.preference.Preference, boolean);
+ method protected void onPrepareForRemoval();
+ method protected void onRestoreInstanceState(android.os.Parcelable);
+ method protected android.os.Parcelable onSaveInstanceState();
+ method protected void onSetInitialValue(boolean, java.lang.Object);
+ method public android.os.Bundle peekExtras();
+ method protected boolean persistBoolean(boolean);
+ method protected boolean persistFloat(float);
+ method protected boolean persistInt(int);
+ method protected boolean persistLong(long);
+ method protected boolean persistString(java.lang.String);
+ method public boolean persistStringSet(java.util.Set<java.lang.String>);
+ method public void restoreHierarchyState(android.os.Bundle);
+ method public void saveHierarchyState(android.os.Bundle);
+ method public void setDefaultValue(java.lang.Object);
+ method public void setDependency(java.lang.String);
+ method public void setEnabled(boolean);
+ method public void setFragment(java.lang.String);
+ method public void setIcon(android.graphics.drawable.Drawable);
+ method public void setIcon(int);
+ method public void setIconSpaceReserved(boolean);
+ method public void setIntent(android.content.Intent);
+ method public void setKey(java.lang.String);
+ method public void setLayoutResource(int);
+ method public void setOnPreferenceChangeListener(android.support.v7.preference.Preference.OnPreferenceChangeListener);
+ method public void setOnPreferenceClickListener(android.support.v7.preference.Preference.OnPreferenceClickListener);
+ method public void setOrder(int);
+ method public void setPersistent(boolean);
+ method public void setPreferenceDataStore(android.support.v7.preference.PreferenceDataStore);
+ method public void setSelectable(boolean);
+ method public void setShouldDisableView(boolean);
+ method public void setSingleLineTitle(boolean);
+ method public void setSummary(java.lang.CharSequence);
+ method public void setSummary(int);
+ method public void setTitle(java.lang.CharSequence);
+ method public void setTitle(int);
+ method public void setViewId(int);
+ method public final void setVisible(boolean);
+ method public void setWidgetLayoutResource(int);
+ method public boolean shouldDisableDependents();
+ method protected boolean shouldPersist();
+ field public static final int DEFAULT_ORDER = 2147483647; // 0x7fffffff
+ }
+
+ public static class Preference.BaseSavedState extends android.view.AbsSavedState {
+ ctor public Preference.BaseSavedState(android.os.Parcel);
+ ctor public Preference.BaseSavedState(android.os.Parcelable);
+ field public static final android.os.Parcelable.Creator<android.support.v7.preference.Preference.BaseSavedState> CREATOR;
+ }
+
+ public static abstract interface Preference.OnPreferenceChangeListener {
+ method public abstract boolean onPreferenceChange(android.support.v7.preference.Preference, java.lang.Object);
+ }
+
+ public static abstract interface Preference.OnPreferenceClickListener {
+ method public abstract boolean onPreferenceClick(android.support.v7.preference.Preference);
+ }
+
+ public class PreferenceCategory extends android.support.v7.preference.PreferenceGroup {
+ ctor public PreferenceCategory(android.content.Context, android.util.AttributeSet, int, int);
+ ctor public PreferenceCategory(android.content.Context, android.util.AttributeSet, int);
+ ctor public PreferenceCategory(android.content.Context, android.util.AttributeSet);
+ ctor public PreferenceCategory(android.content.Context);
+ }
+
+ public abstract class PreferenceDataStore {
+ ctor public PreferenceDataStore();
+ method public boolean getBoolean(java.lang.String, boolean);
+ method public float getFloat(java.lang.String, float);
+ method public int getInt(java.lang.String, int);
+ method public long getLong(java.lang.String, long);
+ method public java.lang.String getString(java.lang.String, java.lang.String);
+ method public java.util.Set<java.lang.String> getStringSet(java.lang.String, java.util.Set<java.lang.String>);
+ method public void putBoolean(java.lang.String, boolean);
+ method public void putFloat(java.lang.String, float);
+ method public void putInt(java.lang.String, int);
+ method public void putLong(java.lang.String, long);
+ method public void putString(java.lang.String, java.lang.String);
+ method public void putStringSet(java.lang.String, java.util.Set<java.lang.String>);
+ }
+
+ public abstract class PreferenceDialogFragmentCompat extends android.support.v4.app.DialogFragment implements android.content.DialogInterface.OnClickListener {
+ ctor public PreferenceDialogFragmentCompat();
+ method public android.support.v7.preference.DialogPreference getPreference();
+ method protected void onBindDialogView(android.view.View);
+ method public void onClick(android.content.DialogInterface, int);
+ method protected android.view.View onCreateDialogView(android.content.Context);
+ method public abstract void onDialogClosed(boolean);
+ method protected void onPrepareDialogBuilder(android.support.v7.app.AlertDialog.Builder);
+ field protected static final java.lang.String ARG_KEY = "key";
+ }
+
+ public abstract class PreferenceFragmentCompat extends android.support.v4.app.Fragment implements android.support.v7.preference.DialogPreference.TargetFragment android.support.v7.preference.PreferenceManager.OnDisplayPreferenceDialogListener android.support.v7.preference.PreferenceManager.OnNavigateToScreenListener android.support.v7.preference.PreferenceManager.OnPreferenceTreeClickListener {
+ ctor public PreferenceFragmentCompat();
+ method public void addPreferencesFromResource(int);
+ method public android.support.v7.preference.Preference findPreference(java.lang.CharSequence);
+ method public final android.support.v7.widget.RecyclerView getListView();
+ method public android.support.v7.preference.PreferenceManager getPreferenceManager();
+ method public android.support.v7.preference.PreferenceScreen getPreferenceScreen();
+ method protected android.support.v7.widget.RecyclerView.Adapter onCreateAdapter(android.support.v7.preference.PreferenceScreen);
+ method public android.support.v7.widget.RecyclerView.LayoutManager onCreateLayoutManager();
+ method public abstract void onCreatePreferences(android.os.Bundle, java.lang.String);
+ method public android.support.v7.widget.RecyclerView onCreateRecyclerView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
+ method public void onDisplayPreferenceDialog(android.support.v7.preference.Preference);
+ method public void onNavigateToScreen(android.support.v7.preference.PreferenceScreen);
+ method public boolean onPreferenceTreeClick(android.support.v7.preference.Preference);
+ method public void scrollToPreference(java.lang.String);
+ method public void scrollToPreference(android.support.v7.preference.Preference);
+ method public void setDivider(android.graphics.drawable.Drawable);
+ method public void setDividerHeight(int);
+ method public void setPreferenceScreen(android.support.v7.preference.PreferenceScreen);
+ method public void setPreferencesFromResource(int, java.lang.String);
+ field public static final java.lang.String ARG_PREFERENCE_ROOT = "android.support.v7.preference.PreferenceFragmentCompat.PREFERENCE_ROOT";
+ }
+
+ public static abstract interface PreferenceFragmentCompat.OnPreferenceDisplayDialogCallback {
+ method public abstract boolean onPreferenceDisplayDialog(android.support.v7.preference.PreferenceFragmentCompat, android.support.v7.preference.Preference);
+ }
+
+ public static abstract interface PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {
+ method public abstract boolean onPreferenceStartFragment(android.support.v7.preference.PreferenceFragmentCompat, android.support.v7.preference.Preference);
+ }
+
+ public static abstract interface PreferenceFragmentCompat.OnPreferenceStartScreenCallback {
+ method public abstract boolean onPreferenceStartScreen(android.support.v7.preference.PreferenceFragmentCompat, android.support.v7.preference.PreferenceScreen);
+ }
+
+ public abstract class PreferenceGroup extends android.support.v7.preference.Preference {
+ ctor public PreferenceGroup(android.content.Context, android.util.AttributeSet, int, int);
+ ctor public PreferenceGroup(android.content.Context, android.util.AttributeSet, int);
+ ctor public PreferenceGroup(android.content.Context, android.util.AttributeSet);
+ method public void addItemFromInflater(android.support.v7.preference.Preference);
+ method public boolean addPreference(android.support.v7.preference.Preference);
+ method protected void dispatchRestoreInstanceState(android.os.Bundle);
+ method protected void dispatchSaveInstanceState(android.os.Bundle);
+ method public android.support.v7.preference.Preference findPreference(java.lang.CharSequence);
+ method public android.support.v7.preference.Preference getPreference(int);
+ method public int getPreferenceCount();
+ method protected boolean isOnSameScreenAsChildren();
+ method public boolean isOrderingAsAdded();
+ method protected boolean onPrepareAddPreference(android.support.v7.preference.Preference);
+ method public void removeAll();
+ method public boolean removePreference(android.support.v7.preference.Preference);
+ method public void setOrderingAsAdded(boolean);
+ }
+
+ public static abstract interface PreferenceGroup.PreferencePositionCallback {
+ method public abstract int getPreferenceAdapterPosition(java.lang.String);
+ method public abstract int getPreferenceAdapterPosition(android.support.v7.preference.Preference);
+ }
+
+ public class PreferenceManager {
+ method public android.support.v7.preference.PreferenceScreen createPreferenceScreen(android.content.Context);
+ method public android.support.v7.preference.Preference findPreference(java.lang.CharSequence);
+ method public android.content.Context getContext();
+ method public static android.content.SharedPreferences getDefaultSharedPreferences(android.content.Context);
+ method public android.support.v7.preference.PreferenceManager.OnDisplayPreferenceDialogListener getOnDisplayPreferenceDialogListener();
+ method public android.support.v7.preference.PreferenceManager.OnNavigateToScreenListener getOnNavigateToScreenListener();
+ method public android.support.v7.preference.PreferenceManager.OnPreferenceTreeClickListener getOnPreferenceTreeClickListener();
+ method public android.support.v7.preference.PreferenceManager.PreferenceComparisonCallback getPreferenceComparisonCallback();
+ method public android.support.v7.preference.PreferenceDataStore getPreferenceDataStore();
+ method public android.support.v7.preference.PreferenceScreen getPreferenceScreen();
+ method public android.content.SharedPreferences getSharedPreferences();
+ method public int getSharedPreferencesMode();
+ method public java.lang.String getSharedPreferencesName();
+ method public boolean isStorageDefault();
+ method public boolean isStorageDeviceProtected();
+ method public static void setDefaultValues(android.content.Context, int, boolean);
+ method public static void setDefaultValues(android.content.Context, java.lang.String, int, int, boolean);
+ method public void setOnDisplayPreferenceDialogListener(android.support.v7.preference.PreferenceManager.OnDisplayPreferenceDialogListener);
+ method public void setOnNavigateToScreenListener(android.support.v7.preference.PreferenceManager.OnNavigateToScreenListener);
+ method public void setOnPreferenceTreeClickListener(android.support.v7.preference.PreferenceManager.OnPreferenceTreeClickListener);
+ method public void setPreferenceComparisonCallback(android.support.v7.preference.PreferenceManager.PreferenceComparisonCallback);
+ method public void setPreferenceDataStore(android.support.v7.preference.PreferenceDataStore);
+ method public boolean setPreferences(android.support.v7.preference.PreferenceScreen);
+ method public void setSharedPreferencesMode(int);
+ method public void setSharedPreferencesName(java.lang.String);
+ method public void setStorageDefault();
+ method public void setStorageDeviceProtected();
+ method public void showDialog(android.support.v7.preference.Preference);
+ field public static final java.lang.String KEY_HAS_SET_DEFAULT_VALUES = "_has_set_default_values";
+ }
+
+ public static abstract interface PreferenceManager.OnDisplayPreferenceDialogListener {
+ method public abstract void onDisplayPreferenceDialog(android.support.v7.preference.Preference);
+ }
+
+ public static abstract interface PreferenceManager.OnNavigateToScreenListener {
+ method public abstract void onNavigateToScreen(android.support.v7.preference.PreferenceScreen);
+ }
+
+ public static abstract interface PreferenceManager.OnPreferenceTreeClickListener {
+ method public abstract boolean onPreferenceTreeClick(android.support.v7.preference.Preference);
+ }
+
+ public static abstract class PreferenceManager.PreferenceComparisonCallback {
+ ctor public PreferenceManager.PreferenceComparisonCallback();
+ method public abstract boolean arePreferenceContentsTheSame(android.support.v7.preference.Preference, android.support.v7.preference.Preference);
+ method public abstract boolean arePreferenceItemsTheSame(android.support.v7.preference.Preference, android.support.v7.preference.Preference);
+ }
+
+ public static class PreferenceManager.SimplePreferenceComparisonCallback extends android.support.v7.preference.PreferenceManager.PreferenceComparisonCallback {
+ ctor public PreferenceManager.SimplePreferenceComparisonCallback();
+ method public boolean arePreferenceContentsTheSame(android.support.v7.preference.Preference, android.support.v7.preference.Preference);
+ method public boolean arePreferenceItemsTheSame(android.support.v7.preference.Preference, android.support.v7.preference.Preference);
+ }
+
+ public final class PreferenceScreen extends android.support.v7.preference.PreferenceGroup {
+ method public void setShouldUseGeneratedIds(boolean);
+ method public boolean shouldUseGeneratedIds();
+ }
+
+ public class PreferenceViewHolder extends android.support.v7.widget.RecyclerView.ViewHolder {
+ method public android.view.View findViewById(int);
+ method public boolean isDividerAllowedAbove();
+ method public boolean isDividerAllowedBelow();
+ method public void setDividerAllowedAbove(boolean);
+ method public void setDividerAllowedBelow(boolean);
+ }
+
+ public class SeekBarPreference extends android.support.v7.preference.Preference {
+ ctor public SeekBarPreference(android.content.Context, android.util.AttributeSet, int, int);
+ ctor public SeekBarPreference(android.content.Context, android.util.AttributeSet, int);
+ ctor public SeekBarPreference(android.content.Context, android.util.AttributeSet);
+ ctor public SeekBarPreference(android.content.Context);
+ method public int getMax();
+ method public int getMin();
+ method public final int getSeekBarIncrement();
+ method public int getValue();
+ method public boolean isAdjustable();
+ method public void setAdjustable(boolean);
+ method public final void setMax(int);
+ method public void setMin(int);
+ method public final void setSeekBarIncrement(int);
+ method public void setValue(int);
+ }
+
+ public class SwitchPreferenceCompat extends android.support.v7.preference.TwoStatePreference {
+ ctor public SwitchPreferenceCompat(android.content.Context, android.util.AttributeSet, int, int);
+ ctor public SwitchPreferenceCompat(android.content.Context, android.util.AttributeSet, int);
+ ctor public SwitchPreferenceCompat(android.content.Context, android.util.AttributeSet);
+ ctor public SwitchPreferenceCompat(android.content.Context);
+ method public java.lang.CharSequence getSwitchTextOff();
+ method public java.lang.CharSequence getSwitchTextOn();
+ method public void setSwitchTextOff(java.lang.CharSequence);
+ method public void setSwitchTextOff(int);
+ method public void setSwitchTextOn(java.lang.CharSequence);
+ method public void setSwitchTextOn(int);
+ }
+
+ public abstract class TwoStatePreference extends android.support.v7.preference.Preference {
+ ctor public TwoStatePreference(android.content.Context, android.util.AttributeSet, int, int);
+ ctor public TwoStatePreference(android.content.Context, android.util.AttributeSet, int);
+ ctor public TwoStatePreference(android.content.Context, android.util.AttributeSet);
+ ctor public TwoStatePreference(android.content.Context);
+ method public boolean getDisableDependentsState();
+ method public java.lang.CharSequence getSummaryOff();
+ method public java.lang.CharSequence getSummaryOn();
+ method public boolean isChecked();
+ method public void setChecked(boolean);
+ method public void setDisableDependentsState(boolean);
+ method public void setSummaryOff(java.lang.CharSequence);
+ method public void setSummaryOff(int);
+ method public void setSummaryOn(java.lang.CharSequence);
+ method public void setSummaryOn(int);
+ method protected void syncSummaryView(android.support.v7.preference.PreferenceViewHolder);
+ field protected boolean mChecked;
+ }
+
+}
+
diff --git a/v7/preference/api/27.0.0.txt b/v7/preference/api/27.0.0.txt
new file mode 100644
index 0000000..04c7329
--- /dev/null
+++ b/v7/preference/api/27.0.0.txt
@@ -0,0 +1,412 @@
+package android.support.v7.preference {
+
+ public class CheckBoxPreference extends android.support.v7.preference.TwoStatePreference {
+ ctor public CheckBoxPreference(android.content.Context, android.util.AttributeSet, int);
+ ctor public CheckBoxPreference(android.content.Context, android.util.AttributeSet, int, int);
+ ctor public CheckBoxPreference(android.content.Context, android.util.AttributeSet);
+ ctor public CheckBoxPreference(android.content.Context);
+ }
+
+ public abstract class DialogPreference extends android.support.v7.preference.Preference {
+ ctor public DialogPreference(android.content.Context, android.util.AttributeSet, int, int);
+ ctor public DialogPreference(android.content.Context, android.util.AttributeSet, int);
+ ctor public DialogPreference(android.content.Context, android.util.AttributeSet);
+ ctor public DialogPreference(android.content.Context);
+ method public android.graphics.drawable.Drawable getDialogIcon();
+ method public int getDialogLayoutResource();
+ method public java.lang.CharSequence getDialogMessage();
+ method public java.lang.CharSequence getDialogTitle();
+ method public java.lang.CharSequence getNegativeButtonText();
+ method public java.lang.CharSequence getPositiveButtonText();
+ method public void setDialogIcon(android.graphics.drawable.Drawable);
+ method public void setDialogIcon(int);
+ method public void setDialogLayoutResource(int);
+ method public void setDialogMessage(java.lang.CharSequence);
+ method public void setDialogMessage(int);
+ method public void setDialogTitle(java.lang.CharSequence);
+ method public void setDialogTitle(int);
+ method public void setNegativeButtonText(java.lang.CharSequence);
+ method public void setNegativeButtonText(int);
+ method public void setPositiveButtonText(java.lang.CharSequence);
+ method public void setPositiveButtonText(int);
+ }
+
+ public static abstract interface DialogPreference.TargetFragment {
+ method public abstract android.support.v7.preference.Preference findPreference(java.lang.CharSequence);
+ }
+
+ public class DropDownPreference extends android.support.v7.preference.ListPreference {
+ ctor public DropDownPreference(android.content.Context);
+ ctor public DropDownPreference(android.content.Context, android.util.AttributeSet);
+ ctor public DropDownPreference(android.content.Context, android.util.AttributeSet, int);
+ ctor public DropDownPreference(android.content.Context, android.util.AttributeSet, int, int);
+ method protected android.widget.ArrayAdapter createAdapter();
+ }
+
+ public class EditTextPreference extends android.support.v7.preference.DialogPreference {
+ ctor public EditTextPreference(android.content.Context, android.util.AttributeSet, int, int);
+ ctor public EditTextPreference(android.content.Context, android.util.AttributeSet, int);
+ ctor public EditTextPreference(android.content.Context, android.util.AttributeSet);
+ ctor public EditTextPreference(android.content.Context);
+ method public java.lang.String getText();
+ method public void setText(java.lang.String);
+ }
+
+ public class EditTextPreferenceDialogFragmentCompat extends android.support.v7.preference.PreferenceDialogFragmentCompat {
+ ctor public EditTextPreferenceDialogFragmentCompat();
+ method public static android.support.v7.preference.EditTextPreferenceDialogFragmentCompat newInstance(java.lang.String);
+ method public void onDialogClosed(boolean);
+ }
+
+ public class ListPreference extends android.support.v7.preference.DialogPreference {
+ ctor public ListPreference(android.content.Context, android.util.AttributeSet, int, int);
+ ctor public ListPreference(android.content.Context, android.util.AttributeSet, int);
+ ctor public ListPreference(android.content.Context, android.util.AttributeSet);
+ ctor public ListPreference(android.content.Context);
+ method public int findIndexOfValue(java.lang.String);
+ method public java.lang.CharSequence[] getEntries();
+ method public java.lang.CharSequence getEntry();
+ method public java.lang.CharSequence[] getEntryValues();
+ method public java.lang.String getValue();
+ method public void setEntries(java.lang.CharSequence[]);
+ method public void setEntries(int);
+ method public void setEntryValues(java.lang.CharSequence[]);
+ method public void setEntryValues(int);
+ method public void setValue(java.lang.String);
+ method public void setValueIndex(int);
+ }
+
+ public class ListPreferenceDialogFragmentCompat extends android.support.v7.preference.PreferenceDialogFragmentCompat {
+ ctor public ListPreferenceDialogFragmentCompat();
+ method public static android.support.v7.preference.ListPreferenceDialogFragmentCompat newInstance(java.lang.String);
+ method public void onDialogClosed(boolean);
+ }
+
+ public class MultiSelectListPreferenceDialogFragmentCompat extends android.support.v7.preference.PreferenceDialogFragmentCompat {
+ ctor public MultiSelectListPreferenceDialogFragmentCompat();
+ method public static android.support.v7.preference.MultiSelectListPreferenceDialogFragmentCompat newInstance(java.lang.String);
+ method public void onDialogClosed(boolean);
+ }
+
+ public class Preference implements java.lang.Comparable {
+ ctor public Preference(android.content.Context, android.util.AttributeSet, int, int);
+ ctor public Preference(android.content.Context, android.util.AttributeSet, int);
+ ctor public Preference(android.content.Context, android.util.AttributeSet);
+ ctor public Preference(android.content.Context);
+ method public boolean callChangeListener(java.lang.Object);
+ method public int compareTo(android.support.v7.preference.Preference);
+ method protected android.support.v7.preference.Preference findPreferenceInHierarchy(java.lang.String);
+ method public android.content.Context getContext();
+ method public java.lang.String getDependency();
+ method public android.os.Bundle getExtras();
+ method public java.lang.String getFragment();
+ method public android.graphics.drawable.Drawable getIcon();
+ method public android.content.Intent getIntent();
+ method public java.lang.String getKey();
+ method public final int getLayoutResource();
+ method public android.support.v7.preference.Preference.OnPreferenceChangeListener getOnPreferenceChangeListener();
+ method public android.support.v7.preference.Preference.OnPreferenceClickListener getOnPreferenceClickListener();
+ method public int getOrder();
+ method public android.support.v7.preference.PreferenceGroup getParent();
+ method protected boolean getPersistedBoolean(boolean);
+ method protected float getPersistedFloat(float);
+ method protected int getPersistedInt(int);
+ method protected long getPersistedLong(long);
+ method protected java.lang.String getPersistedString(java.lang.String);
+ method public java.util.Set<java.lang.String> getPersistedStringSet(java.util.Set<java.lang.String>);
+ method public android.support.v7.preference.PreferenceDataStore getPreferenceDataStore();
+ method public android.support.v7.preference.PreferenceManager getPreferenceManager();
+ method public android.content.SharedPreferences getSharedPreferences();
+ method public boolean getShouldDisableView();
+ method public java.lang.CharSequence getSummary();
+ method public java.lang.CharSequence getTitle();
+ method public final int getWidgetLayoutResource();
+ method public boolean hasKey();
+ method public boolean isEnabled();
+ method public boolean isIconSpaceReserved();
+ method public boolean isPersistent();
+ method public boolean isSelectable();
+ method public boolean isSingleLineTitle();
+ method public final boolean isVisible();
+ method protected void notifyChanged();
+ method public void notifyDependencyChange(boolean);
+ method protected void notifyHierarchyChanged();
+ method public void onAttached();
+ method protected void onAttachedToHierarchy(android.support.v7.preference.PreferenceManager);
+ method public void onBindViewHolder(android.support.v7.preference.PreferenceViewHolder);
+ method protected void onClick();
+ method public void onDependencyChanged(android.support.v7.preference.Preference, boolean);
+ method public void onDetached();
+ method protected java.lang.Object onGetDefaultValue(android.content.res.TypedArray, int);
+ method public void onInitializeAccessibilityNodeInfo(android.support.v4.view.accessibility.AccessibilityNodeInfoCompat);
+ method public void onParentChanged(android.support.v7.preference.Preference, boolean);
+ method protected void onPrepareForRemoval();
+ method protected void onRestoreInstanceState(android.os.Parcelable);
+ method protected android.os.Parcelable onSaveInstanceState();
+ method protected void onSetInitialValue(boolean, java.lang.Object);
+ method public android.os.Bundle peekExtras();
+ method protected boolean persistBoolean(boolean);
+ method protected boolean persistFloat(float);
+ method protected boolean persistInt(int);
+ method protected boolean persistLong(long);
+ method protected boolean persistString(java.lang.String);
+ method public boolean persistStringSet(java.util.Set<java.lang.String>);
+ method public void restoreHierarchyState(android.os.Bundle);
+ method public void saveHierarchyState(android.os.Bundle);
+ method public void setDefaultValue(java.lang.Object);
+ method public void setDependency(java.lang.String);
+ method public void setEnabled(boolean);
+ method public void setFragment(java.lang.String);
+ method public void setIcon(android.graphics.drawable.Drawable);
+ method public void setIcon(int);
+ method public void setIconSpaceReserved(boolean);
+ method public void setIntent(android.content.Intent);
+ method public void setKey(java.lang.String);
+ method public void setLayoutResource(int);
+ method public void setOnPreferenceChangeListener(android.support.v7.preference.Preference.OnPreferenceChangeListener);
+ method public void setOnPreferenceClickListener(android.support.v7.preference.Preference.OnPreferenceClickListener);
+ method public void setOrder(int);
+ method public void setPersistent(boolean);
+ method public void setPreferenceDataStore(android.support.v7.preference.PreferenceDataStore);
+ method public void setSelectable(boolean);
+ method public void setShouldDisableView(boolean);
+ method public void setSingleLineTitle(boolean);
+ method public void setSummary(java.lang.CharSequence);
+ method public void setSummary(int);
+ method public void setTitle(java.lang.CharSequence);
+ method public void setTitle(int);
+ method public void setViewId(int);
+ method public final void setVisible(boolean);
+ method public void setWidgetLayoutResource(int);
+ method public boolean shouldDisableDependents();
+ method protected boolean shouldPersist();
+ field public static final int DEFAULT_ORDER = 2147483647; // 0x7fffffff
+ }
+
+ public static class Preference.BaseSavedState extends android.view.AbsSavedState {
+ ctor public Preference.BaseSavedState(android.os.Parcel);
+ ctor public Preference.BaseSavedState(android.os.Parcelable);
+ field public static final android.os.Parcelable.Creator<android.support.v7.preference.Preference.BaseSavedState> CREATOR;
+ }
+
+ public static abstract interface Preference.OnPreferenceChangeListener {
+ method public abstract boolean onPreferenceChange(android.support.v7.preference.Preference, java.lang.Object);
+ }
+
+ public static abstract interface Preference.OnPreferenceClickListener {
+ method public abstract boolean onPreferenceClick(android.support.v7.preference.Preference);
+ }
+
+ public class PreferenceCategory extends android.support.v7.preference.PreferenceGroup {
+ ctor public PreferenceCategory(android.content.Context, android.util.AttributeSet, int, int);
+ ctor public PreferenceCategory(android.content.Context, android.util.AttributeSet, int);
+ ctor public PreferenceCategory(android.content.Context, android.util.AttributeSet);
+ ctor public PreferenceCategory(android.content.Context);
+ }
+
+ public abstract class PreferenceDataStore {
+ ctor public PreferenceDataStore();
+ method public boolean getBoolean(java.lang.String, boolean);
+ method public float getFloat(java.lang.String, float);
+ method public int getInt(java.lang.String, int);
+ method public long getLong(java.lang.String, long);
+ method public java.lang.String getString(java.lang.String, java.lang.String);
+ method public java.util.Set<java.lang.String> getStringSet(java.lang.String, java.util.Set<java.lang.String>);
+ method public void putBoolean(java.lang.String, boolean);
+ method public void putFloat(java.lang.String, float);
+ method public void putInt(java.lang.String, int);
+ method public void putLong(java.lang.String, long);
+ method public void putString(java.lang.String, java.lang.String);
+ method public void putStringSet(java.lang.String, java.util.Set<java.lang.String>);
+ }
+
+ public abstract class PreferenceDialogFragmentCompat extends android.support.v4.app.DialogFragment implements android.content.DialogInterface.OnClickListener {
+ ctor public PreferenceDialogFragmentCompat();
+ method public android.support.v7.preference.DialogPreference getPreference();
+ method protected void onBindDialogView(android.view.View);
+ method public void onClick(android.content.DialogInterface, int);
+ method protected android.view.View onCreateDialogView(android.content.Context);
+ method public abstract void onDialogClosed(boolean);
+ method protected void onPrepareDialogBuilder(android.support.v7.app.AlertDialog.Builder);
+ field protected static final java.lang.String ARG_KEY = "key";
+ }
+
+ public abstract class PreferenceFragmentCompat extends android.support.v4.app.Fragment implements android.support.v7.preference.DialogPreference.TargetFragment android.support.v7.preference.PreferenceManager.OnDisplayPreferenceDialogListener android.support.v7.preference.PreferenceManager.OnNavigateToScreenListener android.support.v7.preference.PreferenceManager.OnPreferenceTreeClickListener {
+ ctor public PreferenceFragmentCompat();
+ method public void addPreferencesFromResource(int);
+ method public android.support.v7.preference.Preference findPreference(java.lang.CharSequence);
+ method public final android.support.v7.widget.RecyclerView getListView();
+ method public android.support.v7.preference.PreferenceManager getPreferenceManager();
+ method public android.support.v7.preference.PreferenceScreen getPreferenceScreen();
+ method protected android.support.v7.widget.RecyclerView.Adapter onCreateAdapter(android.support.v7.preference.PreferenceScreen);
+ method public android.support.v7.widget.RecyclerView.LayoutManager onCreateLayoutManager();
+ method public abstract void onCreatePreferences(android.os.Bundle, java.lang.String);
+ method public android.support.v7.widget.RecyclerView onCreateRecyclerView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
+ method public void onDisplayPreferenceDialog(android.support.v7.preference.Preference);
+ method public void onNavigateToScreen(android.support.v7.preference.PreferenceScreen);
+ method public boolean onPreferenceTreeClick(android.support.v7.preference.Preference);
+ method public void scrollToPreference(java.lang.String);
+ method public void scrollToPreference(android.support.v7.preference.Preference);
+ method public void setDivider(android.graphics.drawable.Drawable);
+ method public void setDividerHeight(int);
+ method public void setPreferenceScreen(android.support.v7.preference.PreferenceScreen);
+ method public void setPreferencesFromResource(int, java.lang.String);
+ field public static final java.lang.String ARG_PREFERENCE_ROOT = "android.support.v7.preference.PreferenceFragmentCompat.PREFERENCE_ROOT";
+ }
+
+ public static abstract interface PreferenceFragmentCompat.OnPreferenceDisplayDialogCallback {
+ method public abstract boolean onPreferenceDisplayDialog(android.support.v7.preference.PreferenceFragmentCompat, android.support.v7.preference.Preference);
+ }
+
+ public static abstract interface PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {
+ method public abstract boolean onPreferenceStartFragment(android.support.v7.preference.PreferenceFragmentCompat, android.support.v7.preference.Preference);
+ }
+
+ public static abstract interface PreferenceFragmentCompat.OnPreferenceStartScreenCallback {
+ method public abstract boolean onPreferenceStartScreen(android.support.v7.preference.PreferenceFragmentCompat, android.support.v7.preference.PreferenceScreen);
+ }
+
+ public abstract class PreferenceGroup extends android.support.v7.preference.Preference {
+ ctor public PreferenceGroup(android.content.Context, android.util.AttributeSet, int, int);
+ ctor public PreferenceGroup(android.content.Context, android.util.AttributeSet, int);
+ ctor public PreferenceGroup(android.content.Context, android.util.AttributeSet);
+ method public void addItemFromInflater(android.support.v7.preference.Preference);
+ method public boolean addPreference(android.support.v7.preference.Preference);
+ method protected void dispatchRestoreInstanceState(android.os.Bundle);
+ method protected void dispatchSaveInstanceState(android.os.Bundle);
+ method public android.support.v7.preference.Preference findPreference(java.lang.CharSequence);
+ method public android.support.v7.preference.Preference getPreference(int);
+ method public int getPreferenceCount();
+ method protected boolean isOnSameScreenAsChildren();
+ method public boolean isOrderingAsAdded();
+ method protected boolean onPrepareAddPreference(android.support.v7.preference.Preference);
+ method public void removeAll();
+ method public boolean removePreference(android.support.v7.preference.Preference);
+ method public void setOrderingAsAdded(boolean);
+ }
+
+ public static abstract interface PreferenceGroup.PreferencePositionCallback {
+ method public abstract int getPreferenceAdapterPosition(java.lang.String);
+ method public abstract int getPreferenceAdapterPosition(android.support.v7.preference.Preference);
+ }
+
+ public class PreferenceManager {
+ method public android.support.v7.preference.PreferenceScreen createPreferenceScreen(android.content.Context);
+ method public android.support.v7.preference.Preference findPreference(java.lang.CharSequence);
+ method public android.content.Context getContext();
+ method public static android.content.SharedPreferences getDefaultSharedPreferences(android.content.Context);
+ method public android.support.v7.preference.PreferenceManager.OnDisplayPreferenceDialogListener getOnDisplayPreferenceDialogListener();
+ method public android.support.v7.preference.PreferenceManager.OnNavigateToScreenListener getOnNavigateToScreenListener();
+ method public android.support.v7.preference.PreferenceManager.OnPreferenceTreeClickListener getOnPreferenceTreeClickListener();
+ method public android.support.v7.preference.PreferenceManager.PreferenceComparisonCallback getPreferenceComparisonCallback();
+ method public android.support.v7.preference.PreferenceDataStore getPreferenceDataStore();
+ method public android.support.v7.preference.PreferenceScreen getPreferenceScreen();
+ method public android.content.SharedPreferences getSharedPreferences();
+ method public int getSharedPreferencesMode();
+ method public java.lang.String getSharedPreferencesName();
+ method public boolean isStorageDefault();
+ method public boolean isStorageDeviceProtected();
+ method public static void setDefaultValues(android.content.Context, int, boolean);
+ method public static void setDefaultValues(android.content.Context, java.lang.String, int, int, boolean);
+ method public void setOnDisplayPreferenceDialogListener(android.support.v7.preference.PreferenceManager.OnDisplayPreferenceDialogListener);
+ method public void setOnNavigateToScreenListener(android.support.v7.preference.PreferenceManager.OnNavigateToScreenListener);
+ method public void setOnPreferenceTreeClickListener(android.support.v7.preference.PreferenceManager.OnPreferenceTreeClickListener);
+ method public void setPreferenceComparisonCallback(android.support.v7.preference.PreferenceManager.PreferenceComparisonCallback);
+ method public void setPreferenceDataStore(android.support.v7.preference.PreferenceDataStore);
+ method public boolean setPreferences(android.support.v7.preference.PreferenceScreen);
+ method public void setSharedPreferencesMode(int);
+ method public void setSharedPreferencesName(java.lang.String);
+ method public void setStorageDefault();
+ method public void setStorageDeviceProtected();
+ method public void showDialog(android.support.v7.preference.Preference);
+ field public static final java.lang.String KEY_HAS_SET_DEFAULT_VALUES = "_has_set_default_values";
+ }
+
+ public static abstract interface PreferenceManager.OnDisplayPreferenceDialogListener {
+ method public abstract void onDisplayPreferenceDialog(android.support.v7.preference.Preference);
+ }
+
+ public static abstract interface PreferenceManager.OnNavigateToScreenListener {
+ method public abstract void onNavigateToScreen(android.support.v7.preference.PreferenceScreen);
+ }
+
+ public static abstract interface PreferenceManager.OnPreferenceTreeClickListener {
+ method public abstract boolean onPreferenceTreeClick(android.support.v7.preference.Preference);
+ }
+
+ public static abstract class PreferenceManager.PreferenceComparisonCallback {
+ ctor public PreferenceManager.PreferenceComparisonCallback();
+ method public abstract boolean arePreferenceContentsTheSame(android.support.v7.preference.Preference, android.support.v7.preference.Preference);
+ method public abstract boolean arePreferenceItemsTheSame(android.support.v7.preference.Preference, android.support.v7.preference.Preference);
+ }
+
+ public static class PreferenceManager.SimplePreferenceComparisonCallback extends android.support.v7.preference.PreferenceManager.PreferenceComparisonCallback {
+ ctor public PreferenceManager.SimplePreferenceComparisonCallback();
+ method public boolean arePreferenceContentsTheSame(android.support.v7.preference.Preference, android.support.v7.preference.Preference);
+ method public boolean arePreferenceItemsTheSame(android.support.v7.preference.Preference, android.support.v7.preference.Preference);
+ }
+
+ public final class PreferenceScreen extends android.support.v7.preference.PreferenceGroup {
+ method public void setShouldUseGeneratedIds(boolean);
+ method public boolean shouldUseGeneratedIds();
+ }
+
+ public class PreferenceViewHolder extends android.support.v7.widget.RecyclerView.ViewHolder {
+ method public android.view.View findViewById(int);
+ method public boolean isDividerAllowedAbove();
+ method public boolean isDividerAllowedBelow();
+ method public void setDividerAllowedAbove(boolean);
+ method public void setDividerAllowedBelow(boolean);
+ }
+
+ public class SeekBarPreference extends android.support.v7.preference.Preference {
+ ctor public SeekBarPreference(android.content.Context, android.util.AttributeSet, int, int);
+ ctor public SeekBarPreference(android.content.Context, android.util.AttributeSet, int);
+ ctor public SeekBarPreference(android.content.Context, android.util.AttributeSet);
+ ctor public SeekBarPreference(android.content.Context);
+ method public int getMax();
+ method public int getMin();
+ method public final int getSeekBarIncrement();
+ method public int getValue();
+ method public boolean isAdjustable();
+ method public void setAdjustable(boolean);
+ method public final void setMax(int);
+ method public void setMin(int);
+ method public final void setSeekBarIncrement(int);
+ method public void setValue(int);
+ }
+
+ public class SwitchPreferenceCompat extends android.support.v7.preference.TwoStatePreference {
+ ctor public SwitchPreferenceCompat(android.content.Context, android.util.AttributeSet, int, int);
+ ctor public SwitchPreferenceCompat(android.content.Context, android.util.AttributeSet, int);
+ ctor public SwitchPreferenceCompat(android.content.Context, android.util.AttributeSet);
+ ctor public SwitchPreferenceCompat(android.content.Context);
+ method public java.lang.CharSequence getSwitchTextOff();
+ method public java.lang.CharSequence getSwitchTextOn();
+ method public void setSwitchTextOff(java.lang.CharSequence);
+ method public void setSwitchTextOff(int);
+ method public void setSwitchTextOn(java.lang.CharSequence);
+ method public void setSwitchTextOn(int);
+ }
+
+ public abstract class TwoStatePreference extends android.support.v7.preference.Preference {
+ ctor public TwoStatePreference(android.content.Context, android.util.AttributeSet, int, int);
+ ctor public TwoStatePreference(android.content.Context, android.util.AttributeSet, int);
+ ctor public TwoStatePreference(android.content.Context, android.util.AttributeSet);
+ ctor public TwoStatePreference(android.content.Context);
+ method public boolean getDisableDependentsState();
+ method public java.lang.CharSequence getSummaryOff();
+ method public java.lang.CharSequence getSummaryOn();
+ method public boolean isChecked();
+ method public void setChecked(boolean);
+ method public void setDisableDependentsState(boolean);
+ method public void setSummaryOff(java.lang.CharSequence);
+ method public void setSummaryOff(int);
+ method public void setSummaryOn(java.lang.CharSequence);
+ method public void setSummaryOn(int);
+ method protected void syncSummaryView(android.support.v7.preference.PreferenceViewHolder);
+ field protected boolean mChecked;
+ }
+
+}
+
diff --git a/v7/preference/build.gradle b/v7/preference/build.gradle
index 16498b3..2b1e871 100644
--- a/v7/preference/build.gradle
+++ b/v7/preference/build.gradle
@@ -33,14 +33,10 @@
}
sourceSets {
- main.java.srcDir 'src'
- main.java.srcDir 'constants'
main.res.srcDirs = [
'res',
'res-public'
]
- main.assets.srcDir 'assets'
- main.resources.srcDir 'src'
}
lintOptions {
diff --git a/v7/preference/src/android/support/v7/internal/package-info.java b/v7/preference/src/main/java/android/support/v7/internal/package-info.java
similarity index 100%
rename from v7/preference/src/android/support/v7/internal/package-info.java
rename to v7/preference/src/main/java/android/support/v7/internal/package-info.java
diff --git a/v7/preference/src/android/support/v7/internal/widget/PreferenceImageView.java b/v7/preference/src/main/java/android/support/v7/internal/widget/PreferenceImageView.java
similarity index 100%
rename from v7/preference/src/android/support/v7/internal/widget/PreferenceImageView.java
rename to v7/preference/src/main/java/android/support/v7/internal/widget/PreferenceImageView.java
diff --git a/v7/preference/constants/android/support/v7/preference/AndroidResources.java b/v7/preference/src/main/java/android/support/v7/preference/AndroidResources.java
similarity index 100%
rename from v7/preference/constants/android/support/v7/preference/AndroidResources.java
rename to v7/preference/src/main/java/android/support/v7/preference/AndroidResources.java
diff --git a/v7/preference/src/android/support/v7/preference/CheckBoxPreference.java b/v7/preference/src/main/java/android/support/v7/preference/CheckBoxPreference.java
similarity index 100%
rename from v7/preference/src/android/support/v7/preference/CheckBoxPreference.java
rename to v7/preference/src/main/java/android/support/v7/preference/CheckBoxPreference.java
diff --git a/v7/preference/src/android/support/v7/preference/DialogPreference.java b/v7/preference/src/main/java/android/support/v7/preference/DialogPreference.java
similarity index 100%
rename from v7/preference/src/android/support/v7/preference/DialogPreference.java
rename to v7/preference/src/main/java/android/support/v7/preference/DialogPreference.java
diff --git a/v7/preference/src/android/support/v7/preference/DropDownPreference.java b/v7/preference/src/main/java/android/support/v7/preference/DropDownPreference.java
similarity index 100%
rename from v7/preference/src/android/support/v7/preference/DropDownPreference.java
rename to v7/preference/src/main/java/android/support/v7/preference/DropDownPreference.java
diff --git a/v7/preference/src/android/support/v7/preference/EditTextPreference.java b/v7/preference/src/main/java/android/support/v7/preference/EditTextPreference.java
similarity index 100%
rename from v7/preference/src/android/support/v7/preference/EditTextPreference.java
rename to v7/preference/src/main/java/android/support/v7/preference/EditTextPreference.java
diff --git a/v7/preference/src/android/support/v7/preference/EditTextPreferenceDialogFragmentCompat.java b/v7/preference/src/main/java/android/support/v7/preference/EditTextPreferenceDialogFragmentCompat.java
similarity index 100%
rename from v7/preference/src/android/support/v7/preference/EditTextPreferenceDialogFragmentCompat.java
rename to v7/preference/src/main/java/android/support/v7/preference/EditTextPreferenceDialogFragmentCompat.java
diff --git a/v7/preference/src/android/support/v7/preference/ListPreference.java b/v7/preference/src/main/java/android/support/v7/preference/ListPreference.java
similarity index 100%
rename from v7/preference/src/android/support/v7/preference/ListPreference.java
rename to v7/preference/src/main/java/android/support/v7/preference/ListPreference.java
diff --git a/v7/preference/src/android/support/v7/preference/ListPreferenceDialogFragmentCompat.java b/v7/preference/src/main/java/android/support/v7/preference/ListPreferenceDialogFragmentCompat.java
similarity index 100%
rename from v7/preference/src/android/support/v7/preference/ListPreferenceDialogFragmentCompat.java
rename to v7/preference/src/main/java/android/support/v7/preference/ListPreferenceDialogFragmentCompat.java
diff --git a/v7/preference/src/android/support/v7/preference/MultiSelectListPreferenceDialogFragmentCompat.java b/v7/preference/src/main/java/android/support/v7/preference/MultiSelectListPreferenceDialogFragmentCompat.java
similarity index 100%
rename from v7/preference/src/android/support/v7/preference/MultiSelectListPreferenceDialogFragmentCompat.java
rename to v7/preference/src/main/java/android/support/v7/preference/MultiSelectListPreferenceDialogFragmentCompat.java
diff --git a/v7/preference/src/android/support/v7/preference/Preference.java b/v7/preference/src/main/java/android/support/v7/preference/Preference.java
similarity index 99%
rename from v7/preference/src/android/support/v7/preference/Preference.java
rename to v7/preference/src/main/java/android/support/v7/preference/Preference.java
index cfc4311..fa8461d 100644
--- a/v7/preference/src/android/support/v7/preference/Preference.java
+++ b/v7/preference/src/main/java/android/support/v7/preference/Preference.java
@@ -31,7 +31,6 @@
import android.support.annotation.Nullable;
import android.support.annotation.RestrictTo;
import android.support.v4.content.ContextCompat;
-import android.support.v4.content.SharedPreferencesCompat;
import android.support.v4.content.res.TypedArrayUtils;
import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat;
import android.text.TextUtils;
@@ -1543,7 +1542,7 @@
private void tryCommit(@NonNull SharedPreferences.Editor editor) {
if (mPreferenceManager.shouldCommit()) {
- SharedPreferencesCompat.EditorCompat.getInstance().apply(editor);
+ editor.apply();
}
}
diff --git a/v7/preference/src/android/support/v7/preference/PreferenceCategory.java b/v7/preference/src/main/java/android/support/v7/preference/PreferenceCategory.java
similarity index 100%
rename from v7/preference/src/android/support/v7/preference/PreferenceCategory.java
rename to v7/preference/src/main/java/android/support/v7/preference/PreferenceCategory.java
diff --git a/v7/preference/src/android/support/v7/preference/PreferenceDataStore.java b/v7/preference/src/main/java/android/support/v7/preference/PreferenceDataStore.java
similarity index 100%
rename from v7/preference/src/android/support/v7/preference/PreferenceDataStore.java
rename to v7/preference/src/main/java/android/support/v7/preference/PreferenceDataStore.java
diff --git a/v7/preference/src/android/support/v7/preference/PreferenceDialogFragmentCompat.java b/v7/preference/src/main/java/android/support/v7/preference/PreferenceDialogFragmentCompat.java
similarity index 100%
rename from v7/preference/src/android/support/v7/preference/PreferenceDialogFragmentCompat.java
rename to v7/preference/src/main/java/android/support/v7/preference/PreferenceDialogFragmentCompat.java
diff --git a/v7/preference/src/android/support/v7/preference/PreferenceFragmentCompat.java b/v7/preference/src/main/java/android/support/v7/preference/PreferenceFragmentCompat.java
similarity index 98%
rename from v7/preference/src/android/support/v7/preference/PreferenceFragmentCompat.java
rename to v7/preference/src/main/java/android/support/v7/preference/PreferenceFragmentCompat.java
index 4fb9ff8..6094217 100644
--- a/v7/preference/src/android/support/v7/preference/PreferenceFragmentCompat.java
+++ b/v7/preference/src/main/java/android/support/v7/preference/PreferenceFragmentCompat.java
@@ -92,13 +92,13 @@
* <p>The following sample code shows a simple preference fragment that is
* populated from a resource. The resource it loads is:</p>
*
- * {@sample frameworks/support/samples/SupportPreferenceDemos/res/xml/preferences.xml preferences}
+ * {@sample frameworks/support/samples/SupportPreferenceDemos/src/main/res/xml/preferences.xml preferences}
*
* <p>The fragment implementation itself simply populates the preferences
* when created. Note that the preferences framework takes care of loading
* the current values out of the app preferences and writing them when changed:</p>
*
- * {@sample frameworks/support/samples/SupportPreferenceDemos/src/com/example/android/supportpreference/FragmentSupportPreferencesCompat.java
+ * {@sample frameworks/support/samples/SupportPreferenceDemos/src/main/java/com/example/android/supportpreference/FragmentSupportPreferencesCompat.java
* support_fragment_compat}
*
* @see Preference
@@ -321,7 +321,7 @@
}
@Override
- public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
if (mHavePrefs) {
diff --git a/v7/preference/src/android/support/v7/preference/PreferenceGroup.java b/v7/preference/src/main/java/android/support/v7/preference/PreferenceGroup.java
similarity index 100%
rename from v7/preference/src/android/support/v7/preference/PreferenceGroup.java
rename to v7/preference/src/main/java/android/support/v7/preference/PreferenceGroup.java
diff --git a/v7/preference/src/android/support/v7/preference/PreferenceGroupAdapter.java b/v7/preference/src/main/java/android/support/v7/preference/PreferenceGroupAdapter.java
similarity index 100%
rename from v7/preference/src/android/support/v7/preference/PreferenceGroupAdapter.java
rename to v7/preference/src/main/java/android/support/v7/preference/PreferenceGroupAdapter.java
diff --git a/v7/preference/src/android/support/v7/preference/PreferenceInflater.java b/v7/preference/src/main/java/android/support/v7/preference/PreferenceInflater.java
similarity index 100%
rename from v7/preference/src/android/support/v7/preference/PreferenceInflater.java
rename to v7/preference/src/main/java/android/support/v7/preference/PreferenceInflater.java
diff --git a/v7/preference/src/android/support/v7/preference/PreferenceManager.java b/v7/preference/src/main/java/android/support/v7/preference/PreferenceManager.java
similarity index 98%
rename from v7/preference/src/android/support/v7/preference/PreferenceManager.java
rename to v7/preference/src/main/java/android/support/v7/preference/PreferenceManager.java
index 83af86c..19b6908 100644
--- a/v7/preference/src/android/support/v7/preference/PreferenceManager.java
+++ b/v7/preference/src/main/java/android/support/v7/preference/PreferenceManager.java
@@ -25,7 +25,6 @@
import android.support.annotation.Nullable;
import android.support.annotation.RestrictTo;
import android.support.v4.content.ContextCompat;
-import android.support.v4.content.SharedPreferencesCompat;
import android.text.TextUtils;
/**
@@ -464,10 +463,9 @@
pm.setSharedPreferencesMode(sharedPreferencesMode);
pm.inflateFromResource(context, resId, null);
- SharedPreferences.Editor editor =
- defaultValueSp.edit().putBoolean(KEY_HAS_SET_DEFAULT_VALUES, true);
-
- SharedPreferencesCompat.EditorCompat.getInstance().apply(editor);
+ defaultValueSp.edit()
+ .putBoolean(KEY_HAS_SET_DEFAULT_VALUES, true)
+ .apply();
}
}
@@ -511,7 +509,7 @@
private void setNoCommit(boolean noCommit) {
if (!noCommit && mEditor != null) {
- SharedPreferencesCompat.EditorCompat.getInstance().apply(mEditor);
+ mEditor.apply();
}
mNoCommit = noCommit;
}
diff --git a/v7/preference/src/android/support/v7/preference/PreferenceRecyclerViewAccessibilityDelegate.java b/v7/preference/src/main/java/android/support/v7/preference/PreferenceRecyclerViewAccessibilityDelegate.java
similarity index 100%
rename from v7/preference/src/android/support/v7/preference/PreferenceRecyclerViewAccessibilityDelegate.java
rename to v7/preference/src/main/java/android/support/v7/preference/PreferenceRecyclerViewAccessibilityDelegate.java
diff --git a/v7/preference/src/android/support/v7/preference/PreferenceScreen.java b/v7/preference/src/main/java/android/support/v7/preference/PreferenceScreen.java
similarity index 100%
rename from v7/preference/src/android/support/v7/preference/PreferenceScreen.java
rename to v7/preference/src/main/java/android/support/v7/preference/PreferenceScreen.java
diff --git a/v7/preference/src/android/support/v7/preference/PreferenceViewHolder.java b/v7/preference/src/main/java/android/support/v7/preference/PreferenceViewHolder.java
similarity index 100%
rename from v7/preference/src/android/support/v7/preference/PreferenceViewHolder.java
rename to v7/preference/src/main/java/android/support/v7/preference/PreferenceViewHolder.java
diff --git a/v7/preference/src/android/support/v7/preference/SeekBarPreference.java b/v7/preference/src/main/java/android/support/v7/preference/SeekBarPreference.java
similarity index 100%
rename from v7/preference/src/android/support/v7/preference/SeekBarPreference.java
rename to v7/preference/src/main/java/android/support/v7/preference/SeekBarPreference.java
diff --git a/v7/preference/src/android/support/v7/preference/SwitchPreferenceCompat.java b/v7/preference/src/main/java/android/support/v7/preference/SwitchPreferenceCompat.java
similarity index 100%
rename from v7/preference/src/android/support/v7/preference/SwitchPreferenceCompat.java
rename to v7/preference/src/main/java/android/support/v7/preference/SwitchPreferenceCompat.java
diff --git a/v7/preference/src/android/support/v7/preference/TwoStatePreference.java b/v7/preference/src/main/java/android/support/v7/preference/TwoStatePreference.java
similarity index 100%
rename from v7/preference/src/android/support/v7/preference/TwoStatePreference.java
rename to v7/preference/src/main/java/android/support/v7/preference/TwoStatePreference.java
diff --git a/v7/preference/src/android/support/v7/preference/UnPressableLinearLayout.java b/v7/preference/src/main/java/android/support/v7/preference/UnPressableLinearLayout.java
similarity index 100%
rename from v7/preference/src/android/support/v7/preference/UnPressableLinearLayout.java
rename to v7/preference/src/main/java/android/support/v7/preference/UnPressableLinearLayout.java
diff --git a/v7/preference/src/android/support/v7/preference/internal/AbstractMultiSelectListPreference.java b/v7/preference/src/main/java/android/support/v7/preference/internal/AbstractMultiSelectListPreference.java
similarity index 100%
rename from v7/preference/src/android/support/v7/preference/internal/AbstractMultiSelectListPreference.java
rename to v7/preference/src/main/java/android/support/v7/preference/internal/AbstractMultiSelectListPreference.java
diff --git a/v7/preference/src/android/support/v7/preference/internal/package-info.java b/v7/preference/src/main/java/android/support/v7/preference/internal/package-info.java
similarity index 100%
rename from v7/preference/src/android/support/v7/preference/internal/package-info.java
rename to v7/preference/src/main/java/android/support/v7/preference/internal/package-info.java
diff --git a/v7/recyclerview/Android.mk b/v7/recyclerview/Android.mk
index e434ab2..dcebe88 100644
--- a/v7/recyclerview/Android.mk
+++ b/v7/recyclerview/Android.mk
@@ -27,7 +27,7 @@
LOCAL_USE_AAPT2 := true
LOCAL_MODULE := android-support-v7-recyclerview
LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_SRC_FILES := $(call all-java-files-under,src)
+LOCAL_SRC_FILES := $(call all-java-files-under,src/main/java)
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
LOCAL_SHARED_ANDROID_LIBRARIES := \
android-support-compat \
diff --git a/v7/recyclerview/AndroidManifest.xml b/v7/recyclerview/AndroidManifest.xml
index 04d095c..f83681e 100644
--- a/v7/recyclerview/AndroidManifest.xml
+++ b/v7/recyclerview/AndroidManifest.xml
@@ -16,8 +16,4 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.support.v7.recyclerview">
<uses-sdk android:minSdkVersion="14"/>
- <application>
- <meta-data android:name="android.support.v7.recyclerview.VERSION"
- android:value="${support-version}" />
- </application>
</manifest>
diff --git a/v7/recyclerview/OWNERS b/v7/recyclerview/OWNERS
new file mode 100644
index 0000000..6fc3ba6
--- /dev/null
+++ b/v7/recyclerview/OWNERS
@@ -0,0 +1,2 @@
+shepshapard@google.com
+yboyar@google.com
\ No newline at end of file
diff --git a/v7/recyclerview/api/26.1.0.txt b/v7/recyclerview/api/26.1.0.txt
new file mode 100644
index 0000000..4e7e14d
--- /dev/null
+++ b/v7/recyclerview/api/26.1.0.txt
@@ -0,0 +1,960 @@
+package android.support.v7.util {
+
+ public class AsyncListUtil<T> {
+ ctor public AsyncListUtil(java.lang.Class<T>, int, android.support.v7.util.AsyncListUtil.DataCallback<T>, android.support.v7.util.AsyncListUtil.ViewCallback);
+ method public T getItem(int);
+ method public int getItemCount();
+ method public void onRangeChanged();
+ method public void refresh();
+ }
+
+ public static abstract class AsyncListUtil.DataCallback<T> {
+ ctor public AsyncListUtil.DataCallback();
+ method public abstract void fillData(T[], int, int);
+ method public int getMaxCachedTiles();
+ method public void recycleData(T[], int);
+ method public abstract int refreshData();
+ }
+
+ public static abstract class AsyncListUtil.ViewCallback {
+ ctor public AsyncListUtil.ViewCallback();
+ method public void extendRangeInto(int[], int[], int);
+ method public abstract void getItemRangeInto(int[]);
+ method public abstract void onDataRefresh();
+ method public abstract void onItemLoaded(int);
+ field public static final int HINT_SCROLL_ASC = 2; // 0x2
+ field public static final int HINT_SCROLL_DESC = 1; // 0x1
+ field public static final int HINT_SCROLL_NONE = 0; // 0x0
+ }
+
+ public class BatchingListUpdateCallback implements android.support.v7.util.ListUpdateCallback {
+ ctor public BatchingListUpdateCallback(android.support.v7.util.ListUpdateCallback);
+ method public void dispatchLastEvent();
+ method public void onChanged(int, int, java.lang.Object);
+ method public void onInserted(int, int);
+ method public void onMoved(int, int);
+ method public void onRemoved(int, int);
+ }
+
+ public class DiffUtil {
+ method public static android.support.v7.util.DiffUtil.DiffResult calculateDiff(android.support.v7.util.DiffUtil.Callback);
+ method public static android.support.v7.util.DiffUtil.DiffResult calculateDiff(android.support.v7.util.DiffUtil.Callback, boolean);
+ }
+
+ public static abstract class DiffUtil.Callback {
+ ctor public DiffUtil.Callback();
+ method public abstract boolean areContentsTheSame(int, int);
+ method public abstract boolean areItemsTheSame(int, int);
+ method public java.lang.Object getChangePayload(int, int);
+ method public abstract int getNewListSize();
+ method public abstract int getOldListSize();
+ }
+
+ public static class DiffUtil.DiffResult {
+ method public void dispatchUpdatesTo(android.support.v7.widget.RecyclerView.Adapter);
+ method public void dispatchUpdatesTo(android.support.v7.util.ListUpdateCallback);
+ }
+
+ public abstract interface ListUpdateCallback {
+ method public abstract void onChanged(int, int, java.lang.Object);
+ method public abstract void onInserted(int, int);
+ method public abstract void onMoved(int, int);
+ method public abstract void onRemoved(int, int);
+ }
+
+ public class SortedList<T> {
+ ctor public SortedList(java.lang.Class<T>, android.support.v7.util.SortedList.Callback<T>);
+ ctor public SortedList(java.lang.Class<T>, android.support.v7.util.SortedList.Callback<T>, int);
+ method public int add(T);
+ method public void addAll(T[], boolean);
+ method public void addAll(T...);
+ method public void addAll(java.util.Collection<T>);
+ method public void beginBatchedUpdates();
+ method public void clear();
+ method public void endBatchedUpdates();
+ method public T get(int) throws java.lang.IndexOutOfBoundsException;
+ method public int indexOf(T);
+ method public void recalculatePositionOfItemAt(int);
+ method public boolean remove(T);
+ method public T removeItemAt(int);
+ method public int size();
+ method public void updateItemAt(int, T);
+ field public static final int INVALID_POSITION = -1; // 0xffffffff
+ }
+
+ public static class SortedList.BatchedCallback<T2> extends android.support.v7.util.SortedList.Callback {
+ ctor public SortedList.BatchedCallback(android.support.v7.util.SortedList.Callback<T2>);
+ method public boolean areContentsTheSame(T2, T2);
+ method public boolean areItemsTheSame(T2, T2);
+ method public int compare(T2, T2);
+ method public void dispatchLastEvent();
+ method public void onChanged(int, int);
+ method public void onInserted(int, int);
+ method public void onMoved(int, int);
+ method public void onRemoved(int, int);
+ }
+
+ public static abstract class SortedList.Callback<T2> implements java.util.Comparator android.support.v7.util.ListUpdateCallback {
+ ctor public SortedList.Callback();
+ method public abstract boolean areContentsTheSame(T2, T2);
+ method public abstract boolean areItemsTheSame(T2, T2);
+ method public abstract int compare(T2, T2);
+ method public abstract void onChanged(int, int);
+ method public void onChanged(int, int, java.lang.Object);
+ }
+
+}
+
+package android.support.v7.widget {
+
+ public class DefaultItemAnimator extends android.support.v7.widget.SimpleItemAnimator {
+ ctor public DefaultItemAnimator();
+ method public boolean animateAdd(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public boolean animateChange(android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ViewHolder, int, int, int, int);
+ method public boolean animateMove(android.support.v7.widget.RecyclerView.ViewHolder, int, int, int, int);
+ method public boolean animateRemove(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public void endAnimation(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public void endAnimations();
+ method public boolean isRunning();
+ method public void runPendingAnimations();
+ }
+
+ public class DividerItemDecoration extends android.support.v7.widget.RecyclerView.ItemDecoration {
+ ctor public DividerItemDecoration(android.content.Context, int);
+ method public void setDrawable(android.graphics.drawable.Drawable);
+ method public void setOrientation(int);
+ field public static final int HORIZONTAL = 0; // 0x0
+ field public static final int VERTICAL = 1; // 0x1
+ }
+
+ public class GridLayoutManager extends android.support.v7.widget.LinearLayoutManager {
+ ctor public GridLayoutManager(android.content.Context, android.util.AttributeSet, int, int);
+ ctor public GridLayoutManager(android.content.Context, int);
+ ctor public GridLayoutManager(android.content.Context, int, int, boolean);
+ method public int getSpanCount();
+ method public android.support.v7.widget.GridLayoutManager.SpanSizeLookup getSpanSizeLookup();
+ method public void setSpanCount(int);
+ method public void setSpanSizeLookup(android.support.v7.widget.GridLayoutManager.SpanSizeLookup);
+ field public static final int DEFAULT_SPAN_COUNT = -1; // 0xffffffff
+ }
+
+ public static final class GridLayoutManager.DefaultSpanSizeLookup extends android.support.v7.widget.GridLayoutManager.SpanSizeLookup {
+ ctor public GridLayoutManager.DefaultSpanSizeLookup();
+ method public int getSpanSize(int);
+ }
+
+ public static class GridLayoutManager.LayoutParams extends android.support.v7.widget.RecyclerView.LayoutParams {
+ ctor public GridLayoutManager.LayoutParams(android.content.Context, android.util.AttributeSet);
+ ctor public GridLayoutManager.LayoutParams(int, int);
+ ctor public GridLayoutManager.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ ctor public GridLayoutManager.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public GridLayoutManager.LayoutParams(android.support.v7.widget.RecyclerView.LayoutParams);
+ method public int getSpanIndex();
+ method public int getSpanSize();
+ field public static final int INVALID_SPAN_ID = -1; // 0xffffffff
+ }
+
+ public static abstract class GridLayoutManager.SpanSizeLookup {
+ ctor public GridLayoutManager.SpanSizeLookup();
+ method public int getSpanGroupIndex(int, int);
+ method public int getSpanIndex(int, int);
+ method public abstract int getSpanSize(int);
+ method public void invalidateSpanIndexCache();
+ method public boolean isSpanIndexCacheEnabled();
+ method public void setSpanIndexCacheEnabled(boolean);
+ }
+
+ public class LinearLayoutManager extends android.support.v7.widget.RecyclerView.LayoutManager implements android.support.v7.widget.helper.ItemTouchHelper.ViewDropHandler android.support.v7.widget.RecyclerView.SmoothScroller.ScrollVectorProvider {
+ ctor public LinearLayoutManager(android.content.Context);
+ ctor public LinearLayoutManager(android.content.Context, int, boolean);
+ ctor public LinearLayoutManager(android.content.Context, android.util.AttributeSet, int, int);
+ method public android.graphics.PointF computeScrollVectorForPosition(int);
+ method public int findFirstCompletelyVisibleItemPosition();
+ method public int findFirstVisibleItemPosition();
+ method public int findLastCompletelyVisibleItemPosition();
+ method public int findLastVisibleItemPosition();
+ method public android.support.v7.widget.RecyclerView.LayoutParams generateDefaultLayoutParams();
+ method protected int getExtraLayoutSpace(android.support.v7.widget.RecyclerView.State);
+ method public int getInitialPrefetchItemCount();
+ method public int getOrientation();
+ method public boolean getRecycleChildrenOnDetach();
+ method public boolean getReverseLayout();
+ method public boolean getStackFromEnd();
+ method protected boolean isLayoutRTL();
+ method public boolean isSmoothScrollbarEnabled();
+ method public void scrollToPositionWithOffset(int, int);
+ method public void setInitialPrefetchItemCount(int);
+ method public void setOrientation(int);
+ method public void setRecycleChildrenOnDetach(boolean);
+ method public void setReverseLayout(boolean);
+ method public void setSmoothScrollbarEnabled(boolean);
+ method public void setStackFromEnd(boolean);
+ field public static final int HORIZONTAL = 0; // 0x0
+ field public static final int INVALID_OFFSET = -2147483648; // 0x80000000
+ field public static final int VERTICAL = 1; // 0x1
+ }
+
+ protected static class LinearLayoutManager.LayoutChunkResult {
+ ctor protected LinearLayoutManager.LayoutChunkResult();
+ field public int mConsumed;
+ field public boolean mFinished;
+ field public boolean mFocusable;
+ field public boolean mIgnoreConsumed;
+ }
+
+ public class LinearSmoothScroller extends android.support.v7.widget.RecyclerView.SmoothScroller {
+ ctor public LinearSmoothScroller(android.content.Context);
+ method public int calculateDtToFit(int, int, int, int, int);
+ method public int calculateDxToMakeVisible(android.view.View, int);
+ method public int calculateDyToMakeVisible(android.view.View, int);
+ method protected float calculateSpeedPerPixel(android.util.DisplayMetrics);
+ method protected int calculateTimeForDeceleration(int);
+ method protected int calculateTimeForScrolling(int);
+ method public android.graphics.PointF computeScrollVectorForPosition(int);
+ method protected int getHorizontalSnapPreference();
+ method protected int getVerticalSnapPreference();
+ method protected void onSeekTargetStep(int, int, android.support.v7.widget.RecyclerView.State, android.support.v7.widget.RecyclerView.SmoothScroller.Action);
+ method protected void onStart();
+ method protected void onStop();
+ method protected void onTargetFound(android.view.View, android.support.v7.widget.RecyclerView.State, android.support.v7.widget.RecyclerView.SmoothScroller.Action);
+ method protected void updateActionForInterimTarget(android.support.v7.widget.RecyclerView.SmoothScroller.Action);
+ field public static final int SNAP_TO_ANY = 0; // 0x0
+ field public static final int SNAP_TO_END = 1; // 0x1
+ field public static final int SNAP_TO_START = -1; // 0xffffffff
+ field protected final android.view.animation.DecelerateInterpolator mDecelerateInterpolator;
+ field protected int mInterimTargetDx;
+ field protected int mInterimTargetDy;
+ field protected final android.view.animation.LinearInterpolator mLinearInterpolator;
+ field protected android.graphics.PointF mTargetVector;
+ }
+
+ public class LinearSnapHelper extends android.support.v7.widget.SnapHelper {
+ ctor public LinearSnapHelper();
+ method public int[] calculateDistanceToFinalSnap(android.support.v7.widget.RecyclerView.LayoutManager, android.view.View);
+ method public android.view.View findSnapView(android.support.v7.widget.RecyclerView.LayoutManager);
+ method public int findTargetSnapPosition(android.support.v7.widget.RecyclerView.LayoutManager, int, int);
+ }
+
+ public abstract class OrientationHelper {
+ method public static android.support.v7.widget.OrientationHelper createHorizontalHelper(android.support.v7.widget.RecyclerView.LayoutManager);
+ method public static android.support.v7.widget.OrientationHelper createOrientationHelper(android.support.v7.widget.RecyclerView.LayoutManager, int);
+ method public static android.support.v7.widget.OrientationHelper createVerticalHelper(android.support.v7.widget.RecyclerView.LayoutManager);
+ method public abstract int getDecoratedEnd(android.view.View);
+ method public abstract int getDecoratedMeasurement(android.view.View);
+ method public abstract int getDecoratedMeasurementInOther(android.view.View);
+ method public abstract int getDecoratedStart(android.view.View);
+ method public abstract int getEnd();
+ method public abstract int getEndAfterPadding();
+ method public abstract int getEndPadding();
+ method public abstract int getMode();
+ method public abstract int getModeInOther();
+ method public abstract int getStartAfterPadding();
+ method public abstract int getTotalSpace();
+ method public int getTotalSpaceChange();
+ method public abstract int getTransformedEndWithDecoration(android.view.View);
+ method public abstract int getTransformedStartWithDecoration(android.view.View);
+ method public abstract void offsetChild(android.view.View, int);
+ method public abstract void offsetChildren(int);
+ method public void onLayoutComplete();
+ field public static final int HORIZONTAL = 0; // 0x0
+ field public static final int VERTICAL = 1; // 0x1
+ field protected final android.support.v7.widget.RecyclerView.LayoutManager mLayoutManager;
+ }
+
+ public class PagerSnapHelper extends android.support.v7.widget.SnapHelper {
+ ctor public PagerSnapHelper();
+ method public int[] calculateDistanceToFinalSnap(android.support.v7.widget.RecyclerView.LayoutManager, android.view.View);
+ method protected android.support.v7.widget.LinearSmoothScroller createSnapScroller(android.support.v7.widget.RecyclerView.LayoutManager);
+ method public android.view.View findSnapView(android.support.v7.widget.RecyclerView.LayoutManager);
+ method public int findTargetSnapPosition(android.support.v7.widget.RecyclerView.LayoutManager, int, int);
+ }
+
+ public class RecyclerView extends android.view.ViewGroup {
+ ctor public RecyclerView(android.content.Context);
+ ctor public RecyclerView(android.content.Context, android.util.AttributeSet);
+ ctor public RecyclerView(android.content.Context, android.util.AttributeSet, int);
+ method public void addItemDecoration(android.support.v7.widget.RecyclerView.ItemDecoration, int);
+ method public void addItemDecoration(android.support.v7.widget.RecyclerView.ItemDecoration);
+ method public void addOnChildAttachStateChangeListener(android.support.v7.widget.RecyclerView.OnChildAttachStateChangeListener);
+ method public void addOnItemTouchListener(android.support.v7.widget.RecyclerView.OnItemTouchListener);
+ method public void addOnScrollListener(android.support.v7.widget.RecyclerView.OnScrollListener);
+ method public void clearOnChildAttachStateChangeListeners();
+ method public void clearOnScrollListeners();
+ method public int computeHorizontalScrollExtent();
+ method public int computeHorizontalScrollOffset();
+ method public int computeHorizontalScrollRange();
+ method public int computeVerticalScrollExtent();
+ method public int computeVerticalScrollOffset();
+ method public int computeVerticalScrollRange();
+ method public boolean dispatchNestedPreScroll(int, int, int[], int[], int);
+ method public boolean dispatchNestedScroll(int, int, int, int, int[], int);
+ method public boolean drawChild(android.graphics.Canvas, android.view.View, long);
+ method public android.view.View findChildViewUnder(float, float);
+ method public android.view.View findContainingItemView(android.view.View);
+ method public android.support.v7.widget.RecyclerView.ViewHolder findContainingViewHolder(android.view.View);
+ method public android.support.v7.widget.RecyclerView.ViewHolder findViewHolderForAdapterPosition(int);
+ method public android.support.v7.widget.RecyclerView.ViewHolder findViewHolderForItemId(long);
+ method public android.support.v7.widget.RecyclerView.ViewHolder findViewHolderForLayoutPosition(int);
+ method public deprecated android.support.v7.widget.RecyclerView.ViewHolder findViewHolderForPosition(int);
+ method public boolean fling(int, int);
+ method public android.support.v7.widget.RecyclerView.Adapter getAdapter();
+ method public int getChildAdapterPosition(android.view.View);
+ method public long getChildItemId(android.view.View);
+ method public int getChildLayoutPosition(android.view.View);
+ method public deprecated int getChildPosition(android.view.View);
+ method public android.support.v7.widget.RecyclerView.ViewHolder getChildViewHolder(android.view.View);
+ method public android.support.v7.widget.RecyclerViewAccessibilityDelegate getCompatAccessibilityDelegate();
+ method public void getDecoratedBoundsWithMargins(android.view.View, android.graphics.Rect);
+ method public android.support.v7.widget.RecyclerView.ItemAnimator getItemAnimator();
+ method public android.support.v7.widget.RecyclerView.ItemDecoration getItemDecorationAt(int);
+ method public android.support.v7.widget.RecyclerView.LayoutManager getLayoutManager();
+ method public int getMaxFlingVelocity();
+ method public int getMinFlingVelocity();
+ method public android.support.v7.widget.RecyclerView.OnFlingListener getOnFlingListener();
+ method public boolean getPreserveFocusAfterLayout();
+ method public android.support.v7.widget.RecyclerView.RecycledViewPool getRecycledViewPool();
+ method public int getScrollState();
+ method public boolean hasFixedSize();
+ method public boolean hasNestedScrollingParent(int);
+ method public boolean hasPendingAdapterUpdates();
+ method public void invalidateItemDecorations();
+ method public boolean isAnimating();
+ method public boolean isComputingLayout();
+ method public boolean isLayoutFrozen();
+ method public void offsetChildrenHorizontal(int);
+ method public void offsetChildrenVertical(int);
+ method public void onChildAttachedToWindow(android.view.View);
+ method public void onChildDetachedFromWindow(android.view.View);
+ method public void onDraw(android.graphics.Canvas);
+ method protected void onLayout(boolean, int, int, int, int);
+ method public void onScrollStateChanged(int);
+ method public void onScrolled(int, int);
+ method public void removeItemDecoration(android.support.v7.widget.RecyclerView.ItemDecoration);
+ method public void removeOnChildAttachStateChangeListener(android.support.v7.widget.RecyclerView.OnChildAttachStateChangeListener);
+ method public void removeOnItemTouchListener(android.support.v7.widget.RecyclerView.OnItemTouchListener);
+ method public void removeOnScrollListener(android.support.v7.widget.RecyclerView.OnScrollListener);
+ method public void scrollToPosition(int);
+ method public void setAccessibilityDelegateCompat(android.support.v7.widget.RecyclerViewAccessibilityDelegate);
+ method public void setAdapter(android.support.v7.widget.RecyclerView.Adapter);
+ method public void setChildDrawingOrderCallback(android.support.v7.widget.RecyclerView.ChildDrawingOrderCallback);
+ method public void setHasFixedSize(boolean);
+ method public void setItemAnimator(android.support.v7.widget.RecyclerView.ItemAnimator);
+ method public void setItemViewCacheSize(int);
+ method public void setLayoutFrozen(boolean);
+ method public void setLayoutManager(android.support.v7.widget.RecyclerView.LayoutManager);
+ method public void setOnFlingListener(android.support.v7.widget.RecyclerView.OnFlingListener);
+ method public deprecated void setOnScrollListener(android.support.v7.widget.RecyclerView.OnScrollListener);
+ method public void setPreserveFocusAfterLayout(boolean);
+ method public void setRecycledViewPool(android.support.v7.widget.RecyclerView.RecycledViewPool);
+ method public void setRecyclerListener(android.support.v7.widget.RecyclerView.RecyclerListener);
+ method public void setScrollingTouchSlop(int);
+ method public void setViewCacheExtension(android.support.v7.widget.RecyclerView.ViewCacheExtension);
+ method public void smoothScrollBy(int, int);
+ method public void smoothScrollBy(int, int, android.view.animation.Interpolator);
+ method public void smoothScrollToPosition(int);
+ method public boolean startNestedScroll(int, int);
+ method public void stopNestedScroll(int);
+ method public void stopScroll();
+ method public void swapAdapter(android.support.v7.widget.RecyclerView.Adapter, boolean);
+ field public static final int HORIZONTAL = 0; // 0x0
+ field public static final int INVALID_TYPE = -1; // 0xffffffff
+ field public static final long NO_ID = -1L; // 0xffffffffffffffffL
+ field public static final int NO_POSITION = -1; // 0xffffffff
+ field public static final int SCROLL_STATE_DRAGGING = 1; // 0x1
+ field public static final int SCROLL_STATE_IDLE = 0; // 0x0
+ field public static final int SCROLL_STATE_SETTLING = 2; // 0x2
+ field public static final int TOUCH_SLOP_DEFAULT = 0; // 0x0
+ field public static final int TOUCH_SLOP_PAGING = 1; // 0x1
+ field public static final int VERTICAL = 1; // 0x1
+ }
+
+ public static abstract class RecyclerView.Adapter<VH extends android.support.v7.widget.RecyclerView.ViewHolder> {
+ ctor public RecyclerView.Adapter();
+ method public final void bindViewHolder(VH, int);
+ method public final VH createViewHolder(android.view.ViewGroup, int);
+ method public abstract int getItemCount();
+ method public long getItemId(int);
+ method public int getItemViewType(int);
+ method public final boolean hasObservers();
+ method public final boolean hasStableIds();
+ method public final void notifyDataSetChanged();
+ method public final void notifyItemChanged(int);
+ method public final void notifyItemChanged(int, java.lang.Object);
+ method public final void notifyItemInserted(int);
+ method public final void notifyItemMoved(int, int);
+ method public final void notifyItemRangeChanged(int, int);
+ method public final void notifyItemRangeChanged(int, int, java.lang.Object);
+ method public final void notifyItemRangeInserted(int, int);
+ method public final void notifyItemRangeRemoved(int, int);
+ method public final void notifyItemRemoved(int);
+ method public void onAttachedToRecyclerView(android.support.v7.widget.RecyclerView);
+ method public abstract void onBindViewHolder(VH, int);
+ method public void onBindViewHolder(VH, int, java.util.List<java.lang.Object>);
+ method public abstract VH onCreateViewHolder(android.view.ViewGroup, int);
+ method public void onDetachedFromRecyclerView(android.support.v7.widget.RecyclerView);
+ method public boolean onFailedToRecycleView(VH);
+ method public void onViewAttachedToWindow(VH);
+ method public void onViewDetachedFromWindow(VH);
+ method public void onViewRecycled(VH);
+ method public void registerAdapterDataObserver(android.support.v7.widget.RecyclerView.AdapterDataObserver);
+ method public void setHasStableIds(boolean);
+ method public void unregisterAdapterDataObserver(android.support.v7.widget.RecyclerView.AdapterDataObserver);
+ }
+
+ public static abstract class RecyclerView.AdapterDataObserver {
+ ctor public RecyclerView.AdapterDataObserver();
+ method public void onChanged();
+ method public void onItemRangeChanged(int, int);
+ method public void onItemRangeChanged(int, int, java.lang.Object);
+ method public void onItemRangeInserted(int, int);
+ method public void onItemRangeMoved(int, int, int);
+ method public void onItemRangeRemoved(int, int);
+ }
+
+ public static abstract interface RecyclerView.ChildDrawingOrderCallback {
+ method public abstract int onGetChildDrawingOrder(int, int);
+ }
+
+ public static abstract class RecyclerView.ItemAnimator {
+ ctor public RecyclerView.ItemAnimator();
+ method public abstract boolean animateAppearance(android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+ method public abstract boolean animateChange(android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+ method public abstract boolean animateDisappearance(android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+ method public abstract boolean animatePersistence(android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+ method public boolean canReuseUpdatedViewHolder(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public boolean canReuseUpdatedViewHolder(android.support.v7.widget.RecyclerView.ViewHolder, java.util.List<java.lang.Object>);
+ method public final void dispatchAnimationFinished(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public final void dispatchAnimationStarted(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public final void dispatchAnimationsFinished();
+ method public abstract void endAnimation(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public abstract void endAnimations();
+ method public long getAddDuration();
+ method public long getChangeDuration();
+ method public long getMoveDuration();
+ method public long getRemoveDuration();
+ method public abstract boolean isRunning();
+ method public final boolean isRunning(android.support.v7.widget.RecyclerView.ItemAnimator.ItemAnimatorFinishedListener);
+ method public android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo obtainHolderInfo();
+ method public void onAnimationFinished(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public void onAnimationStarted(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo recordPostLayoutInformation(android.support.v7.widget.RecyclerView.State, android.support.v7.widget.RecyclerView.ViewHolder);
+ method public android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo recordPreLayoutInformation(android.support.v7.widget.RecyclerView.State, android.support.v7.widget.RecyclerView.ViewHolder, int, java.util.List<java.lang.Object>);
+ method public abstract void runPendingAnimations();
+ method public void setAddDuration(long);
+ method public void setChangeDuration(long);
+ method public void setMoveDuration(long);
+ method public void setRemoveDuration(long);
+ field public static final int FLAG_APPEARED_IN_PRE_LAYOUT = 4096; // 0x1000
+ field public static final int FLAG_CHANGED = 2; // 0x2
+ field public static final int FLAG_INVALIDATED = 4; // 0x4
+ field public static final int FLAG_MOVED = 2048; // 0x800
+ field public static final int FLAG_REMOVED = 8; // 0x8
+ }
+
+ public static abstract class RecyclerView.ItemAnimator.AdapterChanges implements java.lang.annotation.Annotation {
+ }
+
+ public static abstract interface RecyclerView.ItemAnimator.ItemAnimatorFinishedListener {
+ method public abstract void onAnimationsFinished();
+ }
+
+ public static class RecyclerView.ItemAnimator.ItemHolderInfo {
+ ctor public RecyclerView.ItemAnimator.ItemHolderInfo();
+ method public android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo setFrom(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo setFrom(android.support.v7.widget.RecyclerView.ViewHolder, int);
+ field public int bottom;
+ field public int changeFlags;
+ field public int left;
+ field public int right;
+ field public int top;
+ }
+
+ public static abstract class RecyclerView.ItemDecoration {
+ ctor public RecyclerView.ItemDecoration();
+ method public deprecated void getItemOffsets(android.graphics.Rect, int, android.support.v7.widget.RecyclerView);
+ method public void getItemOffsets(android.graphics.Rect, android.view.View, android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.State);
+ method public void onDraw(android.graphics.Canvas, android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.State);
+ method public deprecated void onDraw(android.graphics.Canvas, android.support.v7.widget.RecyclerView);
+ method public void onDrawOver(android.graphics.Canvas, android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.State);
+ method public deprecated void onDrawOver(android.graphics.Canvas, android.support.v7.widget.RecyclerView);
+ }
+
+ public static abstract class RecyclerView.LayoutManager {
+ ctor public RecyclerView.LayoutManager();
+ method public void addDisappearingView(android.view.View);
+ method public void addDisappearingView(android.view.View, int);
+ method public void addView(android.view.View);
+ method public void addView(android.view.View, int);
+ method public void assertInLayoutOrScroll(java.lang.String);
+ method public void assertNotInLayoutOrScroll(java.lang.String);
+ method public void attachView(android.view.View, int, android.support.v7.widget.RecyclerView.LayoutParams);
+ method public void attachView(android.view.View, int);
+ method public void attachView(android.view.View);
+ method public void calculateItemDecorationsForChild(android.view.View, android.graphics.Rect);
+ method public boolean canScrollHorizontally();
+ method public boolean canScrollVertically();
+ method public boolean checkLayoutParams(android.support.v7.widget.RecyclerView.LayoutParams);
+ method public static int chooseSize(int, int, int);
+ method public void collectAdjacentPrefetchPositions(int, int, android.support.v7.widget.RecyclerView.State, android.support.v7.widget.RecyclerView.LayoutManager.LayoutPrefetchRegistry);
+ method public void collectInitialPrefetchPositions(int, android.support.v7.widget.RecyclerView.LayoutManager.LayoutPrefetchRegistry);
+ method public int computeHorizontalScrollExtent(android.support.v7.widget.RecyclerView.State);
+ method public int computeHorizontalScrollOffset(android.support.v7.widget.RecyclerView.State);
+ method public int computeHorizontalScrollRange(android.support.v7.widget.RecyclerView.State);
+ method public int computeVerticalScrollExtent(android.support.v7.widget.RecyclerView.State);
+ method public int computeVerticalScrollOffset(android.support.v7.widget.RecyclerView.State);
+ method public int computeVerticalScrollRange(android.support.v7.widget.RecyclerView.State);
+ method public void detachAndScrapAttachedViews(android.support.v7.widget.RecyclerView.Recycler);
+ method public void detachAndScrapView(android.view.View, android.support.v7.widget.RecyclerView.Recycler);
+ method public void detachAndScrapViewAt(int, android.support.v7.widget.RecyclerView.Recycler);
+ method public void detachView(android.view.View);
+ method public void detachViewAt(int);
+ method public void endAnimation(android.view.View);
+ method public android.view.View findContainingItemView(android.view.View);
+ method public android.view.View findViewByPosition(int);
+ method public abstract android.support.v7.widget.RecyclerView.LayoutParams generateDefaultLayoutParams();
+ method public android.support.v7.widget.RecyclerView.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
+ method public android.support.v7.widget.RecyclerView.LayoutParams generateLayoutParams(android.content.Context, android.util.AttributeSet);
+ method public int getBaseline();
+ method public int getBottomDecorationHeight(android.view.View);
+ method public android.view.View getChildAt(int);
+ method public int getChildCount();
+ method public static deprecated int getChildMeasureSpec(int, int, int, boolean);
+ method public static int getChildMeasureSpec(int, int, int, int, boolean);
+ method public boolean getClipToPadding();
+ method public int getColumnCountForAccessibility(android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State);
+ method public int getDecoratedBottom(android.view.View);
+ method public void getDecoratedBoundsWithMargins(android.view.View, android.graphics.Rect);
+ method public int getDecoratedLeft(android.view.View);
+ method public int getDecoratedMeasuredHeight(android.view.View);
+ method public int getDecoratedMeasuredWidth(android.view.View);
+ method public int getDecoratedRight(android.view.View);
+ method public int getDecoratedTop(android.view.View);
+ method public android.view.View getFocusedChild();
+ method public int getHeight();
+ method public int getHeightMode();
+ method public int getItemCount();
+ method public int getItemViewType(android.view.View);
+ method public int getLayoutDirection();
+ method public int getLeftDecorationWidth(android.view.View);
+ method public int getMinimumHeight();
+ method public int getMinimumWidth();
+ method public int getPaddingBottom();
+ method public int getPaddingEnd();
+ method public int getPaddingLeft();
+ method public int getPaddingRight();
+ method public int getPaddingStart();
+ method public int getPaddingTop();
+ method public int getPosition(android.view.View);
+ method public static android.support.v7.widget.RecyclerView.LayoutManager.Properties getProperties(android.content.Context, android.util.AttributeSet, int, int);
+ method public int getRightDecorationWidth(android.view.View);
+ method public int getRowCountForAccessibility(android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State);
+ method public int getSelectionModeForAccessibility(android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State);
+ method public int getTopDecorationHeight(android.view.View);
+ method public void getTransformedBoundingBox(android.view.View, boolean, android.graphics.Rect);
+ method public int getWidth();
+ method public int getWidthMode();
+ method public boolean hasFocus();
+ method public void ignoreView(android.view.View);
+ method public boolean isAttachedToWindow();
+ method public boolean isAutoMeasureEnabled();
+ method public boolean isFocused();
+ method public final boolean isItemPrefetchEnabled();
+ method public boolean isLayoutHierarchical(android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State);
+ method public boolean isMeasurementCacheEnabled();
+ method public boolean isSmoothScrolling();
+ method public boolean isViewPartiallyVisible(android.view.View, boolean, boolean);
+ method public void layoutDecorated(android.view.View, int, int, int, int);
+ method public void layoutDecoratedWithMargins(android.view.View, int, int, int, int);
+ method public void measureChild(android.view.View, int, int);
+ method public void measureChildWithMargins(android.view.View, int, int);
+ method public void moveView(int, int);
+ method public void offsetChildrenHorizontal(int);
+ method public void offsetChildrenVertical(int);
+ method public void onAdapterChanged(android.support.v7.widget.RecyclerView.Adapter, android.support.v7.widget.RecyclerView.Adapter);
+ method public boolean onAddFocusables(android.support.v7.widget.RecyclerView, java.util.ArrayList<android.view.View>, int, int);
+ method public void onAttachedToWindow(android.support.v7.widget.RecyclerView);
+ method public deprecated void onDetachedFromWindow(android.support.v7.widget.RecyclerView);
+ method public void onDetachedFromWindow(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.Recycler);
+ method public android.view.View onFocusSearchFailed(android.view.View, int, android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State);
+ method public void onInitializeAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
+ method public void onInitializeAccessibilityEvent(android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State, android.view.accessibility.AccessibilityEvent);
+ method public void onInitializeAccessibilityNodeInfo(android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State, android.support.v4.view.accessibility.AccessibilityNodeInfoCompat);
+ method public void onInitializeAccessibilityNodeInfoForItem(android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State, android.view.View, android.support.v4.view.accessibility.AccessibilityNodeInfoCompat);
+ method public android.view.View onInterceptFocusSearch(android.view.View, int);
+ method public void onItemsAdded(android.support.v7.widget.RecyclerView, int, int);
+ method public void onItemsChanged(android.support.v7.widget.RecyclerView);
+ method public void onItemsMoved(android.support.v7.widget.RecyclerView, int, int, int);
+ method public void onItemsRemoved(android.support.v7.widget.RecyclerView, int, int);
+ method public void onItemsUpdated(android.support.v7.widget.RecyclerView, int, int);
+ method public void onItemsUpdated(android.support.v7.widget.RecyclerView, int, int, java.lang.Object);
+ method public void onLayoutChildren(android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State);
+ method public void onLayoutCompleted(android.support.v7.widget.RecyclerView.State);
+ method public void onMeasure(android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State, int, int);
+ method public deprecated boolean onRequestChildFocus(android.support.v7.widget.RecyclerView, android.view.View, android.view.View);
+ method public boolean onRequestChildFocus(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.State, android.view.View, android.view.View);
+ method public void onRestoreInstanceState(android.os.Parcelable);
+ method public android.os.Parcelable onSaveInstanceState();
+ method public void onScrollStateChanged(int);
+ method public boolean performAccessibilityAction(android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State, int, android.os.Bundle);
+ method public boolean performAccessibilityActionForItem(android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State, android.view.View, int, android.os.Bundle);
+ method public void postOnAnimation(java.lang.Runnable);
+ method public void removeAllViews();
+ method public void removeAndRecycleAllViews(android.support.v7.widget.RecyclerView.Recycler);
+ method public void removeAndRecycleView(android.view.View, android.support.v7.widget.RecyclerView.Recycler);
+ method public void removeAndRecycleViewAt(int, android.support.v7.widget.RecyclerView.Recycler);
+ method public boolean removeCallbacks(java.lang.Runnable);
+ method public void removeDetachedView(android.view.View);
+ method public void removeView(android.view.View);
+ method public void removeViewAt(int);
+ method public boolean requestChildRectangleOnScreen(android.support.v7.widget.RecyclerView, android.view.View, android.graphics.Rect, boolean);
+ method public boolean requestChildRectangleOnScreen(android.support.v7.widget.RecyclerView, android.view.View, android.graphics.Rect, boolean, boolean);
+ method public void requestLayout();
+ method public void requestSimpleAnimationsInNextLayout();
+ method public int scrollHorizontallyBy(int, android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State);
+ method public void scrollToPosition(int);
+ method public int scrollVerticallyBy(int, android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State);
+ method public void setAutoMeasureEnabled(boolean);
+ method public final void setItemPrefetchEnabled(boolean);
+ method public void setMeasuredDimension(android.graphics.Rect, int, int);
+ method public void setMeasuredDimension(int, int);
+ method public void setMeasurementCacheEnabled(boolean);
+ method public void smoothScrollToPosition(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.State, int);
+ method public void startSmoothScroll(android.support.v7.widget.RecyclerView.SmoothScroller);
+ method public void stopIgnoringView(android.view.View);
+ method public boolean supportsPredictiveItemAnimations();
+ }
+
+ public static abstract interface RecyclerView.LayoutManager.LayoutPrefetchRegistry {
+ method public abstract void addPosition(int, int);
+ }
+
+ public static class RecyclerView.LayoutManager.Properties {
+ ctor public RecyclerView.LayoutManager.Properties();
+ field public int orientation;
+ field public boolean reverseLayout;
+ field public int spanCount;
+ field public boolean stackFromEnd;
+ }
+
+ public static class RecyclerView.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+ ctor public RecyclerView.LayoutParams(android.content.Context, android.util.AttributeSet);
+ ctor public RecyclerView.LayoutParams(int, int);
+ ctor public RecyclerView.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ ctor public RecyclerView.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public RecyclerView.LayoutParams(android.support.v7.widget.RecyclerView.LayoutParams);
+ method public int getViewAdapterPosition();
+ method public int getViewLayoutPosition();
+ method public deprecated int getViewPosition();
+ method public boolean isItemChanged();
+ method public boolean isItemRemoved();
+ method public boolean isViewInvalid();
+ method public boolean viewNeedsUpdate();
+ }
+
+ public static abstract interface RecyclerView.OnChildAttachStateChangeListener {
+ method public abstract void onChildViewAttachedToWindow(android.view.View);
+ method public abstract void onChildViewDetachedFromWindow(android.view.View);
+ }
+
+ public static abstract class RecyclerView.OnFlingListener {
+ ctor public RecyclerView.OnFlingListener();
+ method public abstract boolean onFling(int, int);
+ }
+
+ public static abstract interface RecyclerView.OnItemTouchListener {
+ method public abstract boolean onInterceptTouchEvent(android.support.v7.widget.RecyclerView, android.view.MotionEvent);
+ method public abstract void onRequestDisallowInterceptTouchEvent(boolean);
+ method public abstract void onTouchEvent(android.support.v7.widget.RecyclerView, android.view.MotionEvent);
+ }
+
+ public static abstract class RecyclerView.OnScrollListener {
+ ctor public RecyclerView.OnScrollListener();
+ method public void onScrollStateChanged(android.support.v7.widget.RecyclerView, int);
+ method public void onScrolled(android.support.v7.widget.RecyclerView, int, int);
+ }
+
+ public static class RecyclerView.RecycledViewPool {
+ ctor public RecyclerView.RecycledViewPool();
+ method public void clear();
+ method public android.support.v7.widget.RecyclerView.ViewHolder getRecycledView(int);
+ method public int getRecycledViewCount(int);
+ method public void putRecycledView(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public void setMaxRecycledViews(int, int);
+ }
+
+ public final class RecyclerView.Recycler {
+ ctor public RecyclerView.Recycler();
+ method public void bindViewToPosition(android.view.View, int);
+ method public void clear();
+ method public int convertPreLayoutPositionToPostLayout(int);
+ method public java.util.List<android.support.v7.widget.RecyclerView.ViewHolder> getScrapList();
+ method public android.view.View getViewForPosition(int);
+ method public void recycleView(android.view.View);
+ method public void setViewCacheSize(int);
+ }
+
+ public static abstract interface RecyclerView.RecyclerListener {
+ method public abstract void onViewRecycled(android.support.v7.widget.RecyclerView.ViewHolder);
+ }
+
+ public static class RecyclerView.SimpleOnItemTouchListener implements android.support.v7.widget.RecyclerView.OnItemTouchListener {
+ ctor public RecyclerView.SimpleOnItemTouchListener();
+ method public boolean onInterceptTouchEvent(android.support.v7.widget.RecyclerView, android.view.MotionEvent);
+ method public void onRequestDisallowInterceptTouchEvent(boolean);
+ method public void onTouchEvent(android.support.v7.widget.RecyclerView, android.view.MotionEvent);
+ }
+
+ public static abstract class RecyclerView.SmoothScroller {
+ ctor public RecyclerView.SmoothScroller();
+ method public android.view.View findViewByPosition(int);
+ method public int getChildCount();
+ method public int getChildPosition(android.view.View);
+ method public android.support.v7.widget.RecyclerView.LayoutManager getLayoutManager();
+ method public int getTargetPosition();
+ method public deprecated void instantScrollToPosition(int);
+ method public boolean isPendingInitialRun();
+ method public boolean isRunning();
+ method protected void normalize(android.graphics.PointF);
+ method protected void onChildAttachedToWindow(android.view.View);
+ method protected abstract void onSeekTargetStep(int, int, android.support.v7.widget.RecyclerView.State, android.support.v7.widget.RecyclerView.SmoothScroller.Action);
+ method protected abstract void onStart();
+ method protected abstract void onStop();
+ method protected abstract void onTargetFound(android.view.View, android.support.v7.widget.RecyclerView.State, android.support.v7.widget.RecyclerView.SmoothScroller.Action);
+ method public void setTargetPosition(int);
+ method protected final void stop();
+ }
+
+ public static class RecyclerView.SmoothScroller.Action {
+ ctor public RecyclerView.SmoothScroller.Action(int, int);
+ ctor public RecyclerView.SmoothScroller.Action(int, int, int);
+ ctor public RecyclerView.SmoothScroller.Action(int, int, int, android.view.animation.Interpolator);
+ method public int getDuration();
+ method public int getDx();
+ method public int getDy();
+ method public android.view.animation.Interpolator getInterpolator();
+ method public void jumpTo(int);
+ method public void setDuration(int);
+ method public void setDx(int);
+ method public void setDy(int);
+ method public void setInterpolator(android.view.animation.Interpolator);
+ method public void update(int, int, int, android.view.animation.Interpolator);
+ field public static final int UNDEFINED_DURATION = -2147483648; // 0x80000000
+ }
+
+ public static abstract interface RecyclerView.SmoothScroller.ScrollVectorProvider {
+ method public abstract android.graphics.PointF computeScrollVectorForPosition(int);
+ }
+
+ public static class RecyclerView.State {
+ ctor public RecyclerView.State();
+ method public boolean didStructureChange();
+ method public <T> T get(int);
+ method public int getItemCount();
+ method public int getRemainingScrollHorizontal();
+ method public int getRemainingScrollVertical();
+ method public int getTargetScrollPosition();
+ method public boolean hasTargetScrollPosition();
+ method public boolean isMeasuring();
+ method public boolean isPreLayout();
+ method public void put(int, java.lang.Object);
+ method public void remove(int);
+ method public boolean willRunPredictiveAnimations();
+ method public boolean willRunSimpleAnimations();
+ }
+
+ public static abstract class RecyclerView.ViewCacheExtension {
+ ctor public RecyclerView.ViewCacheExtension();
+ method public abstract android.view.View getViewForPositionAndType(android.support.v7.widget.RecyclerView.Recycler, int, int);
+ }
+
+ public static abstract class RecyclerView.ViewHolder {
+ ctor public RecyclerView.ViewHolder(android.view.View);
+ method public final int getAdapterPosition();
+ method public final long getItemId();
+ method public final int getItemViewType();
+ method public final int getLayoutPosition();
+ method public final int getOldPosition();
+ method public final deprecated int getPosition();
+ method public final boolean isRecyclable();
+ method public final void setIsRecyclable(boolean);
+ field public final android.view.View itemView;
+ }
+
+ public class RecyclerViewAccessibilityDelegate extends android.support.v4.view.AccessibilityDelegateCompat {
+ ctor public RecyclerViewAccessibilityDelegate(android.support.v7.widget.RecyclerView);
+ method public android.support.v4.view.AccessibilityDelegateCompat getItemDelegate();
+ }
+
+ public static class RecyclerViewAccessibilityDelegate.ItemDelegate extends android.support.v4.view.AccessibilityDelegateCompat {
+ ctor public RecyclerViewAccessibilityDelegate.ItemDelegate(android.support.v7.widget.RecyclerViewAccessibilityDelegate);
+ }
+
+ public abstract class SimpleItemAnimator extends android.support.v7.widget.RecyclerView.ItemAnimator {
+ ctor public SimpleItemAnimator();
+ method public abstract boolean animateAdd(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public boolean animateAppearance(android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+ method public boolean animateChange(android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+ method public abstract boolean animateChange(android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ViewHolder, int, int, int, int);
+ method public boolean animateDisappearance(android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+ method public abstract boolean animateMove(android.support.v7.widget.RecyclerView.ViewHolder, int, int, int, int);
+ method public boolean animatePersistence(android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+ method public abstract boolean animateRemove(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public final void dispatchAddFinished(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public final void dispatchAddStarting(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public final void dispatchChangeFinished(android.support.v7.widget.RecyclerView.ViewHolder, boolean);
+ method public final void dispatchChangeStarting(android.support.v7.widget.RecyclerView.ViewHolder, boolean);
+ method public final void dispatchMoveFinished(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public final void dispatchMoveStarting(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public final void dispatchRemoveFinished(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public final void dispatchRemoveStarting(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public boolean getSupportsChangeAnimations();
+ method public void onAddFinished(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public void onAddStarting(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public void onChangeFinished(android.support.v7.widget.RecyclerView.ViewHolder, boolean);
+ method public void onChangeStarting(android.support.v7.widget.RecyclerView.ViewHolder, boolean);
+ method public void onMoveFinished(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public void onMoveStarting(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public void onRemoveFinished(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public void onRemoveStarting(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public void setSupportsChangeAnimations(boolean);
+ }
+
+ public abstract class SnapHelper extends android.support.v7.widget.RecyclerView.OnFlingListener {
+ ctor public SnapHelper();
+ method public void attachToRecyclerView(android.support.v7.widget.RecyclerView) throws java.lang.IllegalStateException;
+ method public abstract int[] calculateDistanceToFinalSnap(android.support.v7.widget.RecyclerView.LayoutManager, android.view.View);
+ method public int[] calculateScrollDistance(int, int);
+ method protected android.support.v7.widget.RecyclerView.SmoothScroller createScroller(android.support.v7.widget.RecyclerView.LayoutManager);
+ method protected deprecated android.support.v7.widget.LinearSmoothScroller createSnapScroller(android.support.v7.widget.RecyclerView.LayoutManager);
+ method public abstract android.view.View findSnapView(android.support.v7.widget.RecyclerView.LayoutManager);
+ method public abstract int findTargetSnapPosition(android.support.v7.widget.RecyclerView.LayoutManager, int, int);
+ method public boolean onFling(int, int);
+ }
+
+ public class StaggeredGridLayoutManager extends android.support.v7.widget.RecyclerView.LayoutManager implements android.support.v7.widget.RecyclerView.SmoothScroller.ScrollVectorProvider {
+ ctor public StaggeredGridLayoutManager(android.content.Context, android.util.AttributeSet, int, int);
+ ctor public StaggeredGridLayoutManager(int, int);
+ method public android.graphics.PointF computeScrollVectorForPosition(int);
+ method public int[] findFirstCompletelyVisibleItemPositions(int[]);
+ method public int[] findFirstVisibleItemPositions(int[]);
+ method public int[] findLastCompletelyVisibleItemPositions(int[]);
+ method public int[] findLastVisibleItemPositions(int[]);
+ method public android.support.v7.widget.RecyclerView.LayoutParams generateDefaultLayoutParams();
+ method public int getGapStrategy();
+ method public int getOrientation();
+ method public boolean getReverseLayout();
+ method public int getSpanCount();
+ method public void invalidateSpanAssignments();
+ method public void scrollToPositionWithOffset(int, int);
+ method public void setGapStrategy(int);
+ method public void setOrientation(int);
+ method public void setReverseLayout(boolean);
+ method public void setSpanCount(int);
+ field public static final deprecated int GAP_HANDLING_LAZY = 1; // 0x1
+ field public static final int GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS = 2; // 0x2
+ field public static final int GAP_HANDLING_NONE = 0; // 0x0
+ field public static final int HORIZONTAL = 0; // 0x0
+ field public static final int VERTICAL = 1; // 0x1
+ }
+
+ public static class StaggeredGridLayoutManager.LayoutParams extends android.support.v7.widget.RecyclerView.LayoutParams {
+ ctor public StaggeredGridLayoutManager.LayoutParams(android.content.Context, android.util.AttributeSet);
+ ctor public StaggeredGridLayoutManager.LayoutParams(int, int);
+ ctor public StaggeredGridLayoutManager.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ ctor public StaggeredGridLayoutManager.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public StaggeredGridLayoutManager.LayoutParams(android.support.v7.widget.RecyclerView.LayoutParams);
+ method public final int getSpanIndex();
+ method public boolean isFullSpan();
+ method public void setFullSpan(boolean);
+ field public static final int INVALID_SPAN_ID = -1; // 0xffffffff
+ }
+
+}
+
+package android.support.v7.widget.helper {
+
+ public class ItemTouchHelper extends android.support.v7.widget.RecyclerView.ItemDecoration implements android.support.v7.widget.RecyclerView.OnChildAttachStateChangeListener {
+ ctor public ItemTouchHelper(android.support.v7.widget.helper.ItemTouchHelper.Callback);
+ method public void attachToRecyclerView(android.support.v7.widget.RecyclerView);
+ method public void onChildViewAttachedToWindow(android.view.View);
+ method public void onChildViewDetachedFromWindow(android.view.View);
+ method public void startDrag(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public void startSwipe(android.support.v7.widget.RecyclerView.ViewHolder);
+ field public static final int ACTION_STATE_DRAG = 2; // 0x2
+ field public static final int ACTION_STATE_IDLE = 0; // 0x0
+ field public static final int ACTION_STATE_SWIPE = 1; // 0x1
+ field public static final int ANIMATION_TYPE_DRAG = 8; // 0x8
+ field public static final int ANIMATION_TYPE_SWIPE_CANCEL = 4; // 0x4
+ field public static final int ANIMATION_TYPE_SWIPE_SUCCESS = 2; // 0x2
+ field public static final int DOWN = 2; // 0x2
+ field public static final int END = 32; // 0x20
+ field public static final int LEFT = 4; // 0x4
+ field public static final int RIGHT = 8; // 0x8
+ field public static final int START = 16; // 0x10
+ field public static final int UP = 1; // 0x1
+ }
+
+ public static abstract class ItemTouchHelper.Callback {
+ ctor public ItemTouchHelper.Callback();
+ method public boolean canDropOver(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ViewHolder);
+ method public android.support.v7.widget.RecyclerView.ViewHolder chooseDropTarget(android.support.v7.widget.RecyclerView.ViewHolder, java.util.List<android.support.v7.widget.RecyclerView.ViewHolder>, int, int);
+ method public void clearView(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder);
+ method public int convertToAbsoluteDirection(int, int);
+ method public static int convertToRelativeDirection(int, int);
+ method public long getAnimationDuration(android.support.v7.widget.RecyclerView, int, float, float);
+ method public int getBoundingBoxMargin();
+ method public static android.support.v7.widget.helper.ItemTouchUIUtil getDefaultUIUtil();
+ method public float getMoveThreshold(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public abstract int getMovementFlags(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder);
+ method public float getSwipeEscapeVelocity(float);
+ method public float getSwipeThreshold(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public float getSwipeVelocityThreshold(float);
+ method public int interpolateOutOfBoundsScroll(android.support.v7.widget.RecyclerView, int, int, int, long);
+ method public boolean isItemViewSwipeEnabled();
+ method public boolean isLongPressDragEnabled();
+ method public static int makeFlag(int, int);
+ method public static int makeMovementFlags(int, int);
+ method public void onChildDraw(android.graphics.Canvas, android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder, float, float, int, boolean);
+ method public void onChildDrawOver(android.graphics.Canvas, android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder, float, float, int, boolean);
+ method public abstract boolean onMove(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ViewHolder);
+ method public void onMoved(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder, int, android.support.v7.widget.RecyclerView.ViewHolder, int, int, int);
+ method public void onSelectedChanged(android.support.v7.widget.RecyclerView.ViewHolder, int);
+ method public abstract void onSwiped(android.support.v7.widget.RecyclerView.ViewHolder, int);
+ field public static final int DEFAULT_DRAG_ANIMATION_DURATION = 200; // 0xc8
+ field public static final int DEFAULT_SWIPE_ANIMATION_DURATION = 250; // 0xfa
+ }
+
+ public static abstract class ItemTouchHelper.SimpleCallback extends android.support.v7.widget.helper.ItemTouchHelper.Callback {
+ ctor public ItemTouchHelper.SimpleCallback(int, int);
+ method public int getDragDirs(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder);
+ method public int getMovementFlags(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder);
+ method public int getSwipeDirs(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder);
+ method public void setDefaultDragDirs(int);
+ method public void setDefaultSwipeDirs(int);
+ }
+
+ public static abstract interface ItemTouchHelper.ViewDropHandler {
+ method public abstract void prepareForDrop(android.view.View, android.view.View, int, int);
+ }
+
+ public abstract interface ItemTouchUIUtil {
+ method public abstract void clearView(android.view.View);
+ method public abstract void onDraw(android.graphics.Canvas, android.support.v7.widget.RecyclerView, android.view.View, float, float, int, boolean);
+ method public abstract void onDrawOver(android.graphics.Canvas, android.support.v7.widget.RecyclerView, android.view.View, float, float, int, boolean);
+ method public abstract void onSelected(android.view.View);
+ }
+
+}
+
+package android.support.v7.widget.util {
+
+ public abstract class SortedListAdapterCallback<T2> extends android.support.v7.util.SortedList.Callback {
+ ctor public SortedListAdapterCallback(android.support.v7.widget.RecyclerView.Adapter);
+ method public void onChanged(int, int);
+ method public void onInserted(int, int);
+ method public void onMoved(int, int);
+ method public void onRemoved(int, int);
+ }
+
+}
+
diff --git a/v7/recyclerview/api/27.0.0.txt b/v7/recyclerview/api/27.0.0.txt
new file mode 100644
index 0000000..9b4500a
--- /dev/null
+++ b/v7/recyclerview/api/27.0.0.txt
@@ -0,0 +1,962 @@
+package android.support.v7.util {
+
+ public class AsyncListUtil<T> {
+ ctor public AsyncListUtil(java.lang.Class<T>, int, android.support.v7.util.AsyncListUtil.DataCallback<T>, android.support.v7.util.AsyncListUtil.ViewCallback);
+ method public T getItem(int);
+ method public int getItemCount();
+ method public void onRangeChanged();
+ method public void refresh();
+ }
+
+ public static abstract class AsyncListUtil.DataCallback<T> {
+ ctor public AsyncListUtil.DataCallback();
+ method public abstract void fillData(T[], int, int);
+ method public int getMaxCachedTiles();
+ method public void recycleData(T[], int);
+ method public abstract int refreshData();
+ }
+
+ public static abstract class AsyncListUtil.ViewCallback {
+ ctor public AsyncListUtil.ViewCallback();
+ method public void extendRangeInto(int[], int[], int);
+ method public abstract void getItemRangeInto(int[]);
+ method public abstract void onDataRefresh();
+ method public abstract void onItemLoaded(int);
+ field public static final int HINT_SCROLL_ASC = 2; // 0x2
+ field public static final int HINT_SCROLL_DESC = 1; // 0x1
+ field public static final int HINT_SCROLL_NONE = 0; // 0x0
+ }
+
+ public class BatchingListUpdateCallback implements android.support.v7.util.ListUpdateCallback {
+ ctor public BatchingListUpdateCallback(android.support.v7.util.ListUpdateCallback);
+ method public void dispatchLastEvent();
+ method public void onChanged(int, int, java.lang.Object);
+ method public void onInserted(int, int);
+ method public void onMoved(int, int);
+ method public void onRemoved(int, int);
+ }
+
+ public class DiffUtil {
+ method public static android.support.v7.util.DiffUtil.DiffResult calculateDiff(android.support.v7.util.DiffUtil.Callback);
+ method public static android.support.v7.util.DiffUtil.DiffResult calculateDiff(android.support.v7.util.DiffUtil.Callback, boolean);
+ }
+
+ public static abstract class DiffUtil.Callback {
+ ctor public DiffUtil.Callback();
+ method public abstract boolean areContentsTheSame(int, int);
+ method public abstract boolean areItemsTheSame(int, int);
+ method public java.lang.Object getChangePayload(int, int);
+ method public abstract int getNewListSize();
+ method public abstract int getOldListSize();
+ }
+
+ public static class DiffUtil.DiffResult {
+ method public void dispatchUpdatesTo(android.support.v7.widget.RecyclerView.Adapter);
+ method public void dispatchUpdatesTo(android.support.v7.util.ListUpdateCallback);
+ }
+
+ public abstract interface ListUpdateCallback {
+ method public abstract void onChanged(int, int, java.lang.Object);
+ method public abstract void onInserted(int, int);
+ method public abstract void onMoved(int, int);
+ method public abstract void onRemoved(int, int);
+ }
+
+ public class SortedList<T> {
+ ctor public SortedList(java.lang.Class<T>, android.support.v7.util.SortedList.Callback<T>);
+ ctor public SortedList(java.lang.Class<T>, android.support.v7.util.SortedList.Callback<T>, int);
+ method public int add(T);
+ method public void addAll(T[], boolean);
+ method public void addAll(T...);
+ method public void addAll(java.util.Collection<T>);
+ method public void beginBatchedUpdates();
+ method public void clear();
+ method public void endBatchedUpdates();
+ method public T get(int) throws java.lang.IndexOutOfBoundsException;
+ method public int indexOf(T);
+ method public void recalculatePositionOfItemAt(int);
+ method public boolean remove(T);
+ method public T removeItemAt(int);
+ method public int size();
+ method public void updateItemAt(int, T);
+ field public static final int INVALID_POSITION = -1; // 0xffffffff
+ }
+
+ public static class SortedList.BatchedCallback<T2> extends android.support.v7.util.SortedList.Callback {
+ ctor public SortedList.BatchedCallback(android.support.v7.util.SortedList.Callback<T2>);
+ method public boolean areContentsTheSame(T2, T2);
+ method public boolean areItemsTheSame(T2, T2);
+ method public int compare(T2, T2);
+ method public void dispatchLastEvent();
+ method public void onChanged(int, int);
+ method public void onInserted(int, int);
+ method public void onMoved(int, int);
+ method public void onRemoved(int, int);
+ }
+
+ public static abstract class SortedList.Callback<T2> implements java.util.Comparator android.support.v7.util.ListUpdateCallback {
+ ctor public SortedList.Callback();
+ method public abstract boolean areContentsTheSame(T2, T2);
+ method public abstract boolean areItemsTheSame(T2, T2);
+ method public abstract int compare(T2, T2);
+ method public abstract void onChanged(int, int);
+ method public void onChanged(int, int, java.lang.Object);
+ }
+
+}
+
+package android.support.v7.widget {
+
+ public class DefaultItemAnimator extends android.support.v7.widget.SimpleItemAnimator {
+ ctor public DefaultItemAnimator();
+ method public boolean animateAdd(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public boolean animateChange(android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ViewHolder, int, int, int, int);
+ method public boolean animateMove(android.support.v7.widget.RecyclerView.ViewHolder, int, int, int, int);
+ method public boolean animateRemove(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public void endAnimation(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public void endAnimations();
+ method public boolean isRunning();
+ method public void runPendingAnimations();
+ }
+
+ public class DividerItemDecoration extends android.support.v7.widget.RecyclerView.ItemDecoration {
+ ctor public DividerItemDecoration(android.content.Context, int);
+ method public void setDrawable(android.graphics.drawable.Drawable);
+ method public void setOrientation(int);
+ field public static final int HORIZONTAL = 0; // 0x0
+ field public static final int VERTICAL = 1; // 0x1
+ }
+
+ public class GridLayoutManager extends android.support.v7.widget.LinearLayoutManager {
+ ctor public GridLayoutManager(android.content.Context, android.util.AttributeSet, int, int);
+ ctor public GridLayoutManager(android.content.Context, int);
+ ctor public GridLayoutManager(android.content.Context, int, int, boolean);
+ method public int getSpanCount();
+ method public android.support.v7.widget.GridLayoutManager.SpanSizeLookup getSpanSizeLookup();
+ method public void setSpanCount(int);
+ method public void setSpanSizeLookup(android.support.v7.widget.GridLayoutManager.SpanSizeLookup);
+ field public static final int DEFAULT_SPAN_COUNT = -1; // 0xffffffff
+ }
+
+ public static final class GridLayoutManager.DefaultSpanSizeLookup extends android.support.v7.widget.GridLayoutManager.SpanSizeLookup {
+ ctor public GridLayoutManager.DefaultSpanSizeLookup();
+ method public int getSpanSize(int);
+ }
+
+ public static class GridLayoutManager.LayoutParams extends android.support.v7.widget.RecyclerView.LayoutParams {
+ ctor public GridLayoutManager.LayoutParams(android.content.Context, android.util.AttributeSet);
+ ctor public GridLayoutManager.LayoutParams(int, int);
+ ctor public GridLayoutManager.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ ctor public GridLayoutManager.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public GridLayoutManager.LayoutParams(android.support.v7.widget.RecyclerView.LayoutParams);
+ method public int getSpanIndex();
+ method public int getSpanSize();
+ field public static final int INVALID_SPAN_ID = -1; // 0xffffffff
+ }
+
+ public static abstract class GridLayoutManager.SpanSizeLookup {
+ ctor public GridLayoutManager.SpanSizeLookup();
+ method public int getSpanGroupIndex(int, int);
+ method public int getSpanIndex(int, int);
+ method public abstract int getSpanSize(int);
+ method public void invalidateSpanIndexCache();
+ method public boolean isSpanIndexCacheEnabled();
+ method public void setSpanIndexCacheEnabled(boolean);
+ }
+
+ public class LinearLayoutManager extends android.support.v7.widget.RecyclerView.LayoutManager implements android.support.v7.widget.helper.ItemTouchHelper.ViewDropHandler android.support.v7.widget.RecyclerView.SmoothScroller.ScrollVectorProvider {
+ ctor public LinearLayoutManager(android.content.Context);
+ ctor public LinearLayoutManager(android.content.Context, int, boolean);
+ ctor public LinearLayoutManager(android.content.Context, android.util.AttributeSet, int, int);
+ method public android.graphics.PointF computeScrollVectorForPosition(int);
+ method public int findFirstCompletelyVisibleItemPosition();
+ method public int findFirstVisibleItemPosition();
+ method public int findLastCompletelyVisibleItemPosition();
+ method public int findLastVisibleItemPosition();
+ method public android.support.v7.widget.RecyclerView.LayoutParams generateDefaultLayoutParams();
+ method protected int getExtraLayoutSpace(android.support.v7.widget.RecyclerView.State);
+ method public int getInitialPrefetchItemCount();
+ method public int getOrientation();
+ method public boolean getRecycleChildrenOnDetach();
+ method public boolean getReverseLayout();
+ method public boolean getStackFromEnd();
+ method protected boolean isLayoutRTL();
+ method public boolean isSmoothScrollbarEnabled();
+ method public void scrollToPositionWithOffset(int, int);
+ method public void setInitialPrefetchItemCount(int);
+ method public void setOrientation(int);
+ method public void setRecycleChildrenOnDetach(boolean);
+ method public void setReverseLayout(boolean);
+ method public void setSmoothScrollbarEnabled(boolean);
+ method public void setStackFromEnd(boolean);
+ field public static final int HORIZONTAL = 0; // 0x0
+ field public static final int INVALID_OFFSET = -2147483648; // 0x80000000
+ field public static final int VERTICAL = 1; // 0x1
+ }
+
+ protected static class LinearLayoutManager.LayoutChunkResult {
+ ctor protected LinearLayoutManager.LayoutChunkResult();
+ field public int mConsumed;
+ field public boolean mFinished;
+ field public boolean mFocusable;
+ field public boolean mIgnoreConsumed;
+ }
+
+ public class LinearSmoothScroller extends android.support.v7.widget.RecyclerView.SmoothScroller {
+ ctor public LinearSmoothScroller(android.content.Context);
+ method public int calculateDtToFit(int, int, int, int, int);
+ method public int calculateDxToMakeVisible(android.view.View, int);
+ method public int calculateDyToMakeVisible(android.view.View, int);
+ method protected float calculateSpeedPerPixel(android.util.DisplayMetrics);
+ method protected int calculateTimeForDeceleration(int);
+ method protected int calculateTimeForScrolling(int);
+ method public android.graphics.PointF computeScrollVectorForPosition(int);
+ method protected int getHorizontalSnapPreference();
+ method protected int getVerticalSnapPreference();
+ method protected void onSeekTargetStep(int, int, android.support.v7.widget.RecyclerView.State, android.support.v7.widget.RecyclerView.SmoothScroller.Action);
+ method protected void onStart();
+ method protected void onStop();
+ method protected void onTargetFound(android.view.View, android.support.v7.widget.RecyclerView.State, android.support.v7.widget.RecyclerView.SmoothScroller.Action);
+ method protected void updateActionForInterimTarget(android.support.v7.widget.RecyclerView.SmoothScroller.Action);
+ field public static final int SNAP_TO_ANY = 0; // 0x0
+ field public static final int SNAP_TO_END = 1; // 0x1
+ field public static final int SNAP_TO_START = -1; // 0xffffffff
+ field protected final android.view.animation.DecelerateInterpolator mDecelerateInterpolator;
+ field protected int mInterimTargetDx;
+ field protected int mInterimTargetDy;
+ field protected final android.view.animation.LinearInterpolator mLinearInterpolator;
+ field protected android.graphics.PointF mTargetVector;
+ }
+
+ public class LinearSnapHelper extends android.support.v7.widget.SnapHelper {
+ ctor public LinearSnapHelper();
+ method public int[] calculateDistanceToFinalSnap(android.support.v7.widget.RecyclerView.LayoutManager, android.view.View);
+ method public android.view.View findSnapView(android.support.v7.widget.RecyclerView.LayoutManager);
+ method public int findTargetSnapPosition(android.support.v7.widget.RecyclerView.LayoutManager, int, int);
+ }
+
+ public abstract class OrientationHelper {
+ method public static android.support.v7.widget.OrientationHelper createHorizontalHelper(android.support.v7.widget.RecyclerView.LayoutManager);
+ method public static android.support.v7.widget.OrientationHelper createOrientationHelper(android.support.v7.widget.RecyclerView.LayoutManager, int);
+ method public static android.support.v7.widget.OrientationHelper createVerticalHelper(android.support.v7.widget.RecyclerView.LayoutManager);
+ method public abstract int getDecoratedEnd(android.view.View);
+ method public abstract int getDecoratedMeasurement(android.view.View);
+ method public abstract int getDecoratedMeasurementInOther(android.view.View);
+ method public abstract int getDecoratedStart(android.view.View);
+ method public abstract int getEnd();
+ method public abstract int getEndAfterPadding();
+ method public abstract int getEndPadding();
+ method public abstract int getMode();
+ method public abstract int getModeInOther();
+ method public abstract int getStartAfterPadding();
+ method public abstract int getTotalSpace();
+ method public int getTotalSpaceChange();
+ method public abstract int getTransformedEndWithDecoration(android.view.View);
+ method public abstract int getTransformedStartWithDecoration(android.view.View);
+ method public abstract void offsetChild(android.view.View, int);
+ method public abstract void offsetChildren(int);
+ method public void onLayoutComplete();
+ field public static final int HORIZONTAL = 0; // 0x0
+ field public static final int VERTICAL = 1; // 0x1
+ field protected final android.support.v7.widget.RecyclerView.LayoutManager mLayoutManager;
+ }
+
+ public class PagerSnapHelper extends android.support.v7.widget.SnapHelper {
+ ctor public PagerSnapHelper();
+ method public int[] calculateDistanceToFinalSnap(android.support.v7.widget.RecyclerView.LayoutManager, android.view.View);
+ method protected android.support.v7.widget.LinearSmoothScroller createSnapScroller(android.support.v7.widget.RecyclerView.LayoutManager);
+ method public android.view.View findSnapView(android.support.v7.widget.RecyclerView.LayoutManager);
+ method public int findTargetSnapPosition(android.support.v7.widget.RecyclerView.LayoutManager, int, int);
+ }
+
+ public class RecyclerView extends android.view.ViewGroup {
+ ctor public RecyclerView(android.content.Context);
+ ctor public RecyclerView(android.content.Context, android.util.AttributeSet);
+ ctor public RecyclerView(android.content.Context, android.util.AttributeSet, int);
+ method public void addItemDecoration(android.support.v7.widget.RecyclerView.ItemDecoration, int);
+ method public void addItemDecoration(android.support.v7.widget.RecyclerView.ItemDecoration);
+ method public void addOnChildAttachStateChangeListener(android.support.v7.widget.RecyclerView.OnChildAttachStateChangeListener);
+ method public void addOnItemTouchListener(android.support.v7.widget.RecyclerView.OnItemTouchListener);
+ method public void addOnScrollListener(android.support.v7.widget.RecyclerView.OnScrollListener);
+ method public void clearOnChildAttachStateChangeListeners();
+ method public void clearOnScrollListeners();
+ method public int computeHorizontalScrollExtent();
+ method public int computeHorizontalScrollOffset();
+ method public int computeHorizontalScrollRange();
+ method public int computeVerticalScrollExtent();
+ method public int computeVerticalScrollOffset();
+ method public int computeVerticalScrollRange();
+ method public boolean dispatchNestedPreScroll(int, int, int[], int[], int);
+ method public boolean dispatchNestedScroll(int, int, int, int, int[], int);
+ method public boolean drawChild(android.graphics.Canvas, android.view.View, long);
+ method public android.view.View findChildViewUnder(float, float);
+ method public android.view.View findContainingItemView(android.view.View);
+ method public android.support.v7.widget.RecyclerView.ViewHolder findContainingViewHolder(android.view.View);
+ method public android.support.v7.widget.RecyclerView.ViewHolder findViewHolderForAdapterPosition(int);
+ method public android.support.v7.widget.RecyclerView.ViewHolder findViewHolderForItemId(long);
+ method public android.support.v7.widget.RecyclerView.ViewHolder findViewHolderForLayoutPosition(int);
+ method public deprecated android.support.v7.widget.RecyclerView.ViewHolder findViewHolderForPosition(int);
+ method public boolean fling(int, int);
+ method public android.support.v7.widget.RecyclerView.Adapter getAdapter();
+ method public int getChildAdapterPosition(android.view.View);
+ method public long getChildItemId(android.view.View);
+ method public int getChildLayoutPosition(android.view.View);
+ method public deprecated int getChildPosition(android.view.View);
+ method public android.support.v7.widget.RecyclerView.ViewHolder getChildViewHolder(android.view.View);
+ method public android.support.v7.widget.RecyclerViewAccessibilityDelegate getCompatAccessibilityDelegate();
+ method public void getDecoratedBoundsWithMargins(android.view.View, android.graphics.Rect);
+ method public android.support.v7.widget.RecyclerView.ItemAnimator getItemAnimator();
+ method public android.support.v7.widget.RecyclerView.ItemDecoration getItemDecorationAt(int);
+ method public int getItemDecorationCount();
+ method public android.support.v7.widget.RecyclerView.LayoutManager getLayoutManager();
+ method public int getMaxFlingVelocity();
+ method public int getMinFlingVelocity();
+ method public android.support.v7.widget.RecyclerView.OnFlingListener getOnFlingListener();
+ method public boolean getPreserveFocusAfterLayout();
+ method public android.support.v7.widget.RecyclerView.RecycledViewPool getRecycledViewPool();
+ method public int getScrollState();
+ method public boolean hasFixedSize();
+ method public boolean hasNestedScrollingParent(int);
+ method public boolean hasPendingAdapterUpdates();
+ method public void invalidateItemDecorations();
+ method public boolean isAnimating();
+ method public boolean isComputingLayout();
+ method public boolean isLayoutFrozen();
+ method public void offsetChildrenHorizontal(int);
+ method public void offsetChildrenVertical(int);
+ method public void onChildAttachedToWindow(android.view.View);
+ method public void onChildDetachedFromWindow(android.view.View);
+ method public void onDraw(android.graphics.Canvas);
+ method protected void onLayout(boolean, int, int, int, int);
+ method public void onScrollStateChanged(int);
+ method public void onScrolled(int, int);
+ method public void removeItemDecoration(android.support.v7.widget.RecyclerView.ItemDecoration);
+ method public void removeItemDecorationAt(int);
+ method public void removeOnChildAttachStateChangeListener(android.support.v7.widget.RecyclerView.OnChildAttachStateChangeListener);
+ method public void removeOnItemTouchListener(android.support.v7.widget.RecyclerView.OnItemTouchListener);
+ method public void removeOnScrollListener(android.support.v7.widget.RecyclerView.OnScrollListener);
+ method public void scrollToPosition(int);
+ method public void setAccessibilityDelegateCompat(android.support.v7.widget.RecyclerViewAccessibilityDelegate);
+ method public void setAdapter(android.support.v7.widget.RecyclerView.Adapter);
+ method public void setChildDrawingOrderCallback(android.support.v7.widget.RecyclerView.ChildDrawingOrderCallback);
+ method public void setHasFixedSize(boolean);
+ method public void setItemAnimator(android.support.v7.widget.RecyclerView.ItemAnimator);
+ method public void setItemViewCacheSize(int);
+ method public void setLayoutFrozen(boolean);
+ method public void setLayoutManager(android.support.v7.widget.RecyclerView.LayoutManager);
+ method public void setOnFlingListener(android.support.v7.widget.RecyclerView.OnFlingListener);
+ method public deprecated void setOnScrollListener(android.support.v7.widget.RecyclerView.OnScrollListener);
+ method public void setPreserveFocusAfterLayout(boolean);
+ method public void setRecycledViewPool(android.support.v7.widget.RecyclerView.RecycledViewPool);
+ method public void setRecyclerListener(android.support.v7.widget.RecyclerView.RecyclerListener);
+ method public void setScrollingTouchSlop(int);
+ method public void setViewCacheExtension(android.support.v7.widget.RecyclerView.ViewCacheExtension);
+ method public void smoothScrollBy(int, int);
+ method public void smoothScrollBy(int, int, android.view.animation.Interpolator);
+ method public void smoothScrollToPosition(int);
+ method public boolean startNestedScroll(int, int);
+ method public void stopNestedScroll(int);
+ method public void stopScroll();
+ method public void swapAdapter(android.support.v7.widget.RecyclerView.Adapter, boolean);
+ field public static final int HORIZONTAL = 0; // 0x0
+ field public static final int INVALID_TYPE = -1; // 0xffffffff
+ field public static final long NO_ID = -1L; // 0xffffffffffffffffL
+ field public static final int NO_POSITION = -1; // 0xffffffff
+ field public static final int SCROLL_STATE_DRAGGING = 1; // 0x1
+ field public static final int SCROLL_STATE_IDLE = 0; // 0x0
+ field public static final int SCROLL_STATE_SETTLING = 2; // 0x2
+ field public static final int TOUCH_SLOP_DEFAULT = 0; // 0x0
+ field public static final int TOUCH_SLOP_PAGING = 1; // 0x1
+ field public static final int VERTICAL = 1; // 0x1
+ }
+
+ public static abstract class RecyclerView.Adapter<VH extends android.support.v7.widget.RecyclerView.ViewHolder> {
+ ctor public RecyclerView.Adapter();
+ method public final void bindViewHolder(VH, int);
+ method public final VH createViewHolder(android.view.ViewGroup, int);
+ method public abstract int getItemCount();
+ method public long getItemId(int);
+ method public int getItemViewType(int);
+ method public final boolean hasObservers();
+ method public final boolean hasStableIds();
+ method public final void notifyDataSetChanged();
+ method public final void notifyItemChanged(int);
+ method public final void notifyItemChanged(int, java.lang.Object);
+ method public final void notifyItemInserted(int);
+ method public final void notifyItemMoved(int, int);
+ method public final void notifyItemRangeChanged(int, int);
+ method public final void notifyItemRangeChanged(int, int, java.lang.Object);
+ method public final void notifyItemRangeInserted(int, int);
+ method public final void notifyItemRangeRemoved(int, int);
+ method public final void notifyItemRemoved(int);
+ method public void onAttachedToRecyclerView(android.support.v7.widget.RecyclerView);
+ method public abstract void onBindViewHolder(VH, int);
+ method public void onBindViewHolder(VH, int, java.util.List<java.lang.Object>);
+ method public abstract VH onCreateViewHolder(android.view.ViewGroup, int);
+ method public void onDetachedFromRecyclerView(android.support.v7.widget.RecyclerView);
+ method public boolean onFailedToRecycleView(VH);
+ method public void onViewAttachedToWindow(VH);
+ method public void onViewDetachedFromWindow(VH);
+ method public void onViewRecycled(VH);
+ method public void registerAdapterDataObserver(android.support.v7.widget.RecyclerView.AdapterDataObserver);
+ method public void setHasStableIds(boolean);
+ method public void unregisterAdapterDataObserver(android.support.v7.widget.RecyclerView.AdapterDataObserver);
+ }
+
+ public static abstract class RecyclerView.AdapterDataObserver {
+ ctor public RecyclerView.AdapterDataObserver();
+ method public void onChanged();
+ method public void onItemRangeChanged(int, int);
+ method public void onItemRangeChanged(int, int, java.lang.Object);
+ method public void onItemRangeInserted(int, int);
+ method public void onItemRangeMoved(int, int, int);
+ method public void onItemRangeRemoved(int, int);
+ }
+
+ public static abstract interface RecyclerView.ChildDrawingOrderCallback {
+ method public abstract int onGetChildDrawingOrder(int, int);
+ }
+
+ public static abstract class RecyclerView.ItemAnimator {
+ ctor public RecyclerView.ItemAnimator();
+ method public abstract boolean animateAppearance(android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+ method public abstract boolean animateChange(android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+ method public abstract boolean animateDisappearance(android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+ method public abstract boolean animatePersistence(android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+ method public boolean canReuseUpdatedViewHolder(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public boolean canReuseUpdatedViewHolder(android.support.v7.widget.RecyclerView.ViewHolder, java.util.List<java.lang.Object>);
+ method public final void dispatchAnimationFinished(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public final void dispatchAnimationStarted(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public final void dispatchAnimationsFinished();
+ method public abstract void endAnimation(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public abstract void endAnimations();
+ method public long getAddDuration();
+ method public long getChangeDuration();
+ method public long getMoveDuration();
+ method public long getRemoveDuration();
+ method public abstract boolean isRunning();
+ method public final boolean isRunning(android.support.v7.widget.RecyclerView.ItemAnimator.ItemAnimatorFinishedListener);
+ method public android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo obtainHolderInfo();
+ method public void onAnimationFinished(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public void onAnimationStarted(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo recordPostLayoutInformation(android.support.v7.widget.RecyclerView.State, android.support.v7.widget.RecyclerView.ViewHolder);
+ method public android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo recordPreLayoutInformation(android.support.v7.widget.RecyclerView.State, android.support.v7.widget.RecyclerView.ViewHolder, int, java.util.List<java.lang.Object>);
+ method public abstract void runPendingAnimations();
+ method public void setAddDuration(long);
+ method public void setChangeDuration(long);
+ method public void setMoveDuration(long);
+ method public void setRemoveDuration(long);
+ field public static final int FLAG_APPEARED_IN_PRE_LAYOUT = 4096; // 0x1000
+ field public static final int FLAG_CHANGED = 2; // 0x2
+ field public static final int FLAG_INVALIDATED = 4; // 0x4
+ field public static final int FLAG_MOVED = 2048; // 0x800
+ field public static final int FLAG_REMOVED = 8; // 0x8
+ }
+
+ public static abstract class RecyclerView.ItemAnimator.AdapterChanges implements java.lang.annotation.Annotation {
+ }
+
+ public static abstract interface RecyclerView.ItemAnimator.ItemAnimatorFinishedListener {
+ method public abstract void onAnimationsFinished();
+ }
+
+ public static class RecyclerView.ItemAnimator.ItemHolderInfo {
+ ctor public RecyclerView.ItemAnimator.ItemHolderInfo();
+ method public android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo setFrom(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo setFrom(android.support.v7.widget.RecyclerView.ViewHolder, int);
+ field public int bottom;
+ field public int changeFlags;
+ field public int left;
+ field public int right;
+ field public int top;
+ }
+
+ public static abstract class RecyclerView.ItemDecoration {
+ ctor public RecyclerView.ItemDecoration();
+ method public deprecated void getItemOffsets(android.graphics.Rect, int, android.support.v7.widget.RecyclerView);
+ method public void getItemOffsets(android.graphics.Rect, android.view.View, android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.State);
+ method public void onDraw(android.graphics.Canvas, android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.State);
+ method public deprecated void onDraw(android.graphics.Canvas, android.support.v7.widget.RecyclerView);
+ method public void onDrawOver(android.graphics.Canvas, android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.State);
+ method public deprecated void onDrawOver(android.graphics.Canvas, android.support.v7.widget.RecyclerView);
+ }
+
+ public static abstract class RecyclerView.LayoutManager {
+ ctor public RecyclerView.LayoutManager();
+ method public void addDisappearingView(android.view.View);
+ method public void addDisappearingView(android.view.View, int);
+ method public void addView(android.view.View);
+ method public void addView(android.view.View, int);
+ method public void assertInLayoutOrScroll(java.lang.String);
+ method public void assertNotInLayoutOrScroll(java.lang.String);
+ method public void attachView(android.view.View, int, android.support.v7.widget.RecyclerView.LayoutParams);
+ method public void attachView(android.view.View, int);
+ method public void attachView(android.view.View);
+ method public void calculateItemDecorationsForChild(android.view.View, android.graphics.Rect);
+ method public boolean canScrollHorizontally();
+ method public boolean canScrollVertically();
+ method public boolean checkLayoutParams(android.support.v7.widget.RecyclerView.LayoutParams);
+ method public static int chooseSize(int, int, int);
+ method public void collectAdjacentPrefetchPositions(int, int, android.support.v7.widget.RecyclerView.State, android.support.v7.widget.RecyclerView.LayoutManager.LayoutPrefetchRegistry);
+ method public void collectInitialPrefetchPositions(int, android.support.v7.widget.RecyclerView.LayoutManager.LayoutPrefetchRegistry);
+ method public int computeHorizontalScrollExtent(android.support.v7.widget.RecyclerView.State);
+ method public int computeHorizontalScrollOffset(android.support.v7.widget.RecyclerView.State);
+ method public int computeHorizontalScrollRange(android.support.v7.widget.RecyclerView.State);
+ method public int computeVerticalScrollExtent(android.support.v7.widget.RecyclerView.State);
+ method public int computeVerticalScrollOffset(android.support.v7.widget.RecyclerView.State);
+ method public int computeVerticalScrollRange(android.support.v7.widget.RecyclerView.State);
+ method public void detachAndScrapAttachedViews(android.support.v7.widget.RecyclerView.Recycler);
+ method public void detachAndScrapView(android.view.View, android.support.v7.widget.RecyclerView.Recycler);
+ method public void detachAndScrapViewAt(int, android.support.v7.widget.RecyclerView.Recycler);
+ method public void detachView(android.view.View);
+ method public void detachViewAt(int);
+ method public void endAnimation(android.view.View);
+ method public android.view.View findContainingItemView(android.view.View);
+ method public android.view.View findViewByPosition(int);
+ method public abstract android.support.v7.widget.RecyclerView.LayoutParams generateDefaultLayoutParams();
+ method public android.support.v7.widget.RecyclerView.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
+ method public android.support.v7.widget.RecyclerView.LayoutParams generateLayoutParams(android.content.Context, android.util.AttributeSet);
+ method public int getBaseline();
+ method public int getBottomDecorationHeight(android.view.View);
+ method public android.view.View getChildAt(int);
+ method public int getChildCount();
+ method public static deprecated int getChildMeasureSpec(int, int, int, boolean);
+ method public static int getChildMeasureSpec(int, int, int, int, boolean);
+ method public boolean getClipToPadding();
+ method public int getColumnCountForAccessibility(android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State);
+ method public int getDecoratedBottom(android.view.View);
+ method public void getDecoratedBoundsWithMargins(android.view.View, android.graphics.Rect);
+ method public int getDecoratedLeft(android.view.View);
+ method public int getDecoratedMeasuredHeight(android.view.View);
+ method public int getDecoratedMeasuredWidth(android.view.View);
+ method public int getDecoratedRight(android.view.View);
+ method public int getDecoratedTop(android.view.View);
+ method public android.view.View getFocusedChild();
+ method public int getHeight();
+ method public int getHeightMode();
+ method public int getItemCount();
+ method public int getItemViewType(android.view.View);
+ method public int getLayoutDirection();
+ method public int getLeftDecorationWidth(android.view.View);
+ method public int getMinimumHeight();
+ method public int getMinimumWidth();
+ method public int getPaddingBottom();
+ method public int getPaddingEnd();
+ method public int getPaddingLeft();
+ method public int getPaddingRight();
+ method public int getPaddingStart();
+ method public int getPaddingTop();
+ method public int getPosition(android.view.View);
+ method public static android.support.v7.widget.RecyclerView.LayoutManager.Properties getProperties(android.content.Context, android.util.AttributeSet, int, int);
+ method public int getRightDecorationWidth(android.view.View);
+ method public int getRowCountForAccessibility(android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State);
+ method public int getSelectionModeForAccessibility(android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State);
+ method public int getTopDecorationHeight(android.view.View);
+ method public void getTransformedBoundingBox(android.view.View, boolean, android.graphics.Rect);
+ method public int getWidth();
+ method public int getWidthMode();
+ method public boolean hasFocus();
+ method public void ignoreView(android.view.View);
+ method public boolean isAttachedToWindow();
+ method public boolean isAutoMeasureEnabled();
+ method public boolean isFocused();
+ method public final boolean isItemPrefetchEnabled();
+ method public boolean isLayoutHierarchical(android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State);
+ method public boolean isMeasurementCacheEnabled();
+ method public boolean isSmoothScrolling();
+ method public boolean isViewPartiallyVisible(android.view.View, boolean, boolean);
+ method public void layoutDecorated(android.view.View, int, int, int, int);
+ method public void layoutDecoratedWithMargins(android.view.View, int, int, int, int);
+ method public void measureChild(android.view.View, int, int);
+ method public void measureChildWithMargins(android.view.View, int, int);
+ method public void moveView(int, int);
+ method public void offsetChildrenHorizontal(int);
+ method public void offsetChildrenVertical(int);
+ method public void onAdapterChanged(android.support.v7.widget.RecyclerView.Adapter, android.support.v7.widget.RecyclerView.Adapter);
+ method public boolean onAddFocusables(android.support.v7.widget.RecyclerView, java.util.ArrayList<android.view.View>, int, int);
+ method public void onAttachedToWindow(android.support.v7.widget.RecyclerView);
+ method public deprecated void onDetachedFromWindow(android.support.v7.widget.RecyclerView);
+ method public void onDetachedFromWindow(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.Recycler);
+ method public android.view.View onFocusSearchFailed(android.view.View, int, android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State);
+ method public void onInitializeAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
+ method public void onInitializeAccessibilityEvent(android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State, android.view.accessibility.AccessibilityEvent);
+ method public void onInitializeAccessibilityNodeInfo(android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State, android.support.v4.view.accessibility.AccessibilityNodeInfoCompat);
+ method public void onInitializeAccessibilityNodeInfoForItem(android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State, android.view.View, android.support.v4.view.accessibility.AccessibilityNodeInfoCompat);
+ method public android.view.View onInterceptFocusSearch(android.view.View, int);
+ method public void onItemsAdded(android.support.v7.widget.RecyclerView, int, int);
+ method public void onItemsChanged(android.support.v7.widget.RecyclerView);
+ method public void onItemsMoved(android.support.v7.widget.RecyclerView, int, int, int);
+ method public void onItemsRemoved(android.support.v7.widget.RecyclerView, int, int);
+ method public void onItemsUpdated(android.support.v7.widget.RecyclerView, int, int);
+ method public void onItemsUpdated(android.support.v7.widget.RecyclerView, int, int, java.lang.Object);
+ method public void onLayoutChildren(android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State);
+ method public void onLayoutCompleted(android.support.v7.widget.RecyclerView.State);
+ method public void onMeasure(android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State, int, int);
+ method public deprecated boolean onRequestChildFocus(android.support.v7.widget.RecyclerView, android.view.View, android.view.View);
+ method public boolean onRequestChildFocus(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.State, android.view.View, android.view.View);
+ method public void onRestoreInstanceState(android.os.Parcelable);
+ method public android.os.Parcelable onSaveInstanceState();
+ method public void onScrollStateChanged(int);
+ method public boolean performAccessibilityAction(android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State, int, android.os.Bundle);
+ method public boolean performAccessibilityActionForItem(android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State, android.view.View, int, android.os.Bundle);
+ method public void postOnAnimation(java.lang.Runnable);
+ method public void removeAllViews();
+ method public void removeAndRecycleAllViews(android.support.v7.widget.RecyclerView.Recycler);
+ method public void removeAndRecycleView(android.view.View, android.support.v7.widget.RecyclerView.Recycler);
+ method public void removeAndRecycleViewAt(int, android.support.v7.widget.RecyclerView.Recycler);
+ method public boolean removeCallbacks(java.lang.Runnable);
+ method public void removeDetachedView(android.view.View);
+ method public void removeView(android.view.View);
+ method public void removeViewAt(int);
+ method public boolean requestChildRectangleOnScreen(android.support.v7.widget.RecyclerView, android.view.View, android.graphics.Rect, boolean);
+ method public boolean requestChildRectangleOnScreen(android.support.v7.widget.RecyclerView, android.view.View, android.graphics.Rect, boolean, boolean);
+ method public void requestLayout();
+ method public void requestSimpleAnimationsInNextLayout();
+ method public int scrollHorizontallyBy(int, android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State);
+ method public void scrollToPosition(int);
+ method public int scrollVerticallyBy(int, android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State);
+ method public void setAutoMeasureEnabled(boolean);
+ method public final void setItemPrefetchEnabled(boolean);
+ method public void setMeasuredDimension(android.graphics.Rect, int, int);
+ method public void setMeasuredDimension(int, int);
+ method public void setMeasurementCacheEnabled(boolean);
+ method public void smoothScrollToPosition(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.State, int);
+ method public void startSmoothScroll(android.support.v7.widget.RecyclerView.SmoothScroller);
+ method public void stopIgnoringView(android.view.View);
+ method public boolean supportsPredictiveItemAnimations();
+ }
+
+ public static abstract interface RecyclerView.LayoutManager.LayoutPrefetchRegistry {
+ method public abstract void addPosition(int, int);
+ }
+
+ public static class RecyclerView.LayoutManager.Properties {
+ ctor public RecyclerView.LayoutManager.Properties();
+ field public int orientation;
+ field public boolean reverseLayout;
+ field public int spanCount;
+ field public boolean stackFromEnd;
+ }
+
+ public static class RecyclerView.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+ ctor public RecyclerView.LayoutParams(android.content.Context, android.util.AttributeSet);
+ ctor public RecyclerView.LayoutParams(int, int);
+ ctor public RecyclerView.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ ctor public RecyclerView.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public RecyclerView.LayoutParams(android.support.v7.widget.RecyclerView.LayoutParams);
+ method public int getViewAdapterPosition();
+ method public int getViewLayoutPosition();
+ method public deprecated int getViewPosition();
+ method public boolean isItemChanged();
+ method public boolean isItemRemoved();
+ method public boolean isViewInvalid();
+ method public boolean viewNeedsUpdate();
+ }
+
+ public static abstract interface RecyclerView.OnChildAttachStateChangeListener {
+ method public abstract void onChildViewAttachedToWindow(android.view.View);
+ method public abstract void onChildViewDetachedFromWindow(android.view.View);
+ }
+
+ public static abstract class RecyclerView.OnFlingListener {
+ ctor public RecyclerView.OnFlingListener();
+ method public abstract boolean onFling(int, int);
+ }
+
+ public static abstract interface RecyclerView.OnItemTouchListener {
+ method public abstract boolean onInterceptTouchEvent(android.support.v7.widget.RecyclerView, android.view.MotionEvent);
+ method public abstract void onRequestDisallowInterceptTouchEvent(boolean);
+ method public abstract void onTouchEvent(android.support.v7.widget.RecyclerView, android.view.MotionEvent);
+ }
+
+ public static abstract class RecyclerView.OnScrollListener {
+ ctor public RecyclerView.OnScrollListener();
+ method public void onScrollStateChanged(android.support.v7.widget.RecyclerView, int);
+ method public void onScrolled(android.support.v7.widget.RecyclerView, int, int);
+ }
+
+ public static class RecyclerView.RecycledViewPool {
+ ctor public RecyclerView.RecycledViewPool();
+ method public void clear();
+ method public android.support.v7.widget.RecyclerView.ViewHolder getRecycledView(int);
+ method public int getRecycledViewCount(int);
+ method public void putRecycledView(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public void setMaxRecycledViews(int, int);
+ }
+
+ public final class RecyclerView.Recycler {
+ ctor public RecyclerView.Recycler();
+ method public void bindViewToPosition(android.view.View, int);
+ method public void clear();
+ method public int convertPreLayoutPositionToPostLayout(int);
+ method public java.util.List<android.support.v7.widget.RecyclerView.ViewHolder> getScrapList();
+ method public android.view.View getViewForPosition(int);
+ method public void recycleView(android.view.View);
+ method public void setViewCacheSize(int);
+ }
+
+ public static abstract interface RecyclerView.RecyclerListener {
+ method public abstract void onViewRecycled(android.support.v7.widget.RecyclerView.ViewHolder);
+ }
+
+ public static class RecyclerView.SimpleOnItemTouchListener implements android.support.v7.widget.RecyclerView.OnItemTouchListener {
+ ctor public RecyclerView.SimpleOnItemTouchListener();
+ method public boolean onInterceptTouchEvent(android.support.v7.widget.RecyclerView, android.view.MotionEvent);
+ method public void onRequestDisallowInterceptTouchEvent(boolean);
+ method public void onTouchEvent(android.support.v7.widget.RecyclerView, android.view.MotionEvent);
+ }
+
+ public static abstract class RecyclerView.SmoothScroller {
+ ctor public RecyclerView.SmoothScroller();
+ method public android.view.View findViewByPosition(int);
+ method public int getChildCount();
+ method public int getChildPosition(android.view.View);
+ method public android.support.v7.widget.RecyclerView.LayoutManager getLayoutManager();
+ method public int getTargetPosition();
+ method public deprecated void instantScrollToPosition(int);
+ method public boolean isPendingInitialRun();
+ method public boolean isRunning();
+ method protected void normalize(android.graphics.PointF);
+ method protected void onChildAttachedToWindow(android.view.View);
+ method protected abstract void onSeekTargetStep(int, int, android.support.v7.widget.RecyclerView.State, android.support.v7.widget.RecyclerView.SmoothScroller.Action);
+ method protected abstract void onStart();
+ method protected abstract void onStop();
+ method protected abstract void onTargetFound(android.view.View, android.support.v7.widget.RecyclerView.State, android.support.v7.widget.RecyclerView.SmoothScroller.Action);
+ method public void setTargetPosition(int);
+ method protected final void stop();
+ }
+
+ public static class RecyclerView.SmoothScroller.Action {
+ ctor public RecyclerView.SmoothScroller.Action(int, int);
+ ctor public RecyclerView.SmoothScroller.Action(int, int, int);
+ ctor public RecyclerView.SmoothScroller.Action(int, int, int, android.view.animation.Interpolator);
+ method public int getDuration();
+ method public int getDx();
+ method public int getDy();
+ method public android.view.animation.Interpolator getInterpolator();
+ method public void jumpTo(int);
+ method public void setDuration(int);
+ method public void setDx(int);
+ method public void setDy(int);
+ method public void setInterpolator(android.view.animation.Interpolator);
+ method public void update(int, int, int, android.view.animation.Interpolator);
+ field public static final int UNDEFINED_DURATION = -2147483648; // 0x80000000
+ }
+
+ public static abstract interface RecyclerView.SmoothScroller.ScrollVectorProvider {
+ method public abstract android.graphics.PointF computeScrollVectorForPosition(int);
+ }
+
+ public static class RecyclerView.State {
+ ctor public RecyclerView.State();
+ method public boolean didStructureChange();
+ method public <T> T get(int);
+ method public int getItemCount();
+ method public int getRemainingScrollHorizontal();
+ method public int getRemainingScrollVertical();
+ method public int getTargetScrollPosition();
+ method public boolean hasTargetScrollPosition();
+ method public boolean isMeasuring();
+ method public boolean isPreLayout();
+ method public void put(int, java.lang.Object);
+ method public void remove(int);
+ method public boolean willRunPredictiveAnimations();
+ method public boolean willRunSimpleAnimations();
+ }
+
+ public static abstract class RecyclerView.ViewCacheExtension {
+ ctor public RecyclerView.ViewCacheExtension();
+ method public abstract android.view.View getViewForPositionAndType(android.support.v7.widget.RecyclerView.Recycler, int, int);
+ }
+
+ public static abstract class RecyclerView.ViewHolder {
+ ctor public RecyclerView.ViewHolder(android.view.View);
+ method public final int getAdapterPosition();
+ method public final long getItemId();
+ method public final int getItemViewType();
+ method public final int getLayoutPosition();
+ method public final int getOldPosition();
+ method public final deprecated int getPosition();
+ method public final boolean isRecyclable();
+ method public final void setIsRecyclable(boolean);
+ field public final android.view.View itemView;
+ }
+
+ public class RecyclerViewAccessibilityDelegate extends android.support.v4.view.AccessibilityDelegateCompat {
+ ctor public RecyclerViewAccessibilityDelegate(android.support.v7.widget.RecyclerView);
+ method public android.support.v4.view.AccessibilityDelegateCompat getItemDelegate();
+ }
+
+ public static class RecyclerViewAccessibilityDelegate.ItemDelegate extends android.support.v4.view.AccessibilityDelegateCompat {
+ ctor public RecyclerViewAccessibilityDelegate.ItemDelegate(android.support.v7.widget.RecyclerViewAccessibilityDelegate);
+ }
+
+ public abstract class SimpleItemAnimator extends android.support.v7.widget.RecyclerView.ItemAnimator {
+ ctor public SimpleItemAnimator();
+ method public abstract boolean animateAdd(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public boolean animateAppearance(android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+ method public boolean animateChange(android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+ method public abstract boolean animateChange(android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ViewHolder, int, int, int, int);
+ method public boolean animateDisappearance(android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+ method public abstract boolean animateMove(android.support.v7.widget.RecyclerView.ViewHolder, int, int, int, int);
+ method public boolean animatePersistence(android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+ method public abstract boolean animateRemove(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public final void dispatchAddFinished(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public final void dispatchAddStarting(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public final void dispatchChangeFinished(android.support.v7.widget.RecyclerView.ViewHolder, boolean);
+ method public final void dispatchChangeStarting(android.support.v7.widget.RecyclerView.ViewHolder, boolean);
+ method public final void dispatchMoveFinished(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public final void dispatchMoveStarting(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public final void dispatchRemoveFinished(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public final void dispatchRemoveStarting(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public boolean getSupportsChangeAnimations();
+ method public void onAddFinished(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public void onAddStarting(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public void onChangeFinished(android.support.v7.widget.RecyclerView.ViewHolder, boolean);
+ method public void onChangeStarting(android.support.v7.widget.RecyclerView.ViewHolder, boolean);
+ method public void onMoveFinished(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public void onMoveStarting(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public void onRemoveFinished(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public void onRemoveStarting(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public void setSupportsChangeAnimations(boolean);
+ }
+
+ public abstract class SnapHelper extends android.support.v7.widget.RecyclerView.OnFlingListener {
+ ctor public SnapHelper();
+ method public void attachToRecyclerView(android.support.v7.widget.RecyclerView) throws java.lang.IllegalStateException;
+ method public abstract int[] calculateDistanceToFinalSnap(android.support.v7.widget.RecyclerView.LayoutManager, android.view.View);
+ method public int[] calculateScrollDistance(int, int);
+ method protected android.support.v7.widget.RecyclerView.SmoothScroller createScroller(android.support.v7.widget.RecyclerView.LayoutManager);
+ method protected deprecated android.support.v7.widget.LinearSmoothScroller createSnapScroller(android.support.v7.widget.RecyclerView.LayoutManager);
+ method public abstract android.view.View findSnapView(android.support.v7.widget.RecyclerView.LayoutManager);
+ method public abstract int findTargetSnapPosition(android.support.v7.widget.RecyclerView.LayoutManager, int, int);
+ method public boolean onFling(int, int);
+ }
+
+ public class StaggeredGridLayoutManager extends android.support.v7.widget.RecyclerView.LayoutManager implements android.support.v7.widget.RecyclerView.SmoothScroller.ScrollVectorProvider {
+ ctor public StaggeredGridLayoutManager(android.content.Context, android.util.AttributeSet, int, int);
+ ctor public StaggeredGridLayoutManager(int, int);
+ method public android.graphics.PointF computeScrollVectorForPosition(int);
+ method public int[] findFirstCompletelyVisibleItemPositions(int[]);
+ method public int[] findFirstVisibleItemPositions(int[]);
+ method public int[] findLastCompletelyVisibleItemPositions(int[]);
+ method public int[] findLastVisibleItemPositions(int[]);
+ method public android.support.v7.widget.RecyclerView.LayoutParams generateDefaultLayoutParams();
+ method public int getGapStrategy();
+ method public int getOrientation();
+ method public boolean getReverseLayout();
+ method public int getSpanCount();
+ method public void invalidateSpanAssignments();
+ method public void scrollToPositionWithOffset(int, int);
+ method public void setGapStrategy(int);
+ method public void setOrientation(int);
+ method public void setReverseLayout(boolean);
+ method public void setSpanCount(int);
+ field public static final deprecated int GAP_HANDLING_LAZY = 1; // 0x1
+ field public static final int GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS = 2; // 0x2
+ field public static final int GAP_HANDLING_NONE = 0; // 0x0
+ field public static final int HORIZONTAL = 0; // 0x0
+ field public static final int VERTICAL = 1; // 0x1
+ }
+
+ public static class StaggeredGridLayoutManager.LayoutParams extends android.support.v7.widget.RecyclerView.LayoutParams {
+ ctor public StaggeredGridLayoutManager.LayoutParams(android.content.Context, android.util.AttributeSet);
+ ctor public StaggeredGridLayoutManager.LayoutParams(int, int);
+ ctor public StaggeredGridLayoutManager.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ ctor public StaggeredGridLayoutManager.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public StaggeredGridLayoutManager.LayoutParams(android.support.v7.widget.RecyclerView.LayoutParams);
+ method public final int getSpanIndex();
+ method public boolean isFullSpan();
+ method public void setFullSpan(boolean);
+ field public static final int INVALID_SPAN_ID = -1; // 0xffffffff
+ }
+
+}
+
+package android.support.v7.widget.helper {
+
+ public class ItemTouchHelper extends android.support.v7.widget.RecyclerView.ItemDecoration implements android.support.v7.widget.RecyclerView.OnChildAttachStateChangeListener {
+ ctor public ItemTouchHelper(android.support.v7.widget.helper.ItemTouchHelper.Callback);
+ method public void attachToRecyclerView(android.support.v7.widget.RecyclerView);
+ method public void onChildViewAttachedToWindow(android.view.View);
+ method public void onChildViewDetachedFromWindow(android.view.View);
+ method public void startDrag(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public void startSwipe(android.support.v7.widget.RecyclerView.ViewHolder);
+ field public static final int ACTION_STATE_DRAG = 2; // 0x2
+ field public static final int ACTION_STATE_IDLE = 0; // 0x0
+ field public static final int ACTION_STATE_SWIPE = 1; // 0x1
+ field public static final int ANIMATION_TYPE_DRAG = 8; // 0x8
+ field public static final int ANIMATION_TYPE_SWIPE_CANCEL = 4; // 0x4
+ field public static final int ANIMATION_TYPE_SWIPE_SUCCESS = 2; // 0x2
+ field public static final int DOWN = 2; // 0x2
+ field public static final int END = 32; // 0x20
+ field public static final int LEFT = 4; // 0x4
+ field public static final int RIGHT = 8; // 0x8
+ field public static final int START = 16; // 0x10
+ field public static final int UP = 1; // 0x1
+ }
+
+ public static abstract class ItemTouchHelper.Callback {
+ ctor public ItemTouchHelper.Callback();
+ method public boolean canDropOver(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ViewHolder);
+ method public android.support.v7.widget.RecyclerView.ViewHolder chooseDropTarget(android.support.v7.widget.RecyclerView.ViewHolder, java.util.List<android.support.v7.widget.RecyclerView.ViewHolder>, int, int);
+ method public void clearView(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder);
+ method public int convertToAbsoluteDirection(int, int);
+ method public static int convertToRelativeDirection(int, int);
+ method public long getAnimationDuration(android.support.v7.widget.RecyclerView, int, float, float);
+ method public int getBoundingBoxMargin();
+ method public static android.support.v7.widget.helper.ItemTouchUIUtil getDefaultUIUtil();
+ method public float getMoveThreshold(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public abstract int getMovementFlags(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder);
+ method public float getSwipeEscapeVelocity(float);
+ method public float getSwipeThreshold(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public float getSwipeVelocityThreshold(float);
+ method public int interpolateOutOfBoundsScroll(android.support.v7.widget.RecyclerView, int, int, int, long);
+ method public boolean isItemViewSwipeEnabled();
+ method public boolean isLongPressDragEnabled();
+ method public static int makeFlag(int, int);
+ method public static int makeMovementFlags(int, int);
+ method public void onChildDraw(android.graphics.Canvas, android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder, float, float, int, boolean);
+ method public void onChildDrawOver(android.graphics.Canvas, android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder, float, float, int, boolean);
+ method public abstract boolean onMove(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ViewHolder);
+ method public void onMoved(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder, int, android.support.v7.widget.RecyclerView.ViewHolder, int, int, int);
+ method public void onSelectedChanged(android.support.v7.widget.RecyclerView.ViewHolder, int);
+ method public abstract void onSwiped(android.support.v7.widget.RecyclerView.ViewHolder, int);
+ field public static final int DEFAULT_DRAG_ANIMATION_DURATION = 200; // 0xc8
+ field public static final int DEFAULT_SWIPE_ANIMATION_DURATION = 250; // 0xfa
+ }
+
+ public static abstract class ItemTouchHelper.SimpleCallback extends android.support.v7.widget.helper.ItemTouchHelper.Callback {
+ ctor public ItemTouchHelper.SimpleCallback(int, int);
+ method public int getDragDirs(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder);
+ method public int getMovementFlags(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder);
+ method public int getSwipeDirs(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder);
+ method public void setDefaultDragDirs(int);
+ method public void setDefaultSwipeDirs(int);
+ }
+
+ public static abstract interface ItemTouchHelper.ViewDropHandler {
+ method public abstract void prepareForDrop(android.view.View, android.view.View, int, int);
+ }
+
+ public abstract interface ItemTouchUIUtil {
+ method public abstract void clearView(android.view.View);
+ method public abstract void onDraw(android.graphics.Canvas, android.support.v7.widget.RecyclerView, android.view.View, float, float, int, boolean);
+ method public abstract void onDrawOver(android.graphics.Canvas, android.support.v7.widget.RecyclerView, android.view.View, float, float, int, boolean);
+ method public abstract void onSelected(android.view.View);
+ }
+
+}
+
+package android.support.v7.widget.util {
+
+ public abstract class SortedListAdapterCallback<T2> extends android.support.v7.util.SortedList.Callback {
+ ctor public SortedListAdapterCallback(android.support.v7.widget.RecyclerView.Adapter);
+ method public void onChanged(int, int);
+ method public void onInserted(int, int);
+ method public void onMoved(int, int);
+ method public void onRemoved(int, int);
+ }
+
+}
+
diff --git a/v7/recyclerview/build.gradle b/v7/recyclerview/build.gradle
index e035b82..ad1150f 100644
--- a/v7/recyclerview/build.gradle
+++ b/v7/recyclerview/build.gradle
@@ -23,10 +23,7 @@
}
sourceSets {
- main.java.srcDir 'src'
main.res.srcDirs 'res', 'res-public'
-
- test.java.srcDir 'jvm-tests/src'
}
testOptions {
diff --git a/v7/recyclerview/src/android/support/v7/util/AsyncListUtil.java b/v7/recyclerview/src/main/java/android/support/v7/util/AsyncListUtil.java
similarity index 100%
rename from v7/recyclerview/src/android/support/v7/util/AsyncListUtil.java
rename to v7/recyclerview/src/main/java/android/support/v7/util/AsyncListUtil.java
diff --git a/v7/recyclerview/src/android/support/v7/util/BatchingListUpdateCallback.java b/v7/recyclerview/src/main/java/android/support/v7/util/BatchingListUpdateCallback.java
similarity index 100%
rename from v7/recyclerview/src/android/support/v7/util/BatchingListUpdateCallback.java
rename to v7/recyclerview/src/main/java/android/support/v7/util/BatchingListUpdateCallback.java
diff --git a/v7/recyclerview/src/android/support/v7/util/DiffUtil.java b/v7/recyclerview/src/main/java/android/support/v7/util/DiffUtil.java
similarity index 100%
rename from v7/recyclerview/src/android/support/v7/util/DiffUtil.java
rename to v7/recyclerview/src/main/java/android/support/v7/util/DiffUtil.java
diff --git a/v7/recyclerview/src/android/support/v7/util/ListUpdateCallback.java b/v7/recyclerview/src/main/java/android/support/v7/util/ListUpdateCallback.java
similarity index 100%
rename from v7/recyclerview/src/android/support/v7/util/ListUpdateCallback.java
rename to v7/recyclerview/src/main/java/android/support/v7/util/ListUpdateCallback.java
diff --git a/v7/recyclerview/src/android/support/v7/util/MessageThreadUtil.java b/v7/recyclerview/src/main/java/android/support/v7/util/MessageThreadUtil.java
similarity index 100%
rename from v7/recyclerview/src/android/support/v7/util/MessageThreadUtil.java
rename to v7/recyclerview/src/main/java/android/support/v7/util/MessageThreadUtil.java
diff --git a/v7/recyclerview/src/android/support/v7/util/SortedList.java b/v7/recyclerview/src/main/java/android/support/v7/util/SortedList.java
similarity index 100%
rename from v7/recyclerview/src/android/support/v7/util/SortedList.java
rename to v7/recyclerview/src/main/java/android/support/v7/util/SortedList.java
diff --git a/v7/recyclerview/src/android/support/v7/util/ThreadUtil.java b/v7/recyclerview/src/main/java/android/support/v7/util/ThreadUtil.java
similarity index 100%
rename from v7/recyclerview/src/android/support/v7/util/ThreadUtil.java
rename to v7/recyclerview/src/main/java/android/support/v7/util/ThreadUtil.java
diff --git a/v7/recyclerview/src/android/support/v7/util/TileList.java b/v7/recyclerview/src/main/java/android/support/v7/util/TileList.java
similarity index 100%
rename from v7/recyclerview/src/android/support/v7/util/TileList.java
rename to v7/recyclerview/src/main/java/android/support/v7/util/TileList.java
diff --git a/v7/recyclerview/src/android/support/v7/widget/AdapterHelper.java b/v7/recyclerview/src/main/java/android/support/v7/widget/AdapterHelper.java
similarity index 100%
rename from v7/recyclerview/src/android/support/v7/widget/AdapterHelper.java
rename to v7/recyclerview/src/main/java/android/support/v7/widget/AdapterHelper.java
diff --git a/v7/recyclerview/src/android/support/v7/widget/ChildHelper.java b/v7/recyclerview/src/main/java/android/support/v7/widget/ChildHelper.java
similarity index 100%
rename from v7/recyclerview/src/android/support/v7/widget/ChildHelper.java
rename to v7/recyclerview/src/main/java/android/support/v7/widget/ChildHelper.java
diff --git a/v7/recyclerview/src/android/support/v7/widget/DefaultItemAnimator.java b/v7/recyclerview/src/main/java/android/support/v7/widget/DefaultItemAnimator.java
similarity index 100%
rename from v7/recyclerview/src/android/support/v7/widget/DefaultItemAnimator.java
rename to v7/recyclerview/src/main/java/android/support/v7/widget/DefaultItemAnimator.java
diff --git a/v7/recyclerview/src/android/support/v7/widget/DividerItemDecoration.java b/v7/recyclerview/src/main/java/android/support/v7/widget/DividerItemDecoration.java
similarity index 100%
rename from v7/recyclerview/src/android/support/v7/widget/DividerItemDecoration.java
rename to v7/recyclerview/src/main/java/android/support/v7/widget/DividerItemDecoration.java
diff --git a/v7/recyclerview/src/android/support/v7/widget/FastScroller.java b/v7/recyclerview/src/main/java/android/support/v7/widget/FastScroller.java
similarity index 100%
rename from v7/recyclerview/src/android/support/v7/widget/FastScroller.java
rename to v7/recyclerview/src/main/java/android/support/v7/widget/FastScroller.java
diff --git a/v7/recyclerview/src/android/support/v7/widget/GapWorker.java b/v7/recyclerview/src/main/java/android/support/v7/widget/GapWorker.java
similarity index 100%
rename from v7/recyclerview/src/android/support/v7/widget/GapWorker.java
rename to v7/recyclerview/src/main/java/android/support/v7/widget/GapWorker.java
diff --git a/v7/recyclerview/src/android/support/v7/widget/GridLayoutManager.java b/v7/recyclerview/src/main/java/android/support/v7/widget/GridLayoutManager.java
similarity index 100%
rename from v7/recyclerview/src/android/support/v7/widget/GridLayoutManager.java
rename to v7/recyclerview/src/main/java/android/support/v7/widget/GridLayoutManager.java
diff --git a/v7/recyclerview/src/android/support/v7/widget/LayoutState.java b/v7/recyclerview/src/main/java/android/support/v7/widget/LayoutState.java
similarity index 100%
rename from v7/recyclerview/src/android/support/v7/widget/LayoutState.java
rename to v7/recyclerview/src/main/java/android/support/v7/widget/LayoutState.java
diff --git a/v7/recyclerview/src/android/support/v7/widget/LinearLayoutManager.java b/v7/recyclerview/src/main/java/android/support/v7/widget/LinearLayoutManager.java
similarity index 100%
rename from v7/recyclerview/src/android/support/v7/widget/LinearLayoutManager.java
rename to v7/recyclerview/src/main/java/android/support/v7/widget/LinearLayoutManager.java
diff --git a/v7/recyclerview/src/android/support/v7/widget/LinearSmoothScroller.java b/v7/recyclerview/src/main/java/android/support/v7/widget/LinearSmoothScroller.java
similarity index 100%
rename from v7/recyclerview/src/android/support/v7/widget/LinearSmoothScroller.java
rename to v7/recyclerview/src/main/java/android/support/v7/widget/LinearSmoothScroller.java
diff --git a/v7/recyclerview/src/android/support/v7/widget/LinearSnapHelper.java b/v7/recyclerview/src/main/java/android/support/v7/widget/LinearSnapHelper.java
similarity index 100%
rename from v7/recyclerview/src/android/support/v7/widget/LinearSnapHelper.java
rename to v7/recyclerview/src/main/java/android/support/v7/widget/LinearSnapHelper.java
diff --git a/v7/recyclerview/src/android/support/v7/widget/OpReorderer.java b/v7/recyclerview/src/main/java/android/support/v7/widget/OpReorderer.java
similarity index 100%
rename from v7/recyclerview/src/android/support/v7/widget/OpReorderer.java
rename to v7/recyclerview/src/main/java/android/support/v7/widget/OpReorderer.java
diff --git a/v7/recyclerview/src/android/support/v7/widget/OrientationHelper.java b/v7/recyclerview/src/main/java/android/support/v7/widget/OrientationHelper.java
similarity index 100%
rename from v7/recyclerview/src/android/support/v7/widget/OrientationHelper.java
rename to v7/recyclerview/src/main/java/android/support/v7/widget/OrientationHelper.java
diff --git a/v7/recyclerview/src/android/support/v7/widget/PagerSnapHelper.java b/v7/recyclerview/src/main/java/android/support/v7/widget/PagerSnapHelper.java
similarity index 100%
rename from v7/recyclerview/src/android/support/v7/widget/PagerSnapHelper.java
rename to v7/recyclerview/src/main/java/android/support/v7/widget/PagerSnapHelper.java
diff --git a/v7/recyclerview/src/android/support/v7/widget/PositionMap.java b/v7/recyclerview/src/main/java/android/support/v7/widget/PositionMap.java
similarity index 100%
rename from v7/recyclerview/src/android/support/v7/widget/PositionMap.java
rename to v7/recyclerview/src/main/java/android/support/v7/widget/PositionMap.java
diff --git a/v7/recyclerview/src/android/support/v7/widget/RecyclerView.java b/v7/recyclerview/src/main/java/android/support/v7/widget/RecyclerView.java
similarity index 100%
rename from v7/recyclerview/src/android/support/v7/widget/RecyclerView.java
rename to v7/recyclerview/src/main/java/android/support/v7/widget/RecyclerView.java
diff --git a/v7/recyclerview/src/android/support/v7/widget/RecyclerViewAccessibilityDelegate.java b/v7/recyclerview/src/main/java/android/support/v7/widget/RecyclerViewAccessibilityDelegate.java
similarity index 100%
rename from v7/recyclerview/src/android/support/v7/widget/RecyclerViewAccessibilityDelegate.java
rename to v7/recyclerview/src/main/java/android/support/v7/widget/RecyclerViewAccessibilityDelegate.java
diff --git a/v7/recyclerview/src/android/support/v7/widget/ScrollbarHelper.java b/v7/recyclerview/src/main/java/android/support/v7/widget/ScrollbarHelper.java
similarity index 100%
rename from v7/recyclerview/src/android/support/v7/widget/ScrollbarHelper.java
rename to v7/recyclerview/src/main/java/android/support/v7/widget/ScrollbarHelper.java
diff --git a/v7/recyclerview/src/android/support/v7/widget/SimpleItemAnimator.java b/v7/recyclerview/src/main/java/android/support/v7/widget/SimpleItemAnimator.java
similarity index 100%
rename from v7/recyclerview/src/android/support/v7/widget/SimpleItemAnimator.java
rename to v7/recyclerview/src/main/java/android/support/v7/widget/SimpleItemAnimator.java
diff --git a/v7/recyclerview/src/android/support/v7/widget/SnapHelper.java b/v7/recyclerview/src/main/java/android/support/v7/widget/SnapHelper.java
similarity index 100%
rename from v7/recyclerview/src/android/support/v7/widget/SnapHelper.java
rename to v7/recyclerview/src/main/java/android/support/v7/widget/SnapHelper.java
diff --git a/v7/recyclerview/src/android/support/v7/widget/StaggeredGridLayoutManager.java b/v7/recyclerview/src/main/java/android/support/v7/widget/StaggeredGridLayoutManager.java
similarity index 100%
rename from v7/recyclerview/src/android/support/v7/widget/StaggeredGridLayoutManager.java
rename to v7/recyclerview/src/main/java/android/support/v7/widget/StaggeredGridLayoutManager.java
diff --git a/v7/recyclerview/src/android/support/v7/widget/ViewBoundsCheck.java b/v7/recyclerview/src/main/java/android/support/v7/widget/ViewBoundsCheck.java
similarity index 100%
rename from v7/recyclerview/src/android/support/v7/widget/ViewBoundsCheck.java
rename to v7/recyclerview/src/main/java/android/support/v7/widget/ViewBoundsCheck.java
diff --git a/v7/recyclerview/src/android/support/v7/widget/ViewInfoStore.java b/v7/recyclerview/src/main/java/android/support/v7/widget/ViewInfoStore.java
similarity index 100%
rename from v7/recyclerview/src/android/support/v7/widget/ViewInfoStore.java
rename to v7/recyclerview/src/main/java/android/support/v7/widget/ViewInfoStore.java
diff --git a/v7/recyclerview/src/android/support/v7/widget/helper/ItemTouchHelper.java b/v7/recyclerview/src/main/java/android/support/v7/widget/helper/ItemTouchHelper.java
similarity index 97%
rename from v7/recyclerview/src/android/support/v7/widget/helper/ItemTouchHelper.java
rename to v7/recyclerview/src/main/java/android/support/v7/widget/helper/ItemTouchHelper.java
index b0a2cb3..aee48df 100644
--- a/v7/recyclerview/src/android/support/v7/widget/helper/ItemTouchHelper.java
+++ b/v7/recyclerview/src/main/java/android/support/v7/widget/helper/ItemTouchHelper.java
@@ -292,6 +292,11 @@
*/
GestureDetectorCompat mGestureDetector;
+ /**
+ * Callback for when long press occurs.
+ */
+ private ItemTouchHelperGestureListener mItemTouchHelperGestureListener;
+
private final OnItemTouchListener mOnItemTouchListener = new OnItemTouchListener() {
@Override
public boolean onInterceptTouchEvent(RecyclerView recyclerView, MotionEvent event) {
@@ -468,7 +473,7 @@
mRecyclerView.addItemDecoration(this);
mRecyclerView.addOnItemTouchListener(mOnItemTouchListener);
mRecyclerView.addOnChildAttachStateChangeListener(this);
- initGestureDetector();
+ startGestureDetection();
}
private void destroyCallbacks() {
@@ -485,14 +490,23 @@
mOverdrawChild = null;
mOverdrawChildPosition = -1;
releaseVelocityTracker();
+ stopGestureDetection();
}
- private void initGestureDetector() {
- if (mGestureDetector != null) {
- return;
- }
+ private void startGestureDetection() {
+ mItemTouchHelperGestureListener = new ItemTouchHelperGestureListener();
mGestureDetector = new GestureDetectorCompat(mRecyclerView.getContext(),
- new ItemTouchHelperGestureListener());
+ mItemTouchHelperGestureListener);
+ }
+
+ private void stopGestureDetection() {
+ if (mItemTouchHelperGestureListener != null) {
+ mItemTouchHelperGestureListener.doNotReactToLongPress();
+ mItemTouchHelperGestureListener = null;
+ }
+ if (mGestureDetector != null) {
+ mGestureDetector = null;
+ }
}
private void getSelectedDxDy(float[] outPosition) {
@@ -2242,9 +2256,33 @@
private class ItemTouchHelperGestureListener extends GestureDetector.SimpleOnGestureListener {
+ /**
+ * Whether to execute code in response to the the invoking of
+ * {@link ItemTouchHelperGestureListener#onLongPress(MotionEvent)}.
+ *
+ * It is necessary to control this here because
+ * {@link GestureDetector.SimpleOnGestureListener} can only be set on a
+ * {@link GestureDetector} in a GestureDetector's constructor, a GestureDetector will call
+ * onLongPress if an {@link MotionEvent#ACTION_DOWN} event is not followed by another event
+ * that would cancel it (like {@link MotionEvent#ACTION_UP} or
+ * {@link MotionEvent#ACTION_CANCEL}), the long press responding to the long press event
+ * needs to be cancellable to prevent unexpected behavior.
+ *
+ * @see #doNotReactToLongPress()
+ */
+ private boolean mShouldReactToLongPress = true;
+
ItemTouchHelperGestureListener() {
}
+ /**
+ * Call to prevent executing code in response to
+ * {@link ItemTouchHelperGestureListener#onLongPress(MotionEvent)} being called.
+ */
+ void doNotReactToLongPress() {
+ mShouldReactToLongPress = false;
+ }
+
@Override
public boolean onDown(MotionEvent e) {
return true;
@@ -2252,6 +2290,9 @@
@Override
public void onLongPress(MotionEvent e) {
+ if (!mShouldReactToLongPress) {
+ return;
+ }
View child = findChildView(e);
if (child != null) {
ViewHolder vh = mRecyclerView.getChildViewHolder(child);
diff --git a/v7/recyclerview/src/android/support/v7/widget/helper/ItemTouchUIUtil.java b/v7/recyclerview/src/main/java/android/support/v7/widget/helper/ItemTouchUIUtil.java
similarity index 100%
rename from v7/recyclerview/src/android/support/v7/widget/helper/ItemTouchUIUtil.java
rename to v7/recyclerview/src/main/java/android/support/v7/widget/helper/ItemTouchUIUtil.java
diff --git a/v7/recyclerview/src/android/support/v7/widget/helper/ItemTouchUIUtilImpl.java b/v7/recyclerview/src/main/java/android/support/v7/widget/helper/ItemTouchUIUtilImpl.java
similarity index 100%
rename from v7/recyclerview/src/android/support/v7/widget/helper/ItemTouchUIUtilImpl.java
rename to v7/recyclerview/src/main/java/android/support/v7/widget/helper/ItemTouchUIUtilImpl.java
diff --git a/v7/recyclerview/src/android/support/v7/widget/util/SortedListAdapterCallback.java b/v7/recyclerview/src/main/java/android/support/v7/widget/util/SortedListAdapterCallback.java
similarity index 100%
rename from v7/recyclerview/src/android/support/v7/widget/util/SortedListAdapterCallback.java
rename to v7/recyclerview/src/main/java/android/support/v7/widget/util/SortedListAdapterCallback.java
diff --git a/v7/recyclerview/jvm-tests/NO_DOCS b/v7/recyclerview/src/test/NO_DOCS
similarity index 100%
rename from v7/recyclerview/jvm-tests/NO_DOCS
rename to v7/recyclerview/src/test/NO_DOCS
diff --git a/v7/recyclerview/jvm-tests/src/android/support/v7/util/BatchingListUpdateCallbackTest.java b/v7/recyclerview/src/test/java/android/support/v7/util/BatchingListUpdateCallbackTest.java
similarity index 100%
rename from v7/recyclerview/jvm-tests/src/android/support/v7/util/BatchingListUpdateCallbackTest.java
rename to v7/recyclerview/src/test/java/android/support/v7/util/BatchingListUpdateCallbackTest.java
diff --git a/v7/recyclerview/jvm-tests/src/android/support/v7/util/DiffUtilTest.java b/v7/recyclerview/src/test/java/android/support/v7/util/DiffUtilTest.java
similarity index 100%
rename from v7/recyclerview/jvm-tests/src/android/support/v7/util/DiffUtilTest.java
rename to v7/recyclerview/src/test/java/android/support/v7/util/DiffUtilTest.java
diff --git a/v7/recyclerview/jvm-tests/src/android/support/v7/util/SortedListBatchedCallbackTest.java b/v7/recyclerview/src/test/java/android/support/v7/util/SortedListBatchedCallbackTest.java
similarity index 100%
rename from v7/recyclerview/jvm-tests/src/android/support/v7/util/SortedListBatchedCallbackTest.java
rename to v7/recyclerview/src/test/java/android/support/v7/util/SortedListBatchedCallbackTest.java
diff --git a/v7/recyclerview/jvm-tests/src/android/support/v7/util/SortedListTest.java b/v7/recyclerview/src/test/java/android/support/v7/util/SortedListTest.java
similarity index 100%
rename from v7/recyclerview/jvm-tests/src/android/support/v7/util/SortedListTest.java
rename to v7/recyclerview/src/test/java/android/support/v7/util/SortedListTest.java
diff --git a/v7/recyclerview/jvm-tests/src/android/support/v7/widget/AdapterHelperTest.java b/v7/recyclerview/src/test/java/android/support/v7/widget/AdapterHelperTest.java
similarity index 100%
rename from v7/recyclerview/jvm-tests/src/android/support/v7/widget/AdapterHelperTest.java
rename to v7/recyclerview/src/test/java/android/support/v7/widget/AdapterHelperTest.java
diff --git a/v7/recyclerview/jvm-tests/src/android/support/v7/widget/OpReorderTest.java b/v7/recyclerview/src/test/java/android/support/v7/widget/OpReorderTest.java
similarity index 100%
rename from v7/recyclerview/jvm-tests/src/android/support/v7/widget/OpReorderTest.java
rename to v7/recyclerview/src/test/java/android/support/v7/widget/OpReorderTest.java
diff --git a/v7/recyclerview/jvm-tests/src/android/support/v7/widget/ViewInfoStoreTest.java b/v7/recyclerview/src/test/java/android/support/v7/widget/ViewInfoStoreTest.java
similarity index 100%
rename from v7/recyclerview/jvm-tests/src/android/support/v7/widget/ViewInfoStoreTest.java
rename to v7/recyclerview/src/test/java/android/support/v7/widget/ViewInfoStoreTest.java
diff --git a/v7/recyclerview/tests/src/android/support/v7/util/TouchUtils.java b/v7/recyclerview/tests/src/android/support/v7/util/TouchUtils.java
index 02099ba..1a64e3c 100644
--- a/v7/recyclerview/tests/src/android/support/v7/util/TouchUtils.java
+++ b/v7/recyclerview/tests/src/android/support/v7/util/TouchUtils.java
@@ -142,13 +142,6 @@
inst.sendPointerSync(event);
inst.waitForIdleSync();
- eventTime = SystemClock.uptimeMillis();
- final int touchSlop = ViewConfiguration.get(v.getContext()).getScaledTouchSlop();
- event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_MOVE,
- x + touchSlop / 2, y + touchSlop / 2, 0);
- inst.sendPointerSync(event);
- inst.waitForIdleSync();
-
try {
Thread.sleep((long) (ViewConfiguration.getLongPressTimeout() * 1.5f));
} catch (InterruptedException e) {
diff --git a/v7/recyclerview/tests/src/android/support/v7/widget/helper/ItemTouchHelperTest.java b/v7/recyclerview/tests/src/android/support/v7/widget/helper/ItemTouchHelperTest.java
index 18af47b..090ea69 100644
--- a/v7/recyclerview/tests/src/android/support/v7/widget/helper/ItemTouchHelperTest.java
+++ b/v7/recyclerview/tests/src/android/support/v7/widget/helper/ItemTouchHelperTest.java
@@ -32,11 +32,13 @@
import android.support.test.filters.Suppress;
import android.support.test.runner.AndroidJUnit4;
import android.support.testutils.PollingCheck;
+import android.support.v4.util.Pair;
import android.support.v7.util.TouchUtils;
import android.support.v7.widget.BaseRecyclerViewInstrumentationTest;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.WrappedRecyclerView;
import android.view.Gravity;
+import android.view.View;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -48,26 +50,27 @@
@RunWith(AndroidJUnit4.class)
public class ItemTouchHelperTest extends BaseRecyclerViewInstrumentationTest {
- TestAdapter mAdapter;
-
- TestLayoutManager mLayoutManager;
+ private static class RecyclerViewState {
+ public TestAdapter mAdapter;
+ public TestLayoutManager mLayoutManager;
+ public WrappedRecyclerView mWrappedRecyclerView;
+ }
private LoggingCalback mCalback;
private LoggingItemTouchHelper mItemTouchHelper;
- private WrappedRecyclerView mWrappedRecyclerView;
-
private Boolean mSetupRTL;
public ItemTouchHelperTest() {
super(false);
}
- private RecyclerView setup(int dragDirs, int swipeDirs) throws Throwable {
- mWrappedRecyclerView = inflateWrappedRV();
- mAdapter = new TestAdapter(10);
- mLayoutManager = new TestLayoutManager() {
+ private RecyclerViewState setupRecyclerView() throws Throwable {
+ RecyclerViewState rvs = new RecyclerViewState();
+ rvs.mWrappedRecyclerView = inflateWrappedRV();
+ rvs.mAdapter = new TestAdapter(10);
+ rvs.mLayoutManager = new TestLayoutManager() {
@Override
public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
detachAndScrapAttachedViews(recycler);
@@ -85,19 +88,24 @@
return false;
}
};
- mWrappedRecyclerView.setFakeRTL(mSetupRTL);
- mWrappedRecyclerView.setAdapter(mAdapter);
- mWrappedRecyclerView.setLayoutManager(mLayoutManager);
+ rvs.mWrappedRecyclerView.setFakeRTL(mSetupRTL);
+ rvs.mWrappedRecyclerView.setAdapter(rvs.mAdapter);
+ rvs.mWrappedRecyclerView.setLayoutManager(rvs.mLayoutManager);
+ return rvs;
+ }
+
+ private RecyclerViewState setupItemTouchHelper(final RecyclerViewState rvs, int dragDirs,
+ int swipeDirs) throws Throwable {
mCalback = new LoggingCalback(dragDirs, swipeDirs);
mItemTouchHelper = new LoggingItemTouchHelper(mCalback);
mActivityRule.runOnUiThread(new Runnable() {
@Override
public void run() {
- mItemTouchHelper.attachToRecyclerView(mWrappedRecyclerView);
+ mItemTouchHelper.attachToRecyclerView(rvs.mWrappedRecyclerView);
}
});
- return mWrappedRecyclerView;
+ return rvs;
}
@Test
@@ -136,11 +144,60 @@
basicSwipeTest(END, START | END, -getActivity().getWindow().getDecorView().getWidth());
}
+ @Test
+ public void attachToNullRecycleViewDuringLongPress() throws Throwable {
+ final RecyclerViewState rvs = setupItemTouchHelper(setupRecyclerView(), END, 0);
+ rvs.mLayoutManager.expectLayouts(1);
+ setRecyclerView(rvs.mWrappedRecyclerView);
+ rvs.mLayoutManager.waitForLayout(1);
+
+ final RecyclerView.ViewHolder target = mRecyclerView
+ .findViewHolderForAdapterPosition(1);
+ target.itemView.setOnLongClickListener(new View.OnLongClickListener() {
+ @Override
+ public boolean onLongClick(View v) {
+ mItemTouchHelper.attachToRecyclerView(null);
+ return false;
+ }
+ });
+ TouchUtils.longClickView(getInstrumentation(), target.itemView);
+ }
+
+ @Test
+ public void attachToAnotherRecycleViewDuringLongPress() throws Throwable {
+ final RecyclerViewState rvs2 = setupRecyclerView();
+ rvs2.mLayoutManager.expectLayouts(1);
+ mActivityRule.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ getActivity().getContainer().addView(rvs2.mWrappedRecyclerView);
+ }
+ });
+ rvs2.mLayoutManager.waitForLayout(1);
+
+ final RecyclerViewState rvs = setupItemTouchHelper(setupRecyclerView(), END, 0);
+ rvs.mLayoutManager.expectLayouts(1);
+ setRecyclerView(rvs.mWrappedRecyclerView);
+ rvs.mLayoutManager.waitForLayout(1);
+
+ final RecyclerView.ViewHolder target = mRecyclerView
+ .findViewHolderForAdapterPosition(1);
+ target.itemView.setOnLongClickListener(new View.OnLongClickListener() {
+ @Override
+ public boolean onLongClick(View v) {
+ mItemTouchHelper.attachToRecyclerView(rvs2.mWrappedRecyclerView);
+ return false;
+ }
+ });
+ TouchUtils.longClickView(getInstrumentation(), target.itemView);
+ assertEquals(0, mCalback.mHasDragFlag.size());
+ }
+
public void basicSwipeTest(int dir, int swipeDirs, int targetX) throws Throwable {
- final RecyclerView recyclerView = setup(0, swipeDirs);
- mLayoutManager.expectLayouts(1);
- setRecyclerView(recyclerView);
- mLayoutManager.waitForLayout(1);
+ final RecyclerViewState rvs = setupItemTouchHelper(setupRecyclerView(), 0, swipeDirs);
+ rvs.mLayoutManager.expectLayouts(1);
+ setRecyclerView(rvs.mWrappedRecyclerView);
+ rvs.mLayoutManager.waitForLayout(1);
final RecyclerView.ViewHolder target = mRecyclerView
.findViewHolderForAdapterPosition(1);
@@ -158,9 +215,9 @@
assertEquals(1, mItemTouchHelper.mRecoverAnimations.size());
assertEquals(1, mItemTouchHelper.mPendingCleanup.size());
// get rid of the view
- mLayoutManager.expectLayouts(1);
- mAdapter.deleteAndNotify(1, 1);
- mLayoutManager.waitForLayout(1);
+ rvs.mLayoutManager.expectLayouts(1);
+ rvs.mAdapter.deleteAndNotify(1, 1);
+ rvs.mLayoutManager.waitForLayout(1);
waitForAnimations();
assertEquals(0, mItemTouchHelper.mRecoverAnimations.size());
assertEquals(0, mItemTouchHelper.mPendingCleanup.size());
@@ -181,6 +238,8 @@
private List<RecyclerView.ViewHolder> mCleared = new ArrayList<RecyclerView.ViewHolder>();
+ public List<Pair<RecyclerView, RecyclerView.ViewHolder>> mHasDragFlag = new ArrayList<>();
+
LoggingCalback(int dragDirs, int swipeDirs) {
super(dragDirs, swipeDirs);
}
@@ -212,6 +271,12 @@
mCleared.add(viewHolder);
}
+ @Override
+ boolean hasDragFlag(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
+ mHasDragFlag.add(new Pair<>(recyclerView, viewHolder));
+ return super.hasDragFlag(recyclerView, viewHolder);
+ }
+
public SwipeRecord getSwipe(RecyclerView.ViewHolder vh) {
for (SwipeRecord swipe : mSwipeRecords) {
if (swipe.viewHolder == vh) {
diff --git a/wear/Android.mk b/wear/Android.mk
index eec890b..fe9b8d3 100644
--- a/wear/Android.mk
+++ b/wear/Android.mk
@@ -14,6 +14,12 @@
LOCAL_PATH := $(call my-dir)
+# Here is a prebuilt library containing all the wearable stubs necessary for ambient mode
+include $(CLEAR_VARS)
+LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := \
+ prebuilt-com.google.android.wearable-stubs:wear_stubs/com.google.android.wearable-stubs.jar
+include $(BUILD_MULTI_PREBUILT)
+
# Here is the final static library that apps can link against.
# Applications that use this library must specify
#
@@ -22,12 +28,13 @@
# android-support-core-ui \
# android-support-v7-recyclerview
#
-# in their makefiles to include the resources and their dependencies in their package.
+# in their makefiles to include the resources and their dependencies in their package
+
include $(CLEAR_VARS)
LOCAL_USE_AAPT2 := true
LOCAL_MODULE := android-support-wear
LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_SRC_FILES := $(call all-java-files-under,src)
+LOCAL_SRC_FILES := $(call all-java-files-under,src/main/java)
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
LOCAL_SHARED_ANDROID_LIBRARIES := \
android-support-core-ui \
@@ -35,7 +42,10 @@
android-support-percent \
android-support-v7-recyclerview \
android-support-v4
+LOCAL_STATIC_JAVA_LIBRARIES := \
+ prebuilt-com.google.android.wearable-stubs
LOCAL_JAR_EXCLUDE_FILES := none
LOCAL_JAVA_LANGUAGE_VERSION := 1.7
LOCAL_AAPT_FLAGS := --add-javadoc-annotation doconly
include $(BUILD_STATIC_JAVA_LIBRARY)
+
diff --git a/wear/AndroidManifest.xml b/wear/AndroidManifest.xml
index 0541f36..3849df5 100644
--- a/wear/AndroidManifest.xml
+++ b/wear/AndroidManifest.xml
@@ -15,8 +15,4 @@
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.support.wear">
- <application>
- <meta-data android:name="android.support.wear.VERSION"
- android:value="${support-version}" />
- </application>
</manifest>
diff --git a/wear/OWNERS b/wear/OWNERS
new file mode 100644
index 0000000..9cd6e52
--- /dev/null
+++ b/wear/OWNERS
@@ -0,0 +1,2 @@
+amad@google.com
+griff@google.com
\ No newline at end of file
diff --git a/wear/api/26.1.0.txt b/wear/api/26.1.0.txt
new file mode 100644
index 0000000..1fb713a
--- /dev/null
+++ b/wear/api/26.1.0.txt
@@ -0,0 +1,218 @@
+package android.support.wear.widget {
+
+ public class BoxInsetLayout extends android.view.ViewGroup {
+ ctor public BoxInsetLayout(android.content.Context);
+ ctor public BoxInsetLayout(android.content.Context, android.util.AttributeSet);
+ ctor public BoxInsetLayout(android.content.Context, android.util.AttributeSet, int);
+ method public android.support.wear.widget.BoxInsetLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
+ method protected void onLayout(boolean, int, int, int, int);
+ }
+
+ public static class BoxInsetLayout.LayoutParams extends android.widget.FrameLayout.LayoutParams {
+ ctor public BoxInsetLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
+ ctor public BoxInsetLayout.LayoutParams(int, int);
+ ctor public BoxInsetLayout.LayoutParams(int, int, int);
+ ctor public BoxInsetLayout.LayoutParams(int, int, int, int);
+ ctor public BoxInsetLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public BoxInsetLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ ctor public BoxInsetLayout.LayoutParams(android.widget.FrameLayout.LayoutParams);
+ ctor public BoxInsetLayout.LayoutParams(android.support.wear.widget.BoxInsetLayout.LayoutParams);
+ field public static final int BOX_ALL = 15; // 0xf
+ field public static final int BOX_BOTTOM = 8; // 0x8
+ field public static final int BOX_LEFT = 1; // 0x1
+ field public static final int BOX_NONE = 0; // 0x0
+ field public static final int BOX_RIGHT = 4; // 0x4
+ field public static final int BOX_TOP = 2; // 0x2
+ field public int boxedEdges;
+ }
+
+ public class CircularProgressLayout extends android.widget.FrameLayout {
+ ctor public CircularProgressLayout(android.content.Context);
+ ctor public CircularProgressLayout(android.content.Context, android.util.AttributeSet);
+ ctor public CircularProgressLayout(android.content.Context, android.util.AttributeSet, int);
+ ctor public CircularProgressLayout(android.content.Context, android.util.AttributeSet, int, int);
+ method public int getBackgroundColor();
+ method public int[] getColorSchemeColors();
+ method public android.support.wear.widget.CircularProgressLayout.OnTimerFinishedListener getOnTimerFinishedListener();
+ method public android.support.v4.widget.CircularProgressDrawable getProgressDrawable();
+ method public float getStartingRotation();
+ method public float getStrokeWidth();
+ method public long getTotalTime();
+ method public boolean isIndeterminate();
+ method public boolean isTimerRunning();
+ method public void setColorSchemeColors(int...);
+ method public void setIndeterminate(boolean);
+ method public void setOnTimerFinishedListener(android.support.wear.widget.CircularProgressLayout.OnTimerFinishedListener);
+ method public void setStartingRotation(float);
+ method public void setStrokeWidth(float);
+ method public void setTotalTime(long);
+ method public void startTimer();
+ method public void stopTimer();
+ }
+
+ public static abstract interface CircularProgressLayout.OnTimerFinishedListener {
+ method public abstract void onTimerFinished(android.support.wear.widget.CircularProgressLayout);
+ }
+
+ public class CurvingLayoutCallback extends android.support.wear.widget.WearableLinearLayoutManager.LayoutCallback {
+ ctor public CurvingLayoutCallback(android.content.Context);
+ method public void adjustAnchorOffsetXY(android.view.View, float[]);
+ method public void onLayoutFinished(android.view.View, android.support.v7.widget.RecyclerView);
+ }
+
+ public class RoundedDrawable extends android.graphics.drawable.Drawable {
+ ctor public RoundedDrawable();
+ method public void draw(android.graphics.Canvas);
+ method public int getBackgroundColor();
+ method public android.graphics.drawable.Drawable getDrawable();
+ method public int getOpacity();
+ method public int getRadius();
+ method public boolean isClipEnabled();
+ method public void setAlpha(int);
+ method public void setBackgroundColor(int);
+ method public void setClipEnabled(boolean);
+ method public void setColorFilter(android.graphics.ColorFilter);
+ method public void setDrawable(android.graphics.drawable.Drawable);
+ method public void setRadius(int);
+ }
+
+ public class SwipeDismissFrameLayout extends android.widget.FrameLayout {
+ ctor public SwipeDismissFrameLayout(android.content.Context);
+ ctor public SwipeDismissFrameLayout(android.content.Context, android.util.AttributeSet);
+ ctor public SwipeDismissFrameLayout(android.content.Context, android.util.AttributeSet, int);
+ ctor public SwipeDismissFrameLayout(android.content.Context, android.util.AttributeSet, int, int);
+ method public void addCallback(android.support.wear.widget.SwipeDismissFrameLayout.Callback);
+ method public void removeCallback(android.support.wear.widget.SwipeDismissFrameLayout.Callback);
+ }
+
+ public static abstract class SwipeDismissFrameLayout.Callback {
+ ctor public SwipeDismissFrameLayout.Callback();
+ method public void onDismissed(android.support.wear.widget.SwipeDismissFrameLayout);
+ method public void onSwipeCanceled(android.support.wear.widget.SwipeDismissFrameLayout);
+ method public void onSwipeStarted(android.support.wear.widget.SwipeDismissFrameLayout);
+ }
+
+ public class WearableLinearLayoutManager extends android.support.v7.widget.LinearLayoutManager {
+ ctor public WearableLinearLayoutManager(android.content.Context, android.support.wear.widget.WearableLinearLayoutManager.LayoutCallback);
+ ctor public WearableLinearLayoutManager(android.content.Context);
+ method public android.support.wear.widget.WearableLinearLayoutManager.LayoutCallback getLayoutCallback();
+ method public void setLayoutCallback(android.support.wear.widget.WearableLinearLayoutManager.LayoutCallback);
+ }
+
+ public static abstract class WearableLinearLayoutManager.LayoutCallback {
+ ctor public WearableLinearLayoutManager.LayoutCallback();
+ method public abstract void onLayoutFinished(android.view.View, android.support.v7.widget.RecyclerView);
+ }
+
+ public class WearableRecyclerView extends android.support.v7.widget.RecyclerView {
+ ctor public WearableRecyclerView(android.content.Context);
+ ctor public WearableRecyclerView(android.content.Context, android.util.AttributeSet);
+ ctor public WearableRecyclerView(android.content.Context, android.util.AttributeSet, int);
+ ctor public WearableRecyclerView(android.content.Context, android.util.AttributeSet, int, int);
+ method public float getBezelFraction();
+ method public float getScrollDegreesPerScreen();
+ method public boolean isCircularScrollingGestureEnabled();
+ method public boolean isEdgeItemsCenteringEnabled();
+ method public void setBezelFraction(float);
+ method public void setCircularScrollingGestureEnabled(boolean);
+ method public void setEdgeItemsCenteringEnabled(boolean);
+ method public void setScrollDegreesPerScreen(float);
+ }
+
+}
+
+package android.support.wear.widget.drawer {
+
+ public class WearableActionDrawerView extends android.support.wear.widget.drawer.WearableDrawerView {
+ ctor public WearableActionDrawerView(android.content.Context);
+ ctor public WearableActionDrawerView(android.content.Context, android.util.AttributeSet);
+ ctor public WearableActionDrawerView(android.content.Context, android.util.AttributeSet, int);
+ ctor public WearableActionDrawerView(android.content.Context, android.util.AttributeSet, int, int);
+ method public android.view.Menu getMenu();
+ method public void setOnMenuItemClickListener(android.view.MenuItem.OnMenuItemClickListener);
+ method public void setTitle(java.lang.CharSequence);
+ }
+
+ public class WearableDrawerController {
+ method public void closeDrawer();
+ method public void openDrawer();
+ method public void peekDrawer();
+ }
+
+ public class WearableDrawerLayout extends android.widget.FrameLayout implements android.view.View.OnLayoutChangeListener {
+ ctor public WearableDrawerLayout(android.content.Context);
+ ctor public WearableDrawerLayout(android.content.Context, android.util.AttributeSet);
+ ctor public WearableDrawerLayout(android.content.Context, android.util.AttributeSet, int);
+ ctor public WearableDrawerLayout(android.content.Context, android.util.AttributeSet, int, int);
+ method public void onFlingComplete(android.view.View);
+ method public void onLayoutChange(android.view.View, int, int, int, int, int, int, int, int);
+ method public void setDrawerStateCallback(android.support.wear.widget.drawer.WearableDrawerLayout.DrawerStateCallback);
+ }
+
+ public static class WearableDrawerLayout.DrawerStateCallback {
+ ctor public WearableDrawerLayout.DrawerStateCallback();
+ method public void onDrawerClosed(android.support.wear.widget.drawer.WearableDrawerLayout, android.support.wear.widget.drawer.WearableDrawerView);
+ method public void onDrawerOpened(android.support.wear.widget.drawer.WearableDrawerLayout, android.support.wear.widget.drawer.WearableDrawerView);
+ method public void onDrawerStateChanged(android.support.wear.widget.drawer.WearableDrawerLayout, int);
+ }
+
+ public class WearableDrawerView extends android.widget.FrameLayout {
+ ctor public WearableDrawerView(android.content.Context);
+ ctor public WearableDrawerView(android.content.Context, android.util.AttributeSet);
+ ctor public WearableDrawerView(android.content.Context, android.util.AttributeSet, int);
+ ctor public WearableDrawerView(android.content.Context, android.util.AttributeSet, int, int);
+ method public android.support.wear.widget.drawer.WearableDrawerController getController();
+ method public android.view.View getDrawerContent();
+ method public int getDrawerState();
+ method public boolean isAutoPeekEnabled();
+ method public boolean isClosed();
+ method public boolean isLocked();
+ method public boolean isLockedWhenClosed();
+ method public boolean isOpenOnlyAtTopEnabled();
+ method public boolean isOpened();
+ method public boolean isPeekOnScrollDownEnabled();
+ method public boolean isPeeking();
+ method public void onDrawerClosed();
+ method public void onDrawerOpened();
+ method public void onDrawerStateChanged(int);
+ method public void onPeekContainerClicked(android.view.View);
+ method public void setDrawerContent(android.view.View);
+ method public void setIsAutoPeekEnabled(boolean);
+ method public void setIsLocked(boolean);
+ method public void setLockedWhenClosed(boolean);
+ method public void setOpenOnlyAtTopEnabled(boolean);
+ method public void setPeekContent(android.view.View);
+ method public void setPeekOnScrollDownEnabled(boolean);
+ field public static final int STATE_DRAGGING = 1; // 0x1
+ field public static final int STATE_IDLE = 0; // 0x0
+ field public static final int STATE_SETTLING = 2; // 0x2
+ }
+
+ public class WearableNavigationDrawerView extends android.support.wear.widget.drawer.WearableDrawerView {
+ ctor public WearableNavigationDrawerView(android.content.Context);
+ ctor public WearableNavigationDrawerView(android.content.Context, android.util.AttributeSet);
+ ctor public WearableNavigationDrawerView(android.content.Context, android.util.AttributeSet, int);
+ ctor public WearableNavigationDrawerView(android.content.Context, android.util.AttributeSet, int, int);
+ method public void addOnItemSelectedListener(android.support.wear.widget.drawer.WearableNavigationDrawerView.OnItemSelectedListener);
+ method public int getNavigationStyle();
+ method public void removeOnItemSelectedListener(android.support.wear.widget.drawer.WearableNavigationDrawerView.OnItemSelectedListener);
+ method public void setAdapter(android.support.wear.widget.drawer.WearableNavigationDrawerView.WearableNavigationDrawerAdapter);
+ method public void setCurrentItem(int, boolean);
+ field public static final int MULTI_PAGE = 1; // 0x1
+ field public static final int SINGLE_PAGE = 0; // 0x0
+ }
+
+ public static abstract interface WearableNavigationDrawerView.OnItemSelectedListener {
+ method public abstract void onItemSelected(int);
+ }
+
+ public static abstract class WearableNavigationDrawerView.WearableNavigationDrawerAdapter {
+ ctor public WearableNavigationDrawerView.WearableNavigationDrawerAdapter();
+ method public abstract int getCount();
+ method public abstract android.graphics.drawable.Drawable getItemDrawable(int);
+ method public abstract java.lang.CharSequence getItemText(int);
+ method public void notifyDataSetChanged();
+ }
+
+}
+
diff --git a/wear/api/27.0.0.txt b/wear/api/27.0.0.txt
new file mode 100644
index 0000000..e9b7d86
--- /dev/null
+++ b/wear/api/27.0.0.txt
@@ -0,0 +1,261 @@
+package android.support.wear.ambient {
+
+ public final class AmbientMode extends android.app.Fragment {
+ ctor public AmbientMode();
+ method public static <T extends android.app.Activity & android.support.wear.ambient.AmbientMode.AmbientCallbackProvider> android.support.wear.ambient.AmbientMode.AmbientController attachAmbientSupport(T);
+ field public static final java.lang.String EXTRA_BURN_IN_PROTECTION = "com.google.android.wearable.compat.extra.BURN_IN_PROTECTION";
+ field public static final java.lang.String EXTRA_LOWBIT_AMBIENT = "com.google.android.wearable.compat.extra.LOWBIT_AMBIENT";
+ field public static final java.lang.String FRAGMENT_TAG = "android.support.wearable.ambient.AmbientMode";
+ }
+
+ public static abstract class AmbientMode.AmbientCallback {
+ ctor public AmbientMode.AmbientCallback();
+ method public void onEnterAmbient(android.os.Bundle);
+ method public void onExitAmbient();
+ method public void onUpdateAmbient();
+ }
+
+ public static abstract interface AmbientMode.AmbientCallbackProvider {
+ method public abstract android.support.wear.ambient.AmbientMode.AmbientCallback getAmbientCallback();
+ }
+
+ public final class AmbientMode.AmbientController {
+ method public boolean isAmbient();
+ }
+
+}
+
+package android.support.wear.utils {
+
+ public class MetadataConstants {
+ method public static int getPreviewDrawableResourceId(android.content.Context, boolean);
+ method public static boolean isNotificationBridgingEnabled(android.content.Context);
+ method public static boolean isStandalone(android.content.Context);
+ field public static final java.lang.String NOTIFICATION_BRIDGE_MODE_BRIDGING = "BRIDGING";
+ field public static final java.lang.String NOTIFICATION_BRIDGE_MODE_METADATA_NAME = "com.google.android.wearable.notificationBridgeMode";
+ field public static final java.lang.String NOTIFICATION_BRIDGE_MODE_NO_BRIDGING = "NO_BRIDGING";
+ field public static final java.lang.String STANDALONE_METADATA_NAME = "com.google.android.wearable.standalone";
+ field public static final java.lang.String WATCH_FACE_PREVIEW_CIRCULAR_METADATA_NAME = "com.google.android.wearable.watchface.preview_circular";
+ field public static final java.lang.String WATCH_FACE_PREVIEW_METADATA_NAME = "com.google.android.wearable.watchface.preview";
+ }
+
+}
+
+package android.support.wear.widget {
+
+ public class BoxInsetLayout extends android.view.ViewGroup {
+ ctor public BoxInsetLayout(android.content.Context);
+ ctor public BoxInsetLayout(android.content.Context, android.util.AttributeSet);
+ ctor public BoxInsetLayout(android.content.Context, android.util.AttributeSet, int);
+ method public android.support.wear.widget.BoxInsetLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
+ method protected void onLayout(boolean, int, int, int, int);
+ }
+
+ public static class BoxInsetLayout.LayoutParams extends android.widget.FrameLayout.LayoutParams {
+ ctor public BoxInsetLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
+ ctor public BoxInsetLayout.LayoutParams(int, int);
+ ctor public BoxInsetLayout.LayoutParams(int, int, int);
+ ctor public BoxInsetLayout.LayoutParams(int, int, int, int);
+ ctor public BoxInsetLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public BoxInsetLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ ctor public BoxInsetLayout.LayoutParams(android.widget.FrameLayout.LayoutParams);
+ ctor public BoxInsetLayout.LayoutParams(android.support.wear.widget.BoxInsetLayout.LayoutParams);
+ field public static final int BOX_ALL = 15; // 0xf
+ field public static final int BOX_BOTTOM = 8; // 0x8
+ field public static final int BOX_LEFT = 1; // 0x1
+ field public static final int BOX_NONE = 0; // 0x0
+ field public static final int BOX_RIGHT = 4; // 0x4
+ field public static final int BOX_TOP = 2; // 0x2
+ field public int boxedEdges;
+ }
+
+ public class CircularProgressLayout extends android.widget.FrameLayout {
+ ctor public CircularProgressLayout(android.content.Context);
+ ctor public CircularProgressLayout(android.content.Context, android.util.AttributeSet);
+ ctor public CircularProgressLayout(android.content.Context, android.util.AttributeSet, int);
+ ctor public CircularProgressLayout(android.content.Context, android.util.AttributeSet, int, int);
+ method public int getBackgroundColor();
+ method public int[] getColorSchemeColors();
+ method public android.support.wear.widget.CircularProgressLayout.OnTimerFinishedListener getOnTimerFinishedListener();
+ method public android.support.v4.widget.CircularProgressDrawable getProgressDrawable();
+ method public float getStartingRotation();
+ method public float getStrokeWidth();
+ method public long getTotalTime();
+ method public boolean isIndeterminate();
+ method public boolean isTimerRunning();
+ method public void setColorSchemeColors(int...);
+ method public void setIndeterminate(boolean);
+ method public void setOnTimerFinishedListener(android.support.wear.widget.CircularProgressLayout.OnTimerFinishedListener);
+ method public void setStartingRotation(float);
+ method public void setStrokeWidth(float);
+ method public void setTotalTime(long);
+ method public void startTimer();
+ method public void stopTimer();
+ }
+
+ public static abstract interface CircularProgressLayout.OnTimerFinishedListener {
+ method public abstract void onTimerFinished(android.support.wear.widget.CircularProgressLayout);
+ }
+
+ public class CurvingLayoutCallback extends android.support.wear.widget.WearableLinearLayoutManager.LayoutCallback {
+ ctor public CurvingLayoutCallback(android.content.Context);
+ method public void adjustAnchorOffsetXY(android.view.View, float[]);
+ method public void onLayoutFinished(android.view.View, android.support.v7.widget.RecyclerView);
+ }
+
+ public class RoundedDrawable extends android.graphics.drawable.Drawable {
+ ctor public RoundedDrawable();
+ method public void draw(android.graphics.Canvas);
+ method public int getBackgroundColor();
+ method public android.graphics.drawable.Drawable getDrawable();
+ method public int getOpacity();
+ method public int getRadius();
+ method public boolean isClipEnabled();
+ method public void setAlpha(int);
+ method public void setBackgroundColor(int);
+ method public void setClipEnabled(boolean);
+ method public void setColorFilter(android.graphics.ColorFilter);
+ method public void setDrawable(android.graphics.drawable.Drawable);
+ method public void setRadius(int);
+ }
+
+ public class SwipeDismissFrameLayout extends android.widget.FrameLayout {
+ ctor public SwipeDismissFrameLayout(android.content.Context);
+ ctor public SwipeDismissFrameLayout(android.content.Context, android.util.AttributeSet);
+ ctor public SwipeDismissFrameLayout(android.content.Context, android.util.AttributeSet, int);
+ ctor public SwipeDismissFrameLayout(android.content.Context, android.util.AttributeSet, int, int);
+ method public void addCallback(android.support.wear.widget.SwipeDismissFrameLayout.Callback);
+ method public void removeCallback(android.support.wear.widget.SwipeDismissFrameLayout.Callback);
+ }
+
+ public static abstract class SwipeDismissFrameLayout.Callback {
+ ctor public SwipeDismissFrameLayout.Callback();
+ method public void onDismissed(android.support.wear.widget.SwipeDismissFrameLayout);
+ method public void onSwipeCanceled(android.support.wear.widget.SwipeDismissFrameLayout);
+ method public void onSwipeStarted(android.support.wear.widget.SwipeDismissFrameLayout);
+ }
+
+ public class WearableLinearLayoutManager extends android.support.v7.widget.LinearLayoutManager {
+ ctor public WearableLinearLayoutManager(android.content.Context, android.support.wear.widget.WearableLinearLayoutManager.LayoutCallback);
+ ctor public WearableLinearLayoutManager(android.content.Context);
+ method public android.support.wear.widget.WearableLinearLayoutManager.LayoutCallback getLayoutCallback();
+ method public void setLayoutCallback(android.support.wear.widget.WearableLinearLayoutManager.LayoutCallback);
+ }
+
+ public static abstract class WearableLinearLayoutManager.LayoutCallback {
+ ctor public WearableLinearLayoutManager.LayoutCallback();
+ method public abstract void onLayoutFinished(android.view.View, android.support.v7.widget.RecyclerView);
+ }
+
+ public class WearableRecyclerView extends android.support.v7.widget.RecyclerView {
+ ctor public WearableRecyclerView(android.content.Context);
+ ctor public WearableRecyclerView(android.content.Context, android.util.AttributeSet);
+ ctor public WearableRecyclerView(android.content.Context, android.util.AttributeSet, int);
+ ctor public WearableRecyclerView(android.content.Context, android.util.AttributeSet, int, int);
+ method public float getBezelFraction();
+ method public float getScrollDegreesPerScreen();
+ method public boolean isCircularScrollingGestureEnabled();
+ method public boolean isEdgeItemsCenteringEnabled();
+ method public void setBezelFraction(float);
+ method public void setCircularScrollingGestureEnabled(boolean);
+ method public void setEdgeItemsCenteringEnabled(boolean);
+ method public void setScrollDegreesPerScreen(float);
+ }
+
+}
+
+package android.support.wear.widget.drawer {
+
+ public class WearableActionDrawerView extends android.support.wear.widget.drawer.WearableDrawerView {
+ ctor public WearableActionDrawerView(android.content.Context);
+ ctor public WearableActionDrawerView(android.content.Context, android.util.AttributeSet);
+ ctor public WearableActionDrawerView(android.content.Context, android.util.AttributeSet, int);
+ ctor public WearableActionDrawerView(android.content.Context, android.util.AttributeSet, int, int);
+ method public android.view.Menu getMenu();
+ method public void setOnMenuItemClickListener(android.view.MenuItem.OnMenuItemClickListener);
+ method public void setTitle(java.lang.CharSequence);
+ }
+
+ public class WearableDrawerController {
+ method public void closeDrawer();
+ method public void openDrawer();
+ method public void peekDrawer();
+ }
+
+ public class WearableDrawerLayout extends android.widget.FrameLayout implements android.view.View.OnLayoutChangeListener {
+ ctor public WearableDrawerLayout(android.content.Context);
+ ctor public WearableDrawerLayout(android.content.Context, android.util.AttributeSet);
+ ctor public WearableDrawerLayout(android.content.Context, android.util.AttributeSet, int);
+ ctor public WearableDrawerLayout(android.content.Context, android.util.AttributeSet, int, int);
+ method public void onFlingComplete(android.view.View);
+ method public void onLayoutChange(android.view.View, int, int, int, int, int, int, int, int);
+ method public void setDrawerStateCallback(android.support.wear.widget.drawer.WearableDrawerLayout.DrawerStateCallback);
+ }
+
+ public static class WearableDrawerLayout.DrawerStateCallback {
+ ctor public WearableDrawerLayout.DrawerStateCallback();
+ method public void onDrawerClosed(android.support.wear.widget.drawer.WearableDrawerLayout, android.support.wear.widget.drawer.WearableDrawerView);
+ method public void onDrawerOpened(android.support.wear.widget.drawer.WearableDrawerLayout, android.support.wear.widget.drawer.WearableDrawerView);
+ method public void onDrawerStateChanged(android.support.wear.widget.drawer.WearableDrawerLayout, int);
+ }
+
+ public class WearableDrawerView extends android.widget.FrameLayout {
+ ctor public WearableDrawerView(android.content.Context);
+ ctor public WearableDrawerView(android.content.Context, android.util.AttributeSet);
+ ctor public WearableDrawerView(android.content.Context, android.util.AttributeSet, int);
+ ctor public WearableDrawerView(android.content.Context, android.util.AttributeSet, int, int);
+ method public android.support.wear.widget.drawer.WearableDrawerController getController();
+ method public android.view.View getDrawerContent();
+ method public int getDrawerState();
+ method public boolean isAutoPeekEnabled();
+ method public boolean isClosed();
+ method public boolean isLocked();
+ method public boolean isLockedWhenClosed();
+ method public boolean isOpenOnlyAtTopEnabled();
+ method public boolean isOpened();
+ method public boolean isPeekOnScrollDownEnabled();
+ method public boolean isPeeking();
+ method public void onDrawerClosed();
+ method public void onDrawerOpened();
+ method public void onDrawerStateChanged(int);
+ method public void onPeekContainerClicked(android.view.View);
+ method public void setDrawerContent(android.view.View);
+ method public void setIsAutoPeekEnabled(boolean);
+ method public void setIsLocked(boolean);
+ method public void setLockedWhenClosed(boolean);
+ method public void setOpenOnlyAtTopEnabled(boolean);
+ method public void setPeekContent(android.view.View);
+ method public void setPeekOnScrollDownEnabled(boolean);
+ field public static final int STATE_DRAGGING = 1; // 0x1
+ field public static final int STATE_IDLE = 0; // 0x0
+ field public static final int STATE_SETTLING = 2; // 0x2
+ }
+
+ public class WearableNavigationDrawerView extends android.support.wear.widget.drawer.WearableDrawerView {
+ ctor public WearableNavigationDrawerView(android.content.Context);
+ ctor public WearableNavigationDrawerView(android.content.Context, android.util.AttributeSet);
+ ctor public WearableNavigationDrawerView(android.content.Context, android.util.AttributeSet, int);
+ ctor public WearableNavigationDrawerView(android.content.Context, android.util.AttributeSet, int, int);
+ method public void addOnItemSelectedListener(android.support.wear.widget.drawer.WearableNavigationDrawerView.OnItemSelectedListener);
+ method public int getNavigationStyle();
+ method public void removeOnItemSelectedListener(android.support.wear.widget.drawer.WearableNavigationDrawerView.OnItemSelectedListener);
+ method public void setAdapter(android.support.wear.widget.drawer.WearableNavigationDrawerView.WearableNavigationDrawerAdapter);
+ method public void setCurrentItem(int, boolean);
+ field public static final int MULTI_PAGE = 1; // 0x1
+ field public static final int SINGLE_PAGE = 0; // 0x0
+ }
+
+ public static abstract interface WearableNavigationDrawerView.OnItemSelectedListener {
+ method public abstract void onItemSelected(int);
+ }
+
+ public static abstract class WearableNavigationDrawerView.WearableNavigationDrawerAdapter {
+ ctor public WearableNavigationDrawerView.WearableNavigationDrawerAdapter();
+ method public abstract int getCount();
+ method public abstract android.graphics.drawable.Drawable getItemDrawable(int);
+ method public abstract java.lang.CharSequence getItemText(int);
+ method public void notifyDataSetChanged();
+ }
+
+}
+
diff --git a/wear/api/current.txt b/wear/api/current.txt
index afffeed..e397eb3 100644
--- a/wear/api/current.txt
+++ b/wear/api/current.txt
@@ -1,3 +1,31 @@
+package android.support.wear.ambient {
+
+ public final class AmbientMode extends android.app.Fragment {
+ ctor public AmbientMode();
+ method public static <T extends android.app.Activity & android.support.wear.ambient.AmbientMode.AmbientCallbackProvider> android.support.wear.ambient.AmbientMode.AmbientController attachAmbientSupport(T);
+ field public static final java.lang.String EXTRA_BURN_IN_PROTECTION = "com.google.android.wearable.compat.extra.BURN_IN_PROTECTION";
+ field public static final java.lang.String EXTRA_LOWBIT_AMBIENT = "com.google.android.wearable.compat.extra.LOWBIT_AMBIENT";
+ field public static final java.lang.String FRAGMENT_TAG = "android.support.wearable.ambient.AmbientMode";
+ }
+
+ public static abstract class AmbientMode.AmbientCallback {
+ ctor public AmbientMode.AmbientCallback();
+ method public void onEnterAmbient(android.os.Bundle);
+ method public void onExitAmbient();
+ method public void onUpdateAmbient();
+ }
+
+ public static abstract interface AmbientMode.AmbientCallbackProvider {
+ method public abstract android.support.wear.ambient.AmbientMode.AmbientCallback getAmbientCallback();
+ }
+
+ public final class AmbientMode.AmbientController {
+ method public boolean isAmbient();
+ method public void setAutoResumeEnabled(boolean);
+ }
+
+}
+
package android.support.wear.utils {
public class MetadataConstants {
diff --git a/wear/build.gradle b/wear/build.gradle
index f471bc0..814f5cf 100644
--- a/wear/build.gradle
+++ b/wear/build.gradle
@@ -3,6 +3,7 @@
dependencies {
api project(':support-annotations')
api project(':support-core-ui')
+ api project(':support-fragment')
api project(':percent')
api project(':recyclerview-v7')
@@ -10,6 +11,8 @@
androidTestImplementation libs.espresso_core, { exclude module: 'support-annotations' }
androidTestImplementation libs.mockito_core, { exclude group: 'net.bytebuddy' } // DexMaker has it"s own MockMaker
androidTestImplementation libs.dexmaker_mockito, { exclude group: 'net.bytebuddy' } // DexMaker has it"s own MockMaker
+
+ provided fileTree(dir: 'wear_stubs', include: ['com.google.android.wearable-stubs.jar'])
}
android {
@@ -18,8 +21,10 @@
}
sourceSets {
- main.java.srcDir 'src'
main.res.srcDirs 'res', 'res-public'
+ main.resources {
+ includes = ["wear_stubs/LICENSE"]
+ }
}
buildTypes.all {
@@ -32,4 +37,9 @@
publish true
inceptionYear '2016'
description 'Android Wear Support UI'
+
+ license {
+ name 'The Apache Software License, Version 2.0'
+ url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
+ }
}
diff --git a/wear/src/main/java/android/support/wear/ambient/AmbientDelegate.java b/wear/src/main/java/android/support/wear/ambient/AmbientDelegate.java
new file mode 100644
index 0000000..4901290
--- /dev/null
+++ b/wear/src/main/java/android/support/wear/ambient/AmbientDelegate.java
@@ -0,0 +1,207 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.support.wear.ambient;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.util.Log;
+
+import com.google.android.wearable.compat.WearableActivityController;
+
+import java.io.FileDescriptor;
+import java.io.PrintWriter;
+import java.lang.ref.WeakReference;
+import java.lang.reflect.Method;
+
+/**
+ * Provides compatibility for ambient mode.
+ */
+final class AmbientDelegate {
+
+ private static final String TAG = "AmbientDelegate";
+
+ private WearableActivityController mWearableController;
+
+ private static boolean sInitAutoResumeEnabledMethod;
+ private static boolean sHasAutoResumeEnabledMethod;
+ private final WearableControllerProvider mWearableControllerProvider;
+ private final AmbientCallback mCallback;
+ private final WeakReference<Activity> mActivity;
+
+ /**
+ * AmbientCallback must be implemented by all users of the delegate.
+ */
+ interface AmbientCallback {
+ /**
+ * Called when an activity is entering ambient mode. This event is sent while an activity is
+ * running (after onResume, before onPause). All drawing should complete by the conclusion
+ * of this method. Note that {@code invalidate()} calls will be executed before resuming
+ * lower-power mode.
+ * <p>
+ * <p><em>Derived classes must call through to the super class's implementation of this
+ * method. If they do not, an exception will be thrown.</em>
+ *
+ * @param ambientDetails bundle containing information about the display being used.
+ * It includes information about low-bit color and burn-in protection.
+ */
+ void onEnterAmbient(Bundle ambientDetails);
+
+ /**
+ * Called when the system is updating the display for ambient mode. Activities may use this
+ * opportunity to update or invalidate views.
+ */
+ void onUpdateAmbient();
+
+ /**
+ * Called when an activity should exit ambient mode. This event is sent while an activity is
+ * running (after onResume, before onPause).
+ * <p>
+ * <p><em>Derived classes must call through to the super class's implementation of this
+ * method. If they do not, an exception will be thrown.</em>
+ */
+ void onExitAmbient();
+ }
+
+ AmbientDelegate(@Nullable Activity activity,
+ @NonNull WearableControllerProvider wearableControllerProvider,
+ @NonNull AmbientCallback callback) {
+ mActivity = new WeakReference<>(activity);
+ mCallback = callback;
+ mWearableControllerProvider = wearableControllerProvider;
+ }
+
+ /**
+ * Receives and handles the onCreate call from the associated {@link AmbientMode}
+ */
+ void onCreate() {
+ Activity activity = mActivity.get();
+ if (activity != null) {
+ mWearableController =
+ mWearableControllerProvider.getWearableController(activity, mCallback);
+ }
+ if (mWearableController != null) {
+ mWearableController.onCreate();
+ }
+ }
+
+ /**
+ * Receives and handles the onResume call from the associated {@link AmbientMode}
+ */
+ void onResume() {
+ if (mWearableController != null) {
+ mWearableController.onResume();
+ }
+ }
+
+ /**
+ * Receives and handles the onPause call from the associated {@link AmbientMode}
+ */
+ void onPause() {
+ if (mWearableController != null) {
+ mWearableController.onPause();
+ }
+ }
+
+ /**
+ * Receives and handles the onStop call from the associated {@link AmbientMode}
+ */
+ void onStop() {
+ if (mWearableController != null) {
+ mWearableController.onStop();
+ }
+ }
+
+ /**
+ * Receives and handles the onDestroy call from the associated {@link AmbientMode}
+ */
+ void onDestroy() {
+ if (mWearableController != null) {
+ mWearableController.onDestroy();
+ }
+ }
+
+ /**
+ * Sets that this activity should remain displayed when the system enters ambient mode. The
+ * default is false. In this case, the activity is stopped when the system enters ambient mode.
+ */
+ void setAmbientEnabled() {
+ if (mWearableController != null) {
+ mWearableController.setAmbientEnabled();
+ }
+ }
+
+ /**
+ * Sets whether this activity's task should be moved to the front when the system exits ambient
+ * mode. If true, the activity's task may be moved to the front if it was the last activity to
+ * be running when ambient started, depending on how much time the system spent in ambient mode.
+ */
+ void setAutoResumeEnabled(boolean enabled) {
+ if (mWearableController != null) {
+ if (hasSetAutoResumeEnabledMethod()) {
+ mWearableController.setAutoResumeEnabled(enabled);
+ }
+ }
+ }
+
+ /**
+ * @return {@code true} if the activity is currently in ambient.
+ */
+ boolean isAmbient() {
+ if (mWearableController != null) {
+ return mWearableController.isAmbient();
+ }
+ return false;
+ }
+
+ /**
+ * Dump the current state of the wearableController responsible for implementing the Ambient
+ * mode.
+ */
+ void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) {
+ if (mWearableController != null) {
+ mWearableController.dump(prefix, fd, writer, args);
+ }
+ }
+
+ private boolean hasSetAutoResumeEnabledMethod() {
+ if (!sInitAutoResumeEnabledMethod) {
+ sInitAutoResumeEnabledMethod = true;
+ try {
+ Method method =
+ WearableActivityController.class
+ .getDeclaredMethod("setAutoResumeEnabled", boolean.class);
+ // Proguard is sneaky -- it will actually rewrite strings it finds in addition to
+ // function names. Therefore add a "." prefix to the method name check to ensure the
+ // function was not renamed by proguard.
+ if (!(".setAutoResumeEnabled".equals("." + method.getName()))) {
+ throw new NoSuchMethodException();
+ }
+ sHasAutoResumeEnabledMethod = true;
+ } catch (NoSuchMethodException e) {
+ Log.w(
+ "WearableActivity",
+ "Could not find a required method for auto-resume "
+ + "support, likely due to proguard optimization. Please add "
+ + "com.google.android.wearable:wearable jar to the list of library "
+ + "jars for your project");
+ sHasAutoResumeEnabledMethod = false;
+ }
+ }
+ return sHasAutoResumeEnabledMethod;
+ }
+}
diff --git a/wear/src/main/java/android/support/wear/ambient/AmbientMode.java b/wear/src/main/java/android/support/wear/ambient/AmbientMode.java
new file mode 100644
index 0000000..db53dfc
--- /dev/null
+++ b/wear/src/main/java/android/support/wear/ambient/AmbientMode.java
@@ -0,0 +1,271 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.support.wear.ambient;
+
+import android.app.Activity;
+import android.app.Fragment;
+import android.app.FragmentManager;
+import android.content.Context;
+import android.os.Bundle;
+import android.support.annotation.CallSuper;
+import android.support.annotation.VisibleForTesting;
+
+import com.google.android.wearable.compat.WearableActivityController;
+
+import java.io.FileDescriptor;
+import java.io.PrintWriter;
+
+/**
+ * Use this as a headless Fragment to add ambient support to an Activity on Wearable devices.
+ * <p>
+ * The application that uses this should add the {@link android.Manifest.permission#WAKE_LOCK}
+ * permission to its manifest.
+ * <p>
+ * The primary entry point for this code is the {@link #attachAmbientSupport(Activity)} method.
+ * It should be called with an {@link Activity} as an argument and that {@link Activity} will then
+ * be able to receive ambient lifecycle events through an {@link AmbientCallback}. The
+ * {@link Activity} will also receive a {@link AmbientController} object from the attachment which
+ * can be used to query the current status of the ambient mode, or toggle simple settings.
+ * An example of how to attach {@link AmbientMode} to your {@link Activity} and use
+ * the {@link AmbientController} can be found below:
+ * <p>
+ * <pre class="prettyprint">{@code
+ * AmbientMode.AmbientController controller = AmbientMode.attachAmbientSupport(this);
+ * controller.setAutoResumeEnabled(true);
+ * }</pre>
+ */
+public final class AmbientMode extends Fragment {
+
+ /**
+ * Property in bundle passed to {@code AmbientCallback#onEnterAmbient(Bundle)} to indicate
+ * whether burn-in protection is required. When this property is set to true, views must be
+ * shifted around periodically in ambient mode. To ensure that content isn't shifted off
+ * the screen, avoid placing content within 10 pixels of the edge of the screen. Activities
+ * should also avoid solid white areas to prevent pixel burn-in. Both of these requirements
+ * only apply in ambient mode, and only when this property is set to true.
+ */
+ public static final String EXTRA_BURN_IN_PROTECTION =
+ WearableActivityController.EXTRA_BURN_IN_PROTECTION;
+
+ /**
+ * Property in bundle passed to {@code AmbientCallback#onEnterAmbient(Bundle)} to indicate
+ * whether the device has low-bit ambient mode. When this property is set to true, the screen
+ * supports fewer bits for each color in ambient mode. In this case, activities should disable
+ * anti-aliasing in ambient mode.
+ */
+ public static final String EXTRA_LOWBIT_AMBIENT =
+ WearableActivityController.EXTRA_LOWBIT_AMBIENT;
+
+ /**
+ * Fragment tag used by default when adding {@link AmbientMode} to add ambient support to an
+ * {@link Activity}.
+ */
+ public static final String FRAGMENT_TAG = "android.support.wearable.ambient.AmbientMode";
+
+ /**
+ * Interface for any {@link Activity} that wishes to implement Ambient Mode. Use the
+ * {@link #getAmbientCallback()} method to return and {@link AmbientCallback} which can be used
+ * to bind the {@link AmbientMode} to the instantiation of this interface.
+ * <p>
+ * <pre class="prettyprint">{@code
+ * return new AmbientMode.AmbientCallback() {
+ * public void onEnterAmbient(Bundle ambientDetails) {...}
+ * public void onExitAmbient(Bundle ambientDetails) {...}
+ * }
+ * }</pre>
+ */
+ public interface AmbientCallbackProvider {
+ /**
+ * @return the {@link AmbientCallback} to be used by this class to communicate with the
+ * entity interested in ambient events.
+ */
+ AmbientCallback getAmbientCallback();
+ }
+
+ /**
+ * Callback to receive ambient mode state changes. It must be used by all users of AmbientMode.
+ */
+ public abstract static class AmbientCallback {
+ /**
+ * Called when an activity is entering ambient mode. This event is sent while an activity is
+ * running (after onResume, before onPause). All drawing should complete by the conclusion
+ * of this method. Note that {@code invalidate()} calls will be executed before resuming
+ * lower-power mode.
+ * <p>
+ * <p><em>Derived classes must call through to the super class's implementation of this
+ * method. If they do not, an exception will be thrown.</em>
+ *
+ * @param ambientDetails bundle containing information about the display being used.
+ * It includes information about low-bit color and burn-in protection.
+ */
+ public void onEnterAmbient(Bundle ambientDetails) {}
+
+ /**
+ * Called when the system is updating the display for ambient mode. Activities may use this
+ * opportunity to update or invalidate views.
+ */
+ public void onUpdateAmbient() {};
+
+ /**
+ * Called when an activity should exit ambient mode. This event is sent while an activity is
+ * running (after onResume, before onPause).
+ * <p>
+ * <p><em>Derived classes must call through to the super class's implementation of this
+ * method. If they do not, an exception will be thrown.</em>
+ */
+ public void onExitAmbient() {};
+ }
+
+ private final AmbientDelegate.AmbientCallback mCallback =
+ new AmbientDelegate.AmbientCallback() {
+ @Override
+ public void onEnterAmbient(Bundle ambientDetails) {
+ mSuppliedCallback.onEnterAmbient(ambientDetails);
+ }
+
+ @Override
+ public void onExitAmbient() {
+ mSuppliedCallback.onExitAmbient();
+ }
+
+ @Override
+ public void onUpdateAmbient() {
+ mSuppliedCallback.onUpdateAmbient();
+ }
+ };
+ private AmbientDelegate mDelegate;
+ private AmbientCallback mSuppliedCallback;
+ private AmbientController mController;
+
+ /**
+ * Constructor
+ */
+ public AmbientMode() {
+ mController = new AmbientController();
+ }
+
+ @Override
+ @CallSuper
+ public void onAttach(Context context) {
+ super.onAttach(context);
+ mDelegate = new AmbientDelegate(getActivity(), new WearableControllerProvider(), mCallback);
+
+ if (context instanceof AmbientCallbackProvider) {
+ mSuppliedCallback = ((AmbientCallbackProvider) context).getAmbientCallback();
+ } else {
+ throw new IllegalArgumentException(
+ "fragment should attach to an activity that implements AmbientCallback");
+ }
+ }
+
+ @Override
+ @CallSuper
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ mDelegate.onCreate();
+ mDelegate.setAmbientEnabled();
+ }
+
+ @Override
+ @CallSuper
+ public void onResume() {
+ super.onResume();
+ mDelegate.onResume();
+ }
+
+ @Override
+ @CallSuper
+ public void onPause() {
+ mDelegate.onPause();
+ super.onPause();
+ }
+
+ @Override
+ @CallSuper
+ public void onStop() {
+ mDelegate.onStop();
+ super.onStop();
+ }
+
+ @Override
+ @CallSuper
+ public void onDestroy() {
+ mDelegate.onDestroy();
+ super.onDestroy();
+ }
+
+ @Override
+ @CallSuper
+ public void onDetach() {
+ mDelegate = null;
+ super.onDetach();
+ }
+
+ /**
+ * Attach ambient support to the given activity.
+ *
+ * @param activity the activity to attach ambient support to. This activity has to also
+ * implement {@link AmbientCallbackProvider}
+ * @return the associated {@link AmbientController} which can be used to query the state of
+ * ambient mode and toggle simple settings related to it.
+ */
+ public static <T extends Activity & AmbientCallbackProvider> AmbientController
+ attachAmbientSupport(T activity) {
+ FragmentManager fragmentManager = activity.getFragmentManager();
+ AmbientMode ambientFragment = (AmbientMode) fragmentManager.findFragmentByTag(FRAGMENT_TAG);
+ if (ambientFragment == null) {
+ AmbientMode fragment = new AmbientMode();
+ fragmentManager
+ .beginTransaction()
+ .add(fragment, FRAGMENT_TAG)
+ .commit();
+ ambientFragment = fragment;
+ }
+ return ambientFragment.mController;
+ }
+
+ @Override
+ public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) {
+ if (mDelegate != null) {
+ mDelegate.dump(prefix, fd, writer, args);
+ }
+ }
+
+ @VisibleForTesting
+ void setAmbientDelegate(AmbientDelegate delegate) {
+ mDelegate = delegate;
+ }
+
+ /**
+ * A class for interacting with the ambient mode on a wearable device. This class can be used to
+ * query the current state of ambient mode and to enable or disable certain settings.
+ * An instance of this class is returned to the user when they attach their {@link Activity}
+ * to {@link AmbientMode}.
+ */
+ public final class AmbientController {
+ private static final String TAG = "AmbientController";
+
+ // Do not initialize outside of this class.
+ AmbientController() {}
+
+ /**
+ * @return {@code true} if the activity is currently in ambient.
+ */
+ public boolean isAmbient() {
+ return mDelegate == null ? false : mDelegate.isAmbient();
+ }
+ }
+}
diff --git a/wear/src/main/java/android/support/wear/ambient/SharedLibraryVersion.java b/wear/src/main/java/android/support/wear/ambient/SharedLibraryVersion.java
new file mode 100644
index 0000000..cd90a3b
--- /dev/null
+++ b/wear/src/main/java/android/support/wear/ambient/SharedLibraryVersion.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.support.wear.ambient;
+
+import android.os.Build;
+import android.support.annotation.RestrictTo;
+import android.support.annotation.VisibleForTesting;
+
+import com.google.android.wearable.WearableSharedLib;
+
+/**
+ * Internal class which can be used to determine the version of the wearable shared library that is
+ * available on the current device.
+ *
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+final class SharedLibraryVersion {
+
+ private SharedLibraryVersion() {
+ }
+
+ /**
+ * Returns the version of the wearable shared library available on the current device.
+ * <p>
+ * <p>Version 1 was introduced on 2016-09-26, so any previous shared library will return 0. In
+ * those cases, it may be necessary to check {@code Build.VERSION.SDK_INT}.
+ *
+ * @throws IllegalStateException if the Wearable Shared Library is not present, which means that
+ * the {@code <uses-library>} tag is missing.
+ */
+ public static int version() {
+ verifySharedLibraryPresent();
+ return VersionHolder.VERSION;
+ }
+
+ /**
+ * Throws {@link IllegalStateException} if the Wearable Shared Library is not present and API
+ * level is at least LMP MR1.
+ * <p>
+ * <p>This validates that the developer hasn't forgotten to include a {@code <uses-library>} tag
+ * in their manifest. The method should be used in combination with API level checks for
+ * features added before {@link #version() version} 1.
+ */
+ public static void verifySharedLibraryPresent() {
+ if (!PresenceHolder.PRESENT) {
+ throw new IllegalStateException("Could not find wearable shared library classes. "
+ + "Please add <uses-library android:name=\"com.google.android.wearable\" "
+ + "android:required=\"false\" /> to the application manifest");
+ }
+ }
+
+ // Lazy initialization holder class (see Effective Java item 71)
+ @VisibleForTesting
+ static final class VersionHolder {
+ static final int VERSION = getSharedLibVersion(Build.VERSION.SDK_INT);
+
+ @VisibleForTesting
+ static int getSharedLibVersion(int sdkInt) {
+ if (sdkInt < Build.VERSION_CODES.N_MR1) {
+ // WearableSharedLib was introduced in N MR1 (Wear FDP 4)
+ return 0;
+ }
+ return WearableSharedLib.version();
+ }
+ }
+
+ // Lazy initialization holder class (see Effective Java item 71)
+ @VisibleForTesting
+ static final class PresenceHolder {
+ static final boolean PRESENT = isSharedLibPresent(Build.VERSION.SDK_INT);
+
+ @VisibleForTesting
+ static boolean isSharedLibPresent(int sdkInt) {
+ try {
+ // A class which has been available on the shared library from the first version.
+ Class.forName("com.google.android.wearable.compat.WearableActivityController");
+ } catch (ClassNotFoundException e) {
+ return false;
+ }
+ return true;
+ }
+ }
+}
diff --git a/wear/src/main/java/android/support/wear/ambient/WearableControllerProvider.java b/wear/src/main/java/android/support/wear/ambient/WearableControllerProvider.java
new file mode 100644
index 0000000..1682dc0
--- /dev/null
+++ b/wear/src/main/java/android/support/wear/ambient/WearableControllerProvider.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.support.wear.ambient;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.support.annotation.RestrictTo;
+
+import com.google.android.wearable.compat.WearableActivityController;
+
+import java.lang.reflect.Method;
+
+/**
+ * Provides a {@link WearableActivityController} for ambient mode control.
+ *
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public class WearableControllerProvider {
+
+ private static final String TAG = "WearableControllerProvider";
+
+ private static volatile boolean sAmbientCallbacksVerifiedPresent;
+
+ /**
+ * Retrieves a {@link WearableActivityController} to use for ambient mode.
+ *
+ * @param activity The {@link Activity} to be associated with the Controller.
+ * @param callback The {@link AmbientDelegate.AmbientCallback} for the Controller.
+ * @return the platform-appropriate version of the {@link WearableActivityController}.
+ */
+ public WearableActivityController getWearableController(Activity activity,
+ final AmbientDelegate.AmbientCallback callback) {
+ SharedLibraryVersion.verifySharedLibraryPresent();
+
+ // The AmbientCallback is an abstract class instead of an interface.
+ WearableActivityController.AmbientCallback callbackBridge =
+ new WearableActivityController.AmbientCallback() {
+ @Override
+ public void onEnterAmbient(Bundle ambientDetails) {
+ callback.onEnterAmbient(ambientDetails);
+ }
+
+ @Override
+ public void onUpdateAmbient() {
+ callback.onUpdateAmbient();
+ }
+
+ @Override
+ public void onExitAmbient() {
+ callback.onExitAmbient();
+ }
+ };
+
+ verifyAmbientCallbacksPresent();
+
+ return new WearableActivityController(TAG, activity, callbackBridge);
+ }
+
+ private static void verifyAmbientCallbacksPresent() {
+ if (sAmbientCallbacksVerifiedPresent) {
+ return;
+ }
+ try {
+ Method method =
+ WearableActivityController.AmbientCallback.class.getDeclaredMethod(
+ "onEnterAmbient", Bundle.class);
+ // Proguard is sneaky -- it will actually rewrite strings it finds in addition to
+ // function names. Therefore add a "." prefix to the method name check to ensure the
+ // function was not renamed by proguard.
+ if (!(".onEnterAmbient".equals("." + method.getName()))) {
+ throw new NoSuchMethodException();
+ }
+ } catch (NoSuchMethodException e) {
+ throw new IllegalStateException(
+ "Could not find a required method for "
+ + "ambient support, likely due to proguard optimization. Please add "
+ + "com.google.android.wearable:wearable jar to the list of library jars"
+ + " for your project");
+ }
+ sAmbientCallbacksVerifiedPresent = true;
+ }
+}
diff --git a/wear/src/android/support/wear/internal/widget/ResourcesUtil.java b/wear/src/main/java/android/support/wear/internal/widget/ResourcesUtil.java
similarity index 100%
rename from wear/src/android/support/wear/internal/widget/ResourcesUtil.java
rename to wear/src/main/java/android/support/wear/internal/widget/ResourcesUtil.java
diff --git a/wear/src/android/support/wear/internal/widget/drawer/MultiPagePresenter.java b/wear/src/main/java/android/support/wear/internal/widget/drawer/MultiPagePresenter.java
similarity index 100%
rename from wear/src/android/support/wear/internal/widget/drawer/MultiPagePresenter.java
rename to wear/src/main/java/android/support/wear/internal/widget/drawer/MultiPagePresenter.java
diff --git a/wear/src/android/support/wear/internal/widget/drawer/MultiPageUi.java b/wear/src/main/java/android/support/wear/internal/widget/drawer/MultiPageUi.java
similarity index 100%
rename from wear/src/android/support/wear/internal/widget/drawer/MultiPageUi.java
rename to wear/src/main/java/android/support/wear/internal/widget/drawer/MultiPageUi.java
diff --git a/wear/src/android/support/wear/internal/widget/drawer/SinglePagePresenter.java b/wear/src/main/java/android/support/wear/internal/widget/drawer/SinglePagePresenter.java
similarity index 100%
rename from wear/src/android/support/wear/internal/widget/drawer/SinglePagePresenter.java
rename to wear/src/main/java/android/support/wear/internal/widget/drawer/SinglePagePresenter.java
diff --git a/wear/src/android/support/wear/internal/widget/drawer/SinglePageUi.java b/wear/src/main/java/android/support/wear/internal/widget/drawer/SinglePageUi.java
similarity index 100%
rename from wear/src/android/support/wear/internal/widget/drawer/SinglePageUi.java
rename to wear/src/main/java/android/support/wear/internal/widget/drawer/SinglePageUi.java
diff --git a/wear/src/android/support/wear/internal/widget/drawer/WearableNavigationDrawerPresenter.java b/wear/src/main/java/android/support/wear/internal/widget/drawer/WearableNavigationDrawerPresenter.java
similarity index 100%
rename from wear/src/android/support/wear/internal/widget/drawer/WearableNavigationDrawerPresenter.java
rename to wear/src/main/java/android/support/wear/internal/widget/drawer/WearableNavigationDrawerPresenter.java
diff --git a/wear/src/android/support/wear/internal/widget/drawer/package-info.java b/wear/src/main/java/android/support/wear/internal/widget/drawer/package-info.java
similarity index 100%
rename from wear/src/android/support/wear/internal/widget/drawer/package-info.java
rename to wear/src/main/java/android/support/wear/internal/widget/drawer/package-info.java
diff --git a/wear/src/android/support/wear/utils/MetadataConstants.java b/wear/src/main/java/android/support/wear/utils/MetadataConstants.java
similarity index 100%
rename from wear/src/android/support/wear/utils/MetadataConstants.java
rename to wear/src/main/java/android/support/wear/utils/MetadataConstants.java
diff --git a/wear/src/android/support/wear/widget/BezierSCurveInterpolator.java b/wear/src/main/java/android/support/wear/widget/BezierSCurveInterpolator.java
similarity index 100%
rename from wear/src/android/support/wear/widget/BezierSCurveInterpolator.java
rename to wear/src/main/java/android/support/wear/widget/BezierSCurveInterpolator.java
diff --git a/wear/src/android/support/wear/widget/BoxInsetLayout.java b/wear/src/main/java/android/support/wear/widget/BoxInsetLayout.java
similarity index 100%
rename from wear/src/android/support/wear/widget/BoxInsetLayout.java
rename to wear/src/main/java/android/support/wear/widget/BoxInsetLayout.java
diff --git a/wear/src/android/support/wear/widget/CircledImageView.java b/wear/src/main/java/android/support/wear/widget/CircledImageView.java
similarity index 100%
rename from wear/src/android/support/wear/widget/CircledImageView.java
rename to wear/src/main/java/android/support/wear/widget/CircledImageView.java
diff --git a/wear/src/android/support/wear/widget/CircularProgressLayout.java b/wear/src/main/java/android/support/wear/widget/CircularProgressLayout.java
similarity index 100%
rename from wear/src/android/support/wear/widget/CircularProgressLayout.java
rename to wear/src/main/java/android/support/wear/widget/CircularProgressLayout.java
diff --git a/wear/src/android/support/wear/widget/CircularProgressLayoutController.java b/wear/src/main/java/android/support/wear/widget/CircularProgressLayoutController.java
similarity index 100%
rename from wear/src/android/support/wear/widget/CircularProgressLayoutController.java
rename to wear/src/main/java/android/support/wear/widget/CircularProgressLayoutController.java
diff --git a/wear/src/android/support/wear/widget/CurvingLayoutCallback.java b/wear/src/main/java/android/support/wear/widget/CurvingLayoutCallback.java
similarity index 100%
rename from wear/src/android/support/wear/widget/CurvingLayoutCallback.java
rename to wear/src/main/java/android/support/wear/widget/CurvingLayoutCallback.java
diff --git a/wear/src/android/support/wear/widget/ProgressDrawable.java b/wear/src/main/java/android/support/wear/widget/ProgressDrawable.java
similarity index 100%
rename from wear/src/android/support/wear/widget/ProgressDrawable.java
rename to wear/src/main/java/android/support/wear/widget/ProgressDrawable.java
diff --git a/wear/src/android/support/wear/widget/RoundedDrawable.java b/wear/src/main/java/android/support/wear/widget/RoundedDrawable.java
similarity index 100%
rename from wear/src/android/support/wear/widget/RoundedDrawable.java
rename to wear/src/main/java/android/support/wear/widget/RoundedDrawable.java
diff --git a/wear/src/android/support/wear/widget/ScrollManager.java b/wear/src/main/java/android/support/wear/widget/ScrollManager.java
similarity index 100%
rename from wear/src/android/support/wear/widget/ScrollManager.java
rename to wear/src/main/java/android/support/wear/widget/ScrollManager.java
diff --git a/wear/src/android/support/wear/widget/SimpleAnimatorListener.java b/wear/src/main/java/android/support/wear/widget/SimpleAnimatorListener.java
similarity index 100%
rename from wear/src/android/support/wear/widget/SimpleAnimatorListener.java
rename to wear/src/main/java/android/support/wear/widget/SimpleAnimatorListener.java
diff --git a/wear/src/android/support/wear/widget/SwipeDismissFrameLayout.java b/wear/src/main/java/android/support/wear/widget/SwipeDismissFrameLayout.java
similarity index 100%
rename from wear/src/android/support/wear/widget/SwipeDismissFrameLayout.java
rename to wear/src/main/java/android/support/wear/widget/SwipeDismissFrameLayout.java
diff --git a/wear/src/android/support/wear/widget/SwipeDismissLayout.java b/wear/src/main/java/android/support/wear/widget/SwipeDismissLayout.java
similarity index 100%
rename from wear/src/android/support/wear/widget/SwipeDismissLayout.java
rename to wear/src/main/java/android/support/wear/widget/SwipeDismissLayout.java
diff --git a/wear/src/android/support/wear/widget/WearableLinearLayoutManager.java b/wear/src/main/java/android/support/wear/widget/WearableLinearLayoutManager.java
similarity index 100%
rename from wear/src/android/support/wear/widget/WearableLinearLayoutManager.java
rename to wear/src/main/java/android/support/wear/widget/WearableLinearLayoutManager.java
diff --git a/wear/src/android/support/wear/widget/WearableRecyclerView.java b/wear/src/main/java/android/support/wear/widget/WearableRecyclerView.java
similarity index 100%
rename from wear/src/android/support/wear/widget/WearableRecyclerView.java
rename to wear/src/main/java/android/support/wear/widget/WearableRecyclerView.java
diff --git a/wear/src/android/support/wear/widget/drawer/AbsListViewFlingWatcher.java b/wear/src/main/java/android/support/wear/widget/drawer/AbsListViewFlingWatcher.java
similarity index 100%
rename from wear/src/android/support/wear/widget/drawer/AbsListViewFlingWatcher.java
rename to wear/src/main/java/android/support/wear/widget/drawer/AbsListViewFlingWatcher.java
diff --git a/wear/src/android/support/wear/widget/drawer/FlingWatcherFactory.java b/wear/src/main/java/android/support/wear/widget/drawer/FlingWatcherFactory.java
similarity index 100%
rename from wear/src/android/support/wear/widget/drawer/FlingWatcherFactory.java
rename to wear/src/main/java/android/support/wear/widget/drawer/FlingWatcherFactory.java
diff --git a/wear/src/android/support/wear/widget/drawer/NestedScrollViewFlingWatcher.java b/wear/src/main/java/android/support/wear/widget/drawer/NestedScrollViewFlingWatcher.java
similarity index 100%
rename from wear/src/android/support/wear/widget/drawer/NestedScrollViewFlingWatcher.java
rename to wear/src/main/java/android/support/wear/widget/drawer/NestedScrollViewFlingWatcher.java
diff --git a/wear/src/android/support/wear/widget/drawer/PageIndicatorView.java b/wear/src/main/java/android/support/wear/widget/drawer/PageIndicatorView.java
similarity index 100%
rename from wear/src/android/support/wear/widget/drawer/PageIndicatorView.java
rename to wear/src/main/java/android/support/wear/widget/drawer/PageIndicatorView.java
diff --git a/wear/src/android/support/wear/widget/drawer/RecyclerViewFlingWatcher.java b/wear/src/main/java/android/support/wear/widget/drawer/RecyclerViewFlingWatcher.java
similarity index 100%
rename from wear/src/android/support/wear/widget/drawer/RecyclerViewFlingWatcher.java
rename to wear/src/main/java/android/support/wear/widget/drawer/RecyclerViewFlingWatcher.java
diff --git a/wear/src/android/support/wear/widget/drawer/ScrollViewFlingWatcher.java b/wear/src/main/java/android/support/wear/widget/drawer/ScrollViewFlingWatcher.java
similarity index 100%
rename from wear/src/android/support/wear/widget/drawer/ScrollViewFlingWatcher.java
rename to wear/src/main/java/android/support/wear/widget/drawer/ScrollViewFlingWatcher.java
diff --git a/wear/src/android/support/wear/widget/drawer/WearableActionDrawerMenu.java b/wear/src/main/java/android/support/wear/widget/drawer/WearableActionDrawerMenu.java
similarity index 100%
rename from wear/src/android/support/wear/widget/drawer/WearableActionDrawerMenu.java
rename to wear/src/main/java/android/support/wear/widget/drawer/WearableActionDrawerMenu.java
diff --git a/wear/src/android/support/wear/widget/drawer/WearableActionDrawerView.java b/wear/src/main/java/android/support/wear/widget/drawer/WearableActionDrawerView.java
similarity index 100%
rename from wear/src/android/support/wear/widget/drawer/WearableActionDrawerView.java
rename to wear/src/main/java/android/support/wear/widget/drawer/WearableActionDrawerView.java
diff --git a/wear/src/android/support/wear/widget/drawer/WearableDrawerController.java b/wear/src/main/java/android/support/wear/widget/drawer/WearableDrawerController.java
similarity index 100%
rename from wear/src/android/support/wear/widget/drawer/WearableDrawerController.java
rename to wear/src/main/java/android/support/wear/widget/drawer/WearableDrawerController.java
diff --git a/wear/src/android/support/wear/widget/drawer/WearableDrawerLayout.java b/wear/src/main/java/android/support/wear/widget/drawer/WearableDrawerLayout.java
similarity index 100%
rename from wear/src/android/support/wear/widget/drawer/WearableDrawerLayout.java
rename to wear/src/main/java/android/support/wear/widget/drawer/WearableDrawerLayout.java
diff --git a/wear/src/android/support/wear/widget/drawer/WearableDrawerView.java b/wear/src/main/java/android/support/wear/widget/drawer/WearableDrawerView.java
similarity index 100%
rename from wear/src/android/support/wear/widget/drawer/WearableDrawerView.java
rename to wear/src/main/java/android/support/wear/widget/drawer/WearableDrawerView.java
diff --git a/wear/src/android/support/wear/widget/drawer/WearableNavigationDrawerView.java b/wear/src/main/java/android/support/wear/widget/drawer/WearableNavigationDrawerView.java
similarity index 100%
rename from wear/src/android/support/wear/widget/drawer/WearableNavigationDrawerView.java
rename to wear/src/main/java/android/support/wear/widget/drawer/WearableNavigationDrawerView.java
diff --git a/wear/tests/AndroidManifest.xml b/wear/tests/AndroidManifest.xml
index 834e067..ce78477 100644
--- a/wear/tests/AndroidManifest.xml
+++ b/wear/tests/AndroidManifest.xml
@@ -48,6 +48,13 @@
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
+
+ <activity android:name="android.support.wear.ambient.AmbientModeTestActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN"/>
+ <category android:name="android.intent.category.LAUNCHER"/>
+ </intent-filter>
+ </activity>
<!-- Test app is iOS compatible. -->
<meta-data
android:name="com.google.android.wearable.standalone"
diff --git a/wear/tests/src/android/support/wear/ambient/AmbientDelegateTest.java b/wear/tests/src/android/support/wear/ambient/AmbientDelegateTest.java
new file mode 100644
index 0000000..32f9bb6
--- /dev/null
+++ b/wear/tests/src/android/support/wear/ambient/AmbientDelegateTest.java
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.support.wear.ambient;
+
+import static junit.framework.Assert.assertFalse;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.when;
+
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+import android.support.v4.app.FragmentActivity;
+
+import com.google.android.wearable.compat.WearableActivityController;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+
+/**
+ * Tests for {@link AmbientDelegate}.
+ */
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class AmbientDelegateTest {
+
+ @Mock
+ AmbientDelegate.AmbientCallback mMockAmbientCallback;
+ @Mock
+ WearableControllerProvider mMockWearableControllerProvider;
+ @Mock
+ WearableActivityController mMockWearableController;
+ @Mock
+ FragmentActivity mMockActivity;
+
+ private AmbientDelegate mAmbientDelegateUnderTest;
+
+ @Before
+ public void setUp() {
+ mMockAmbientCallback = mock(AmbientDelegate.AmbientCallback.class);
+ mMockWearableControllerProvider = mock(WearableControllerProvider.class);
+ mMockWearableController = mock(WearableActivityController.class);
+ mMockActivity = mock(FragmentActivity.class);
+ when(mMockWearableControllerProvider
+ .getWearableController(mMockActivity, mMockAmbientCallback))
+ .thenReturn(mMockWearableController);
+ }
+
+ @Test
+ public void testNullActivity() {
+ mAmbientDelegateUnderTest = new AmbientDelegate(null,
+ mMockWearableControllerProvider, mMockAmbientCallback);
+ verifyZeroInteractions(mMockWearableControllerProvider);
+
+ assertFalse(mAmbientDelegateUnderTest.isAmbient());
+
+ }
+
+ @Test
+ public void testActivityPresent() {
+ mAmbientDelegateUnderTest = new AmbientDelegate(mMockActivity,
+ mMockWearableControllerProvider, mMockAmbientCallback);
+
+ mAmbientDelegateUnderTest.onCreate();
+ verify(mMockWearableController).onCreate();
+
+ mAmbientDelegateUnderTest.onResume();
+ verify(mMockWearableController).onResume();
+
+ mAmbientDelegateUnderTest.onPause();
+ verify(mMockWearableController).onPause();
+
+ mAmbientDelegateUnderTest.onStop();
+ verify(mMockWearableController).onStop();
+
+ mAmbientDelegateUnderTest.onDestroy();
+ verify(mMockWearableController).onDestroy();
+ }
+}
diff --git a/wear/tests/src/android/support/wear/ambient/AmbientModeTest.java b/wear/tests/src/android/support/wear/ambient/AmbientModeTest.java
new file mode 100644
index 0000000..301c513
--- /dev/null
+++ b/wear/tests/src/android/support/wear/ambient/AmbientModeTest.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.wear.ambient;
+
+import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertTrue;
+
+import android.support.test.filters.MediumTest;
+import android.support.test.rule.ActivityTestRule;
+import android.support.test.runner.AndroidJUnit4;
+import android.support.wear.widget.util.WakeLockRule;
+
+import com.google.android.wearable.compat.WearableActivityController;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@MediumTest
+@RunWith(AndroidJUnit4.class)
+public class AmbientModeTest {
+ @Rule
+ public final WakeLockRule mWakeLock = new WakeLockRule();
+
+ @Rule
+ public final ActivityTestRule<AmbientModeTestActivity> mActivityRule = new ActivityTestRule<>(
+ AmbientModeTestActivity.class);
+
+ @Test
+ public void testEnterAmbientCallback() throws Throwable {
+ AmbientModeTestActivity activity = mActivityRule.getActivity();
+
+ WearableActivityController.getLastInstance().enterAmbient();
+ assertTrue(activity.mEnterAmbientCalled);
+ assertFalse(activity.mUpdateAmbientCalled);
+ assertFalse(activity.mExitAmbientCalled);
+ }
+
+ @Test
+ public void testUpdateAmbientCallback() throws Throwable {
+ AmbientModeTestActivity activity = mActivityRule.getActivity();
+
+ WearableActivityController.getLastInstance().updateAmbient();
+ assertFalse(activity.mEnterAmbientCalled);
+ assertTrue(activity.mUpdateAmbientCalled);
+ assertFalse(activity.mExitAmbientCalled);
+ }
+
+ @Test
+ public void testExitAmbientCallback() throws Throwable {
+ AmbientModeTestActivity activity = mActivityRule.getActivity();
+
+ WearableActivityController.getLastInstance().exitAmbient();
+ assertFalse(activity.mEnterAmbientCalled);
+ assertFalse(activity.mUpdateAmbientCalled);
+ assertTrue(activity.mExitAmbientCalled);
+ }
+
+ @Test
+ public void testIsAmbientEnabled() {
+ assertTrue(WearableActivityController.getLastInstance().isAmbientEnabled());
+ }
+
+ @Test
+ public void testCallsControllerIsAmbient() {
+ AmbientModeTestActivity activity = mActivityRule.getActivity();
+
+ WearableActivityController.getLastInstance().setAmbient(true);
+ assertTrue(activity.getAmbientController().isAmbient());
+
+ WearableActivityController.getLastInstance().setAmbient(false);
+ assertFalse(activity.getAmbientController().isAmbient());
+ }
+}
diff --git a/wear/tests/src/android/support/wear/ambient/AmbientModeTestActivity.java b/wear/tests/src/android/support/wear/ambient/AmbientModeTestActivity.java
new file mode 100644
index 0000000..26155d8
--- /dev/null
+++ b/wear/tests/src/android/support/wear/ambient/AmbientModeTestActivity.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.support.wear.ambient;
+
+import android.os.Bundle;
+import android.support.v4.app.FragmentActivity;
+
+public class AmbientModeTestActivity extends FragmentActivity
+ implements AmbientMode.AmbientCallbackProvider {
+ AmbientMode.AmbientController mAmbientController;
+
+ boolean mEnterAmbientCalled;
+ boolean mUpdateAmbientCalled;
+ boolean mExitAmbientCalled;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ mAmbientController = AmbientMode.attachAmbientSupport(this);
+ }
+
+ @Override
+ public AmbientMode.AmbientCallback getAmbientCallback() {
+ return new MyAmbientCallback();
+ }
+
+ private class MyAmbientCallback extends AmbientMode.AmbientCallback {
+
+ @Override
+ public void onEnterAmbient(Bundle ambientDetails) {
+ mEnterAmbientCalled = true;
+ }
+
+ @Override
+ public void onUpdateAmbient() {
+ mUpdateAmbientCalled = true;
+ }
+
+ @Override
+ public void onExitAmbient() {
+ mExitAmbientCalled = true;
+ }
+ }
+
+ public AmbientMode.AmbientController getAmbientController() {
+ return mAmbientController;
+ }
+
+}
diff --git a/wear/tests/src/com/google/android/wearable/compat/WearableActivityController.java b/wear/tests/src/com/google/android/wearable/compat/WearableActivityController.java
new file mode 100644
index 0000000..7823f23
--- /dev/null
+++ b/wear/tests/src/com/google/android/wearable/compat/WearableActivityController.java
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.android.wearable.compat;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+/**
+ * Mock version of {@link WearableActivityController}. During instrumentation testing, the tests
+ * would end up using this instead of the version implemented on device.
+ */
+public class WearableActivityController {
+
+ private static WearableActivityController sLastInstance;
+
+ public static WearableActivityController getLastInstance() {
+ return sLastInstance;
+ }
+
+ private AmbientCallback mCallback;
+ private boolean mAmbientEnabled = false;
+ private boolean mAutoResumeEnabled = false;
+ private boolean mAmbient = false;
+
+ public WearableActivityController(String tag, Activity activity, AmbientCallback callback) {
+ sLastInstance = this;
+ mCallback = callback;
+ }
+
+ // Methods required by the stub but not currently used in tests.
+ public void onCreate() {}
+ public void onResume() {}
+ public void onPause() {}
+ public void onStop() {}
+ public void onDestroy() {}
+
+ public void enterAmbient() {
+ mCallback.onEnterAmbient(null);
+ }
+
+ public void exitAmbient() {
+ mCallback.onExitAmbient();
+ }
+
+ public void updateAmbient() {
+ mCallback.onUpdateAmbient();
+ }
+
+ public void setAmbientEnabled() {
+ mAmbientEnabled = true;
+ }
+
+ public boolean isAmbientEnabled() {
+ return mAmbientEnabled;
+ }
+
+ public void setAutoResumeEnabled(boolean enabled) {
+ mAutoResumeEnabled = enabled;
+ }
+
+ public boolean isAutoResumeEnabled() {
+ return mAutoResumeEnabled;
+ }
+
+ public final boolean isAmbient() {
+ return mAmbient;
+ }
+
+ public void setAmbient(boolean ambient) {
+ mAmbient = ambient;
+ }
+
+ /** Stub version of {@link WearableActivityController.AmbientCallback}. */
+ public static class AmbientCallback {
+ public void onEnterAmbient(Bundle ambientDetails) {}
+
+ public void onExitAmbient() {}
+
+ public void onUpdateAmbient() {}
+ }
+}
diff --git a/wear/wear_stubs/LICENSE b/wear/wear_stubs/LICENSE
new file mode 100644
index 0000000..261eeb9
--- /dev/null
+++ b/wear/wear_stubs/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
diff --git a/wear/wear_stubs/README.android b/wear/wear_stubs/README.android
new file mode 100644
index 0000000..5fdff39
--- /dev/null
+++ b/wear/wear_stubs/README.android
@@ -0,0 +1,10 @@
+# Wearable support system stubs from http://ab/4131273
+This library contains system stubs generated for the
+com.google.android.wearable.jar shared library. Classes in the 1st/3rd party
+accessible wearable support library are able to access these apis.
+
+See `vendor/google_clockwork/libs/wearable` in Android Git.
+
+Imports to this directory must always be done from the Android Build server.
+To test with local changes made in Android Git see the instructions at
+http://go/clockwork-dev/device-builds.
diff --git a/wear/wear_stubs/api/1.txt b/wear/wear_stubs/api/1.txt
new file mode 100644
index 0000000..af53c8e
--- /dev/null
+++ b/wear/wear_stubs/api/1.txt
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.android.wearable {
+
+ public final class WearableSharedLib {
+ method public static int version();
+ }
+
+}
+
+package com.google.android.wearable.compat {
+
+ public class WearableActivityController {
+ ctor public WearableActivityController(java.lang.String, android.app.Activity, com.google.android.wearable.compat.WearableActivityController.AmbientCallback);
+ method public void dump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
+ method public final boolean isAmbient();
+ method public void onCreate();
+ method public void onDestroy();
+ method public void onPause();
+ method public void onResume();
+ method public void onStop();
+ method public final void setAmbientEnabled();
+ method public final void setAutoResumeEnabled(boolean);
+ field public static final java.lang.String EXTRA_BURN_IN_PROTECTION = "com.google.android.wearable.compat.extra.BURN_IN_PROTECTION";
+ field public static final java.lang.String EXTRA_LOWBIT_AMBIENT = "com.google.android.wearable.compat.extra.LOWBIT_AMBIENT";
+ }
+
+ public static abstract class WearableActivityController.AmbientCallback {
+ ctor public WearableActivityController.AmbientCallback();
+ method public void onEnterAmbient(android.os.Bundle);
+ method public void onExitAmbient();
+ method public void onUpdateAmbient();
+ }
+
+}
+
+package com.google.android.wearable.input {
+
+ public class RotaryEncoderHelper {
+ method public static float getRotaryAxisValue(android.view.MotionEvent);
+ method public static float getScaledScrollFactor(android.content.Context);
+ method public static boolean isFromRotaryEncoder(android.view.MotionEvent);
+ }
+
+ public final class WearableInputDevice {
+ method public static final int[] getAvailableButtonKeyCodes(android.content.Context);
+ method public static final android.os.Bundle getButtonInfo(android.content.Context, int);
+ field public static final java.lang.String X_KEY = "x_key";
+ field public static final java.lang.String Y_KEY = "y_key";
+ }
+
+}
+
diff --git a/wear/wear_stubs/api/2.txt b/wear/wear_stubs/api/2.txt
new file mode 100644
index 0000000..2850f24
--- /dev/null
+++ b/wear/wear_stubs/api/2.txt
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.android.wearable {
+
+ public final class WearableSharedLib {
+ method public static int version();
+ }
+
+}
+
+package com.google.android.wearable.compat {
+
+ public class WearableActivityController {
+ ctor public WearableActivityController(java.lang.String, android.app.Activity, com.google.android.wearable.compat.WearableActivityController.AmbientCallback);
+ method public void dump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
+ method public final boolean isAmbient();
+ method public void onCreate();
+ method public void onDestroy();
+ method public void onPause();
+ method public void onResume();
+ method public void onStop();
+ method public final void setAmbientEnabled();
+ method public final void setAutoResumeEnabled(boolean);
+ field public static final java.lang.String EXTRA_BURN_IN_PROTECTION = "com.google.android.wearable.compat.extra.BURN_IN_PROTECTION";
+ field public static final java.lang.String EXTRA_LOWBIT_AMBIENT = "com.google.android.wearable.compat.extra.LOWBIT_AMBIENT";
+ }
+
+ public static abstract class WearableActivityController.AmbientCallback {
+ ctor public WearableActivityController.AmbientCallback();
+ method public void onEnterAmbient(android.os.Bundle);
+ method public void onExitAmbient();
+ method public void onUpdateAmbient();
+ }
+
+}
+
+package com.google.android.wearable.display {
+
+ public final class WearableDisplayHelper {
+ method public static final android.graphics.RectF getObstruction();
+ }
+
+}
+
+package com.google.android.wearable.input {
+
+ public class RotaryEncoderHelper {
+ method public static float getRotaryAxisValue(android.view.MotionEvent);
+ method public static float getScaledScrollFactor(android.content.Context);
+ method public static boolean isFromRotaryEncoder(android.view.MotionEvent);
+ }
+
+ public final class WearableInputDevice {
+ method public static final int[] getAvailableButtonKeyCodes(android.content.Context);
+ method public static final android.os.Bundle getButtonInfo(android.content.Context, int);
+ field public static final java.lang.String X_KEY = "x_key";
+ field public static final java.lang.String Y_KEY = "y_key";
+ }
+
+}
+
diff --git a/wear/wear_stubs/api/current.txt b/wear/wear_stubs/api/current.txt
new file mode 100644
index 0000000..2850f24
--- /dev/null
+++ b/wear/wear_stubs/api/current.txt
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.android.wearable {
+
+ public final class WearableSharedLib {
+ method public static int version();
+ }
+
+}
+
+package com.google.android.wearable.compat {
+
+ public class WearableActivityController {
+ ctor public WearableActivityController(java.lang.String, android.app.Activity, com.google.android.wearable.compat.WearableActivityController.AmbientCallback);
+ method public void dump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
+ method public final boolean isAmbient();
+ method public void onCreate();
+ method public void onDestroy();
+ method public void onPause();
+ method public void onResume();
+ method public void onStop();
+ method public final void setAmbientEnabled();
+ method public final void setAutoResumeEnabled(boolean);
+ field public static final java.lang.String EXTRA_BURN_IN_PROTECTION = "com.google.android.wearable.compat.extra.BURN_IN_PROTECTION";
+ field public static final java.lang.String EXTRA_LOWBIT_AMBIENT = "com.google.android.wearable.compat.extra.LOWBIT_AMBIENT";
+ }
+
+ public static abstract class WearableActivityController.AmbientCallback {
+ ctor public WearableActivityController.AmbientCallback();
+ method public void onEnterAmbient(android.os.Bundle);
+ method public void onExitAmbient();
+ method public void onUpdateAmbient();
+ }
+
+}
+
+package com.google.android.wearable.display {
+
+ public final class WearableDisplayHelper {
+ method public static final android.graphics.RectF getObstruction();
+ }
+
+}
+
+package com.google.android.wearable.input {
+
+ public class RotaryEncoderHelper {
+ method public static float getRotaryAxisValue(android.view.MotionEvent);
+ method public static float getScaledScrollFactor(android.content.Context);
+ method public static boolean isFromRotaryEncoder(android.view.MotionEvent);
+ }
+
+ public final class WearableInputDevice {
+ method public static final int[] getAvailableButtonKeyCodes(android.content.Context);
+ method public static final android.os.Bundle getButtonInfo(android.content.Context, int);
+ field public static final java.lang.String X_KEY = "x_key";
+ field public static final java.lang.String Y_KEY = "y_key";
+ }
+
+}
+
diff --git a/wear/wear_stubs/com.google.android.wearable-stubs.jar b/wear/wear_stubs/com.google.android.wearable-stubs.jar
new file mode 100644
index 0000000..7465f7c
--- /dev/null
+++ b/wear/wear_stubs/com.google.android.wearable-stubs.jar
Binary files differ