summaryrefslogtreecommitdiffstats
path: root/src/org
diff options
context:
space:
mode:
authorClark Scheff <clark@cyngn.com>2014-07-15 19:56:35 -0700
committerClark Scheff <clark@cyngn.com>2014-07-16 09:48:01 -0700
commit59a1467e4360bbe63a936d568654fcd84cb1c720 (patch)
tree0957494e649be734d6b9e87ce04fd7fb21eee1ab /src/org
parentb8cdd6817c45ecd077496f036453012d403d68f5 (diff)
downloadpackages_apps_ThemeChooser-59a1467e4360bbe63a936d568654fcd84cb1c720.zip
packages_apps_ThemeChooser-59a1467e4360bbe63a936d568654fcd84cb1c720.tar.gz
packages_apps_ThemeChooser-59a1467e4360bbe63a936d568654fcd84cb1c720.tar.bz2
Animate component changes for status bar, nav bar and fonts
Change-Id: Ia0cd72869c3e4524e1306a00fe6f81c76b45b3a6
Diffstat (limited to 'src/org')
-rw-r--r--src/org/cyanogenmod/theme/chooserv2/ComponentCardView.java61
-rw-r--r--src/org/cyanogenmod/theme/chooserv2/ThemeFragment.java50
2 files changed, 101 insertions, 10 deletions
diff --git a/src/org/cyanogenmod/theme/chooserv2/ComponentCardView.java b/src/org/cyanogenmod/theme/chooserv2/ComponentCardView.java
index a20f032..0dc3387 100644
--- a/src/org/cyanogenmod/theme/chooserv2/ComponentCardView.java
+++ b/src/org/cyanogenmod/theme/chooserv2/ComponentCardView.java
@@ -1,15 +1,18 @@
package org.cyanogenmod.theme.chooserv2;
+import android.animation.Animator;
+import android.animation.AnimatorSet;
import android.animation.IntEvaluator;
+import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
-import android.graphics.drawable.NinePatchDrawable;
import android.graphics.drawable.TransitionDrawable;
import android.util.AttributeSet;
import android.view.View;
+import android.view.ViewOverlay;
import android.widget.LinearLayout;
import android.widget.TextView;
@@ -135,4 +138,60 @@ public class ComponentCardView extends LinearLayout {
});
bgAlphaAnimator.start();
}
+
+ /**
+ * 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
+ */
+ public void animateContentChange(View v, final Drawable overlay, long duration) {
+ final ViewOverlay viewOverlay = this.getOverlay();
+ viewOverlay.add(overlay);
+ final int x = (int) v.getX();
+ final int y = (int) v.getY();
+ final int width = v.getWidth();
+ final int height = v.getHeight();
+ overlay.setBounds(x, y, x + v.getWidth(), y + v.getHeight());
+
+ 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));
+ int newWidth = (int) (value * width);
+ int newHeight = (int) (value * height);
+ int dw = (width - newWidth) / 2;
+ int dh = (height - newHeight) / 2;
+ overlay.setBounds(x + dw, y + dh, x + dw + newWidth, y + dh + newHeight);
+ }
+ });
+ 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(v, "alpha", 0f, 1f))
+ .with(ObjectAnimator.ofFloat(v, "scaleX", 0f, 1f))
+ .with(ObjectAnimator.ofFloat(v, "scaleY", 0f, 1f));
+ set.setDuration(duration);
+
+ set.start();
+ overlayAnimator.start();
+ }
}
diff --git a/src/org/cyanogenmod/theme/chooserv2/ThemeFragment.java b/src/org/cyanogenmod/theme/chooserv2/ThemeFragment.java
index 09df7ea..26fad1b 100644
--- a/src/org/cyanogenmod/theme/chooserv2/ThemeFragment.java
+++ b/src/org/cyanogenmod/theme/chooserv2/ThemeFragment.java
@@ -689,17 +689,17 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb
switch (loader.getId()) {
case LOADER_ID_ALL:
loadWallpaper(c);
- loadStatusBar(c);
+ loadStatusBar(c, false);
loadIcons(c, false);
- loadNavBar(c);
+ loadNavBar(c, false);
loadTitle(c);
- loadFont(c);
+ loadFont(c, false);
break;
case LOADER_ID_STATUS_BAR:
- loadStatusBar(c);
+ loadStatusBar(c, true);
break;
case LOADER_ID_FONT:
- loadFont(c);
+ loadFont(c, true);
break;
case LOADER_ID_ICONS:
loadIcons(c, true);
@@ -708,7 +708,7 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb
loadWallpaper(c);
break;
case LOADER_ID_NAVIGATION_BAR:
- loadNavBar(c);
+ loadNavBar(c, true);
break;
}
}
@@ -736,7 +736,7 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb
}
}
- private void loadStatusBar(Cursor c) {
+ private void loadStatusBar(Cursor c, boolean animate) {
int backgroundIdx = c.getColumnIndex(PreviewColumns.STATUSBAR_BACKGROUND);
int wifiIdx = c.getColumnIndex(PreviewColumns.STATUSBAR_WIFI_ICON);
int wifiMarginIdx = c.getColumnIndex(PreviewColumns.STATUSBAR_WIFI_COMBO_MARGIN_END);
@@ -754,6 +754,12 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb
int wifiMargin = c.getInt(wifiMarginIdx);
int clockTextColor = c.getInt(clockColorIdx);
+ if (!mStatusBar.isDrawingCacheEnabled()) mStatusBar.setDrawingCacheEnabled(true);
+ Drawable d = null;
+ if (animate) {
+ d = new BitmapDrawable(getResources(), mStatusBar.getDrawingCache());
+ }
+
mStatusBar.setBackground(new BitmapDrawable(getActivity().getResources(), background));
mBluetooth.setImageBitmap(bluetoothIcon);
mWifi.setImageBitmap(wifiIcon);
@@ -781,6 +787,9 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb
String pkgName = c.getString(pkgNameIdx);
mSelectedComponentsMap.put(MODIFIES_STATUS_BAR, pkgName);
}
+ if (animate) {
+ animateContentChange(R.id.status_bar_container, mStatusBar, d);
+ }
}
private void loadIcons(Cursor c, boolean animate) {
@@ -830,7 +839,7 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb
}
}
- private void loadNavBar(Cursor c) {
+ private void loadNavBar(Cursor c, boolean animate) {
int backButtonIdx = c.getColumnIndex(PreviewColumns.NAVBAR_BACK_BUTTON);
int homeButtonIdx = c.getColumnIndex(PreviewColumns.NAVBAR_HOME_BUTTON);
int recentButtonIdx = c.getColumnIndex(PreviewColumns.NAVBAR_RECENT_BUTTON);
@@ -842,6 +851,12 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb
Bitmap homeButton = Utils.loadBitmapBlob(c, homeButtonIdx);
Bitmap recentButton = Utils.loadBitmapBlob(c, recentButtonIdx);
+ if (!mNavBar.isDrawingCacheEnabled()) mNavBar.setDrawingCacheEnabled(true);
+ Drawable d = null;
+ if (animate) {
+ d = new BitmapDrawable(getResources(), mNavBar.getDrawingCache());
+ }
+
mNavBar.setBackground(new BitmapDrawable(getActivity().getResources(), background));
mBackButton.setImageBitmap(backButton);
mHomeButton.setImageBitmap(homeButton);
@@ -851,9 +866,18 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb
String pkgName = c.getString(pkgNameIdx);
mSelectedComponentsMap.put(MODIFIES_NAVIGATION_BAR, pkgName);
}
+ if (animate) {
+ animateContentChange(R.id.navigation_bar_container, mNavBar, d);
+ }
}
- private void loadFont(Cursor c) {
+ private void loadFont(Cursor c, boolean animate) {
+ if (!mFontPreview.isDrawingCacheEnabled()) mFontPreview.setDrawingCacheEnabled(true);
+ Drawable d = null;
+ if (animate) {
+ d = new BitmapDrawable(getResources(), mFontPreview.getDrawingCache());
+ }
+
int pkgNameIdx = c.getColumnIndex(ThemesColumns.PKG_NAME);
String pkgName = pkgNameIdx >= 0 ? c.getString(pkgNameIdx) : mPkgName;
TypefaceHelperCache cache = TypefaceHelperCache.getInstance();
@@ -864,6 +888,9 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb
if (pkgNameIdx > -1) {
mSelectedComponentsMap.put(MODIFIES_FONTS, pkgName);
}
+ if (animate) {
+ animateContentChange(R.id.font_preview_container, mFontPreview, d);
+ }
}
public static ComponentName[] getIconComponents(Context context) {
@@ -950,6 +977,11 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb
}
}
+ private void animateContentChange(int parentId, View viewToAnimate, Drawable overlay) {
+ ((ComponentCardView) getView().findViewById(parentId))
+ .animateContentChange(viewToAnimate, overlay, ANIMATE_COMPONENT_CHANGE_DURATION);
+ }
+
public void fadeInCards() {
mActiveCardId = -1;
for (int i = 0; i < sCardIdsToComponentTypes.size(); i++) {