From 73b46248a11d3d5f5aa0e706bef89b65f87b715e Mon Sep 17 00:00:00 2001 From: Luis Vidal Date: Wed, 27 Jan 2016 18:10:40 -0800 Subject: Add PICK_ANIMATED_LOCK_SCREEN action This patch is to instruct the chooser to jump directly to the live lock screen selector if PICK_ANIMATED_LOCK_SCREEN action is sent Change-Id: I1d1df7df2d0d903841c5408bd138e81350327baa TICKET: CYNGNOS-1707 --- src/com/cyngn/theme/chooser/ChooserActivity.java | 68 +++++++++++++++++----- src/com/cyngn/theme/chooser/ComponentSelector.java | 16 ++++- src/com/cyngn/theme/chooser/MyThemeFragment.java | 5 +- src/com/cyngn/theme/chooser/ThemeFragment.java | 36 ++++++++++++ src/com/cyngn/theme/util/CursorLoaderHelper.java | 21 +++++++ 5 files changed, 131 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/com/cyngn/theme/chooser/ChooserActivity.java b/src/com/cyngn/theme/chooser/ChooserActivity.java index b80e6c7..1a26828 100644 --- a/src/com/cyngn/theme/chooser/ChooserActivity.java +++ b/src/com/cyngn/theme/chooser/ChooserActivity.java @@ -98,6 +98,9 @@ public class ChooserActivity extends FragmentActivity "com.cyngn.themes.action.THEME_REMOVED_FROM_CHOOSER"; private static final String EXTRA_PACKAGE = "package"; + private static final String ACTION_PICK_ANIMATED_LOCK_SCREEN = + "com.cyngn.intent.action.PICK_ANIMATED_LOCK_SCREEN"; + /** * Request code for picking an external wallpaper */ @@ -116,6 +119,8 @@ public class ChooserActivity extends FragmentActivity private static final long FINISH_ANIMATION_DELAY = ThemeFragment.ANIMATE_DURATION + ThemeFragment.ANIMATE_START_DELAY + 250; + private static final long ANIMATE_CARDS_IN_DURATION = 250; + private PagerContainer mContainer; private ThemeViewPager mPager; @@ -146,6 +151,7 @@ public class ChooserActivity extends FragmentActivity private boolean mIsPickingImage = false; private boolean mRestartLoaderOnCollapse = false; private boolean mActivityResuming = false; + private boolean mShowAnimatedLockScreensOnly = false; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -344,9 +350,15 @@ public class ChooserActivity extends FragmentActivity getCallingPackage())) { mThemeToApply = intent.getStringExtra(EXTRA_PKGNAME); } + } else if (action.equals(ACTION_PICK_ANIMATED_LOCK_SCREEN)) { + mShowAnimatedLockScreensOnly = true; } } + public boolean getShowAnimatedLockScreeOnly() { + return mShowAnimatedLockScreensOnly; + } + private String getSelectedTheme(String requestedTheme) { String[] projection = { ThemesColumns.PRESENT_AS_THEME }; String selection = ThemesColumns.PKG_NAME + "=?"; @@ -632,6 +644,10 @@ public class ChooserActivity extends FragmentActivity mContainerYOffset = 0; } if (f != null) f.fadeInCards(); + if (mShowAnimatedLockScreensOnly) { + mShowAnimatedLockScreensOnly = false; + mSelector.resetComponentType(); + } } else if (mExpanded) { if (mIsAnimating) { return; @@ -717,18 +733,23 @@ public class ChooserActivity extends FragmentActivity ((TransitionDrawable) d).startTransition((int) ANIMATE_CONTENT_IN_BLUR_DURATION); } - AnimatorSet set = new AnimatorSet(); - set.play(ObjectAnimator.ofFloat(mContainer, "alpha", 0f, 1f) - .setDuration(ANIMATE_CONTENT_IN_ALPHA_DURATION)) - .with(ObjectAnimator.ofFloat(mContainer, "scaleX", 2f, 1f) - .setDuration(ANIMATE_CONTENT_IN_SCALE_DURATION)) - .with(ObjectAnimator.ofFloat(mContainer, "scaleY", 2f, 1f) - .setDuration(ANIMATE_CONTENT_IN_SCALE_DURATION)); - set.setStartDelay(mAnimateContentInDelay); - set.start(); - mBottomActionsLayout.setAlpha(0f); - mBottomActionsLayout.animate().alpha(1f).setStartDelay(mAnimateContentInDelay) - .setDuration(ANIMATE_CONTENT_IN_ALPHA_DURATION); + if (!mShowAnimatedLockScreensOnly) { + AnimatorSet set = new AnimatorSet(); + set.play(ObjectAnimator.ofFloat(mContainer, "alpha", 0f, 1f) + .setDuration(ANIMATE_CONTENT_IN_ALPHA_DURATION)) + .with(ObjectAnimator.ofFloat(mContainer, "scaleX", 2f, 1f) + .setDuration(ANIMATE_CONTENT_IN_SCALE_DURATION)) + .with(ObjectAnimator.ofFloat(mContainer, "scaleY", 2f, 1f) + .setDuration(ANIMATE_CONTENT_IN_SCALE_DURATION)); + set.setStartDelay(mAnimateContentInDelay); + set.start(); + mBottomActionsLayout.setAlpha(0f); + mBottomActionsLayout.animate().alpha(1f).setStartDelay(mAnimateContentInDelay) + .setDuration(ANIMATE_CONTENT_IN_ALPHA_DURATION); + } else { + mContainer.setAlpha(0f); + mContainer.setVisibility(View.GONE); + } mAnimateContentIn = false; } @@ -919,7 +940,7 @@ public class ChooserActivity extends FragmentActivity final String pkgName = mInstalledThemes.get(position); if (pkgName.equals(mAppliedBaseTheme)) { f = MyThemeFragment.newInstance(mAppliedBaseTheme, mAppliedThemeTitle, - mAppliedThemeAuthor, mAnimateContentIn); + mAppliedThemeAuthor, mAnimateContentIn, mShowAnimatedLockScreensOnly); wallpaperCmpntId = mCurrentWallpaperCmpntId; } else { f = ThemeFragment.newInstance(pkgName, mAnimateContentIn); @@ -1057,4 +1078,25 @@ public class ChooserActivity extends FragmentActivity } } } + + public void expandContentAndAnimateLockScreenCardIn() { + mHandler.post(new Runnable() { + @Override + public void run() { + expand(); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + AnimatorSet set = new AnimatorSet(); + set.play(ObjectAnimator.ofFloat(mContainer, "alpha", 0f, 1f) + .setDuration(ANIMATE_CARDS_IN_DURATION)); + set.setStartDelay(mAnimateContentInDelay); + set.start(); + mContainer.setVisibility(View.VISIBLE); + getCurrentFragment().showAnimatedLockScreenCard(); + } + }, ANIMATE_CARDS_IN_DURATION); + } + }); + } } diff --git a/src/com/cyngn/theme/chooser/ComponentSelector.java b/src/com/cyngn/theme/chooser/ComponentSelector.java index edcaa19..48704a9 100644 --- a/src/com/cyngn/theme/chooser/ComponentSelector.java +++ b/src/com/cyngn/theme/chooser/ComponentSelector.java @@ -63,6 +63,7 @@ import static android.provider.ThemesContract.ThemesColumns.MODIFIES_NAVIGATION_ import static android.provider.ThemesContract.ThemesColumns.MODIFIES_ICONS; import static android.provider.ThemesContract.ThemesColumns.MODIFIES_FONTS; +import static com.cyngn.theme.util.CursorLoaderHelper.LOADER_ID_LIVE_LOCK_SCREEN; import static com.cyngn.theme.util.CursorLoaderHelper.LOADER_ID_STATUS_BAR; import static com.cyngn.theme.util.CursorLoaderHelper.LOADER_ID_FONT; import static com.cyngn.theme.util.CursorLoaderHelper.LOADER_ID_ICONS; @@ -212,6 +213,10 @@ public class ComponentSelector extends LinearLayout } } + public void resetComponentType() { + mComponentType = null; + } + public void setComponentType(String component) { setComponentType(component, null, DEFAULT_COMPONENT_ID); } @@ -352,7 +357,8 @@ public class ComponentSelector extends LinearLayout return LOADER_ID_ALARM; } if (MODIFIES_LOCKSCREEN.equals(component)) { - return LOADER_ID_LOCKSCREEN; + return (showAnimatedLockScreenOnly()) ? LOADER_ID_LIVE_LOCK_SCREEN + : LOADER_ID_LOCKSCREEN; } return -1; } @@ -541,6 +547,10 @@ public class ComponentSelector extends LinearLayout return newSoundView(cursor, container, position, mComponentType); } if (MODIFIES_LOCKSCREEN.equals(mComponentType)) { + if (showAnimatedLockScreenOnly()) { + return newWallpapersView(cursor, container, position + EXTRA_WALLPAPER_COMPONENTS, + cursor.getColumnIndex(PreviewColumns.LIVE_LOCK_SCREEN_THUMBNAIL), true); + } boolean isLiveLockScreen = false; if (position >= EXTRA_WALLPAPER_COMPONENTS) { cursor.moveToPosition(position - EXTRA_WALLPAPER_COMPONENTS); @@ -866,6 +876,10 @@ public class ComponentSelector extends LinearLayout } }; + private boolean showAnimatedLockScreenOnly() { + return ((ChooserActivity)mContext).getShowAnimatedLockScreeOnly(); + } + private class ThemesObserver extends ContentObserver { public ThemesObserver() { super(null); diff --git a/src/com/cyngn/theme/chooser/MyThemeFragment.java b/src/com/cyngn/theme/chooser/MyThemeFragment.java index 9803b55..1171236 100644 --- a/src/com/cyngn/theme/chooser/MyThemeFragment.java +++ b/src/com/cyngn/theme/chooser/MyThemeFragment.java @@ -67,7 +67,8 @@ public class MyThemeFragment extends ThemeFragment { private SurfaceView mSurfaceView; static MyThemeFragment newInstance(String baseThemePkgName, String baseThemeName, - String baseThemeAuthor, boolean skipLoadingAnim) { + String baseThemeAuthor, boolean skipLoadingAnim, + boolean showAnimatedLockScreensOnly) { MyThemeFragment f = new MyThemeFragment(); Bundle args = new Bundle(); args.putString(ARG_PACKAGE_NAME, CURRENTLY_APPLIED_THEME); @@ -75,6 +76,7 @@ public class MyThemeFragment extends ThemeFragment { args.putString(ARG_BASE_THEME_NAME, baseThemeName); args.putString(ARG_BASE_THEME_AUTHOR, baseThemeAuthor); args.putBoolean(ARG_SKIP_LOADING_ANIM, skipLoadingAnim); + args.putBoolean(ARG_SHOW_ANIMATED_LOCK_SCREEN_ONLY, showAnimatedLockScreensOnly); f.setArguments(args); return f; } @@ -89,6 +91,7 @@ public class MyThemeFragment extends ThemeFragment { mBaseThemePkgName = getArguments().getString(ARG_BASE_THEME_PACKAGE_NAME); mBaseThemeName = getArguments().getString(ARG_BASE_THEME_NAME); mBaseThemeAuthor = getArguments().getString(ARG_BASE_THEME_AUTHOR); + mShowAnimatedLockScreenSelectorAfterContentLoaded = getArguments().getBoolean(ARG_SHOW_ANIMATED_LOCK_SCREEN_ONLY); mSurfaceView = createSurfaceView(); } diff --git a/src/com/cyngn/theme/chooser/ThemeFragment.java b/src/com/cyngn/theme/chooser/ThemeFragment.java index 7f9d2af..8458637 100644 --- a/src/com/cyngn/theme/chooser/ThemeFragment.java +++ b/src/com/cyngn/theme/chooser/ThemeFragment.java @@ -5,6 +5,7 @@ package com.cyngn.theme.chooser; import android.Manifest; import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; import android.animation.IntEvaluator; import android.animation.ObjectAnimator; @@ -180,6 +181,8 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb private static final int ADDITIONAL_CONTENT_SPACE_ID = 123456; private static final long SLIDE_CONTENT_ANIM_DURATION = 300L; + private static final long LOCK_SCREEN_CARD_SCROLL_ANIMATION_DURATION = 400; + private static final long SHOW_LOCK_SCREEN_CARD_DELAY = 500; private static final int DEFAULT_WIFI_MARGIN = 0; private static final int DEFAULT_CLOCK_COLOR = Color.WHITE; @@ -189,6 +192,7 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb protected static final String ARG_PACKAGE_NAME = "pkgName"; protected static final String ARG_COMPONENT_ID = "cmpntId"; protected static final String ARG_SKIP_LOADING_ANIM = "skipLoadingAnim"; + protected static final String ARG_SHOW_ANIMATED_LOCK_SCREEN_ONLY = "showAnimatedLockScreenOnly"; private static final String LLS_PACKAGE_NAME = "com.cyngn.lockscreen.live"; private static final String LLS_PROVIDER_NAME = @@ -315,6 +319,8 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb private static final int mThemeVersion = ThemeVersion.getVersion(); + protected boolean mShowAnimatedLockScreenSelectorAfterContentLoaded; + protected enum CustomizeResetAction { Customize, Reset, @@ -1333,6 +1339,10 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb animateContentIn(); } }); + if (mShowAnimatedLockScreenSelectorAfterContentLoaded) { + getChooserActivity().expandContentAndAnimateLockScreenCardIn(); + mShowAnimatedLockScreenSelectorAfterContentLoaded = false; + } break; case LOADER_ID_STATUS_BAR: loadStatusBar(c, animate); @@ -2733,6 +2743,32 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb scrollAnimator.start(); } + public void showAnimatedLockScreenCard() { + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + final ValueAnimator scrollAnimator = + ValueAnimator.ofInt(0, mStyleCard.getBottom()); + scrollAnimator.setDuration(LOCK_SCREEN_CARD_SCROLL_ANIMATION_DURATION); + scrollAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animation) { + int value = (Integer) animation.getAnimatedValue(); + mScrollView.scrollTo(0, value); + } + }); + scrollAnimator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + super.onAnimationEnd(animation); + mCardClickListener.onClick(mLockScreenCard); + } + }); + scrollAnimator.start(); + } + }, SHOW_LOCK_SCREEN_CARD_DELAY); + } + class AnimationLoader extends AsyncTask { Context mContext; String mPkgName; diff --git a/src/com/cyngn/theme/util/CursorLoaderHelper.java b/src/com/cyngn/theme/util/CursorLoaderHelper.java index 333899b..c4fffa9 100644 --- a/src/com/cyngn/theme/util/CursorLoaderHelper.java +++ b/src/com/cyngn/theme/util/CursorLoaderHelper.java @@ -191,6 +191,27 @@ public class CursorLoaderHelper { }; } break; + case LOADER_ID_LIVE_LOCK_SCREEN: + selection = MODIFIES_LIVE_LOCK_SCREEN + "=?"; + selectionArgs = new String[] { "1" }; + if (mThemeVersion >= 3) { + projection = new String[]{ + PreviewColumns.LIVE_LOCK_SCREEN_THUMBNAIL, + ThemesColumns.TITLE, + ThemesColumns.PKG_NAME, + ThemesColumns.MODIFIES_LIVE_LOCK_SCREEN, + PreviewColumns.COMPONENT_ID + }; + } else { + projection = new String[]{ + PreviewColumns.LOCK_WALLPAPER_THUMBNAIL, + PreviewColumns.LIVE_LOCK_SCREEN_THUMBNAIL, + ThemesColumns.TITLE, + ThemesColumns.MODIFIES_LIVE_LOCK_SCREEN, + ThemesColumns.PKG_NAME + }; + } + break; default: return null; } -- cgit v1.1