summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndy Mast <andy@cyngn.com>2014-07-23 11:24:15 -0700
committerAndy Mast <andy@cyngn.com>2014-07-25 17:12:15 +0000
commita6f892ba64698579b7df1f3d570c846e35a295fa (patch)
tree6a312435521a35ede7a177dd0df7e1a9f3065acf
parent2ef1cb3a325a1cd48341733f1d171e22de4eb219 (diff)
downloadpackages_apps_ThemeChooser-a6f892ba64698579b7df1f3d570c846e35a295fa.tar.gz
packages_apps_ThemeChooser-a6f892ba64698579b7df1f3d570c846e35a295fa.tar.bz2
packages_apps_ThemeChooser-a6f892ba64698579b7df1f3d570c846e35a295fa.zip
Add change animations for wallpapers
Change-Id: Id250cf5143aaf842e4b41dab7884af2d915f495c
-rw-r--r--src/org/cyanogenmod/theme/chooserv2/ThemeFragment.java34
-rw-r--r--src/org/cyanogenmod/theme/chooserv2/WallpaperCardView.java59
2 files changed, 84 insertions, 9 deletions
diff --git a/src/org/cyanogenmod/theme/chooserv2/ThemeFragment.java b/src/org/cyanogenmod/theme/chooserv2/ThemeFragment.java
index 5d26aad..8b784f1 100644
--- a/src/org/cyanogenmod/theme/chooserv2/ThemeFragment.java
+++ b/src/org/cyanogenmod/theme/chooserv2/ThemeFragment.java
@@ -1076,13 +1076,13 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb
loadIcons(c, true);
break;
case LOADER_ID_WALLPAPER:
- loadWallpaper(c);
+ loadWallpaper(c, true);
break;
case LOADER_ID_NAVIGATION_BAR:
loadNavBar(c, true);
break;
case LOADER_ID_LOCKSCREEN:
- loadLockScreen(c);
+ loadLockScreen(c, true);
break;
case LOADER_ID_STYLE:
loadStyle(c, true);
@@ -1135,7 +1135,7 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb
}
if (shouldShowComponentCard(MODIFIES_LOCKSCREEN)) {
- loadLockScreen(c);
+ loadLockScreen(c, false);
} else {
mAdditionalCards.removeView(mLockScreenCard);
}
@@ -1143,9 +1143,9 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb
private void loadAdditionalCard(Cursor c, String component) {
if (MODIFIES_LOCKSCREEN.equals(component)) {
- loadLockScreen(c);
+ loadLockScreen(c, false);
} else if (MODIFIES_LAUNCHER.equals(component)) {
- loadWallpaper(c);
+ loadWallpaper(c, false);
} else if (MODIFIES_OVERLAYS.equals(component)) {
loadStyle(c, false);
} else if (MODIFIES_BOOT_ANIM.equals(component)) {
@@ -1224,10 +1224,14 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb
}
}
- private void loadWallpaper(Cursor c) {
+ private void loadWallpaper(Cursor c, boolean animate) {
+ Drawable overlay = null;
+ if (animate) {
+ overlay = getOverlayDrawable(mWallpaperCard, true);
+ }
+
int pkgNameIdx = c.getColumnIndex(ThemesColumns.PKG_NAME);
int wpIdx = c.getColumnIndex(PreviewColumns.WALLPAPER_PREVIEW);
-
final Resources res = getResources();
if (pkgNameIdx > -1) {
Bitmap bitmap = Utils.loadBitmapBlob(c, wpIdx);
@@ -1245,12 +1249,20 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb
mWallpaper.setImageDrawable(wp);
mWallpaperCard.setWallpaper(wp);
}
+
+ if (animate) {
+ animateContentChange(R.id.wallpaper_card, mWallpaperCard, overlay);
+ }
}
- public void loadLockScreen(Cursor c) {
+ public void loadLockScreen(Cursor c, boolean animate) {
+ Drawable overlay = null;
+ if (animate) {
+ overlay = getOverlayDrawable(mLockScreenCard, true);
+ }
+
int pkgNameIdx = c.getColumnIndex(ThemesColumns.PKG_NAME);
int wpIdx = c.getColumnIndex(PreviewColumns.LOCK_WALLPAPER_PREVIEW);
-
final Resources res = getResources();
if (pkgNameIdx > -1) {
Bitmap bitmap = Utils.loadBitmapBlob(c, wpIdx);
@@ -1266,6 +1278,10 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb
}
mLockScreenCard.setWallpaper(wp);
}
+
+ if (animate) {
+ animateContentChange(R.id.lockscreen_card, mLockScreenCard, overlay);
+ }
}
private void loadStatusBar(Cursor c, boolean animate) {
diff --git a/src/org/cyanogenmod/theme/chooserv2/WallpaperCardView.java b/src/org/cyanogenmod/theme/chooserv2/WallpaperCardView.java
index d9e063c..a2adf0c 100644
--- a/src/org/cyanogenmod/theme/chooserv2/WallpaperCardView.java
+++ b/src/org/cyanogenmod/theme/chooserv2/WallpaperCardView.java
@@ -1,10 +1,16 @@
package org.cyanogenmod.theme.chooserv2;
+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.LinearLayout;
@@ -49,11 +55,64 @@ public class WallpaperCardView extends ComponentCardView {
mImage.setImageDrawable(drawable);
}
+ @Override
public void expand() {
// Do nothing
}
+ @Override
public void collapse() {
// Do nothing
}
+
+ /**
+ * 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();
+ }
}