diff options
Diffstat (limited to 'src/org')
3 files changed, 72 insertions, 20 deletions
diff --git a/src/org/cyanogenmod/theme/chooserv2/ChooserActivity.java b/src/org/cyanogenmod/theme/chooserv2/ChooserActivity.java index f5830c8..2a42def 100644 --- a/src/org/cyanogenmod/theme/chooserv2/ChooserActivity.java +++ b/src/org/cyanogenmod/theme/chooserv2/ChooserActivity.java @@ -22,6 +22,7 @@ import android.content.res.ThemeManager; import android.database.Cursor; import android.os.AsyncTask; import android.os.Bundle; +import android.os.Handler; import android.provider.ThemesContract; import android.provider.ThemesContract.ThemesColumns; import android.support.v4.app.Fragment; @@ -61,6 +62,7 @@ public class ChooserActivity extends FragmentActivity private PagerContainer mContainer; private ThemeViewPager mPager; private Button mEdit; + private ThemesAdapter mAdapter; private ThemeManager mService; private boolean mExpanded = false; @@ -68,6 +70,8 @@ public class ChooserActivity extends FragmentActivity private View mSaveApplyLayout; private int mContainerYOffset = 0; private TypefaceHelperCache mTypefaceHelperCache; + private boolean mIsAnimating; + private Handler mHandler; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -82,7 +86,7 @@ public class ChooserActivity extends FragmentActivity mPager.setAdapter(mAdapter); DisplayMetrics dm = getResources().getDisplayMetrics(); - int margin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 24, dm); + int margin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 48, dm); mPager.setPageMargin(-margin / 2); mPager.setOffscreenPageLimit(OFFSCREEN_PAGE_LIMIT); @@ -102,9 +106,11 @@ public class ChooserActivity extends FragmentActivity mEdit.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { mExpanded = true; + mContainer.setClickable(false); mContainer.expand(); ThemeFragment f = getCurrentFragment(); f.expand(); + setAnimatingStateAndScheduleFinish(); } }); @@ -122,8 +128,10 @@ public class ChooserActivity extends FragmentActivity new View.OnClickListener() { @Override public void onClick(View v) { + if (mIsAnimating) return; hideSaveApplyButton(); mExpanded = false; + mContainer.setClickable(false); final ThemeFragment f = getCurrentFragment(); f.fadeOutCards(new Runnable() { public void run() { @@ -131,9 +139,11 @@ public class ChooserActivity extends FragmentActivity f.collapse(true); } }); + setAnimatingStateAndScheduleFinish(); } }); mTypefaceHelperCache = TypefaceHelperCache.getInstance(); + mHandler = new Handler(); } public void hideSaveApplyButton() { @@ -155,6 +165,17 @@ public class ChooserActivity extends FragmentActivity }); } + private void setAnimatingStateAndScheduleFinish() { + mIsAnimating = true; + mContainer.setIsAnimating(true); + mHandler.postDelayed(new Runnable() { + public void run() { + mIsAnimating = false; + mContainer.setIsAnimating(false); + } + }, ThemeFragment.ANIMATE_START_DELAY + ThemeFragment.ANIMATE_DURATION); + } + /** * Disable the ViewPager while a theme change is occuring */ @@ -248,6 +269,10 @@ public class ChooserActivity extends FragmentActivity final ThemeFragment f = getCurrentFragment(); f.fadeInCards(); } else if (mExpanded) { + if (mIsAnimating) { + return; + } + if (mSaveApplyLayout.getVisibility() == View.VISIBLE) { hideSaveApplyButton(); getCurrentFragment().clearChanges(); @@ -260,6 +285,7 @@ public class ChooserActivity extends FragmentActivity f.collapse(false); } }); + setAnimatingStateAndScheduleFinish(); } else { super.onBackPressed(); } @@ -288,11 +314,13 @@ public class ChooserActivity extends FragmentActivity private View.OnClickListener mPagerClickListener = new View.OnClickListener() { @Override public void onClick(View v) { - if (!mExpanded) { + if (!mExpanded && !mIsAnimating) { mExpanded = true; + mContainer.setClickable(false); mContainer.expand(); ThemeFragment f = getCurrentFragment(); f.expand(); + setAnimatingStateAndScheduleFinish(); } } }; diff --git a/src/org/cyanogenmod/theme/chooserv2/PagerContainer.java b/src/org/cyanogenmod/theme/chooserv2/PagerContainer.java index 9ed44ee..a76b324 100644 --- a/src/org/cyanogenmod/theme/chooserv2/PagerContainer.java +++ b/src/org/cyanogenmod/theme/chooserv2/PagerContainer.java @@ -51,6 +51,7 @@ public class PagerContainer extends FrameLayout implements ViewPager.OnPageChang private Point mCenter = new Point(); private Point mInitialTouch = new Point(); private int mCollapsedHeight; + private boolean mIsAnimating = false; boolean mNeedsRedraw = false; @@ -92,7 +93,16 @@ public class PagerContainer extends FrameLayout implements ViewPager.OnPageChang } @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + if (mIsAnimating) return true; + return super.onInterceptTouchEvent(ev); + } + + @Override public boolean onTouchEvent(MotionEvent ev) { + // Do not allow touch events to propagate if we are animating + if (mIsAnimating) return true; + //We capture any touches not already handled by the ViewPager // to implement scrolling from a touch outside the pager bounds. switch (ev.getAction()) { @@ -122,6 +132,10 @@ public class PagerContainer extends FrameLayout implements ViewPager.OnPageChang mNeedsRedraw = (state != ThemeViewPager.SCROLL_STATE_IDLE); } + public void setIsAnimating(boolean isAnimating) { + mIsAnimating = isAnimating; + } + public void expand() { LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(getLayoutParams()); params.height = LinearLayout.LayoutParams.MATCH_PARENT; diff --git a/src/org/cyanogenmod/theme/chooserv2/ThemeFragment.java b/src/org/cyanogenmod/theme/chooserv2/ThemeFragment.java index 30a5b80..cac2ff5 100644 --- a/src/org/cyanogenmod/theme/chooserv2/ThemeFragment.java +++ b/src/org/cyanogenmod/theme/chooserv2/ThemeFragment.java @@ -324,11 +324,9 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb Rect padding = new Rect(); NinePatchDrawable bg = (NinePatchDrawable) mShadowFrame.getBackground(); bg.getPadding(padding); - ViewGroup.LayoutParams wpParams = mWallpaper.getLayoutParams(); - wpParams.width -= padding.left + padding.right; - mWallpaper.setLayoutParams(wpParams); mIconContainer.setPadding(padding.left, padding.top, padding.right, padding.bottom); mShadowFrame.setBackground(null); + mShadowFrame.setPadding(0, 0, 0, 0); mAdditionalCards.setPadding(padding.left, padding.top, padding.right, padding.bottom); // Off screen cards will become visible and then be animated in @@ -360,19 +358,19 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb mScrollView.requestLayout(); animateWallpaperOut(); animateTitleCard(true, false); - animateChildren(true, getChildrensGlobalBounds()); - animateExtras(true, getChildrensGlobalBounds()); + animateChildren(true, getChildrensGlobalBounds(mPreviewContent)); + animateExtras(true, getChildrensGlobalBounds(mAdditionalCards)); mSelector = ((ChooserActivity) getActivity()).getComponentSelector(); mSelector.setOnItemClickedListener(mOnComponentItemClicked); } - // Returns the boundaries for all the children in the scrollview relative to the window - private List<Rect> getChildrensGlobalBounds() { + // Returns the boundaries for all the children of parent relative to the app window + private List<Rect> getChildrensGlobalBounds(ViewGroup parent) { List<Rect> bounds = new ArrayList<Rect>(); - for (int i = 0; i < mPreviewContent.getChildCount(); i++) { - final View v = mPreviewContent.getChildAt(i); + for (int i = 0; i < parent.getChildCount(); i++) { + final View v = parent.getChildAt(i); int[] pos = new int[2]; v.getLocationInWindow(pos); Rect boundary = new Rect(pos[0], pos[1], pos[0] + v.getWidth(), pos[1]+v.getHeight()); @@ -406,9 +404,7 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb Rect padding = new Rect(); final NinePatchDrawable bg = (NinePatchDrawable) mShadowFrame.getBackground(); bg.getPadding(padding); - ViewGroup.LayoutParams wpParams = mWallpaper.getLayoutParams(); - wpParams.width += padding.left + padding.right; - mWallpaper.setLayoutParams(wpParams); + mShadowFrame.setPadding(padding.left, padding.top, padding.right, padding.bottom); // Gradually fade the drop shadow back in or else it will be out of place ValueAnimator shadowAnimation = ValueAnimator.ofObject(new IntEvaluator(), 0, 255); @@ -444,6 +440,10 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb int top = (int) child.getResources() .getDimension(R.dimen.collapsed_icon_card_margin_top); lparams.setMargins(0, top, 0, 0); + } else if (child.getId() == R.id.font_preview_container) { + int top = (int) child.getResources() + .getDimension(R.dimen.collapsed_font_card_margin_top); + lparams.setMargins(0, top, 0, 0); } child.getLayoutParams(); @@ -451,8 +451,8 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb } mScrollView.requestLayout(); - animateChildren(false, getChildrensGlobalBounds()); - animateExtras(false, getChildrensGlobalBounds()); + animateChildren(false, getChildrensGlobalBounds(mPreviewContent)); + animateExtras(false, getChildrensGlobalBounds(mAdditionalCards)); animateWallpaperIn(); animateTitleCard(false, applyTheme); } @@ -493,7 +493,8 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb endHeight = v.getHeight(); } - v.setTranslationY((prevY - endY) + (prevHeight - endHeight) / 2); + int paddingTop = v.getPaddingTop(); + v.setTranslationY((prevY - endY - paddingTop) + (prevHeight - endHeight) / 2); root.getOverlay().add(v); // Expanding has a delay while the wallpaper begins to fade out @@ -678,6 +679,7 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb } }); return true; + } }); } @@ -954,9 +956,17 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb // Set the icons. If the provider does not have an icon preview then // fall back to the default icon set IconPreviewHelper helper = new IconPreviewHelper(getActivity(), ""); - ViewGroup container = (ViewGroup) mIconContainer.findViewById(R.id.icon_preview_container); - for(int i=0; i < container.getChildCount() && i < iconIdx.length; i++) { - final ImageView v = (ImageView) ((ViewGroup)mIconContainer.getChildAt(1)).getChildAt(i); + int numOfChildren = ((ViewGroup)mIconContainer.getChildAt(1)).getChildCount(); + + List<ImageView> iconViews = new ArrayList<ImageView>(numOfChildren); + for(int i=0; i < numOfChildren; i++) { + final View view = (View) ((ViewGroup)mIconContainer.getChildAt(1)).getChildAt(i); + if (!(view instanceof ImageView)) continue; + iconViews.add((ImageView) view); + } + + for(int i=0; i < iconViews.size() && i < iconIdx.length; i++) { + final ImageView v = iconViews.get(i); Bitmap bitmap = Utils.loadBitmapBlob(c, iconIdx[i]); Drawable oldIcon = v.getDrawable(); Drawable newIcon; |