summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--res/drawable-xxhdpi/bg_themepreview_shadow.9.pngbin194 -> 154 bytes
-rw-r--r--res/drawable-xxhdpi/card_themepreview_bg.9.pngbin1269 -> 718 bytes
-rw-r--r--res/layout/v2_activity_main.xml2
-rw-r--r--res/layout/v2_fragment_pager_list.xml2
-rw-r--r--res/layout/v2item_font.xml4
-rw-r--r--res/layout/v2item_icon.xml19
-rw-r--r--res/values/dimens.xml18
-rw-r--r--res/values/strings.xml2
-rw-r--r--res/values/styles.xml2
-rw-r--r--src/android/support/v4/view/ThemeViewPager.java8
-rw-r--r--src/org/cyanogenmod/theme/chooserv2/ChooserActivity.java32
-rw-r--r--src/org/cyanogenmod/theme/chooserv2/PagerContainer.java14
-rw-r--r--src/org/cyanogenmod/theme/chooserv2/ThemeFragment.java46
13 files changed, 108 insertions, 41 deletions
diff --git a/res/drawable-xxhdpi/bg_themepreview_shadow.9.png b/res/drawable-xxhdpi/bg_themepreview_shadow.9.png
index f368eb1..3137ccf 100644
--- a/res/drawable-xxhdpi/bg_themepreview_shadow.9.png
+++ b/res/drawable-xxhdpi/bg_themepreview_shadow.9.png
Binary files differ
diff --git a/res/drawable-xxhdpi/card_themepreview_bg.9.png b/res/drawable-xxhdpi/card_themepreview_bg.9.png
index 9dbbd30..6e6ea16 100644
--- a/res/drawable-xxhdpi/card_themepreview_bg.9.png
+++ b/res/drawable-xxhdpi/card_themepreview_bg.9.png
Binary files differ
diff --git a/res/layout/v2_activity_main.xml b/res/layout/v2_activity_main.xml
index cae0c31..5d81b5b 100644
--- a/res/layout/v2_activity_main.xml
+++ b/res/layout/v2_activity_main.xml
@@ -16,7 +16,7 @@
android:layout_gravity="center_vertical">
<android.support.v4.view.ThemeViewPager
android:id="@+id/viewpager"
- android:layout_width="312dp"
+ android:layout_width="@dimen/theme_fragment_width"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:overScrollMode="never"/>
diff --git a/res/layout/v2_fragment_pager_list.xml b/res/layout/v2_fragment_pager_list.xml
index 08f23ec..5ec265e 100644
--- a/res/layout/v2_fragment_pager_list.xml
+++ b/res/layout/v2_fragment_pager_list.xml
@@ -25,7 +25,7 @@
android:background="@drawable/bg_themepreview_shadow">
<ImageView
android:id="@+id/wallpaper"
- android:layout_width="@dimen/theme_preview_width"
+ android:layout_width="@dimen/wallpaper_preview_width"
android:layout_height="@dimen/theme_preview_height"
android:layout_gravity="center_horizontal"
android:scaleType="centerCrop"
diff --git a/res/layout/v2item_font.xml b/res/layout/v2item_font.xml
index a36b489..11876b9 100644
--- a/res/layout/v2item_font.xml
+++ b/res/layout/v2item_font.xml
@@ -5,7 +5,9 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/status_bar_container"
+ android:layout_marginTop="@dimen/collapsed_font_card_margin_top"
android:orientation="vertical"
+ android:padding="0dp"
android:background="@drawable/theme_component_bg_transition">
<TextView
android:id="@+id/label"
@@ -25,7 +27,7 @@
android:shadowDx="2"
android:shadowDy="2"
android:shadowRadius="4"
- android:textSize="32sp"
+ android:textSize="40sp"
android:gravity="center"
/>
</org.cyanogenmod.theme.chooserv2.ComponentCardView>
diff --git a/res/layout/v2item_icon.xml b/res/layout/v2item_icon.xml
index 10c7f46..e9e81db 100644
--- a/res/layout/v2item_icon.xml
+++ b/res/layout/v2item_icon.xml
@@ -20,28 +20,29 @@
android:id="@+id/icon_preview_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:gravity="center_horizontal"
android:orientation="horizontal"
- android:paddingLeft="30dp"
- android:paddingRight="30dp"
>
+ <Space android:layout_width="30dp" android:layout_height="match_parent"/>
<ImageView
- android:layout_width="0px"
- android:layout_weight="1"
+ android:layout_width="48dp"
android:layout_height="48dp"
+ android:scaleType="fitCenter"
android:src="@drawable/comp_icon1"
/>
+ <Space android:layout_width="30dp" android:layout_height="match_parent"/>
<ImageView
- android:layout_width="0px"
- android:layout_weight="1"
+ android:layout_width="48dp"
android:layout_height="48dp"
+ android:scaleType="fitCenter"
android:src="@drawable/comp_icon2"
/>
+ <Space android:layout_width="30dp" android:layout_height="match_parent"/>
<ImageView
- android:layout_width="0px"
+ android:layout_width="48dp"
android:layout_height="48dp"
- android:layout_weight="1"
+ android:scaleType="fitCenter"
android:src="@drawable/comp_icon3"
/>
+ <Space android:layout_width="30dp" android:layout_height="match_parent"/>
</LinearLayout>
</org.cyanogenmod.theme.chooserv2.ComponentCardView> \ No newline at end of file
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 58da714..8b32391 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -21,8 +21,13 @@
<dimen name="item_browse_height">260dp</dimen>
<dimen name="expanded_preview_margin">24dp</dimen>
<dimen name="navigation_button_width">80dp</dimen>
- <dimen name="theme_preview_width">264dp</dimen>
- <dimen name="theme_preview_height">300dp</dimen>
+
+ <!-- Theme fragment width should account for the fact that there will be cards which expand -->
+ <dimen name="theme_fragment_width">320dp</dimen>
+ <dimen name="theme_preview_width">272dp</dimen>
+ <!-- Should be same as theme_preview_width less the 9patch padding -->
+ <dimen name="wallpaper_preview_width">264dp</dimen>
+ <dimen name="theme_preview_height">264dp</dimen>
<dimen name="component_selection_cell_width">80dp</dimen>
<dimen name="component_selection_cell_height">112dp</dimen>
@@ -34,11 +39,12 @@
<dimen name="component_selection_bootani_content_height">142dp</dimen>
<dimen name="component_margin_top">24dp</dimen>
- <dimen name="card_padding_top">0dp</dimen>
+ <dimen name="card_padding_top">4dp</dimen>
<dimen name="card_padding_bottom">24dp</dimen>
- <dimen name="card_padding_left_right">24dp</dimen>
- <dimen name="collapsed_icon_card_margin_top">40dp</dimen>
- <dimen name="expanded_card_margin_top">24dp</dimen>
+ <dimen name="card_padding_left_right">28dp</dimen>
+ <dimen name="collapsed_font_card_margin_top">22dp</dimen>
+ <dimen name="collapsed_icon_card_margin_top">48dp</dimen>
+ <dimen name="expanded_card_margin_top">16dp</dimen>
<dimen name="wallpaper_card_height">168dp</dimen>
<!-- This is a hack. The viewpager needs to expand horizontally
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 6735f5c..e96e90a 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -47,7 +47,7 @@
<string name="unknown_author">Author unknown</string>
- <string name="font_preview_letters">AaBbCcDd123</string>
+ <string name="font_preview_letters">AaBbCcDd</string>
<string name="theme_installed_notification_title">%s installed</string>
<string name="theme_installed_notification_text">Theme successfully installed.</string>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 989786a..e172846 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -159,5 +159,7 @@
<item name="android:textAllCaps">true</item>
<item name="android:textSize">6pt</item>
<item name="android:textStyle">bold</item>
+ <item name="android:paddingTop">4dp</item>
+ <item name="android:paddingBottom">4dp</item>
</style>
</resources>
diff --git a/src/android/support/v4/view/ThemeViewPager.java b/src/android/support/v4/view/ThemeViewPager.java
index cf13871..9c9b540 100644
--- a/src/android/support/v4/view/ThemeViewPager.java
+++ b/src/android/support/v4/view/ThemeViewPager.java
@@ -16,7 +16,6 @@
package android.support.v4.view;
import android.content.Context;
-import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
@@ -26,6 +25,7 @@ import org.cyanogenmod.theme.chooser.R;
public class ThemeViewPager extends ViewPager {
private boolean mExpanded;
+ private boolean mIsAnimating;
private boolean mIsDragging = false;
private float mSlop;
@@ -45,11 +45,15 @@ public class ThemeViewPager extends ViewPager {
mExpanded = expanded;
}
+ public void setAnimating(boolean isAnimating) {
+ mIsAnimating = isAnimating;
+ }
+
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
boolean intercept = false;
- if (!mExpanded && isEnabled()) {
+ if (!mExpanded && isEnabled() && !mIsAnimating) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
intercept = !isTouchingApplyButton(ev);
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;