summaryrefslogtreecommitdiffstats
path: root/src/org/cyanogenmod/theme/chooser/WallpaperCardView.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/org/cyanogenmod/theme/chooser/WallpaperCardView.java')
-rw-r--r--src/org/cyanogenmod/theme/chooser/WallpaperCardView.java160
1 files changed, 160 insertions, 0 deletions
diff --git a/src/org/cyanogenmod/theme/chooser/WallpaperCardView.java b/src/org/cyanogenmod/theme/chooser/WallpaperCardView.java
new file mode 100644
index 0000000..a3ed8ea
--- /dev/null
+++ b/src/org/cyanogenmod/theme/chooser/WallpaperCardView.java
@@ -0,0 +1,160 @@
+/*
+ * Copyright (C) 2016 Cyanogen, Inc.
+ * Copyright (C) 2016 The CyanogenMod 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 org.cyanogenmod.theme.chooser;
+
+import android.animation.Animator;
+import android.animation.AnimatorSet;
+import android.animation.ObjectAnimator;
+import android.animation.ValueAnimator;
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.drawable.Drawable;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewOverlay;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+public class WallpaperCardView extends ComponentCardView {
+ protected ImageView mImage;
+ protected TextView mLabel;
+
+ public WallpaperCardView(Context context) {
+ this(context, null);
+ }
+
+ public WallpaperCardView(Context context, AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public WallpaperCardView(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+
+ TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.WallpaperCardView);
+ String labelText = a.getString(R.styleable.WallpaperCardView_labelText);
+ a.recycle();
+
+ setOrientation(VERTICAL);
+
+ setBackgroundResource(R.drawable.card_bg);
+
+ LayoutInflater inflater = LayoutInflater.from(mContext);
+ FrameLayout frameLayout =
+ (FrameLayout) inflater.inflate(R.layout.wallpaper_card, this, false);
+ addView(frameLayout);
+ mLabel = (TextView) frameLayout.findViewById(R.id.label);
+ mImage = (ImageView) frameLayout.findViewById(R.id.image);
+
+ mLabel.setText(labelText);
+ }
+
+ public void setWallpaper(Drawable drawable) {
+ mImage.setImageDrawable(drawable);
+ View none = findViewById(R.id.none);
+ if (drawable == null) {
+ setBackgroundResource(R.drawable.card_wallpapertoggled_bg);
+ if (none != null) {
+ none.setVisibility(View.VISIBLE);
+ }
+ if (mLabel != null) {
+ mLabel.setBackgroundResource(0);
+ }
+ } else {
+ setBackgroundResource(0);
+
+ if (none != null) {
+ none.setVisibility(View.GONE);
+ }
+ if (mLabel != null) {
+ mLabel.setBackgroundResource(R.drawable.wallpaper_label_bg);
+ }
+ }
+ }
+
+ public void clearWallpaper() {
+ mImage.setImageDrawable(null);
+ setBackgroundResource(R.drawable.card_bg);
+ }
+
+ public Drawable getWallpaperDrawable() {
+ return mImage.getDrawable();
+ }
+
+ @Override
+ public void expand(boolean showLabel) {
+ setEnabled(true);
+ }
+
+ @Override
+ public void collapse() {
+ setEnabled(false);
+ }
+
+ /**
+ * Animates a change in the content of the card
+ * @param v View in card to animate
+ * @param overlay Drawable to animate as a ViewOverlay
+ * @param duration Duration of animation
+ */
+ @Override
+ public void animateContentChange(View v, final Drawable overlay, long duration) {
+ // Since the wallpaper IS the content, we will ignore the view passed in and animate
+ // the entire card
+ final ViewOverlay viewOverlay = this.getOverlay();
+ viewOverlay.add(overlay);
+ final int x = 0;
+ final int y = 0;
+ final int width = v.getWidth();
+ final int height = v.getHeight();
+ overlay.setBounds(x, y, x + width, y + height);
+
+ final ValueAnimator overlayAnimator = ValueAnimator.ofFloat(1f, 0f);
+ overlayAnimator.setDuration(duration);
+ overlayAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
+ @Override
+ public void onAnimationUpdate(ValueAnimator animation) {
+ float value = (Float) animation.getAnimatedValue();
+ overlay.setAlpha((int) (255 * value));
+ }
+
+ });
+ overlayAnimator.addListener(new Animator.AnimatorListener() {
+ @Override
+ public void onAnimationStart(Animator animation) {}
+
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ // Clear out the ViewOverlay now that we are done animating
+ viewOverlay.clear();
+ }
+
+ @Override
+ public void onAnimationCancel(Animator animation) {}
+
+ @Override
+ public void onAnimationRepeat(Animator animation) {}
+ });
+
+ AnimatorSet set = new AnimatorSet();
+ set.play(ObjectAnimator.ofFloat(overlay, "alpha", 0f, 1f))
+ .with(overlayAnimator);
+ set.start();
+ }
+}