Merge "Set a default value for actionBarPopupTheme." into lmp-mr1-ub-dev
diff --git a/build.gradle b/build.gradle
index 5d8a0cb..05cc092 100644
--- a/build.gradle
+++ b/build.gradle
@@ -5,12 +5,12 @@
maven { url '../../prebuilts/tools/common/m2/internal' }
}
dependencies {
- classpath 'com.android.tools.build:gradle:1.3.0-beta2'
+ classpath 'com.android.tools.build:gradle:1.3.0-beta4'
}
}
-ext.supportVersion = '22.2.0'
-ext.extraVersion = 14
+ext.supportVersion = '22.2.1'
+ext.extraVersion = 16
ext.supportRepoOut = ''
ext.buildToolsVersion = '22.1.0'
ext.buildNumber = Integer.toString(ext.extraVersion)
diff --git a/design/api/22.2.1.txt b/design/api/22.2.1.txt
new file mode 100644
index 0000000..85e2841
--- /dev/null
+++ b/design/api/22.2.1.txt
@@ -0,0 +1,349 @@
+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 public float getTargetElevation();
+ method public final int getTotalScrollRange();
+ method public void removeOnOffsetChangedListener(android.support.design.widget.AppBarLayout.OnOffsetChangedListener);
+ method public void setTargetElevation(float);
+ }
+
+ public static class AppBarLayout.Behavior extends android.support.design.widget.ViewOffsetBehavior {
+ 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 onNestedFling(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, android.view.View, float, float, boolean);
+ method public void onNestedPreScroll(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, android.view.View, int, int, int[]);
+ method public void onNestedScroll(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, android.view.View, 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);
+ method public void onStopNestedScroll(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, android.view.View);
+ }
+
+ protected static class AppBarLayout.Behavior.SavedState extends android.view.View.BaseSavedState {
+ ctor public AppBarLayout.Behavior.SavedState(android.os.Parcel);
+ 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
+ }
+
+ 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.ViewOffsetBehavior {
+ ctor public AppBarLayout.ScrollingViewBehavior();
+ ctor public AppBarLayout.ScrollingViewBehavior(android.content.Context, android.util.AttributeSet);
+ method public int getOverlayTop();
+ 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 onMeasureChild(android.support.design.widget.CoordinatorLayout, android.view.View, int, int, int, int);
+ method public void setOverlayTop(int);
+ }
+
+ 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 public android.graphics.drawable.Drawable getContentScrim();
+ method public android.graphics.drawable.Drawable getStatusBarScrim();
+ method public void setCollapsedTitleTextAppearance(int);
+ method public void setCollapsedTitleTextColor(int);
+ 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 setExpandedTitleTextAppearance(int);
+ 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);
+ }
+
+ 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 public java.util.List<android.view.View> getDependencies(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 setStatusBarBackground(android.graphics.drawable.Drawable);
+ method public void setStatusBarBackgroundColor(int);
+ method public void setStatusBarBackgroundResource(int);
+ }
+
+ public static abstract class CoordinatorLayout.Behavior {
+ 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 final int getScrimColor(android.support.design.widget.CoordinatorLayout, V);
+ method public final float getScrimOpacity(android.support.design.widget.CoordinatorLayout, V);
+ method public static java.lang.Object getTag(android.view.View);
+ method public boolean isDirty(android.support.design.widget.CoordinatorLayout, V);
+ 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 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 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 void onNestedPreScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, int, int, int[]);
+ method public void onNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, int, int, int, int);
+ method public void onNestedScrollAccepted(android.support.design.widget.CoordinatorLayout, V, android.view.View, android.view.View, int);
+ 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 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 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 gravity;
+ field public int keyline;
+ }
+
+ protected static class CoordinatorLayout.SavedState extends android.view.View.BaseSavedState {
+ ctor public CoordinatorLayout.SavedState(android.os.Parcel);
+ 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.widget.ImageView {
+ 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 void hide();
+ method public void setRippleColor(int);
+ method public void show();
+ }
+
+ public static class FloatingActionButton.Behavior extends android.support.design.widget.CoordinatorLayout.Behavior {
+ ctor public FloatingActionButton.Behavior();
+ method public boolean layoutDependsOn(android.support.design.widget.CoordinatorLayout, android.support.design.widget.FloatingActionButton, android.view.View);
+ method public boolean onDependentViewChanged(android.support.design.widget.CoordinatorLayout, android.support.design.widget.FloatingActionButton, android.view.View);
+ method public void onDependentViewRemoved(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);
+ }
+
+ 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 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 setItemBackground(android.graphics.drawable.Drawable);
+ method public void setItemBackgroundResource(int);
+ method public void setItemIconTintList(android.content.res.ColorStateList);
+ 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.view.View.BaseSavedState {
+ ctor public NavigationView.SavedState(android.os.Parcel);
+ 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 class Snackbar {
+ method public void dismiss();
+ method public int getDuration();
+ method public android.view.View getView();
+ 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 android.support.design.widget.Snackbar setDuration(int);
+ method public android.support.design.widget.Snackbar setText(java.lang.CharSequence);
+ method public android.support.design.widget.Snackbar setText(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 class SwipeDismissBehavior extends android.support.design.widget.CoordinatorLayout.Behavior {
+ ctor public SwipeDismissBehavior();
+ 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 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 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 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 removeTab(android.support.design.widget.TabLayout.Tab);
+ method public void removeTabAt(int);
+ method public void setOnTabSelectedListener(android.support.design.widget.TabLayout.OnTabSelectedListener);
+ method public void setScrollPosition(int, float, boolean);
+ 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 void setTabsFromPagerAdapter(android.support.v4.view.PagerAdapter);
+ method public void setupWithViewPager(android.support.v4.view.ViewPager);
+ 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.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 TextInputLayout extends android.widget.LinearLayout {
+ ctor public TextInputLayout(android.content.Context);
+ ctor public TextInputLayout(android.content.Context, android.util.AttributeSet);
+ method public android.widget.EditText getEditText();
+ method public void setError(java.lang.CharSequence);
+ method public void setErrorEnabled(boolean);
+ method public void setHint(java.lang.CharSequence);
+ }
+
+ class ViewOffsetBehavior 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 public boolean setLeftAndRightOffset(int);
+ method public boolean setTopAndBottomOffset(int);
+ }
+
+}
+
diff --git a/design/api/current.txt b/design/api/current.txt
index 5ac4b7c..b575589 100644
--- a/design/api/current.txt
+++ b/design/api/current.txt
@@ -7,12 +7,15 @@
method public 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 void setTargetElevation(float);
}
public static class AppBarLayout.Behavior extends android.support.design.widget.ViewOffsetBehavior {
ctor public AppBarLayout.Behavior();
ctor public AppBarLayout.Behavior(android.content.Context, android.util.AttributeSet);
+ method public boolean onInterceptTouchEvent(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, android.view.MotionEvent);
method public boolean onLayoutChild(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, int);
method public boolean onNestedFling(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, android.view.View, float, float, boolean);
method public void onNestedPreScroll(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, android.view.View, int, int, int[]);
@@ -21,6 +24,7 @@
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);
method public void onStopNestedScroll(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, android.view.View);
+ method public boolean onTouchEvent(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, android.view.MotionEvent);
}
protected static class AppBarLayout.Behavior.SavedState extends android.view.View.BaseSavedState {
@@ -65,14 +69,18 @@
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 public int getCollapsedTitleGravity();
method public android.graphics.drawable.Drawable getContentScrim();
+ method public int getExpandedTitleGravity();
method public android.graphics.drawable.Drawable getStatusBarScrim();
+ method public void setCollapsedTitleGravity(int);
method public void setCollapsedTitleTextAppearance(int);
method public void setCollapsedTitleTextColor(int);
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 setExpandedTitleTextAppearance(int);
method public void setStatusBarScrim(android.graphics.drawable.Drawable);
method public void setStatusBarScrimColor(int);
@@ -342,10 +350,15 @@
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 android.widget.EditText getEditText();
+ method public java.lang.CharSequence getError();
+ method public java.lang.CharSequence getHint();
+ method public boolean isErrorEnabled();
method public void setError(java.lang.CharSequence);
method public void setErrorEnabled(boolean);
method public void setHint(java.lang.CharSequence);
+ method public void setHintTextAppearance(int);
method public void setTypeface(android.graphics.Typeface);
}
diff --git a/design/base/android/support/design/widget/FloatingActionButtonImpl.java b/design/base/android/support/design/widget/FloatingActionButtonImpl.java
index 7fcb147..969e570 100644
--- a/design/base/android/support/design/widget/FloatingActionButtonImpl.java
+++ b/design/base/android/support/design/widget/FloatingActionButtonImpl.java
@@ -21,7 +21,6 @@
import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
import android.support.design.R;
-import android.support.v4.graphics.drawable.DrawableCompat;
import android.view.View;
abstract class FloatingActionButtonImpl {
@@ -67,10 +66,10 @@
final Resources resources = mView.getResources();
CircularBorderDrawable borderDrawable = newCircularDrawable();
borderDrawable.setGradientColors(
- resources.getColor(R.color.fab_stroke_top_outer_color),
- resources.getColor(R.color.fab_stroke_top_inner_color),
- resources.getColor(R.color.fab_stroke_end_inner_color),
- resources.getColor(R.color.fab_stroke_end_outer_color));
+ resources.getColor(R.color.design_fab_stroke_top_outer_color),
+ resources.getColor(R.color.design_fab_stroke_top_inner_color),
+ resources.getColor(R.color.design_fab_stroke_end_inner_color),
+ resources.getColor(R.color.design_fab_stroke_end_outer_color));
borderDrawable.setBorderWidth(borderWidth);
borderDrawable.setTintColor(backgroundTint.getDefaultColor());
return borderDrawable;
diff --git a/design/base/android/support/design/widget/ShadowDrawableWrapper.java b/design/base/android/support/design/widget/ShadowDrawableWrapper.java
index d8144d4..dec1b62 100644
--- a/design/base/android/support/design/widget/ShadowDrawableWrapper.java
+++ b/design/base/android/support/design/widget/ShadowDrawableWrapper.java
@@ -18,7 +18,6 @@
import android.content.res.Resources;
import android.graphics.Canvas;
-import android.graphics.ColorFilter;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.Path;
@@ -81,9 +80,9 @@
float shadowSize, float maxShadowSize) {
super(content);
- mShadowStartColor = resources.getColor(R.color.shadow_start_color);
- mShadowMiddleColor = resources.getColor(R.color.shadow_mid_color);
- mShadowEndColor = resources.getColor(R.color.shadow_end_color);
+ mShadowStartColor = resources.getColor(R.color.design_fab_shadow_start_color);
+ mShadowMiddleColor = resources.getColor(R.color.design_fab_shadow_mid_color);
+ mShadowEndColor = resources.getColor(R.color.design_fab_shadow_end_color);
mCornerShadowPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG);
mCornerShadowPaint.setStyle(Paint.Style.FILL);
diff --git a/design/build.gradle b/design/build.gradle
index ca8018c..a818cce 100644
--- a/design/build.gradle
+++ b/design/build.gradle
@@ -33,4 +33,8 @@
// TODO: fix errors and reenable.
abortOnError false
}
+
+ buildTypes.all {
+ consumerProguardFiles 'proguard-rules.pro'
+ }
}
diff --git a/design/eclair-mr1/android/support/design/widget/FloatingActionButtonEclairMr1.java b/design/eclair-mr1/android/support/design/widget/FloatingActionButtonEclairMr1.java
index 1aa0b683..3e36a14 100644
--- a/design/eclair-mr1/android/support/design/widget/FloatingActionButtonEclairMr1.java
+++ b/design/eclair-mr1/android/support/design/widget/FloatingActionButtonEclairMr1.java
@@ -164,7 +164,7 @@
}
Animation anim = android.view.animation.AnimationUtils.loadAnimation(
- mView.getContext(), R.anim.fab_out);
+ mView.getContext(), R.anim.design_fab_out);
anim.setInterpolator(AnimationUtils.FAST_OUT_SLOW_IN_INTERPOLATOR);
anim.setDuration(SHOW_HIDE_ANIM_DURATION);
anim.setAnimationListener(new AnimationUtils.AnimationListenerAdapter() {
@@ -185,7 +185,7 @@
@Override
void show() {
Animation anim = android.view.animation.AnimationUtils.loadAnimation(
- mView.getContext(), R.anim.fab_in);
+ mView.getContext(), R.anim.design_fab_in);
anim.setDuration(SHOW_HIDE_ANIM_DURATION);
anim.setInterpolator(AnimationUtils.FAST_OUT_SLOW_IN_INTERPOLATOR);
mView.startAnimation(anim);
diff --git a/design/proguard-rules.pro b/design/proguard-rules.pro
new file mode 100644
index 0000000..0e1c376
--- /dev/null
+++ b/design/proguard-rules.pro
@@ -0,0 +1,18 @@
+# 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.
+
+# CoordinatorLayout resolves the behaviors of its child components with reflection.
+-keep public class * extends android.support.design.widget.CoordinatorLayout$Behavior {
+ public <init>(android.content.Context, android.util.AttributeSet);
+}
diff --git a/design/res/anim/fab_in.xml b/design/res/anim/design_fab_in.xml
similarity index 100%
rename from design/res/anim/fab_in.xml
rename to design/res/anim/design_fab_in.xml
diff --git a/design/res/anim/fab_out.xml b/design/res/anim/design_fab_out.xml
similarity index 100%
rename from design/res/anim/fab_out.xml
rename to design/res/anim/design_fab_out.xml
diff --git a/design/res/anim/snackbar_in.xml b/design/res/anim/design_snackbar_in.xml
similarity index 100%
rename from design/res/anim/snackbar_in.xml
rename to design/res/anim/design_snackbar_in.xml
diff --git a/design/res/anim/snackbar_out.xml b/design/res/anim/design_snackbar_out.xml
similarity index 100%
rename from design/res/anim/snackbar_out.xml
rename to design/res/anim/design_snackbar_out.xml
diff --git a/design/res/drawable/fab_background.xml b/design/res/drawable/design_fab_background.xml
similarity index 100%
rename from design/res/drawable/fab_background.xml
rename to design/res/drawable/design_fab_background.xml
diff --git a/design/res/drawable/snackbar_background.xml b/design/res/drawable/design_snackbar_background.xml
similarity index 84%
rename from design/res/drawable/snackbar_background.xml
rename to design/res/drawable/design_snackbar_background.xml
index 739b516..e82441c 100644
--- a/design/res/drawable/snackbar_background.xml
+++ b/design/res/drawable/design_snackbar_background.xml
@@ -17,6 +17,6 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
- <corners android:radius="@dimen/snackbar_background_corner_radius"/>
- <solid android:color="@color/snackbar_background_color"/>
+ <corners android:radius="@dimen/design_snackbar_background_corner_radius"/>
+ <solid android:color="@color/design_snackbar_background_color"/>
</shape>
\ No newline at end of file
diff --git a/design/res/layout-sw600dp/layout_snackbar.xml b/design/res/layout-sw600dp/design_layout_snackbar.xml
similarity index 100%
rename from design/res/layout-sw600dp/layout_snackbar.xml
rename to design/res/layout-sw600dp/design_layout_snackbar.xml
diff --git a/design/res/layout/layout_snackbar.xml b/design/res/layout/design_layout_snackbar.xml
similarity index 100%
rename from design/res/layout/layout_snackbar.xml
rename to design/res/layout/design_layout_snackbar.xml
diff --git a/design/res/layout/design_layout_snackbar_include.xml b/design/res/layout/design_layout_snackbar_include.xml
new file mode 100644
index 0000000..0e0cde4
--- /dev/null
+++ b/design/res/layout/design_layout_snackbar_include.xml
@@ -0,0 +1,49 @@
+<?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.
+-->
+
+<merge xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <TextView
+ android:id="@+id/snackbar_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:paddingTop="@dimen/design_snackbar_padding_vertical"
+ android:paddingBottom="@dimen/design_snackbar_padding_vertical"
+ android:paddingLeft="@dimen/design_snackbar_padding_horizontal"
+ android:paddingRight="@dimen/design_snackbar_padding_horizontal"
+ android:textAppearance="@style/TextAppearance.Design.Snackbar.Message"
+ android:maxLines="@integer/design_snackbar_text_max_lines"
+ android:layout_gravity="center_vertical|left|start"
+ android:ellipsize="end"/>
+
+ <Button
+ android:id="@+id/snackbar_action"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="@dimen/design_snackbar_extra_spacing_horizontal"
+ android:layout_marginStart="@dimen/design_snackbar_extra_spacing_horizontal"
+ android:layout_gravity="center_vertical|right|end"
+ android:paddingTop="@dimen/design_snackbar_padding_vertical"
+ android:paddingBottom="@dimen/design_snackbar_padding_vertical"
+ android:paddingLeft="@dimen/design_snackbar_padding_horizontal"
+ android:paddingRight="@dimen/design_snackbar_padding_horizontal"
+ android:visibility="gone"
+ android:textColor="?attr/colorAccent"
+ style="?attr/borderlessButtonStyle"/>
+
+</merge>
\ No newline at end of file
diff --git a/design/res/layout/layout_tab_icon.xml b/design/res/layout/design_layout_tab_icon.xml
similarity index 100%
rename from design/res/layout/layout_tab_icon.xml
rename to design/res/layout/design_layout_tab_icon.xml
diff --git a/design/res/layout/layout_tab_text.xml b/design/res/layout/design_layout_tab_text.xml
similarity index 100%
rename from design/res/layout/layout_tab_text.xml
rename to design/res/layout/design_layout_tab_text.xml
diff --git a/design/res/layout/design_navigation_item.xml b/design/res/layout/design_navigation_item.xml
index 59ee05c..3fcd74a 100644
--- a/design/res/layout/design_navigation_item.xml
+++ b/design/res/layout/design_navigation_item.xml
@@ -20,7 +20,7 @@
android:layout_height="?attr/listPreferredItemHeightSmall"
android:paddingLeft="?attr/listPreferredItemPaddingLeft"
android:paddingRight="?attr/listPreferredItemPaddingRight"
- android:drawablePadding="@dimen/navigation_icon_padding"
+ android:drawablePadding="@dimen/design_navigation_icon_padding"
android:gravity="center_vertical|start"
android:maxLines="1"
android:textAppearance="@style/TextAppearance.AppCompat.Body2"/>
diff --git a/design/res/layout/design_navigation_item_header.xml b/design/res/layout/design_navigation_item_header.xml
index 9886007..33fd199 100644
--- a/design/res/layout/design_navigation_item_header.xml
+++ b/design/res/layout/design_navigation_item_header.xml
@@ -18,4 +18,4 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
- android:paddingBottom="@dimen/navigation_separator_vertical_padding" />
+ android:paddingBottom="@dimen/design_navigation_separator_vertical_padding" />
diff --git a/design/res/layout/design_navigation_menu.xml b/design/res/layout/design_navigation_menu.xml
index a40f2eb..02b7aad 100644
--- a/design/res/layout/design_navigation_menu.xml
+++ b/design/res/layout/design_navigation_menu.xml
@@ -18,8 +18,9 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:paddingTop="@dimen/navigation_padding_top_default"
- android:paddingBottom="@dimen/navigation_padding_bottom"
+ android:paddingTop="@dimen/design_navigation_padding_top_default"
+ android:paddingBottom="@dimen/design_navigation_padding_bottom"
android:clipToPadding="false"
android:divider="@null"
+ android:scrollbars="vertical"
android:listSelector="?attr/selectableItemBackground"/>
diff --git a/design/res/layout/layout_snackbar_include.xml b/design/res/layout/layout_snackbar_include.xml
deleted file mode 100644
index 0cf2002..0000000
--- a/design/res/layout/layout_snackbar_include.xml
+++ /dev/null
@@ -1,49 +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.
--->
-
-<merge xmlns:android="http://schemas.android.com/apk/res/android">
-
- <TextView
- android:id="@+id/snackbar_text"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:paddingTop="@dimen/snackbar_padding_vertical"
- android:paddingBottom="@dimen/snackbar_padding_vertical"
- android:paddingLeft="@dimen/snackbar_padding_horizontal"
- android:paddingRight="@dimen/snackbar_padding_horizontal"
- android:textAppearance="@style/TextAppearance.Design.Snackbar.Message"
- android:maxLines="@integer/snackbar_text_max_lines"
- android:layout_gravity="center_vertical|left|start"
- android:ellipsize="end"/>
-
- <TextView
- android:id="@+id/snackbar_action"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginLeft="@dimen/snackbar_extra_spacing_horizontal"
- android:layout_marginStart="@dimen/snackbar_extra_spacing_horizontal"
- android:layout_gravity="center_vertical|right|end"
- android:background="?attr/selectableItemBackground"
- android:paddingTop="@dimen/snackbar_padding_vertical"
- android:paddingBottom="@dimen/snackbar_padding_vertical"
- android:paddingLeft="@dimen/snackbar_padding_horizontal"
- android:paddingRight="@dimen/snackbar_padding_horizontal"
- android:visibility="gone"
- android:textAppearance="@style/TextAppearance.Design.Snackbar.Action"/>
-
-</merge>
\ No newline at end of file
diff --git a/design/res/values-sw600dp/config.xml b/design/res/values-sw600dp/config.xml
index baac13b..58b6207 100644
--- a/design/res/values-sw600dp/config.xml
+++ b/design/res/values-sw600dp/config.xml
@@ -17,6 +17,6 @@
<resources>
- <integer name="snackbar_text_max_lines">1</integer>
+ <integer name="design_snackbar_text_max_lines">1</integer>
</resources>
\ No newline at end of file
diff --git a/design/res/values-sw600dp/dimens.xml b/design/res/values-sw600dp/dimens.xml
index 37c3ff5..ebbc20e 100644
--- a/design/res/values-sw600dp/dimens.xml
+++ b/design/res/values-sw600dp/dimens.xml
@@ -17,13 +17,13 @@
<resources>
- <dimen name="tab_min_width">160dp</dimen>
+ <dimen name="design_tab_min_width">160dp</dimen>
- <dimen name="snackbar_min_width">320dp</dimen>
- <dimen name="snackbar_max_width">576dp</dimen>
- <dimen name="snackbar_padding_vertical_2lines">@dimen/snackbar_padding_vertical</dimen>
- <dimen name="snackbar_extra_spacing_horizontal">24dp</dimen>
- <dimen name="snackbar_background_corner_radius">2dp</dimen>
- <dimen name="snackbar_action_inline_max_width">0dp</dimen>
+ <dimen name="design_snackbar_min_width">320dp</dimen>
+ <dimen name="design_snackbar_max_width">576dp</dimen>
+ <dimen name="design_snackbar_padding_vertical_2lines">@dimen/design_snackbar_padding_vertical</dimen>
+ <dimen name="design_snackbar_extra_spacing_horizontal">24dp</dimen>
+ <dimen name="design_snackbar_background_corner_radius">2dp</dimen>
+ <dimen name="design_snackbar_action_inline_max_width">0dp</dimen>
</resources>
\ No newline at end of file
diff --git a/design/res/values-v21/dimens.xml b/design/res/values-v21/dimens.xml
index 2a67937..447aeb2 100644
--- a/design/res/values-v21/dimens.xml
+++ b/design/res/values-v21/dimens.xml
@@ -15,5 +15,5 @@
~ limitations under the License.
-->
<resources>
- <dimen name="navigation_padding_top_default">24dp</dimen>
+ <dimen name="design_navigation_padding_top_default">24dp</dimen>
</resources>
diff --git a/design/res/values/attrs.xml b/design/res/values/attrs.xml
index 9702497..9ad1f0a2 100644
--- a/design/res/values/attrs.xml
+++ b/design/res/values/attrs.xml
@@ -161,6 +161,7 @@
<attr name="errorEnabled" format="boolean"/>
<!-- TextAppearance of any error message displayed -->
<attr name="errorTextAppearance" format="reference"/>
+ <attr name="android:textColorHint"/>
</declare-styleable>
<declare-styleable name="SnackbarLayout">
@@ -172,6 +173,9 @@
<declare-styleable name="AppBarLayout">
<attr name="elevation" />
<attr name="android:background" />
+ <!-- The initial expanded state for the AppBarLayout. This only takes effect when this
+ view is a direct child of a CoordinatorLayout. -->
+ <attr name="expanded" format="boolean" />
</declare-styleable>
<declare-styleable name="AppBarLayout_LayoutParams">
@@ -239,6 +243,54 @@
<!-- The id of the primary Toolbar child that you wish to use for the purpose of collapsing.
If you do not set this then the first Toolbar child found will be used. -->
<attr name="toolbarId" format="reference"/>
+
+ <!-- Specifies how the title should be positioned when collapsed. -->
+ <attr name="collapsedTitleGravity">
+ <!-- Push title to the top of its container, not changing its size. -->
+ <flag name="top" value="0x30"/>
+ <!-- Push title to the bottom of its container, not changing its size. -->
+ <flag name="bottom" value="0x50"/>
+ <!-- Push title to the left of its container, not changing its size. -->
+ <flag name="left" value="0x03"/>
+ <!-- Push title to the right of its container, not changing its size. -->
+ <flag name="right" value="0x05"/>
+ <!-- Place title in the vertical center of its container, not changing its size. -->
+ <flag name="center_vertical" value="0x10"/>
+ <!-- Grow the vertical size of the title if needed so it completely fills its container. -->
+ <flag name="fill_vertical" value="0x70"/>
+ <!-- Place title in the horizontal center of its container, not changing its size. -->
+ <flag name="center_horizontal" value="0x01"/>
+ <!-- Place the title in the center of its container in both the vertical and horizontal axis, not changing its size. -->
+ <flag name="center" value="0x11"/>
+ <!-- Push title to the beginning of its container, not changing its size. -->
+ <flag name="start" value="0x00800003"/>
+ <!-- Push title to the end of its container, not changing its size. -->
+ <flag name="end" value="0x00800005"/>
+ </attr>
+
+ <!-- Specifies how the title should be positioned when expanded. -->
+ <attr name="expandedTitleGravity">
+ <!-- Push title to the top of its container, not changing its size. -->
+ <flag name="top" value="0x30"/>
+ <!-- Push title to the bottom of its container, not changing its size. -->
+ <flag name="bottom" value="0x50"/>
+ <!-- Push title to the left of its container, not changing its size. -->
+ <flag name="left" value="0x03"/>
+ <!-- Push title to the right of its container, not changing its size. -->
+ <flag name="right" value="0x05"/>
+ <!-- Place title in the vertical center of its container, not changing its size. -->
+ <flag name="center_vertical" value="0x10"/>
+ <!-- Grow the vertical size of the title if needed so it completely fills its container. -->
+ <flag name="fill_vertical" value="0x70"/>
+ <!-- Place title in the horizontal center of its container, not changing its size. -->
+ <flag name="center_horizontal" value="0x01"/>
+ <!-- Place the title in the center of its container in both the vertical and horizontal axis, not changing its size. -->
+ <flag name="center" value="0x11"/>
+ <!-- Push title to the beginning of its container, not changing its size. -->
+ <flag name="start" value="0x00800003"/>
+ <!-- Push title to the end of its container, not changing its size. -->
+ <flag name="end" value="0x00800005"/>
+ </attr>
</declare-styleable>
<declare-styleable name="CollapsingAppBarLayout_LayoutParams">
diff --git a/design/res/values/colors.xml b/design/res/values/colors.xml
index 216ad79..a958156 100644
--- a/design/res/values/colors.xml
+++ b/design/res/values/colors.xml
@@ -18,23 +18,23 @@
<resources>
<!-- Color for the top outer pixels in the stroke: 18% white (these are multiplied) -->
- <color name="fab_stroke_top_outer_color">#2EFFFFFF</color>
+ <color name="design_fab_stroke_top_outer_color">#2EFFFFFF</color>
<!-- Color for the top inner pixels in the stroke: 10% white (these are multiplied) -->
- <color name="fab_stroke_top_inner_color">#1AFFFFFF</color>
+ <color name="design_fab_stroke_top_inner_color">#1AFFFFFF</color>
<!-- Color for the bottom outer pixels in the stroke: 6% black (these are multiplied) -->
- <color name="fab_stroke_end_outer_color">#0F000000</color>
+ <color name="design_fab_stroke_end_outer_color">#0F000000</color>
<!-- Color for the bottom inner pixels in the stroke: 4% black (these are multiplied) -->
- <color name="fab_stroke_end_inner_color">#0A000000</color>
+ <color name="design_fab_stroke_end_inner_color">#0A000000</color>
<!-- Shadow color for the first pixels of a shadow -->
- <color name="shadow_start_color">#44000000</color>
+ <color name="design_fab_shadow_start_color">#44000000</color>
<!-- Shadow color for the middle pixels of a shadow -->
- <color name="shadow_mid_color">#14000000</color>
+ <color name="design_fab_shadow_mid_color">#14000000</color>
<!-- Shadow color for the furthest pixels of a shadow -->
- <color name="shadow_end_color">@android:color/transparent</color>
+ <color name="design_fab_shadow_end_color">@android:color/transparent</color>
- <color name="error_color">#FFDD2C00</color>
+ <color name="design_textinput_error_color">#FFDD2C00</color>
- <color name="snackbar_background_color">#323232</color>
+ <color name="design_snackbar_background_color">#323232</color>
</resources>
\ No newline at end of file
diff --git a/design/res/values/config.xml b/design/res/values/config.xml
index 2ff276a..67635a8 100644
--- a/design/res/values/config.xml
+++ b/design/res/values/config.xml
@@ -17,6 +17,6 @@
<resources>
- <integer name="snackbar_text_max_lines">2</integer>
+ <integer name="design_snackbar_text_max_lines">2</integer>
</resources>
\ No newline at end of file
diff --git a/design/res/values/dimens.xml b/design/res/values/dimens.xml
index 45e83e6..c7f8cef 100644
--- a/design/res/values/dimens.xml
+++ b/design/res/values/dimens.xml
@@ -16,41 +16,41 @@
-->
<resources>
- <dimen name="fab_elevation">8dp</dimen>
- <dimen name="fab_translation_z_pressed">6dp</dimen>
- <dimen name="fab_content_size">24dp</dimen>
- <dimen name="fab_size_normal">56dp</dimen>
- <dimen name="fab_size_mini">40dp</dimen>
- <dimen name="fab_border_width">0.5dp</dimen>
+ <dimen name="design_fab_elevation">6dp</dimen>
+ <dimen name="design_fab_translation_z_pressed">6dp</dimen>
+ <dimen name="design_fab_content_size">24dp</dimen>
+ <dimen name="design_fab_size_normal">56dp</dimen>
+ <dimen name="design_fab_size_mini">40dp</dimen>
+ <dimen name="design_fab_border_width">0.5dp</dimen>
- <dimen name="navigation_max_width">320dp</dimen>
- <dimen name="navigation_elevation">12dp</dimen>
- <dimen name="navigation_icon_padding">32dp</dimen>
- <dimen name="navigation_icon_size">24dp</dimen>
- <dimen name="navigation_separator_vertical_padding">8dp</dimen>
- <dimen name="navigation_padding_top_default">0dp</dimen>
- <dimen name="navigation_padding_bottom">8dp</dimen>
+ <dimen name="design_navigation_max_width">320dp</dimen>
+ <dimen name="design_navigation_elevation">16dp</dimen>
+ <dimen name="design_navigation_icon_padding">32dp</dimen>
+ <dimen name="design_navigation_icon_size">24dp</dimen>
+ <dimen name="design_navigation_separator_vertical_padding">8dp</dimen>
+ <dimen name="design_navigation_padding_top_default">0dp</dimen>
+ <dimen name="design_navigation_padding_bottom">8dp</dimen>
- <dimen name="tab_min_width">72dp</dimen>
- <dimen name="tab_max_width">264dp</dimen>
+ <dimen name="design_tab_min_width">72dp</dimen>
+ <dimen name="design_tab_max_width">264dp</dimen>
- <dimen name="snackbar_min_width">-1px</dimen>
- <dimen name="snackbar_max_width">-1px</dimen>
- <dimen name="snackbar_elevation">2dp</dimen>
- <dimen name="snackbar_background_corner_radius">0dp</dimen>
+ <dimen name="design_snackbar_min_width">-1px</dimen>
+ <dimen name="design_snackbar_max_width">-1px</dimen>
+ <dimen name="design_snackbar_elevation">6dp</dimen>
+ <dimen name="design_snackbar_background_corner_radius">0dp</dimen>
- <dimen name="snackbar_padding_horizontal">12dp</dimen>
- <dimen name="snackbar_padding_vertical">14dp</dimen>
- <dimen name="snackbar_padding_vertical_2lines">24dp</dimen>
+ <dimen name="design_snackbar_padding_horizontal">12dp</dimen>
+ <dimen name="design_snackbar_padding_vertical">14dp</dimen>
+ <dimen name="design_snackbar_padding_vertical_2lines">24dp</dimen>
<!-- Extra spacing between the action and message views -->
- <dimen name="snackbar_extra_spacing_horizontal">0dp</dimen>
+ <dimen name="design_snackbar_extra_spacing_horizontal">0dp</dimen>
<!-- The maximum width for a Snackbar's inline action. If the view is width than this then
the Snackbar will change to vertical stacking -->
- <dimen name="snackbar_action_inline_max_width">128dp</dimen>
+ <dimen name="design_snackbar_action_inline_max_width">128dp</dimen>
- <dimen name="snackbar_text_size">14sp</dimen>
+ <dimen name="design_snackbar_text_size">14sp</dimen>
- <dimen name="appbar_elevation">4dp</dimen>
+ <dimen name="design_appbar_elevation">4dp</dimen>
</resources>
diff --git a/design/res/values/styles.xml b/design/res/values/styles.xml
index 067846c..e75d805 100644
--- a/design/res/values/styles.xml
+++ b/design/res/values/styles.xml
@@ -17,13 +17,13 @@
<resources>
<style name="Widget.Design.FloatingActionButton" parent="android:Widget">
- <item name="android:background">@drawable/fab_background</item>
+ <item name="android:background">@drawable/design_fab_background</item>
<item name="backgroundTint">?attr/colorAccent</item>
<item name="fabSize">normal</item>
- <item name="elevation">@dimen/fab_elevation</item>
- <item name="pressedTranslationZ">@dimen/fab_translation_z_pressed</item>
+ <item name="elevation">@dimen/design_fab_elevation</item>
+ <item name="pressedTranslationZ">@dimen/design_fab_translation_z_pressed</item>
<item name="rippleColor">?attr/colorControlHighlight</item>
- <item name="borderWidth">@dimen/fab_border_width</item>
+ <item name="borderWidth">@dimen/design_fab_border_width</item>
</style>
<style name="Widget.Design.ScrimInsetsFrameLayout" parent="">
@@ -31,10 +31,10 @@
</style>
<style name="Widget.Design.NavigationView" parent="">
- <item name="elevation">@dimen/navigation_elevation</item>
+ <item name="elevation">@dimen/design_navigation_elevation</item>
<item name="android:background">?android:attr/windowBackground</item>
<item name="android:fitsSystemWindows">true</item>
- <item name="android:maxWidth">@dimen/navigation_max_width</item>
+ <item name="android:maxWidth">@dimen/design_navigation_max_width</item>
</style>
<style name="Widget.Design.TabLayout" parent="Base.Widget.Design.TabLayout">
@@ -43,7 +43,7 @@
</style>
<style name="Base.Widget.Design.TabLayout" parent="android:Widget">
- <item name="tabMaxWidth">@dimen/tab_max_width</item>
+ <item name="tabMaxWidth">@dimen/design_tab_max_width</item>
<item name="tabIndicatorColor">?attr/colorAccent</item>
<item name="tabIndicatorHeight">2dp</item>
<item name="tabPaddingStart">12dp</item>
@@ -69,38 +69,32 @@
</style>
<style name="TextAppearance.Design.Error" parent="TextAppearance.AppCompat.Caption">
- <item name="android:textColor">@color/error_color</item>
+ <item name="android:textColor">@color/design_textinput_error_color</item>
</style>
<style name="TextAppearance.Design.Snackbar.Message" parent="android:TextAppearance">
- <item name="android:textSize">@dimen/snackbar_text_size</item>
+ <item name="android:textSize">@dimen/design_snackbar_text_size</item>
<item name="android:textColor">?android:textColorPrimary</item>
</style>
- <style name="TextAppearance.Design.Snackbar.Action" parent="TextAppearance.AppCompat.Button">
- <item name="android:textColor">?colorAccent</item>
- </style>
-
<style name="Widget.Design.Snackbar" parent="android:Widget">
<item name="android:theme">@style/ThemeOverlay.AppCompat.Dark</item>
- <item name="android:minWidth">@dimen/snackbar_min_width</item>
- <item name="android:maxWidth">@dimen/snackbar_max_width</item>
- <item name="android:background">@drawable/snackbar_background</item>
- <item name="android:paddingLeft">@dimen/snackbar_padding_horizontal</item>
- <item name="android:paddingRight">@dimen/snackbar_padding_horizontal</item>
- <item name="elevation">@dimen/snackbar_elevation</item>
- <item name="maxActionInlineWidth">@dimen/snackbar_action_inline_max_width</item>
+ <item name="android:minWidth">@dimen/design_snackbar_min_width</item>
+ <item name="android:maxWidth">@dimen/design_snackbar_max_width</item>
+ <item name="android:background">@drawable/design_snackbar_background</item>
+ <item name="android:paddingLeft">@dimen/design_snackbar_padding_horizontal</item>
+ <item name="android:paddingRight">@dimen/design_snackbar_padding_horizontal</item>
+ <item name="elevation">@dimen/design_snackbar_elevation</item>
+ <item name="maxActionInlineWidth">@dimen/design_snackbar_action_inline_max_width</item>
</style>
<style name="Widget.Design.CollapsingToolbar" parent="android:Widget">
<item name="expandedTitleMargin">32dp</item>
- <item name="expandedTitleTextAppearance">@style/TextAppearance.Design.CollapsingToolbar.Expanded</item>
- <item name="collapsedTitleTextAppearance">@style/TextAppearance.AppCompat.Widget.ActionBar.Title</item>
<item name="statusBarScrim">?attr/colorPrimaryDark</item>
</style>
<style name="Widget.Design.AppBarLayout" parent="android:Widget">
- <item name="elevation">@dimen/appbar_elevation</item>
+ <item name="elevation">@dimen/design_appbar_elevation</item>
<item name="android:background">?attr/colorPrimary</item>
</style>
diff --git a/design/src/android/support/design/internal/NavigationMenu.java b/design/src/android/support/design/internal/NavigationMenu.java
new file mode 100644
index 0000000..4335631
--- /dev/null
+++ b/design/src/android/support/design/internal/NavigationMenu.java
@@ -0,0 +1,45 @@
+/*
+ * 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.
+ */
+
+package android.support.design.internal;
+
+import android.content.Context;
+import android.support.v7.internal.view.menu.MenuBuilder;
+import android.support.v7.internal.view.menu.MenuItemImpl;
+import android.support.v7.internal.view.menu.SubMenuBuilder;
+import android.view.SubMenu;
+
+/**
+ * This is a {@link MenuBuilder} that returns an instance of {@link NavigationSubMenu} instead of
+ * {@link SubMenuBuilder} when a sub menu is created.
+ *
+ * @hide
+ */
+public class NavigationMenu extends MenuBuilder {
+
+ public NavigationMenu(Context context) {
+ super(context);
+ }
+
+ @Override
+ public SubMenu addSubMenu(int group, int id, int categoryOrder, CharSequence title) {
+ final MenuItemImpl item = (MenuItemImpl) addInternal(group, id, categoryOrder, title);
+ final SubMenuBuilder subMenu = new NavigationSubMenu(getContext(), this, item);
+ item.setSubMenu(subMenu);
+ return subMenu;
+ }
+
+}
diff --git a/design/src/android/support/design/internal/NavigationMenuItemView.java b/design/src/android/support/design/internal/NavigationMenuItemView.java
index 4a97a8a..7813163 100644
--- a/design/src/android/support/design/internal/NavigationMenuItemView.java
+++ b/design/src/android/support/design/internal/NavigationMenuItemView.java
@@ -52,7 +52,8 @@
public NavigationMenuItemView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
- mIconSize = context.getResources().getDimensionPixelSize(R.dimen.navigation_icon_size);
+ mIconSize = context.getResources().getDimensionPixelSize(
+ R.dimen.design_navigation_icon_size);
}
@Override
diff --git a/design/src/android/support/design/internal/NavigationMenuPresenter.java b/design/src/android/support/design/internal/NavigationMenuPresenter.java
index e80e677497..e523c38 100644
--- a/design/src/android/support/design/internal/NavigationMenuPresenter.java
+++ b/design/src/android/support/design/internal/NavigationMenuPresenter.java
@@ -86,9 +86,10 @@
mLayoutInflater = LayoutInflater.from(context);
mMenu = menu;
Resources res = context.getResources();
- mPaddingTopDefault = res.getDimensionPixelOffset(R.dimen.navigation_padding_top_default);
+ mPaddingTopDefault = res.getDimensionPixelOffset(
+ R.dimen.design_navigation_padding_top_default);
mPaddingSeparator = res.getDimensionPixelOffset(
- R.dimen.navigation_separator_vertical_padding);
+ R.dimen.design_navigation_separator_vertical_padding);
}
@Override
@@ -190,7 +191,7 @@
setUpdateSuspended(true);
MenuItemImpl item = mAdapter.getItem(positionInAdapter).getMenuItem();
if (item != null && item.isCheckable()) {
- setCheckedItem(item);
+ mAdapter.setCheckedItem(item);
}
mMenu.performItemAction(item, this, 0);
setUpdateSuspended(false);
@@ -376,6 +377,7 @@
if (mUpdateSuspended) {
return;
}
+ mUpdateSuspended = true;
mItems.clear();
int currentGroupId = -1;
int currentGroupStart = 0;
@@ -437,6 +439,7 @@
currentGroupId = groupId;
}
}
+ mUpdateSuspended = false;
}
private void appendTransparentIconIfMissing(int startIndex, int endIndex) {
diff --git a/design/src/android/support/design/internal/NavigationSubMenu.java b/design/src/android/support/design/internal/NavigationSubMenu.java
new file mode 100644
index 0000000..ae59412
--- /dev/null
+++ b/design/src/android/support/design/internal/NavigationSubMenu.java
@@ -0,0 +1,69 @@
+/*
+ * 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.
+ */
+
+package android.support.design.internal;
+
+import android.content.Context;
+import android.support.v7.internal.view.menu.MenuBuilder;
+import android.support.v7.internal.view.menu.MenuItemImpl;
+import android.support.v7.internal.view.menu.SubMenuBuilder;
+import android.view.MenuItem;
+
+/**
+ * This is a {@link SubMenuBuilder} that it notifies the parent {@link NavigationMenu} of its menu
+ * updates.
+ *
+ * @hide
+ */
+public class NavigationSubMenu extends SubMenuBuilder {
+
+ public NavigationSubMenu(Context context, NavigationMenu menu, MenuItemImpl item) {
+ super(context, menu, item);
+ }
+
+ @Override
+ public MenuItem add(CharSequence title) {
+ MenuItem item = super.add(title);
+ notifyParent();
+ return item;
+ }
+
+ @Override
+ public MenuItem add(int titleRes) {
+ MenuItem item = super.add(titleRes);
+ notifyParent();
+ return item;
+ }
+
+ @Override
+ public MenuItem add(int groupId, int itemId, int order, CharSequence title) {
+ MenuItem item = super.add(groupId, itemId, order, title);
+ notifyParent();
+ return item;
+ }
+
+ @Override
+ public MenuItem add(int groupId, int itemId, int order, int titleRes) {
+ MenuItem item = super.add(groupId, itemId, order, titleRes);
+ notifyParent();
+ return item;
+ }
+
+ private void notifyParent() {
+ ((MenuBuilder) getParentMenu()).onItemsChanged(true);
+ }
+
+}
diff --git a/design/src/android/support/design/widget/AppBarLayout.java b/design/src/android/support/design/widget/AppBarLayout.java
index 8ccb357..60f9152 100644
--- a/design/src/android/support/design/widget/AppBarLayout.java
+++ b/design/src/android/support/design/widget/AppBarLayout.java
@@ -22,11 +22,14 @@
import android.os.Parcelable;
import android.support.annotation.IntDef;
import android.support.design.R;
+import android.support.v4.view.MotionEventCompat;
import android.support.v4.view.ViewCompat;
import android.support.v4.view.WindowInsetsCompat;
import android.support.v4.widget.ScrollerCompat;
import android.util.AttributeSet;
+import android.view.MotionEvent;
import android.view.View;
+import android.view.ViewConfiguration;
import android.view.ViewGroup;
import android.view.animation.Interpolator;
import android.widget.LinearLayout;
@@ -35,7 +38,6 @@
import java.lang.annotation.RetentionPolicy;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
-import java.util.Iterator;
import java.util.List;
/**
@@ -95,6 +97,11 @@
@CoordinatorLayout.DefaultBehavior(AppBarLayout.Behavior.class)
public class AppBarLayout extends LinearLayout {
+ private static final int PENDING_ACTION_NONE = 0x0;
+ private static final int PENDING_ACTION_EXPANDED = 0x1;
+ private static final int PENDING_ACTION_COLLAPSED = 0x2;
+ private static final int PENDING_ACTION_ANIMATE_ENABLED = 0x4;
+
/**
* Interface definition for a callback to be invoked when an {@link AppBarLayout}'s vertical
* offset changes.
@@ -121,9 +128,11 @@
private float mTargetElevation;
+ private int mPendingAction = PENDING_ACTION_NONE;
+
private WindowInsetsCompat mLastInsets;
- private final List<WeakReference<OnOffsetChangedListener>> mListeners;
+ private final List<OnOffsetChangedListener> mListeners;
public AppBarLayout(Context context) {
this(context, null);
@@ -137,6 +146,9 @@
0, R.style.Widget_Design_AppBarLayout);
mTargetElevation = a.getDimensionPixelSize(R.styleable.AppBarLayout_elevation, 0);
setBackgroundDrawable(a.getDrawable(R.styleable.AppBarLayout_android_background));
+ if (a.hasValue(R.styleable.AppBarLayout_expanded)) {
+ setExpanded(a.getBoolean(R.styleable.AppBarLayout_expanded, false));
+ }
a.recycle();
// Use the bounds view outline provider so that we cast a shadow, even without a background
@@ -165,14 +177,9 @@
* @see #removeOnOffsetChangedListener(OnOffsetChangedListener)
*/
public void addOnOffsetChangedListener(OnOffsetChangedListener listener) {
- for (int i = 0, z = mListeners.size(); i < z; i++) {
- final WeakReference<OnOffsetChangedListener> ref = mListeners.get(i);
- if (ref != null && ref.get() == listener) {
- // Listener already added
- return;
- }
+ if (listener != null && !mListeners.contains(listener)) {
+ mListeners.add(listener);
}
- mListeners.add(new WeakReference<>(listener));
}
/**
@@ -181,14 +188,8 @@
* @param listener the listener to remove.
*/
public void removeOnOffsetChangedListener(OnOffsetChangedListener listener) {
- final Iterator<WeakReference<OnOffsetChangedListener>> i = mListeners.iterator();
- while (i.hasNext()) {
- final WeakReference<OnOffsetChangedListener> ref = i.next();
- final OnOffsetChangedListener item = ref.get();
- if (item == listener || item == null) {
- // If the item is null, or is our given listener, remove
- i.remove();
- }
+ if (listener != null) {
+ mListeners.remove(listener);
}
}
@@ -223,6 +224,40 @@
super.setOrientation(orientation);
}
+ /**
+ * Sets whether this {@link AppBarLayout} is expanded or not, animating if it has already
+ * been laid out.
+ *
+ * <p>As with {@link AppBarLayout}'s scrolling, this method relies on this layout being a
+ * direct child of a {@link CoordinatorLayout}.</p>
+ *
+ * @param expanded true if the layout should be fully expanded, false if it should
+ * be fully collapsed
+ *
+ * @attr ref android.support.design.R.styleable#AppBarLayout_expanded
+ */
+ public void setExpanded(boolean expanded) {
+ setExpanded(expanded, ViewCompat.isLaidOut(this));
+ }
+
+ /**
+ * Sets whether this {@link AppBarLayout} is expanded or not.
+ *
+ * <p>As with {@link AppBarLayout}'s scrolling, this method relies on this layout being a
+ * direct child of a {@link CoordinatorLayout}.</p>
+ *
+ * @param expanded true if the layout should be fully expanded, false if it should
+ * be fully collapsed
+ * @param animate Whether to animate to the new state
+ *
+ * @attr ref android.support.design.R.styleable#AppBarLayout_expanded
+ */
+ public void setExpanded(boolean expanded, boolean animate) {
+ mPendingAction = (expanded ? PENDING_ACTION_EXPANDED : PENDING_ACTION_COLLAPSED)
+ | (animate ? PENDING_ACTION_ANIMATE_ENABLED : 0);
+ requestLayout();
+ }
+
@Override
protected boolean checkLayoutParams(ViewGroup.LayoutParams p) {
return p instanceof LayoutParams;
@@ -273,7 +308,7 @@
if ((flags & LayoutParams.SCROLL_FLAG_SCROLL) != 0) {
// We're set to scroll so add the child's height
- range += childHeight;
+ range += childHeight + lp.topMargin + lp.bottomMargin;
if ((flags & LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED) != 0) {
// For a collapsing scroll, we to take the collapsed height into account.
@@ -322,6 +357,8 @@
final int flags = lp.mScrollFlags;
if ((flags & LayoutParams.FLAG_QUICK_RETURN) == LayoutParams.FLAG_QUICK_RETURN) {
+ // First take the margin into account
+ range += lp.topMargin + lp.bottomMargin;
// The view has the quick return flag combination...
if ((flags & LayoutParams.SCROLL_FLAG_ENTER_ALWAYS_COLLAPSED) != 0) {
// If they're set to enter collapsed, use the minimum height
@@ -352,9 +389,10 @@
for (int i = 0, z = getChildCount(); i < z; i++) {
final View child = getChildAt(i);
final LayoutParams lp = (LayoutParams) child.getLayoutParams();
- final int childHeight = ViewCompat.isLaidOut(child)
+ int childHeight = ViewCompat.isLaidOut(child)
? child.getHeight()
: child.getMeasuredHeight();
+ childHeight += lp.topMargin + lp.bottomMargin;
final int flags = lp.mScrollFlags;
@@ -416,6 +454,14 @@
return mTargetElevation;
}
+ int getPendingAction() {
+ return mPendingAction;
+ }
+
+ void resetPendingAction() {
+ mPendingAction = PENDING_ACTION_NONE;
+ }
+
private void setWindowInsets(WindowInsetsCompat insets) {
// Invalidate the total scroll range...
mTotalScrollRange = INVALID_SCROLL_RANGE;
@@ -581,6 +627,7 @@
* scroll handling with offsetting.
*/
public static class Behavior extends ViewOffsetBehavior<AppBarLayout> {
+ private static final int INVALID_POINTER = -1;
private static final int INVALID_POSITION = -1;
private int mOffsetDelta;
@@ -595,6 +642,13 @@
private boolean mOffsetToChildIndexOnLayoutIsMinHeight;
private float mOffsetToChildIndexOnLayoutPerc;
+ private boolean mIsBeingDragged;
+ private int mActivePointerId = INVALID_POINTER;
+ private int mLastMotionY;
+ private int mTouchSlop = -1;
+
+ private WeakReference<View> mLastNestedScrollingChildRef;
+
public Behavior() {}
public Behavior(Context context, AttributeSet attrs) {
@@ -615,6 +669,9 @@
mAnimator.cancel();
}
+ // A new nested scroll has started so clear out the previous ref
+ mLastNestedScrollingChildRef = null;
+
return started;
}
@@ -658,6 +715,117 @@
View target) {
// Reset the skip flag
mSkipNestedPreScroll = false;
+ // Keep a reference to the previous nested scrolling child
+ mLastNestedScrollingChildRef = new WeakReference<>(target);
+ }
+
+ @Override
+ public boolean onInterceptTouchEvent(CoordinatorLayout parent, AppBarLayout child,
+ MotionEvent ev) {
+ if (mTouchSlop < 0) {
+ mTouchSlop = ViewConfiguration.get(parent.getContext()).getScaledTouchSlop();
+ }
+
+ final int action = ev.getAction();
+
+ // Shortcut since we're being dragged
+ if (action == MotionEvent.ACTION_MOVE && mIsBeingDragged) {
+ return true;
+ }
+
+ switch (MotionEventCompat.getActionMasked(ev)) {
+ case MotionEvent.ACTION_MOVE: {
+ final int activePointerId = mActivePointerId;
+ if (activePointerId == INVALID_POINTER) {
+ // If we don't have a valid id, the touch down wasn't on content.
+ break;
+ }
+ final int pointerIndex = MotionEventCompat.findPointerIndex(ev, activePointerId);
+ if (pointerIndex == -1) {
+ break;
+ }
+
+ final int y = (int) MotionEventCompat.getY(ev, pointerIndex);
+ final int yDiff = Math.abs(y - mLastMotionY);
+ if (yDiff > mTouchSlop) {
+ mIsBeingDragged = true;
+ mLastMotionY = y;
+ }
+ break;
+ }
+
+ case MotionEvent.ACTION_DOWN: {
+ mIsBeingDragged = false;
+ final int x = (int) ev.getX();
+ final int y = (int) ev.getY();
+ if (parent.isPointInChildBounds(child, x, y) && canDragAppBarLayout()) {
+ mLastMotionY = y;
+ mActivePointerId = MotionEventCompat.getPointerId(ev, 0);
+ }
+ break;
+ }
+
+ case MotionEvent.ACTION_CANCEL:
+ case MotionEvent.ACTION_UP:
+ mIsBeingDragged = false;
+ mActivePointerId = INVALID_POINTER;
+ break;
+ }
+
+ return mIsBeingDragged;
+ }
+
+ @Override
+ public boolean onTouchEvent(CoordinatorLayout parent, AppBarLayout child, MotionEvent ev) {
+ if (mTouchSlop < 0) {
+ mTouchSlop = ViewConfiguration.get(parent.getContext()).getScaledTouchSlop();
+ }
+
+ int x = (int) ev.getX();
+ int y = (int) ev.getY();
+
+ switch (MotionEventCompat.getActionMasked(ev)) {
+ case MotionEvent.ACTION_DOWN:
+ if (parent.isPointInChildBounds(child, x, y) && canDragAppBarLayout()) {
+ mLastMotionY = y;
+ mActivePointerId = MotionEventCompat.getPointerId(ev, 0);
+ } else {
+ return false;
+ }
+ break;
+ case MotionEvent.ACTION_MOVE:
+ final int activePointerIndex = MotionEventCompat.findPointerIndex(ev,
+ mActivePointerId);
+ if (activePointerIndex == -1) {
+ return false;
+ }
+
+ y = (int) MotionEventCompat.getY(ev, activePointerIndex);
+
+ int dy = mLastMotionY - y;
+ if (!mIsBeingDragged && Math.abs(dy) > mTouchSlop) {
+ mIsBeingDragged = true;
+ if (dy > 0) {
+ dy -= mTouchSlop;
+ } else {
+ dy += mTouchSlop;
+ }
+ }
+
+ if (mIsBeingDragged) {
+ mLastMotionY = y;
+ // We're being dragged so scroll the ABL
+ scroll(parent, child, dy, -child.getDownNestedScrollRange(), 0);
+ }
+ break;
+ case MotionEvent.ACTION_UP:
+ case MotionEvent.ACTION_CANCEL:
+ mIsBeingDragged = false;
+ mActivePointerId = INVALID_POINTER;
+ break;
+ }
+
+ return true;
}
@Override
@@ -768,12 +936,31 @@
}
@Override
- public boolean onLayoutChild(CoordinatorLayout parent, AppBarLayout appBarLayout,
+ public boolean onLayoutChild(CoordinatorLayout parent, AppBarLayout abl,
int layoutDirection) {
- boolean handled = super.onLayoutChild(parent, appBarLayout, layoutDirection);
+ boolean handled = super.onLayoutChild(parent, abl, layoutDirection);
- if (mOffsetToChildIndexOnLayout >= 0) {
- View child = appBarLayout.getChildAt(mOffsetToChildIndexOnLayout);
+ final int pendingAction = abl.getPendingAction();
+ if (pendingAction != PENDING_ACTION_NONE) {
+ final boolean animate = (pendingAction & PENDING_ACTION_ANIMATE_ENABLED) != 0;
+ if ((pendingAction & PENDING_ACTION_COLLAPSED) != 0) {
+ final int offset = -abl.getUpNestedPreScrollRange();
+ if (animate) {
+ animateOffsetTo(parent, abl, offset);
+ } else {
+ setAppBarTopBottomOffset(parent, abl, offset);
+ }
+ } else if ((pendingAction & PENDING_ACTION_EXPANDED) != 0) {
+ if (animate) {
+ animateOffsetTo(parent, abl, 0);
+ } else {
+ setAppBarTopBottomOffset(parent, abl, 0);
+ }
+ }
+ // Finally reset the pending state
+ abl.resetPendingAction();
+ } else if (mOffsetToChildIndexOnLayout >= 0) {
+ View child = abl.getChildAt(mOffsetToChildIndexOnLayout);
int offset = -child.getBottom();
if (mOffsetToChildIndexOnLayoutIsMinHeight) {
offset += ViewCompat.getMinimumHeight(child);
@@ -785,7 +972,7 @@
}
// Make sure we update the elevation
- dispatchOffsetUpdates(appBarLayout);
+ dispatchOffsetUpdates(abl);
return handled;
}
@@ -796,6 +983,14 @@
getTopBottomOffsetForScrollingSibling() - dy, minOffset, maxOffset);
}
+ private boolean canDragAppBarLayout() {
+ if (mLastNestedScrollingChildRef != null) {
+ final View view = mLastNestedScrollingChildRef.get();
+ return view != null && view.isShown() && !ViewCompat.canScrollVertically(view, -1);
+ }
+ return false;
+ }
+
final int setAppBarTopBottomOffset(CoordinatorLayout coordinatorLayout,
AppBarLayout appBarLayout, int newOffset) {
return setAppBarTopBottomOffset(coordinatorLayout, appBarLayout, newOffset,
@@ -841,14 +1036,12 @@
}
private void dispatchOffsetUpdates(AppBarLayout layout) {
- final List<WeakReference<OnOffsetChangedListener>> listeners = layout.mListeners;
+ final List<OnOffsetChangedListener> listeners = layout.mListeners;
// Iterate backwards through the list so that most recently added listeners
// get the first chance to decide
for (int i = 0, z = listeners.size(); i < z; i++) {
- final WeakReference<OnOffsetChangedListener> ref = listeners.get(i);
- final OnOffsetChangedListener listener = ref != null ? ref.get() : null;
-
+ final OnOffsetChangedListener listener = listeners.get(i);
if (listener != null) {
listener.onOffsetChanged(layout, getTopAndBottomOffset());
}
@@ -868,10 +1061,13 @@
int childScrollableHeight = 0;
final int flags = childLp.getScrollFlags();
if ((flags & LayoutParams.SCROLL_FLAG_SCROLL) != 0) {
- // We're set to scroll so add the child's height
- childScrollableHeight += child.getHeight();
+ // We're set to scroll so add the child's height plus margin
+ childScrollableHeight += child.getHeight() + childLp.topMargin
+ + childLp.bottomMargin;
+
if ((flags & LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED) != 0) {
- // For a collapsing scroll, we to take the collapsed height into account.
+ // For a collapsing scroll, we to take the collapsed height
+ // into account.
childScrollableHeight -= ViewCompat.getMinimumHeight(child);
}
}
diff --git a/design/src/android/support/design/widget/CollapsingTextHelper.java b/design/src/android/support/design/widget/CollapsingTextHelper.java
index 636770e..082c316 100644
--- a/design/src/android/support/design/widget/CollapsingTextHelper.java
+++ b/design/src/android/support/design/widget/CollapsingTextHelper.java
@@ -22,10 +22,12 @@
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
+import android.graphics.RectF;
import android.graphics.Typeface;
import android.os.Build;
import android.support.design.R;
import android.support.v4.text.TextDirectionHeuristicsCompat;
+import android.support.v4.view.GravityCompat;
import android.support.v4.view.ViewCompat;
import android.text.TextPaint;
import android.text.TextUtils;
@@ -51,23 +53,28 @@
private final View mView;
+ private boolean mDrawTitle;
private float mExpandedFraction;
private final Rect mExpandedBounds;
private final Rect mCollapsedBounds;
- private int mExpandedTextVerticalGravity = Gravity.CENTER_VERTICAL;
- private int mCollapsedTextVerticalGravity = Gravity.CENTER_VERTICAL;
- private float mExpandedTextSize;
- private float mCollapsedTextSize;
+ private final RectF mCurrentBounds;
+ private int mExpandedTextGravity = Gravity.CENTER_VERTICAL;
+ private int mCollapsedTextGravity = Gravity.CENTER_VERTICAL;
+ private float mExpandedTextSize = 15;
+ private float mCollapsedTextSize = 15;
private int mExpandedTextColor;
private int mCollapsedTextColor;
- private float mExpandedTop;
- private float mCollapsedTop;
+ private float mExpandedDrawY;
+ private float mCollapsedDrawY;
+ private float mExpandedDrawX;
+ private float mCollapsedDrawX;
+ private float mCurrentDrawX;
+ private float mCurrentDrawY;
private CharSequence mText;
private CharSequence mTextToDraw;
- private float mTextWidth;
private boolean mIsRtl;
private boolean mUseTexture;
@@ -76,12 +83,11 @@
private float mTextureAscent;
private float mTextureDescent;
- private float mCurrentLeft;
- private float mCurrentRight;
- private float mCurrentTop;
private float mScale;
private float mCurrentTextSize;
+ private boolean mBoundsChanged;
+
private final TextPaint mTextPaint;
private Interpolator mPositionInterpolator;
@@ -95,6 +101,7 @@
mCollapsedBounds = new Rect();
mExpandedBounds = new Rect();
+ mCurrentBounds = new RectF();
}
void setTextSizeInterpolator(Interpolator interpolator) {
@@ -136,39 +143,57 @@
}
void setExpandedBounds(int left, int top, int right, int bottom) {
- mExpandedBounds.set(left, top, right, bottom);
+ if (!rectEquals(mExpandedBounds, left, top, right, bottom)) {
+ mExpandedBounds.set(left, top, right, bottom);
+ mBoundsChanged = true;
+ onBoundsChanged();
+ }
}
void setCollapsedBounds(int left, int top, int right, int bottom) {
- mCollapsedBounds.set(left, top, right, bottom);
+ if (!rectEquals(mCollapsedBounds, left, top, right, bottom)) {
+ mCollapsedBounds.set(left, top, right, bottom);
+ mBoundsChanged = true;
+ onBoundsChanged();
+ }
}
- void setExpandedTextVerticalGravity(int gravity) {
- gravity &= Gravity.VERTICAL_GRAVITY_MASK;
+ void onBoundsChanged() {
+ mDrawTitle = mCollapsedBounds.width() > 0 && mCollapsedBounds.height() > 0
+ && mExpandedBounds.width() > 0 && mExpandedBounds.height() > 0;
+ }
- if (mExpandedTextVerticalGravity != gravity) {
- mExpandedTextVerticalGravity = gravity;
+ void setExpandedTextGravity(int gravity) {
+ if (mExpandedTextGravity != gravity) {
+ mExpandedTextGravity = gravity;
recalculate();
}
}
- void setCollapsedTextVerticalGravity(int gravity) {
- gravity &= Gravity.VERTICAL_GRAVITY_MASK;
+ int getExpandedTextGravity() {
+ return mExpandedTextGravity;
+ }
- if (mCollapsedTextVerticalGravity != gravity) {
- mCollapsedTextVerticalGravity = gravity;
+ void setCollapsedTextGravity(int gravity) {
+ if (mCollapsedTextGravity != gravity) {
+ mCollapsedTextGravity = gravity;
recalculate();
}
}
+ int getCollapsedTextGravity() {
+ return mCollapsedTextGravity;
+ }
+
void setCollapsedTextAppearance(int resId) {
TypedArray a = mView.getContext().obtainStyledAttributes(resId, R.styleable.TextAppearance);
if (a.hasValue(R.styleable.TextAppearance_android_textColor)) {
- mCollapsedTextColor = a.getColor(R.styleable.TextAppearance_android_textColor, 0);
+ mCollapsedTextColor = a.getColor(
+ R.styleable.TextAppearance_android_textColor, mCollapsedTextColor);
}
if (a.hasValue(R.styleable.TextAppearance_android_textSize)) {
mCollapsedTextSize = a.getDimensionPixelSize(
- R.styleable.TextAppearance_android_textSize, 0);
+ R.styleable.TextAppearance_android_textSize, (int) mCollapsedTextSize);
}
a.recycle();
@@ -178,11 +203,12 @@
void setExpandedTextAppearance(int resId) {
TypedArray a = mView.getContext().obtainStyledAttributes(resId, R.styleable.TextAppearance);
if (a.hasValue(R.styleable.TextAppearance_android_textColor)) {
- mExpandedTextColor = a.getColor(R.styleable.TextAppearance_android_textColor, 0);
+ mExpandedTextColor = a.getColor(
+ R.styleable.TextAppearance_android_textColor, mExpandedTextColor);
}
if (a.hasValue(R.styleable.TextAppearance_android_textSize)) {
mExpandedTextSize = a.getDimensionPixelSize(
- R.styleable.TextAppearance_android_textSize, 0);
+ R.styleable.TextAppearance_android_textSize, (int) mExpandedTextSize);
}
a.recycle();
@@ -215,7 +241,7 @@
if (fraction != mExpandedFraction) {
mExpandedFraction = fraction;
- calculateOffsets();
+ calculateCurrentOffsets();
}
}
@@ -231,15 +257,16 @@
return mExpandedTextSize;
}
- private void calculateOffsets() {
+ private void calculateCurrentOffsets() {
final float fraction = mExpandedFraction;
- mCurrentLeft = interpolate(mExpandedBounds.left, mCollapsedBounds.left,
- fraction, mPositionInterpolator);
- mCurrentTop = interpolate(mExpandedTop, mCollapsedTop, fraction, mPositionInterpolator);
- mCurrentRight = interpolate(mExpandedBounds.right, mCollapsedBounds.right,
- fraction, mPositionInterpolator);
- setInterpolatedTextSize(interpolate(mExpandedTextSize, mCollapsedTextSize,
+ interpolateBounds(fraction);
+ mCurrentDrawX = lerp(mExpandedDrawX, mCollapsedDrawX, fraction,
+ mPositionInterpolator);
+ mCurrentDrawY = lerp(mExpandedDrawY, mCollapsedDrawY, fraction,
+ mPositionInterpolator);
+
+ setInterpolatedTextSize(lerp(mExpandedTextSize, mCollapsedTextSize,
fraction, mTextSizeInterpolator));
if (mCollapsedTextColor != mExpandedTextColor) {
@@ -253,54 +280,93 @@
ViewCompat.postInvalidateOnAnimation(mView);
}
- private void calculateBaselines() {
+ private void calculateBaseOffsets() {
// We then calculate the collapsed text size, using the same logic
mTextPaint.setTextSize(mCollapsedTextSize);
- switch (mCollapsedTextVerticalGravity) {
+ float width = mTextToDraw != null ?
+ mTextPaint.measureText(mTextToDraw, 0, mTextToDraw.length()) : 0;
+ final int collapsedAbsGravity = GravityCompat.getAbsoluteGravity(mCollapsedTextGravity,
+ mIsRtl ? ViewCompat.LAYOUT_DIRECTION_RTL : ViewCompat.LAYOUT_DIRECTION_LTR);
+ switch (collapsedAbsGravity & Gravity.VERTICAL_GRAVITY_MASK) {
case Gravity.BOTTOM:
- mCollapsedTop = mCollapsedBounds.bottom;
+ mCollapsedDrawY = mCollapsedBounds.bottom;
break;
case Gravity.TOP:
- mCollapsedTop = mCollapsedBounds.top - mTextPaint.ascent();
+ mCollapsedDrawY = mCollapsedBounds.top - mTextPaint.ascent();
break;
case Gravity.CENTER_VERTICAL:
default:
float textHeight = mTextPaint.descent() - mTextPaint.ascent();
float textOffset = (textHeight / 2) - mTextPaint.descent();
- mCollapsedTop = mCollapsedBounds.centerY() + textOffset;
+ mCollapsedDrawY = mCollapsedBounds.centerY() + textOffset;
+ break;
+ }
+ switch (collapsedAbsGravity & Gravity.HORIZONTAL_GRAVITY_MASK) {
+ case Gravity.CENTER_HORIZONTAL:
+ mCollapsedDrawX = mCollapsedBounds.centerX() - (width / 2);
+ break;
+ case Gravity.RIGHT:
+ mCollapsedDrawX = mCollapsedBounds.right - width;
+ break;
+ case Gravity.LEFT:
+ default:
+ mCollapsedDrawX = mCollapsedBounds.left;
break;
}
mTextPaint.setTextSize(mExpandedTextSize);
- switch (mExpandedTextVerticalGravity) {
+ width = mTextToDraw != null
+ ? mTextPaint.measureText(mTextToDraw, 0, mTextToDraw.length()) : 0;
+ final int expandedAbsGravity = GravityCompat.getAbsoluteGravity(mExpandedTextGravity,
+ mIsRtl ? ViewCompat.LAYOUT_DIRECTION_RTL : ViewCompat.LAYOUT_DIRECTION_LTR);
+ switch (expandedAbsGravity & Gravity.VERTICAL_GRAVITY_MASK) {
case Gravity.BOTTOM:
- mExpandedTop = mExpandedBounds.bottom;
+ mExpandedDrawY = mExpandedBounds.bottom;
break;
case Gravity.TOP:
- mExpandedTop = mExpandedBounds.top - mTextPaint.ascent();
+ mExpandedDrawY = mExpandedBounds.top - mTextPaint.ascent();
break;
case Gravity.CENTER_VERTICAL:
default:
float textHeight = mTextPaint.descent() - mTextPaint.ascent();
float textOffset = (textHeight / 2) - mTextPaint.descent();
- mExpandedTop = mExpandedBounds.centerY() + textOffset;
+ mExpandedDrawY = mExpandedBounds.centerY() + textOffset;
break;
}
- mTextureAscent = mTextPaint.ascent();
- mTextureDescent = mTextPaint.descent();
+ switch (expandedAbsGravity & Gravity.HORIZONTAL_GRAVITY_MASK) {
+ case Gravity.CENTER_HORIZONTAL:
+ mExpandedDrawX = mExpandedBounds.centerX() - (width / 2);
+ break;
+ case Gravity.RIGHT:
+ mExpandedDrawX = mExpandedBounds.right - width;
+ break;
+ case Gravity.LEFT:
+ default:
+ mExpandedDrawX = mExpandedBounds.left;
+ break;
+ }
// The bounds have changed so we need to clear the texture
clearTexture();
}
+ private void interpolateBounds(float fraction) {
+ mCurrentBounds.left = lerp(mExpandedBounds.left, mCollapsedBounds.left,
+ fraction, mPositionInterpolator);
+ mCurrentBounds.top = lerp(mExpandedDrawY, mCollapsedDrawY,
+ fraction, mPositionInterpolator);
+ mCurrentBounds.right = lerp(mExpandedBounds.right, mCollapsedBounds.right,
+ fraction, mPositionInterpolator);
+ mCurrentBounds.bottom = lerp(mExpandedBounds.bottom, mCollapsedBounds.bottom,
+ fraction, mPositionInterpolator);
+ }
+
public void draw(Canvas canvas) {
final int saveCount = canvas.save();
- if (mTextToDraw != null) {
- final boolean isRtl = mIsRtl;
-
- float x = isRtl ? mCurrentRight : mCurrentLeft;
- float y = mCurrentTop;
+ if (mTextToDraw != null && mDrawTitle) {
+ float x = mCurrentDrawX;
+ float y = mCurrentDrawY;
final boolean drawTexture = mUseTexture && mExpandedTitleTexture != null;
@@ -320,7 +386,7 @@
if (DEBUG_DRAW) {
// Just a debug tool, which drawn a Magneta rect in the text bounds
- canvas.drawRect(mCurrentLeft, y + ascent, mCurrentRight, y + descent,
+ canvas.drawRect(mCurrentBounds.left, y + ascent, mCurrentBounds.right, y + descent,
DEBUG_DRAW_PAINT);
}
@@ -332,10 +398,6 @@
canvas.scale(mScale, mScale, x, y);
}
- if (isRtl) {
- x -= mTextWidth;
- }
-
if (drawTexture) {
// If we should use a texture, draw it instead of text
canvas.drawBitmap(mExpandedTitleTexture, x, y, mTexturePaint);
@@ -380,8 +442,9 @@
}
if (availableWidth > 0) {
- updateDrawText = mCurrentTextSize != newTextSize;
+ updateDrawText = (mCurrentTextSize != newTextSize) || mBoundsChanged;
mCurrentTextSize = newTextSize;
+ mBoundsChanged = false;
}
if (mTextToDraw == null || updateDrawText) {
@@ -394,7 +457,6 @@
mTextToDraw = title;
}
mIsRtl = calculateIsRtl(mTextToDraw);
- mTextWidth = mTextPaint.measureText(mTextToDraw, 0, mTextToDraw.length());
}
// Use our texture if the scale isn't 1.0
@@ -416,10 +478,11 @@
mTextPaint.setTextSize(mExpandedTextSize);
mTextPaint.setColor(mExpandedTextColor);
+ mTextureAscent = mTextPaint.ascent();
+ mTextureDescent = mTextPaint.descent();
final int w = Math.round(mTextPaint.measureText(mTextToDraw, 0, mTextToDraw.length()));
- final int h = Math.round(mTextPaint.descent() - mTextPaint.ascent());
- mTextWidth = w;
+ final int h = Math.round(mTextureDescent - mTextureAscent);
if (w <= 0 && h <= 0) {
return; // If the width or height are 0, return
@@ -432,9 +495,7 @@
if (mTexturePaint == null) {
// Make sure we have a paint
- mTexturePaint = new Paint();
- mTexturePaint.setAntiAlias(true);
- mTexturePaint.setFilterBitmap(true);
+ mTexturePaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG);
}
}
@@ -442,8 +503,8 @@
if (mView.getHeight() > 0 && mView.getWidth() > 0) {
// If we've already been laid out, calculate everything now otherwise we'll wait
// until a layout
- calculateBaselines();
- calculateOffsets();
+ calculateBaseOffsets();
+ calculateCurrentOffsets();
}
}
@@ -503,11 +564,15 @@
return Color.argb((int) a, (int) r, (int) g, (int) b);
}
- private static float interpolate(float startValue, float endValue, float fraction,
+ private static float lerp(float startValue, float endValue, float fraction,
Interpolator interpolator) {
if (interpolator != null) {
fraction = interpolator.getInterpolation(fraction);
}
return AnimationUtils.lerp(startValue, endValue, fraction);
}
+
+ private static boolean rectEquals(Rect r, int left, int top, int right, int bottom) {
+ return !(r.left != left || r.top != top || r.right != right || r.bottom != bottom);
+ }
}
diff --git a/design/src/android/support/design/widget/CollapsingToolbarLayout.java b/design/src/android/support/design/widget/CollapsingToolbarLayout.java
index 71611e6..d5f76d8 100644
--- a/design/src/android/support/design/widget/CollapsingToolbarLayout.java
+++ b/design/src/android/support/design/widget/CollapsingToolbarLayout.java
@@ -28,6 +28,7 @@
import android.support.annotation.Nullable;
import android.support.design.R;
import android.support.v4.content.ContextCompat;
+import android.support.v4.view.GravityCompat;
import android.support.v4.view.ViewCompat;
import android.support.v4.view.WindowInsetsCompat;
import android.support.v7.widget.Toolbar;
@@ -122,13 +123,19 @@
super(context, attrs, defStyleAttr);
mCollapsingTextHelper = new CollapsingTextHelper(this);
- mCollapsingTextHelper.setExpandedTextVerticalGravity(Gravity.BOTTOM);
mCollapsingTextHelper.setTextSizeInterpolator(AnimationUtils.DECELERATE_INTERPOLATOR);
TypedArray a = context.obtainStyledAttributes(attrs,
R.styleable.CollapsingToolbarLayout, defStyleAttr,
R.style.Widget_Design_CollapsingToolbar);
+ mCollapsingTextHelper.setExpandedTextGravity(
+ a.getInt(R.styleable.CollapsingToolbarLayout_expandedTitleGravity,
+ GravityCompat.START | Gravity.BOTTOM));
+ mCollapsingTextHelper.setCollapsedTextGravity(
+ a.getInt(R.styleable.CollapsingToolbarLayout_collapsedTitleGravity,
+ GravityCompat.START | Gravity.CENTER_VERTICAL));
+
mExpandedMarginLeft = mExpandedMarginTop = mExpandedMarginRight = mExpandedMarginBottom =
a.getDimensionPixelSize(R.styleable.CollapsingToolbarLayout_expandedTitleMargin, 0);
@@ -161,15 +168,24 @@
R.styleable.CollapsingToolbarLayout_expandedTitleMarginBottom, 0);
}
- int tp = a.getResourceId(
- R.styleable.CollapsingToolbarLayout_expandedTitleTextAppearance,
- R.style.TextAppearance_AppCompat_Title);
- mCollapsingTextHelper.setExpandedTextAppearance(tp);
-
- tp = a.getResourceId(
- R.styleable.CollapsingToolbarLayout_collapsedTitleTextAppearance,
+ // First load the default text appearances
+ mCollapsingTextHelper.setExpandedTextAppearance(
+ R.style.TextAppearance_Design_CollapsingToolbar_Expanded);
+ mCollapsingTextHelper.setCollapsedTextAppearance(
R.style.TextAppearance_AppCompat_Widget_ActionBar_Title);
- mCollapsingTextHelper.setCollapsedTextAppearance(tp);
+
+ // Now overlay any custom text appearances
+ if (a.hasValue(R.styleable.CollapsingToolbarLayout_expandedTitleTextAppearance)) {
+ mCollapsingTextHelper.setExpandedTextAppearance(
+ a.getResourceId(
+ R.styleable.CollapsingToolbarLayout_expandedTitleTextAppearance, 0));
+ }
+ if (a.hasValue(R.styleable.CollapsingToolbarLayout_collapsedTitleTextAppearance)) {
+ mCollapsingTextHelper.setCollapsedTextAppearance(
+ a.getResourceId(
+ R.styleable.CollapsingToolbarLayout_collapsedTitleTextAppearance, 0));
+
+ }
setContentScrim(a.getDrawable(R.styleable.CollapsingToolbarLayout_contentScrim));
setStatusBarScrim(a.getDrawable(R.styleable.CollapsingToolbarLayout_statusBarScrim));
@@ -344,9 +360,11 @@
mCollapsingTextHelper.setCollapsedBounds(mTmpRect.left, bottom - mTmpRect.height(),
mTmpRect.right, bottom);
// Update the expanded bounds
- mCollapsingTextHelper.setExpandedBounds(left + mExpandedMarginLeft,
- mTmpRect.bottom + mExpandedMarginTop, right - mExpandedMarginRight,
- bottom - mExpandedMarginBottom);
+ mCollapsingTextHelper.setExpandedBounds(
+ mExpandedMarginLeft,
+ mTmpRect.bottom + mExpandedMarginTop,
+ right - left - mExpandedMarginRight,
+ bottom - top - mExpandedMarginBottom);
mCollapsingTextHelper.recalculate();
}
@@ -566,6 +584,26 @@
}
/**
+ * Sets the horizontal alignment of the collapsed title and the vertical gravity that will
+ * be used when there is extra space in the collapsed bounds beyond what is required for
+ * the title itself.
+ *
+ * @attr ref android.support.design.R.styleable#CollapsingToolbarLayout_collapsedTitleGravity
+ */
+ public void setCollapsedTitleGravity(int gravity) {
+ mCollapsingTextHelper.setExpandedTextGravity(gravity);
+ }
+
+ /**
+ * Returns the horizontal and vertical alignment for title when collapsed.
+ *
+ * @attr ref android.support.design.R.styleable#CollapsingToolbarLayout_collapsedTitleGravity
+ */
+ public int getCollapsedTitleGravity() {
+ return mCollapsingTextHelper.getCollapsedTextGravity();
+ }
+
+ /**
* Sets the text color and size for the expanded title from the specified
* TextAppearance resource.
*
@@ -585,6 +623,26 @@
}
/**
+ * Sets the horizontal alignment of the expanded title and the vertical gravity that will
+ * be used when there is extra space in the expanded bounds beyond what is required for
+ * the title itself.
+ *
+ * @attr ref android.support.design.R.styleable#CollapsingToolbarLayout_expandedTitleGravity
+ */
+ public void setExpandedTitleGravity(int gravity) {
+ mCollapsingTextHelper.setExpandedTextGravity(gravity);
+ }
+
+ /**
+ * Returns the horizontal and vertical alignment for title when expanded.
+ *
+ * @attr ref android.support.design.R.styleable#CollapsingToolbarLayout_expandedTitleGravity
+ */
+ public int getExpandedTitleGravity() {
+ return mCollapsingTextHelper.getExpandedTextGravity();
+ }
+
+ /**
* The additional offset used to define when to trigger the scrim visibility change.
*/
final int getScrimTriggerOffset() {
diff --git a/design/src/android/support/design/widget/CoordinatorLayout.java b/design/src/android/support/design/widget/CoordinatorLayout.java
index 8675e6d..d12799d 100644
--- a/design/src/android/support/design/widget/CoordinatorLayout.java
+++ b/design/src/android/support/design/widget/CoordinatorLayout.java
@@ -87,6 +87,9 @@
static final String TAG = "CoordinatorLayout";
static final String WIDGET_PACKAGE_NAME = CoordinatorLayout.class.getPackage().getName();
+ private static final int TYPE_ON_INTERCEPT = 0;
+ private static final int TYPE_ON_TOUCH = 1;
+
static {
if (Build.VERSION.SDK_INT >= 21) {
TOP_SORTED_CHILDREN_COMPARATOR = new ViewElevationComparator();
@@ -317,7 +320,7 @@
}
}
- private boolean performIntercept(MotionEvent ev) {
+ private boolean performIntercept(MotionEvent ev, final int type) {
boolean intercepted = false;
boolean newBlock = false;
@@ -344,14 +347,30 @@
cancelEvent = MotionEvent.obtain(now, now,
MotionEvent.ACTION_CANCEL, 0.0f, 0.0f, 0);
}
- b.onInterceptTouchEvent(this, child, cancelEvent);
+ switch (type) {
+ case TYPE_ON_INTERCEPT:
+ b.onInterceptTouchEvent(this, child, cancelEvent);
+ break;
+ case TYPE_ON_TOUCH:
+ b.onTouchEvent(this, child, cancelEvent);
+ break;
+ }
}
continue;
}
- if (!intercepted && b != null
- && (intercepted = b.onInterceptTouchEvent(this, child, ev))) {
- mBehaviorTouchView = child;
+ if (!intercepted && b != null) {
+ switch (type) {
+ case TYPE_ON_INTERCEPT:
+ intercepted = b.onInterceptTouchEvent(this, child, ev);
+ break;
+ case TYPE_ON_TOUCH:
+ intercepted = b.onTouchEvent(this, child, ev);
+ break;
+ }
+ if (intercepted) {
+ mBehaviorTouchView = child;
+ }
}
// Don't keep going if we're not allowing interaction below this.
@@ -382,7 +401,7 @@
resetTouchBehaviors();
}
- final boolean intercepted = performIntercept(ev);
+ final boolean intercepted = performIntercept(ev, TYPE_ON_INTERCEPT);
if (cancelEvent != null) {
cancelEvent.recycle();
@@ -403,13 +422,13 @@
final int action = MotionEventCompat.getActionMasked(ev);
- if (mBehaviorTouchView != null || (cancelSuper = performIntercept(ev))) {
+ if (mBehaviorTouchView != null || (cancelSuper = performIntercept(ev, TYPE_ON_TOUCH))) {
// Safe since performIntercept guarantees that
// mBehaviorTouchView != null if it returns true
final LayoutParams lp = (LayoutParams) mBehaviorTouchView.getLayoutParams();
final Behavior b = lp.getBehavior();
if (b != null) {
- b.onTouchEvent(this, mBehaviorTouchView, ev);
+ handled = b.onTouchEvent(this, mBehaviorTouchView, ev);
}
}
diff --git a/design/src/android/support/design/widget/FloatingActionButton.java b/design/src/android/support/design/widget/FloatingActionButton.java
index b275174..2efee17 100644
--- a/design/src/android/support/design/widget/FloatingActionButton.java
+++ b/design/src/android/support/design/widget/FloatingActionButton.java
@@ -126,7 +126,8 @@
mImpl = new FloatingActionButtonEclairMr1(this, delegate);
}
- final int maxContentSize = (int) getResources().getDimension(R.dimen.fab_content_size);
+ final int maxContentSize = (int) getResources().getDimension(
+ R.dimen.design_fab_content_size);
mContentPadding = (getSizeDimension() - maxContentSize) / 2;
mImpl.setBackgroundDrawable(background, mBackgroundTint,
@@ -257,10 +258,10 @@
final int getSizeDimension() {
switch (mSize) {
case SIZE_MINI:
- return getResources().getDimensionPixelSize(R.dimen.fab_size_mini);
+ return getResources().getDimensionPixelSize(R.dimen.design_fab_size_mini);
case SIZE_NORMAL:
default:
- return getResources().getDimensionPixelSize(R.dimen.fab_size_normal);
+ return getResources().getDimensionPixelSize(R.dimen.design_fab_size_normal);
}
}
diff --git a/design/src/android/support/design/widget/NavigationView.java b/design/src/android/support/design/widget/NavigationView.java
index 3e83863..4e325fa 100644
--- a/design/src/android/support/design/widget/NavigationView.java
+++ b/design/src/android/support/design/widget/NavigationView.java
@@ -30,6 +30,7 @@
import android.support.annotation.Nullable;
import android.support.annotation.StyleRes;
import android.support.design.R;
+import android.support.design.internal.NavigationMenu;
import android.support.design.internal.NavigationMenuPresenter;
import android.support.design.internal.ScrimInsetsFrameLayout;
import android.support.v4.content.ContextCompat;
@@ -75,8 +76,8 @@
private static final int PRESENTER_NAVIGATION_VIEW_ID = 1;
- private final MenuBuilder mMenu;
- private final NavigationMenuPresenter mPresenter;
+ private final NavigationMenu mMenu;
+ private final NavigationMenuPresenter mPresenter = new NavigationMenuPresenter();
private OnNavigationItemSelectedListener mListener;
private int mMaxWidth;
@@ -95,7 +96,7 @@
super(context, attrs, defStyleAttr);
// Create the menu
- mMenu = new MenuBuilder(context);
+ mMenu = new NavigationMenu(context);
// Custom attributes
TypedArray a = context.obtainStyledAttributes(attrs,
@@ -139,10 +140,6 @@
final Drawable itemBackground = a.getDrawable(R.styleable.NavigationView_itemBackground);
- if (a.hasValue(R.styleable.NavigationView_menu)) {
- inflateMenu(a.getResourceId(R.styleable.NavigationView_menu, 0));
- }
-
mMenu.setCallback(new MenuBuilder.Callback() {
@Override
public boolean onMenuItemSelected(MenuBuilder menu, MenuItem item) {
@@ -152,7 +149,6 @@
@Override
public void onMenuModeChange(MenuBuilder menu) {}
});
- mPresenter = new NavigationMenuPresenter();
mPresenter.setId(PRESENTER_NAVIGATION_VIEW_ID);
mPresenter.initForMenu(context, mMenu);
mPresenter.setItemIconTintList(itemIconTint);
@@ -164,6 +160,10 @@
mMenu.addMenuPresenter(mPresenter);
addView((View) mPresenter.getMenuView(this));
+ if (a.hasValue(R.styleable.NavigationView_menu)) {
+ inflateMenu(a.getResourceId(R.styleable.NavigationView_menu, 0));
+ }
+
if (a.hasValue(R.styleable.NavigationView_headerLayout)) {
inflateHeaderView(a.getResourceId(R.styleable.NavigationView_headerLayout, 0));
}
@@ -223,14 +223,10 @@
* @param resId ID of a menu resource to inflate
*/
public void inflateMenu(int resId) {
- if (mPresenter != null) {
- mPresenter.setUpdateSuspended(true);
- }
+ mPresenter.setUpdateSuspended(true);
getMenuInflater().inflate(resId, mMenu);
- if (mPresenter != null) {
- mPresenter.setUpdateSuspended(false);
- mPresenter.updateMenuView(false);
- }
+ mPresenter.setUpdateSuspended(false);
+ mPresenter.updateMenuView(false);
}
/**
diff --git a/design/src/android/support/design/widget/Snackbar.java b/design/src/android/support/design/widget/Snackbar.java
index 83888ce..625b325 100644
--- a/design/src/android/support/design/widget/Snackbar.java
+++ b/design/src/android/support/design/widget/Snackbar.java
@@ -23,8 +23,9 @@
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
+import android.support.annotation.ColorInt;
import android.support.annotation.IntDef;
-import android.support.annotation.Nullable;
+import android.support.annotation.NonNull;
import android.support.annotation.StringRes;
import android.support.design.R;
import android.support.v4.view.ViewCompat;
@@ -38,6 +39,7 @@
import android.view.ViewParent;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
+import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.TextView;
@@ -156,7 +158,7 @@
mContext = parent.getContext();
LayoutInflater inflater = LayoutInflater.from(mContext);
- mView = (SnackbarLayout) inflater.inflate(R.layout.layout_snackbar, mParent, false);
+ mView = (SnackbarLayout) inflater.inflate(R.layout.design_layout_snackbar, mParent, false);
}
/**
@@ -176,7 +178,8 @@
* @param duration How long to display the message. Either {@link #LENGTH_SHORT} or {@link
* #LENGTH_LONG}
*/
- public static Snackbar make(View view, CharSequence text, @Duration int duration) {
+ public static Snackbar make(@NonNull View view, @NonNull CharSequence text,
+ @Duration int duration) {
Snackbar snackbar = new Snackbar(findSuitableParent(view));
snackbar.setText(text);
snackbar.setDuration(duration);
@@ -200,11 +203,10 @@
* @param duration How long to display the message. Either {@link #LENGTH_SHORT} or {@link
* #LENGTH_LONG}
*/
- public static Snackbar make(View view, int resId, @Duration int duration) {
+ public static Snackbar make(@NonNull View view, @StringRes int resId, @Duration int duration) {
return make(view, view.getResources().getText(resId), duration);
}
- @Nullable
private static ViewGroup findSuitableParent(View view) {
ViewGroup fallback = null;
do {
@@ -285,7 +287,7 @@
* Sets the text color of the action specified in
* {@link #setAction(CharSequence, View.OnClickListener)}.
*/
- public Snackbar setActionTextColor(int color) {
+ public Snackbar setActionTextColor(@ColorInt int color) {
final TextView tv = mView.getActionView();
tv.setTextColor(color);
return this;
@@ -296,7 +298,7 @@
*
* @param message The new text for the Toast.
*/
- public Snackbar setText(CharSequence message) {
+ public Snackbar setText(@NonNull CharSequence message) {
final TextView tv = mView.getMessageView();
tv.setText(message);
return this;
@@ -336,6 +338,7 @@
/**
* Returns the {@link Snackbar}'s view.
*/
+ @NonNull
public View getView() {
return mView;
}
@@ -448,7 +451,7 @@
}
}).start();
} else {
- Animation anim = AnimationUtils.loadAnimation(mView.getContext(), R.anim.snackbar_in);
+ Animation anim = AnimationUtils.loadAnimation(mView.getContext(), R.anim.design_snackbar_in);
anim.setInterpolator(FAST_OUT_SLOW_IN_INTERPOLATOR);
anim.setDuration(ANIMATION_DURATION);
anim.setAnimationListener(new Animation.AnimationListener() {
@@ -487,7 +490,7 @@
}
}).start();
} else {
- Animation anim = AnimationUtils.loadAnimation(mView.getContext(), R.anim.snackbar_out);
+ Animation anim = AnimationUtils.loadAnimation(mView.getContext(), R.anim.design_snackbar_out);
anim.setInterpolator(FAST_OUT_SLOW_IN_INTERPOLATOR);
anim.setDuration(ANIMATION_DURATION);
anim.setAnimationListener(new Animation.AnimationListener() {
@@ -548,7 +551,7 @@
*/
public static class SnackbarLayout extends LinearLayout {
private TextView mMessageView;
- private TextView mActionView;
+ private Button mActionView;
private int mMaxWidth;
private int mMaxInlineActionWidth;
@@ -580,21 +583,21 @@
// Now inflate our content. We need to do this manually rather than using an <include>
// in the layout since older versions of the Android do not inflate includes with
// the correct Context.
- LayoutInflater.from(context).inflate(R.layout.layout_snackbar_include, this);
+ LayoutInflater.from(context).inflate(R.layout.design_layout_snackbar_include, this);
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
mMessageView = (TextView) findViewById(R.id.snackbar_text);
- mActionView = (TextView) findViewById(R.id.snackbar_action);
+ mActionView = (Button) findViewById(R.id.snackbar_action);
}
TextView getMessageView() {
return mMessageView;
}
- TextView getActionView() {
+ Button getActionView() {
return mActionView;
}
@@ -608,9 +611,9 @@
}
final int multiLineVPadding = getResources().getDimensionPixelSize(
- R.dimen.snackbar_padding_vertical_2lines);
+ R.dimen.design_snackbar_padding_vertical_2lines);
final int singleLineVPadding = getResources().getDimensionPixelSize(
- R.dimen.snackbar_padding_vertical);
+ R.dimen.design_snackbar_padding_vertical);
final boolean isMultiLine = mMessageView.getLayout().getLineCount() > 1;
boolean remeasure = false;
diff --git a/design/src/android/support/design/widget/SwipeDismissBehavior.java b/design/src/android/support/design/widget/SwipeDismissBehavior.java
index 2a503a2..fc29201 100644
--- a/design/src/android/support/design/widget/SwipeDismissBehavior.java
+++ b/design/src/android/support/design/widget/SwipeDismissBehavior.java
@@ -305,8 +305,10 @@
@Override
public void onViewPositionChanged(View child, int left, int top, int dx, int dy) {
- final float startAlphaDistance = child.getWidth() * mAlphaStartSwipeDistance;
- final float endAlphaDistance = child.getWidth() * mAlphaEndSwipeDistance;
+ final float startAlphaDistance = mOriginalCapturedViewLeft
+ + child.getWidth() * mAlphaStartSwipeDistance;
+ final float endAlphaDistance = mOriginalCapturedViewLeft
+ + child.getWidth() * mAlphaEndSwipeDistance;
if (left <= startAlphaDistance) {
ViewCompat.setAlpha(child, 1f);
@@ -368,14 +370,6 @@
}
/**
- * Linear interpolation between {@code startValue} and {@code endValue} by the fraction {@code
- * fraction}.
- */
- static float lerp(float startValue, float endValue, float fraction) {
- return startValue + (fraction * (endValue - startValue));
- }
-
- /**
* The fraction that {@code value} is between {@code startValue} and {@code endValue}.
*/
static float fraction(float startValue, float endValue, float value) {
diff --git a/design/src/android/support/design/widget/TabLayout.java b/design/src/android/support/design/widget/TabLayout.java
index ae052fd..b2d468c 100755
--- a/design/src/android/support/design/widget/TabLayout.java
+++ b/design/src/android/support/design/widget/TabLayout.java
@@ -1225,13 +1225,13 @@
// If there isn't a custom view, we'll us our own in-built layouts
if (mIconView == null) {
ImageView iconView = (ImageView) LayoutInflater.from(getContext())
- .inflate(R.layout.layout_tab_icon, this, false);
+ .inflate(R.layout.design_layout_tab_icon, this, false);
addView(iconView, 0);
mIconView = iconView;
}
if (mTextView == null) {
TextView textView = (TextView) LayoutInflater.from(getContext())
- .inflate(R.layout.layout_tab_text, this, false);
+ .inflate(R.layout.design_layout_tab_text, this, false);
addView(textView);
mTextView = textView;
}
diff --git a/design/src/android/support/design/widget/TextInputLayout.java b/design/src/android/support/design/widget/TextInputLayout.java
index 4332d10..8981bea 100644
--- a/design/src/android/support/design/widget/TextInputLayout.java
+++ b/design/src/android/support/design/widget/TextInputLayout.java
@@ -17,13 +17,14 @@
package android.support.design.widget;
import android.content.Context;
+import android.content.res.ColorStateList;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Typeface;
-import android.os.Handler;
-import android.os.Message;
+import android.support.annotation.Nullable;
+import android.support.annotation.StyleRes;
import android.support.design.R;
import android.support.v4.view.AccessibilityDelegateCompat;
import android.support.v4.view.ViewCompat;
@@ -49,42 +50,24 @@
*
* Also supports showing an error via {@link #setErrorEnabled(boolean)} and
* {@link #setError(CharSequence)}.
- *
- * <p>Please note: this class sets a {@link android.view.View.OnFocusChangeListener} on the wrapped
- * {@link EditText}. If you need to set your own listener, then you should wrap the existing one
- * and forward the call like so:
- * <pre>
- * TextInputLayout inputLayout = ...;
- * EditText editText = inputLayout.getEditText();
- * final OnFocusChangeListener existing = editText.getOnFocusChangeListener();
- *
- * editText.setOnFocusChangeListener(new OnFocusChangeListener() {
- * public void onFocusChange(View view, boolean focused) {
- * existing.onFocusChange(view, focused);
- *
- * // Your custom logic
- * }
- * });
- * </pre>
- * </p>
*/
public class TextInputLayout extends LinearLayout {
private static final int ANIMATION_DURATION = 200;
- private static final int MSG_UPDATE_LABEL = 0;
private EditText mEditText;
private CharSequence mHint;
+ private Paint mTmpPaint;
+
private boolean mErrorEnabled;
private TextView mErrorView;
private int mErrorTextAppearance;
- private int mDefaultTextColor;
- private int mFocusedTextColor;
+ private ColorStateList mDefaultTextColor;
+ private ColorStateList mFocusedTextColor;
- private final CollapsingTextHelper mCollapsingTextHelper;
- private final Handler mHandler;
+ private final CollapsingTextHelper mCollapsingTextHelper = new CollapsingTextHelper(this);
private ValueAnimatorCompat mAnimator;
@@ -93,52 +76,42 @@
}
public TextInputLayout(Context context, AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public TextInputLayout(Context context, AttributeSet attrs, int defStyleAttr) {
+ // Can't call through to super(Context, AttributeSet, int) since it doesn't exist on API 10
super(context, attrs);
setOrientation(VERTICAL);
setWillNotDraw(false);
-
- mCollapsingTextHelper = new CollapsingTextHelper(this);
- mHandler = new Handler(new Handler.Callback() {
- @Override
- public boolean handleMessage(Message message) {
- switch (message.what) {
- case MSG_UPDATE_LABEL:
- updateLabelVisibility(true);
- return true;
- }
- return false;
- }
- });
+ setAddStatesFromChildren(true);
mCollapsingTextHelper.setTextSizeInterpolator(AnimationUtils.FAST_OUT_SLOW_IN_INTERPOLATOR);
mCollapsingTextHelper.setPositionInterpolator(new AccelerateInterpolator());
- mCollapsingTextHelper.setCollapsedTextVerticalGravity(Gravity.TOP);
+ mCollapsingTextHelper.setCollapsedTextGravity(Gravity.TOP);
final TypedArray a = context.obtainStyledAttributes(attrs,
- R.styleable.TextInputLayout, 0, R.style.Widget_Design_TextInputLayout);
+ R.styleable.TextInputLayout, defStyleAttr, R.style.Widget_Design_TextInputLayout);
mHint = a.getText(R.styleable.TextInputLayout_android_hint);
+ if (a.hasValue(R.styleable.TextInputLayout_android_textColorHint)) {
+ mDefaultTextColor = mFocusedTextColor =
+ a.getColorStateList(R.styleable.TextInputLayout_android_textColorHint);
+ }
+
final int hintAppearance = a.getResourceId(
R.styleable.TextInputLayout_hintTextAppearance, -1);
if (hintAppearance != -1) {
- mCollapsingTextHelper.setCollapsedTextAppearance(hintAppearance);
+ setHintTextAppearance(
+ a.getResourceId(R.styleable.TextInputLayout_hintTextAppearance, 0));
}
mErrorTextAppearance = a.getResourceId(R.styleable.TextInputLayout_errorTextAppearance, 0);
final boolean errorEnabled = a.getBoolean(R.styleable.TextInputLayout_errorEnabled, false);
-
- mDefaultTextColor = getThemeAttrColor(android.R.attr.textColorHint);
- mFocusedTextColor = mCollapsingTextHelper.getCollapsedTextColor();
-
- mCollapsingTextHelper.setCollapsedTextColor(mDefaultTextColor);
- mCollapsingTextHelper.setExpandedTextColor(mDefaultTextColor);
-
a.recycle();
- if (errorEnabled) {
- setErrorEnabled(true);
- }
+ setErrorEnabled(errorEnabled);
if (ViewCompat.getImportantForAccessibility(this)
== ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_AUTO) {
@@ -153,8 +126,8 @@
@Override
public void addView(View child, int index, ViewGroup.LayoutParams params) {
if (child instanceof EditText) {
- params = setEditText((EditText) child, params);
- super.addView(child, 0, params);
+ setEditText((EditText) child);
+ super.addView(child, 0, updateEditTextMargin(params));
} else {
// Carry on adding the View...
super.addView(child, index, params);
@@ -166,11 +139,11 @@
*
* @param typeface typeface to use, or {@code null} to use the default.
*/
- public void setTypeface(Typeface typeface) {
+ public void setTypeface(@Nullable Typeface typeface) {
mCollapsingTextHelper.setTypeface(typeface);
}
- private LayoutParams setEditText(EditText editText, ViewGroup.LayoutParams lp) {
+ private void setEditText(EditText editText) {
// If we already have an EditText, throw an exception
if (mEditText != null) {
throw new IllegalArgumentException("We already have an EditText, can only have one");
@@ -185,29 +158,20 @@
mEditText.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
- mHandler.sendEmptyMessage(MSG_UPDATE_LABEL);
+ updateLabelVisibility(true);
}
@Override
- public void beforeTextChanged(CharSequence s, int start, int count, int after) {
- }
+ public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
- public void onTextChanged(CharSequence s, int start, int before, int count) {
- }
+ public void onTextChanged(CharSequence s, int start, int before, int count) {}
});
- // Use the EditText's hint colors since the developer may have changed it
- mDefaultTextColor = mEditText.getHintTextColors().getDefaultColor();
-
- // Add focus listener to the EditText so that we can notify the label that it is activated.
- // Allows the use of a ColorStateList for the text color on the label
- mEditText.setOnFocusChangeListener(new OnFocusChangeListener() {
- @Override
- public void onFocusChange(View view, boolean focused) {
- mHandler.sendEmptyMessage(MSG_UPDATE_LABEL);
- }
- });
+ // Use the EditText's hint colors if we don't have one set
+ if (mDefaultTextColor == null) {
+ mDefaultTextColor = mEditText.getHintTextColors();
+ }
// If we do not have a valid hint, try and retrieve it from the EditText
if (TextUtils.isEmpty(mHint)) {
@@ -224,25 +188,33 @@
// Update the label visibility with no animation
updateLabelVisibility(false);
+ }
- // Create a new FrameLayout.LayoutParams so that we can add enough top margin
+ private LayoutParams updateEditTextMargin(ViewGroup.LayoutParams lp) {
+ // Create/update the LayoutParams so that we can add enough top margin
// to the EditText so make room for the label
- LayoutParams newLp = new LayoutParams(lp);
- Paint paint = new Paint();
- paint.setTypeface(mCollapsingTextHelper.getTypeface());
- paint.setTextSize(mCollapsingTextHelper.getExpandedTextSize());
- newLp.topMargin = (int) -paint.ascent();
+ LayoutParams llp = lp instanceof LayoutParams ? (LayoutParams) lp : new LayoutParams(lp);
- return newLp;
+ if (mTmpPaint == null) {
+ mTmpPaint = new Paint();
+ }
+ mTmpPaint.setTypeface(mCollapsingTextHelper.getTypeface());
+ mTmpPaint.setTextSize(mCollapsingTextHelper.getCollapsedTextSize());
+ llp.topMargin = (int) -mTmpPaint.ascent();
+
+ return llp;
}
private void updateLabelVisibility(boolean animate) {
- boolean hasText = !TextUtils.isEmpty(mEditText.getText());
- boolean isFocused = mEditText.isFocused();
+ boolean hasText = mEditText != null && !TextUtils.isEmpty(mEditText.getText());
+ boolean isFocused = arrayContains(getDrawableState(), android.R.attr.state_focused);
- mCollapsingTextHelper.setExpandedTextColor(mDefaultTextColor);
- mCollapsingTextHelper.setCollapsedTextColor(
- isFocused ? mFocusedTextColor : mDefaultTextColor);
+ if (mDefaultTextColor != null && mFocusedTextColor != null) {
+ mCollapsingTextHelper.setExpandedTextColor(mDefaultTextColor.getDefaultColor());
+ mCollapsingTextHelper.setCollapsedTextColor(isFocused
+ ? mFocusedTextColor.getDefaultColor()
+ : mDefaultTextColor.getDefaultColor());
+ }
if (hasText || isFocused) {
// We should be showing the label so do so if it isn't already
@@ -254,16 +226,19 @@
}
/**
- * @return the {@link android.widget.EditText} text input
+ * Returns the {@link android.widget.EditText} used for text input.
*/
+ @Nullable
public EditText getEditText() {
return mEditText;
}
/**
* Set the hint to be displayed in the floating label
+ *
+ * @attr ref android.support.design.R.styleable#TextInputLayout_android_hint
*/
- public void setHint(CharSequence hint) {
+ public void setHint(@Nullable CharSequence hint) {
mHint = hint;
mCollapsingTextHelper.setText(hint);
@@ -271,9 +246,40 @@
}
/**
+ * Returns the hint which is displayed in the floating label.
+ *
+ * @attr ref android.support.design.R.styleable#TextInputLayout_android_hint
+ */
+ @Nullable
+ public CharSequence getHint() {
+ return mHint;
+ }
+
+ /**
+ * Sets the hint text color, size, style from the specified TextAppearance resource.
+ *
+ * @attr ref android.support.design.R.styleable#TextInputLayout_hintTextAppearance
+ */
+ public void setHintTextAppearance(@StyleRes int resId) {
+ mCollapsingTextHelper.setCollapsedTextAppearance(resId);
+ mFocusedTextColor = ColorStateList.valueOf(mCollapsingTextHelper.getCollapsedTextColor());
+
+ if (mEditText != null) {
+ updateLabelVisibility(false);
+
+ // Text size might have changed so update the top margin
+ LayoutParams lp = updateEditTextMargin(mEditText.getLayoutParams());
+ mEditText.setLayoutParams(lp);
+ mEditText.requestLayout();
+ }
+ }
+
+ /**
* Whether the error functionality is enabled or not in this layout. Enabling this
* functionality before setting an error message via {@link #setError(CharSequence)}, will mean
* that this layout will not change size when an error is displayed.
+ *
+ * @attr ref android.support.design.R.styleable#TextInputLayout_errorEnabled
*/
public void setErrorEnabled(boolean enabled) {
if (mErrorEnabled != enabled) {
@@ -301,6 +307,17 @@
}
/**
+ * Returns whether the error functionality is enabled or not in this layout.
+ *
+ * @attr ref android.support.design.R.styleable#TextInputLayout_errorEnabled
+ *
+ * @see #setErrorEnabled(boolean)
+ */
+ public boolean isErrorEnabled() {
+ return mErrorEnabled;
+ }
+
+ /**
* Sets an error message that will be displayed below our {@link EditText}. If the
* {@code error} is {@code null}, the error message will be cleared.
* <p>
@@ -308,8 +325,10 @@
* it will be automatically enabled if {@code error} is not empty.
*
* @param error Error message to display, or null to clear
+ *
+ * @see #getError()
*/
- public void setError(CharSequence error) {
+ public void setError(@Nullable CharSequence error) {
if (!mErrorEnabled) {
if (TextUtils.isEmpty(error)) {
// If error isn't enabled, and the error is empty, just return
@@ -339,6 +358,7 @@
@Override
public void onAnimationEnd(View view) {
view.setVisibility(INVISIBLE);
+ mErrorView.setText(null);
}
}).start();
}
@@ -347,6 +367,20 @@
sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED);
}
+ /**
+ * Returns the error message that was set to be displayed with
+ * {@link #setError(CharSequence)}, or <code>null</code> if no error was set
+ * or if error displaying is not enabled.
+ *
+ * @see #setError(CharSequence)
+ */
+ public CharSequence getError() {
+ if (mErrorEnabled && mErrorView != null && mErrorView.getVisibility() == VISIBLE) {
+ return mErrorView.getText();
+ }
+ return null;
+ }
+
@Override
public void draw(Canvas canvas) {
super.draw(canvas);
@@ -374,7 +408,17 @@
}
}
+ @Override
+ public void refreshDrawableState() {
+ super.refreshDrawableState();
+ // Drawable state has changed so see if we need to update the label
+ updateLabelVisibility(ViewCompat.isLaidOut(this));
+ }
+
private void collapseHint(boolean animate) {
+ if (mAnimator != null && mAnimator.isRunning()) {
+ mAnimator.cancel();
+ }
if (animate) {
animateToExpansionFraction(1f);
} else {
@@ -383,6 +427,9 @@
}
private void expandHint(boolean animate) {
+ if (mAnimator != null && mAnimator.isRunning()) {
+ mAnimator.cancel();
+ }
if (animate) {
animateToExpansionFraction(0f);
} else {
@@ -391,6 +438,9 @@
}
private void animateToExpansionFraction(final float target) {
+ if (mCollapsingTextHelper.getExpansionFraction() == target) {
+ return;
+ }
if (mAnimator == null) {
mAnimator = ViewUtils.createAnimator();
mAnimator.setInterpolator(AnimationUtils.LINEAR_INTERPOLATOR);
@@ -401,8 +451,6 @@
mCollapsingTextHelper.setExpansionFraction(animator.getAnimatedFloatValue());
}
});
- } else if (mAnimator.isRunning()) {
- mAnimator.cancel();
}
mAnimator.setFloatValues(mCollapsingTextHelper.getExpansionFraction(), target);
mAnimator.start();
@@ -453,4 +501,13 @@
}
}
}
+
+ private static boolean arrayContains(int[] array, int value) {
+ for (int v : array) {
+ if (v == value) {
+ return true;
+ }
+ }
+ return false;
+ }
}
\ No newline at end of file
diff --git a/v13/api/22.2.1.txt b/v13/api/22.2.1.txt
new file mode 100644
index 0000000..6b070c5
--- /dev/null
+++ b/v13/api/22.2.1.txt
@@ -0,0 +1,32 @@
+package android.support.v13.app {
+
+ public class FragmentCompat {
+ ctor public FragmentCompat();
+ method public static void setMenuVisibility(android.app.Fragment, boolean);
+ method public static void setUserVisibleHint(android.app.Fragment, boolean);
+ }
+
+ 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 void setup(android.content.Context, android.app.FragmentManager);
+ method public void setup(android.content.Context, android.app.FragmentManager, int);
+ }
+
+}
+
diff --git a/v17/leanback/api/22.2.1.txt b/v17/leanback/api/22.2.1.txt
new file mode 100644
index 0000000..336a422
--- /dev/null
+++ b/v17/leanback/api/22.2.1.txt
@@ -0,0 +1,1570 @@
+package android.support.v17.leanback.app {
+
+ public final class BackgroundManager {
+ method public void attach(android.view.Window);
+ method public final int getColor();
+ method public android.graphics.drawable.Drawable getDefaultDimLayer();
+ method public 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 void release();
+ method public void setBitmap(android.graphics.Bitmap);
+ method public void setColor(int);
+ method public void setDimLayer(android.graphics.drawable.Drawable);
+ method public void setDrawable(android.graphics.drawable.Drawable);
+ method public void setThemeDrawableResourceId(int);
+ }
+
+ 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.PresenterSelector getPresenterSelector();
+ method public final void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ 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.PresenterSelector getPresenterSelector();
+ method public final void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public final void setPresenterSelector(android.support.v17.leanback.widget.PresenterSelector);
+ method public void setSelectedPosition(int);
+ method public void setSelectedPosition(int, boolean);
+ }
+
+ public class BrowseFragment extends android.support.v17.leanback.app.BrandedFragment {
+ ctor public BrowseFragment();
+ method public static android.os.Bundle createArgs(android.os.Bundle, java.lang.String, int);
+ method public 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.widget.OnItemViewClickedListener getOnItemViewClickedListener();
+ method public android.support.v17.leanback.widget.OnItemViewSelectedListener getOnItemViewSelectedListener();
+ method public final boolean isHeadersTransitionOnBackEnabled();
+ method public boolean isInHeadersTransition();
+ method public boolean isShowingHeaders();
+ 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 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 class BrowseSupportFragment extends android.support.v17.leanback.app.BrandedSupportFragment {
+ ctor public BrowseSupportFragment();
+ method public static android.os.Bundle createArgs(android.os.Bundle, java.lang.String, int);
+ method public 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.widget.OnItemViewClickedListener getOnItemViewClickedListener();
+ method public android.support.v17.leanback.widget.OnItemViewSelectedListener getOnItemViewSelectedListener();
+ method public final boolean isHeadersTransitionOnBackEnabled();
+ method public boolean isInHeadersTransition();
+ method public boolean isShowingHeaders();
+ 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 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 class DetailsFragment extends android.support.v17.leanback.app.BrandedFragment {
+ ctor public DetailsFragment();
+ method public android.support.v17.leanback.widget.ObjectAdapter getAdapter();
+ method public android.support.v17.leanback.widget.OnItemViewClickedListener getOnItemViewClickedListener();
+ method protected 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.OnItemViewClickedListener);
+ method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.OnItemViewSelectedListener);
+ 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 DetailsSupportFragment extends android.support.v17.leanback.app.BrandedSupportFragment {
+ ctor public DetailsSupportFragment();
+ method public android.support.v17.leanback.widget.ObjectAdapter getAdapter();
+ method public android.support.v17.leanback.widget.OnItemViewClickedListener getOnItemViewClickedListener();
+ method protected 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.OnItemViewClickedListener);
+ method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.OnItemViewSelectedListener);
+ 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 ErrorFragment extends android.app.Fragment {
+ ctor public ErrorFragment();
+ method public android.graphics.drawable.Drawable getBackgroundDrawable();
+ method public android.graphics.drawable.Drawable getBadgeDrawable();
+ 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 java.lang.String getTitle();
+ method public boolean isBackgroundTranslucent();
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+ method public void setBadgeDrawable(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);
+ method public void setTitle(java.lang.String);
+ }
+
+ public class ErrorSupportFragment extends android.support.v4.app.Fragment {
+ ctor public ErrorSupportFragment();
+ method public android.graphics.drawable.Drawable getBackgroundDrawable();
+ method public android.graphics.drawable.Drawable getBadgeDrawable();
+ 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 java.lang.String getTitle();
+ method public boolean isBackgroundTranslucent();
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+ method public void setBadgeDrawable(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);
+ method public void setTitle(java.lang.String);
+ }
+
+ 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 android.view.View getActionItemView(int);
+ method public java.util.List<android.support.v17.leanback.widget.GuidedAction> getActions();
+ 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 int getSelectedActionPosition();
+ method protected boolean isEntryTransitionEnabled();
+ 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.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 onGuidedActionFocused(android.support.v17.leanback.widget.GuidedAction);
+ method public int onProvideTheme();
+ method public void setActions(java.util.List<android.support.v17.leanback.widget.GuidedAction>);
+ method protected void setEntryTransitionEnabled(boolean);
+ method public void setSelectedActionPosition(int);
+ }
+
+ public class HeadersFragment extends android.support.v17.leanback.app.BaseRowFragment {
+ ctor public HeadersFragment();
+ method public void setOnHeaderClickedListener(android.support.v17.leanback.app.HeadersFragment.OnHeaderClickedListener);
+ method public void setOnHeaderViewSelectedListener(android.support.v17.leanback.app.HeadersFragment.OnHeaderViewSelectedListener);
+ }
+
+ static abstract interface HeadersFragment.OnHeaderClickedListener {
+ method public abstract void onHeaderClicked();
+ }
+
+ 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 void setOnHeaderClickedListener(android.support.v17.leanback.app.HeadersSupportFragment.OnHeaderClickedListener);
+ method public void setOnHeaderViewSelectedListener(android.support.v17.leanback.app.HeadersSupportFragment.OnHeaderViewSelectedListener);
+ }
+
+ static abstract interface HeadersSupportFragment.OnHeaderClickedListener {
+ method public abstract void onHeaderClicked();
+ }
+
+ 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 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 PlaybackControlGlue 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[]);
+ 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 void enableProgressUpdating(boolean);
+ method public android.content.Context getContext();
+ method public android.support.v17.leanback.widget.PlaybackControlsRow getControlsRow();
+ method public abstract int getCurrentPosition();
+ method public abstract int getCurrentSpeedId();
+ method public int[] getFastForwardSpeeds();
+ method public android.support.v17.leanback.app.PlaybackOverlayFragment getFragment();
+ 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.OnItemViewClickedListener getOnItemViewClickedListener();
+ 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 public boolean onKey(android.view.View, int, android.view.KeyEvent);
+ method protected void onMetadataChanged();
+ method protected abstract void onRowChanged(android.support.v17.leanback.widget.PlaybackControlsRow);
+ method protected void onStateChanged();
+ method protected abstract void pausePlayback();
+ method public void setControlsRow(android.support.v17.leanback.widget.PlaybackControlsRow);
+ method public void setFadingEnabled(boolean);
+ method public deprecated void setOnItemViewClickedListener(android.support.v17.leanback.widget.OnItemViewClickedListener);
+ method protected abstract void skipToNext();
+ method protected abstract void skipToPrevious();
+ method protected abstract void startPlayback(int);
+ 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 class PlaybackOverlayFragment extends android.support.v17.leanback.app.DetailsFragment {
+ ctor public PlaybackOverlayFragment();
+ method public int getBackgroundType();
+ method public android.support.v17.leanback.app.PlaybackOverlayFragment.OnFadeCompleteListener getFadeCompleteListener();
+ method public final android.support.v17.leanback.app.PlaybackOverlayFragment.InputEventHandler getInputEventHandler();
+ method public boolean isFadingEnabled();
+ method public void setBackgroundType(int);
+ method public void setFadeCompleteListener(android.support.v17.leanback.app.PlaybackOverlayFragment.OnFadeCompleteListener);
+ method public void setFadingEnabled(boolean);
+ method public final 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 interface PlaybackOverlayFragment.InputEventHandler {
+ method public abstract boolean handleInputEvent(android.view.InputEvent);
+ }
+
+ public static class PlaybackOverlayFragment.OnFadeCompleteListener {
+ ctor public PlaybackOverlayFragment.OnFadeCompleteListener();
+ method public void onFadeInComplete();
+ method public void onFadeOutComplete();
+ }
+
+ public class PlaybackOverlaySupportFragment extends android.support.v17.leanback.app.DetailsSupportFragment {
+ ctor public PlaybackOverlaySupportFragment();
+ method public int getBackgroundType();
+ method public android.support.v17.leanback.app.PlaybackOverlaySupportFragment.OnFadeCompleteListener getFadeCompleteListener();
+ method public final android.support.v17.leanback.app.PlaybackOverlaySupportFragment.InputEventHandler getInputEventHandler();
+ method public boolean isFadingEnabled();
+ method public void setBackgroundType(int);
+ method public void setFadeCompleteListener(android.support.v17.leanback.app.PlaybackOverlaySupportFragment.OnFadeCompleteListener);
+ method public void setFadingEnabled(boolean);
+ method public final 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 interface PlaybackOverlaySupportFragment.InputEventHandler {
+ method public abstract boolean handleInputEvent(android.view.InputEvent);
+ }
+
+ public static class PlaybackOverlaySupportFragment.OnFadeCompleteListener {
+ ctor public PlaybackOverlaySupportFragment.OnFadeCompleteListener();
+ method public void onFadeInComplete();
+ method public void onFadeOutComplete();
+ }
+
+ public class RowsFragment extends android.support.v17.leanback.app.BaseRowFragment {
+ ctor public RowsFragment();
+ method public void enableRowScaling(boolean);
+ method protected android.support.v17.leanback.widget.VerticalGridView findGridViewFromRoot(android.view.View);
+ method public android.support.v17.leanback.widget.OnItemViewClickedListener getOnItemViewClickedListener();
+ method public android.support.v17.leanback.widget.OnItemViewSelectedListener getOnItemViewSelectedListener();
+ method public void setExpand(boolean);
+ method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.OnItemViewClickedListener);
+ method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.OnItemViewSelectedListener);
+ }
+
+ public class RowsSupportFragment extends android.support.v17.leanback.app.BaseRowSupportFragment {
+ ctor public RowsSupportFragment();
+ method public void enableRowScaling(boolean);
+ method protected android.support.v17.leanback.widget.VerticalGridView findGridViewFromRoot(android.view.View);
+ method public android.support.v17.leanback.widget.OnItemViewClickedListener getOnItemViewClickedListener();
+ method public android.support.v17.leanback.widget.OnItemViewSelectedListener getOnItemViewSelectedListener();
+ method public void setExpand(boolean);
+ method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.OnItemViewClickedListener);
+ method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.OnItemViewSelectedListener);
+ }
+
+ 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 android.graphics.drawable.Drawable getBadgeDrawable();
+ method public android.content.Intent getRecognizerIntent();
+ 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 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 android.graphics.drawable.Drawable getBadgeDrawable();
+ method public android.content.Intent getRecognizerIntent();
+ 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 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.app.Fragment {
+ 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.v4.app.Fragment {
+ 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);
+ }
+
+}
+
+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 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);
+ }
+
+}
+
+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 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);
+ }
+
+ 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 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 public int getCardType();
+ method public int getExtraVisibility();
+ method public int getInfoVisibility();
+ method public boolean isSelectedAnimationDelayed();
+ method public void setCardType(int);
+ method public 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 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 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 void addClassPresenter(java.lang.Class<?>, android.support.v17.leanback.widget.Presenter);
+ 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.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);
+ 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 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 void setupHeaderItemFocusHighlight(android.support.v17.leanback.widget.VerticalGridView);
+ }
+
+ public abstract interface FragmentAnimationProvider {
+ method public abstract void onActivityEnter(java.util.List<android.animation.Animator>);
+ method public abstract void onActivityExit(java.util.List<android.animation.Animator>);
+ method public abstract void onFragmentEnter(java.util.List<android.animation.Animator>);
+ method public abstract void onFragmentExit(java.util.List<android.animation.Animator>);
+ method public abstract void onFragmentReenter(java.util.List<android.animation.Animator>);
+ method public abstract void onFragmentReturn(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 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 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 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.os.Handler mHandler;
+ 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 void onActivityEnter(java.util.List<android.animation.Animator>);
+ method public void onActivityExit(java.util.List<android.animation.Animator>);
+ method public android.view.View onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.support.v17.leanback.widget.GuidanceStylist.Guidance);
+ method public void onFragmentEnter(java.util.List<android.animation.Animator>);
+ method public void onFragmentExit(java.util.List<android.animation.Animator>);
+ method public void onFragmentReenter(java.util.List<android.animation.Animator>);
+ method public void onFragmentReturn(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 {
+ method public int getCheckSetId();
+ method public java.lang.CharSequence getDescription();
+ method public android.content.Intent getIntent();
+ method public java.lang.CharSequence getTitle();
+ method public boolean hasMultilineDescription();
+ method public boolean hasNext();
+ method public boolean infoOnly();
+ method public boolean isChecked();
+ method public boolean isEnabled();
+ method public void setChecked(boolean);
+ method public void setEnabled(boolean);
+ field public static final int DEFAULT_CHECK_SET_ID = 1; // 0x1
+ field public static final int NO_CHECK_SET = 0; // 0x0
+ field public static final int NO_DRAWABLE = 0; // 0x0
+ }
+
+ public static class GuidedAction.Builder {
+ ctor public GuidedAction.Builder();
+ method public android.support.v17.leanback.widget.GuidedAction build();
+ method public android.support.v17.leanback.widget.GuidedAction.Builder checkSetId(int);
+ method public android.support.v17.leanback.widget.GuidedAction.Builder checked(boolean);
+ method public android.support.v17.leanback.widget.GuidedAction.Builder description(java.lang.String);
+ method public android.support.v17.leanback.widget.GuidedAction.Builder enabled(boolean);
+ method public android.support.v17.leanback.widget.GuidedAction.Builder hasNext(boolean);
+ method public android.support.v17.leanback.widget.GuidedAction.Builder icon(android.graphics.drawable.Drawable);
+ method public android.support.v17.leanback.widget.GuidedAction.Builder iconResourceId(int, android.content.Context);
+ method public android.support.v17.leanback.widget.GuidedAction.Builder id(long);
+ method public android.support.v17.leanback.widget.GuidedAction.Builder infoOnly(boolean);
+ method public android.support.v17.leanback.widget.GuidedAction.Builder intent(android.content.Intent);
+ method public android.support.v17.leanback.widget.GuidedAction.Builder multilineDescription(boolean);
+ method public android.support.v17.leanback.widget.GuidedAction.Builder title(java.lang.String);
+ }
+
+ public class GuidedActionsStylist implements android.support.v17.leanback.widget.FragmentAnimationProvider {
+ ctor public GuidedActionsStylist();
+ method public android.support.v17.leanback.widget.VerticalGridView getActionsGridView();
+ method public void onActivityEnter(java.util.List<android.animation.Animator>);
+ method public void onActivityExit(java.util.List<android.animation.Animator>);
+ 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 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 void onFragmentEnter(java.util.List<android.animation.Animator>);
+ method public void onFragmentExit(java.util.List<android.animation.Animator>);
+ method public void onFragmentReenter(java.util.List<android.animation.Animator>);
+ method public void onFragmentReturn(java.util.List<android.animation.Animator>);
+ method public int onProvideItemLayoutId();
+ method public int onProvideLayoutId();
+ field protected android.support.v17.leanback.widget.VerticalGridView mActionsGridView;
+ field protected android.view.View mMainView;
+ field protected android.view.View mSelectorView;
+ }
+
+ public static class GuidedActionsStylist.ViewHolder {
+ ctor public GuidedActionsStylist.ViewHolder(android.view.View);
+ 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.ImageView getIconView();
+ method public android.widget.TextView getTitleView();
+ field public final android.view.View view;
+ }
+
+ public class HeaderItem {
+ ctor public HeaderItem(long, java.lang.String);
+ ctor public HeaderItem(java.lang.String);
+ method public final long getId();
+ method public final java.lang.String getName();
+ }
+
+ public class HorizontalGridView extends android.support.v7.widget.RecyclerView {
+ 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 ImageCardView(android.content.Context);
+ ctor public ImageCardView(android.content.Context, android.util.AttributeSet);
+ ctor public ImageCardView(android.content.Context, android.util.AttributeSet, int);
+ 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);
+ }
+
+ 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 final boolean isItemAlignmentOffsetWithPadding();
+ 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 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 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();
+ }
+
+ 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 public final boolean areChildRoundedCornersEnabled();
+ method protected android.support.v17.leanback.widget.RowPresenter.ViewHolder createRowViewHolder(android.view.ViewGroup);
+ 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 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 void setRecycledPoolSize(android.support.v17.leanback.widget.Presenter, int);
+ method public void setRowHeight(int);
+ method public final void setShadowEnabled(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 final android.support.v17.leanback.widget.ListRowPresenter getListRowPresenter();
+ }
+
+ 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 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 protected final void notifyChanged();
+ method protected 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);
+ }
+
+ public abstract interface OnItemViewClickedListener {
+ method public abstract void onItemClicked(android.support.v17.leanback.widget.Presenter.ViewHolder, java.lang.Object, android.support.v17.leanback.widget.RowPresenter.ViewHolder, android.support.v17.leanback.widget.Row);
+ }
+
+ public abstract interface OnItemViewSelectedListener {
+ method public abstract void onItemSelected(android.support.v17.leanback.widget.Presenter.ViewHolder, java.lang.Object, android.support.v17.leanback.widget.RowPresenter.ViewHolder, android.support.v17.leanback.widget.Row);
+ }
+
+ 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 int getBufferedProgress();
+ method public int getCurrentTime();
+ 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 int getTotalTime();
+ method public void setBufferedProgress(int);
+ method public void setCurrentTime(int);
+ method public final void setImageBitmap(android.content.Context, android.graphics.Bitmap);
+ method public final void setImageDrawable(android.graphics.drawable.Drawable);
+ method public final void setPrimaryActionsAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public final void setSecondaryActionsAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+ method public void setTotalTime(int);
+ }
+
+ 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 int OFF;
+ field public static 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 int OFF;
+ field public static 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.PlayPauseAction extends android.support.v17.leanback.widget.PlaybackControlsRow.MultiAction {
+ ctor public PlaybackControlsRow.PlayPauseAction(android.content.Context);
+ field public static int PAUSE;
+ field public static 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 int ALL;
+ field public static int NONE;
+ field public static 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 int OFF;
+ field public static 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 int OUTLINE;
+ field public static 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.RowPresenter {
+ 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.RowPresenter.ViewHolder {
+ field public final android.support.v17.leanback.widget.Presenter.ViewHolder mDescriptionViewHolder;
+ }
+
+ 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 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 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 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 public boolean canDrawOutOfBounds();
+ 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.OnItemViewClickedListener getOnItemViewClickedListener();
+ method public final android.support.v17.leanback.widget.OnItemViewSelectedListener getOnItemViewSelectedListener();
+ method public android.view.View.OnKeyListener getOnKeyListener();
+ method public final android.support.v17.leanback.widget.Row getRow();
+ method public final float getSelectLevel();
+ 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.OnItemViewClickedListener);
+ method public final void setOnItemViewSelectedListener(android.support.v17.leanback.widget.OnItemViewSelectedListener);
+ 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 android.graphics.drawable.Drawable getBadgeDrawable();
+ method public java.lang.CharSequence getHint();
+ method public java.lang.String getTitle();
+ method public void setBadgeDrawable(android.graphics.drawable.Drawable);
+ 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 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 ShadowOverlayContainer extends android.view.ViewGroup {
+ 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 void initialize(boolean, boolean, boolean);
+ method protected void onLayout(boolean, int, int, int, int);
+ 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 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 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.support.v17.leanback.widget.TitleView);
+ method public android.support.v17.leanback.widget.BrowseFrameLayout.OnFocusSearchListener getOnFocusSearchListener();
+ method public android.view.ViewGroup getSceneRoot();
+ method public android.support.v17.leanback.widget.TitleView getTitleView();
+ method public void showTitle(boolean);
+ }
+
+ public class TitleView extends android.widget.FrameLayout {
+ 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 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.String);
+ }
+
+ 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 public final void enableChildRoundedCorners(boolean);
+ method public final int getFocusZoomFactor();
+ 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 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.v7.widget.RecyclerView {
+ 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);
+ }
+
+}
+
diff --git a/v17/leanback/api/current.txt b/v17/leanback/api/current.txt
index 336a422..ced23aa 100644
--- a/v17/leanback/api/current.txt
+++ b/v17/leanback/api/current.txt
@@ -734,7 +734,9 @@
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 int getBackgroundColor();
+ 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();
@@ -744,12 +746,16 @@
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 void setBackgroundColor(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
diff --git a/v17/leanback/res/layout/lb_fullwidth_details_overview.xml b/v17/leanback/res/layout/lb_fullwidth_details_overview.xml
index 27c4258..614fc59 100644
--- a/v17/leanback/res/layout/lb_fullwidth_details_overview.xml
+++ b/v17/leanback/res/layout/lb_fullwidth_details_overview.xml
@@ -30,7 +30,6 @@
android:layout_width="match_parent"
android:layout_height="@dimen/lb_details_v2_card_height"
android:layout_marginTop="@dimen/lb_details_v2_blank_height"
- android:paddingStart="@dimen/lb_details_v2_left"
android:clipToPadding="false"
android:foreground="#ffffff"
android:elevation="@dimen/lb_details_overview_z"
@@ -42,34 +41,40 @@
android:orientation="vertical"
>
- <android.support.v17.leanback.widget.HorizontalGridView
- android:id="@+id/details_overview_actions"
- android:layout_width="match_parent"
- android:layout_height="@dimen/lb_details_v2_actions_height"
- android:gravity="center"
- android:clipToPadding="false"
- android:focusable="true"
- android:focusableInTouchMode="true"
- android:paddingStart="@dimen/lb_details_v2_description_margin_start"
- android:paddingEnd="@dimen/lb_details_v2_description_margin_end"
- lb:horizontalMargin="@dimen/lb_details_overview_action_items_margin"
- lb:rowHeight="@dimen/lb_details_v2_actions_height" />
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:id="@+id/details_overview_actions_background"
+ android:orientation="vertical" >
- <android.support.v17.leanback.widget.NonOverlappingFrameLayout
- android:id="@+id/details_overview_description"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:focusable="true"
- android:focusableInTouchMode="true"
- android:descendantFocusability="afterDescendants"
- android:gravity="top"
- android:paddingStart="@dimen/lb_details_v2_description_margin_start"
- android:paddingEnd="@dimen/lb_details_v2_description_margin_end"
- android:paddingTop="@dimen/lb_details_v2_description_margin_top"
- android:clipToPadding="false"
- android:clipChildren="false"
- />
+ <android.support.v17.leanback.widget.HorizontalGridView
+ android:id="@+id/details_overview_actions"
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/lb_details_v2_actions_height"
+ android:gravity="center"
+ android:clipToPadding="false"
+ android:focusable="true"
+ android:focusableInTouchMode="true"
+ android:paddingStart="@dimen/lb_details_v2_description_margin_start"
+ android:paddingEnd="@dimen/lb_details_v2_description_margin_end"
+ lb:horizontalMargin="@dimen/lb_details_overview_action_items_margin"
+ lb:rowHeight="@dimen/lb_details_v2_actions_height" />
+ </LinearLayout>
+ <android.support.v17.leanback.widget.NonOverlappingFrameLayout
+ android:id="@+id/details_overview_description"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:focusable="true"
+ android:focusableInTouchMode="true"
+ android:descendantFocusability="afterDescendants"
+ android:gravity="top"
+ android:paddingStart="@dimen/lb_details_v2_description_margin_start"
+ android:paddingEnd="@dimen/lb_details_v2_description_margin_end"
+ android:paddingTop="@dimen/lb_details_v2_description_margin_top"
+ android:clipToPadding="false"
+ android:clipChildren="false"
+ />
</LinearLayout>
</FrameLayout>
</FrameLayout>
diff --git a/v17/leanback/res/values/dimens.xml b/v17/leanback/res/values/dimens.xml
index c7664b9..275612e 100644
--- a/v17/leanback/res/values/dimens.xml
+++ b/v17/leanback/res/values/dimens.xml
@@ -105,6 +105,7 @@
<dimen name="lb_details_v2_blank_height">160dp</dimen>
<dimen name="lb_details_v2_card_height">540dp</dimen>
<dimen name="lb_details_v2_left">270dip</dimen>
+ <dimen name="lb_details_v2_logo_margin_start">128dp</dimen>
<dimen name="lb_details_v2_actions_height">56dip</dimen>
<dimen name="lb_details_v2_description_margin_start">24dp</dimen>
<dimen name="lb_details_v2_description_margin_end">54dp</dimen>
diff --git a/v17/leanback/src/android/support/v17/leanback/widget/FullWidthDetailsOverviewRowPresenter.java b/v17/leanback/src/android/support/v17/leanback/widget/FullWidthDetailsOverviewRowPresenter.java
index 20f62d2..8d84afa 100644
--- a/v17/leanback/src/android/support/v17/leanback/widget/FullWidthDetailsOverviewRowPresenter.java
+++ b/v17/leanback/src/android/support/v17/leanback/widget/FullWidthDetailsOverviewRowPresenter.java
@@ -91,6 +91,18 @@
public static final int STATE_SMALL = 2;
/**
+ * This is the alignment mode that the logo and description align to the starting edge of the
+ * overview view.
+ */
+ public static final int ALIGN_MODE_START = 0;
+ /**
+ * This is the alignment mode that the ending edge of logo and the starting edge of description
+ * align to the middle of the overview view. Note that this might not be the exact horizontal
+ * center of the overview view.
+ */
+ public static final int ALIGN_MODE_MIDDLE = 1;
+
+ /**
* Listeners for events on ViewHolder.
*/
public static abstract class Listener {
@@ -185,13 +197,11 @@
final ViewGroup mOverviewRoot;
final FrameLayout mOverviewFrame;
- final FrameLayout mDetailsDescriptionFrame;
+ final ViewGroup mDetailsDescriptionFrame;
final HorizontalGridView mActionsRow;
final Presenter.ViewHolder mDetailsDescriptionViewHolder;
final DetailsOverviewLogoPresenter.ViewHolder mDetailsLogoViewHolder;
int mNumItems;
- boolean mShowMoreRight;
- boolean mShowMoreLeft;
ItemBridgeAdapter mActionBridgeAdapter;
protected final Handler mHandler = new Handler();
int mState = STATE_HALF;
@@ -208,9 +218,6 @@
mActionsRow.setAdapter(mActionBridgeAdapter);
mNumItems = mActionBridgeAdapter.getItemCount();
- mShowMoreRight = false;
- mShowMoreLeft = true;
- showMoreLeft(false);
}
final View.OnLayoutChangeListener mLayoutChangeListener =
@@ -280,22 +287,6 @@
if (DEBUG) Log.v(TAG, "checkFirstAndLast fromScroll " + fromScroll +
" showRight " + showRight + " showLeft " + showLeft);
- showMoreRight(showRight);
- showMoreLeft(showLeft);
- }
-
- private void showMoreLeft(boolean show) {
- if (show != mShowMoreLeft) {
- mActionsRow.setFadingLeftEdge(show);
- mShowMoreLeft = show;
- }
- }
-
- private void showMoreRight(boolean show) {
- if (show != mShowMoreRight) {
- mActionsRow.setFadingRightEdge(show);
- mShowMoreRight = show;
- }
}
/**
@@ -310,7 +301,7 @@
mOverviewRoot = (ViewGroup) rootView.findViewById(R.id.details_root);
mOverviewFrame = (FrameLayout) rootView.findViewById(R.id.details_frame);
mDetailsDescriptionFrame =
- (FrameLayout) rootView.findViewById(R.id.details_overview_description);
+ (ViewGroup) rootView.findViewById(R.id.details_overview_description);
mActionsRow =
(HorizontalGridView) mOverviewFrame.findViewById(R.id.details_overview_actions);
mActionsRow.setHasOverlappingRendering(false);
@@ -381,11 +372,15 @@
private OnActionClickedListener mActionClickedListener;
private int mBackgroundColor = Color.TRANSPARENT;
+ private int mActionsBackgroundColor = Color.TRANSPARENT;
private boolean mBackgroundColorSet;
+ private boolean mActionsBackgroundColorSet;
private Listener mListener;
private boolean mParticipatingEntranceTransition;
+ private int mAlignmentMode;
+
/**
* Constructor for a FullWidthDetailsOverviewRowPresenter.
*
@@ -428,20 +423,37 @@
/**
* Sets the background color. If not set, a default from the theme will be used.
*/
- public void setBackgroundColor(int color) {
+ public final void setBackgroundColor(int color) {
mBackgroundColor = color;
mBackgroundColorSet = true;
}
/**
- * Returns the background color. If no background color was set, transparent
+ * Returns the background color. If {@link #setBackgroundColor(int)}, transparent
* is returned.
*/
- public int getBackgroundColor() {
+ public final int getBackgroundColor() {
return mBackgroundColor;
}
/**
+ * Sets the background color for Action Bar. If not set, a default from the theme will be
+ * used.
+ */
+ public final void setActionsBackgroundColor(int color) {
+ mActionsBackgroundColor = color;
+ mActionsBackgroundColorSet = true;
+ }
+
+ /**
+ * Returns the background color of actions. If {@link #setActionsBackgroundColor(int)}
+ * is not called, transparent is returned.
+ */
+ public final int getActionsBackgroundColor() {
+ return mActionsBackgroundColor;
+ }
+
+ /**
* Returns true if the overview should be part of shared element transition.
*/
public final boolean isParticipatingEntranceTransition() {
@@ -469,6 +481,24 @@
return mInitialState;
}
+ /**
+ * Set alignment mode of Description.
+ *
+ * @param alignmentMode One of {@link #ALIGN_MODE_MIDDLE} or {@link #ALIGN_MODE_START}
+ */
+ public final void setAlignmentMode(int alignmentMode) {
+ mAlignmentMode = alignmentMode;
+ }
+
+ /**
+ * Returns alignment mode of Description.
+ *
+ * @return One of {@link #ALIGN_MODE_MIDDLE} or {@link #ALIGN_MODE_START}.
+ */
+ public final int getAlignmentMode() {
+ return mAlignmentMode;
+ }
+
@Override
protected boolean isClippingChildren() {
return true;
@@ -490,6 +520,11 @@
return context.getResources().getColor(R.color.lb_default_brand_color);
}
+ private int getDefaultActionsBackgroundColor(Context context) {
+ int c = getDefaultBackgroundColor(context);
+ return Color.argb(Color.alpha(c), Color.red(c) / 2, Color.green(c) / 2, Color.blue(c) / 2);
+ }
+
/**
* Get resource id to inflate the layout. The layout must match {@link #STATE_HALF}
*/
@@ -510,6 +545,10 @@
final int bgColor = mBackgroundColorSet ? mBackgroundColor :
getDefaultBackgroundColor(overview.getContext());
overview.setBackgroundColor(bgColor);
+ final int actionBgColor = mActionsBackgroundColorSet ? mActionsBackgroundColor :
+ getDefaultActionsBackgroundColor(overview.getContext());
+ overview.findViewById(R.id.details_overview_actions_background)
+ .setBackgroundColor(actionBgColor);
RoundedRectHelper.getInstance().setClipToRoundedOutline(overview, true);
if (!getSelectEffectEnabled()) {
@@ -618,8 +657,18 @@
View v = viewHolder.getLogoViewHolder().view;
ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams)
v.getLayoutParams();
- lp.setMarginStart(v.getResources().getDimensionPixelSize(R.dimen.lb_details_v2_left)
- - lp.width);
+ switch (mAlignmentMode) {
+ case ALIGN_MODE_START:
+ default:
+ lp.setMarginStart(v.getResources().getDimensionPixelSize(
+ R.dimen.lb_details_v2_logo_margin_start));
+ break;
+ case ALIGN_MODE_MIDDLE:
+ lp.setMarginStart(v.getResources().getDimensionPixelSize(R.dimen.lb_details_v2_left)
+ - lp.width);
+ break;
+ }
+
switch (viewHolder.getState()) {
case STATE_FULL:
default:
@@ -653,36 +702,57 @@
boolean isBanner = viewHolder.getState() == STATE_SMALL;
if (wasBanner != isBanner || logoChanged) {
Resources res = viewHolder.view.getResources();
+
+ int frameMarginStart;
+ int descriptionMarginStart = 0;
+ int logoWidth = 0;
+ if (mDetailsOverviewLogoPresenter.isBoundToImage(viewHolder.getLogoViewHolder(),
+ (DetailsOverviewRow) viewHolder.getRow())) {
+ logoWidth = viewHolder.getLogoViewHolder().view.getLayoutParams().width;
+ }
+ switch (mAlignmentMode) {
+ case ALIGN_MODE_START:
+ default:
+ if (isBanner) {
+ frameMarginStart = res.getDimensionPixelSize(
+ R.dimen.lb_details_v2_logo_margin_start);
+ descriptionMarginStart = logoWidth;
+ } else {
+ frameMarginStart = 0;
+ descriptionMarginStart = logoWidth + res.getDimensionPixelSize(
+ R.dimen.lb_details_v2_logo_margin_start);
+ }
+ break;
+ case ALIGN_MODE_MIDDLE:
+ if (isBanner) {
+ frameMarginStart = res.getDimensionPixelSize(R.dimen.lb_details_v2_left)
+ - logoWidth;
+ descriptionMarginStart = logoWidth;
+ } else {
+ frameMarginStart = 0;
+ descriptionMarginStart = res.getDimensionPixelSize(
+ R.dimen.lb_details_v2_left);
+ }
+ break;
+ }
MarginLayoutParams lpFrame =
(MarginLayoutParams) viewHolder.getOverviewView().getLayoutParams();
- int framePaddingStart;
- if (isBanner) {
- lpFrame.topMargin = 0;
- if (mDetailsOverviewLogoPresenter.isBoundToImage(viewHolder.getLogoViewHolder(),
- (DetailsOverviewRow) viewHolder.getRow())) {
- View logoView = viewHolder.getLogoViewHolder().view;
- ViewGroup.MarginLayoutParams lpLogo =
- (ViewGroup.MarginLayoutParams) logoView.getLayoutParams();
- framePaddingStart = lpLogo.width;
- } else {
- framePaddingStart = 0;
- }
- lpFrame.leftMargin = lpFrame.rightMargin =
- res.getDimensionPixelSize(R.dimen.lb_details_v2_left) - framePaddingStart;
- } else {
- lpFrame.topMargin = res.getDimensionPixelSize(R.dimen.lb_details_v2_blank_height);
- framePaddingStart = res.getDimensionPixelSize(R.dimen.lb_details_v2_left);
- lpFrame.leftMargin = lpFrame.rightMargin = 0;
- }
+ lpFrame.topMargin = isBanner ? 0
+ : res.getDimensionPixelSize(R.dimen.lb_details_v2_blank_height);
+ lpFrame.leftMargin = lpFrame.rightMargin = frameMarginStart;
viewHolder.getOverviewView().setLayoutParams(lpFrame);
- viewHolder.getOverviewView().setPaddingRelative(framePaddingStart,
- viewHolder.getOverviewView().getPaddingTop(),
- viewHolder.getOverviewView().getPaddingEnd(),
- viewHolder.getOverviewView().getPaddingBottom());
- ViewGroup.LayoutParams lpActions = viewHolder.getActionsRow().getLayoutParams();
+
+ View description = viewHolder.getDetailsDescriptionFrame();
+ MarginLayoutParams lpDesc = (MarginLayoutParams) description.getLayoutParams();
+ lpDesc.setMarginStart(descriptionMarginStart);
+ description.setLayoutParams(lpDesc);
+
+ View action = viewHolder.getActionsRow();
+ MarginLayoutParams lpActions = (MarginLayoutParams) action.getLayoutParams();
+ lpActions.setMarginStart(descriptionMarginStart);
lpActions.height =
isBanner ? 0 : res.getDimensionPixelSize(R.dimen.lb_details_v2_actions_height);
- viewHolder.getActionsRow().setLayoutParams(lpActions);
+ action.setLayoutParams(lpActions);
}
}
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 6ca37b8..0477808 100644
--- a/v17/leanback/src/android/support/v17/leanback/widget/GridLayoutManager.java
+++ b/v17/leanback/src/android/support/v17/leanback/widget/GridLayoutManager.java
@@ -21,6 +21,9 @@
import android.os.Parcelable;
import android.support.v4.util.CircularIntArray;
import android.support.v4.view.ViewCompat;
+import android.support.v4.view.accessibility.AccessibilityEventCompat;
+import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat;
+import android.support.v4.view.accessibility.AccessibilityRecordCompat;
import android.support.v7.widget.LinearSmoothScroller;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.RecyclerView.Recycler;
@@ -203,16 +206,10 @@
targetView.requestFocus();
mInSelection = false;
}
- if (needsDispatchChildSelectedOnStop()) {
- dispatchChildSelected();
- }
+ dispatchChildSelected();
super.onStop();
}
- boolean needsDispatchChildSelectedOnStop() {
- return true;
- }
-
@Override
protected void onTargetFound(View targetView,
RecyclerView.State state, Action action) {
@@ -254,18 +251,12 @@
void increasePendingMoves() {
if (mPendingMoves < MAX_PENDING_MOVES) {
mPendingMoves++;
- if (mPendingMoves == 0) {
- dispatchChildSelected();
- }
}
}
void decreasePendingMoves() {
if (mPendingMoves > -MAX_PENDING_MOVES) {
mPendingMoves--;
- if (mPendingMoves == 0) {
- dispatchChildSelected();
- }
}
}
@@ -313,43 +304,7 @@
void consumePendingMovesAfterLayout() {
if (mStaggeredGrid && mPendingMoves != 0) {
// consume pending moves, focus to item on the same row.
- final int focusedRow = mGrid != null && mFocusPosition != NO_POSITION ?
- mGrid.getLocation(mFocusPosition).row : NO_POSITION;
- View newSelected = null;
- for (int i = 0, count = getChildCount(); i < count && mPendingMoves != 0; i++) {
- int index = mPendingMoves > 0 ? i : count - 1 - i;
- final View child = getChildAt(index);
- if (!canScrollTo(child)) {
- continue;
- }
- int position = getPositionByIndex(index);
- Grid.Location loc = mGrid.getLocation(position);
- if (focusedRow == NO_POSITION || (loc != null && loc.row == focusedRow)) {
- if (mFocusPosition == NO_POSITION) {
- mFocusPosition = position;
- mSubFocusPosition = 0;
- newSelected = child;
- } else if ((mPendingMoves > 0 && position > mFocusPosition)
- || (mPendingMoves < 0 && position < mFocusPosition)) {
- mFocusPosition = position;
- mSubFocusPosition = 0;
- if (mPendingMoves > 0) {
- mPendingMoves--;
- } else {
- mPendingMoves++;
- }
- newSelected = child;
- }
- }
- }
- if (newSelected != null && hasFocus()) {
- mInSelection = true;
- newSelected.requestFocus();
- mInSelection = false;
- }
- if (mPendingMoves == 0) {
- dispatchChildSelected();
- }
+ mPendingMoves = processSelectionMoves(true, mPendingMoves);
}
if (mPendingMoves == 0 || (mPendingMoves > 0 && hasCreatedLastItem())
|| (mPendingMoves < 0 && hasCreatedFirstItem())) {
@@ -381,11 +336,6 @@
}
@Override
- boolean needsDispatchChildSelectedOnStop() {
- return mPendingMoves != 0;
- }
-
- @Override
protected void onStop() {
super.onStop();
// if we hit wall, need clear the remaining pending moves.
@@ -1422,8 +1372,7 @@
// avoid lots of childSelected events during a long smooth scrolling and
// increase performance.
if (index == mFocusPosition && subindex == mSubFocusPosition
- && (mPendingMoveSmoothScroller == null
- || mPendingMoveSmoothScroller.mPendingMoves == 0)) {
+ && mPendingMoveSmoothScroller == null) {
dispatchChildSelected();
}
} else if (!mInFastRelayout) {
@@ -1750,6 +1699,14 @@
}
mInLayout = true;
+ if (state.didStructureChange()) {
+ // didStructureChange() == true means attached item has been removed/added.
+ // scroll animation: we are unable to continue a scroll animation,
+ // kill the scroll animation, and let ItemAnimation move the item to new position.
+ // position smooth scroller: kill the animation and stop at final position.
+ // pending smooth scroller: stop and scroll to current focus position.
+ mBaseGridView.stopScroll();
+ }
final boolean scrollToFocus = !isSmoothScrolling()
&& mFocusScrollStrategy == BaseGridView.FOCUS_SCROLL_ALIGNED;
if (mFocusPosition != NO_POSITION && mFocusPositionOffset != Integer.MIN_VALUE) {
@@ -1769,9 +1726,10 @@
// FIXME: we should get the remaining scroll animation offset from RecyclerView
View focusView = findViewByPosition(mFocusPosition);
if (focusView != null) {
- getScrollPosition(focusView, focusView.findFocus(), sTwoInts);
- delta = sTwoInts[0];
- deltaSecondary = sTwoInts[1];
+ if (getScrollPosition(focusView, focusView.findFocus(), sTwoInts)) {
+ delta = sTwoInts[0];
+ deltaSecondary = sTwoInts[1];
+ }
}
}
@@ -3010,4 +2968,140 @@
requestLayout();
if (DEBUG) Log.v(getTag(), "onRestoreInstanceState mFocusPosition " + mFocusPosition);
}
+
+ @Override
+ public int getRowCountForAccessibility(RecyclerView.Recycler recycler,
+ RecyclerView.State state) {
+ if (mOrientation == HORIZONTAL && mGrid != null) {
+ return mGrid.getNumRows();
+ }
+ return super.getRowCountForAccessibility(recycler, state);
+ }
+
+ @Override
+ public int getColumnCountForAccessibility(RecyclerView.Recycler recycler,
+ RecyclerView.State state) {
+ if (mOrientation == VERTICAL && mGrid != null) {
+ return mGrid.getNumRows();
+ }
+ return super.getColumnCountForAccessibility(recycler, state);
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfoForItem(RecyclerView.Recycler recycler,
+ RecyclerView.State state, View host, AccessibilityNodeInfoCompat info) {
+ ViewGroup.LayoutParams lp = host.getLayoutParams();
+ if (mGrid == null || !(lp instanceof LayoutParams)) {
+ super.onInitializeAccessibilityNodeInfoForItem(recycler, state, host, info);
+ return;
+ }
+ LayoutParams glp = (LayoutParams) lp;
+ int position = glp.getViewLayoutPosition();
+ int rowIndex = mGrid.getRowIndex(position);
+ int guessSpanIndex = position / mGrid.getNumRows();
+ if (mOrientation == HORIZONTAL) {
+ info.setCollectionItemInfo(AccessibilityNodeInfoCompat.CollectionItemInfoCompat.obtain(
+ rowIndex, 1, guessSpanIndex, 1, false, false));
+ } else {
+ info.setCollectionItemInfo(AccessibilityNodeInfoCompat.CollectionItemInfoCompat.obtain(
+ guessSpanIndex, 1, rowIndex, 1, false, false));
+ }
+ }
+
+ /*
+ * Leanback widget is different than the default implementation because the "scroll" is driven
+ * by selection change.
+ */
+ @Override
+ public boolean performAccessibilityAction(Recycler recycler, State state, int action,
+ Bundle args) {
+ saveContext(recycler, state);
+ switch (action) {
+ case AccessibilityNodeInfoCompat.ACTION_SCROLL_BACKWARD:
+ // try to focus all the way to the last visible item on the same row.
+ processSelectionMoves(false, -mState.getItemCount());
+ break;
+ case AccessibilityNodeInfoCompat.ACTION_SCROLL_FORWARD:
+ processSelectionMoves(false, mState.getItemCount());
+ break;
+ }
+ leaveContext();
+ return true;
+ }
+
+ /*
+ * Move mFocusPosition multiple steps on the same row in main direction.
+ * Stops when moves are all consumed or reach first/last visible item.
+ * Returning remaining moves.
+ */
+ private int processSelectionMoves(boolean preventScroll, int moves) {
+ if (mGrid == null) {
+ return moves;
+ }
+ int focusPosition = mFocusPosition;
+ int focusedRow = focusPosition != NO_POSITION ?
+ mGrid.getRowIndex(focusPosition) : NO_POSITION;
+ View newSelected = null;
+ for (int i = 0, count = getChildCount(); i < count && moves != 0; i++) {
+ int index = moves > 0 ? i : count - 1 - i;
+ final View child = getChildAt(index);
+ if (!canScrollTo(child)) {
+ continue;
+ }
+ int position = getPositionByIndex(index);
+ int rowIndex = mGrid.getRowIndex(position);
+ if (focusedRow == NO_POSITION) {
+ focusPosition = position;
+ newSelected = child;
+ focusedRow = rowIndex;
+ } else if (rowIndex == focusedRow) {
+ if ((moves > 0 && position > focusPosition)
+ || (moves < 0 && position < focusPosition)) {
+ focusPosition = position;
+ newSelected = child;
+ if (moves > 0) {
+ moves--;
+ } else {
+ moves++;
+ }
+ }
+ }
+ }
+ if (newSelected != null) {
+ if (preventScroll) {
+ if (hasFocus()) {
+ mInSelection = true;
+ newSelected.requestFocus();
+ mInSelection = false;
+ }
+ mFocusPosition = focusPosition;
+ mSubFocusPosition = 0;
+ } else {
+ scrollToView(newSelected, true);
+ }
+ }
+ return moves;
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(Recycler recycler, State state,
+ AccessibilityNodeInfoCompat info) {
+ saveContext(recycler, state);
+ if (mScrollEnabled && !hasCreatedFirstItem()) {
+ info.addAction(AccessibilityNodeInfoCompat.ACTION_SCROLL_BACKWARD);
+ info.setScrollable(true);
+ }
+ if (mScrollEnabled && !hasCreatedLastItem()) {
+ info.addAction(AccessibilityNodeInfoCompat.ACTION_SCROLL_FORWARD);
+ info.setScrollable(true);
+ }
+ final AccessibilityNodeInfoCompat.CollectionInfoCompat collectionInfo
+ = AccessibilityNodeInfoCompat.CollectionInfoCompat
+ .obtain(getRowCountForAccessibility(recycler, state),
+ getColumnCountForAccessibility(recycler, state),
+ isLayoutHierarchical(recycler, state),
+ getSelectionModeForAccessibility(recycler, state));
+ info.setCollectionInfo(collectionInfo);
+ leaveContext();
+ }
}
diff --git a/v17/tests/res/layout/horizontal_linear.xml b/v17/tests/res/layout/horizontal_linear.xml
new file mode 100644
index 0000000..ddf06a7
--- /dev/null
+++ b/v17/tests/res/layout/horizontal_linear.xml
@@ -0,0 +1,23 @@
+<RelativeLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:lb="http://schemas.android.com/apk/res-auto"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ >
+ <android.support.v17.leanback.widget.HorizontalGridViewEx
+ android:id="@+id/gridview"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:clipToPadding="false"
+ android:focusable="true"
+ android:focusableInTouchMode="true"
+ android:background="#00ffff"
+ lb:horizontalMargin="12dip"
+ lb:verticalMargin="24dip"
+ lb:numberOfColumns="1"
+ lb:columnWidth="150dip"
+ android:paddingBottom="12dip"
+ android:paddingLeft="12dip"
+ android:paddingRight="12dip"
+ android:paddingTop="12dip" />
+</RelativeLayout>
diff --git a/v17/tests/src/android/support/v17/leanback/widget/GridActivity.java b/v17/tests/src/android/support/v17/leanback/widget/GridActivity.java
index 76224b2..b62c1f8 100644
--- a/v17/tests/src/android/support/v17/leanback/widget/GridActivity.java
+++ b/v17/tests/src/android/support/v17/leanback/widget/GridActivity.java
@@ -356,7 +356,7 @@
holder.mItemAlignment = null;
}
if (mChildLayout == -1) {
- ((TextView) holder.itemView).setText("Item "+position);
+ ((TextView) holder.itemView).setText("Item "+mItemLengths[position]);
boolean focusable = true;
if (mItemFocusables != null) {
focusable = mItemFocusables[position];
@@ -366,7 +366,7 @@
holder.itemView.setBackgroundColor(Color.LTGRAY);
} else {
if (holder.itemView instanceof TextView) {
- ((TextView) holder.itemView).setText("Item "+position);
+ ((TextView) holder.itemView).setText("Item "+mItemLengths[position]);
}
}
updateSize(holder.itemView, position);
diff --git a/v17/tests/src/android/support/v17/leanback/widget/GridWidgetTest.java b/v17/tests/src/android/support/v17/leanback/widget/GridWidgetTest.java
index c4369a0..97b480b 100644
--- a/v17/tests/src/android/support/v17/leanback/widget/GridWidgetTest.java
+++ b/v17/tests/src/android/support/v17/leanback/widget/GridWidgetTest.java
@@ -25,6 +25,10 @@
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
+
+import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat;
+import android.support.v7.widget.RecyclerViewAccessibilityDelegate;
+
import android.app.Instrumentation;
import android.content.Intent;
import android.os.Parcelable;
@@ -533,6 +537,320 @@
verifyBeginAligned();
}
+ public void testBug22209986() throws Throwable {
+
+ mInstrumentation = getInstrumentation();
+ Intent intent = new Intent(mInstrumentation.getContext(), GridActivity.class);
+ intent.putExtra(GridActivity.EXTRA_LAYOUT_RESOURCE_ID,
+ R.layout.horizontal_linear);
+ intent.putExtra(GridActivity.EXTRA_NUM_ITEMS, 50);
+ initActivity(intent);
+ mOrientation = BaseGridView.HORIZONTAL;
+ mNumRows = 1;
+
+ final int focusToIndex = mGridView.getChildCount() - 1;
+ runTestOnUiThread(new Runnable() {
+ public void run() {
+ mGridView.setSelectedPositionSmooth(focusToIndex);
+ }
+ });
+
+ waitForTransientStateGone(null);
+ waitForScrollIdle();
+ runTestOnUiThread(new Runnable() {
+ public void run() {
+ mGridView.setSelectedPositionSmooth(focusToIndex + 1);
+ }
+ });
+ // let the scroll running for a while and requestLayout during scroll
+ Thread.sleep(80);
+ runTestOnUiThread(new Runnable() {
+ public void run() {
+ assertEquals(mGridView.getScrollState(), BaseGridView.SCROLL_STATE_SETTLING);
+ mGridView.requestLayout();
+ }
+ });
+ waitForTransientStateGone(null);
+ waitForScrollIdle();
+
+ int leftEdge = mGridView.getLayoutManager().findViewByPosition(focusToIndex).getLeft();
+
+ runTestOnUiThread(new Runnable() {
+ public void run() {
+ mGridView.requestLayout();
+ }
+ });
+ waitForTransientStateGone(null);
+ waitForScrollIdle();
+ assertEquals(leftEdge,
+ mGridView.getLayoutManager().findViewByPosition(focusToIndex).getLeft());
+ }
+
+ public void testScrollAndRemove() throws Throwable {
+
+ mInstrumentation = getInstrumentation();
+ Intent intent = new Intent(mInstrumentation.getContext(), GridActivity.class);
+ intent.putExtra(GridActivity.EXTRA_LAYOUT_RESOURCE_ID,
+ R.layout.horizontal_linear);
+ intent.putExtra(GridActivity.EXTRA_NUM_ITEMS, 50);
+ initActivity(intent);
+ mOrientation = BaseGridView.HORIZONTAL;
+ mNumRows = 1;
+
+ final int focusToIndex = mGridView.getChildCount() - 1;
+ runTestOnUiThread(new Runnable() {
+ public void run() {
+ mGridView.setSelectedPositionSmooth(focusToIndex);
+ }
+ });
+
+ runTestOnUiThread(new Runnable() {
+ public void run() {
+ mActivity.removeItems(focusToIndex, 1);
+ }
+ });
+
+ waitForTransientStateGone(null);
+ waitForScrollIdle();
+ int leftEdge = mGridView.getLayoutManager().findViewByPosition(focusToIndex).getLeft();
+
+ runTestOnUiThread(new Runnable() {
+ public void run() {
+ mGridView.requestLayout();
+ }
+ });
+ waitForTransientStateGone(null);
+ waitForScrollIdle();
+ assertEquals(leftEdge,
+ mGridView.getLayoutManager().findViewByPosition(focusToIndex).getLeft());
+ }
+
+ public void testScrollAndInsert() throws Throwable {
+
+ mInstrumentation = getInstrumentation();
+ Intent intent = new Intent(mInstrumentation.getContext(), GridActivity.class);
+ intent.putExtra(GridActivity.EXTRA_LAYOUT_RESOURCE_ID,
+ R.layout.vertical_grid);
+ int[] items = new int[1000];
+ for (int i = 0; i < items.length; i++) {
+ items[i] = 300 + (int)(Math.random() * 100);
+ }
+ intent.putExtra(GridActivity.EXTRA_ITEMS, items);
+ intent.putExtra(GridActivity.EXTRA_STAGGERED, true);
+ mOrientation = BaseGridView.VERTICAL;
+ mNumRows = 3;
+
+ initActivity(intent);
+
+ runTestOnUiThread(new Runnable() {
+ public void run() {
+ mGridView.setSelectedPositionSmooth(150);
+ }
+ });
+ waitForScrollIdle(mVerifyLayout);
+
+ View view = mGridView.getChildAt(mGridView.getChildCount() - 1);
+ final int focusToIndex = mGridView.getChildAdapterPosition(view);
+ runTestOnUiThread(new Runnable() {
+ public void run() {
+ mGridView.setSelectedPositionSmooth(focusToIndex);
+ }
+ });
+
+ runTestOnUiThread(new Runnable() {
+ public void run() {
+ int[] newItems = new int[]{300, 300, 300};
+ mActivity.addItems(0, newItems);
+ }
+ });
+
+ waitForTransientStateGone(null);
+ waitForScrollIdle();
+ }
+
+ public void testScrollAndInsertBeforeVisibleItem() throws Throwable {
+
+ mInstrumentation = getInstrumentation();
+ Intent intent = new Intent(mInstrumentation.getContext(), GridActivity.class);
+ intent.putExtra(GridActivity.EXTRA_LAYOUT_RESOURCE_ID,
+ R.layout.vertical_grid);
+ int[] items = new int[1000];
+ for (int i = 0; i < items.length; i++) {
+ items[i] = 300 + (int)(Math.random() * 100);
+ }
+ intent.putExtra(GridActivity.EXTRA_ITEMS, items);
+ intent.putExtra(GridActivity.EXTRA_STAGGERED, true);
+ mOrientation = BaseGridView.VERTICAL;
+ mNumRows = 3;
+
+ initActivity(intent);
+
+ runTestOnUiThread(new Runnable() {
+ public void run() {
+ mGridView.setSelectedPositionSmooth(150);
+ }
+ });
+ waitForScrollIdle(mVerifyLayout);
+
+ View view = mGridView.getChildAt(mGridView.getChildCount() - 1);
+ final int focusToIndex = mGridView.getChildAdapterPosition(view);
+ runTestOnUiThread(new Runnable() {
+ public void run() {
+ mGridView.setSelectedPositionSmooth(focusToIndex);
+ }
+ });
+
+ runTestOnUiThread(new Runnable() {
+ public void run() {
+ int[] newItems = new int[]{300, 300, 300};
+ mActivity.addItems(focusToIndex, newItems);
+ }
+ });
+
+ waitForTransientStateGone(null);
+ waitForScrollIdle();
+ }
+
+ public void testSmoothScrollAndRemove() throws Throwable {
+
+ mInstrumentation = getInstrumentation();
+ Intent intent = new Intent(mInstrumentation.getContext(), GridActivity.class);
+ intent.putExtra(GridActivity.EXTRA_LAYOUT_RESOURCE_ID,
+ R.layout.horizontal_linear);
+ intent.putExtra(GridActivity.EXTRA_NUM_ITEMS, 50);
+ initActivity(intent);
+ mOrientation = BaseGridView.HORIZONTAL;
+ mNumRows = 1;
+
+ final int focusToIndex = 40;
+ runTestOnUiThread(new Runnable() {
+ public void run() {
+ mGridView.setSelectedPositionSmooth(focusToIndex);
+ }
+ });
+
+ runTestOnUiThread(new Runnable() {
+ public void run() {
+ mActivity.removeItems(focusToIndex, 1);
+ }
+ });
+
+ Thread.sleep(20); // wait for layout
+ assertTrue("removing the index of not attached child should not affect smooth scroller",
+ mGridView.getLayoutManager().isSmoothScrolling());
+ waitForTransientStateGone(null);
+ waitForScrollIdle();
+ int leftEdge = mGridView.getLayoutManager().findViewByPosition(focusToIndex).getLeft();
+
+ runTestOnUiThread(new Runnable() {
+ public void run() {
+ mGridView.requestLayout();
+ }
+ });
+ waitForTransientStateGone(null);
+ waitForScrollIdle();
+ assertEquals(leftEdge,
+ mGridView.getLayoutManager().findViewByPosition(focusToIndex).getLeft());
+ }
+
+ public void testSmoothScrollAndRemove2() throws Throwable {
+
+ mInstrumentation = getInstrumentation();
+ Intent intent = new Intent(mInstrumentation.getContext(), GridActivity.class);
+ intent.putExtra(GridActivity.EXTRA_LAYOUT_RESOURCE_ID,
+ R.layout.horizontal_linear);
+ intent.putExtra(GridActivity.EXTRA_NUM_ITEMS, 50);
+ initActivity(intent);
+ mOrientation = BaseGridView.HORIZONTAL;
+ mNumRows = 1;
+
+ final int focusToIndex = 40;
+ runTestOnUiThread(new Runnable() {
+ public void run() {
+ mGridView.setSelectedPositionSmooth(focusToIndex);
+ }
+ });
+
+ final int removeIndex = mGridView.getChildCount() - 1;
+ runTestOnUiThread(new Runnable() {
+ public void run() {
+ mActivity.removeItems(removeIndex, 1);
+ }
+ });
+
+ Thread.sleep(20); // wait for layout
+ assertFalse("removing the index of attached child should kill smooth scroller",
+ mGridView.getLayoutManager().isSmoothScrolling());
+ waitForTransientStateGone(null);
+ waitForScrollIdle();
+ int leftEdge = mGridView.getLayoutManager().findViewByPosition(focusToIndex).getLeft();
+
+ runTestOnUiThread(new Runnable() {
+ public void run() {
+ mGridView.requestLayout();
+ }
+ });
+ waitForTransientStateGone(null);
+ waitForScrollIdle();
+ assertEquals(leftEdge,
+ mGridView.getLayoutManager().findViewByPosition(focusToIndex).getLeft());
+ }
+
+ public void testPendingSmoothScrollAndRemove() throws Throwable {
+ mInstrumentation = getInstrumentation();
+ Intent intent = new Intent(mInstrumentation.getContext(), GridActivity.class);
+ intent.putExtra(GridActivity.EXTRA_LAYOUT_RESOURCE_ID,
+ R.layout.vertical_linear);
+ intent.putExtra(GridActivity.EXTRA_REQUEST_FOCUS_ONLAYOUT, true);
+ int[] items = new int[100];
+ for (int i = 0; i < items.length; i++) {
+ items[i] = 630 + (int)(Math.random() * 100);
+ }
+ intent.putExtra(GridActivity.EXTRA_ITEMS, items);
+ intent.putExtra(GridActivity.EXTRA_STAGGERED, true);
+ mOrientation = BaseGridView.VERTICAL;
+ mNumRows = 1;
+
+ initActivity(intent);
+
+ mGridView.setSelectedPositionSmooth(0);
+ waitForScrollIdle(mVerifyLayout);
+ assertTrue(mGridView.getChildAt(0).hasFocus());
+
+ // Pressing lots of key to make sure smooth scroller is running
+ for (int i = 0; i < 20; i++) {
+ sendKeys(KeyEvent.KEYCODE_DPAD_DOWN);
+ }
+ Thread.sleep(100);
+
+ assertTrue(mGridView.getLayoutManager().isSmoothScrolling());
+ final int removeIndex = mGridView.getChildCount() - 1;
+ runTestOnUiThread(new Runnable() {
+ public void run() {
+ mActivity.removeItems(removeIndex, 1);
+ }
+ });
+
+ Thread.sleep(20); // wait for layout
+ assertFalse("removing the index of attached child should kill smooth scroller",
+ mGridView.getLayoutManager().isSmoothScrolling());
+
+ waitForTransientStateGone(null);
+ waitForScrollIdle();
+ int focusIndex = mGridView.getSelectedPosition();
+ int leftEdge = mGridView.getLayoutManager().findViewByPosition(focusIndex).getLeft();
+
+ runTestOnUiThread(new Runnable() {
+ public void run() {
+ mGridView.requestLayout();
+ }
+ });
+ waitForTransientStateGone(null);
+ waitForScrollIdle();
+ assertEquals(leftEdge,
+ mGridView.getLayoutManager().findViewByPosition(focusIndex).getLeft());
+ }
+
public void testFocusToFirstItem() throws Throwable {
mInstrumentation = getInstrumentation();
@@ -1679,4 +1997,58 @@
assertTrue(v.getTop() < windowSize);
assertTrue(v.getBottom() >= windowSize - mGridView.getVerticalMargin());
}
+
+ public void testAccessibility() throws Throwable {
+ mInstrumentation = getInstrumentation();
+ Intent intent = new Intent(mInstrumentation.getContext(), GridActivity.class);
+ intent.putExtra(GridActivity.EXTRA_LAYOUT_RESOURCE_ID,
+ R.layout.vertical_linear);
+ intent.putExtra(GridActivity.EXTRA_NUM_ITEMS, 1000);
+ intent.putExtra(GridActivity.EXTRA_STAGGERED, false);
+ initActivity(intent);
+ mOrientation = BaseGridView.VERTICAL;
+ mNumRows = 1;
+
+ assertTrue(0 == mGridView.getSelectedPosition());
+
+ final RecyclerViewAccessibilityDelegate delegateCompat = mGridView
+ .getCompatAccessibilityDelegate();
+ final AccessibilityNodeInfoCompat info = AccessibilityNodeInfoCompat.obtain();
+ runTestOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ delegateCompat.onInitializeAccessibilityNodeInfo(mGridView, info);
+ }
+ });
+ assertTrue("test sanity", info.isScrollable());
+ runTestOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ delegateCompat.performAccessibilityAction(mGridView,
+ AccessibilityNodeInfoCompat.ACTION_SCROLL_FORWARD, null);
+ }
+ });
+ waitForScrollIdle(mVerifyLayout);
+ int selectedPosition1 = mGridView.getSelectedPosition();
+ assertTrue(0 < selectedPosition1);
+
+ runTestOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ delegateCompat.onInitializeAccessibilityNodeInfo(mGridView, info);
+ }
+ });
+ assertTrue("test sanity", info.isScrollable());
+ runTestOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ delegateCompat.performAccessibilityAction(mGridView,
+ AccessibilityNodeInfoCompat.ACTION_SCROLL_BACKWARD, null);
+ }
+ });
+ waitForScrollIdle(mVerifyLayout);
+ int selectedPosition2 = mGridView.getSelectedPosition();
+ assertTrue(selectedPosition2 < selectedPosition1);
+ }
+
}
diff --git a/v4/api/22.2.1.txt b/v4/api/22.2.1.txt
new file mode 100644
index 0000000..dad71be
--- /dev/null
+++ b/v4/api/22.2.1.txt
@@ -0,0 +1,3191 @@
+package android.support.v4.accessibilityservice {
+
+ public 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 boolean getCanRetrieveWindowContent(android.accessibilityservice.AccessibilityServiceInfo);
+ method public static int getCapabilities(android.accessibilityservice.AccessibilityServiceInfo);
+ method public static java.lang.String getDescription(android.accessibilityservice.AccessibilityServiceInfo);
+ method public static java.lang.String getId(android.accessibilityservice.AccessibilityServiceInfo);
+ method public static android.content.pm.ResolveInfo getResolveInfo(android.accessibilityservice.AccessibilityServiceInfo);
+ method public static java.lang.String getSettingsActivityName(android.accessibilityservice.AccessibilityServiceInfo);
+ 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 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.animation {
+
+ public abstract class AnimatorCompatHelper {
+ method public static android.support.v4.animation.ValueAnimatorCompat emptyValueAnimator();
+ }
+
+ public abstract interface AnimatorListenerCompat {
+ method public abstract void onAnimationCancel(android.support.v4.animation.ValueAnimatorCompat);
+ method public abstract void onAnimationEnd(android.support.v4.animation.ValueAnimatorCompat);
+ method public abstract void onAnimationRepeat(android.support.v4.animation.ValueAnimatorCompat);
+ method public abstract void onAnimationStart(android.support.v4.animation.ValueAnimatorCompat);
+ }
+
+ public abstract interface AnimatorUpdateListenerCompat {
+ method public abstract void onAnimationUpdate(android.support.v4.animation.ValueAnimatorCompat);
+ }
+
+ public abstract interface ValueAnimatorCompat {
+ method public abstract void addListener(android.support.v4.animation.AnimatorListenerCompat);
+ method public abstract void addUpdateListener(android.support.v4.animation.AnimatorUpdateListenerCompat);
+ method public abstract void cancel();
+ method public abstract float getAnimatedFraction();
+ method public abstract void setDuration(long);
+ method public abstract void setTarget(android.view.View);
+ method public abstract void start();
+ }
+
+}
+
+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 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 interface ActionBarDrawerToggle.DelegateProvider {
+ method public abstract android.support.v4.app.ActionBarDrawerToggle.Delegate getDrawerToggleDelegate();
+ }
+
+ public class ActivityCompat extends android.support.v4.content.ContextCompat {
+ ctor public ActivityCompat();
+ method public static void finishAffinity(android.app.Activity);
+ method public static void finishAfterTransition(android.app.Activity);
+ method public static boolean invalidateOptionsMenu(android.app.Activity);
+ method public static void postponeEnterTransition(android.app.Activity);
+ 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 startActivity(android.app.Activity, android.content.Intent, android.os.Bundle);
+ method public static void startActivityForResult(android.app.Activity, android.content.Intent, int, android.os.Bundle);
+ method public static void startPostponedEnterTransition(android.app.Activity);
+ }
+
+ public final class ActivityManagerCompat {
+ method public static boolean isLowRamDevice(android.app.ActivityManager);
+ }
+
+ public class ActivityOptionsCompat {
+ ctor protected ActivityOptionsCompat();
+ 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 makeThumbnailScaleUpAnimation(android.view.View, android.graphics.Bitmap, int, int);
+ method public android.os.Bundle toBundle();
+ method public void update(android.support.v4.app.ActivityOptionsCompat);
+ }
+
+ 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 java.lang.Object getEnterTransition();
+ method public java.lang.Object getExitTransition();
+ method public final android.support.v4.app.FragmentManager getFragmentManager();
+ method public final int getId();
+ 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 isVisible();
+ method public void onActivityCreated(android.os.Bundle);
+ method public void onActivityResult(int, int, android.content.Intent);
+ method public void onAttach(android.app.Activity);
+ 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 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 void onHiddenChanged(boolean);
+ method public void onInflate(android.app.Activity, android.util.AttributeSet, android.os.Bundle);
+ method public void onLowMemory();
+ method public boolean onOptionsItemSelected(android.view.MenuItem);
+ method public void onOptionsMenuClosed(android.view.Menu);
+ method public void onPause();
+ method public void onPrepareOptionsMenu(android.view.Menu);
+ 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 registerForContextMenu(android.view.View);
+ 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 void startActivity(android.content.Intent);
+ method public void startActivityForResult(android.content.Intent, int);
+ 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.app.Activity {
+ 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 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 supportFinishAfterTransition();
+ method public void supportInvalidateOptionsMenu();
+ method public void supportPostponeEnterTransition();
+ method public void supportStartPostponedEnterTransition();
+ }
+
+ 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 boolean isDestroyed();
+ 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 removeOnBackStackChangedListener(android.support.v4.app.FragmentManager.OnBackStackChangedListener);
+ method public abstract android.support.v4.app.Fragment.SavedState saveFragmentInstanceState(android.support.v4.app.Fragment);
+ 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 interface FragmentManager.OnBackStackChangedListener {
+ method public abstract void onBackStackChanged();
+ }
+
+ 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 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 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 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 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 android.support.v4.content.Loader<D> getLoader(int);
+ method public boolean hasRunningLoaders();
+ method public abstract android.support.v4.content.Loader<D> initLoader(int, android.os.Bundle, android.support.v4.app.LoaderManager.LoaderCallbacks<D>);
+ method public abstract android.support.v4.content.Loader<D> restartLoader(int, android.os.Bundle, android.support.v4.app.LoaderManager.LoaderCallbacks<D>);
+ }
+
+ public static abstract interface LoaderManager.LoaderCallbacks {
+ 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>);
+ }
+
+ public 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 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 java.lang.String getCategory(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 boolean getLocalOnly(android.app.Notification);
+ method public static java.lang.String getSortKey(android.app.Notification);
+ method public static boolean isGroupSummary(android.app.Notification);
+ 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_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_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_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_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_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 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 extends android.support.v4.app.NotificationCompatBase.Action {
+ ctor public NotificationCompat.Action(int, java.lang.CharSequence, android.app.PendingIntent);
+ method public android.app.PendingIntent getActionIntent();
+ 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();
+ }
+
+ 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 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 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);
+ 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 setCategory(java.lang.String);
+ method public android.support.v4.app.NotificationCompat.Builder setColor(int);
+ 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 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 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 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 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 extends android.support.v4.app.NotificationCompatBase.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 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 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 int getContentAction();
+ method public int getContentIcon();
+ method public int getContentIconGravity();
+ method public boolean getContentIntentAvailableOffline();
+ method public int getCustomContentHeight();
+ method public int getCustomSizePreset();
+ method public android.app.PendingIntent getDisplayIntent();
+ method public int getGravity();
+ method public boolean getHintAvoidBackgroundClipping();
+ 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 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 setDisplayIntent(android.app.PendingIntent);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setGravity(int);
+ method public android.support.v4.app.NotificationCompat.WearableExtender setHintAvoidBackgroundClipping(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 class NotificationCompatBase {
+ ctor public NotificationCompatBase();
+ }
+
+ public static abstract class NotificationCompatBase.Action {
+ ctor public NotificationCompatBase.Action();
+ method public abstract android.app.PendingIntent getActionIntent();
+ method public abstract android.os.Bundle getExtras();
+ method public abstract int getIcon();
+ method public abstract android.support.v4.app.RemoteInputCompatBase.RemoteInput[] getRemoteInputs();
+ method public abstract java.lang.CharSequence getTitle();
+ }
+
+ public static abstract class NotificationCompatBase.UnreadConversation {
+ ctor public NotificationCompatBase.UnreadConversation();
+ }
+
+ 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 class NotificationManagerCompat {
+ 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 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";
+ }
+
+ public class RemoteInput extends android.support.v4.app.RemoteInputCompatBase.RemoteInput {
+ method public static void addResultsToIntent(android.support.v4.app.RemoteInput[], android.content.Intent, android.os.Bundle);
+ method public boolean getAllowFreeFormInput();
+ method public java.lang.CharSequence[] getChoices();
+ 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);
+ 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 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);
+ }
+
+ class RemoteInputCompatBase {
+ }
+
+ public static abstract class RemoteInputCompatBase.RemoteInput {
+ ctor public RemoteInputCompatBase.RemoteInput();
+ method protected abstract boolean getAllowFreeFormInput();
+ 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 class ServiceCompat {
+ field public static final int START_STICKY = 1; // 0x1
+ }
+
+ public class ShareCompat {
+ ctor public 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>);
+ }
+
+ public 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 extends android.support.v4.content.Loader {
+ ctor public AsyncTaskLoader(android.content.Context);
+ method public boolean cancelLoad();
+ method public abstract D loadInBackground();
+ method public void onCanceled(D);
+ method protected D onLoadInBackground();
+ method public void setUpdateThrottle(long);
+ }
+
+ public class ContextCompat {
+ ctor public ContextCompat();
+ method public final java.io.File getCodeCacheDir(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 final java.io.File getNoBackupFilesDir(android.content.Context);
+ method public static java.io.File[] getObbDirs(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);
+ }
+
+ 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 IntentCompat {
+ method public static android.content.Intent makeMainActivity(android.content.ComponentName);
+ method public static android.content.Intent makeMainSelectorActivity(java.lang.String, java.lang.String);
+ method public static android.content.Intent makeRestartActivityTask(android.content.ComponentName);
+ field public static final java.lang.String ACTION_EXTERNAL_APPLICATIONS_AVAILABLE = "android.intent.action.EXTERNAL_APPLICATIONS_AVAILABLE";
+ field public static final java.lang.String ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE = "android.intent.action.EXTERNAL_APPLICATIONS_UNAVAILABLE";
+ field public static final java.lang.String EXTRA_CHANGED_PACKAGE_LIST = "android.intent.extra.changed_package_list";
+ field public static final 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 int FLAG_ACTIVITY_CLEAR_TASK = 32768; // 0x8000
+ field public static final int FLAG_ACTIVITY_TASK_ON_HOME = 16384; // 0x4000
+ }
+
+ public class Loader {
+ ctor public Loader(android.content.Context);
+ method public void abandon();
+ method public void commitContentChanged();
+ method public java.lang.String dataToString(D);
+ 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 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 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>);
+ }
+
+ public final class Loader.ForceLoadContentObserver extends android.database.ContentObserver {
+ ctor public Loader.ForceLoadContentObserver();
+ }
+
+ public static abstract interface Loader.OnLoadCompleteListener {
+ method public abstract void onLoadComplete(android.support.v4.content.Loader<D>, D);
+ }
+
+ public 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 abstract 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.content.pm {
+
+ public class ActivityInfoCompat {
+ field public static final int CONFIG_UI_MODE = 512; // 0x200
+ }
+
+}
+
+package android.support.v4.content.res {
+
+ public class ResourcesCompat {
+ ctor public ResourcesCompat();
+ 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;
+ }
+
+}
+
+package android.support.v4.database {
+
+ public 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 class BitmapCompat {
+ ctor public BitmapCompat();
+ method public static int getAllocationByteCount(android.graphics.Bitmap);
+ method public static boolean hasMipMap(android.graphics.Bitmap);
+ method public static void setHasMipMap(android.graphics.Bitmap, boolean);
+ }
+
+ public class ColorUtils {
+ method public static int HSLToColor(float[]);
+ method public static void RGBToHSL(int, int, int, float[]);
+ 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 int compositeColors(int, int);
+ method public static int setAlphaComponent(int, int);
+ }
+
+}
+
+package android.support.v4.graphics.drawable {
+
+ public class DrawableCompat {
+ ctor public DrawableCompat();
+ 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 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 unwrap(android.graphics.drawable.Drawable);
+ method public static android.graphics.drawable.Drawable wrap(android.graphics.drawable.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 void setAlpha(int);
+ method public void setAntiAlias(boolean);
+ method public void setColorFilter(android.graphics.ColorFilter);
+ method public void setCornerRadius(float);
+ 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 class RoundedBitmapDrawableFactory {
+ ctor public 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.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.media {
+
+ 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 java.lang.CharSequence getSubtitle();
+ method public java.lang.CharSequence getTitle();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.support.v4.media.MediaDescriptionCompat> CREATOR;
+ }
+
+ 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 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_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_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_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_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 TransportController {
+ ctor public TransportController();
+ method public abstract int getBufferPercentage();
+ method public abstract long getCurrentPosition();
+ method public abstract long getDuration();
+ method public abstract int getTransportControlFlags();
+ method public abstract boolean isPlaying();
+ method public abstract void pausePlaying();
+ method public abstract void registerStateListener(android.support.v4.media.TransportStateListener);
+ method public abstract void seekTo(long);
+ method public abstract void startPlaying();
+ method public abstract void stopPlaying();
+ method public abstract void unregisterStateListener(android.support.v4.media.TransportStateListener);
+ }
+
+ public class TransportMediator extends android.support.v4.media.TransportController {
+ ctor public TransportMediator(android.app.Activity, android.support.v4.media.TransportPerformer);
+ ctor public TransportMediator(android.view.View, android.support.v4.media.TransportPerformer);
+ method public void destroy();
+ method public boolean dispatchKeyEvent(android.view.KeyEvent);
+ method public int getBufferPercentage();
+ method public long getCurrentPosition();
+ method public long getDuration();
+ method public java.lang.Object getRemoteControlClient();
+ method public int getTransportControlFlags();
+ method public boolean isPlaying();
+ method public void pausePlaying();
+ method public void refreshState();
+ method public void registerStateListener(android.support.v4.media.TransportStateListener);
+ method public void seekTo(long);
+ method public void startPlaying();
+ method public void stopPlaying();
+ method public void unregisterStateListener(android.support.v4.media.TransportStateListener);
+ field public static final int FLAG_KEY_MEDIA_FAST_FORWARD = 64; // 0x40
+ field public static final int FLAG_KEY_MEDIA_NEXT = 128; // 0x80
+ field public static final int FLAG_KEY_MEDIA_PAUSE = 16; // 0x10
+ field public static final int FLAG_KEY_MEDIA_PLAY = 4; // 0x4
+ field public static final int FLAG_KEY_MEDIA_PLAY_PAUSE = 8; // 0x8
+ field public static final int FLAG_KEY_MEDIA_PREVIOUS = 1; // 0x1
+ field public static final int FLAG_KEY_MEDIA_REWIND = 2; // 0x2
+ field public static final int FLAG_KEY_MEDIA_STOP = 32; // 0x20
+ field public static final int KEYCODE_MEDIA_PAUSE = 127; // 0x7f
+ field public static final int KEYCODE_MEDIA_PLAY = 126; // 0x7e
+ field public static final int KEYCODE_MEDIA_RECORD = 130; // 0x82
+ }
+
+ public abstract class TransportPerformer {
+ ctor public TransportPerformer();
+ method public void onAudioFocusChange(int);
+ method public int onGetBufferPercentage();
+ method public abstract long onGetCurrentPosition();
+ method public abstract long onGetDuration();
+ method public int onGetTransportControlFlags();
+ method public abstract boolean onIsPlaying();
+ method public boolean onMediaButtonDown(int, android.view.KeyEvent);
+ method public boolean onMediaButtonUp(int, android.view.KeyEvent);
+ method public abstract void onPause();
+ method public abstract void onSeekTo(long);
+ method public abstract void onStart();
+ method public abstract void onStop();
+ }
+
+ public class TransportStateListener {
+ ctor public TransportStateListener();
+ method public void onPlayingChanged(android.support.v4.media.TransportController);
+ method public void onTransportControlsChanged(android.support.v4.media.TransportController);
+ }
+
+ 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.session {
+
+ public final class MediaControllerCompat {
+ ctor public MediaControllerCompat(android.content.Context, android.support.v4.media.session.MediaSessionCompat);
+ ctor public MediaControllerCompat(android.content.Context, android.support.v4.media.session.MediaSessionCompat.Token) throws android.os.RemoteException;
+ 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 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 android.app.PendingIntent getSessionActivity();
+ method public android.support.v4.media.session.MediaSessionCompat.Token getSessionToken();
+ method public android.support.v4.media.session.MediaControllerCompat.TransportControls getTransportControls();
+ 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 sendCommand(java.lang.String, android.os.Bundle, android.os.ResultReceiver);
+ 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 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 onSessionDestroyed();
+ method public void onSessionEvent(java.lang.String, android.os.Bundle);
+ }
+
+ 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 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 setRating(android.support.v4.media.RatingCompat);
+ method public abstract void skipToNext();
+ method public abstract void skipToPrevious();
+ method public abstract void skipToQueueItem(long);
+ method public abstract void stop();
+ }
+
+ public class MediaSessionCompat {
+ 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 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 static android.support.v4.media.session.MediaSessionCompat obtain(android.content.Context, java.lang.Object);
+ 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 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 setSessionActivity(android.app.PendingIntent);
+ field public static final int FLAG_HANDLES_MEDIA_BUTTONS = 1; // 0x1
+ field public static final int FLAG_HANDLES_TRANSPORT_CONTROLS = 2; // 0x2
+ }
+
+ public static abstract class MediaSessionCompat.Callback {
+ ctor public MediaSessionCompat.Callback();
+ 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 onRewind();
+ method public void onSeekTo(long);
+ method public void onSetRating(android.support.v4.media.RatingCompat);
+ 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 android.support.v4.media.MediaDescriptionCompat getDescription();
+ method public long getQueueId();
+ method public java.lang.Object getQueueItem();
+ method public static android.support.v4.media.session.MediaSessionCompat.QueueItem obtain(java.lang.Object);
+ 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 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 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_PAUSE = 512L; // 0x200L
+ 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_RATING = 128L; // 0x80L
+ 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 long PLAYBACK_POSITION_UNKNOWN = -1L; // 0xffffffffffffffffL
+ 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 android.support.v4.media.session.PlaybackStateCompat.Builder setErrorMessage(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);
+ }
+
+}
+
+package android.support.v4.net {
+
+ public class ConnectivityManagerCompat {
+ ctor public ConnectivityManagerCompat();
+ method public static android.net.NetworkInfo getNetworkInfoFromBroadcast(android.net.ConnectivityManager, android.content.Intent);
+ method public static boolean isActiveNetworkMetered(android.net.ConnectivityManager);
+ }
+
+ public class TrafficStatsCompat {
+ ctor public TrafficStatsCompat();
+ method public static void clearThreadStatsTag();
+ method public static int getThreadStatsTag();
+ method public static void incrementOperationCount(int);
+ method public static void incrementOperationCount(int, int);
+ method public static void setThreadStatsTag(int);
+ method public static void tagSocket(java.net.Socket) throws java.net.SocketException;
+ method public static void untagSocket(java.net.Socket) throws java.net.SocketException;
+ }
+
+}
+
+package android.support.v4.os {
+
+ public class AsyncTaskCompat {
+ ctor public AsyncTaskCompat();
+ method public static android.os.AsyncTask<Params, Progress, Result> executeParallel(android.os.AsyncTask<Params, Progress, Result>, Params...);
+ }
+
+ public class EnvironmentCompat {
+ ctor public EnvironmentCompat();
+ method public static java.lang.String getStorageState(java.io.File);
+ field public static final java.lang.String MEDIA_UNKNOWN = "unknown";
+ }
+
+ public class ParcelableCompat {
+ ctor public ParcelableCompat();
+ method public static android.os.Parcelable.Creator<T> newCreator(android.support.v4.os.ParcelableCompatCreatorCallbacks<T>);
+ }
+
+ public abstract interface ParcelableCompatCreatorCallbacks {
+ method public abstract T createFromParcel(android.os.Parcel, java.lang.ClassLoader);
+ method public abstract T[] newArray(int);
+ }
+
+ public class TraceCompat {
+ ctor public TraceCompat();
+ method public static void beginSection(java.lang.String);
+ method public static void endSection();
+ }
+
+}
+
+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 long lastModified();
+ method public abstract long length();
+ method public abstract android.support.v4.provider.DocumentFile[] listFiles();
+ method public abstract boolean renameTo(java.lang.String);
+ }
+
+}
+
+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 isRtlContext();
+ method public java.lang.String unicodeWrap(java.lang.String, android.support.v4.text.TextDirectionHeuristicCompat, boolean);
+ method public java.lang.String unicodeWrap(java.lang.String, android.support.v4.text.TextDirectionHeuristicCompat);
+ method public java.lang.String unicodeWrap(java.lang.String, boolean);
+ method public java.lang.String unicodeWrap(java.lang.String);
+ }
+
+ 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 class ICUCompat {
+ ctor public ICUCompat();
+ method public static java.lang.String addLikelySubtags(java.lang.String);
+ method public static java.lang.String getScript(java.lang.String);
+ }
+
+ public abstract interface TextDirectionHeuristicCompat {
+ method public abstract boolean isRtl(char[], int, int);
+ method public abstract boolean isRtl(java.lang.CharSequence, int, int);
+ }
+
+ public class TextDirectionHeuristicsCompat {
+ ctor public 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 class TextUtilsCompat {
+ ctor public TextUtilsCompat();
+ method public static int getLayoutDirectionFromLocale(java.util.Locale);
+ method public static java.lang.String htmlEncode(java.lang.String);
+ field public static final java.util.Locale ROOT;
+ }
+
+}
+
+package android.support.v4.util {
+
+ public class ArrayMap 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 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 {
+ 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 {
+ 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 {
+ 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 Pair {
+ ctor public Pair(F, S);
+ method public static android.support.v4.util.Pair<A, B> create(A, B);
+ field public final F first;
+ field public final S second;
+ }
+
+ public final class Pools {
+ }
+
+ public static abstract interface Pools.Pool {
+ method public abstract T acquire();
+ method public abstract boolean release(T);
+ }
+
+ public static class Pools.SimplePool 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 extends android.support.v4.util.Pools.SimplePool {
+ ctor public Pools.SynchronizedPool(int);
+ }
+
+ public class SimpleArrayMap {
+ ctor public SimpleArrayMap();
+ ctor public SimpleArrayMap(int);
+ ctor public SimpleArrayMap(android.support.v4.util.SimpleArrayMap);
+ 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 {
+ 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 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 class GravityCompat {
+ ctor public 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 class InputDeviceCompat {
+ ctor public 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_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 class KeyEventCompat {
+ ctor public KeyEventCompat();
+ method public static boolean dispatch(android.view.KeyEvent, android.view.KeyEvent.Callback, java.lang.Object, java.lang.Object);
+ method public static java.lang.Object getKeyDispatcherState(android.view.View);
+ method public static boolean hasModifiers(android.view.KeyEvent, int);
+ method public static boolean hasNoModifiers(android.view.KeyEvent);
+ method public static boolean isTracking(android.view.KeyEvent);
+ method public static boolean metaStateHasModifiers(int, int);
+ method public static boolean metaStateHasNoModifiers(int);
+ method public static int normalizeMetaState(int);
+ method public static void startTracking(android.view.KeyEvent);
+ }
+
+ public class LayoutInflaterCompat {
+ method public static void setFactory(android.view.LayoutInflater, android.support.v4.view.LayoutInflaterFactory);
+ }
+
+ public abstract interface LayoutInflaterFactory {
+ method public abstract android.view.View onCreateView(android.view.View, java.lang.String, android.content.Context, android.util.AttributeSet);
+ }
+
+ public class MarginLayoutParamsCompat {
+ ctor public 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 class MenuCompat {
+ ctor public MenuCompat();
+ method public static deprecated void setShowAsAction(android.view.MenuItem, int);
+ }
+
+ public class MenuItemCompat {
+ ctor public MenuItemCompat();
+ method public static boolean collapseActionView(android.view.MenuItem);
+ method public static boolean expandActionView(android.view.MenuItem);
+ method public static android.support.v4.view.ActionProvider getActionProvider(android.view.MenuItem);
+ method public static android.view.View getActionView(android.view.MenuItem);
+ method public static boolean isActionViewExpanded(android.view.MenuItem);
+ method public static android.view.MenuItem setActionProvider(android.view.MenuItem, android.support.v4.view.ActionProvider);
+ method public static android.view.MenuItem setActionView(android.view.MenuItem, android.view.View);
+ method public static android.view.MenuItem setActionView(android.view.MenuItem, int);
+ method public static android.view.MenuItem setOnActionExpandListener(android.view.MenuItem, android.support.v4.view.MenuItemCompat.OnActionExpandListener);
+ method public static void setShowAsAction(android.view.MenuItem, int);
+ field public static final int SHOW_AS_ACTION_ALWAYS = 2; // 0x2
+ field public static final int SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW = 8; // 0x8
+ field public static final int SHOW_AS_ACTION_IF_ROOM = 1; // 0x1
+ field public static final int SHOW_AS_ACTION_NEVER = 0; // 0x0
+ field public static final int SHOW_AS_ACTION_WITH_TEXT = 4; // 0x4
+ }
+
+ public static abstract interface MenuItemCompat.OnActionExpandListener {
+ method public abstract boolean onMenuItemActionCollapse(android.view.MenuItem);
+ method public abstract boolean onMenuItemActionExpand(android.view.MenuItem);
+ }
+
+ public class MotionEventCompat {
+ ctor public MotionEventCompat();
+ method public static int findPointerIndex(android.view.MotionEvent, int);
+ method public static int getActionIndex(android.view.MotionEvent);
+ method public static int getActionMasked(android.view.MotionEvent);
+ method public static float getAxisValue(android.view.MotionEvent, int);
+ method public static float getAxisValue(android.view.MotionEvent, int, int);
+ method public static int getPointerCount(android.view.MotionEvent);
+ method public static int getPointerId(android.view.MotionEvent, int);
+ method public static int getSource(android.view.MotionEvent);
+ method public static float getX(android.view.MotionEvent, int);
+ method public static float getY(android.view.MotionEvent, int);
+ field public static final int ACTION_HOVER_ENTER = 9; // 0x9
+ field public static final int ACTION_HOVER_EXIT = 10; // 0xa
+ field public static final int ACTION_HOVER_MOVE = 7; // 0x7
+ field public static final int ACTION_MASK = 255; // 0xff
+ field public static final int ACTION_POINTER_DOWN = 5; // 0x5
+ field public static final int ACTION_POINTER_INDEX_MASK = 65280; // 0xff00
+ field public static final int ACTION_POINTER_INDEX_SHIFT = 8; // 0x8
+ field public static final int ACTION_POINTER_UP = 6; // 0x6
+ field public static final int ACTION_SCROLL = 8; // 0x8
+ field public static final int AXIS_BRAKE = 23; // 0x17
+ field public static final int AXIS_DISTANCE = 24; // 0x18
+ field public static final int AXIS_GAS = 22; // 0x16
+ field public static final int AXIS_GENERIC_1 = 32; // 0x20
+ field public static final int AXIS_GENERIC_10 = 41; // 0x29
+ field public static final int AXIS_GENERIC_11 = 42; // 0x2a
+ field public static final int AXIS_GENERIC_12 = 43; // 0x2b
+ field public static final int AXIS_GENERIC_13 = 44; // 0x2c
+ field public static final int AXIS_GENERIC_14 = 45; // 0x2d
+ field public static final int AXIS_GENERIC_15 = 46; // 0x2e
+ field public static final int AXIS_GENERIC_16 = 47; // 0x2f
+ field public static final int AXIS_GENERIC_2 = 33; // 0x21
+ field public static final int AXIS_GENERIC_3 = 34; // 0x22
+ field public static final int AXIS_GENERIC_4 = 35; // 0x23
+ field public static final int AXIS_GENERIC_5 = 36; // 0x24
+ field public static final int AXIS_GENERIC_6 = 37; // 0x25
+ field public static final int AXIS_GENERIC_7 = 38; // 0x26
+ field public static final int AXIS_GENERIC_8 = 39; // 0x27
+ field public static final int AXIS_GENERIC_9 = 40; // 0x28
+ field public static final int AXIS_HAT_X = 15; // 0xf
+ field public static final int AXIS_HAT_Y = 16; // 0x10
+ field public static final int AXIS_HSCROLL = 10; // 0xa
+ field public static final int AXIS_LTRIGGER = 17; // 0x11
+ field public static final int AXIS_ORIENTATION = 8; // 0x8
+ field public static final int AXIS_PRESSURE = 2; // 0x2
+ field public static final int AXIS_RTRIGGER = 18; // 0x12
+ field public static final int AXIS_RUDDER = 20; // 0x14
+ field public static final int AXIS_RX = 12; // 0xc
+ field public static final int AXIS_RY = 13; // 0xd
+ field public static final int AXIS_RZ = 14; // 0xe
+ field public static final int AXIS_SIZE = 3; // 0x3
+ field public static final int AXIS_THROTTLE = 19; // 0x13
+ field public static final int AXIS_TILT = 25; // 0x19
+ field public static final int AXIS_TOOL_MAJOR = 6; // 0x6
+ field public static final int AXIS_TOOL_MINOR = 7; // 0x7
+ field public static final int AXIS_TOUCH_MAJOR = 4; // 0x4
+ field public static final int AXIS_TOUCH_MINOR = 5; // 0x5
+ field public static final int AXIS_VSCROLL = 9; // 0x9
+ field public static final int AXIS_WHEEL = 21; // 0x15
+ field public static final int AXIS_X = 0; // 0x0
+ field public static final int AXIS_Y = 1; // 0x1
+ field public static final int AXIS_Z = 11; // 0xb
+ }
+
+ 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 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 dispatchNestedScroll(int, int, int, int, int[]);
+ method public boolean hasNestedScrollingParent();
+ 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 void stopNestedScroll();
+ }
+
+ 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 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 onStopNestedScroll(android.view.View);
+ }
+
+ public abstract interface OnApplyWindowInsetsListener {
+ method public abstract android.support.v4.view.WindowInsetsCompat onApplyWindowInsets(android.view.View, android.support.v4.view.WindowInsetsCompat);
+ }
+
+ 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 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 ScaleGestureDetectorCompat {
+ method public static boolean isQuickScaleEnabled(java.lang.Object);
+ method public static void setQuickScaleEnabled(java.lang.Object, 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 class VelocityTrackerCompat {
+ ctor public VelocityTrackerCompat();
+ method public static float getXVelocity(android.view.VelocityTracker, int);
+ method public static float getYVelocity(android.view.VelocityTracker, int);
+ }
+
+ public class ViewCompat {
+ ctor public ViewCompat();
+ method public static android.support.v4.view.ViewPropertyAnimatorCompat animate(android.view.View);
+ method public static boolean canScrollHorizontally(android.view.View, int);
+ method public static boolean canScrollVertically(android.view.View, int);
+ method public static 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 dispatchNestedScroll(android.view.View, 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 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 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 int getLayerType(android.view.View);
+ method public static int getLayoutDirection(android.view.View);
+ method public static int getMeasuredHeightAndState(android.view.View);
+ method public static int getMeasuredState(android.view.View);
+ method public static int getMeasuredWidthAndState(android.view.View);
+ method public static int getMinimumHeight(android.view.View);
+ method public static int getMinimumWidth(android.view.View);
+ method public static int 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 float getPivotX(android.view.View);
+ method public static float getPivotY(android.view.View);
+ method public static float getRotation(android.view.View);
+ method public static float getRotationX(android.view.View);
+ method public static float getRotationY(android.view.View);
+ method public static float getScaleX(android.view.View);
+ method public static float getScaleY(android.view.View);
+ method public static java.lang.String getTransitionName(android.view.View);
+ method public static float getTranslationX(android.view.View);
+ method public static float getTranslationY(android.view.View);
+ method public static float getTranslationZ(android.view.View);
+ method public static int getWindowSystemUiVisibility(android.view.View);
+ method public static float getX(android.view.View);
+ method public static float getY(android.view.View);
+ method public static float getZ(android.view.View);
+ method public static boolean hasAccessibilityDelegate(android.view.View);
+ method public static boolean hasNestedScrollingParent(android.view.View);
+ method public static boolean hasTransientState(android.view.View);
+ method public static boolean isAttachedToWindow(android.view.View);
+ method public static boolean isLaidOut(android.view.View);
+ method public static boolean isNestedScrollingEnabled(android.view.View);
+ method public static boolean isOpaque(android.view.View);
+ method public static boolean isPaddingRelative(android.view.View);
+ method public static void jumpDrawablesToCurrentState(android.view.View);
+ 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 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 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 int resolveSizeAndState(int, int, int);
+ 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 void setActivated(android.view.View, boolean);
+ method public static void setAlpha(android.view.View, float);
+ 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 setElevation(android.view.View, float);
+ method public static void setFitsSystemWindows(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 setLabelFor(android.view.View, int);
+ method public static void setLayerPaint(android.view.View, android.graphics.Paint);
+ method public static void setLayerType(android.view.View, int, android.graphics.Paint);
+ method public static void setLayoutDirection(android.view.View, int);
+ method public static void setNestedScrollingEnabled(android.view.View, boolean);
+ method public static void setOnApplyWindowInsetsListener(android.view.View, android.support.v4.view.OnApplyWindowInsetsListener);
+ method public static void setOverScrollMode(android.view.View, int);
+ method public static void setPaddingRelative(android.view.View, int, int, int, int);
+ method public static void setPivotX(android.view.View, float);
+ method public static void setPivotY(android.view.View, float);
+ method public static void setRotation(android.view.View, float);
+ method public static void setRotationX(android.view.View, float);
+ method public static void setRotationY(android.view.View, float);
+ method public static void setSaveFromParentEnabled(android.view.View, boolean);
+ method public static void setScaleX(android.view.View, float);
+ method public static void setScaleY(android.view.View, float);
+ method public static void setTransitionName(android.view.View, java.lang.String);
+ method public static void setTranslationX(android.view.View, float);
+ method public static void setTranslationY(android.view.View, float);
+ method public static void setTranslationZ(android.view.View, float);
+ method public static void setX(android.view.View, float);
+ method public static void setY(android.view.View, float);
+ method public static boolean startNestedScroll(android.view.View, int);
+ method public static void stopNestedScroll(android.view.View);
+ 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 int LAYER_TYPE_HARDWARE = 2; // 0x2
+ field public static final int LAYER_TYPE_NONE = 0; // 0x0
+ field public static final int LAYER_TYPE_SOFTWARE = 1; // 0x1
+ field public static final int LAYOUT_DIRECTION_INHERIT = 2; // 0x2
+ field public static final int LAYOUT_DIRECTION_LOCALE = 3; // 0x3
+ field public static final int LAYOUT_DIRECTION_LTR = 0; // 0x0
+ field public static final int LAYOUT_DIRECTION_RTL = 1; // 0x1
+ field public static final int MEASURED_HEIGHT_STATE_SHIFT = 16; // 0x10
+ field public static final int MEASURED_SIZE_MASK = 16777215; // 0xffffff
+ field public static final int MEASURED_STATE_MASK = -16777216; // 0xff000000
+ field public static final int MEASURED_STATE_TOO_SMALL = 16777216; // 0x1000000
+ field public static final int OVER_SCROLL_ALWAYS = 0; // 0x0
+ field public static final int OVER_SCROLL_IF_CONTENT_SCROLLS = 1; // 0x1
+ field public static final int OVER_SCROLL_NEVER = 2; // 0x2
+ field public static final int SCROLL_AXIS_HORIZONTAL = 1; // 0x1
+ field public static final int SCROLL_AXIS_NONE = 0; // 0x0
+ field public static final int SCROLL_AXIS_VERTICAL = 2; // 0x2
+ }
+
+ public class ViewConfigurationCompat {
+ ctor public ViewConfigurationCompat();
+ method public static int getScaledPagingTouchSlop(android.view.ViewConfiguration);
+ method public static boolean hasPermanentMenuKey(android.view.ViewConfiguration);
+ }
+
+ public 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 boolean onRequestSendAccessibilityEvent(android.view.ViewGroup, android.view.View, android.view.accessibility.AccessibilityEvent);
+ method public static void setLayoutMode(android.view.ViewGroup, int);
+ method public static void setMotionEventSplittingEnabled(android.view.ViewGroup, boolean);
+ method public static void setTransitionGroup(android.view.ViewGroup, boolean);
+ field public static final int LAYOUT_MODE_CLIP_BOUNDS = 0; // 0x0
+ field public static final int LAYOUT_MODE_OPTICAL_BOUNDS = 1; // 0x1
+ }
+
+ public class ViewPager extends android.view.ViewGroup {
+ ctor public ViewPager(android.content.Context);
+ ctor public ViewPager(android.content.Context, android.util.AttributeSet);
+ 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 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);
+ 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 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.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.view.View.BaseSavedState {
+ 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);
+ }
+
+ public 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 onNestedScroll(android.view.ViewParent, android.view.View, int, int, int, int);
+ method public static void onNestedScrollAccepted(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);
+ method public static void onStopNestedScroll(android.view.ViewParent, android.view.View);
+ method public static boolean requestSendAccessibilityEvent(android.view.ViewParent, android.view.View, android.view.accessibility.AccessibilityEvent);
+ }
+
+ public 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 class WindowCompat {
+ ctor public 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 {
+ 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 class AccessibilityEventCompat {
+ method public static void appendRecord(android.view.accessibility.AccessibilityEvent, android.support.v4.view.accessibility.AccessibilityRecordCompat);
+ method public static android.support.v4.view.accessibility.AccessibilityRecordCompat asRecord(android.view.accessibility.AccessibilityEvent);
+ method public static int getContentChangeTypes(android.view.accessibility.AccessibilityEvent);
+ method public static android.support.v4.view.accessibility.AccessibilityRecordCompat getRecord(android.view.accessibility.AccessibilityEvent, int);
+ method public static int getRecordCount(android.view.accessibility.AccessibilityEvent);
+ method public static void setContentChangeTypes(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_GESTURE_DETECTION_END = 524288; // 0x80000
+ field public static final int TYPE_GESTURE_DETECTION_START = 262144; // 0x40000
+ field public static final int TYPE_TOUCH_EXPLORATION_GESTURE_END = 1024; // 0x400
+ field public static final int TYPE_TOUCH_EXPLORATION_GESTURE_START = 512; // 0x200
+ field public static final int TYPE_TOUCH_INTERACTION_END = 2097152; // 0x200000
+ field public static final int TYPE_TOUCH_INTERACTION_START = 1048576; // 0x100000
+ field public static final int TYPE_VIEW_ACCESSIBILITY_FOCUSED = 32768; // 0x8000
+ field public static final int TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED = 65536; // 0x10000
+ field public static final int TYPE_VIEW_HOVER_ENTER = 128; // 0x80
+ field public static final int TYPE_VIEW_HOVER_EXIT = 256; // 0x100
+ field public static final int TYPE_VIEW_SCROLLED = 4096; // 0x1000
+ field public static final int TYPE_VIEW_TEXT_SELECTION_CHANGED = 8192; // 0x2000
+ field public static final int TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY = 131072; // 0x20000
+ field public static final int TYPE_WINDOW_CONTENT_CHANGED = 2048; // 0x800
+ }
+
+ public class AccessibilityManagerCompat {
+ ctor public AccessibilityManagerCompat();
+ method public static boolean addAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat);
+ method public static java.util.List<android.accessibilityservice.AccessibilityServiceInfo> getEnabledAccessibilityServiceList(android.view.accessibility.AccessibilityManager, int);
+ method public static java.util.List<android.accessibilityservice.AccessibilityServiceInfo> getInstalledAccessibilityServiceList(android.view.accessibility.AccessibilityManager);
+ method public static boolean isTouchExplorationEnabled(android.view.accessibility.AccessibilityManager);
+ method public static boolean removeAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat);
+ }
+
+ public static abstract class AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat {
+ ctor public AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat();
+ method public abstract void onAccessibilityStateChanged(boolean);
+ }
+
+ public class AccessibilityNodeInfoCompat {
+ ctor public 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 java.util.List<android.support.v4.view.accessibility.AccessibilityNodeInfoCompat> findAccessibilityNodeInfosByText(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 java.lang.CharSequence getError();
+ method public java.lang.Object getInfo();
+ method public int getLiveRegion();
+ 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 getText();
+ method public java.lang.String getViewIdResourceName();
+ 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 isEnabled();
+ method public boolean isFocusable();
+ method public boolean isFocused();
+ method public boolean isLongClickable();
+ 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 void setAccessibilityFocused(boolean);
+ method public void setBoundsInParent(android.graphics.Rect);
+ method public void setBoundsInScreen(android.graphics.Rect);
+ 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 setEnabled(boolean);
+ method public void setError(java.lang.CharSequence);
+ method public void setFocusable(boolean);
+ method public void setFocused(boolean);
+ method public void setLabelFor(android.view.View);
+ method public void setLabelFor(android.view.View, int);
+ method public void setLiveRegion(int);
+ method public void setLongClickable(boolean);
+ method public void setMovementGranularities(int);
+ 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 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 setViewIdResourceName(java.lang.String);
+ method public void setVisibleToUser(boolean);
+ field public static final int ACTION_ACCESSIBILITY_FOCUS = 64; // 0x40
+ 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_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_COPY = 16384; // 0x4000
+ field public static final int ACTION_CUT = 65536; // 0x10000
+ 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();
+ }
+
+ public static class AccessibilityNodeInfoCompat.CollectionInfoCompat {
+ method public int getColumnCount();
+ method public int getRowCount();
+ method public boolean isHierarchical();
+ method public static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat obtain(int, int, boolean, int);
+ 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);
+ }
+
+ public static class AccessibilityNodeInfoCompat.RangeInfoCompat {
+ method public float getCurrent();
+ method public float getMax();
+ method public float getMin();
+ method public int getType();
+ 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);
+ }
+
+ public class AccessibilityRecordCompat {
+ ctor public deprecated AccessibilityRecordCompat(java.lang.Object);
+ method public int getAddedCount();
+ method public java.lang.CharSequence getBeforeText();
+ method public java.lang.CharSequence getClassName();
+ method public java.lang.CharSequence getContentDescription();
+ method public int getCurrentItemIndex();
+ method public int getFromIndex();
+ method public deprecated java.lang.Object getImpl();
+ method public int getItemCount();
+ method public int getMaxScrollX();
+ method public int getMaxScrollY();
+ method public android.os.Parcelable getParcelableData();
+ method public int getRemovedCount();
+ method public int getScrollX();
+ method public int getScrollY();
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat getSource();
+ method public java.util.List<java.lang.CharSequence> getText();
+ method public int getToIndex();
+ method public int getWindowId();
+ method public boolean isChecked();
+ method public boolean isEnabled();
+ method public boolean isFullScreen();
+ method public boolean isPassword();
+ method public boolean isScrollable();
+ method public static android.support.v4.view.accessibility.AccessibilityRecordCompat obtain(android.support.v4.view.accessibility.AccessibilityRecordCompat);
+ method public static android.support.v4.view.accessibility.AccessibilityRecordCompat obtain();
+ method public void recycle();
+ method public void setAddedCount(int);
+ method public void setBeforeText(java.lang.CharSequence);
+ method public void setChecked(boolean);
+ method public void setClassName(java.lang.CharSequence);
+ method public void setContentDescription(java.lang.CharSequence);
+ method public void setCurrentItemIndex(int);
+ method public void setEnabled(boolean);
+ method public void setFromIndex(int);
+ method public void setFullScreen(boolean);
+ method public void setItemCount(int);
+ method public void setMaxScrollX(int);
+ method public void setMaxScrollY(int);
+ method public void setParcelableData(android.os.Parcelable);
+ method public void setPassword(boolean);
+ method public void setRemovedCount(int);
+ method public void setScrollX(int);
+ method public void setScrollY(int);
+ method public void setScrollable(boolean);
+ method public void setSource(android.view.View);
+ method public void setSource(android.view.View, int);
+ method public void setToIndex(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);
+ }
+
+ public 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 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 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 closeDrawer(android.view.View);
+ method public void closeDrawer(int);
+ method public void closeDrawers();
+ 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(int);
+ method public 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_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.view.View.BaseSavedState {
+ ctor public DrawerLayout.SavedState(android.os.Parcel);
+ 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 class EdgeEffectCompat {
+ ctor public EdgeEffectCompat(android.content.Context);
+ method public boolean draw(android.graphics.Canvas);
+ method public void finish();
+ method public boolean isFinished();
+ method public boolean onAbsorb(int);
+ method public deprecated boolean onPull(float);
+ method public boolean onPull(float, float);
+ method public boolean onRelease();
+ method public void setSize(int, int);
+ }
+
+ public abstract class ExploreByTouchHelper extends android.support.v4.view.AccessibilityDelegateCompat {
+ ctor public ExploreByTouchHelper(android.view.View);
+ method public boolean dispatchHoverEvent(android.view.MotionEvent);
+ method public int getFocusedVirtualView();
+ method protected abstract int getVirtualViewAt(float, float);
+ method protected abstract void getVisibleVirtualViews(java.util.List<java.lang.Integer>);
+ method public void invalidateRoot();
+ method public void invalidateVirtualView(int);
+ method protected abstract boolean onPerformActionForVirtualView(int, int, android.os.Bundle);
+ method protected abstract void onPopulateEventForVirtualView(int, android.view.accessibility.AccessibilityEvent);
+ method protected abstract void onPopulateNodeForVirtualView(int, android.support.v4.view.accessibility.AccessibilityNodeInfoCompat);
+ method public boolean sendEventForVirtualView(int, int);
+ field public static final int INVALID_ID = -2147483648; // 0x80000000
+ }
+
+ public class ListPopupWindowCompat {
+ method public static android.view.View.OnTouchListener createDragToOpenListener(java.lang.Object, android.view.View);
+ }
+
+ 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 implements android.support.v4.view.NestedScrollingChild android.support.v4.view.NestedScrollingParent {
+ 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 executeKeyEvent(android.view.KeyEvent);
+ method public void fling(int);
+ method public boolean fullScroll(int);
+ method public int getMaxScrollAmount();
+ 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 setSmoothScrollingEnabled(boolean);
+ method public final void smoothScrollBy(int, int);
+ method public final void smoothScrollTo(int, int);
+ }
+
+ public class PopupMenuCompat {
+ method public static android.view.View.OnTouchListener getDragToOpenListener(java.lang.Object);
+ }
+
+ public class PopupWindowCompat {
+ method public static void showAsDropDown(android.widget.PopupWindow, android.view.View, 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 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 ScrollerCompat {
+ method public void abortAnimation();
+ method public boolean computeScrollOffset();
+ method public static android.support.v4.widget.ScrollerCompat create(android.content.Context);
+ method public static android.support.v4.widget.ScrollerCompat create(android.content.Context, android.view.animation.Interpolator);
+ method public void fling(int, int, int, int, int, int, int, int);
+ method public void fling(int, int, int, int, int, int, int, int, int, int);
+ method public float getCurrVelocity();
+ method public int getCurrX();
+ method public int getCurrY();
+ method public int getFinalX();
+ method public int getFinalY();
+ method public boolean isFinished();
+ method public boolean isOverScrolled();
+ method public void notifyHorizontalEdgeReached(int, int, int);
+ method public void notifyVerticalEdgeReached(int, int, int);
+ method public void startScroll(int, int, int, int);
+ method public void startScroll(int, int, int, int, int);
+ }
+
+ public class SearchViewCompat {
+ method public static java.lang.CharSequence getQuery(android.view.View);
+ method public static boolean isIconified(android.view.View);
+ method public static boolean isQueryRefinementEnabled(android.view.View);
+ method public static boolean isSubmitButtonEnabled(android.view.View);
+ method public static android.view.View newSearchView(android.content.Context);
+ method public static void setIconified(android.view.View, boolean);
+ method public static void setImeOptions(android.view.View, int);
+ method public static void setInputType(android.view.View, int);
+ method public static void setMaxWidth(android.view.View, int);
+ method public static void setOnCloseListener(android.view.View, android.support.v4.widget.SearchViewCompat.OnCloseListenerCompat);
+ method public static void setOnQueryTextListener(android.view.View, android.support.v4.widget.SearchViewCompat.OnQueryTextListenerCompat);
+ method public static void setQuery(android.view.View, java.lang.CharSequence, boolean);
+ method public static void setQueryHint(android.view.View, java.lang.CharSequence);
+ method public static void setQueryRefinementEnabled(android.view.View, boolean);
+ method public static void setSearchableInfo(android.view.View, android.content.ComponentName);
+ method public static void setSubmitButtonEnabled(android.view.View, boolean);
+ }
+
+ public static abstract class SearchViewCompat.OnCloseListenerCompat {
+ ctor public SearchViewCompat.OnCloseListenerCompat();
+ method public boolean onClose();
+ }
+
+ public static abstract class SearchViewCompat.OnQueryTextListenerCompat {
+ ctor public SearchViewCompat.OnQueryTextListenerCompat();
+ method public boolean onQueryTextChange(java.lang.String);
+ method public boolean onQueryTextSubmit(java.lang.String);
+ }
+
+ 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 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 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.OnRefreshListener {
+ method public abstract void onRefresh();
+ }
+
+ public class TextViewCompat {
+ 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);
+ }
+
+ 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/v4/api/current.txt b/v4/api/current.txt
index ec5ae3e..45912fb 100644
--- a/v4/api/current.txt
+++ b/v4/api/current.txt
@@ -1044,8 +1044,10 @@
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 setGravity(int);
diff --git a/v4/api21/android/support/v4/media/session/MediaSessionCompatApi21.java b/v4/api21/android/support/v4/media/session/MediaSessionCompatApi21.java
index d5f5853..8094391 100644
--- a/v4/api21/android/support/v4/media/session/MediaSessionCompatApi21.java
+++ b/v4/api21/android/support/v4/media/session/MediaSessionCompatApi21.java
@@ -164,7 +164,8 @@
@Override
public boolean onMediaButtonEvent(Intent mediaButtonIntent) {
- return mCallback.onMediaButtonEvent(mediaButtonIntent);
+ return mCallback.onMediaButtonEvent(mediaButtonIntent)
+ || super.onMediaButtonEvent(mediaButtonIntent);
}
@Override
diff --git a/v4/donut/android/support/v4/graphics/drawable/RoundedBitmapDrawable.java b/v4/donut/android/support/v4/graphics/drawable/RoundedBitmapDrawable.java
index 7231a38..0256ebb 100644
--- a/v4/donut/android/support/v4/graphics/drawable/RoundedBitmapDrawable.java
+++ b/v4/donut/android/support/v4/graphics/drawable/RoundedBitmapDrawable.java
@@ -41,7 +41,7 @@
*/
public abstract class RoundedBitmapDrawable extends Drawable {
private static final int DEFAULT_PAINT_FLAGS =
- Paint.FILTER_BITMAP_FLAG | Paint.DITHER_FLAG;
+ Paint.FILTER_BITMAP_FLAG | Paint.DITHER_FLAG | Paint.ANTI_ALIAS_FLAG;
Bitmap mBitmap;
private int mTargetDensity = DisplayMetrics.DENSITY_DEFAULT;
private int mGravity = Gravity.FILL;
@@ -53,8 +53,9 @@
final RectF mDstRectF = new RectF();
private boolean mApplyGravity = true;
+ private boolean mIsCircular;
- // These are scaled to match the target density.
+ // These are scaled to match the target density.
private int mBitmapWidth;
private int mBitmapHeight;
@@ -217,8 +218,12 @@
void updateDstRect() {
if (mApplyGravity) {
- gravityCompatApply(mGravity, mBitmapWidth, mBitmapHeight,
- getBounds(), mDstRect);
+ if (mIsCircular) {
+ final int minDimen = Math.min(mBitmapWidth, mBitmapHeight);
+ gravityCompatApply(Gravity.CENTER, minDimen, minDimen, getBounds(), mDstRect);
+ } else {
+ gravityCompatApply(mGravity, mBitmapWidth, mBitmapHeight, getBounds(), mDstRect);
+ }
mDstRectF.set(mDstRect);
mApplyGravity = false;
}
@@ -266,6 +271,35 @@
}
/**
+ * Sets the image shape to circular.
+ * <p>This overwrites any calls made to {@link #setCornerRadius(float)} so far.</p>
+ * <p>Further, circular images are being placed using {@link Gravity#CENTER}.</p>
+ */
+ public void setCircular(boolean circular) {
+ mIsCircular = circular;
+ mApplyGravity = true;
+ if (circular) {
+ updateCircularCornerRadius();
+ mPaint.setShader(getDefaultShader());
+ invalidateSelf();
+ } else {
+ setCornerRadius(0);
+ }
+ }
+
+ private void updateCircularCornerRadius() {
+ final int minCircularSize = Math.min(mBitmapHeight, mBitmapWidth);
+ mCornerRadius = minCircularSize / 2;
+ }
+
+ /**
+ * @return <code>true</code> if the image is circular, else <code>false</code>.
+ */
+ public boolean isCircular() {
+ return mIsCircular;
+ }
+
+ /**
* Sets the corner radius to be applied when drawing the bitmap.
*/
public void setCornerRadius(float cornerRadius) {
@@ -274,7 +308,19 @@
} else {
mPaint.setShader(null);
}
- mCornerRadius = cornerRadius;
+ if (mCornerRadius != cornerRadius) {
+ invalidateSelf();
+ mCornerRadius = cornerRadius;
+ }
+ }
+
+ @Override
+ protected void onBoundsChange(Rect bounds) {
+ super.onBoundsChange(bounds);
+ if (mIsCircular) {
+ updateCircularCornerRadius();
+ mApplyGravity = true;
+ }
}
/**
@@ -296,7 +342,7 @@
@Override
public int getOpacity() {
- if (mGravity != Gravity.FILL) {
+ if (mGravity != Gravity.FILL || mIsCircular) {
return PixelFormat.TRANSLUCENT;
}
Bitmap bm = mBitmap;
@@ -315,12 +361,19 @@
mBitmap = bitmap;
if (mBitmap != null) {
computeBitmapSize();
- mBitmapShader = new BitmapShader(mBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
+ mBitmapShader = getDefaultShader();
} else {
mBitmapWidth = mBitmapHeight = -1;
}
}
+ private BitmapShader getDefaultShader() {
+ if (mBitmapShader == null) {
+ mBitmapShader = new BitmapShader(mBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
+ }
+ return mBitmapShader;
+ }
+
private static boolean isGreaterThanZero(float toCompare) {
return Float.compare(toCompare, +0.0f) > 0;
}
diff --git a/v4/java/android/support/v4/media/session/MediaSessionCompat.java b/v4/java/android/support/v4/media/session/MediaSessionCompat.java
index fafb8e7..240a381 100644
--- a/v4/java/android/support/v4/media/session/MediaSessionCompat.java
+++ b/v4/java/android/support/v4/media/session/MediaSessionCompat.java
@@ -112,6 +112,14 @@
throw new IllegalArgumentException("tag must not be null or empty");
}
+ if (mediaButtonEventReceiver != null && mbrIntent == null) {
+ // construct a PendingIntent for the media button
+ Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON);
+ // the associated intent will be handled by the component being registered
+ mediaButtonIntent.setComponent(mediaButtonEventReceiver);
+ mbrIntent = PendingIntent.getBroadcast(context,
+ 0/* requestCode, ignored */, mediaButtonIntent, 0/* flags */);
+ }
if (android.os.Build.VERSION.SDK_INT >= 21) {
mImpl = new MediaSessionImplApi21(context, tag);
mImpl.setMediaButtonReceiver(mbrIntent);
@@ -925,7 +933,6 @@
Object getRemoteControlClient();
}
- // TODO: compatibility implementation
static class MediaSessionImplBase implements MediaSessionImpl {
private final Context mContext;
private final ComponentName mComponentName;
@@ -982,15 +989,6 @@
throw new IllegalArgumentException(
"MediaButtonReceiver component may not be null.");
}
- if (mbr == null) {
- // construct a PendingIntent for the media button
- Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON);
- // the associated intent will be handled by the component being
- // registered
- mediaButtonIntent.setComponent(mbrComponent);
- mbr = PendingIntent.getBroadcast(context,
- 0/* requestCode, ignored */, mediaButtonIntent, 0/* flags */);
- }
mContext = context;
mPackageName = context.getPackageName();
mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
@@ -1711,6 +1709,10 @@
private static final int MSG_ADJUST_VOLUME = 16;
private static final int MSG_SET_VOLUME = 17;
+ // KeyEvent constants only available on API 11+
+ private static final int KEYCODE_MEDIA_PAUSE = 127;
+ private static final int KEYCODE_MEDIA_PLAY = 126;
+
public MessageHandler(Looper looper) {
super(looper);
}
@@ -1779,7 +1781,13 @@
mCallback.onCustomAction((String) msg.obj, msg.getData());
break;
case MSG_MEDIA_BUTTON:
- mCallback.onMediaButtonEvent((Intent) msg.obj);
+ KeyEvent keyEvent = (KeyEvent) msg.obj;
+ Intent intent = new Intent(Intent.ACTION_MEDIA_BUTTON);
+ intent.putExtra(Intent.EXTRA_KEY_EVENT, keyEvent);
+ // Let the Callback handle events first before using the default behavior
+ if (!mCallback.onMediaButtonEvent(intent)) {
+ onMediaButtonEvent(keyEvent);
+ }
break;
case MSG_COMMAND:
Command cmd = (Command) msg.obj;
@@ -1793,6 +1801,66 @@
break;
}
}
+
+ private void onMediaButtonEvent(KeyEvent ke) {
+ if (ke == null || ke.getAction() != KeyEvent.ACTION_DOWN) {
+ return;
+ }
+ long validActions = mState == null ? 0 : mState.getActions();
+ switch (ke.getKeyCode()) {
+ // Note KeyEvent.KEYCODE_MEDIA_PLAY is API 11+
+ case KEYCODE_MEDIA_PLAY:
+ if ((validActions & PlaybackStateCompat.ACTION_PLAY) != 0) {
+ mCallback.onPlay();
+ }
+ break;
+ // Note KeyEvent.KEYCODE_MEDIA_PAUSE is API 11+
+ case KEYCODE_MEDIA_PAUSE:
+ if ((validActions & PlaybackStateCompat.ACTION_PAUSE) != 0) {
+ mCallback.onPause();
+ }
+ break;
+ case KeyEvent.KEYCODE_MEDIA_NEXT:
+ if ((validActions & PlaybackStateCompat.ACTION_SKIP_TO_NEXT) != 0) {
+ mCallback.onSkipToNext();
+ }
+ break;
+ case KeyEvent.KEYCODE_MEDIA_PREVIOUS:
+ if ((validActions & PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS) != 0) {
+ mCallback.onSkipToPrevious();
+ }
+ break;
+ case KeyEvent.KEYCODE_MEDIA_STOP:
+ if ((validActions & PlaybackStateCompat.ACTION_STOP) != 0) {
+ mCallback.onStop();
+ }
+ break;
+ case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD:
+ if ((validActions & PlaybackStateCompat.ACTION_FAST_FORWARD) != 0) {
+ mCallback.onFastForward();
+ }
+ break;
+ case KeyEvent.KEYCODE_MEDIA_REWIND:
+ if ((validActions & PlaybackStateCompat.ACTION_REWIND) != 0) {
+ mCallback.onRewind();
+ }
+ break;
+ case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
+ case KeyEvent.KEYCODE_HEADSETHOOK:
+ boolean isPlaying = mState != null
+ && mState.getState() == PlaybackStateCompat.STATE_PLAYING;
+ boolean canPlay = (validActions & (PlaybackStateCompat.ACTION_PLAY_PAUSE
+ | PlaybackStateCompat.ACTION_PLAY)) != 0;
+ boolean canPause = (validActions & (PlaybackStateCompat.ACTION_PLAY_PAUSE
+ | PlaybackStateCompat.ACTION_PAUSE)) != 0;
+ if (isPlaying && canPause) {
+ mCallback.onPause();
+ } else if (!isPlaying && canPlay) {
+ mCallback.onPlay();
+ }
+ break;
+ }
+ }
}
}
diff --git a/v4/java/android/support/v4/text/BidiFormatter.java b/v4/java/android/support/v4/text/BidiFormatter.java
index 70bb85b..0eb86b2 100644
--- a/v4/java/android/support/v4/text/BidiFormatter.java
+++ b/v4/java/android/support/v4/text/BidiFormatter.java
@@ -169,7 +169,7 @@
/**
* Specifies whether the BidiFormatter to be built should also "reset" directionality before
- * a string being bidi-wrapped, not just after it. The default is false.
+ * a string being bidi-wrapped, not just after it. The default is true.
*/
public Builder stereoReset(boolean stereoReset) {
if (stereoReset) {
@@ -355,12 +355,13 @@
* If {@code isolate}, directionally isolates the string so that it does not garble its
* surroundings. Currently, this is done by "resetting" the directionality after the string by
* appending a trailing Unicode bidi mark matching the context directionality (LRM or RLM) when
- * either the overall directionality or the exit directionality of the string is opposite to that
- * of the context. If the formatter was built using {@link Builder#stereoReset(boolean)} and
- * passing "true" as an argument, also prepends a Unicode bidi mark matching the context
- * directionality when either the overall directionality or the entry directionality of the
- * string is opposite to that of the context. Note that as opposed to the overall
- * directionality, the entry and exit directionalities are determined from the string itself.
+ * either the overall directionality or the exit directionality of the string is opposite to
+ * that of the context. Unless the formatter was built using
+ * {@link Builder#stereoReset(boolean)} with a {@code false} argument, also prepends a Unicode
+ * bidi mark matching the context directionality when either the overall directionality or the
+ * entry directionality of the string is opposite to that of the context. Note that as opposed
+ * to the overall directionality, the entry and exit directionalities are determined from the
+ * string itself.
* <p>
* Does *not* do HTML-escaping.
*
diff --git a/v4/java/android/support/v4/view/ActionProvider.java b/v4/java/android/support/v4/view/ActionProvider.java
index f11876a..d195a3a 100644
--- a/v4/java/android/support/v4/view/ActionProvider.java
+++ b/v4/java/android/support/v4/view/ActionProvider.java
@@ -242,6 +242,14 @@
}
/**
+ * @hide
+ */
+ public void reset() {
+ mVisibilityListener = null;
+ mSubUiVisibilityListener = null;
+ }
+
+ /**
* @hide Internal use only
*/
public interface SubUiVisibilityListener {
diff --git a/v4/java/android/support/v4/widget/NestedScrollView.java b/v4/java/android/support/v4/widget/NestedScrollView.java
index eb24814..788761a 100644
--- a/v4/java/android/support/v4/widget/NestedScrollView.java
+++ b/v4/java/android/support/v4/widget/NestedScrollView.java
@@ -1636,6 +1636,7 @@
mIsBeingDragged = false;
recycleVelocityTracker();
+ stopNestedScroll();
if (mEdgeGlowTop != null) {
mEdgeGlowTop.onRelease();
diff --git a/v7/appcompat/api/22.2.1.txt b/v7/appcompat/api/22.2.1.txt
new file mode 100644
index 0000000..1f3e4e7
--- /dev/null
+++ b/v7/appcompat/api/22.2.1.txt
@@ -0,0 +1,1936 @@
+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 deprecated class ActionBarActivity extends android.support.v7.app.AppCompatActivity {
+ ctor public ActionBarActivity();
+ }
+
+ 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.view.View.OnClickListener getToolbarNavigationClickListener();
+ 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 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 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 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 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 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 void installViewFactory();
+ method public abstract void invalidateOptionsMenu();
+ 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 onStop();
+ method public abstract boolean requestWindowFeature(int);
+ 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 abstract void setHandleNativeActionModesEnabled(boolean);
+ 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);
+ }
+
+ 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 NotificationCompat extends android.support.v4.app.NotificationCompat {
+ ctor public NotificationCompat();
+ }
+
+ public static class NotificationCompat.Builder extends android.support.v4.app.NotificationCompat.Builder {
+ ctor public NotificationCompat.Builder(android.content.Context);
+ }
+
+ 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 android.support.v7.app.NotificationCompat.MediaStyle setCancelButtonIntent(android.app.PendingIntent);
+ method public android.support.v7.app.NotificationCompat.MediaStyle setMediaSession(android.support.v4.media.session.MediaSessionCompat.Token);
+ method public android.support.v7.app.NotificationCompat.MediaStyle setShowActionsInCompactView(int...);
+ method public android.support.v7.app.NotificationCompat.MediaStyle setShowCancelButton(boolean);
+ }
+
+}
+
+package android.support.v7.appcompat {
+
+ public final class R {
+ ctor public R();
+ }
+
+ public static final class R.anim {
+ ctor public R.anim();
+ field public static int abc_fade_in;
+ field public static int abc_fade_out;
+ field public static int abc_grow_fade_in_from_bottom;
+ field public static int abc_popup_enter;
+ field public static int abc_popup_exit;
+ field public static int abc_shrink_fade_out_from_bottom;
+ field public static int abc_slide_in_bottom;
+ field public static int abc_slide_in_top;
+ field public static int abc_slide_out_bottom;
+ field public static int abc_slide_out_top;
+ }
+
+ public static final class R.attr {
+ ctor public R.attr();
+ field public static int actionBarDivider;
+ field public static int actionBarItemBackground;
+ field public static int actionBarPopupTheme;
+ field public static int actionBarSize;
+ field public static int actionBarSplitStyle;
+ field public static int actionBarStyle;
+ field public static int actionBarTabBarStyle;
+ field public static int actionBarTabStyle;
+ field public static int actionBarTabTextStyle;
+ field public static int actionBarTheme;
+ field public static int actionBarWidgetTheme;
+ field public static int actionButtonStyle;
+ field public static int actionDropDownStyle;
+ field public static int actionLayout;
+ field public static int actionMenuTextAppearance;
+ field public static int actionMenuTextColor;
+ field public static int actionModeBackground;
+ field public static int actionModeCloseButtonStyle;
+ field public static int actionModeCloseDrawable;
+ field public static int actionModeCopyDrawable;
+ field public static int actionModeCutDrawable;
+ field public static int actionModeFindDrawable;
+ field public static int actionModePasteDrawable;
+ field public static int actionModePopupWindowStyle;
+ field public static int actionModeSelectAllDrawable;
+ field public static int actionModeShareDrawable;
+ field public static int actionModeSplitBackground;
+ field public static int actionModeStyle;
+ field public static int actionModeWebSearchDrawable;
+ field public static int actionOverflowButtonStyle;
+ field public static int actionOverflowMenuStyle;
+ field public static int actionProviderClass;
+ field public static int actionViewClass;
+ field public static int activityChooserViewStyle;
+ field public static int alertDialogButtonGroupStyle;
+ field public static int alertDialogCenterButtons;
+ field public static int alertDialogStyle;
+ field public static int alertDialogTheme;
+ field public static int autoCompleteTextViewStyle;
+ field public static int background;
+ field public static int backgroundSplit;
+ field public static int backgroundStacked;
+ field public static int backgroundTint;
+ field public static int backgroundTintMode;
+ field public static int barSize;
+ field public static int borderlessButtonStyle;
+ field public static int buttonBarButtonStyle;
+ field public static int buttonBarNegativeButtonStyle;
+ field public static int buttonBarNeutralButtonStyle;
+ field public static int buttonBarPositiveButtonStyle;
+ field public static int buttonBarStyle;
+ field public static int buttonPanelSideLayout;
+ field public static int buttonStyle;
+ field public static int buttonStyleSmall;
+ field public static int checkboxStyle;
+ field public static int checkedTextViewStyle;
+ field public static int closeIcon;
+ field public static int closeItemLayout;
+ field public static int collapseContentDescription;
+ field public static int collapseIcon;
+ field public static int color;
+ field public static int colorAccent;
+ field public static int colorButtonNormal;
+ field public static int colorControlActivated;
+ field public static int colorControlHighlight;
+ field public static int colorControlNormal;
+ field public static int colorPrimary;
+ field public static int colorPrimaryDark;
+ field public static int colorSwitchThumbNormal;
+ field public static int commitIcon;
+ field public static int contentInsetEnd;
+ field public static int contentInsetLeft;
+ field public static int contentInsetRight;
+ field public static int contentInsetStart;
+ field public static int customNavigationLayout;
+ field public static int defaultQueryHint;
+ field public static int dialogPreferredPadding;
+ field public static int dialogTheme;
+ field public static int disableChildrenWhenDisabled;
+ field public static int displayOptions;
+ field public static int divider;
+ field public static int dividerHorizontal;
+ field public static int dividerPadding;
+ field public static int dividerVertical;
+ field public static int drawableSize;
+ field public static int drawerArrowStyle;
+ field public static int dropDownListViewStyle;
+ field public static int dropdownListPreferredItemHeight;
+ field public static int editTextBackground;
+ field public static int editTextColor;
+ field public static int editTextStyle;
+ field public static int elevation;
+ field public static int expandActivityOverflowButtonDrawable;
+ field public static int gapBetweenBars;
+ field public static int goIcon;
+ field public static int height;
+ field public static int hideOnContentScroll;
+ field public static int homeAsUpIndicator;
+ field public static int homeLayout;
+ field public static int icon;
+ field public static int iconifiedByDefault;
+ field public static int indeterminateProgressStyle;
+ field public static int initialActivityCount;
+ field public static int isLightTheme;
+ field public static int itemPadding;
+ field public static int layout;
+ field public static int listChoiceBackgroundIndicator;
+ field public static int listDividerAlertDialog;
+ field public static int listItemLayout;
+ field public static int listLayout;
+ field public static int listPopupWindowStyle;
+ field public static int listPreferredItemHeight;
+ field public static int listPreferredItemHeightLarge;
+ field public static int listPreferredItemHeightSmall;
+ field public static int listPreferredItemPaddingLeft;
+ field public static int listPreferredItemPaddingRight;
+ field public static int logo;
+ field public static int maxButtonHeight;
+ field public static int measureWithLargestChild;
+ field public static int middleBarArrowSize;
+ field public static int multiChoiceItemLayout;
+ field public static int navigationContentDescription;
+ field public static int navigationIcon;
+ field public static int navigationMode;
+ field public static int overlapAnchor;
+ field public static int paddingEnd;
+ field public static int paddingStart;
+ field public static int panelBackground;
+ field public static int panelMenuListTheme;
+ field public static int panelMenuListWidth;
+ field public static int popupMenuStyle;
+ field public static int popupPromptView;
+ field public static int popupTheme;
+ field public static int popupWindowStyle;
+ field public static int preserveIconSpacing;
+ field public static int progressBarPadding;
+ field public static int progressBarStyle;
+ field public static int prompt;
+ field public static int queryBackground;
+ field public static int queryHint;
+ field public static int radioButtonStyle;
+ field public static int ratingBarStyle;
+ field public static int searchHintIcon;
+ field public static int searchIcon;
+ field public static int searchViewStyle;
+ field public static int selectableItemBackground;
+ field public static int selectableItemBackgroundBorderless;
+ field public static int showAsAction;
+ field public static int showDividers;
+ field public static int showText;
+ field public static int singleChoiceItemLayout;
+ field public static int spinBars;
+ field public static int spinnerDropDownItemStyle;
+ field public static int spinnerMode;
+ field public static int spinnerStyle;
+ field public static int splitTrack;
+ field public static int state_above_anchor;
+ field public static int submitBackground;
+ field public static int subtitle;
+ field public static int subtitleTextAppearance;
+ field public static int subtitleTextStyle;
+ field public static int suggestionRowLayout;
+ field public static int switchMinWidth;
+ field public static int switchPadding;
+ field public static int switchStyle;
+ field public static int switchTextAppearance;
+ field public static int textAllCaps;
+ field public static int textAppearanceLargePopupMenu;
+ field public static int textAppearanceListItem;
+ field public static int textAppearanceListItemSmall;
+ field public static int textAppearanceSearchResultSubtitle;
+ field public static int textAppearanceSearchResultTitle;
+ field public static int textAppearanceSmallPopupMenu;
+ field public static int textColorAlertDialogListItem;
+ field public static int textColorSearchUrl;
+ field public static int theme;
+ field public static int thickness;
+ field public static int thumbTextPadding;
+ field public static int title;
+ field public static int titleMarginBottom;
+ field public static int titleMarginEnd;
+ field public static int titleMarginStart;
+ field public static int titleMarginTop;
+ field public static int titleMargins;
+ field public static int titleTextAppearance;
+ field public static int titleTextStyle;
+ field public static int toolbarNavigationButtonStyle;
+ field public static int toolbarStyle;
+ field public static int topBottomBarArrowSize;
+ field public static int track;
+ field public static int voiceIcon;
+ field public static int windowActionBar;
+ field public static int windowActionBarOverlay;
+ field public static int windowActionModeOverlay;
+ field public static int windowFixedHeightMajor;
+ field public static int windowFixedHeightMinor;
+ field public static int windowFixedWidthMajor;
+ field public static int windowFixedWidthMinor;
+ field public static int windowMinWidthMajor;
+ field public static int windowMinWidthMinor;
+ field public static int windowNoTitle;
+ }
+
+ public static final class R.bool {
+ ctor public R.bool();
+ field public static int abc_action_bar_embed_tabs;
+ field public static int abc_action_bar_embed_tabs_pre_jb;
+ field public static int abc_action_bar_expanded_action_views_exclusive;
+ field public static int abc_config_actionMenuItemAllCaps;
+ field public static int abc_config_allowActionMenuItemTextWithIcon;
+ field public static int abc_config_closeDialogWhenTouchOutside;
+ field public static int abc_config_showMenuShortcutsWhenKeyboardPresent;
+ }
+
+ public static final class R.color {
+ ctor public R.color();
+ field public static int abc_background_cache_hint_selector_material_dark;
+ field public static int abc_background_cache_hint_selector_material_light;
+ field public static int abc_input_method_navigation_guard;
+ field public static int abc_primary_text_disable_only_material_dark;
+ field public static int abc_primary_text_disable_only_material_light;
+ field public static int abc_primary_text_material_dark;
+ field public static int abc_primary_text_material_light;
+ field public static int abc_search_url_text;
+ field public static int abc_search_url_text_normal;
+ field public static int abc_search_url_text_pressed;
+ field public static int abc_search_url_text_selected;
+ field public static int abc_secondary_text_material_dark;
+ field public static int abc_secondary_text_material_light;
+ field public static int accent_material_dark;
+ field public static int accent_material_light;
+ field public static int background_floating_material_dark;
+ field public static int background_floating_material_light;
+ field public static int background_material_dark;
+ field public static int background_material_light;
+ field public static int bright_foreground_disabled_material_dark;
+ field public static int bright_foreground_disabled_material_light;
+ field public static int bright_foreground_inverse_material_dark;
+ field public static int bright_foreground_inverse_material_light;
+ field public static int bright_foreground_material_dark;
+ field public static int bright_foreground_material_light;
+ field public static int button_material_dark;
+ field public static int button_material_light;
+ field public static int dim_foreground_disabled_material_dark;
+ field public static int dim_foreground_disabled_material_light;
+ field public static int dim_foreground_material_dark;
+ field public static int dim_foreground_material_light;
+ field public static int highlighted_text_material_dark;
+ field public static int highlighted_text_material_light;
+ field public static int hint_foreground_material_dark;
+ field public static int hint_foreground_material_light;
+ field public static int link_text_material_dark;
+ field public static int link_text_material_light;
+ field public static int material_blue_grey_800;
+ field public static int material_blue_grey_900;
+ field public static int material_blue_grey_950;
+ field public static int material_deep_teal_200;
+ field public static int material_deep_teal_500;
+ field public static int primary_dark_material_dark;
+ field public static int primary_dark_material_light;
+ field public static int primary_material_dark;
+ field public static int primary_material_light;
+ field public static int primary_text_default_material_dark;
+ field public static int primary_text_default_material_light;
+ field public static int primary_text_disabled_material_dark;
+ field public static int primary_text_disabled_material_light;
+ field public static int ripple_material_dark;
+ field public static int ripple_material_light;
+ field public static int secondary_text_default_material_dark;
+ field public static int secondary_text_default_material_light;
+ field public static int secondary_text_disabled_material_dark;
+ field public static int secondary_text_disabled_material_light;
+ field public static int switch_thumb_disabled_material_dark;
+ field public static int switch_thumb_disabled_material_light;
+ field public static int switch_thumb_material_dark;
+ field public static int switch_thumb_material_light;
+ field public static int switch_thumb_normal_material_dark;
+ field public static int switch_thumb_normal_material_light;
+ }
+
+ public static final class R.dimen {
+ ctor public R.dimen();
+ field public static int abc_action_bar_content_inset_material;
+ field public static int abc_action_bar_default_height_material;
+ field public static int abc_action_bar_default_padding_material;
+ field public static int abc_action_bar_icon_vertical_padding_material;
+ field public static int abc_action_bar_navigation_padding_start_material;
+ field public static int abc_action_bar_overflow_padding_end_material;
+ field public static int abc_action_bar_overflow_padding_start_material;
+ field public static int abc_action_bar_progress_bar_size;
+ field public static int abc_action_bar_stacked_max_height;
+ field public static int abc_action_bar_stacked_tab_max_width;
+ field public static int abc_action_bar_subtitle_bottom_margin_material;
+ field public static int abc_action_bar_subtitle_top_margin_material;
+ field public static int abc_action_button_min_height_material;
+ field public static int abc_action_button_min_width_material;
+ field public static int abc_action_button_min_width_overflow_material;
+ field public static int abc_alert_dialog_button_bar_height;
+ field public static int abc_button_inset_horizontal_material;
+ field public static int abc_button_inset_vertical_material;
+ field public static int abc_button_padding_horizontal_material;
+ field public static int abc_button_padding_vertical_material;
+ field public static int abc_config_prefDialogWidth;
+ field public static int abc_control_corner_material;
+ field public static int abc_control_inset_material;
+ field public static int abc_control_padding_material;
+ field public static int abc_dialog_list_padding_vertical_material;
+ field public static int abc_dialog_min_width_major;
+ field public static int abc_dialog_min_width_minor;
+ field public static int abc_dialog_padding_material;
+ field public static int abc_dialog_padding_top_material;
+ field public static int abc_disabled_alpha_material_dark;
+ field public static int abc_disabled_alpha_material_light;
+ field public static int abc_dropdownitem_icon_width;
+ field public static int abc_dropdownitem_text_padding_left;
+ field public static int abc_dropdownitem_text_padding_right;
+ field public static int abc_edit_text_inset_bottom_material;
+ field public static int abc_edit_text_inset_horizontal_material;
+ field public static int abc_edit_text_inset_top_material;
+ field public static int abc_floating_window_z;
+ field public static int abc_list_item_padding_horizontal_material;
+ field public static int abc_panel_menu_list_width;
+ field public static int abc_search_view_preferred_width;
+ field public static int abc_search_view_text_min_width;
+ field public static int abc_switch_padding;
+ field public static int abc_text_size_body_1_material;
+ field public static int abc_text_size_body_2_material;
+ field public static int abc_text_size_button_material;
+ field public static int abc_text_size_caption_material;
+ field public static int abc_text_size_display_1_material;
+ field public static int abc_text_size_display_2_material;
+ field public static int abc_text_size_display_3_material;
+ field public static int abc_text_size_display_4_material;
+ field public static int abc_text_size_headline_material;
+ field public static int abc_text_size_large_material;
+ field public static int abc_text_size_medium_material;
+ field public static int abc_text_size_menu_material;
+ field public static int abc_text_size_small_material;
+ field public static int abc_text_size_subhead_material;
+ field public static int abc_text_size_subtitle_material_toolbar;
+ field public static int abc_text_size_title_material;
+ field public static int abc_text_size_title_material_toolbar;
+ field public static int dialog_fixed_height_major;
+ field public static int dialog_fixed_height_minor;
+ field public static int dialog_fixed_width_major;
+ field public static int dialog_fixed_width_minor;
+ field public static int disabled_alpha_material_dark;
+ field public static int disabled_alpha_material_light;
+ field public static int notification_large_icon_height;
+ field public static int notification_large_icon_width;
+ field public static int notification_subtext_size;
+ }
+
+ public static final class R.drawable {
+ ctor public R.drawable();
+ field public static int abc_ab_share_pack_mtrl_alpha;
+ field public static int abc_btn_borderless_material;
+ field public static int abc_btn_check_material;
+ field public static int abc_btn_check_to_on_mtrl_000;
+ field public static int abc_btn_check_to_on_mtrl_015;
+ field public static int abc_btn_default_mtrl_shape;
+ field public static int abc_btn_radio_material;
+ field public static int abc_btn_radio_to_on_mtrl_000;
+ field public static int abc_btn_radio_to_on_mtrl_015;
+ field public static int abc_btn_rating_star_off_mtrl_alpha;
+ field public static int abc_btn_rating_star_on_mtrl_alpha;
+ field public static int abc_btn_switch_to_on_mtrl_00001;
+ field public static int abc_btn_switch_to_on_mtrl_00012;
+ field public static int abc_cab_background_internal_bg;
+ field public static int abc_cab_background_top_material;
+ field public static int abc_cab_background_top_mtrl_alpha;
+ field public static int abc_dialog_material_background_dark;
+ field public static int abc_dialog_material_background_light;
+ field public static int abc_edit_text_material;
+ field public static int abc_ic_ab_back_mtrl_am_alpha;
+ field public static int abc_ic_clear_mtrl_alpha;
+ field public static int abc_ic_commit_search_api_mtrl_alpha;
+ field public static int abc_ic_go_search_api_mtrl_alpha;
+ field public static int abc_ic_menu_copy_mtrl_am_alpha;
+ field public static int abc_ic_menu_cut_mtrl_alpha;
+ field public static int abc_ic_menu_moreoverflow_mtrl_alpha;
+ field public static int abc_ic_menu_paste_mtrl_am_alpha;
+ field public static int abc_ic_menu_selectall_mtrl_alpha;
+ field public static int abc_ic_menu_share_mtrl_alpha;
+ field public static int abc_ic_search_api_mtrl_alpha;
+ field public static int abc_ic_voice_search_api_mtrl_alpha;
+ field public static int abc_item_background_holo_dark;
+ field public static int abc_item_background_holo_light;
+ field public static int abc_list_divider_mtrl_alpha;
+ field public static int abc_list_focused_holo;
+ field public static int abc_list_longpressed_holo;
+ field public static int abc_list_pressed_holo_dark;
+ field public static int abc_list_pressed_holo_light;
+ field public static int abc_list_selector_background_transition_holo_dark;
+ field public static int abc_list_selector_background_transition_holo_light;
+ field public static int abc_list_selector_disabled_holo_dark;
+ field public static int abc_list_selector_disabled_holo_light;
+ field public static int abc_list_selector_holo_dark;
+ field public static int abc_list_selector_holo_light;
+ field public static int abc_menu_hardkey_panel_mtrl_mult;
+ field public static int abc_popup_background_mtrl_mult;
+ field public static int abc_ratingbar_full_material;
+ field public static int abc_spinner_mtrl_am_alpha;
+ field public static int abc_spinner_textfield_background_material;
+ field public static int abc_switch_thumb_material;
+ field public static int abc_switch_track_mtrl_alpha;
+ field public static int abc_tab_indicator_material;
+ field public static int abc_tab_indicator_mtrl_alpha;
+ field public static int abc_text_cursor_mtrl_alpha;
+ field public static int abc_textfield_activated_mtrl_alpha;
+ field public static int abc_textfield_default_mtrl_alpha;
+ field public static int abc_textfield_search_activated_mtrl_alpha;
+ field public static int abc_textfield_search_default_mtrl_alpha;
+ field public static int abc_textfield_search_material;
+ field public static int notification_template_icon_bg;
+ }
+
+ public static final class R.id {
+ ctor public R.id();
+ field public static int action0;
+ field public static int action_bar;
+ field public static int action_bar_activity_content;
+ field public static int action_bar_container;
+ field public static int action_bar_root;
+ field public static int action_bar_spinner;
+ field public static int action_bar_subtitle;
+ field public static int action_bar_title;
+ field public static int action_context_bar;
+ field public static int action_divider;
+ field public static int action_menu_divider;
+ field public static int action_menu_presenter;
+ field public static int action_mode_bar;
+ field public static int action_mode_bar_stub;
+ field public static int action_mode_close_button;
+ field public static int activity_chooser_view_content;
+ field public static int alertTitle;
+ field public static int always;
+ field public static int beginning;
+ field public static int buttonPanel;
+ field public static int cancel_action;
+ field public static int checkbox;
+ field public static int chronometer;
+ field public static int collapseActionView;
+ field public static int contentPanel;
+ field public static int custom;
+ field public static int customPanel;
+ field public static int decor_content_parent;
+ field public static int default_activity_button;
+ field public static int dialog;
+ field public static int disableHome;
+ field public static int dropdown;
+ field public static int edit_query;
+ field public static int end;
+ field public static int end_padder;
+ field public static int expand_activities_button;
+ field public static int expanded_menu;
+ field public static int home;
+ field public static int homeAsUp;
+ field public static int icon;
+ field public static int ifRoom;
+ field public static int image;
+ field public static int info;
+ field public static int line1;
+ field public static int line3;
+ field public static int listMode;
+ field public static int list_item;
+ field public static int media_actions;
+ field public static int middle;
+ field public static int multiply;
+ field public static int never;
+ field public static int none;
+ field public static int normal;
+ field public static int parentPanel;
+ field public static int progress_circular;
+ field public static int progress_horizontal;
+ field public static int radio;
+ field public static int screen;
+ field public static int scrollView;
+ field public static int search_badge;
+ field public static int search_bar;
+ field public static int search_button;
+ field public static int search_close_btn;
+ field public static int search_edit_frame;
+ field public static int search_go_btn;
+ field public static int search_mag_icon;
+ field public static int search_plate;
+ field public static int search_src_text;
+ field public static int search_voice_btn;
+ field public static int select_dialog_listview;
+ field public static int shortcut;
+ field public static int showCustom;
+ field public static int showHome;
+ field public static int showTitle;
+ field public static int split_action_bar;
+ field public static int src_atop;
+ field public static int src_in;
+ field public static int src_over;
+ field public static int status_bar_latest_event_content;
+ field public static int submit_area;
+ field public static int tabMode;
+ field public static int text;
+ field public static int text2;
+ field public static int textSpacerNoButtons;
+ field public static int time;
+ field public static int title;
+ field public static int title_template;
+ field public static int topPanel;
+ field public static int up;
+ field public static int useLogo;
+ field public static int withText;
+ field public static int wrap_content;
+ }
+
+ public static final class R.integer {
+ ctor public R.integer();
+ field public static int abc_config_activityDefaultDur;
+ field public static int abc_config_activityShortDur;
+ field public static int abc_max_action_buttons;
+ field public static int cancel_button_image_alpha;
+ field public static int status_bar_notification_info_maxnum;
+ }
+
+ public static final class R.layout {
+ ctor public R.layout();
+ field public static int abc_action_bar_title_item;
+ field public static int abc_action_bar_up_container;
+ field public static int abc_action_bar_view_list_nav_layout;
+ field public static int abc_action_menu_item_layout;
+ field public static int abc_action_menu_layout;
+ field public static int abc_action_mode_bar;
+ field public static int abc_action_mode_close_item_material;
+ field public static int abc_activity_chooser_view;
+ field public static int abc_activity_chooser_view_list_item;
+ field public static int abc_alert_dialog_material;
+ field public static int abc_dialog_title_material;
+ field public static int abc_expanded_menu_layout;
+ field public static int abc_list_menu_item_checkbox;
+ field public static int abc_list_menu_item_icon;
+ field public static int abc_list_menu_item_layout;
+ field public static int abc_list_menu_item_radio;
+ field public static int abc_popup_menu_item_layout;
+ field public static int abc_screen_content_include;
+ field public static int abc_screen_simple;
+ field public static int abc_screen_simple_overlay_action_mode;
+ field public static int abc_screen_toolbar;
+ field public static int abc_search_dropdown_item_icons_2line;
+ field public static int abc_search_view;
+ field public static int abc_select_dialog_material;
+ field public static int abc_simple_dropdown_hint;
+ field public static int notification_media_action;
+ field public static int notification_media_cancel_action;
+ field public static int notification_template_big_media;
+ field public static int notification_template_big_media_narrow;
+ field public static int notification_template_lines;
+ field public static int notification_template_media;
+ field public static int notification_template_part_chronometer;
+ field public static int notification_template_part_time;
+ field public static int select_dialog_item_material;
+ field public static int select_dialog_multichoice_material;
+ field public static int select_dialog_singlechoice_material;
+ field public static int support_simple_spinner_dropdown_item;
+ }
+
+ public static final class R.string {
+ ctor public R.string();
+ field public static int abc_action_bar_home_description;
+ field public static int abc_action_bar_home_description_format;
+ field public static int abc_action_bar_home_subtitle_description_format;
+ field public static int abc_action_bar_up_description;
+ field public static int abc_action_menu_overflow_description;
+ field public static int abc_action_mode_done;
+ field public static int abc_activity_chooser_view_see_all;
+ field public static int abc_activitychooserview_choose_application;
+ field public static int abc_search_hint;
+ field public static int abc_searchview_description_clear;
+ field public static int abc_searchview_description_query;
+ field public static int abc_searchview_description_search;
+ field public static int abc_searchview_description_submit;
+ field public static int abc_searchview_description_voice;
+ field public static int abc_shareactionprovider_share_with;
+ field public static int abc_shareactionprovider_share_with_application;
+ field public static int abc_toolbar_collapse_description;
+ field public static int status_bar_notification_info_overflow;
+ }
+
+ public static final class R.style {
+ ctor public R.style();
+ field public static int AlertDialog_AppCompat;
+ field public static int AlertDialog_AppCompat_Light;
+ field public static int Animation_AppCompat_Dialog;
+ field public static int Animation_AppCompat_DropDownUp;
+ field public static int Base_AlertDialog_AppCompat;
+ field public static int Base_AlertDialog_AppCompat_Light;
+ field public static int Base_Animation_AppCompat_Dialog;
+ field public static int Base_Animation_AppCompat_DropDownUp;
+ field public static int Base_DialogWindowTitleBackground_AppCompat;
+ field public static int Base_DialogWindowTitle_AppCompat;
+ field public static int Base_TextAppearance_AppCompat;
+ field public static int Base_TextAppearance_AppCompat_Body1;
+ field public static int Base_TextAppearance_AppCompat_Body2;
+ field public static int Base_TextAppearance_AppCompat_Button;
+ field public static int Base_TextAppearance_AppCompat_Caption;
+ field public static int Base_TextAppearance_AppCompat_Display1;
+ field public static int Base_TextAppearance_AppCompat_Display2;
+ field public static int Base_TextAppearance_AppCompat_Display3;
+ field public static int Base_TextAppearance_AppCompat_Display4;
+ field public static int Base_TextAppearance_AppCompat_Headline;
+ field public static int Base_TextAppearance_AppCompat_Inverse;
+ field public static int Base_TextAppearance_AppCompat_Large;
+ field public static int Base_TextAppearance_AppCompat_Large_Inverse;
+ field public static int Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Large;
+ field public static int Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Small;
+ field public static int Base_TextAppearance_AppCompat_Medium;
+ field public static int Base_TextAppearance_AppCompat_Medium_Inverse;
+ field public static int Base_TextAppearance_AppCompat_Menu;
+ field public static int Base_TextAppearance_AppCompat_SearchResult;
+ field public static int Base_TextAppearance_AppCompat_SearchResult_Subtitle;
+ field public static int Base_TextAppearance_AppCompat_SearchResult_Title;
+ field public static int Base_TextAppearance_AppCompat_Small;
+ field public static int Base_TextAppearance_AppCompat_Small_Inverse;
+ field public static int Base_TextAppearance_AppCompat_Subhead;
+ field public static int Base_TextAppearance_AppCompat_Subhead_Inverse;
+ field public static int Base_TextAppearance_AppCompat_Title;
+ field public static int Base_TextAppearance_AppCompat_Title_Inverse;
+ field public static int Base_TextAppearance_AppCompat_Widget_ActionBar_Menu;
+ field public static int Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle;
+ field public static int Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse;
+ field public static int Base_TextAppearance_AppCompat_Widget_ActionBar_Title;
+ field public static int Base_TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse;
+ field public static int Base_TextAppearance_AppCompat_Widget_ActionMode_Subtitle;
+ field public static int Base_TextAppearance_AppCompat_Widget_ActionMode_Title;
+ field public static int Base_TextAppearance_AppCompat_Widget_DropDownItem;
+ field public static int Base_TextAppearance_AppCompat_Widget_PopupMenu_Large;
+ field public static int Base_TextAppearance_AppCompat_Widget_PopupMenu_Small;
+ field public static int Base_TextAppearance_AppCompat_Widget_Switch;
+ field public static int Base_TextAppearance_AppCompat_Widget_TextView_SpinnerItem;
+ field public static int Base_TextAppearance_Widget_AppCompat_ExpandedMenu_Item;
+ field public static int Base_TextAppearance_Widget_AppCompat_Toolbar_Subtitle;
+ field public static int Base_TextAppearance_Widget_AppCompat_Toolbar_Title;
+ field public static int Base_ThemeOverlay_AppCompat;
+ field public static int Base_ThemeOverlay_AppCompat_ActionBar;
+ field public static int Base_ThemeOverlay_AppCompat_Dark;
+ field public static int Base_ThemeOverlay_AppCompat_Dark_ActionBar;
+ field public static int Base_ThemeOverlay_AppCompat_Light;
+ field public static int Base_Theme_AppCompat;
+ field public static int Base_Theme_AppCompat_CompactMenu;
+ field public static int Base_Theme_AppCompat_Dialog;
+ field public static int Base_Theme_AppCompat_DialogWhenLarge;
+ field public static int Base_Theme_AppCompat_Dialog_Alert;
+ field public static int Base_Theme_AppCompat_Dialog_FixedSize;
+ field public static int Base_Theme_AppCompat_Dialog_MinWidth;
+ field public static int Base_Theme_AppCompat_Light;
+ field public static int Base_Theme_AppCompat_Light_DarkActionBar;
+ field public static int Base_Theme_AppCompat_Light_Dialog;
+ field public static int Base_Theme_AppCompat_Light_DialogWhenLarge;
+ field public static int Base_Theme_AppCompat_Light_Dialog_Alert;
+ field public static int Base_Theme_AppCompat_Light_Dialog_FixedSize;
+ field public static int Base_Theme_AppCompat_Light_Dialog_MinWidth;
+ field public static int Base_V11_Theme_AppCompat_Dialog;
+ field public static int Base_V11_Theme_AppCompat_Light_Dialog;
+ field public static int Base_V12_Widget_AppCompat_AutoCompleteTextView;
+ field public static int Base_V12_Widget_AppCompat_EditText;
+ field public static int Base_V21_Theme_AppCompat;
+ field public static int Base_V21_Theme_AppCompat_Dialog;
+ field public static int Base_V21_Theme_AppCompat_Light;
+ field public static int Base_V21_Theme_AppCompat_Light_Dialog;
+ field public static int Base_V7_Theme_AppCompat;
+ field public static int Base_V7_Theme_AppCompat_Dialog;
+ field public static int Base_V7_Theme_AppCompat_Light;
+ field public static int Base_V7_Theme_AppCompat_Light_Dialog;
+ field public static int Base_V7_Widget_AppCompat_AutoCompleteTextView;
+ field public static int Base_V7_Widget_AppCompat_EditText;
+ field public static int Base_Widget_AppCompat_ActionBar;
+ field public static int Base_Widget_AppCompat_ActionBar_Solid;
+ field public static int Base_Widget_AppCompat_ActionBar_TabBar;
+ field public static int Base_Widget_AppCompat_ActionBar_TabText;
+ field public static int Base_Widget_AppCompat_ActionBar_TabView;
+ field public static int Base_Widget_AppCompat_ActionButton;
+ field public static int Base_Widget_AppCompat_ActionButton_CloseMode;
+ field public static int Base_Widget_AppCompat_ActionButton_Overflow;
+ field public static int Base_Widget_AppCompat_ActionMode;
+ field public static int Base_Widget_AppCompat_ActivityChooserView;
+ field public static int Base_Widget_AppCompat_AutoCompleteTextView;
+ field public static int Base_Widget_AppCompat_Button;
+ field public static int Base_Widget_AppCompat_ButtonBar;
+ field public static int Base_Widget_AppCompat_ButtonBar_AlertDialog;
+ field public static int Base_Widget_AppCompat_Button_Borderless;
+ field public static int Base_Widget_AppCompat_Button_Borderless_Colored;
+ field public static int Base_Widget_AppCompat_Button_ButtonBar_AlertDialog;
+ field public static int Base_Widget_AppCompat_Button_Small;
+ field public static int Base_Widget_AppCompat_CompoundButton_CheckBox;
+ field public static int Base_Widget_AppCompat_CompoundButton_RadioButton;
+ field public static int Base_Widget_AppCompat_CompoundButton_Switch;
+ field public static int Base_Widget_AppCompat_DrawerArrowToggle;
+ field public static int Base_Widget_AppCompat_DrawerArrowToggle_Common;
+ field public static int Base_Widget_AppCompat_DropDownItem_Spinner;
+ field public static int Base_Widget_AppCompat_EditText;
+ field public static int Base_Widget_AppCompat_Light_ActionBar;
+ field public static int Base_Widget_AppCompat_Light_ActionBar_Solid;
+ field public static int Base_Widget_AppCompat_Light_ActionBar_TabBar;
+ field public static int Base_Widget_AppCompat_Light_ActionBar_TabText;
+ field public static int Base_Widget_AppCompat_Light_ActionBar_TabText_Inverse;
+ field public static int Base_Widget_AppCompat_Light_ActionBar_TabView;
+ field public static int Base_Widget_AppCompat_Light_PopupMenu;
+ field public static int Base_Widget_AppCompat_Light_PopupMenu_Overflow;
+ field public static int Base_Widget_AppCompat_ListPopupWindow;
+ field public static int Base_Widget_AppCompat_ListView;
+ field public static int Base_Widget_AppCompat_ListView_DropDown;
+ field public static int Base_Widget_AppCompat_ListView_Menu;
+ field public static int Base_Widget_AppCompat_PopupMenu;
+ field public static int Base_Widget_AppCompat_PopupMenu_Overflow;
+ field public static int Base_Widget_AppCompat_PopupWindow;
+ field public static int Base_Widget_AppCompat_ProgressBar;
+ field public static int Base_Widget_AppCompat_ProgressBar_Horizontal;
+ field public static int Base_Widget_AppCompat_RatingBar;
+ field public static int Base_Widget_AppCompat_SearchView;
+ field public static int Base_Widget_AppCompat_SearchView_ActionBar;
+ field public static int Base_Widget_AppCompat_Spinner;
+ field public static int Base_Widget_AppCompat_Spinner_DropDown_ActionBar;
+ field public static int Base_Widget_AppCompat_Spinner_Underlined;
+ field public static int Base_Widget_AppCompat_TextView_SpinnerItem;
+ field public static int Base_Widget_AppCompat_Toolbar;
+ field public static int Base_Widget_AppCompat_Toolbar_Button_Navigation;
+ field public static int Platform_AppCompat;
+ field public static int Platform_AppCompat_Light;
+ field public static int Platform_ThemeOverlay_AppCompat_Dark;
+ field public static int Platform_ThemeOverlay_AppCompat_Light;
+ field public static int Platform_V11_AppCompat;
+ field public static int Platform_V11_AppCompat_Light;
+ field public static int Platform_V14_AppCompat;
+ field public static int Platform_V14_AppCompat_Light;
+ field public static int RtlOverlay_DialogWindowTitle_AppCompat;
+ field public static int RtlOverlay_Widget_AppCompat_ActionBar_TitleItem;
+ field public static int RtlOverlay_Widget_AppCompat_ActionButton_Overflow;
+ field public static int RtlOverlay_Widget_AppCompat_DialogTitle_Icon;
+ field public static int RtlOverlay_Widget_AppCompat_PopupMenuItem;
+ field public static int RtlOverlay_Widget_AppCompat_PopupMenuItem_InternalGroup;
+ field public static int RtlOverlay_Widget_AppCompat_PopupMenuItem_Text;
+ field public static int RtlOverlay_Widget_AppCompat_SearchView_MagIcon;
+ field public static int RtlOverlay_Widget_AppCompat_Search_DropDown;
+ field public static int RtlOverlay_Widget_AppCompat_Search_DropDown_Icon1;
+ field public static int RtlOverlay_Widget_AppCompat_Search_DropDown_Icon2;
+ field public static int RtlOverlay_Widget_AppCompat_Search_DropDown_Query;
+ field public static int RtlOverlay_Widget_AppCompat_Search_DropDown_Text;
+ field public static int RtlOverlay_Widget_AppCompat_Toolbar_Button_Navigation;
+ field public static int TextAppearance_AppCompat;
+ field public static int TextAppearance_AppCompat_Body1;
+ field public static int TextAppearance_AppCompat_Body2;
+ field public static int TextAppearance_AppCompat_Button;
+ field public static int TextAppearance_AppCompat_Caption;
+ field public static int TextAppearance_AppCompat_Display1;
+ field public static int TextAppearance_AppCompat_Display2;
+ field public static int TextAppearance_AppCompat_Display3;
+ field public static int TextAppearance_AppCompat_Display4;
+ field public static int TextAppearance_AppCompat_Headline;
+ field public static int TextAppearance_AppCompat_Inverse;
+ field public static int TextAppearance_AppCompat_Large;
+ field public static int TextAppearance_AppCompat_Large_Inverse;
+ field public static int TextAppearance_AppCompat_Light_SearchResult_Subtitle;
+ field public static int TextAppearance_AppCompat_Light_SearchResult_Title;
+ field public static int TextAppearance_AppCompat_Light_Widget_PopupMenu_Large;
+ field public static int TextAppearance_AppCompat_Light_Widget_PopupMenu_Small;
+ field public static int TextAppearance_AppCompat_Medium;
+ field public static int TextAppearance_AppCompat_Medium_Inverse;
+ field public static int TextAppearance_AppCompat_Menu;
+ field public static int TextAppearance_AppCompat_SearchResult_Subtitle;
+ field public static int TextAppearance_AppCompat_SearchResult_Title;
+ field public static int TextAppearance_AppCompat_Small;
+ field public static int TextAppearance_AppCompat_Small_Inverse;
+ field public static int TextAppearance_AppCompat_Subhead;
+ field public static int TextAppearance_AppCompat_Subhead_Inverse;
+ field public static int TextAppearance_AppCompat_Title;
+ field public static int TextAppearance_AppCompat_Title_Inverse;
+ field public static int TextAppearance_AppCompat_Widget_ActionBar_Menu;
+ field public static int TextAppearance_AppCompat_Widget_ActionBar_Subtitle;
+ field public static int TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse;
+ field public static int TextAppearance_AppCompat_Widget_ActionBar_Title;
+ field public static int TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse;
+ field public static int TextAppearance_AppCompat_Widget_ActionMode_Subtitle;
+ field public static int TextAppearance_AppCompat_Widget_ActionMode_Subtitle_Inverse;
+ field public static int TextAppearance_AppCompat_Widget_ActionMode_Title;
+ field public static int TextAppearance_AppCompat_Widget_ActionMode_Title_Inverse;
+ field public static int TextAppearance_AppCompat_Widget_DropDownItem;
+ field public static int TextAppearance_AppCompat_Widget_PopupMenu_Large;
+ field public static int TextAppearance_AppCompat_Widget_PopupMenu_Small;
+ field public static int TextAppearance_AppCompat_Widget_Switch;
+ field public static int TextAppearance_AppCompat_Widget_TextView_SpinnerItem;
+ field public static int TextAppearance_StatusBar_EventContent;
+ field public static int TextAppearance_StatusBar_EventContent_Info;
+ field public static int TextAppearance_StatusBar_EventContent_Line2;
+ field public static int TextAppearance_StatusBar_EventContent_Time;
+ field public static int TextAppearance_StatusBar_EventContent_Title;
+ field public static int TextAppearance_Widget_AppCompat_ExpandedMenu_Item;
+ field public static int TextAppearance_Widget_AppCompat_Toolbar_Subtitle;
+ field public static int TextAppearance_Widget_AppCompat_Toolbar_Title;
+ field public static int ThemeOverlay_AppCompat;
+ field public static int ThemeOverlay_AppCompat_ActionBar;
+ field public static int ThemeOverlay_AppCompat_Dark;
+ field public static int ThemeOverlay_AppCompat_Dark_ActionBar;
+ field public static int ThemeOverlay_AppCompat_Light;
+ field public static int Theme_AppCompat;
+ field public static int Theme_AppCompat_CompactMenu;
+ field public static int Theme_AppCompat_Dialog;
+ field public static int Theme_AppCompat_DialogWhenLarge;
+ field public static int Theme_AppCompat_Dialog_Alert;
+ field public static int Theme_AppCompat_Dialog_MinWidth;
+ field public static int Theme_AppCompat_Light;
+ field public static int Theme_AppCompat_Light_DarkActionBar;
+ field public static int Theme_AppCompat_Light_Dialog;
+ field public static int Theme_AppCompat_Light_DialogWhenLarge;
+ field public static int Theme_AppCompat_Light_Dialog_Alert;
+ field public static int Theme_AppCompat_Light_Dialog_MinWidth;
+ field public static int Theme_AppCompat_Light_NoActionBar;
+ field public static int Theme_AppCompat_NoActionBar;
+ field public static int Widget_AppCompat_ActionBar;
+ field public static int Widget_AppCompat_ActionBar_Solid;
+ field public static int Widget_AppCompat_ActionBar_TabBar;
+ field public static int Widget_AppCompat_ActionBar_TabText;
+ field public static int Widget_AppCompat_ActionBar_TabView;
+ field public static int Widget_AppCompat_ActionButton;
+ field public static int Widget_AppCompat_ActionButton_CloseMode;
+ field public static int Widget_AppCompat_ActionButton_Overflow;
+ field public static int Widget_AppCompat_ActionMode;
+ field public static int Widget_AppCompat_ActivityChooserView;
+ field public static int Widget_AppCompat_AutoCompleteTextView;
+ field public static int Widget_AppCompat_Button;
+ field public static int Widget_AppCompat_ButtonBar;
+ field public static int Widget_AppCompat_ButtonBar_AlertDialog;
+ field public static int Widget_AppCompat_Button_Borderless;
+ field public static int Widget_AppCompat_Button_Borderless_Colored;
+ field public static int Widget_AppCompat_Button_ButtonBar_AlertDialog;
+ field public static int Widget_AppCompat_Button_Small;
+ field public static int Widget_AppCompat_CompoundButton_CheckBox;
+ field public static int Widget_AppCompat_CompoundButton_RadioButton;
+ field public static int Widget_AppCompat_CompoundButton_Switch;
+ field public static int Widget_AppCompat_DrawerArrowToggle;
+ field public static int Widget_AppCompat_DropDownItem_Spinner;
+ field public static int Widget_AppCompat_EditText;
+ field public static int Widget_AppCompat_Light_ActionBar;
+ field public static int Widget_AppCompat_Light_ActionBar_Solid;
+ field public static int Widget_AppCompat_Light_ActionBar_Solid_Inverse;
+ field public static int Widget_AppCompat_Light_ActionBar_TabBar;
+ field public static int Widget_AppCompat_Light_ActionBar_TabBar_Inverse;
+ field public static int Widget_AppCompat_Light_ActionBar_TabText;
+ field public static int Widget_AppCompat_Light_ActionBar_TabText_Inverse;
+ field public static int Widget_AppCompat_Light_ActionBar_TabView;
+ field public static int Widget_AppCompat_Light_ActionBar_TabView_Inverse;
+ field public static int Widget_AppCompat_Light_ActionButton;
+ field public static int Widget_AppCompat_Light_ActionButton_CloseMode;
+ field public static int Widget_AppCompat_Light_ActionButton_Overflow;
+ field public static int Widget_AppCompat_Light_ActionMode_Inverse;
+ field public static int Widget_AppCompat_Light_ActivityChooserView;
+ field public static int Widget_AppCompat_Light_AutoCompleteTextView;
+ field public static int Widget_AppCompat_Light_DropDownItem_Spinner;
+ field public static int Widget_AppCompat_Light_ListPopupWindow;
+ field public static int Widget_AppCompat_Light_ListView_DropDown;
+ field public static int Widget_AppCompat_Light_PopupMenu;
+ field public static int Widget_AppCompat_Light_PopupMenu_Overflow;
+ field public static int Widget_AppCompat_Light_SearchView;
+ field public static int Widget_AppCompat_Light_Spinner_DropDown_ActionBar;
+ field public static int Widget_AppCompat_ListPopupWindow;
+ field public static int Widget_AppCompat_ListView;
+ field public static int Widget_AppCompat_ListView_DropDown;
+ field public static int Widget_AppCompat_ListView_Menu;
+ field public static int Widget_AppCompat_PopupMenu;
+ field public static int Widget_AppCompat_PopupMenu_Overflow;
+ field public static int Widget_AppCompat_PopupWindow;
+ field public static int Widget_AppCompat_ProgressBar;
+ field public static int Widget_AppCompat_ProgressBar_Horizontal;
+ field public static int Widget_AppCompat_RatingBar;
+ field public static int Widget_AppCompat_SearchView;
+ field public static int Widget_AppCompat_SearchView_ActionBar;
+ field public static int Widget_AppCompat_Spinner;
+ field public static int Widget_AppCompat_Spinner_DropDown;
+ field public static int Widget_AppCompat_Spinner_DropDown_ActionBar;
+ field public static int Widget_AppCompat_Spinner_Underlined;
+ field public static int Widget_AppCompat_TextView_SpinnerItem;
+ field public static int Widget_AppCompat_Toolbar;
+ field public static int Widget_AppCompat_Toolbar_Button_Navigation;
+ }
+
+ public static final class R.styleable {
+ ctor public R.styleable();
+ field public static final int[] ActionBar;
+ field public static final int[] ActionBarLayout;
+ field public static int ActionBarLayout_android_layout_gravity;
+ field public static int ActionBar_background;
+ field public static int ActionBar_backgroundSplit;
+ field public static int ActionBar_backgroundStacked;
+ field public static int ActionBar_contentInsetEnd;
+ field public static int ActionBar_contentInsetLeft;
+ field public static int ActionBar_contentInsetRight;
+ field public static int ActionBar_contentInsetStart;
+ field public static int ActionBar_customNavigationLayout;
+ field public static int ActionBar_displayOptions;
+ field public static int ActionBar_divider;
+ field public static int ActionBar_elevation;
+ field public static int ActionBar_height;
+ field public static int ActionBar_hideOnContentScroll;
+ field public static int ActionBar_homeAsUpIndicator;
+ field public static int ActionBar_homeLayout;
+ field public static int ActionBar_icon;
+ field public static int ActionBar_indeterminateProgressStyle;
+ field public static int ActionBar_itemPadding;
+ field public static int ActionBar_logo;
+ field public static int ActionBar_navigationMode;
+ field public static int ActionBar_popupTheme;
+ field public static int ActionBar_progressBarPadding;
+ field public static int ActionBar_progressBarStyle;
+ field public static int ActionBar_subtitle;
+ field public static int ActionBar_subtitleTextStyle;
+ field public static int ActionBar_title;
+ field public static int ActionBar_titleTextStyle;
+ field public static final int[] ActionMenuItemView;
+ field public static int ActionMenuItemView_android_minWidth;
+ field public static final int[] ActionMenuView;
+ field public static final int[] ActionMode;
+ field public static int ActionMode_background;
+ field public static int ActionMode_backgroundSplit;
+ field public static int ActionMode_closeItemLayout;
+ field public static int ActionMode_height;
+ field public static int ActionMode_subtitleTextStyle;
+ field public static int ActionMode_titleTextStyle;
+ field public static final int[] ActivityChooserView;
+ field public static int ActivityChooserView_expandActivityOverflowButtonDrawable;
+ field public static int ActivityChooserView_initialActivityCount;
+ field public static final int[] AlertDialog;
+ field public static int AlertDialog_android_layout;
+ field public static int AlertDialog_buttonPanelSideLayout;
+ field public static int AlertDialog_listItemLayout;
+ field public static int AlertDialog_listLayout;
+ field public static int AlertDialog_multiChoiceItemLayout;
+ field public static int AlertDialog_singleChoiceItemLayout;
+ field public static final int[] AppCompatTextView;
+ field public static int AppCompatTextView_android_textAppearance;
+ field public static int AppCompatTextView_textAllCaps;
+ field public static final int[] DrawerArrowToggle;
+ field public static int DrawerArrowToggle_barSize;
+ field public static int DrawerArrowToggle_color;
+ field public static int DrawerArrowToggle_drawableSize;
+ field public static int DrawerArrowToggle_gapBetweenBars;
+ field public static int DrawerArrowToggle_middleBarArrowSize;
+ field public static int DrawerArrowToggle_spinBars;
+ field public static int DrawerArrowToggle_thickness;
+ field public static int DrawerArrowToggle_topBottomBarArrowSize;
+ field public static final int[] LinearLayoutCompat;
+ field public static final int[] LinearLayoutCompat_Layout;
+ field public static int LinearLayoutCompat_Layout_android_layout_gravity;
+ field public static int LinearLayoutCompat_Layout_android_layout_height;
+ field public static int LinearLayoutCompat_Layout_android_layout_weight;
+ field public static int LinearLayoutCompat_Layout_android_layout_width;
+ field public static int LinearLayoutCompat_android_baselineAligned;
+ field public static int LinearLayoutCompat_android_baselineAlignedChildIndex;
+ field public static int LinearLayoutCompat_android_gravity;
+ field public static int LinearLayoutCompat_android_orientation;
+ field public static int LinearLayoutCompat_android_weightSum;
+ field public static int LinearLayoutCompat_divider;
+ field public static int LinearLayoutCompat_dividerPadding;
+ field public static int LinearLayoutCompat_measureWithLargestChild;
+ field public static int LinearLayoutCompat_showDividers;
+ field public static final int[] ListPopupWindow;
+ field public static int ListPopupWindow_android_dropDownHorizontalOffset;
+ field public static int ListPopupWindow_android_dropDownVerticalOffset;
+ field public static final int[] MenuGroup;
+ field public static int MenuGroup_android_checkableBehavior;
+ field public static int MenuGroup_android_enabled;
+ field public static int MenuGroup_android_id;
+ field public static int MenuGroup_android_menuCategory;
+ field public static int MenuGroup_android_orderInCategory;
+ field public static int MenuGroup_android_visible;
+ field public static final int[] MenuItem;
+ field public static int MenuItem_actionLayout;
+ field public static int MenuItem_actionProviderClass;
+ field public static int MenuItem_actionViewClass;
+ field public static int MenuItem_android_alphabeticShortcut;
+ field public static int MenuItem_android_checkable;
+ field public static int MenuItem_android_checked;
+ field public static int MenuItem_android_enabled;
+ field public static int MenuItem_android_icon;
+ field public static int MenuItem_android_id;
+ field public static int MenuItem_android_menuCategory;
+ field public static int MenuItem_android_numericShortcut;
+ field public static int MenuItem_android_onClick;
+ field public static int MenuItem_android_orderInCategory;
+ field public static int MenuItem_android_title;
+ field public static int MenuItem_android_titleCondensed;
+ field public static int MenuItem_android_visible;
+ field public static int MenuItem_showAsAction;
+ field public static final int[] MenuView;
+ field public static int MenuView_android_headerBackground;
+ field public static int MenuView_android_horizontalDivider;
+ field public static int MenuView_android_itemBackground;
+ field public static int MenuView_android_itemIconDisabledAlpha;
+ field public static int MenuView_android_itemTextAppearance;
+ field public static int MenuView_android_verticalDivider;
+ field public static int MenuView_android_windowAnimationStyle;
+ field public static int MenuView_preserveIconSpacing;
+ field public static final int[] PopupWindow;
+ field public static final int[] PopupWindowBackgroundState;
+ field public static int PopupWindowBackgroundState_state_above_anchor;
+ field public static int PopupWindow_android_popupBackground;
+ field public static int PopupWindow_overlapAnchor;
+ field public static final int[] SearchView;
+ field public static int SearchView_android_focusable;
+ field public static int SearchView_android_imeOptions;
+ field public static int SearchView_android_inputType;
+ field public static int SearchView_android_maxWidth;
+ field public static int SearchView_closeIcon;
+ field public static int SearchView_commitIcon;
+ field public static int SearchView_defaultQueryHint;
+ field public static int SearchView_goIcon;
+ field public static int SearchView_iconifiedByDefault;
+ field public static int SearchView_layout;
+ field public static int SearchView_queryBackground;
+ field public static int SearchView_queryHint;
+ field public static int SearchView_searchHintIcon;
+ field public static int SearchView_searchIcon;
+ field public static int SearchView_submitBackground;
+ field public static int SearchView_suggestionRowLayout;
+ field public static int SearchView_voiceIcon;
+ field public static final int[] Spinner;
+ field public static int Spinner_android_background;
+ field public static int Spinner_android_dropDownHorizontalOffset;
+ field public static int Spinner_android_dropDownSelector;
+ field public static int Spinner_android_dropDownVerticalOffset;
+ field public static int Spinner_android_dropDownWidth;
+ field public static int Spinner_android_gravity;
+ field public static int Spinner_android_popupBackground;
+ field public static int Spinner_disableChildrenWhenDisabled;
+ field public static int Spinner_popupPromptView;
+ field public static int Spinner_prompt;
+ field public static int Spinner_spinnerMode;
+ field public static final int[] SwitchCompat;
+ field public static int SwitchCompat_android_textOff;
+ field public static int SwitchCompat_android_textOn;
+ field public static int SwitchCompat_android_thumb;
+ field public static int SwitchCompat_showText;
+ field public static int SwitchCompat_splitTrack;
+ field public static int SwitchCompat_switchMinWidth;
+ field public static int SwitchCompat_switchPadding;
+ field public static int SwitchCompat_switchTextAppearance;
+ field public static int SwitchCompat_thumbTextPadding;
+ field public static int SwitchCompat_track;
+ field public static final int[] TextAppearance;
+ field public static int TextAppearance_android_textColor;
+ field public static int TextAppearance_android_textSize;
+ field public static int TextAppearance_android_textStyle;
+ field public static int TextAppearance_android_typeface;
+ field public static int TextAppearance_textAllCaps;
+ field public static final int[] Theme;
+ field public static int Theme_actionBarDivider;
+ field public static int Theme_actionBarItemBackground;
+ field public static int Theme_actionBarPopupTheme;
+ field public static int Theme_actionBarSize;
+ field public static int Theme_actionBarSplitStyle;
+ field public static int Theme_actionBarStyle;
+ field public static int Theme_actionBarTabBarStyle;
+ field public static int Theme_actionBarTabStyle;
+ field public static int Theme_actionBarTabTextStyle;
+ field public static int Theme_actionBarTheme;
+ field public static int Theme_actionBarWidgetTheme;
+ field public static int Theme_actionButtonStyle;
+ field public static int Theme_actionDropDownStyle;
+ field public static int Theme_actionMenuTextAppearance;
+ field public static int Theme_actionMenuTextColor;
+ field public static int Theme_actionModeBackground;
+ field public static int Theme_actionModeCloseButtonStyle;
+ field public static int Theme_actionModeCloseDrawable;
+ field public static int Theme_actionModeCopyDrawable;
+ field public static int Theme_actionModeCutDrawable;
+ field public static int Theme_actionModeFindDrawable;
+ field public static int Theme_actionModePasteDrawable;
+ field public static int Theme_actionModePopupWindowStyle;
+ field public static int Theme_actionModeSelectAllDrawable;
+ field public static int Theme_actionModeShareDrawable;
+ field public static int Theme_actionModeSplitBackground;
+ field public static int Theme_actionModeStyle;
+ field public static int Theme_actionModeWebSearchDrawable;
+ field public static int Theme_actionOverflowButtonStyle;
+ field public static int Theme_actionOverflowMenuStyle;
+ field public static int Theme_activityChooserViewStyle;
+ field public static int Theme_alertDialogButtonGroupStyle;
+ field public static int Theme_alertDialogCenterButtons;
+ field public static int Theme_alertDialogStyle;
+ field public static int Theme_alertDialogTheme;
+ field public static int Theme_android_windowAnimationStyle;
+ field public static int Theme_android_windowIsFloating;
+ field public static int Theme_autoCompleteTextViewStyle;
+ field public static int Theme_borderlessButtonStyle;
+ field public static int Theme_buttonBarButtonStyle;
+ field public static int Theme_buttonBarNegativeButtonStyle;
+ field public static int Theme_buttonBarNeutralButtonStyle;
+ field public static int Theme_buttonBarPositiveButtonStyle;
+ field public static int Theme_buttonBarStyle;
+ field public static int Theme_buttonStyle;
+ field public static int Theme_buttonStyleSmall;
+ field public static int Theme_checkboxStyle;
+ field public static int Theme_checkedTextViewStyle;
+ field public static int Theme_colorAccent;
+ field public static int Theme_colorButtonNormal;
+ field public static int Theme_colorControlActivated;
+ field public static int Theme_colorControlHighlight;
+ field public static int Theme_colorControlNormal;
+ field public static int Theme_colorPrimary;
+ field public static int Theme_colorPrimaryDark;
+ field public static int Theme_colorSwitchThumbNormal;
+ field public static int Theme_dialogPreferredPadding;
+ field public static int Theme_dialogTheme;
+ field public static int Theme_dividerHorizontal;
+ field public static int Theme_dividerVertical;
+ field public static int Theme_dropDownListViewStyle;
+ field public static int Theme_dropdownListPreferredItemHeight;
+ field public static int Theme_editTextBackground;
+ field public static int Theme_editTextColor;
+ field public static int Theme_editTextStyle;
+ field public static int Theme_homeAsUpIndicator;
+ field public static int Theme_listChoiceBackgroundIndicator;
+ field public static int Theme_listDividerAlertDialog;
+ field public static int Theme_listPopupWindowStyle;
+ field public static int Theme_listPreferredItemHeight;
+ field public static int Theme_listPreferredItemHeightLarge;
+ field public static int Theme_listPreferredItemHeightSmall;
+ field public static int Theme_listPreferredItemPaddingLeft;
+ field public static int Theme_listPreferredItemPaddingRight;
+ field public static int Theme_panelBackground;
+ field public static int Theme_panelMenuListTheme;
+ field public static int Theme_panelMenuListWidth;
+ field public static int Theme_popupMenuStyle;
+ field public static int Theme_popupWindowStyle;
+ field public static int Theme_radioButtonStyle;
+ field public static int Theme_ratingBarStyle;
+ field public static int Theme_searchViewStyle;
+ field public static int Theme_selectableItemBackground;
+ field public static int Theme_selectableItemBackgroundBorderless;
+ field public static int Theme_spinnerDropDownItemStyle;
+ field public static int Theme_spinnerStyle;
+ field public static int Theme_switchStyle;
+ field public static int Theme_textAppearanceLargePopupMenu;
+ field public static int Theme_textAppearanceListItem;
+ field public static int Theme_textAppearanceListItemSmall;
+ field public static int Theme_textAppearanceSearchResultSubtitle;
+ field public static int Theme_textAppearanceSearchResultTitle;
+ field public static int Theme_textAppearanceSmallPopupMenu;
+ field public static int Theme_textColorAlertDialogListItem;
+ field public static int Theme_textColorSearchUrl;
+ field public static int Theme_toolbarNavigationButtonStyle;
+ field public static int Theme_toolbarStyle;
+ field public static int Theme_windowActionBar;
+ field public static int Theme_windowActionBarOverlay;
+ field public static int Theme_windowActionModeOverlay;
+ field public static int Theme_windowFixedHeightMajor;
+ field public static int Theme_windowFixedHeightMinor;
+ field public static int Theme_windowFixedWidthMajor;
+ field public static int Theme_windowFixedWidthMinor;
+ field public static int Theme_windowMinWidthMajor;
+ field public static int Theme_windowMinWidthMinor;
+ field public static int Theme_windowNoTitle;
+ field public static final int[] Toolbar;
+ field public static int Toolbar_android_gravity;
+ field public static int Toolbar_android_minHeight;
+ field public static int Toolbar_collapseContentDescription;
+ field public static int Toolbar_collapseIcon;
+ field public static int Toolbar_contentInsetEnd;
+ field public static int Toolbar_contentInsetLeft;
+ field public static int Toolbar_contentInsetRight;
+ field public static int Toolbar_contentInsetStart;
+ field public static int Toolbar_maxButtonHeight;
+ field public static int Toolbar_navigationContentDescription;
+ field public static int Toolbar_navigationIcon;
+ field public static int Toolbar_popupTheme;
+ field public static int Toolbar_subtitle;
+ field public static int Toolbar_subtitleTextAppearance;
+ field public static int Toolbar_title;
+ field public static int Toolbar_titleMarginBottom;
+ field public static int Toolbar_titleMarginEnd;
+ field public static int Toolbar_titleMarginStart;
+ field public static int Toolbar_titleMarginTop;
+ field public static int Toolbar_titleMargins;
+ field public static int Toolbar_titleTextAppearance;
+ field public static final int[] View;
+ field public static final int[] ViewStubCompat;
+ field public static int ViewStubCompat_android_id;
+ field public static int ViewStubCompat_android_inflatedId;
+ field public static int ViewStubCompat_android_layout;
+ field public static int View_android_focusable;
+ field public static int View_android_theme;
+ field public static int View_backgroundTint;
+ field public static int View_backgroundTintMode;
+ field public static int View_paddingEnd;
+ field public static int View_paddingStart;
+ field public static int View_theme;
+ }
+
+}
+
+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 public android.view.Menu getMenu();
+ 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 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);
+ }
+
+ 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);
+ }
+
+ 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);
+ }
+
+ 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);
+ }
+
+ 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);
+ }
+
+ 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 AppCompatSpinner extends android.widget.Spinner {
+ ctor public AppCompatSpinner(android.content.Context);
+ ctor public AppCompatSpinner(android.content.Context, android.util.AttributeSet);
+ ctor public AppCompatSpinner(android.content.Context, android.util.AttributeSet, int);
+ }
+
+ 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);
+ }
+
+ 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 public int getBaselineAlignedChildIndex();
+ method public android.graphics.drawable.Drawable getDividerDrawable();
+ method public int getDividerPadding();
+ 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 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 android.view.Menu getMenu();
+ method public android.view.MenuInflater getMenuInflater();
+ method public void inflate(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.graphics.drawable.Drawable getTrackDrawable();
+ 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 setTrackDrawable(android.graphics.drawable.Drawable);
+ method public void setTrackResource(int);
+ }
+
+ 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 public int getContentInsetEnd();
+ method public int getContentInsetLeft();
+ method public int getContentInsetRight();
+ method public int getContentInsetStart();
+ 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 int getPopupTheme();
+ method public java.lang.CharSequence getSubtitle();
+ method public java.lang.CharSequence getTitle();
+ 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 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 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 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.view.View.BaseSavedState {
+ ctor public Toolbar.SavedState(android.os.Parcel);
+ ctor public Toolbar.SavedState(android.os.Parcelable);
+ field public static final android.os.Parcelable.Creator<android.support.v7.widget.Toolbar.SavedState> CREATOR;
+ }
+
+}
+
diff --git a/v7/appcompat/build.gradle b/v7/appcompat/build.gradle
index bbb2fd1..88491d0 100644
--- a/v7/appcompat/build.gradle
+++ b/v7/appcompat/build.gradle
@@ -4,11 +4,18 @@
dependencies {
compile project(':support-v4')
+ androidTestCompile 'com.android.support.test:testing-support-lib:0.1'
+ testCompile 'junit:junit:4.12'
}
android {
compileSdkVersion 'current'
+ defaultConfig {
+ minSdkVersion 7
+ testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+ }
+
sourceSets {
main.manifest.srcFile 'AndroidManifest.xml'
main.java.srcDir 'src'
@@ -16,11 +23,10 @@
main.assets.srcDir 'assets'
main.resources.srcDir 'src'
- // this moves src/instrumentTest to tests so all folders follow:
- // tests/java, tests/res, tests/assets, ...
- // This is a *reset* so it replaces the default paths
androidTest.setRoot('tests')
androidTest.java.srcDir 'tests/src'
+ androidTest.res.srcDir 'tests/res'
+ androidTest.manifest.srcFile 'tests/AndroidManifest.xml'
}
compileOptions {
diff --git a/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplV14.java b/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplV14.java
index 5ab3a10..bb57d02 100644
--- a/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplV14.java
+++ b/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplV14.java
@@ -76,11 +76,7 @@
if (supportActionMode != null) {
// If we received a support action mode, wrap and return it
- final SupportActionModeWrapper newActionMode
- = new SupportActionModeWrapper(mContext, supportActionMode);
- // We need to let the wrapped callback know about the original new action mode
- callbackWrapper.addActionModeWrapper(newActionMode);
- return newActionMode;
+ return callbackWrapper.getActionModeWrapper(supportActionMode);
}
return null;
}
diff --git a/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplV7.java b/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplV7.java
index f545bda..a31dd2a 100644
--- a/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplV7.java
+++ b/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplV7.java
@@ -777,6 +777,13 @@
@Override
boolean dispatchKeyEvent(KeyEvent event) {
+ if (event.getKeyCode() == KeyEvent.KEYCODE_MENU) {
+ // If this is a MENU event, let the Activity have a go.
+ if (mOriginalWindowCallback.dispatchKeyEvent(event)) {
+ return true;
+ }
+ }
+
final int keyCode = event.getKeyCode();
final int action = event.getAction();
final boolean isDown = action == KeyEvent.ACTION_DOWN;
@@ -787,10 +794,8 @@
boolean onKeyUp(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_MENU:
- if (onKeyUpPanel(Window.FEATURE_OPTIONS_PANEL, event)) {
- return true;
- }
- break;
+ onKeyUpPanel(Window.FEATURE_OPTIONS_PANEL, event);
+ return true;
case KeyEvent.KEYCODE_BACK:
PanelFeatureState st = getPanelState(Window.FEATURE_OPTIONS_PANEL, false);
if (st != null && st.isOpen) {
@@ -808,16 +813,17 @@
boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_MENU:
- if (onKeyDownPanel(Window.FEATURE_OPTIONS_PANEL, event)) {
- return true;
- }
+ onKeyDownPanel(Window.FEATURE_OPTIONS_PANEL, event);
+ // Break, and let this fall through to the original callback
break;
}
// On API v7-10 we need to manually call onKeyShortcut() as this is not called
// from the Activity
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
- return onKeyShortcut(keyCode, event);
+ if (onKeyShortcut(keyCode, event)) {
+ return true;
+ }
}
return false;
}
@@ -1231,23 +1237,19 @@
return;
}
- final boolean wasOpen = st.isOpen;
-
final WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
- if (wm != null && wasOpen && st.decorView != null) {
+ if (wm != null && st.isOpen && st.decorView != null) {
wm.removeView(st.decorView);
+
+ if (doCallback) {
+ callOnPanelClosed(st.featureId, st, null);
+ }
}
st.isPrepared = false;
st.isHandled = false;
st.isOpen = false;
- if (wasOpen && doCallback) {
- // If the panel was open and we should callback, do so. This should be done after
- // isOpen is updated to ensure that we do not get into an infinite recursion
- callOnPanelClosed(st.featureId, st, null);
- }
-
// This view is no longer shown, so null it out
st.shownPanelView = null;
diff --git a/v7/appcompat/src/android/support/v7/internal/app/NotificationCompatImplBase.java b/v7/appcompat/src/android/support/v7/internal/app/NotificationCompatImplBase.java
index e358fee..c52290dc 100644
--- a/v7/appcompat/src/android/support/v7/internal/app/NotificationCompatImplBase.java
+++ b/v7/appcompat/src/android/support/v7/internal/app/NotificationCompatImplBase.java
@@ -148,7 +148,9 @@
if (!tombstone) {
button.setOnClickPendingIntent(R.id.action0, action.getActionIntent());
}
- button.setContentDescription(R.id.action0, action.getTitle());
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
+ button.setContentDescription(R.id.action0, action.getTitle());
+ }
return button;
}
diff --git a/v7/appcompat/src/android/support/v7/internal/app/ToolbarActionBar.java b/v7/appcompat/src/android/support/v7/internal/app/ToolbarActionBar.java
index 1781015..f379130 100644
--- a/v7/appcompat/src/android/support/v7/internal/app/ToolbarActionBar.java
+++ b/v7/appcompat/src/android/support/v7/internal/app/ToolbarActionBar.java
@@ -464,7 +464,13 @@
@Override
public boolean onKeyShortcut(int keyCode, KeyEvent ev) {
Menu menu = getMenu();
- return menu != null ? menu.performShortcut(keyCode, ev, 0) : false;
+ if (menu != null) {
+ menu.performShortcut(keyCode, ev, 0);
+ }
+ // This action bar always returns true for handling keyboard shortcuts.
+ // This will block the window from preparing a temporary panel to handle
+ // keyboard shortcuts.
+ return true;
}
public void addOnMenuVisibilityListener(OnMenuVisibilityListener listener) {
diff --git a/v7/appcompat/src/android/support/v7/internal/view/SupportActionModeWrapper.java b/v7/appcompat/src/android/support/v7/internal/view/SupportActionModeWrapper.java
index a65349f..2c09e64 100644
--- a/v7/appcompat/src/android/support/v7/internal/view/SupportActionModeWrapper.java
+++ b/v7/appcompat/src/android/support/v7/internal/view/SupportActionModeWrapper.java
@@ -183,11 +183,7 @@
return wrapper;
}
- public void addActionModeWrapper(SupportActionModeWrapper wrapper) {
- mActionModes.add(wrapper);
- }
-
- private ActionMode getActionModeWrapper(android.support.v7.view.ActionMode mode) {
+ public ActionMode getActionModeWrapper(android.support.v7.view.ActionMode mode) {
// First see if we already have a wrapper for this mode
for (int i = 0, count = mActionModes.size(); i < count; i++) {
SupportActionModeWrapper wrapper = mActionModes.get(i);
diff --git a/v7/appcompat/src/android/support/v7/internal/view/menu/MenuBuilder.java b/v7/appcompat/src/android/support/v7/internal/view/menu/MenuBuilder.java
index 7aca800..16624c7 100644
--- a/v7/appcompat/src/android/support/v7/internal/view/menu/MenuBuilder.java
+++ b/v7/appcompat/src/android/support/v7/internal/view/menu/MenuBuilder.java
@@ -429,7 +429,7 @@
/**
* Adds an item to the menu. The other add methods funnel to this.
*/
- private MenuItem addInternal(int group, int id, int categoryOrder, CharSequence title) {
+ protected MenuItem addInternal(int group, int id, int categoryOrder, CharSequence title) {
final int ordering = getOrdering(categoryOrder);
final MenuItemImpl item = createNewMenuItem(group, id, categoryOrder, ordering, title,
diff --git a/v7/appcompat/src/android/support/v7/internal/view/menu/MenuItemImpl.java b/v7/appcompat/src/android/support/v7/internal/view/menu/MenuItemImpl.java
index a2e9783..ffddb31 100644
--- a/v7/appcompat/src/android/support/v7/internal/view/menu/MenuItemImpl.java
+++ b/v7/appcompat/src/android/support/v7/internal/view/menu/MenuItemImpl.java
@@ -341,7 +341,7 @@
return mSubMenu != null;
}
- void setSubMenu(SubMenuBuilder subMenu) {
+ public void setSubMenu(SubMenuBuilder subMenu) {
mSubMenu = subMenu;
subMenu.setHeaderTitle(getTitle());
@@ -654,7 +654,7 @@
@Override
public SupportMenuItem setSupportActionProvider(ActionProvider actionProvider) {
if (mActionProvider != null) {
- mActionProvider.setVisibilityListener(null);
+ mActionProvider.reset();
}
mActionView = null;
mActionProvider = actionProvider;
diff --git a/v7/appcompat/src/android/support/v7/internal/widget/ActivityChooserModel.java b/v7/appcompat/src/android/support/v7/internal/widget/ActivityChooserModel.java
index d97f8e7..8474f29 100644
--- a/v7/appcompat/src/android/support/v7/internal/widget/ActivityChooserModel.java
+++ b/v7/appcompat/src/android/support/v7/internal/widget/ActivityChooserModel.java
@@ -16,22 +16,21 @@
package android.support.v7.internal.widget;
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+import org.xmlpull.v1.XmlSerializer;
+
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ResolveInfo;
import android.database.DataSetObservable;
import android.os.AsyncTask;
-import android.os.Build;
import android.support.v4.os.AsyncTaskCompat;
import android.text.TextUtils;
import android.util.Log;
import android.util.Xml;
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserException;
-import org.xmlpull.v1.XmlSerializer;
-
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
@@ -576,7 +575,7 @@
mHistoricalRecordsChanged = false;
if (!TextUtils.isEmpty(mHistoryFileName)) {
AsyncTaskCompat.executeParallel(new PersistHistoryAsyncTask(),
- mHistoricalRecords, mHistoryFileName);
+ new ArrayList<HistoricalRecord>(mHistoricalRecords), mHistoryFileName);
}
}
@@ -918,29 +917,31 @@
private final class DefaultSorter implements ActivitySorter {
private static final float WEIGHT_DECAY_COEFFICIENT = 0.95f;
- private final Map<String, ActivityResolveInfo> mPackageNameToActivityMap =
- new HashMap<String, ActivityResolveInfo>();
+ private final Map<ComponentName, ActivityResolveInfo> mPackageNameToActivityMap =
+ new HashMap<ComponentName, ActivityResolveInfo>();
public void sort(Intent intent, List<ActivityResolveInfo> activities,
List<HistoricalRecord> historicalRecords) {
- Map<String, ActivityResolveInfo> packageNameToActivityMap =
+ Map<ComponentName, ActivityResolveInfo> componentNameToActivityMap =
mPackageNameToActivityMap;
- packageNameToActivityMap.clear();
+ componentNameToActivityMap.clear();
final int activityCount = activities.size();
for (int i = 0; i < activityCount; i++) {
ActivityResolveInfo activity = activities.get(i);
activity.weight = 0.0f;
- String packageName = activity.resolveInfo.activityInfo.packageName;
- packageNameToActivityMap.put(packageName, activity);
+ ComponentName componentName = new ComponentName(
+ activity.resolveInfo.activityInfo.packageName,
+ activity.resolveInfo.activityInfo.name);
+ componentNameToActivityMap.put(componentName, activity);
}
final int lastShareIndex = historicalRecords.size() - 1;
float nextRecordWeight = 1;
for (int i = lastShareIndex; i >= 0; i--) {
HistoricalRecord historicalRecord = historicalRecords.get(i);
- String packageName = historicalRecord.activity.getPackageName();
- ActivityResolveInfo activity = packageNameToActivityMap.get(packageName);
+ ComponentName componentName = historicalRecord.activity;
+ ActivityResolveInfo activity = componentNameToActivityMap.get(componentName);
if (activity != null) {
activity.weight += historicalRecord.weight * nextRecordWeight;
nextRecordWeight = nextRecordWeight * WEIGHT_DECAY_COEFFICIENT;
@@ -957,9 +958,6 @@
}
}
- /**
- * Command for reading the historical records from a file off the UI thread.
- */
private void readHistoricalDataImpl() {
FileInputStream fis = null;
try {
diff --git a/v7/appcompat/src/android/support/v7/internal/widget/TintManager.java b/v7/appcompat/src/android/support/v7/internal/widget/TintManager.java
index 999fc6d..cfad4b4 100644
--- a/v7/appcompat/src/android/support/v7/internal/widget/TintManager.java
+++ b/v7/appcompat/src/android/support/v7/internal/widget/TintManager.java
@@ -18,6 +18,7 @@
import android.content.Context;
import android.content.res.ColorStateList;
+import android.graphics.Color;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffColorFilter;
import android.graphics.drawable.Drawable;
@@ -210,7 +211,7 @@
final Context context = mContextRef.get();
if (context == null) return false;
- PorterDuff.Mode tintMode = null;
+ PorterDuff.Mode tintMode = DEFAULT_MODE;
boolean colorAttrSet = false;
int colorAttr = 0;
int alpha = -1;
@@ -233,7 +234,7 @@
if (colorAttrSet) {
final int color = getThemeAttrColor(context, colorAttr);
- setPorterDuffColorFilter(drawable, color, tintMode);
+ drawable.setColorFilter(getPorterDuffColorFilter(color, tintMode));
if (alpha != -1) {
drawable.setAlpha(alpha);
@@ -554,12 +555,11 @@
public static void tintViewBackground(View view, TintInfo tint) {
final Drawable background = view.getBackground();
- if (tint.mHasTintList) {
- setPorterDuffColorFilter(
- background,
- tint.mTintList.getColorForState(view.getDrawableState(),
- tint.mTintList.getDefaultColor()),
- tint.mHasTintMode ? tint.mTintMode : null);
+ if (tint.mHasTintList || tint.mHasTintMode) {
+ background.setColorFilter(createTintFilter(
+ tint.mHasTintList ? tint.mTintList : null,
+ tint.mHasTintMode ? tint.mTintMode : DEFAULT_MODE,
+ view.getDrawableState()));
} else {
background.clearColorFilter();
}
@@ -571,12 +571,16 @@
}
}
- private static void setPorterDuffColorFilter(Drawable d, int color, PorterDuff.Mode mode) {
- if (mode == null) {
- // If we don't have a blending mode specified, use our default
- mode = DEFAULT_MODE;
+ private static PorterDuffColorFilter createTintFilter(ColorStateList tint,
+ PorterDuff.Mode tintMode, final int[] state) {
+ if (tint == null || tintMode == null) {
+ return null;
}
+ final int color = tint.getColorForState(state, Color.TRANSPARENT);
+ return getPorterDuffColorFilter(color, tintMode);
+ }
+ private static PorterDuffColorFilter getPorterDuffColorFilter(int color, PorterDuff.Mode mode) {
// First, lets see if the cache already contains the color filter
PorterDuffColorFilter filter = COLOR_FILTER_CACHE.get(color, mode);
@@ -586,6 +590,6 @@
COLOR_FILTER_CACHE.put(color, mode, filter);
}
- d.setColorFilter(filter);
+ return filter;
}
}
diff --git a/v7/appcompat/tests/AndroidManifest.xml b/v7/appcompat/tests/AndroidManifest.xml
new file mode 100644
index 0000000..f33f28b
--- /dev/null
+++ b/v7/appcompat/tests/AndroidManifest.xml
@@ -0,0 +1,41 @@
+<?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.
+ -->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ package="android.support.v7.appcompat.test">
+
+ <uses-sdk android:minSdkVersion="8"
+ tools:overrideLibrary="android.support.test"/>
+
+ <application android:theme="@style/Theme.AppCompat">
+ <uses-library android:name="android.test.runner"/>
+
+ <activity
+ android:name="android.support.v7.app.AppCompatActivity"/>
+ <activity
+ android:name="android.support.v7.app.WindowDecorActionBarActivity"/>
+ <activity
+ android:name="android.support.v7.app.ToolbarActionBarActivity"
+ android:theme="@style/Theme.AppCompat.NoActionBar"/>
+
+ </application>
+
+ <instrumentation
+ android:name="android.test.InstrumentationTestRunner"
+ android:targetPackage="android.support.v7.appcompat.test"/>
+
+</manifest>
diff --git a/v7/appcompat/tests/res/layout/layout_actv.xml b/v7/appcompat/tests/res/layout/layout_actv.xml
new file mode 100644
index 0000000..8d31a48
--- /dev/null
+++ b/v7/appcompat/tests/res/layout/layout_actv.xml
@@ -0,0 +1,19 @@
+<?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.
+-->
+
+<AutoCompleteTextView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"/>
\ No newline at end of file
diff --git a/v7/appcompat/tests/res/layout/layout_android_theme.xml b/v7/appcompat/tests/res/layout/layout_android_theme.xml
new file mode 100644
index 0000000..bcbcbb6
--- /dev/null
+++ b/v7/appcompat/tests/res/layout/layout_android_theme.xml
@@ -0,0 +1,20 @@
+<?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.
+-->
+
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:theme="@style/ThemeOverlay.AppCompat.Dark"/>
\ No newline at end of file
diff --git a/v7/appcompat/tests/res/layout/layout_app_theme.xml b/v7/appcompat/tests/res/layout/layout_app_theme.xml
new file mode 100644
index 0000000..623d57ea
--- /dev/null
+++ b/v7/appcompat/tests/res/layout/layout_app_theme.xml
@@ -0,0 +1,21 @@
+<?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.
+-->
+
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ app:theme="@style/ThemeOverlay.AppCompat.Dark"/>
\ No newline at end of file
diff --git a/v7/appcompat/tests/res/layout/layout_button.xml b/v7/appcompat/tests/res/layout/layout_button.xml
new file mode 100644
index 0000000..9275b9d
--- /dev/null
+++ b/v7/appcompat/tests/res/layout/layout_button.xml
@@ -0,0 +1,19 @@
+<?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.
+-->
+
+<Button xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"/>
\ No newline at end of file
diff --git a/v7/appcompat/tests/res/layout/layout_checkbox.xml b/v7/appcompat/tests/res/layout/layout_checkbox.xml
new file mode 100644
index 0000000..4bbf0cf
--- /dev/null
+++ b/v7/appcompat/tests/res/layout/layout_checkbox.xml
@@ -0,0 +1,19 @@
+<?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.
+-->
+
+<CheckBox xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"/>
\ No newline at end of file
diff --git a/v7/appcompat/tests/res/layout/layout_edittext.xml b/v7/appcompat/tests/res/layout/layout_edittext.xml
new file mode 100644
index 0000000..83c19e8
--- /dev/null
+++ b/v7/appcompat/tests/res/layout/layout_edittext.xml
@@ -0,0 +1,19 @@
+<?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.
+-->
+
+<EditText xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"/>
\ No newline at end of file
diff --git a/v7/appcompat/tests/res/layout/layout_mactv.xml b/v7/appcompat/tests/res/layout/layout_mactv.xml
new file mode 100644
index 0000000..15e16e8
--- /dev/null
+++ b/v7/appcompat/tests/res/layout/layout_mactv.xml
@@ -0,0 +1,19 @@
+<?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.
+-->
+
+<MultiAutoCompleteTextView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"/>
\ No newline at end of file
diff --git a/v7/appcompat/tests/res/layout/layout_radiobutton.xml b/v7/appcompat/tests/res/layout/layout_radiobutton.xml
new file mode 100644
index 0000000..64bd385
--- /dev/null
+++ b/v7/appcompat/tests/res/layout/layout_radiobutton.xml
@@ -0,0 +1,19 @@
+<?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.
+-->
+
+<RadioButton xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"/>
\ No newline at end of file
diff --git a/v7/appcompat/tests/res/layout/layout_ratingbar.xml b/v7/appcompat/tests/res/layout/layout_ratingbar.xml
new file mode 100644
index 0000000..bb3ea00
--- /dev/null
+++ b/v7/appcompat/tests/res/layout/layout_ratingbar.xml
@@ -0,0 +1,19 @@
+<?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.
+-->
+
+<RatingBar xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"/>
\ No newline at end of file
diff --git a/v7/appcompat/tests/res/layout/layout_spinner.xml b/v7/appcompat/tests/res/layout/layout_spinner.xml
new file mode 100644
index 0000000..942ab70
--- /dev/null
+++ b/v7/appcompat/tests/res/layout/layout_spinner.xml
@@ -0,0 +1,19 @@
+<?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.
+-->
+
+<Spinner xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"/>
\ No newline at end of file
diff --git a/v7/appcompat/tests/res/layout/toolbar_decor_content.xml b/v7/appcompat/tests/res/layout/toolbar_decor_content.xml
new file mode 100644
index 0000000..e2f6b3f
--- /dev/null
+++ b/v7/appcompat/tests/res/layout/toolbar_decor_content.xml
@@ -0,0 +1,27 @@
+<?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.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <android.support.v7.widget.Toolbar
+ android:id="@+id/toolbar"
+ android:layout_width="match_parent"
+ android:layout_height="?attr/actionBarSize"/>
+
+</LinearLayout>
\ No newline at end of file
diff --git a/v7/appcompat/tests/res/layout/window_decor_content.xml b/v7/appcompat/tests/res/layout/window_decor_content.xml
new file mode 100644
index 0000000..657f51c
--- /dev/null
+++ b/v7/appcompat/tests/res/layout/window_decor_content.xml
@@ -0,0 +1,22 @@
+<?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.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+</LinearLayout>
\ No newline at end of file
diff --git a/v7/appcompat/tests/res/menu/sample_actions.xml b/v7/appcompat/tests/res/menu/sample_actions.xml
new file mode 100644
index 0000000..3824579
--- /dev/null
+++ b/v7/appcompat/tests/res/menu/sample_actions.xml
@@ -0,0 +1,28 @@
+<?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.
+-->
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto">
+
+ <item android:id="@+id/action_search"
+ android:title="Search"
+ app:showAsAction="ifRoom|collapseActionView"
+ app:actionViewClass="android.support.v7.widget.SearchView"/>
+
+ <item android:id="@+id/action_1"
+ android:title="Action 1"
+ app:showAsAction="ifRoom"/>
+
+</menu>
\ No newline at end of file
diff --git a/v7/appcompat/tests/src/android/support/v7/app/BaseBasicsTestCase.java b/v7/appcompat/tests/src/android/support/v7/app/BaseBasicsTestCase.java
new file mode 100644
index 0000000..88b984c
--- /dev/null
+++ b/v7/appcompat/tests/src/android/support/v7/app/BaseBasicsTestCase.java
@@ -0,0 +1,50 @@
+/*
+ * 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.
+ */
+
+package android.support.v7.app;
+
+import org.junit.Test;
+
+public abstract class BaseBasicsTestCase<A extends BaseTestActivity>
+ extends BaseInstrumentationTestCase<A> {
+
+ protected BaseBasicsTestCase(Class<A> activityClass) {
+ super(activityClass);
+ }
+
+ @Test
+ public void testActionBarExists() {
+ assertNotNull("ActionBar is not null", getActivity().getSupportActionBar());
+ }
+
+ @Test
+ public void testDefaultActionBarTitle() {
+ assertEquals(getActivity().getTitle(), getActivity().getSupportActionBar().getTitle());
+ }
+
+ @Test
+ public void testSetActionBarTitle() throws Throwable {
+ final String newTitle = "hello";
+ runTestOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ getActivity().setTitle(newTitle);
+ assertEquals("New title is set to ActionBar",
+ newTitle, getActivity().getSupportActionBar().getTitle());
+ }
+ });
+ }
+}
diff --git a/v7/appcompat/tests/src/android/support/v7/app/BaseInstrumentationTestCase.java b/v7/appcompat/tests/src/android/support/v7/app/BaseInstrumentationTestCase.java
new file mode 100644
index 0000000..6591ff79
--- /dev/null
+++ b/v7/appcompat/tests/src/android/support/v7/app/BaseInstrumentationTestCase.java
@@ -0,0 +1,43 @@
+/*
+ * 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.
+ */
+
+package android.support.v7.app;
+
+import org.junit.Before;
+import org.junit.runner.RunWith;
+
+import android.app.Activity;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.runner.AndroidJUnit4;
+import android.test.ActivityInstrumentationTestCase2;
+
+@RunWith(AndroidJUnit4.class)
+public abstract class BaseInstrumentationTestCase<A extends Activity>
+ extends ActivityInstrumentationTestCase2<A> {
+
+ protected BaseInstrumentationTestCase(Class<A> activityClass) {
+ super(activityClass);
+ }
+
+ @Before
+ @Override
+ public void setUp() throws Exception {
+ super.setUp();
+ injectInstrumentation(InstrumentationRegistry.getInstrumentation());
+ getActivity();
+ }
+
+}
diff --git a/v7/appcompat/tests/src/android/support/v7/app/BaseKeyEventsTestCase.java b/v7/appcompat/tests/src/android/support/v7/app/BaseKeyEventsTestCase.java
new file mode 100644
index 0000000..8adc940
--- /dev/null
+++ b/v7/appcompat/tests/src/android/support/v7/app/BaseKeyEventsTestCase.java
@@ -0,0 +1,144 @@
+/*
+ * 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.
+ */
+
+package android.support.v7.app;
+
+import org.junit.Test;
+
+import android.support.v7.appcompat.test.R;
+import android.support.v7.view.ActionMode;
+import android.view.KeyEvent;
+import android.view.Menu;
+import android.view.MenuItem;
+
+import java.util.concurrent.atomic.AtomicBoolean;
+
+public abstract class BaseKeyEventsTestCase<A extends BaseTestActivity>
+ extends BaseInstrumentationTestCase<A> {
+
+ protected BaseKeyEventsTestCase(Class<A> activityClass) {
+ super(activityClass);
+ }
+
+ @Test
+ public void testBackDismissesActionMode() {
+ final AtomicBoolean destroyed = new AtomicBoolean();
+
+ getActivity().runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ getActivity().startSupportActionMode(new ActionMode.Callback() {
+ @Override
+ public boolean onCreateActionMode(ActionMode mode, Menu menu) {
+ mode.getMenuInflater().inflate(R.menu.sample_actions, menu);
+ return true;
+ }
+
+ @Override
+ public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
+ return false;
+ }
+
+ @Override
+ public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
+ return false;
+ }
+
+ @Override
+ public void onDestroyActionMode(ActionMode mode) {
+ destroyed.set(true);
+ }
+ });
+ }
+ });
+
+ getInstrumentation().waitForIdleSync();
+ getInstrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);
+ getInstrumentation().waitForIdleSync();
+
+ assertFalse("Activity was not destroyed", getActivity().isDestroyed());
+ assertTrue("ActionMode was destroyed", destroyed.get());
+ }
+
+ @Test
+ public void testBackCollapsesSearchView() throws InterruptedException {
+ // First expand the SearchView
+ getActivity().runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ assertTrue("SearchView expanded", getActivity().expandSearchView());
+ }
+ });
+ getInstrumentation().waitForIdleSync();
+
+ // Now send a back press
+ getInstrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);
+ getInstrumentation().waitForIdleSync();
+
+ if (getActivity().isSearchViewExpanded()) {
+ // If the SearchView is still expanded, it's probably because it had focus and the
+ // first back removed the focus. Send another.
+ getInstrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);
+ getInstrumentation().waitForIdleSync();
+ }
+
+ // Check that the Activity is still running and the SearchView is not expanded
+ assertFalse("Activity was not destroyed", getActivity().isDestroyed());
+ assertFalse("SearchView was collapsed", getActivity().isSearchViewExpanded());
+ }
+
+ @Test
+ public void testMenuPressInvokesPanelCallbacks() throws InterruptedException {
+ getInstrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_MENU);
+ getInstrumentation().waitForIdleSync();
+ assertTrue("onMenuOpened called", getActivity().wasOnMenuOpenedCalled());
+
+ // TODO Re-enable this in v23
+ //getInstrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_MENU);
+ //getInstrumentation().waitForIdleSync();
+ //assertTrue("onPanelClosed called", getActivity().wasOnPanelClosedCalled());
+ }
+
+ @Test
+ public void testDelKeyEventReachesActivity() {
+ // First send the event
+ getInstrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_DEL);
+ getInstrumentation().waitForIdleSync();
+
+ KeyEvent downEvent = getActivity().getInvokedKeyDownEvent();
+ assertNotNull("onKeyDown called", downEvent);
+ assertEquals("onKeyDown event matches", KeyEvent.KEYCODE_DEL, downEvent.getKeyCode());
+
+ KeyEvent upEvent = getActivity().getInvokedKeyUpEvent();
+ assertNotNull("onKeyUp called", upEvent);
+ assertEquals("onKeyUp event matches", KeyEvent.KEYCODE_DEL, upEvent.getKeyCode());
+ }
+
+ @Test
+ public void testMenuKeyEventReachesActivity() throws InterruptedException {
+ getInstrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_MENU);
+ getInstrumentation().waitForIdleSync();
+
+ KeyEvent downEvent = getActivity().getInvokedKeyDownEvent();
+ assertNotNull("onKeyDown called", downEvent);
+ assertEquals("onKeyDown event matches", KeyEvent.KEYCODE_MENU, downEvent.getKeyCode());
+
+ KeyEvent upEvent = getActivity().getInvokedKeyUpEvent();
+ assertNotNull("onKeyUp called", upEvent);
+ assertEquals("onKeyDown event matches", KeyEvent.KEYCODE_MENU, upEvent.getKeyCode());
+ }
+
+}
diff --git a/v7/appcompat/tests/src/android/support/v7/app/BaseTestActivity.java b/v7/appcompat/tests/src/android/support/v7/app/BaseTestActivity.java
new file mode 100644
index 0000000..6987f6c
--- /dev/null
+++ b/v7/appcompat/tests/src/android/support/v7/app/BaseTestActivity.java
@@ -0,0 +1,130 @@
+/*
+ * 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.
+ */
+
+package android.support.v7.app;
+
+import android.os.Bundle;
+import android.support.v4.view.MenuItemCompat;
+import android.support.v7.appcompat.test.R;
+import android.view.KeyEvent;
+import android.view.Menu;
+import android.view.WindowManager;
+
+abstract class BaseTestActivity extends AppCompatActivity {
+
+ private Menu mMenu;
+
+ private KeyEvent mOnKeyDownEvent;
+ private KeyEvent mOnKeyUpEvent;
+ private KeyEvent mOnKeyShortcutEvent;
+
+ private boolean mOnMenuOpenedCalled;
+ private boolean mOnPanelClosedCalled;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+ final int contentView = getContentViewLayoutResId();
+ if (contentView > 0) {
+ setContentView(contentView);
+ }
+ onContentViewSet();
+ getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+ }
+
+ protected abstract int getContentViewLayoutResId();
+
+ protected void onContentViewSet() {
+ }
+
+ @Override
+ public boolean onMenuOpened(int featureId, Menu menu) {
+ mOnMenuOpenedCalled = true;
+ return super.onMenuOpened(featureId, menu);
+ }
+
+ @Override
+ public void onPanelClosed(int featureId, Menu menu) {
+ mOnPanelClosedCalled = true;
+ super.onPanelClosed(featureId, menu);
+ }
+
+ @Override
+ public boolean onKeyDown(int keyCode, KeyEvent event) {
+ mOnKeyDownEvent = event;
+ return super.onKeyDown(keyCode, event);
+ }
+
+ @Override
+ public boolean onKeyUp(int keyCode, KeyEvent event) {
+ mOnKeyUpEvent = event;
+ return super.onKeyUp(keyCode, event);
+ }
+
+ @Override
+ public boolean onKeyShortcut(int keyCode, KeyEvent event) {
+ mOnKeyShortcutEvent = event;
+ return super.onKeyShortcut(keyCode, event);
+ }
+
+ public KeyEvent getInvokedKeyShortcutEvent() {
+ return mOnKeyShortcutEvent;
+ }
+
+ public boolean wasOnMenuOpenedCalled() {
+ return mOnMenuOpenedCalled;
+ }
+
+ public boolean wasOnPanelClosedCalled() {
+ return mOnPanelClosedCalled;
+ }
+
+ public KeyEvent getInvokedKeyDownEvent() {
+ return mOnKeyDownEvent;
+ }
+
+ public KeyEvent getInvokedKeyUpEvent() {
+ return mOnKeyUpEvent;
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ mMenu = menu;
+ getMenuInflater().inflate(R.menu.sample_actions, menu);
+ return true;
+ }
+
+ public boolean expandSearchView() {
+ return MenuItemCompat.expandActionView(mMenu.findItem(R.id.action_search));
+ }
+
+ public boolean collapseSearchView() {
+ return MenuItemCompat.collapseActionView(mMenu.findItem(R.id.action_search));
+ }
+
+ public boolean isSearchViewExpanded() {
+ return MenuItemCompat.isActionViewExpanded(mMenu.findItem(R.id.action_search));
+ }
+
+ public void reset() {
+ mOnKeyUpEvent = null;
+ mOnKeyDownEvent = null;
+ mOnKeyShortcutEvent = null;
+ mOnMenuOpenedCalled = false;
+ mOnPanelClosedCalled = false;
+ }
+}
diff --git a/v7/appcompat/tests/src/android/support/v7/app/BasicsTestCaseWithToolbar.java b/v7/appcompat/tests/src/android/support/v7/app/BasicsTestCaseWithToolbar.java
new file mode 100644
index 0000000..e01e247
--- /dev/null
+++ b/v7/appcompat/tests/src/android/support/v7/app/BasicsTestCaseWithToolbar.java
@@ -0,0 +1,23 @@
+/*
+ * 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.
+ */
+
+package android.support.v7.app;
+
+public class BasicsTestCaseWithToolbar extends BaseBasicsTestCase<ToolbarActionBarActivity> {
+ public BasicsTestCaseWithToolbar() {
+ super(ToolbarActionBarActivity.class);
+ }
+}
diff --git a/v7/appcompat/tests/src/android/support/v7/app/BasicsTestCaseWithWindowDecor.java b/v7/appcompat/tests/src/android/support/v7/app/BasicsTestCaseWithWindowDecor.java
new file mode 100644
index 0000000..ec4e6b0
--- /dev/null
+++ b/v7/appcompat/tests/src/android/support/v7/app/BasicsTestCaseWithWindowDecor.java
@@ -0,0 +1,23 @@
+/*
+ * 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.
+ */
+
+package android.support.v7.app;
+
+public class BasicsTestCaseWithWindowDecor extends BaseBasicsTestCase<WindowDecorActionBarActivity> {
+ public BasicsTestCaseWithWindowDecor() {
+ super(WindowDecorActionBarActivity.class);
+ }
+}
diff --git a/v7/appcompat/tests/src/android/support/v7/app/KeyEventsTestCaseWithToolbar.java b/v7/appcompat/tests/src/android/support/v7/app/KeyEventsTestCaseWithToolbar.java
new file mode 100644
index 0000000..9caf551
--- /dev/null
+++ b/v7/appcompat/tests/src/android/support/v7/app/KeyEventsTestCaseWithToolbar.java
@@ -0,0 +1,23 @@
+/*
+ * 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.
+ */
+
+package android.support.v7.app;
+
+public class KeyEventsTestCaseWithToolbar extends BaseKeyEventsTestCase<ToolbarActionBarActivity> {
+ public KeyEventsTestCaseWithToolbar() {
+ super(ToolbarActionBarActivity.class);
+ }
+}
diff --git a/v7/appcompat/tests/src/android/support/v7/app/KeyEventsTestCaseWithWindowDecor.java b/v7/appcompat/tests/src/android/support/v7/app/KeyEventsTestCaseWithWindowDecor.java
new file mode 100644
index 0000000..9707a4c
--- /dev/null
+++ b/v7/appcompat/tests/src/android/support/v7/app/KeyEventsTestCaseWithWindowDecor.java
@@ -0,0 +1,23 @@
+/*
+ * 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.
+ */
+
+package android.support.v7.app;
+
+public class KeyEventsTestCaseWithWindowDecor extends BaseKeyEventsTestCase<WindowDecorActionBarActivity> {
+ public KeyEventsTestCaseWithWindowDecor() {
+ super(WindowDecorActionBarActivity.class);
+ }
+}
diff --git a/v7/appcompat/tests/src/android/support/v7/app/LayoutInflaterFactoryTestCase.java b/v7/appcompat/tests/src/android/support/v7/app/LayoutInflaterFactoryTestCase.java
new file mode 100644
index 0000000..e1f9aa2
--- /dev/null
+++ b/v7/appcompat/tests/src/android/support/v7/app/LayoutInflaterFactoryTestCase.java
@@ -0,0 +1,125 @@
+/*
+ * 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.
+ */
+
+package android.support.v7.app;
+
+import org.junit.Test;
+
+import android.os.Build;
+import android.support.v7.appcompat.test.R;
+import android.support.v7.widget.AppCompatAutoCompleteTextView;
+import android.support.v7.widget.AppCompatButton;
+import android.support.v7.widget.AppCompatCheckBox;
+import android.support.v7.widget.AppCompatEditText;
+import android.support.v7.widget.AppCompatMultiAutoCompleteTextView;
+import android.support.v7.widget.AppCompatRadioButton;
+import android.support.v7.widget.AppCompatRatingBar;
+import android.support.v7.widget.AppCompatSpinner;
+import android.view.LayoutInflater;
+import android.view.View;
+
+public class LayoutInflaterFactoryTestCase extends BaseInstrumentationTestCase<AppCompatActivity> {
+
+ public LayoutInflaterFactoryTestCase() {
+ super(AppCompatActivity.class);
+ }
+
+ @Test
+ public void testAndroidThemeInflation() throws Throwable {
+ if (Build.VERSION.SDK_INT < 10) {
+ // Ignore this test if running on Gingerbread or below
+ return;
+ }
+ runTestOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ LayoutInflater inflater = LayoutInflater.from(getActivity());
+ View view = inflater.inflate(R.layout.layout_android_theme, null);
+ assertTrue("View has themed Context", view.getContext() != getActivity());
+ }
+ });
+ }
+
+ @Test
+ public void testAppThemeInflation() throws Throwable {
+ if (Build.VERSION.SDK_INT < 10) {
+ // Ignore this test if running on Gingerbread or below
+ return;
+ }
+ runTestOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ LayoutInflater inflater = LayoutInflater.from(getActivity());
+ View view = inflater.inflate(R.layout.layout_app_theme, null);
+ assertTrue("View has themed Context", view.getContext() != getActivity());
+ }
+ });
+ }
+
+ @Test
+ public void testSpinnerInflation() throws Throwable {
+ testAppCompatWidgetInflation(R.layout.layout_spinner, AppCompatSpinner.class);
+ }
+
+ @Test
+ public void testEditTextInflation() throws Throwable {
+ testAppCompatWidgetInflation(R.layout.layout_edittext, AppCompatEditText.class);
+ }
+
+ @Test
+ public void testButtonInflation() throws Throwable {
+ testAppCompatWidgetInflation(R.layout.layout_button, AppCompatButton.class);
+ }
+
+ @Test
+ public void testRadioButtonInflation() throws Throwable {
+ testAppCompatWidgetInflation(R.layout.layout_radiobutton, AppCompatRadioButton.class);
+ }
+
+ @Test
+ public void testCheckBoxInflation() throws Throwable {
+ testAppCompatWidgetInflation(R.layout.layout_checkbox, AppCompatCheckBox.class);
+ }
+
+ @Test
+ public void testActvInflation() throws Throwable {
+ testAppCompatWidgetInflation(R.layout.layout_actv, AppCompatAutoCompleteTextView.class);
+ }
+
+ @Test
+ public void testMactvInflation() throws Throwable {
+ testAppCompatWidgetInflation(R.layout.layout_mactv,
+ AppCompatMultiAutoCompleteTextView.class);
+ }
+
+ @Test
+ public void testRatingBarInflation() throws Throwable {
+ testAppCompatWidgetInflation(R.layout.layout_ratingbar, AppCompatRatingBar.class);
+ }
+
+ private void testAppCompatWidgetInflation(final int layout, final Class<?> expectedClass)
+ throws Throwable {
+ runTestOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ LayoutInflater inflater = LayoutInflater.from(getActivity());
+ View view = inflater.inflate(layout, null);
+ assertEquals("View is " + expectedClass.getSimpleName(), expectedClass,
+ view.getClass());
+ }
+ });
+ }
+}
diff --git a/v7/appcompat/tests/src/android/support/v7/app/ToolbarActionBarActivity.java b/v7/appcompat/tests/src/android/support/v7/app/ToolbarActionBarActivity.java
new file mode 100644
index 0000000..1df19c0
--- /dev/null
+++ b/v7/appcompat/tests/src/android/support/v7/app/ToolbarActionBarActivity.java
@@ -0,0 +1,36 @@
+/*
+ * 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.
+ */
+
+package android.support.v7.app;
+
+import android.support.v7.appcompat.test.R;
+import android.support.v7.widget.Toolbar;
+
+public class ToolbarActionBarActivity extends BaseTestActivity {
+
+ private Toolbar mToolbar;
+
+ @Override
+ protected int getContentViewLayoutResId() {
+ return R.layout.toolbar_decor_content;
+ }
+
+ @Override
+ protected void onContentViewSet() {
+ mToolbar = (Toolbar) findViewById(R.id.toolbar);
+ setSupportActionBar(mToolbar);
+ }
+}
diff --git a/v7/appcompat/tests/src/android/support/v7/app/WindowDecorActionBarActivity.java b/v7/appcompat/tests/src/android/support/v7/app/WindowDecorActionBarActivity.java
new file mode 100644
index 0000000..c7074e9
--- /dev/null
+++ b/v7/appcompat/tests/src/android/support/v7/app/WindowDecorActionBarActivity.java
@@ -0,0 +1,28 @@
+/*
+ * 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.
+ */
+
+package android.support.v7.app;
+
+import android.support.v7.appcompat.test.R;
+
+public class WindowDecorActionBarActivity extends BaseTestActivity {
+
+ @Override
+ protected int getContentViewLayoutResId() {
+ return R.layout.window_decor_content;
+ }
+
+}
diff --git a/v7/cardview/api/22.2.1.txt b/v7/cardview/api/22.2.1.txt
new file mode 100644
index 0000000..bb62ed7
--- /dev/null
+++ b/v7/cardview/api/22.2.1.txt
@@ -0,0 +1,26 @@
+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 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 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/gridlayout/api/22.2.1.txt b/v7/gridlayout/api/22.2.1.txt
new file mode 100644
index 0000000..baa25e2
--- /dev/null
+++ b/v7/gridlayout/api/22.2.1.txt
@@ -0,0 +1,74 @@
+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 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);
+ }
+
+ public final deprecated class Space extends android.support.v4.widget.Space {
+ ctor public Space(android.content.Context);
+ ctor public Space(android.content.Context, android.util.AttributeSet);
+ ctor public Space(android.content.Context, android.util.AttributeSet, int);
+ }
+
+}
+
diff --git a/v7/mediarouter/api/22.2.1.txt b/v7/mediarouter/api/22.2.1.txt
new file mode 100644
index 0000000..a382a89
--- /dev/null
+++ b/v7/mediarouter/api/22.2.1.txt
@@ -0,0 +1,447 @@
+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 setRouteSelector(android.support.v7.media.MediaRouteSelector);
+ method public boolean showDialog();
+ }
+
+ public class MediaRouteChooserDialog extends android.app.Dialog {
+ 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.app.Dialog {
+ 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_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_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 java.util.List<android.content.IntentFilter> getControlFilters();
+ method public java.lang.String getDescription();
+ method public android.os.Bundle getExtras();
+ 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 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 android.support.v7.media.MediaRouteDescriptor.Builder setConnecting(boolean);
+ method public android.support.v7.media.MediaRouteDescriptor.Builder setDescription(java.lang.String);
+ 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 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 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 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 final class MediaRouter.RouteInfo {
+ method public boolean canDisconnect();
+ method public java.util.List<android.content.IntentFilter> getControlFilters();
+ method public java.lang.String getDescription();
+ method public android.os.Bundle getExtras();
+ 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 isConnecting();
+ method public boolean isDefault();
+ 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 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 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 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 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/palette/api/22.2.1.txt b/v7/palette/api/22.2.1.txt
new file mode 100644
index 0000000..d92c0dd
--- /dev/null
+++ b/v7/palette/api/22.2.1.txt
@@ -0,0 +1,48 @@
+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 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 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 java.util.List<android.support.v7.graphics.Palette.Swatch> getSwatches();
+ 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 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 resizeBitmapSize(int);
+ }
+
+ 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();
+ }
+
+}
+
diff --git a/v7/recyclerview/api/22.2.1.txt b/v7/recyclerview/api/22.2.1.txt
new file mode 100644
index 0000000..48272bd
--- /dev/null
+++ b/v7/recyclerview/api/22.2.1.txt
@@ -0,0 +1,792 @@
+package android.support.v7.recyclerview {
+
+ public final class R {
+ ctor public R();
+ }
+
+ public static final class R.attr {
+ ctor public R.attr();
+ field public static int layoutManager;
+ field public static int reverseLayout;
+ field public static int spanCount;
+ field public static int stackFromEnd;
+ }
+
+ public static final class R.dimen {
+ ctor public R.dimen();
+ field public static int item_touch_helper_max_drag_scroll_per_frame;
+ }
+
+ public static final class R.id {
+ ctor public R.id();
+ field public static int item_touch_helper_previous_elevation;
+ }
+
+ public static final class R.styleable {
+ ctor public R.styleable();
+ field public static final int[] RecyclerView;
+ field public static int RecyclerView_android_orientation;
+ field public static int RecyclerView_layoutManager;
+ field public static int RecyclerView_reverseLayout;
+ field public static int RecyclerView_spanCount;
+ field public static int RecyclerView_stackFromEnd;
+ }
+
+}
+
+package android.support.v7.util {
+
+ public class SortedList {
+ 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 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 implements java.util.Comparator {
+ 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 abstract void onInserted(int, int);
+ method public abstract void onMoved(int, int);
+ method public abstract void onRemoved(int, int);
+ }
+
+}
+
+package android.support.v7.widget {
+
+ public class DefaultItemAnimator extends android.support.v7.widget.RecyclerView.ItemAnimator {
+ 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 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 {
+ 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 getOrientation();
+ method public boolean getRecycleChildrenOnDetach();
+ method public boolean getReverseLayout();
+ method public boolean getStackFromEnd();
+ method protected boolean isLayoutRTL();
+ method public boolean isSmoothScrollbarEnabled();
+ method public void prepareForDrop(android.view.View, android.view.View, int, int);
+ method public void scrollToPositionWithOffset(int, int);
+ method public void 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 abstract 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 abstract 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 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 getStartAfterPadding();
+ method public abstract int getTotalSpace();
+ method public int getTotalSpaceChange();
+ 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 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 drawChild(android.graphics.Canvas, android.view.View, long);
+ method public android.view.View findChildViewUnder(float, float);
+ 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 android.support.v7.widget.RecyclerView.ItemAnimator getItemAnimator();
+ method public android.support.v7.widget.RecyclerView.LayoutManager getLayoutManager();
+ method public int getMaxFlingVelocity();
+ method public int getMinFlingVelocity();
+ method public android.support.v7.widget.RecyclerView.RecycledViewPool getRecycledViewPool();
+ method public int getScrollState();
+ method public boolean hasFixedSize();
+ method public boolean hasPendingAdapterUpdates();
+ method public void invalidateItemDecorations();
+ method public boolean isAnimating();
+ method public boolean isComputingLayout();
+ 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 setLayoutManager(android.support.v7.widget.RecyclerView.LayoutManager);
+ method public deprecated void setOnScrollListener(android.support.v7.widget.RecyclerView.OnScrollListener);
+ 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 smoothScrollToPosition(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 {
+ 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 notifyItemInserted(int);
+ method public final void notifyItemMoved(int, int);
+ method public final void notifyItemRangeChanged(int, int);
+ 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 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 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 animateAdd(android.support.v7.widget.RecyclerView.ViewHolder);
+ method public abstract boolean animateChange(android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ViewHolder, int, int, int, int);
+ method public abstract boolean animateMove(android.support.v7.widget.RecyclerView.ViewHolder, int, int, int, int);
+ 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 dispatchAnimationsFinished();
+ 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 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 boolean getSupportsChangeAnimations();
+ method public abstract boolean isRunning();
+ method public final boolean isRunning(android.support.v7.widget.RecyclerView.ItemAnimator.ItemAnimatorFinishedListener);
+ 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 abstract void runPendingAnimations();
+ method public void setAddDuration(long);
+ method public void setChangeDuration(long);
+ method public void setMoveDuration(long);
+ method public void setRemoveDuration(long);
+ method public void setSupportsChangeAnimations(boolean);
+ }
+
+ public static abstract interface RecyclerView.ItemAnimator.ItemAnimatorFinishedListener {
+ method public abstract void onAnimationsFinished();
+ }
+
+ 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 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 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 int getChildMeasureSpec(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 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 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 int getWidth();
+ method public boolean hasFocus();
+ method public void ignoreView(android.view.View);
+ method public boolean isAttachedToWindow();
+ method public boolean isFocused();
+ method public boolean isLayoutHierarchical(android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State);
+ method public boolean isSmoothScrolling();
+ method public void layoutDecorated(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 onLayoutChildren(android.support.v7.widget.RecyclerView.Recycler, 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 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 setMeasuredDimension(int, int);
+ 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 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 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 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 class RecyclerView.State {
+ ctor public RecyclerView.State();
+ method public boolean didStructureChange();
+ method public T get(int);
+ method public int getItemCount();
+ method public int getTargetScrollPosition();
+ method public boolean hasTargetScrollPosition();
+ method public boolean isPreLayout();
+ method public void onViewIgnored(android.support.v7.widget.RecyclerView.ViewHolder);
+ 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);
+ }
+
+ public class StaggeredGridLayoutManager extends android.support.v7.widget.RecyclerView.LayoutManager {
+ ctor public StaggeredGridLayoutManager(android.content.Context, android.util.AttributeSet, int, int);
+ ctor public StaggeredGridLayoutManager(int, 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 java.lang.String TAG = "StaggeredGridLayoutManager";
+ 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 getSwipeThreshold(android.support.v7.widget.RecyclerView.ViewHolder);
+ 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 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/current.txt b/v7/recyclerview/api/current.txt
index a7becb4..e37956e 100644
--- a/v7/recyclerview/api/current.txt
+++ b/v7/recyclerview/api/current.txt
@@ -286,6 +286,7 @@
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);
@@ -305,6 +306,7 @@
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 deprecated void setOnScrollListener(android.support.v7.widget.RecyclerView.OnScrollListener);
method public void setRecycledViewPool(android.support.v7.widget.RecyclerView.RecycledViewPool);
@@ -338,14 +340,17 @@
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);
@@ -361,6 +366,7 @@
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);
@@ -517,6 +523,7 @@
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 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);
diff --git a/v7/recyclerview/jvm-tests/src/android/support/v7/widget/AdapterHelperTest.java b/v7/recyclerview/jvm-tests/src/android/support/v7/widget/AdapterHelperTest.java
index 68371c5..ba6ec71 100644
--- a/v7/recyclerview/jvm-tests/src/android/support/v7/widget/AdapterHelperTest.java
+++ b/v7/recyclerview/jvm-tests/src/android/support/v7/widget/AdapterHelperTest.java
@@ -114,11 +114,12 @@
}
@Override
- public void markViewHoldersUpdated(int positionStart, int itemCount) {
+ public void markViewHoldersUpdated(int positionStart, int itemCount, Object payload) {
final int positionEnd = positionStart + itemCount;
for (ViewHolder holder : mViewHolders) {
if (holder.mPosition >= positionStart && holder.mPosition < positionEnd) {
holder.addFlags(ViewHolder.FLAG_UPDATE);
+ holder.addChangePayload(payload);
}
}
}
@@ -815,6 +816,15 @@
}
@Test
+ public void testPayloads() {
+ setupBasic(10, 2, 2);
+ up(3, 3, "payload");
+ preProcess();
+ assertOps(mFirstPassUpdates, upOp(4, 2, "payload"));
+ assertOps(mSecondPassUpdates, upOp(3, 1, "payload"));
+ }
+
+ @Test
public void testRandom() throws Throwable {
mCollectLogs = true;
Random random = new Random(System.nanoTime());
@@ -840,7 +850,7 @@
setupBasic(count, start, layoutCount);
while (opCount-- > 0) {
- final int op = nextInt(random, 4);
+ final int op = nextInt(random, 5);
switch (op) {
case 0:
if (mTestAdapter.mItems.size() > 1) {
@@ -871,6 +881,13 @@
up(s, len);
}
break;
+ case 4:
+ if (mTestAdapter.mItems.size() > 1) {
+ s = nextInt(random, mTestAdapter.mItems.size() - 1);
+ int len = Math.max(1, nextInt(random, mTestAdapter.mItems.size() - s));
+ up(s, len, Integer.toString(s));
+ }
+ break;
}
}
preProcess();
@@ -945,7 +962,11 @@
}
AdapterHelper.UpdateOp op(int cmd, int start, int count) {
- return new AdapterHelper.UpdateOp(cmd, start, count);
+ return new AdapterHelper.UpdateOp(cmd, start, count, null);
+ }
+
+ AdapterHelper.UpdateOp op(int cmd, int start, int count, Object payload) {
+ return new AdapterHelper.UpdateOp(cmd, start, count, payload);
}
AdapterHelper.UpdateOp addOp(int start, int count) {
@@ -956,8 +977,8 @@
return op(AdapterHelper.UpdateOp.REMOVE, start, count);
}
- AdapterHelper.UpdateOp upOp(int start, int count) {
- return op(AdapterHelper.UpdateOp.UPDATE, start, count);
+ AdapterHelper.UpdateOp upOp(int start, int count, Object payload) {
+ return op(AdapterHelper.UpdateOp.UPDATE, start, count, payload);
}
void add(int start, int count) {
@@ -1003,6 +1024,13 @@
mTestAdapter.update(start, count);
}
+ void up(int start, int count, Object payload) {
+ if (DEBUG) {
+ log("up(" + start + "," + count + "," + payload + ");");
+ }
+ mTestAdapter.update(start, count, payload);
+ }
+
static class TestAdapter {
List<Item> mItems;
@@ -1027,14 +1055,14 @@
mItems.add(index + i, item);
}
mAdapterHelper.addUpdateOp(new AdapterHelper.UpdateOp(
- AdapterHelper.UpdateOp.ADD, index, count
+ AdapterHelper.UpdateOp.ADD, index, count, null
));
}
public void move(int from, int to) {
mItems.add(to, mItems.remove(from));
mAdapterHelper.addUpdateOp(new AdapterHelper.UpdateOp(
- AdapterHelper.UpdateOp.MOVE, from, to
+ AdapterHelper.UpdateOp.MOVE, from, to, null
));
}
@@ -1043,16 +1071,20 @@
mItems.remove(index);
}
mAdapterHelper.addUpdateOp(new AdapterHelper.UpdateOp(
- AdapterHelper.UpdateOp.REMOVE, index, count
+ AdapterHelper.UpdateOp.REMOVE, index, count, null
));
}
public void update(int index, int count) {
+ update(index, count, null);
+ }
+
+ public void update(int index, int count, Object payload) {
for (int i = 0; i < count; i++) {
- mItems.get(index + i).update();
+ mItems.get(index + i).update(payload);
}
mAdapterHelper.addUpdateOp(new AdapterHelper.UpdateOp(
- AdapterHelper.UpdateOp.UPDATE, index, count
+ AdapterHelper.UpdateOp.UPDATE, index, count, payload
));
}
@@ -1080,7 +1112,7 @@
break;
case AdapterHelper.UpdateOp.UPDATE:
for (int i = 0; i < op.itemCount; i++) {
- mItems.get(i).handleUpdate();
+ mItems.get(op.positionStart + i).handleUpdate(op.payload);
}
break;
case AdapterHelper.UpdateOp.MOVE:
@@ -1107,22 +1139,25 @@
private int mVersionCount = 0;
- private int mUpdateCount;
+ private ArrayList<Object> mPayloads = new ArrayList<Object>();
public Item() {
id = itemCounter.incrementAndGet();
}
- public void update() {
+ public void update(Object payload) {
+ mPayloads.add(payload);
mVersionCount++;
}
- public void handleUpdate() {
+ public void handleUpdate(Object payload) {
+ assertSame(payload, mPayloads.get(0));
+ mPayloads.remove(0);
mVersionCount--;
}
public int getUpdateCount() {
- return mUpdateCount;
+ return mVersionCount;
}
}
}
diff --git a/v7/recyclerview/jvm-tests/src/android/support/v7/widget/OpReorderTest.java b/v7/recyclerview/jvm-tests/src/android/support/v7/widget/OpReorderTest.java
index 4289aea..06bfce6 100644
--- a/v7/recyclerview/jvm-tests/src/android/support/v7/widget/OpReorderTest.java
+++ b/v7/recyclerview/jvm-tests/src/android/support/v7/widget/OpReorderTest.java
@@ -49,8 +49,8 @@
OpReorderer mOpReorderer = new OpReorderer(new OpReorderer.Callback() {
@Override
- public UpdateOp obtainUpdateOp(int cmd, int startPosition, int itemCount) {
- return new UpdateOp(cmd, startPosition, itemCount);
+ public UpdateOp obtainUpdateOp(int cmd, int startPosition, int itemCount, Object payload) {
+ return new UpdateOp(cmd, startPosition, itemCount, payload);
}
@Override
@@ -283,20 +283,20 @@
UpdateOp rm(int start, int count) {
updatedItemCount -= count;
- return record(new UpdateOp(REMOVE, start, count));
+ return record(new UpdateOp(REMOVE, start, count, null));
}
UpdateOp mv(int from, int to) {
- return record(new UpdateOp(MOVE, from, to));
+ return record(new UpdateOp(MOVE, from, to, null));
}
UpdateOp add(int start, int count) {
updatedItemCount += count;
- return record(new UpdateOp(ADD, start, count));
+ return record(new UpdateOp(ADD, start, count, null));
}
UpdateOp up(int start, int count) {
- return record(new UpdateOp(UPDATE, start, count));
+ return record(new UpdateOp(UPDATE, start, count, null));
}
UpdateOp record(UpdateOp op) {
@@ -407,7 +407,7 @@
private List<UpdateOp> rewriteOps(List<UpdateOp> updateOps) {
List<UpdateOp> copy = new ArrayList<UpdateOp>();
for (UpdateOp op : updateOps) {
- copy.add(new UpdateOp(op.cmd, op.positionStart, op.itemCount));
+ copy.add(new UpdateOp(op.cmd, op.positionStart, op.itemCount, null));
}
mOpReorderer.reorderOps(copy);
return copy;
diff --git a/v7/recyclerview/src/android/support/v7/widget/AdapterHelper.java b/v7/recyclerview/src/android/support/v7/widget/AdapterHelper.java
index 032449c..e9feab8 100644
--- a/v7/recyclerview/src/android/support/v7/widget/AdapterHelper.java
+++ b/v7/recyclerview/src/android/support/v7/widget/AdapterHelper.java
@@ -145,7 +145,7 @@
if (type == POSITION_TYPE_INVISIBLE) {
// Looks like we have other updates that we cannot merge with this one.
// Create an UpdateOp and dispatch it to LayoutManager.
- UpdateOp newOp = obtainUpdateOp(UpdateOp.REMOVE, tmpStart, tmpCount);
+ UpdateOp newOp = obtainUpdateOp(UpdateOp.REMOVE, tmpStart, tmpCount, null);
dispatchAndUpdateViewHolders(newOp);
typeChanged = true;
}
@@ -156,7 +156,7 @@
if (type == POSITION_TYPE_NEW_OR_LAID_OUT) {
// Looks like we have other updates that we cannot merge with this one.
// Create UpdateOp op and dispatch it to LayoutManager.
- UpdateOp newOp = obtainUpdateOp(UpdateOp.REMOVE, tmpStart, tmpCount);
+ UpdateOp newOp = obtainUpdateOp(UpdateOp.REMOVE, tmpStart, tmpCount, null);
postponeAndUpdateViewHolders(newOp);
typeChanged = true;
}
@@ -172,7 +172,7 @@
}
if (tmpCount != op.itemCount) { // all 1 effect
recycleUpdateOp(op);
- op = obtainUpdateOp(UpdateOp.REMOVE, tmpStart, tmpCount);
+ op = obtainUpdateOp(UpdateOp.REMOVE, tmpStart, tmpCount, null);
}
if (type == POSITION_TYPE_INVISIBLE) {
dispatchAndUpdateViewHolders(op);
@@ -190,7 +190,8 @@
ViewHolder vh = mCallback.findViewHolder(position);
if (vh != null || canFindInPreLayout(position)) { // deferred
if (type == POSITION_TYPE_INVISIBLE) {
- UpdateOp newOp = obtainUpdateOp(UpdateOp.UPDATE, tmpStart, tmpCount);
+ UpdateOp newOp = obtainUpdateOp(UpdateOp.UPDATE, tmpStart, tmpCount,
+ op.payload);
dispatchAndUpdateViewHolders(newOp);
tmpCount = 0;
tmpStart = position;
@@ -198,7 +199,8 @@
type = POSITION_TYPE_NEW_OR_LAID_OUT;
} else { // applied
if (type == POSITION_TYPE_NEW_OR_LAID_OUT) {
- UpdateOp newOp = obtainUpdateOp(UpdateOp.UPDATE, tmpStart, tmpCount);
+ UpdateOp newOp = obtainUpdateOp(UpdateOp.UPDATE, tmpStart, tmpCount,
+ op.payload);
postponeAndUpdateViewHolders(newOp);
tmpCount = 0;
tmpStart = position;
@@ -208,8 +210,9 @@
tmpCount++;
}
if (tmpCount != op.itemCount) { // all 1 effect
+ Object payload = op.payload;
recycleUpdateOp(op);
- op = obtainUpdateOp(UpdateOp.UPDATE, tmpStart, tmpCount);
+ op = obtainUpdateOp(UpdateOp.UPDATE, tmpStart, tmpCount, payload);
}
if (type == POSITION_TYPE_INVISIBLE) {
dispatchAndUpdateViewHolders(op);
@@ -272,7 +275,7 @@
tmpCnt++;
} else {
// need to dispatch this separately
- UpdateOp tmp = obtainUpdateOp(op.cmd, tmpStart, tmpCnt);
+ UpdateOp tmp = obtainUpdateOp(op.cmd, tmpStart, tmpCnt, op.payload);
if (DEBUG) {
Log.d(TAG, "need to dispatch separately " + tmp);
}
@@ -285,9 +288,10 @@
tmpCnt = 1;
}
}
+ Object payload = op.payload;
recycleUpdateOp(op);
if (tmpCnt > 0) {
- UpdateOp tmp = obtainUpdateOp(op.cmd, tmpStart, tmpCnt);
+ UpdateOp tmp = obtainUpdateOp(op.cmd, tmpStart, tmpCnt, payload);
if (DEBUG) {
Log.d(TAG, "dispatching:" + tmp);
}
@@ -311,7 +315,7 @@
mCallback.offsetPositionsForRemovingInvisible(offsetStart, op.itemCount);
break;
case UpdateOp.UPDATE:
- mCallback.markViewHoldersUpdated(offsetStart, op.itemCount);
+ mCallback.markViewHoldersUpdated(offsetStart, op.itemCount, op.payload);
break;
default:
throw new IllegalArgumentException("only remove and update ops can be dispatched"
@@ -442,7 +446,7 @@
op.itemCount);
break;
case UpdateOp.UPDATE:
- mCallback.markViewHoldersUpdated(op.positionStart, op.itemCount);
+ mCallback.markViewHoldersUpdated(op.positionStart, op.itemCount, op.payload);
break;
default:
throw new IllegalArgumentException("Unknown update op type for " + op);
@@ -489,8 +493,8 @@
/**
* @return True if updates should be processed.
*/
- boolean onItemRangeChanged(int positionStart, int itemCount) {
- mPendingUpdates.add(obtainUpdateOp(UpdateOp.UPDATE, positionStart, itemCount));
+ boolean onItemRangeChanged(int positionStart, int itemCount, Object payload) {
+ mPendingUpdates.add(obtainUpdateOp(UpdateOp.UPDATE, positionStart, itemCount, payload));
return mPendingUpdates.size() == 1;
}
@@ -498,7 +502,7 @@
* @return True if updates should be processed.
*/
boolean onItemRangeInserted(int positionStart, int itemCount) {
- mPendingUpdates.add(obtainUpdateOp(UpdateOp.ADD, positionStart, itemCount));
+ mPendingUpdates.add(obtainUpdateOp(UpdateOp.ADD, positionStart, itemCount, null));
return mPendingUpdates.size() == 1;
}
@@ -506,7 +510,7 @@
* @return True if updates should be processed.
*/
boolean onItemRangeRemoved(int positionStart, int itemCount) {
- mPendingUpdates.add(obtainUpdateOp(UpdateOp.REMOVE, positionStart, itemCount));
+ mPendingUpdates.add(obtainUpdateOp(UpdateOp.REMOVE, positionStart, itemCount, null));
return mPendingUpdates.size() == 1;
}
@@ -520,7 +524,7 @@
if (itemCount != 1) {
throw new IllegalArgumentException("Moving more than 1 item is not supported yet");
}
- mPendingUpdates.add(obtainUpdateOp(UpdateOp.MOVE, from, to));
+ mPendingUpdates.add(obtainUpdateOp(UpdateOp.MOVE, from, to, null));
return mPendingUpdates.size() == 1;
}
@@ -545,7 +549,7 @@
break;
case UpdateOp.UPDATE:
mCallback.onDispatchSecondPass(op);
- mCallback.markViewHoldersUpdated(op.positionStart, op.itemCount);
+ mCallback.markViewHoldersUpdated(op.positionStart, op.itemCount, op.payload);
break;
case UpdateOp.MOVE:
mCallback.onDispatchSecondPass(op);
@@ -614,13 +618,16 @@
int positionStart;
+ Object payload;
+
// holds the target position if this is a MOVE
int itemCount;
- UpdateOp(int cmd, int positionStart, int itemCount) {
+ UpdateOp(int cmd, int positionStart, int itemCount, Object payload) {
this.cmd = cmd;
this.positionStart = positionStart;
this.itemCount = itemCount;
+ this.payload = payload;
}
String cmdToString() {
@@ -639,7 +646,9 @@
@Override
public String toString() {
- return "[" + cmdToString() + ",s:" + positionStart + "c:" + itemCount + "]";
+ return Integer.toHexString(System.identityHashCode(this))
+ + "[" + cmdToString() + ",s:" + positionStart + "c:" + itemCount
+ +",p:"+payload + "]";
}
@Override
@@ -668,6 +677,13 @@
if (positionStart != op.positionStart) {
return false;
}
+ if (payload != null) {
+ if (!payload.equals(op.payload)) {
+ return false;
+ }
+ } else if (op.payload != null) {
+ return false;
+ }
return true;
}
@@ -682,14 +698,15 @@
}
@Override
- public UpdateOp obtainUpdateOp(int cmd, int positionStart, int itemCount) {
+ public UpdateOp obtainUpdateOp(int cmd, int positionStart, int itemCount, Object payload) {
UpdateOp op = mUpdateOpPool.acquire();
if (op == null) {
- op = new UpdateOp(cmd, positionStart, itemCount);
+ op = new UpdateOp(cmd, positionStart, itemCount, payload);
} else {
op.cmd = cmd;
op.positionStart = positionStart;
op.itemCount = itemCount;
+ op.payload = payload;
}
return op;
}
@@ -697,6 +714,7 @@
@Override
public void recycleUpdateOp(UpdateOp op) {
if (!mDisableRecycler) {
+ op.payload = null;
mUpdateOpPool.release(op);
}
}
@@ -720,7 +738,7 @@
void offsetPositionsForRemovingLaidOutOrNewView(int positionStart, int itemCount);
- void markViewHoldersUpdated(int positionStart, int itemCount);
+ void markViewHoldersUpdated(int positionStart, int itemCount, Object payloads);
void onDispatchFirstPass(UpdateOp updateOp);
diff --git a/v7/recyclerview/src/android/support/v7/widget/GridLayoutManager.java b/v7/recyclerview/src/android/support/v7/widget/GridLayoutManager.java
index ed135d8..910405a 100644
--- a/v7/recyclerview/src/android/support/v7/widget/GridLayoutManager.java
+++ b/v7/recyclerview/src/android/support/v7/widget/GridLayoutManager.java
@@ -209,7 +209,8 @@
}
@Override
- public void onItemsUpdated(RecyclerView recyclerView, int positionStart, int itemCount) {
+ public void onItemsUpdated(RecyclerView recyclerView, int positionStart, int itemCount,
+ Object payload) {
mSpanSizeLookup.invalidateSpanIndexCache();
}
@@ -474,9 +475,9 @@
mCachedBorders[lp.mSpanIndex],
View.MeasureSpec.EXACTLY);
if (mOrientation == VERTICAL) {
- measureChildWithDecorationsAndMargin(view, spec, getMainDirSpec(lp.height));
+ measureChildWithDecorationsAndMargin(view, spec, getMainDirSpec(lp.height), false);
} else {
- measureChildWithDecorationsAndMargin(view, getMainDirSpec(lp.width), spec);
+ measureChildWithDecorationsAndMargin(view, getMainDirSpec(lp.width), spec, false);
}
final int size = mOrientationHelper.getDecoratedMeasurement(view);
if (size > maxSize) {
@@ -495,9 +496,9 @@
mCachedBorders[lp.mSpanIndex],
View.MeasureSpec.EXACTLY);
if (mOrientation == VERTICAL) {
- measureChildWithDecorationsAndMargin(view, spec, maxMeasureSpec);
+ measureChildWithDecorationsAndMargin(view, spec, maxMeasureSpec, true);
} else {
- measureChildWithDecorationsAndMargin(view, maxMeasureSpec, spec);
+ measureChildWithDecorationsAndMargin(view, maxMeasureSpec, spec, true);
}
}
}
@@ -559,13 +560,18 @@
}
}
- private void measureChildWithDecorationsAndMargin(View child, int widthSpec, int heightSpec) {
+ private void measureChildWithDecorationsAndMargin(View child, int widthSpec, int heightSpec,
+ boolean capBothSpecs) {
calculateItemDecorationsForChild(child, mDecorInsets);
RecyclerView.LayoutParams lp = (RecyclerView.LayoutParams) child.getLayoutParams();
- widthSpec = updateSpecWithExtra(widthSpec, lp.leftMargin + mDecorInsets.left,
- lp.rightMargin + mDecorInsets.right);
- heightSpec = updateSpecWithExtra(heightSpec, lp.topMargin + mDecorInsets.top,
- lp.bottomMargin + mDecorInsets.bottom);
+ if (capBothSpecs || mOrientation == VERTICAL) {
+ widthSpec = updateSpecWithExtra(widthSpec, lp.leftMargin + mDecorInsets.left,
+ lp.rightMargin + mDecorInsets.right);
+ }
+ if (capBothSpecs || mOrientation == HORIZONTAL) {
+ heightSpec = updateSpecWithExtra(heightSpec, lp.topMargin + mDecorInsets.top,
+ lp.bottomMargin + mDecorInsets.bottom);
+ }
child.measure(widthSpec, heightSpec);
}
diff --git a/v7/recyclerview/src/android/support/v7/widget/OpReorderer.java b/v7/recyclerview/src/android/support/v7/widget/OpReorderer.java
index e123ce8..db01a0c 100644
--- a/v7/recyclerview/src/android/support/v7/widget/OpReorderer.java
+++ b/v7/recyclerview/src/android/support/v7/widget/OpReorderer.java
@@ -100,7 +100,7 @@
} else if (moveOp.positionStart < removeOp.positionStart + removeOp.itemCount) {
final int remaining = removeOp.positionStart + removeOp.itemCount
- moveOp.positionStart;
- extraRm = mCallback.obtainUpdateOp(REMOVE, moveOp.positionStart + 1, remaining);
+ extraRm = mCallback.obtainUpdateOp(REMOVE, moveOp.positionStart + 1, remaining, null);
removeOp.itemCount = moveOp.positionStart - removeOp.positionStart;
}
@@ -187,7 +187,7 @@
} else if (moveOp.itemCount < updateOp.positionStart + updateOp.itemCount) {
// moved item is updated. add an update for it
updateOp.itemCount--;
- extraUp1 = mCallback.obtainUpdateOp(UPDATE, moveOp.positionStart, 1);
+ extraUp1 = mCallback.obtainUpdateOp(UPDATE, moveOp.positionStart, 1, updateOp.payload);
}
// now affect of add is consumed. now apply effect of first remove
if (moveOp.positionStart <= updateOp.positionStart) {
@@ -195,7 +195,8 @@
} else if (moveOp.positionStart < updateOp.positionStart + updateOp.itemCount) {
final int remaining = updateOp.positionStart + updateOp.itemCount
- moveOp.positionStart;
- extraUp2 = mCallback.obtainUpdateOp(UPDATE, moveOp.positionStart + 1, remaining);
+ extraUp2 = mCallback.obtainUpdateOp(UPDATE, moveOp.positionStart + 1, remaining,
+ updateOp.payload);
updateOp.itemCount -= remaining;
}
list.set(update, moveOp);
@@ -230,7 +231,7 @@
static interface Callback {
- UpdateOp obtainUpdateOp(int cmd, int startPosition, int itemCount);
+ UpdateOp obtainUpdateOp(int cmd, int startPosition, int itemCount, Object payload);
void recycleUpdateOp(UpdateOp op);
}
diff --git a/v7/recyclerview/src/android/support/v7/widget/RecyclerView.java b/v7/recyclerview/src/android/support/v7/widget/RecyclerView.java
index d884caf..01ba5d7 100644
--- a/v7/recyclerview/src/android/support/v7/widget/RecyclerView.java
+++ b/v7/recyclerview/src/android/support/v7/widget/RecyclerView.java
@@ -27,6 +27,7 @@
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
+import android.os.SystemClock;
import android.support.annotation.Nullable;
import android.support.v4.os.TraceCompat;
import android.support.v4.util.ArrayMap;
@@ -291,6 +292,9 @@
private boolean mFirstLayoutComplete;
private boolean mEatRequestLayout;
private boolean mLayoutRequestEaten;
+ private boolean mLayoutFrozen;
+ private boolean mIgnoreMotionEventTillDown;
+
// binary OR of change events that were eaten during a layout or scroll.
private int mEatenAccessibilityChangeFlags;
private boolean mAdapterUpdateDuringMeasure;
@@ -406,6 +410,7 @@
public RecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
+ setScrollContainer(true);
setFocusableInTouchMode(true);
final int version = Build.VERSION.SDK_INT;
mPostUpdatesOnAnimation = version >= 16;
@@ -643,8 +648,8 @@
}
@Override
- public void markViewHoldersUpdated(int positionStart, int itemCount) {
- viewRangeUpdate(positionStart, itemCount);
+ public void markViewHoldersUpdated(int positionStart, int itemCount, Object payload) {
+ viewRangeUpdate(positionStart, itemCount, payload);
mItemsChanged = true;
}
@@ -662,7 +667,8 @@
mLayout.onItemsRemoved(RecyclerView.this, op.positionStart, op.itemCount);
break;
case UpdateOp.UPDATE:
- mLayout.onItemsUpdated(RecyclerView.this, op.positionStart, op.itemCount);
+ mLayout.onItemsUpdated(RecyclerView.this, op.positionStart, op.itemCount,
+ op.payload);
break;
case UpdateOp.MOVE:
mLayout.onItemsMoved(RecyclerView.this, op.positionStart, op.itemCount, 1);
@@ -762,6 +768,8 @@
* @see #setAdapter(Adapter)
*/
public void swapAdapter(Adapter adapter, boolean removeAndRecycleExistingViews) {
+ // bail out if layout is frozen
+ setLayoutFrozen(false);
setAdapterInternal(adapter, true, removeAndRecycleExistingViews);
setDataSetChangedAfterLayout();
requestLayout();
@@ -776,6 +784,8 @@
* @see #swapAdapter(Adapter, boolean)
*/
public void setAdapter(Adapter adapter) {
+ // bail out if layout is frozen
+ setLayoutFrozen(false);
setAdapterInternal(adapter, false, true);
requestLayout();
}
@@ -1261,6 +1271,9 @@
* @see android.support.v7.widget.RecyclerView.LayoutManager#scrollToPosition(int)
*/
public void scrollToPosition(int position) {
+ if (mLayoutFrozen) {
+ return;
+ }
stopScroll();
if (mLayout == null) {
Log.e(TAG, "Cannot scroll to position a LayoutManager set. " +
@@ -1295,6 +1308,9 @@
* @see LayoutManager#smoothScrollToPosition(RecyclerView, State, int)
*/
public void smoothScrollToPosition(int position) {
+ if (mLayoutFrozen) {
+ return;
+ }
if (mLayout == null) {
Log.e(TAG, "Cannot smooth scroll without a LayoutManager set. " +
"Call setLayoutManager with a non-null argument.");
@@ -1316,6 +1332,9 @@
"Call setLayoutManager with a non-null argument.");
return;
}
+ if (mLayoutFrozen) {
+ return;
+ }
final boolean canScrollHorizontal = mLayout.canScrollHorizontally();
final boolean canScrollVertical = mLayout.canScrollVertically();
if (canScrollHorizontal || canScrollVertical) {
@@ -1549,22 +1568,80 @@
void eatRequestLayout() {
if (!mEatRequestLayout) {
mEatRequestLayout = true;
- mLayoutRequestEaten = false;
+ if (!mLayoutFrozen) {
+ mLayoutRequestEaten = false;
+ }
}
}
void resumeRequestLayout(boolean performLayoutChildren) {
if (mEatRequestLayout) {
- if (performLayoutChildren && mLayoutRequestEaten &&
+ // when layout is frozen we should delay dispatchLayout()
+ if (performLayoutChildren && mLayoutRequestEaten && !mLayoutFrozen &&
mLayout != null && mAdapter != null) {
dispatchLayout();
}
mEatRequestLayout = false;
- mLayoutRequestEaten = false;
+ if (!mLayoutFrozen) {
+ mLayoutRequestEaten = false;
+ }
}
}
/**
+ * Enable or disable layout and scroll. After <code>setLayoutFrozen(true)</code> is called,
+ * Layout requests will be postponed until <code>setLayoutFrozen(false)</code> is called;
+ * child views are not updated when RecyclerView is frozen, {@link #smoothScrollBy(int, int)},
+ * {@link #scrollBy(int, int)}, {@link #scrollToPosition(int)} and
+ * {@link #smoothScrollToPosition(int)} are dropped; TouchEvents and GenericMotionEvents are
+ * dropped; {@link LayoutManager#onFocusSearchFailed(View, int, Recycler, State)} will not be
+ * called.
+ *
+ * <p>
+ * <code>setLayoutFrozen(true)</code> does not prevent app from directly calling {@link
+ * LayoutManager#scrollToPosition(int)}, {@link LayoutManager#smoothScrollToPosition(
+ * RecyclerView, State, int)}.
+ * <p>
+ * {@link #setAdapter(Adapter)} and {@link #swapAdapter(Adapter, boolean)} will automatically
+ * stop frozen.
+ * <p>
+ * Note: Running ItemAnimator is not stopped automatically, it's caller's
+ * responsibility to call ItemAnimator.end().
+ *
+ * @param frozen true to freeze layout and scroll, false to re-enable.
+ */
+ public void setLayoutFrozen(boolean frozen) {
+ if (frozen != mLayoutFrozen) {
+ assertNotInLayoutOrScroll("Do not setLayoutFrozen in layout or scroll");
+ if (!frozen) {
+ mLayoutFrozen = frozen;
+ if (mLayoutRequestEaten && mLayout != null && mAdapter != null) {
+ requestLayout();
+ }
+ mLayoutRequestEaten = false;
+ } else {
+ final long now = SystemClock.uptimeMillis();
+ MotionEvent cancelEvent = MotionEvent.obtain(now, now,
+ MotionEvent.ACTION_CANCEL, 0.0f, 0.0f, 0);
+ onTouchEvent(cancelEvent);
+ mLayoutFrozen = frozen;
+ mIgnoreMotionEventTillDown = true;
+ stopScroll();
+ }
+ }
+ }
+
+ /**
+ * Returns true if layout and scroll are frozen.
+ *
+ * @return true if layout and scroll are frozen
+ * @see #setLayoutFrozen(boolean)
+ */
+ public boolean isLayoutFrozen() {
+ return mLayoutFrozen;
+ }
+
+ /**
* Animate a scroll by the given amount of pixels along either axis.
*
* @param dx Pixels to scroll horizontally
@@ -1576,6 +1653,9 @@
"Call setLayoutManager with a non-null argument.");
return;
}
+ if (mLayoutFrozen) {
+ return;
+ }
if (!mLayout.canScrollHorizontally()) {
dx = 0;
}
@@ -1606,6 +1686,9 @@
"Call setLayoutManager with a non-null argument.");
return false;
}
+ if (mLayoutFrozen) {
+ return false;
+ }
final boolean canScrollHorizontal = mLayout.canScrollHorizontally();
final boolean canScrollVertical = mLayout.canScrollVertically();
@@ -1826,7 +1909,8 @@
}
final FocusFinder ff = FocusFinder.getInstance();
result = ff.findNextFocus(this, focused, direction);
- if (result == null && mAdapter != null && mLayout != null && !isComputingLayout()) {
+ if (result == null && mAdapter != null && mLayout != null && !isComputingLayout()
+ && !mLayoutFrozen) {
eatRequestLayout();
result = mLayout.onFocusSearchFailed(focused, direction, mRecycler, mState);
resumeRequestLayout(false);
@@ -2024,6 +2108,11 @@
@Override
public boolean onInterceptTouchEvent(MotionEvent e) {
+ if (mLayoutFrozen) {
+ // When layout is frozen, RV does not intercept the motion event.
+ // A child view e.g. a button may still get the click.
+ return false;
+ }
if (dispatchOnItemTouchIntercept(e)) {
cancelTouch();
return true;
@@ -2046,6 +2135,9 @@
switch (action) {
case MotionEvent.ACTION_DOWN:
+ if (mIgnoreMotionEventTillDown) {
+ mIgnoreMotionEventTillDown = false;
+ }
mScrollPointerId = MotionEventCompat.getPointerId(e, 0);
mInitialTouchX = mLastTouchX = (int) (e.getX() + 0.5f);
mInitialTouchY = mLastTouchY = (int) (e.getY() + 0.5f);
@@ -2131,6 +2223,9 @@
@Override
public boolean onTouchEvent(MotionEvent e) {
+ if (mLayoutFrozen || mIgnoreMotionEventTillDown) {
+ return false;
+ }
if (dispatchOnItemTouch(e)) {
cancelTouch();
return true;
@@ -2146,7 +2241,7 @@
if (mVelocityTracker == null) {
mVelocityTracker = VelocityTracker.obtain();
}
- mVelocityTracker.addMovement(e);
+ boolean eventAddedToVelocityTracker = false;
final MotionEvent vtev = MotionEvent.obtain(e);
final int action = MotionEventCompat.getActionMasked(e);
@@ -2246,6 +2341,8 @@
} break;
case MotionEvent.ACTION_UP: {
+ mVelocityTracker.addMovement(vtev);
+ eventAddedToVelocityTracker = true;
mVelocityTracker.computeCurrentVelocity(1000, mMaxFlingVelocity);
final float xvel = canScrollHorizontally ?
-VelocityTrackerCompat.getXVelocity(mVelocityTracker, mScrollPointerId) : 0;
@@ -2254,9 +2351,7 @@
if (!((xvel != 0 || yvel != 0) && fling((int) xvel, (int) yvel))) {
setScrollState(SCROLL_STATE_IDLE);
}
-
- mVelocityTracker.clear();
- releaseGlows();
+ resetTouch();
} break;
case MotionEvent.ACTION_CANCEL: {
@@ -2264,17 +2359,24 @@
} break;
}
+ if (!eventAddedToVelocityTracker) {
+ mVelocityTracker.addMovement(vtev);
+ }
vtev.recycle();
return true;
}
- private void cancelTouch() {
+ private void resetTouch() {
if (mVelocityTracker != null) {
mVelocityTracker.clear();
}
stopNestedScroll();
releaseGlows();
+ }
+
+ private void cancelTouch() {
+ resetTouch();
setScrollState(SCROLL_STATE_IDLE);
}
@@ -2294,6 +2396,9 @@
if (mLayout == null) {
return false;
}
+ if (mLayoutFrozen) {
+ return false;
+ }
if ((MotionEventCompat.getSource(event) & InputDeviceCompat.SOURCE_CLASS_POINTER) != 0) {
if (event.getAction() == MotionEventCompat.ACTION_SCROLL) {
final float vScroll, hScroll;
@@ -3024,7 +3129,7 @@
@Override
public void requestLayout() {
- if (!mEatRequestLayout) {
+ if (!mEatRequestLayout && !mLayoutFrozen) {
super.requestLayout();
} else {
mLayoutRequestEaten = true;
@@ -3264,7 +3369,7 @@
* @param positionStart Adapter position to start at
* @param itemCount Number of views that must explicitly be rebound
*/
- void viewRangeUpdate(int positionStart, int itemCount) {
+ void viewRangeUpdate(int positionStart, int itemCount, Object payload) {
final int childCount = mChildHelper.getUnfilteredChildCount();
final int positionEnd = positionStart + itemCount;
@@ -3278,6 +3383,7 @@
// We re-bind these view holders after pre-processing is complete so that
// ViewHolders have their final positions assigned.
holder.addFlags(ViewHolder.FLAG_UPDATE);
+ holder.addChangePayload(payload);
if (supportsChangeAnimations()) {
holder.addFlags(ViewHolder.FLAG_CHANGED);
}
@@ -3990,9 +4096,9 @@
}
@Override
- public void onItemRangeChanged(int positionStart, int itemCount) {
+ public void onItemRangeChanged(int positionStart, int itemCount, Object payload) {
assertNotInLayoutOrScroll(null);
- if (mAdapterHelper.onItemRangeChanged(positionStart, itemCount)) {
+ if (mAdapterHelper.onItemRangeChanged(positionStart, itemCount, payload)) {
triggerUpdateProcessor();
}
}
@@ -4989,6 +5095,7 @@
final ViewHolder holder = mCachedViews.get(i);
if (holder != null) {
holder.addFlags(ViewHolder.FLAG_UPDATE | ViewHolder.FLAG_INVALID);
+ holder.addChangePayload(null);
}
}
} else {
@@ -5080,9 +5187,9 @@
* layout file.
* <p>
* The new ViewHolder will be used to display items of the adapter using
- * {@link #onBindViewHolder(ViewHolder, int)}. Since it will be re-used to display different
- * items in the data set, it is a good idea to cache references to sub views of the View to
- * avoid unnecessary {@link View#findViewById(int)} calls.
+ * {@link #onBindViewHolder(ViewHolder, int, List)}. Since it will be re-used to display
+ * different items in the data set, it is a good idea to cache references to sub views of
+ * the View to avoid unnecessary {@link View#findViewById(int)} calls.
*
* @param parent The ViewGroup into which the new View will be added after it is bound to
* an adapter position.
@@ -5095,23 +5202,59 @@
public abstract VH onCreateViewHolder(ViewGroup parent, int viewType);
/**
+ * Called by RecyclerView to display the data at the specified position. This method should
+ * update the contents of the {@link ViewHolder#itemView} to reflect the item at the given
+ * position.
+ * <p>
+ * Note that unlike {@link android.widget.ListView}, RecyclerView will not call this method
+ * again if the position of the item changes in the data set unless the item itself is
+ * invalidated or the new position cannot be determined. For this reason, you should only
+ * use the <code>position</code> parameter while acquiring the related data item inside
+ * this method and should not keep a copy of it. If you need the position of an item later
+ * on (e.g. in a click listener), use {@link ViewHolder#getAdapterPosition()} which will
+ * have the updated adapter position.
+ *
+ * Override {@link #onBindViewHolder(ViewHolder, int, List)} instead if Adapter can
+ * handle effcient partial bind.
+ *
+ * @param holder The ViewHolder which should be updated to represent the contents of the
+ * item at the given position in the data set.
+ * @param position The position of the item within the adapter's data set.
+ */
+ public abstract void onBindViewHolder(VH holder, int position);
+
+ /**
* Called by RecyclerView to display the data at the specified position. This method
* should update the contents of the {@link ViewHolder#itemView} to reflect the item at
* the given position.
* <p>
- * Note that unlike {@link android.widget.ListView}, RecyclerView will not call this
- * method again if the position of the item changes in the data set unless the item itself
- * is invalidated or the new position cannot be determined. For this reason, you should only
- * use the <code>position</code> parameter while acquiring the related data item inside this
- * method and should not keep a copy of it. If you need the position of an item later on
- * (e.g. in a click listener), use {@link ViewHolder#getAdapterPosition()} which will have
- * the updated adapter position.
+ * Note that unlike {@link android.widget.ListView}, RecyclerView will not call this method
+ * again if the position of the item changes in the data set unless the item itself is
+ * invalidated or the new position cannot be determined. For this reason, you should only
+ * use the <code>position</code> parameter while acquiring the related data item inside
+ * this method and should not keep a copy of it. If you need the position of an item later
+ * on (e.g. in a click listener), use {@link ViewHolder#getAdapterPosition()} which will
+ * have the updated adapter position.
+ * <p>
+ * Partial bind vs full bind:
+ * <p>
+ * The payloads parameter is a merge list from {@link #notifyItemChanged(int, Object)} or
+ * {@link #notifyItemRangeChanged(int, int, Object)}. If the payloads list is not empty,
+ * the ViewHolder is currently bound to old data and Adapter may run an efficient partial
+ * update using the payload info. If the payload is empty, Adapter must run a full bind.
+ * Adapter should not assume that the payload passed in notify methods will be received by
+ * onBindViewHolder(). For example when the view is not attached to the screen, the
+ * payload in notifyItemChange() will be simply dropped.
*
* @param holder The ViewHolder which should be updated to represent the contents of the
* item at the given position in the data set.
* @param position The position of the item within the adapter's data set.
+ * @param payloads A non-null list of merged payloads. Can be empty list if requires full
+ * update.
*/
- public abstract void onBindViewHolder(VH holder, int position);
+ public void onBindViewHolder(VH holder, int position, List<Object> payloads) {
+ onBindViewHolder(holder, position);
+ }
/**
* This method calls {@link #onCreateViewHolder(ViewGroup, int)} to create a new
@@ -5143,7 +5286,8 @@
ViewHolder.FLAG_BOUND | ViewHolder.FLAG_UPDATE | ViewHolder.FLAG_INVALID
| ViewHolder.FLAG_ADAPTER_POSITION_UNKNOWN);
TraceCompat.beginSection(TRACE_BIND_VIEW_TAG);
- onBindViewHolder(holder, position);
+ onBindViewHolder(holder, position, holder.getUnmodifiedPayloads());
+ holder.clearPayload();
TraceCompat.endSection();
}
@@ -5390,6 +5534,7 @@
/**
* Notify any registered observers that the item at <code>position</code> has changed.
+ * Equivalent to calling <code>notifyItemChanged(position, null);</code>.
*
* <p>This is an item change event, not a structural change event. It indicates that any
* reflection of the data at <code>position</code> is out of date and should be updated.
@@ -5404,8 +5549,37 @@
}
/**
+ * Notify any registered observers that the item at <code>position</code> has changed with an
+ * optional payload object.
+ *
+ * <p>This is an item change event, not a structural change event. It indicates that any
+ * reflection of the data at <code>position</code> is out of date and should be updated.
+ * The item at <code>position</code> retains the same identity.
+ * </p>
+ *
+ * <p>
+ * Client can optionally pass a payload for partial change. These payloads will be merged
+ * and may be passed to adapter's {@link #onBindViewHolder(ViewHolder, int, List)} if the
+ * item is already represented by a ViewHolder and it will be rebound to the same
+ * ViewHolder. A notifyItemRangeChanged() with null payload will clear all existing
+ * payloads on that item and prevent future payload until
+ * {@link #onBindViewHolder(ViewHolder, int, List)} is called. Adapter should not assume
+ * that the payload will always be passed to onBindViewHolder(), e.g. when the view is not
+ * attached, the payload will be simply dropped.
+ *
+ * @param position Position of the item that has changed
+ * @param payload Optional parameter, use null to identify a "full" update
+ *
+ * @see #notifyItemRangeChanged(int, int)
+ */
+ public final void notifyItemChanged(int position, Object payload) {
+ mObservable.notifyItemRangeChanged(position, 1, payload);
+ }
+
+ /**
* Notify any registered observers that the <code>itemCount</code> items starting at
* position <code>positionStart</code> have changed.
+ * Equivalent to calling <code>notifyItemRangeChanged(position, itemCount, null);</code>.
*
* <p>This is an item change event, not a structural change event. It indicates that
* any reflection of the data in the given position range is out of date and should
@@ -5421,6 +5595,36 @@
}
/**
+ * Notify any registered observers that the <code>itemCount</code> items starting at
+ * position<code>positionStart</code> have changed. An optional payload can be
+ * passed to each changed item.
+ *
+ * <p>This is an item change event, not a structural change event. It indicates that any
+ * reflection of the data in the given position range is out of date and should be updated.
+ * The items in the given range retain the same identity.
+ * </p>
+ *
+ * <p>
+ * Client can optionally pass a payload for partial change. These payloads will be merged
+ * and may be passed to adapter's {@link #onBindViewHolder(ViewHolder, int, List)} if the
+ * item is already represented by a ViewHolder and it will be rebound to the same
+ * ViewHolder. A notifyItemRangeChanged() with null payload will clear all existing
+ * payloads on that item and prevent future payload until
+ * {@link #onBindViewHolder(ViewHolder, int, List)} is called. Adapter should not assume
+ * that the payload will always be passed to onBindViewHolder(), e.g. when the view is not
+ * attached, the payload will be simply dropped.
+ *
+ * @param positionStart Position of the first item that has changed
+ * @param itemCount Number of items that have changed
+ * @param payload Optional parameter, use null to identify a "full" update
+ *
+ * @see #notifyItemChanged(int)
+ */
+ public final void notifyItemRangeChanged(int positionStart, int itemCount, Object payload) {
+ mObservable.notifyItemRangeChanged(positionStart, itemCount, payload);
+ }
+
+ /**
* Notify any registered observers that the item reflected at <code>position</code>
* has been newly inserted. The item previously at <code>position</code> is now at
* position <code>position + 1</code>.
@@ -7154,6 +7358,8 @@
/**
* Called when items have been changed in the adapter.
+ * To receive payload, override {@link #onItemsUpdated(RecyclerView, int, int, Object)}
+ * instead, then this callback will not be invoked.
*
* @param recyclerView
* @param positionStart
@@ -7163,6 +7369,20 @@
}
/**
+ * Called when items have been changed in the adapter and with optional payload.
+ * Default implementation calls {@link #onItemsUpdated(RecyclerView, int, int)}.
+ *
+ * @param recyclerView
+ * @param positionStart
+ * @param itemCount
+ * @param payload
+ */
+ public void onItemsUpdated(RecyclerView recyclerView, int positionStart, int itemCount,
+ Object payload) {
+ onItemsUpdated(recyclerView, positionStart, itemCount);
+ }
+
+ /**
* Called when an item is moved withing the adapter.
* <p>
* Note that, an item may also change position in response to another ADD/REMOVE/MOVE
@@ -8020,8 +8240,18 @@
*/
static final int FLAG_ADAPTER_POSITION_UNKNOWN = 1 << 9;
+ /**
+ * Set when a addChangePayload(null) is called
+ */
+ static final int FLAG_ADAPTER_FULLUPDATE = 1 << 10;
+
private int mFlags;
+ private static final List<Object> FULLUPDATE_PAYLOADS = Collections.EMPTY_LIST;
+
+ List<Object> mPayloads = null;
+ List<Object> mUnmodifiedPayloads = null;
+
private int mIsRecyclableCount = 0;
// If non-null, view is currently considered scrap and may be reused for other data by the
@@ -8246,6 +8476,43 @@
mFlags |= flags;
}
+ void addChangePayload(Object payload) {
+ if (payload == null) {
+ addFlags(FLAG_ADAPTER_FULLUPDATE);
+ } else if ((mFlags & FLAG_ADAPTER_FULLUPDATE) == 0) {
+ createPayloadsIfNeeded();
+ mPayloads.add(payload);
+ }
+ }
+
+ private void createPayloadsIfNeeded() {
+ if (mPayloads == null) {
+ mPayloads = new ArrayList<Object>();
+ mUnmodifiedPayloads = Collections.unmodifiableList(mPayloads);
+ }
+ }
+
+ void clearPayload() {
+ if (mPayloads != null) {
+ mPayloads.clear();
+ }
+ mFlags = mFlags & ~FLAG_ADAPTER_FULLUPDATE;
+ }
+
+ List<Object> getUnmodifiedPayloads() {
+ if ((mFlags & FLAG_ADAPTER_FULLUPDATE) == 0) {
+ if (mPayloads == null || mPayloads.size() == 0) {
+ // Initial state, no update being called.
+ return FULLUPDATE_PAYLOADS;
+ }
+ // there are none-null payloads
+ return mUnmodifiedPayloads;
+ } else {
+ // a full update has been called.
+ return FULLUPDATE_PAYLOADS;
+ }
+ }
+
void resetInternal() {
mFlags = 0;
mPosition = NO_POSITION;
@@ -8255,6 +8522,7 @@
mIsRecyclableCount = 0;
mShadowedHolder = null;
mShadowingHolder = null;
+ clearPayload();
}
@Override
@@ -8514,6 +8782,12 @@
// do nothing
}
+ public void onItemRangeChanged(int positionStart, int itemCount, Object payload) {
+ // fallback to onItemRangeChanged(positionStart, itemCount) if app
+ // does not override this method.
+ onItemRangeChanged(positionStart, itemCount);
+ }
+
public void onItemRangeInserted(int positionStart, int itemCount) {
// do nothing
}
@@ -8957,12 +9231,16 @@
}
public void notifyItemRangeChanged(int positionStart, int itemCount) {
+ notifyItemRangeChanged(positionStart, itemCount, null);
+ }
+
+ public void notifyItemRangeChanged(int positionStart, int itemCount, Object payload) {
// since onItemRangeChanged() is implemented by the app, it could do anything, including
// removing itself from {@link mObservers} - and that could cause problems if
// an iterator is used on the ArrayList {@link mObservers}.
// to avoid such problems, just march thru the list in the reverse order.
for (int i = mObservers.size() - 1; i >= 0; i--) {
- mObservers.get(i).onItemRangeChanged(positionStart, itemCount);
+ mObservers.get(i).onItemRangeChanged(positionStart, itemCount, payload);
}
}
diff --git a/v7/recyclerview/src/android/support/v7/widget/StaggeredGridLayoutManager.java b/v7/recyclerview/src/android/support/v7/widget/StaggeredGridLayoutManager.java
index 76114c4..322fe34 100644
--- a/v7/recyclerview/src/android/support/v7/widget/StaggeredGridLayoutManager.java
+++ b/v7/recyclerview/src/android/support/v7/widget/StaggeredGridLayoutManager.java
@@ -1344,7 +1344,8 @@
}
@Override
- public void onItemsUpdated(RecyclerView recyclerView, int positionStart, int itemCount) {
+ public void onItemsUpdated(RecyclerView recyclerView, int positionStart, int itemCount,
+ Object payload) {
handleUpdate(positionStart, itemCount, AdapterHelper.UpdateOp.UPDATE);
}
diff --git a/v7/recyclerview/tests/src/android/support/v7/widget/BaseRecyclerViewInstrumentationTest.java b/v7/recyclerview/tests/src/android/support/v7/widget/BaseRecyclerViewInstrumentationTest.java
index 0775e56..2659ef2 100644
--- a/v7/recyclerview/tests/src/android/support/v7/widget/BaseRecyclerViewInstrumentationTest.java
+++ b/v7/recyclerview/tests/src/android/support/v7/widget/BaseRecyclerViewInstrumentationTest.java
@@ -355,6 +355,15 @@
getInstrumentation().waitForIdleSync();
}
+ void freezeLayout(final boolean freeze) throws Throwable {
+ runTestOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mRecyclerView.setLayoutFrozen(freeze);
+ }
+ });
+ }
+
class TestViewHolder extends RecyclerView.ViewHolder {
Item mBoundItem;
diff --git a/v7/recyclerview/tests/src/android/support/v7/widget/GridLayoutManagerTest.java b/v7/recyclerview/tests/src/android/support/v7/widget/GridLayoutManagerTest.java
index d984c19..ca7b0a4 100644
--- a/v7/recyclerview/tests/src/android/support/v7/widget/GridLayoutManagerTest.java
+++ b/v7/recyclerview/tests/src/android/support/v7/widget/GridLayoutManagerTest.java
@@ -17,6 +17,7 @@
package android.support.v7.widget;
import android.content.Context;
+import android.graphics.Rect;
import android.os.Debug;
import android.support.v4.view.AccessibilityDelegateCompat;
import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat;
@@ -144,29 +145,61 @@
}
public void customSizeInScrollDirectionTest(final Config config) throws Throwable {
+ Boolean[] options = new Boolean[]{true, false};
+ for (boolean addMargins : options) {
+ for (boolean addDecorOffsets : options) {
+ customSizeInScrollDirectionTest(config, addDecorOffsets, addMargins);
+ }
+ }
+ }
+
+ public void customSizeInScrollDirectionTest(final Config config, boolean addDecorOffsets,
+ boolean addMarigns) throws Throwable {
+ final int decorOffset = addDecorOffsets ? 7 : 0;
+ final int margin = addMarigns ? 11 : 0;
final int[] sizePerPosition = new int[]{3, 5, 9, 21, 3, 5, 9, 6, 9, 1};
final int[] expectedSizePerPosition = new int[]{9, 9, 9, 21, 3, 5, 9, 9, 9, 1};
+
final GridTestAdapter testAdapter = new GridTestAdapter(10) {
@Override
public void onBindViewHolder(TestViewHolder holder,
int position) {
super.onBindViewHolder(holder, position);
- ViewGroup.LayoutParams layoutParams = holder.itemView.getLayoutParams();
+ ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams)
+ holder.itemView.getLayoutParams();
if (layoutParams == null) {
- layoutParams = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
+ layoutParams = new ViewGroup.MarginLayoutParams(
+ ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
holder.itemView.setLayoutParams(layoutParams);
}
final int size = sizePerPosition[position];
if (config.mOrientation == HORIZONTAL) {
layoutParams.width = size;
+ layoutParams.leftMargin = margin;
+ layoutParams.rightMargin = margin;
} else {
layoutParams.height = size;
+ layoutParams.topMargin = margin;
+ layoutParams.bottomMargin = margin;
}
}
};
testAdapter.setFullSpan(3, 5);
final RecyclerView rv = setupBasic(config, testAdapter);
+ if (addDecorOffsets) {
+ rv.addItemDecoration(new RecyclerView.ItemDecoration() {
+ @Override
+ public void getItemOffsets(Rect outRect, View view, RecyclerView parent,
+ RecyclerView.State state) {
+ if (config.mOrientation == HORIZONTAL) {
+ outRect.set(decorOffset, 0, decorOffset, 0);
+ } else {
+ outRect.set(0, decorOffset, 0, decorOffset);
+ }
+ }
+ });
+ }
waitForFirstLayout(rv);
assertTrue("[test sanity] some views should be laid out", mRecyclerView.getChildCount() > 0);
diff --git a/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewAnimationsTest.java b/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewAnimationsTest.java
index 3eda5ae..1beb281 100644
--- a/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewAnimationsTest.java
+++ b/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewAnimationsTest.java
@@ -382,6 +382,112 @@
mLayoutManager.waitForLayout(2);
}
+ private static boolean listEquals(List list1, List list2) {
+ if (list1.size() != list2.size()) {
+ return false;
+ }
+ for (int i= 0; i < list1.size(); i++) {
+ if (!list1.get(i).equals(list2.get(i))) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private void testChangeWithPayload(final boolean supportsChangeAnim,
+ Object[][] notifyPayloads, Object[][] expectedPayloadsInOnBind)
+ throws Throwable {
+ final List<Object> expectedPayloads = new ArrayList<Object>();
+ final int changedIndex = 3;
+ TestAdapter testAdapter = new TestAdapter(10) {
+ @Override
+ public int getItemViewType(int position) {
+ return 1;
+ }
+
+ @Override
+ public TestViewHolder onCreateViewHolder(ViewGroup parent,
+ int viewType) {
+ TestViewHolder vh = super.onCreateViewHolder(parent, viewType);
+ if (DEBUG) {
+ Log.d(TAG, " onCreateVH" + vh.toString());
+ }
+ return vh;
+ }
+
+ @Override
+ public void onBindViewHolder(TestViewHolder holder,
+ int position, List<Object> payloads) {
+ super.onBindViewHolder(holder, position);
+ if (DEBUG) {
+ Log.d(TAG, " onBind to " + position + "" + holder.toString());
+ }
+ assertTrue(listEquals(payloads, expectedPayloads));
+ }
+ };
+ testAdapter.setHasStableIds(false);
+ setupBasic(testAdapter.getItemCount(), 0, 10, testAdapter);
+ mRecyclerView.getItemAnimator().setSupportsChangeAnimations(supportsChangeAnim);
+
+ int numTests = notifyPayloads.length;
+ for (int i= 0; i < numTests; i++) {
+ mLayoutManager.expectLayouts(1);
+ expectedPayloads.clear();
+ for (int j = 0; j < expectedPayloadsInOnBind[i].length; j++) {
+ expectedPayloads.add(expectedPayloadsInOnBind[i][j]);
+ }
+ final Object[] payloadsToSend = notifyPayloads[i];
+ runTestOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ for (int j = 0; j < payloadsToSend.length; j++) {
+ mTestAdapter.notifyItemChanged(changedIndex, payloadsToSend[j]);
+ }
+ }
+ });
+ mLayoutManager.waitForLayout(2);
+ }
+ }
+
+ public void testCrossFadingChangeAnimationWithPayload() throws Throwable {
+ // for crossfading change animation, will receive EMPTY payload in onBindViewHolder
+ testChangeWithPayload(true,
+ new Object[][]{
+ new Object[]{"abc"},
+ new Object[]{"abc", null, "cdf"},
+ new Object[]{"abc", null},
+ new Object[]{null, "abc"},
+ new Object[]{"abc", "cdf"}
+ },
+ new Object[][]{
+ new Object[0],
+ new Object[0],
+ new Object[0],
+ new Object[0],
+ new Object[0]
+ });
+ }
+
+ public void testNoChangeAnimationWithPayload() throws Throwable {
+ // for Change Animation disabled, payload should match the payloads unless
+ // null payload is fired.
+ testChangeWithPayload(false,
+ new Object[][]{
+ new Object[]{"abc"},
+ new Object[]{"abc", null, "cdf"},
+ new Object[]{"abc", null},
+ new Object[]{null, "abc"},
+ new Object[]{"abc", "cdf"}
+ },
+ new Object[][]{
+ new Object[]{"abc"},
+ new Object[0],
+ new Object[0],
+ new Object[0],
+ new Object[]{"abc", "cdf"}
+ });
+ }
+
public void testRecycleDuringAnimations() throws Throwable {
final AtomicInteger childCount = new AtomicInteger(0);
final TestAdapter adapter = new TestAdapter(1000) {
@@ -759,6 +865,25 @@
mLayoutManager.waitForLayout(2);
}
+ public void testAdapterChangeFrozen() throws Throwable {
+ setupBasic(10, 1, 7);
+ assertTrue(mRecyclerView.getChildCount() == 7);
+
+ mLayoutManager.expectLayouts(2);
+ mLayoutManager.mOnLayoutCallbacks.mLayoutMin = 1;
+ mLayoutManager.mOnLayoutCallbacks.mLayoutItemCount = 8;
+ freezeLayout(true);
+ mTestAdapter.addAndNotify(0, 1);
+
+ mLayoutManager.assertNoLayout("RV should keep old child during frozen", 2);
+ assertEquals(7, mRecyclerView.getChildCount());
+
+ freezeLayout(false);
+ mLayoutManager.waitForLayout(2);
+ assertEquals("RV should get updated after waken from frozen",
+ 8, mRecyclerView.getChildCount());
+ }
+
public TestRecyclerView getTestRecyclerView() {
return (TestRecyclerView) mRecyclerView;
}
diff --git a/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewBasicTest.java b/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewBasicTest.java
index 4e327ef..06dcbb0 100644
--- a/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewBasicTest.java
+++ b/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewBasicTest.java
@@ -64,6 +64,11 @@
0, layoutManager.mLayoutCount);
}
+ public void setScrollContainer() {
+ assertEquals("RecyclerView should announce itself as scroll container for the IME to "
+ + "handle it properly", true, mRecyclerView.isScrollContainer());
+ }
+
public void testLayoutWithoutLayoutManager() throws InterruptedException {
mRecyclerView.setAdapter(new MockAdapter(20));
measure();
diff --git a/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewLayoutTest.java b/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewLayoutTest.java
index 519520a..366758a 100644
--- a/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewLayoutTest.java
+++ b/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewLayoutTest.java
@@ -23,15 +23,16 @@
import org.junit.runner.RunWith;
import android.support.test.InstrumentationRegistry;
-
import android.graphics.Color;
import android.graphics.PointF;
import android.graphics.Rect;
import android.os.SystemClock;
import android.support.v4.view.ViewCompat;
+import android.support.v7.widget.RecyclerView;
import android.test.TouchUtils;
import android.util.Log;
import android.view.Gravity;
+import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewConfiguration;
@@ -53,7 +54,6 @@
import static android.support.v7.widget.RecyclerView.SCROLL_STATE_DRAGGING;
import static android.support.v7.widget.RecyclerView.SCROLL_STATE_SETTLING;
import static android.support.v7.widget.RecyclerView.getChildViewHolderInt;
-
import android.support.test.runner.AndroidJUnit4;
@RunWith(AndroidJUnit4.class)
@@ -84,6 +84,200 @@
}
@Test
+ public void testFlingFrozen() throws Throwable {
+ testScrollFrozen(true);
+ }
+
+ @Test
+ public void testDragFrozen() throws Throwable {
+ testScrollFrozen(false);
+ }
+
+ private void testScrollFrozen(boolean fling) throws Throwable {
+ RecyclerView recyclerView = new RecyclerView(getActivity());
+
+ final int horizontalScrollCount = 3;
+ final int verticalScrollCount = 3;
+ final int horizontalVelocity = 1000;
+ final int verticalVelocity = 1000;
+ final AtomicInteger horizontalCounter = new AtomicInteger(horizontalScrollCount);
+ final AtomicInteger verticalCounter = new AtomicInteger(verticalScrollCount);
+ TestLayoutManager tlm = new TestLayoutManager() {
+ @Override
+ public boolean canScrollHorizontally() {
+ return true;
+ }
+
+ @Override
+ public boolean canScrollVertically() {
+ return true;
+ }
+
+ @Override
+ public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
+ layoutRange(recycler, 0, 10);
+ layoutLatch.countDown();
+ }
+
+ @Override
+ public int scrollVerticallyBy(int dy, RecyclerView.Recycler recycler,
+ RecyclerView.State state) {
+ if (verticalCounter.get() > 0) {
+ verticalCounter.decrementAndGet();
+ return dy;
+ }
+ return 0;
+ }
+
+ @Override
+ public int scrollHorizontallyBy(int dx, RecyclerView.Recycler recycler,
+ RecyclerView.State state) {
+ if (horizontalCounter.get() > 0) {
+ horizontalCounter.decrementAndGet();
+ return dx;
+ }
+ return 0;
+ }
+ };
+ TestAdapter adapter = new TestAdapter(100);
+ recyclerView.setAdapter(adapter);
+ recyclerView.setLayoutManager(tlm);
+ tlm.expectLayouts(1);
+ setRecyclerView(recyclerView);
+ tlm.waitForLayout(2);
+
+ freezeLayout(true);
+
+ if (fling) {
+ assertFalse("fling should be blocked", fling(horizontalVelocity, verticalVelocity));
+ } else { // drag
+ TouchUtils.dragViewTo(this, recyclerView,
+ Gravity.LEFT | Gravity.TOP,
+ mRecyclerView.getWidth() / 2, mRecyclerView.getHeight() / 2);
+ }
+ assertEquals("rv's horizontal scroll cb must not run", horizontalScrollCount,
+ horizontalCounter.get());
+ assertEquals("rv's vertical scroll cb must not run", verticalScrollCount,
+ verticalCounter.get());
+
+ freezeLayout(false);
+
+ if (fling) {
+ assertTrue("fling should be started", fling(horizontalVelocity, verticalVelocity));
+ } else { // drag
+ TouchUtils.dragViewTo(this, recyclerView,
+ Gravity.LEFT | Gravity.TOP,
+ mRecyclerView.getWidth() / 2, mRecyclerView.getHeight() / 2);
+ }
+ assertEquals("rv's horizontal scroll cb must finishes", 0, horizontalCounter.get());
+ assertEquals("rv's vertical scroll cb must finishes", 0, verticalCounter.get());
+ }
+
+ @Test
+ public void testFocusSearchFailFrozen() throws Throwable {
+ RecyclerView recyclerView = new RecyclerView(getActivity());
+
+ final AtomicInteger focusSearchCalled = new AtomicInteger(0);
+ TestLayoutManager tlm = new TestLayoutManager() {
+ @Override
+ public boolean canScrollHorizontally() {
+ return true;
+ }
+
+ @Override
+ public boolean canScrollVertically() {
+ return true;
+ }
+
+ @Override
+ public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
+ layoutRange(recycler, 0, 10);
+ layoutLatch.countDown();
+ }
+
+ @Override
+ public View onFocusSearchFailed(View focused, int direction, RecyclerView.Recycler recycler,
+ RecyclerView.State state) {
+ focusSearchCalled.addAndGet(1);
+ return null;
+ }
+ };
+ TestAdapter adapter = new TestAdapter(100);
+ recyclerView.setAdapter(adapter);
+ recyclerView.setLayoutManager(tlm);
+ tlm.expectLayouts(1);
+ setRecyclerView(recyclerView);
+ tlm.waitForLayout(2);
+
+ final View c = recyclerView.getChildAt(recyclerView.getChildCount() - 1);
+ runTestOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ c.requestFocus();
+ }
+ });
+ assertTrue(c.hasFocus());
+
+ freezeLayout(true);
+ sendKeys(KeyEvent.KEYCODE_DPAD_DOWN);
+ assertEquals("onFocusSearchFailed should not be called when layout is frozen",
+ 0, focusSearchCalled.get());
+
+ freezeLayout(false);
+ sendKeys(KeyEvent.KEYCODE_DPAD_DOWN);
+ assertEquals(1, focusSearchCalled.get());
+ }
+
+ @Test
+ public void testFrozenAndChangeAdapter() throws Throwable {
+ RecyclerView recyclerView = new RecyclerView(getActivity());
+
+ final AtomicInteger focusSearchCalled = new AtomicInteger(0);
+ TestLayoutManager tlm = new TestLayoutManager() {
+ @Override
+ public boolean canScrollHorizontally() {
+ return true;
+ }
+
+ @Override
+ public boolean canScrollVertically() {
+ return true;
+ }
+
+ @Override
+ public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
+ layoutRange(recycler, 0, 10);
+ layoutLatch.countDown();
+ }
+
+ @Override
+ public View onFocusSearchFailed(View focused, int direction, RecyclerView.Recycler recycler,
+ RecyclerView.State state) {
+ focusSearchCalled.addAndGet(1);
+ return null;
+ }
+ };
+ TestAdapter adapter = new TestAdapter(100);
+ recyclerView.setAdapter(adapter);
+ recyclerView.setLayoutManager(tlm);
+ tlm.expectLayouts(1);
+ setRecyclerView(recyclerView);
+ tlm.waitForLayout(2);
+
+ freezeLayout(true);
+ TestAdapter adapter2 = new TestAdapter(1000);
+ setAdapter(adapter2);
+ assertFalse(recyclerView.isLayoutFrozen());
+ assertSame(adapter2, recyclerView.getAdapter());
+
+ freezeLayout(true);
+ TestAdapter adapter3 = new TestAdapter(1000);
+ swapAdapter(adapter3, true);
+ assertFalse(recyclerView.isLayoutFrozen());
+ assertSame(adapter3, recyclerView.getAdapter());
+ }
+
+ @Test
public void testScrollToPositionCallback() throws Throwable {
RecyclerView recyclerView = new RecyclerView(getActivity());
TestLayoutManager tlm = new TestLayoutManager() {
@@ -135,6 +329,10 @@
assertEquals("VTO on scroll should be called for initialization", 1,
viewGroupCounter.get());
tlm.expectLayouts(1);
+ freezeLayout(true);
+ scrollToPosition(3);
+ tlm.assertNoLayout("scrollToPosition should be ignored", 2);
+ freezeLayout(false);
scrollToPosition(3);
tlm.waitForLayout(2);
assertEquals("RV on scroll should be called", 2, rvCounter.get());
@@ -291,6 +489,24 @@
scrollInOtherOrientationTest(FLAG_HORIZONTAL, 0);
}
+ @Test
+ public void testNestedDragHorizontalCallsStopNestedScroll() throws Throwable {
+ TestedFrameLayout tfl = getActivity().mContainer;
+ tfl.setNestedScrollMode(TestedFrameLayout.TEST_NESTED_SCROLL_MODE_CONSUME);
+ tfl.setNestedFlingMode(TestedFrameLayout.TEST_NESTED_SCROLL_MODE_CONSUME);
+ scrollInOtherOrientationTest(FLAG_HORIZONTAL, 0);
+ assertTrue("onStopNestedScroll called", tfl.stopNestedScrollCalled());
+ }
+
+ @Test
+ public void testNestedDragVerticalCallsStopNestedScroll() throws Throwable {
+ TestedFrameLayout tfl = getActivity().mContainer;
+ tfl.setNestedScrollMode(TestedFrameLayout.TEST_NESTED_SCROLL_MODE_CONSUME);
+ tfl.setNestedFlingMode(TestedFrameLayout.TEST_NESTED_SCROLL_MODE_CONSUME);
+ scrollInOtherOrientationTest(FLAG_VERTICAL, 0);
+ assertTrue("onStopNestedScroll called", tfl.stopNestedScrollCalled());
+ }
+
private void scrollInOtherOrientationTest(int flags)
throws Throwable {
scrollInOtherOrientationTest(flags, flags);
@@ -2837,6 +3053,11 @@
tlm.expectLayouts(1);
setRecyclerView(rv);
tlm.waitForLayout(2);
+ freezeLayout(true);
+ smoothScrollToPosition(35);
+ assertEquals("smoothScrollToPosition should be ignored when frozen",
+ -1, receivedSmoothScrollToPosition.get());
+ freezeLayout(false);
smoothScrollToPosition(35);
assertTrue("both scrolls should be called", cbLatch.await(3, TimeUnit.SECONDS));
checkForMainThreadException();
diff --git a/v7/recyclerview/tests/src/android/support/v7/widget/TestedFrameLayout.java b/v7/recyclerview/tests/src/android/support/v7/widget/TestedFrameLayout.java
index 1a9134b..18aeba4 100644
--- a/v7/recyclerview/tests/src/android/support/v7/widget/TestedFrameLayout.java
+++ b/v7/recyclerview/tests/src/android/support/v7/widget/TestedFrameLayout.java
@@ -30,6 +30,7 @@
private int mNestedScrollMode;
private int mNestedFlingMode;
+ private boolean mNestedStopNestedScrollCalled;
public TestedFrameLayout(Context context) {
super(context);
@@ -83,7 +84,11 @@
@Override
public void onStopNestedScroll(View target) {
- resetModes();
+ mNestedStopNestedScrollCalled = true;
+ }
+
+ public boolean stopNestedScrollCalled() {
+ return mNestedStopNestedScrollCalled;
}
public void setNestedScrollMode(int mode) {
@@ -93,8 +98,4 @@
public void setNestedFlingMode(int mode) {
mNestedFlingMode = mode;
}
-
- private void resetModes() {
- mNestedScrollMode = mNestedFlingMode = TEST_NESTED_SCROLL_MODE_IGNORE;
- }
}