Merge "Respect drawer's lock state in drawer toggle." into mnc-ub-dev
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 3444cbf..e7fa99f0 100644
--- a/v17/leanback/src/android/support/v17/leanback/widget/GridLayoutManager.java
+++ b/v17/leanback/src/android/support/v17/leanback/widget/GridLayoutManager.java
@@ -1287,14 +1287,8 @@
} else {
switch (modeSecondary) {
case MeasureSpec.UNSPECIFIED:
- if (mRowSizeSecondaryRequested == 0) {
- if (mOrientation == HORIZONTAL) {
- throw new IllegalStateException("Must specify rowHeight or view height");
- } else {
- throw new IllegalStateException("Must specify columnWidth or view width");
- }
- }
- mFixedRowSizeSecondary = mRowSizeSecondaryRequested;
+ mFixedRowSizeSecondary = mRowSizeSecondaryRequested == 0 ?
+ sizeSecondary - paddingSecondary: mRowSizeSecondaryRequested;
mNumRows = mNumRowsRequested == 0 ? 1 : mNumRowsRequested;
measuredSizeSecondary = mFixedRowSizeSecondary * mNumRows + mMarginSecondary
* (mNumRows - 1) + paddingSecondary;
diff --git a/v4/api/current.txt b/v4/api/current.txt
index 74ed0f0..1d17a08 100644
--- a/v4/api/current.txt
+++ b/v4/api/current.txt
@@ -3124,6 +3124,7 @@
method public void setStatusBarBackgroundColor(int);
field public static final int LOCK_MODE_LOCKED_CLOSED = 1; // 0x1
field public static final int LOCK_MODE_LOCKED_OPEN = 2; // 0x2
+ field public static final int LOCK_MODE_UNDEFINED = 3; // 0x3
field public static final int LOCK_MODE_UNLOCKED = 0; // 0x0
field public static final int STATE_DRAGGING = 1; // 0x1
field public static final int STATE_IDLE = 0; // 0x0
diff --git a/v4/api21/android/support/v4/graphics/drawable/DrawableCompatLollipop.java b/v4/api21/android/support/v4/graphics/drawable/DrawableCompatLollipop.java
index 93990b4..2b1873f 100644
--- a/v4/api21/android/support/v4/graphics/drawable/DrawableCompatLollipop.java
+++ b/v4/api21/android/support/v4/graphics/drawable/DrawableCompatLollipop.java
@@ -37,46 +37,25 @@
}
public static void setTint(Drawable drawable, int tint) {
- if (drawable instanceof DrawableWrapperLollipop) {
- // GradientDrawable on Lollipop does not support tinting, so we'll use our compatible
- // functionality instead
- DrawableCompatBase.setTint(drawable, tint);
- } else {
- // Else, we'll use the framework API
- drawable.setTint(tint);
- }
+ drawable.setTint(tint);
}
public static void setTintList(Drawable drawable, ColorStateList tint) {
- if (drawable instanceof DrawableWrapperLollipop) {
- // GradientDrawable on Lollipop does not support tinting, so we'll use our compatible
- // functionality instead
- DrawableCompatBase.setTintList(drawable, tint);
- } else {
- // Else, we'll use the framework API
- drawable.setTintList(tint);
- }
+ drawable.setTintList(tint);
}
public static void setTintMode(Drawable drawable, PorterDuff.Mode tintMode) {
- if (drawable instanceof DrawableWrapperLollipop) {
- // GradientDrawable on Lollipop does not support tinting, so we'll use our compatible
- // functionality instead
- DrawableCompatBase.setTintMode(drawable, tintMode);
- } else {
- // Else, we'll use the framework API
- drawable.setTintMode(tintMode);
- }
+ drawable.setTintMode(tintMode);
}
public static Drawable wrapForTinting(Drawable drawable) {
- if (drawable instanceof GradientDrawable || drawable instanceof DrawableContainer) {
- // GradientDrawable on Lollipop does not support tinting, so we'll use our compatible
- // functionality instead. We also do the same for DrawableContainers since they may
- // contain GradientDrawable instances.
- return new DrawableWrapperLollipop(drawable);
- }
- return drawable;
+ return new DrawableWrapperLollipop(drawable, shouldForceCompatTinting(drawable));
}
+ private static boolean shouldForceCompatTinting(Drawable drawable) {
+ // GradientDrawable on Lollipop does not support tinting, so we'll use our compatible
+ // functionality instead. We also do the same for DrawableContainers since they may
+ // contain GradientDrawable instances.
+ return drawable instanceof GradientDrawable || drawable instanceof DrawableContainer;
+ }
}
diff --git a/v4/api21/android/support/v4/graphics/drawable/DrawableWrapperLollipop.java b/v4/api21/android/support/v4/graphics/drawable/DrawableWrapperLollipop.java
index 1f15040..9533afd 100644
--- a/v4/api21/android/support/v4/graphics/drawable/DrawableWrapperLollipop.java
+++ b/v4/api21/android/support/v4/graphics/drawable/DrawableWrapperLollipop.java
@@ -16,15 +16,24 @@
package android.support.v4.graphics.drawable;
+import android.content.res.ColorStateList;
import android.content.res.Resources;
import android.graphics.Outline;
+import android.graphics.PorterDuff;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
class DrawableWrapperLollipop extends DrawableWrapperKitKat {
+ private final boolean mUseCompatTinting;
+
DrawableWrapperLollipop(Drawable drawable) {
+ this(drawable, false);
+ }
+
+ DrawableWrapperLollipop(Drawable drawable, boolean useCompatTinting) {
super(drawable);
+ mUseCompatTinting = useCompatTinting;
}
@Override
@@ -56,4 +65,47 @@
public Rect getDirtyBounds() {
return mDrawable.getDirtyBounds();
}
+
+ @Override
+ public void setTintList(ColorStateList tint) {
+ if (mUseCompatTinting) {
+ setCompatTintList(tint);
+ } else {
+ mDrawable.setTintList(tint);
+ }
+ }
+
+ @Override
+ public void setTint(int tintColor) {
+ if (mUseCompatTinting) {
+ setCompatTint(tintColor);
+ } else {
+ mDrawable.setTint(tintColor);
+ }
+ }
+
+ @Override
+ public void setTintMode(PorterDuff.Mode tintMode) {
+ if (mUseCompatTinting) {
+ setCompatTintMode(tintMode);
+ } else {
+ mDrawable.setTintMode(tintMode);
+ }
+ }
+
+ @Override
+ public boolean setState(int[] stateSet) {
+ if (super.setState(stateSet)) {
+ // Manually invalidate because the framework doesn't currently force an invalidation
+ // on a state change
+ invalidateSelf();
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ protected boolean isCompatTintEnabled() {
+ return mUseCompatTinting;
+ }
}
diff --git a/v4/api22/android/support/v4/graphics/drawable/DrawableCompatApi22.java b/v4/api22/android/support/v4/graphics/drawable/DrawableCompatApi22.java
index bfd2bea..50f2657 100644
--- a/v4/api22/android/support/v4/graphics/drawable/DrawableCompatApi22.java
+++ b/v4/api22/android/support/v4/graphics/drawable/DrawableCompatApi22.java
@@ -24,8 +24,8 @@
class DrawableCompatApi22 {
public static Drawable wrapForTinting(Drawable drawable) {
- // We don't need to wrap anything in Lollipop-MR1
- return drawable;
+ // We need to wrap to force an invalidation on any state change
+ return new DrawableWrapperLollipop(drawable);
}
}
diff --git a/v4/donut/android/support/v4/graphics/drawable/DrawableCompatBase.java b/v4/donut/android/support/v4/graphics/drawable/DrawableCompatBase.java
index 4809618..fe0163d 100644
--- a/v4/donut/android/support/v4/graphics/drawable/DrawableCompatBase.java
+++ b/v4/donut/android/support/v4/graphics/drawable/DrawableCompatBase.java
@@ -27,19 +27,19 @@
public static void setTint(Drawable drawable, int tint) {
if (drawable instanceof DrawableWrapper) {
- ((DrawableWrapper) drawable).setTint(tint);
+ ((DrawableWrapper) drawable).setCompatTint(tint);
}
}
public static void setTintList(Drawable drawable, ColorStateList tint) {
if (drawable instanceof DrawableWrapper) {
- ((DrawableWrapper) drawable).setTintList(tint);
+ ((DrawableWrapper) drawable).setCompatTintList(tint);
}
}
public static void setTintMode(Drawable drawable, PorterDuff.Mode tintMode) {
if (drawable instanceof DrawableWrapper) {
- ((DrawableWrapper) drawable).setTintMode(tintMode);
+ ((DrawableWrapper) drawable).setCompatTintMode(tintMode);
}
}
diff --git a/v4/donut/android/support/v4/graphics/drawable/DrawableWrapper.java b/v4/donut/android/support/v4/graphics/drawable/DrawableWrapper.java
index 1073f34..edbe5ad 100644
--- a/v4/donut/android/support/v4/graphics/drawable/DrawableWrapper.java
+++ b/v4/donut/android/support/v4/graphics/drawable/DrawableWrapper.java
@@ -28,11 +28,11 @@
*/
public interface DrawableWrapper {
- void setTint(int tint);
+ void setCompatTint(int tint);
- void setTintList(ColorStateList tint);
+ void setCompatTintList(ColorStateList tint);
- void setTintMode(PorterDuff.Mode tintMode);
+ void setCompatTintMode(PorterDuff.Mode tintMode);
Drawable getWrappedDrawable();
diff --git a/v4/donut/android/support/v4/graphics/drawable/DrawableWrapperDonut.java b/v4/donut/android/support/v4/graphics/drawable/DrawableWrapperDonut.java
index 9293520..36eb41d 100644
--- a/v4/donut/android/support/v4/graphics/drawable/DrawableWrapperDonut.java
+++ b/v4/donut/android/support/v4/graphics/drawable/DrawableWrapperDonut.java
@@ -89,7 +89,8 @@
@Override
public boolean isStateful() {
- return (mTintList != null && mTintList.isStateful()) || mDrawable.isStateful();
+ final ColorStateList tintList = isCompatTintEnabled() ? mTintList : null;
+ return (tintList != null && tintList.isStateful()) || mDrawable.isStateful();
}
@Override
@@ -188,30 +189,38 @@
}
@Override
- public void setTint(int tint) {
- setTintList(ColorStateList.valueOf(tint));
+ public void setCompatTint(int tint) {
+ setCompatTintList(ColorStateList.valueOf(tint));
}
@Override
- public void setTintList(ColorStateList tint) {
- mTintList = tint;
- updateTint(getState());
+ public void setCompatTintList(ColorStateList tint) {
+ if (mTintList != tint) {
+ mTintList = tint;
+ updateTint(getState());
+ }
}
@Override
- public void setTintMode(PorterDuff.Mode tintMode) {
- mTintMode = tintMode;
- updateTint(getState());
+ public void setCompatTintMode(PorterDuff.Mode tintMode) {
+ if (mTintMode != tintMode) {
+ mTintMode = tintMode;
+ updateTint(getState());
+ }
}
private boolean updateTint(int[] state) {
+ if (!isCompatTintEnabled()) {
+ // If compat tinting is not enabled, fail fast
+ return false;
+ }
+
if (mTintList != null && mTintMode != null) {
final int color = mTintList.getColorForState(state, mTintList.getDefaultColor());
- final PorterDuff.Mode mode = mTintMode;
- if (!mColorFilterSet || color != mCurrentColor || mode != mCurrentMode) {
- setColorFilter(color, mode);
+ if (!mColorFilterSet || color != mCurrentColor || mTintMode != mCurrentMode) {
+ setColorFilter(color, mTintMode);
mCurrentColor = color;
- mCurrentMode = mode;
+ mCurrentMode = mTintMode;
mColorFilterSet = true;
return true;
}
@@ -245,4 +254,9 @@
// Invalidate ourselves
invalidateSelf();
}
+
+ protected boolean isCompatTintEnabled() {
+ // It's enabled by default on Donut
+ return true;
+ }
}
diff --git a/v4/java/android/support/v4/media/session/MediaControllerCompat.java b/v4/java/android/support/v4/media/session/MediaControllerCompat.java
index aa523bb..9abade3 100644
--- a/v4/java/android/support/v4/media/session/MediaControllerCompat.java
+++ b/v4/java/android/support/v4/media/session/MediaControllerCompat.java
@@ -557,7 +557,9 @@
}
public void post(int what, Object obj, Bundle data) {
- obtainMessage(what, obj).sendToTarget();
+ Message msg = obtainMessage(what, obj);
+ msg.setData(data);
+ msg.sendToTarget();
}
}
}
diff --git a/v4/java/android/support/v4/media/session/MediaSessionCompat.java b/v4/java/android/support/v4/media/session/MediaSessionCompat.java
index 69a4180..d98b22e 100644
--- a/v4/java/android/support/v4/media/session/MediaSessionCompat.java
+++ b/v4/java/android/support/v4/media/session/MediaSessionCompat.java
@@ -288,8 +288,8 @@
* <p>
* On platforms earlier than
* {@link android.os.Build.VERSION_CODES#LOLLIPOP},
- * {@link #setMediaButtonReceiver(PendingIntent)} must be called before
- * setting this to true.
+ * a media button event receiver should be set via the constructor to
+ * receive media button events.
*
* @param active Whether this session is active or not.
*/
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatDrawableManager.java b/v7/appcompat/src/android/support/v7/widget/AppCompatDrawableManager.java
index ea70a88..eb04b01 100644
--- a/v7/appcompat/src/android/support/v7/widget/AppCompatDrawableManager.java
+++ b/v7/appcompat/src/android/support/v7/widget/AppCompatDrawableManager.java
@@ -621,9 +621,9 @@
drawable.clearColorFilter();
}
- if (Build.VERSION.SDK_INT <= 10) {
- // On Gingerbread, GradientDrawable does not invalidate itself when it's
- // ColorFilter has changed, so we need to force an invalidation
+ if (Build.VERSION.SDK_INT <= 23) {
+ // Pre-v23 there is no guarantee that a state change will invoke an invalidation,
+ // so we force it ourselves
drawable.invalidateSelf();
}
}