Merge "Add preference-v17 to gradle build"
diff --git a/v17/leanback/Android.mk b/v17/leanback/Android.mk
index baf8719..2fcad14 100644
--- a/v17/leanback/Android.mk
+++ b/v17/leanback/Android.mk
@@ -107,13 +107,10 @@
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
LOCAL_MODULE_TAGS := optional
-res.COMMON := $(call intermediates-dir-for,$(LOCAL_MODULE_CLASS),android-support-v17-leanback-res,,COMMON)
-leanback.docs.src_files := $(leanback.docs.src_files) $(call all-java-files-under, ../../../../$(res.COMMON))
-
-intermediates.COMMON := $(call intermediates-dir-for,$(LOCAL_MODULE_CLASS),android-support-v17-leanback,,COMMON)
+gen_res_src_dirs := $(call intermediates-dir-for,JAVA_LIBRARIES,android-support-v17-leanback-res,,COMMON)/src
LOCAL_SRC_FILES := $(leanback.docs.src_files)
-LOCAL_ADDITONAL_JAVA_DIR := $(intermediates.COMMON)/src
+LOCAL_ADDITIONAL_JAVA_DIR := $(gen_res_src_dirs)
LOCAL_SDK_VERSION := 19
LOCAL_IS_HOST_MODULE := false
@@ -164,8 +161,7 @@
# ===========================================================
leanback.docs.src_files :=
leanback.docs.java_libraries :=
-intermediates.COMMON :=
-res.COMMON :=
+gen_res_src_dirs :=
leanback_internal_api_file :=
leanback_stubs_stamp :=
leanback.docs.stubpackages :=
diff --git a/v17/leanback/kitkat/android/support/v17/leanback/widget/BackgroundHelperKitkat.java b/v17/leanback/kitkat/android/support/v17/leanback/widget/BackgroundHelperKitkat.java
new file mode 100644
index 0000000..2b095fa
--- /dev/null
+++ b/v17/leanback/kitkat/android/support/v17/leanback/widget/BackgroundHelperKitkat.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+package android.support.v17.leanback.widget;
+
+import android.graphics.drawable.Drawable;
+import android.view.View;
+
+class BackgroundHelperKitkat {
+
+ public static void setBackgroundPreservingAlpha(View view, Drawable drawable) {
+ if (view.getBackground() != null) {
+ drawable.setAlpha(view.getBackground().getAlpha());
+ }
+ view.setBackground(drawable);
+ }
+}
diff --git a/v17/leanback/src/android/support/v17/leanback/app/BackgroundManager.java b/v17/leanback/src/android/support/v17/leanback/app/BackgroundManager.java
index fbc1dcb..59b0f19 100644
--- a/v17/leanback/src/android/support/v17/leanback/app/BackgroundManager.java
+++ b/v17/leanback/src/android/support/v17/leanback/app/BackgroundManager.java
@@ -34,6 +34,7 @@
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
import android.os.Handler;
+import android.support.v17.leanback.widget.BackgroundHelper;
import android.support.v4.view.animation.FastOutLinearInInterpolator;
import android.util.Log;
import android.view.LayoutInflater;
@@ -250,6 +251,11 @@
}
}
+ // Queried by system transitions
+ public int getAlpha() {
+ return mPaint.getAlpha();
+ }
+
@Override
public Drawable mutate() {
Drawable drawable = super.mutate();
@@ -316,11 +322,6 @@
}
private TranslucentLayerDrawable mLayerDrawable;
- private DrawableWrapper mImageInWrapper;
- private DrawableWrapper mImageOutWrapper;
- private DrawableWrapper mColorWrapper;
- private DrawableWrapper mDimWrapper;
-
private Drawable mDimDrawable;
private ChangeBackgroundRunnable mChangeRunnable;
@@ -333,10 +334,10 @@
}
@Override
public void onAnimationEnd(Animator animation) {
- // mImageInWrapper should be full alpha, but mImageOutWrapper may not be 0 alpha
- if (mImageOutWrapper != null) {
- mImageOutWrapper.setAlpha(0);
- mImageOutWrapper = null;
+ // imageInWrapper should be full alpha, but imageOutWrapper may not be 0 alpha
+ DrawableWrapper imageOutWrapper = getImageOutWrapper();
+ if (imageOutWrapper != null) {
+ imageOutWrapper.setAlpha(0);
}
if (mChangeRunnable != null) {
long delayMs = getRunnableDelay();
@@ -354,10 +355,14 @@
@Override
public void onAnimationUpdate(ValueAnimator animation) {
int fadeInAlpha = (Integer) animation.getAnimatedValue();
- if (mImageInWrapper != null) {
- mImageInWrapper.setAlpha(fadeInAlpha);
- } else if (mImageOutWrapper != null) {
- mImageOutWrapper.setAlpha(255 - fadeInAlpha);
+ DrawableWrapper imageInWrapper = getImageInWrapper();
+ if (imageInWrapper != null) {
+ imageInWrapper.setAlpha(fadeInAlpha);
+ } else {
+ DrawableWrapper imageOutWrapper = getImageOutWrapper();
+ if (imageOutWrapper != null) {
+ imageOutWrapper.setAlpha(255 - fadeInAlpha);
+ }
}
}
};
@@ -366,8 +371,9 @@
new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
- if (mDimWrapper != null) {
- mDimWrapper.setAlpha((Integer) animation.getAnimatedValue());
+ DrawableWrapper dimWrapper = getDimWrapper();
+ if (dimWrapper != null) {
+ dimWrapper.setAlpha((Integer) animation.getAnimatedValue());
}
}
};
@@ -555,6 +561,26 @@
fragment.setBackgroundManager(this);
}
+ private DrawableWrapper getImageInWrapper() {
+ return mLayerDrawable == null ? null :
+ mLayerDrawable.findWrapperById(R.id.background_imagein);
+ }
+
+ private DrawableWrapper getImageOutWrapper() {
+ return mLayerDrawable == null ? null :
+ mLayerDrawable.findWrapperById(R.id.background_imageout);
+ }
+
+ private DrawableWrapper getDimWrapper() {
+ return mLayerDrawable == null ? null :
+ mLayerDrawable.findWrapperById(R.id.background_dim);
+ }
+
+ private DrawableWrapper getColorWrapper() {
+ return mLayerDrawable == null ? null :
+ mLayerDrawable.findWrapperById(R.id.background_color);
+ }
+
/**
* Synchronizes state when the owning Activity is resumed.
*/
@@ -596,13 +622,11 @@
LayerDrawable layerDrawable = (LayerDrawable)
ContextCompat.getDrawable(mContext, R.drawable.lb_background).mutate();
mLayerDrawable = TranslucentLayerDrawable.create(layerDrawable);
- mBgView.setBackground(mLayerDrawable);
+ BackgroundHelper.setBackgroundPreservingAlpha(mBgView, mLayerDrawable);
mLayerDrawable.clearDrawable(R.id.background_imageout, mContext);
mLayerDrawable.updateDrawable(R.id.background_theme, getThemeDrawable());
- mColorWrapper = mLayerDrawable.findWrapperById(R.id.background_color);
-
updateDimWrapper();
}
@@ -612,8 +636,9 @@
}
Drawable dimDrawable = mDimDrawable.getConstantState().newDrawable(
mContext.getResources()).mutate();
- mDimWrapper = mLayerDrawable == null ? null : mLayerDrawable.updateDrawable(
- R.id.background_dim, dimDrawable);
+ if (mLayerDrawable != null) {
+ mLayerDrawable.updateDrawable(R.id.background_dim, dimDrawable);
+ }
}
/**
@@ -704,10 +729,6 @@
mLayerDrawable.clearDrawable(R.id.background_theme, mContext);
mLayerDrawable = null;
}
- mImageInWrapper = null;
- mImageOutWrapper = null;
- mColorWrapper = null;
- mDimWrapper = null;
if (mChangeRunnable != null) {
mHandler.removeCallbacks(mChangeRunnable);
mChangeRunnable = null;
@@ -744,9 +765,13 @@
private void updateImmediate() {
lazyInit();
- mColorWrapper.setColor(mBackgroundColor);
- if (mDimWrapper != null) {
- mDimWrapper.setAlpha(mBackgroundColor == Color.TRANSPARENT ? 0 : DIM_ALPHA_ON_SOLID);
+ DrawableWrapper colorWrapper = getColorWrapper();
+ if (colorWrapper != null) {
+ colorWrapper.setColor(mBackgroundColor);
+ }
+ DrawableWrapper dimWrapper = getDimWrapper();
+ if (dimWrapper != null) {
+ dimWrapper.setAlpha(mBackgroundColor == Color.TRANSPARENT ? 0 : DIM_ALPHA_ON_SOLID);
}
showWallpaper(mBackgroundColor == Color.TRANSPARENT);
@@ -754,10 +779,10 @@
mLayerDrawable.clearDrawable(R.id.background_imagein, mContext);
} else {
if (DEBUG) Log.v(TAG, "Background drawable is available");
- mImageInWrapper = mLayerDrawable.updateDrawable(
+ mLayerDrawable.updateDrawable(
R.id.background_imagein, mBackgroundDrawable);
- if (mDimWrapper != null) {
- mDimWrapper.setAlpha(FULL_ALPHA);
+ if (dimWrapper != null) {
+ dimWrapper.setAlpha(FULL_ALPHA);
}
}
}
@@ -772,8 +797,9 @@
mBackgroundColor = color;
mService.setColor(mBackgroundColor);
- if (mColorWrapper != null) {
- mColorWrapper.setColor(mBackgroundColor);
+ DrawableWrapper colorWrapper = getColorWrapper();
+ if (colorWrapper != null) {
+ colorWrapper.setColor(mBackgroundColor);
}
}
@@ -886,26 +912,28 @@
int dimAlpha = -1;
- if (mImageOutWrapper != null) {
+ if (getImageOutWrapper() != null) {
dimAlpha = mBackgroundColor == Color.TRANSPARENT ? 0 : DIM_ALPHA_ON_SOLID;
}
- if (mImageInWrapper == null && mBackgroundDrawable != null) {
+ DrawableWrapper imageInWrapper = getImageInWrapper();
+ if (imageInWrapper == null && mBackgroundDrawable != null) {
if (DEBUG) Log.v(TAG, "creating new imagein drawable");
- mImageInWrapper = mLayerDrawable.updateDrawable(
+ imageInWrapper = mLayerDrawable.updateDrawable(
R.id.background_imagein, mBackgroundDrawable);
- if (DEBUG) Log.v(TAG, "mImageInWrapper animation starting");
- mImageInWrapper.setAlpha(0);
+ if (DEBUG) Log.v(TAG, "imageInWrapper animation starting");
+ imageInWrapper.setAlpha(0);
dimAlpha = FULL_ALPHA;
}
mAnimator.setDuration(FADE_DURATION);
mAnimator.start();
- if (mDimWrapper != null && dimAlpha >= 0) {
+ DrawableWrapper dimWrapper = getDimWrapper();
+ if (dimWrapper != null && dimAlpha >= 0) {
if (DEBUG) Log.v(TAG, "dimwrapper animation starting to " + dimAlpha);
mDimAnimator.cancel();
- mDimAnimator.setIntValues(mDimWrapper.getAlpha(), dimAlpha);
+ mDimAnimator.setIntValues(dimWrapper.getAlpha(), dimAlpha);
mDimAnimator.setDuration(FADE_DURATION);
mDimAnimator.setInterpolator(
dimAlpha == FULL_ALPHA ? mDecelerateInterpolator : mAccelerateInterpolator);
@@ -972,14 +1000,14 @@
releaseBackgroundBitmap();
- if (mImageInWrapper != null) {
+ DrawableWrapper imageInWrapper = getImageInWrapper();
+ if (imageInWrapper != null) {
if (DEBUG) Log.v(TAG, "moving image in to image out");
// Order is important! Setting a drawable "removes" the
// previous one from the view
mLayerDrawable.clearDrawable(R.id.background_imagein, mContext);
- mImageOutWrapper = mLayerDrawable.updateDrawable(R.id.background_imageout,
- mImageInWrapper.getDrawable());
- mImageInWrapper = null;
+ mLayerDrawable.updateDrawable(R.id.background_imageout,
+ imageInWrapper.getDrawable());
}
mBackgroundDrawable = mDrawable;
diff --git a/v17/leanback/src/android/support/v17/leanback/widget/BackgroundHelper.java b/v17/leanback/src/android/support/v17/leanback/widget/BackgroundHelper.java
new file mode 100644
index 0000000..2df10a8
--- /dev/null
+++ b/v17/leanback/src/android/support/v17/leanback/widget/BackgroundHelper.java
@@ -0,0 +1,65 @@
+/*
+ * 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.v17.leanback.widget;
+
+import android.graphics.drawable.Drawable;
+import android.os.Build;
+import android.support.v17.leanback.widget.BackgroundHelperKitkat;
+import android.view.View;
+
+
+/**
+ * Helper for view backgrounds.
+ * @hide
+ */
+public final class BackgroundHelper {
+
+ final static BackgroundHelperVersionImpl sImpl;
+
+ static interface BackgroundHelperVersionImpl {
+ public void setBackgroundPreservingAlpha(View view, Drawable drawable);
+ }
+
+ private static final class BackgroundHelperStubImpl implements BackgroundHelperVersionImpl {
+ @Override
+ public void setBackgroundPreservingAlpha(View view, Drawable drawable) {
+ // Cannot query drawable alpha
+ view.setBackground(drawable);
+ }
+ }
+
+ private static final class BackgroundHelperKitkatImpl implements BackgroundHelperVersionImpl {
+ @Override
+ public void setBackgroundPreservingAlpha(View view, Drawable drawable) {
+ BackgroundHelperKitkat.setBackgroundPreservingAlpha(view, drawable);
+ }
+ }
+
+ private BackgroundHelper() {
+ }
+
+ static {
+ if (Build.VERSION.SDK_INT >= 19) {
+ sImpl = new BackgroundHelperKitkatImpl();
+ } else {
+ sImpl = new BackgroundHelperStubImpl();
+ }
+ }
+
+ public static void setBackgroundPreservingAlpha(View view, Drawable drawable) {
+ sImpl.setBackgroundPreservingAlpha(view, drawable);
+ }
+}