am 1a009336: DO NOT MERGE Dynamically determine size of customize tray.

* commit '1a0093367d567294eb6b3c82445cb42c305918ae':
  DO NOT MERGE Dynamically determine size of customize tray.
This commit is contained in:
Patrick Dubroy
2011-05-24 13:37:11 -07:00
committed by Android Git Automerger
10 changed files with 139 additions and 52 deletions

View File

@@ -40,15 +40,12 @@
launcher:wallpaperCellSpanX="@integer/customization_drawer_contents_wallpaperCellSpanX"
launcher:wallpaperCellCountX="@integer/customization_drawer_contents_wallpaperCellCountX"
launcher:widgetCellCountX="@integer/customization_drawer_contents_widgetCellCountX"
launcher:cellCountX="@integer/customization_drawer_contents_cellCountX"
launcher:cellCountY="@integer/customization_drawer_contents_cellCountY"
launcher:pageLayoutWidthGap="@dimen/customization_drawer_contents_pageLayoutWidthGap"
launcher:pageLayoutHeightGap="12dp"
launcher:pageLayoutPaddingTop="40dp"
launcher:pageLayoutPaddingBottom="25dp"
launcher:pageLayoutPaddingLeft="20dp"
launcher:pageLayoutPaddingRight="20dp"
launcher:pageLayoutMaxHeight="@dimen/customization_drawer_content_height" />
launcher:pageLayoutHeightGap="@dimen/customization_drawer_contents_pageLayoutHeightGap"
launcher:pageLayoutPaddingTop="@dimen/customization_drawer_contents_pageLayoutPaddingTop"
launcher:pageLayoutPaddingBottom="@dimen/customization_drawer_contents_pageLayoutPaddingBottom"
launcher:pageLayoutPaddingLeft="@dimen/customization_drawer_contents_pageLayoutPaddingLeft"
launcher:pageLayoutPaddingRight="@dimen/customization_drawer_contents_pageLayoutPaddingRight" />
</FrameLayout>
</LinearLayout>
</com.android.launcher2.CustomizeTrayTabHost>

View File

@@ -42,6 +42,6 @@
<include layout="@layout/customization_drawer"
android:id="@+id/customization_drawer"
android:layout_width="match_parent"
android:layout_height="@dimen/customization_drawer_height"
android:layout_height="wrap_content"
android:layout_gravity="bottom" />
</com.android.launcher2.DragLayer>

View File

@@ -19,9 +19,6 @@
or right while you're dragging. -->
<dimen name="scroll_zone">100dip</dimen>
<dimen name="customization_drawer_height">480dp</dimen>
<dimen name="customization_drawer_content_height">420dp</dimen>
<dimen name="all_apps_view_pageLayoutWidthGap">36dp</dimen>
<dimen name="all_apps_view_pageLayoutHeightGap">6dp</dimen>
<dimen name="all_apps_view_pageLayoutPaddingTop">20dp</dimen>
@@ -29,10 +26,15 @@
<dimen name="all_apps_view_pageLayoutPaddingLeft">40dp</dimen>
<dimen name="all_apps_view_pageLayoutPaddingRight">40dp</dimen>
<!-- Dimensions for customize should generally be the same as all apps, or very similar. -->
<dimen name="customization_drawer_contents_pageLayoutWidthGap">32dp</dimen>
<dimen name="customization_drawer_contents_pageLayoutHeightGap">12dp</dimen>
<dimen name="customization_drawer_contents_pageLayoutPaddingTop">20dp</dimen>
<dimen name="customization_drawer_contents_pageLayoutPaddingBottom">20dp</dimen>
<dimen name="customization_drawer_contents_pageLayoutPaddingLeft">40dp</dimen>
<dimen name="customization_drawer_contents_pageLayoutPaddingRight">40dp</dimen>
<integer name="customization_drawer_contents_wallpaperCellSpanX">3</integer>
<integer name="customization_drawer_contents_wallpaperCellCountX">12</integer>
<integer name="customization_drawer_contents_widgetCellCountX">14</integer>
<integer name="customization_drawer_contents_cellCountX">8</integer>
<integer name="customization_drawer_contents_cellCountY">3</integer>
<dimen name="customization_drawer_contents_pageLayoutWidthGap">32dp</dimen>
</resources>

View File

@@ -19,9 +19,6 @@
or right while you're dragging. -->
<dimen name="scroll_zone">40dp</dimen>
<dimen name="customization_drawer_height">800dp</dimen>
<dimen name="customization_drawer_content_height">420dp</dimen>
<dimen name="all_apps_view_pageLayoutWidthGap">36dp</dimen>
<dimen name="all_apps_view_pageLayoutHeightGap">36dp</dimen>
<dimen name="all_apps_view_pageLayoutPaddingTop">25dp</dimen>
@@ -32,7 +29,12 @@
<integer name="customization_drawer_contents_wallpaperCellSpanX">3</integer>
<integer name="customization_drawer_contents_wallpaperCellCountX">9</integer>
<integer name="customization_drawer_contents_widgetCellCountX">9</integer>
<integer name="customization_drawer_contents_cellCountX">5</integer>
<integer name="customization_drawer_contents_cellCountY">3</integer>
<!-- Dimensions for customize should generally be the same as all apps, or very similar. -->
<dimen name="customization_drawer_contents_pageLayoutWidthGap">36dp</dimen>
<dimen name="customization_drawer_contents_pageLayoutHeightGap">12dp</dimen>
<dimen name="customization_drawer_contents_pageLayoutPaddingTop">25dp</dimen>
<dimen name="customization_drawer_contents_pageLayoutPaddingBottom">25dp</dimen>
<dimen name="customization_drawer_contents_pageLayoutPaddingLeft">20dp</dimen>
<dimen name="customization_drawer_contents_pageLayoutPaddingRight">20dp</dimen>
</resources>

View File

@@ -82,4 +82,14 @@
<!-- How much the content view of an alert dialog should be inset (currently used
for the WallpaperChooser in XLarge mode) -->
<dimen name="alert_dialog_content_inset">0dp</dimen>
<!-- The actual number of rows/columns will be determined dynamically based on the screen
size, but in portrait we want to cap the rows at 3, otherwise it looks weird. -->
<integer name="customization_drawer_contents_maxCellCountY">3</integer>
<!-- The percentage of vertical space that the customize tray should try to fill. -->
<integer name="customization_drawer_verticalFillPercentage">65</integer>
<!-- Max number of rows in all apps, because too many looks weird. -->
<integer name="all_apps_view_maxCellCountY">6</integer>
</resources>

View File

@@ -70,6 +70,8 @@ public class AllAppsPagedView extends PagedViewWithDraggableItems implements All
private int mLastMeasureWidth = -1;
private int mLastMeasureHeight = -1;
private int mMaxCellCountY;
public AllAppsPagedView(Context context) {
this(context, null);
}
@@ -87,7 +89,7 @@ public class AllAppsPagedView extends PagedViewWithDraggableItems implements All
a.recycle();
setSoundEffectsEnabled(false);
Resources r = context.getResources();
final Resources r = context.getResources();
setDragSlopeThreshold(
r.getInteger(R.integer.config_allAppsDrawerDragSlopeThreshold) / 100.0f);
@@ -95,6 +97,7 @@ public class AllAppsPagedView extends PagedViewWithDraggableItems implements All
PagedViewCellLayout layout = new PagedViewCellLayout(getContext());
setupPage(layout);
mPageContentWidth = layout.getContentWidth();
mMaxCellCountY = r.getInteger(R.integer.all_apps_view_maxCellCountY);
}
@Override
@@ -174,7 +177,19 @@ public class AllAppsPagedView extends PagedViewWithDraggableItems implements All
availableHeight -= mPageLayoutPaddingTop + mPageLayoutPaddingBottom;
availableHeight -= cellHeight; // Assume at least one row
availableHeight -= screenHeight * 0.16f;
return (1 + availableHeight / (cellHeight + mPageLayoutHeightGap));
if (availableHeight > 0) {
return Math.min(mMaxCellCountY,
1 + availableHeight / (cellHeight + mPageLayoutHeightGap));
}
return 0;
}
int getCellCountX() {
return mCellCountX;
}
int getCellCountY() {
return mCellCountY;
}
void allowHardwareLayerCreation() {

View File

@@ -108,6 +108,9 @@ public class CustomizePagedView extends PagedViewWithDraggableItems
// The max number of wallpaper cells to take a "page" of wallpaper items
private int mMaxWallpaperCellHSpan;
// The maximum number of rows in a paged view.
private int mMaxCellCountY;
// The raw sources of data for each of the different tabs of the customization page
private List<AppWidgetProviderInfo> mWidgetList;
private List<ResolveInfo> mShortcutList;
@@ -143,7 +146,10 @@ public class CustomizePagedView extends PagedViewWithDraggableItems
private int[] mDragViewOrigin = new int[2];
private int mPageContentWidth;
private int mPageContentWidth = -1;
private int mPageContentHeight = -1;
private AllAppsPagedView mAllAppsPagedView;
public CustomizePagedView(Context context) {
this(context, null, 0);
@@ -162,10 +168,6 @@ public class CustomizePagedView extends PagedViewWithDraggableItems
mMaxWallpaperCellHSpan = a.getInt(R.styleable.CustomizePagedView_wallpaperCellCountX, 8);
mMaxWidgetsCellHSpan = a.getInt(R.styleable.CustomizePagedView_widgetCellCountX, 8);
a.recycle();
a = context.obtainStyledAttributes(attrs, R.styleable.PagedView, defStyle, 0);
mCellCountX = a.getInt(R.styleable.PagedView_cellCountX, 7);
mCellCountY = a.getInt(R.styleable.PagedView_cellCountY, 4);
a.recycle();
mCustomizationType = CustomizationType.WidgetCustomization;
mWidgetPages = new ArrayList<ArrayList<AppWidgetProviderInfo>>();
@@ -176,6 +178,8 @@ public class CustomizePagedView extends PagedViewWithDraggableItems
setDragSlopeThreshold(
r.getInteger(R.integer.config_customizationDrawerDragSlopeThreshold) / 100.0f);
mMaxCellCountY = r.getInteger(R.integer.customization_drawer_contents_maxCellCountY);
setVisibility(View.GONE);
setSoundEffectsEnabled(false);
setupWorkspaceLayout();
@@ -188,29 +192,44 @@ public class CustomizePagedView extends PagedViewWithDraggableItems
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
protected void onMeasure(int widthSpec, int heightSpec) {
// Base the size of this control on the size of the All Apps view.
final int cellCountX = mAllAppsPagedView.getCellCountX();
final int cellCountY = Math.min(mAllAppsPagedView.getCellCountY(), mMaxCellCountY);
final int widthSize = MeasureSpec.getSize(widthMeasureSpec);
final int heightSize = MeasureSpec.getSize(heightMeasureSpec);
if (cellCountX != mCellCountX || cellCountY != mCellCountY) {
mCellCountX = cellCountX;
mCellCountY = cellCountY;
if (mFirstMeasure) {
mFirstMeasure = false;
// TODO: actually calculate mCellCountX/mCellCountY as some function of
// widthSize and heightSize
//mCellCountX = ?
//mCellCountY = ?
// Since mCellCountX/mCellCountY changed, we need to update the pages
invalidatePageData();
// Create a dummy page and set it up to find out the content width (used by our parent)
// Create a dummy page and set it up to determine our size.
// The size is based on the app shortcuts tab having the same dimensions as All Apps.
PagedViewCellLayout layout = new PagedViewCellLayout(getContext());
setupPage(layout);
mPageContentWidth = layout.getContentWidth();
mPageContentHeight = layout.getContentHeight();
mMinPageWidth = layout.getWidthBeforeFirstLayout();
}
if (mPageContentHeight > 0) {
// Lock our height to the size of the page content
final int h = mPageContentHeight + mPageLayoutPaddingTop + mPageLayoutPaddingBottom;
heightSpec = MeasureSpec.makeMeasureSpec(h, MeasureSpec.EXACTLY);
}
super.onMeasure(widthSpec, heightSpec);
mFirstMeasure = false;
}
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
if (mFirstLayout) {
invalidatePageData();
// invalidatePageData() is what causes the child pages to be created. We need the
// children to be measured before layout, so force a new measure here.
measure(MeasureSpec.makeMeasureSpec(getMeasuredWidth(), MeasureSpec.EXACTLY),
MeasureSpec.makeMeasureSpec(getMeasuredHeight(), MeasureSpec.EXACTLY));
}
super.onLayout(changed, left, top, right, bottom);
mFirstLayout = false;
}
public void setLauncher(Launcher launcher) {
@@ -219,6 +238,10 @@ public class CustomizePagedView extends PagedViewWithDraggableItems
mPackageManager = context.getPackageManager();
}
public void setAllAppsPagedView(AllAppsPagedView view) {
mAllAppsPagedView = view;
}
/**
* Sets the list of applications that launcher has loaded.
*/

View File

@@ -41,9 +41,14 @@ public class CustomizeTrayTabHost extends TabHost implements LauncherTransitiona
private boolean mFirstLayout = true;
// How much of the vertical space this control should attempt to fill
private float mVerticalFillPercentage;
private final LayoutInflater mInflater;
private Context mContext;
private CustomizePagedView mCustomizePagedView;
public CustomizeTrayTabHost(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
@@ -52,15 +57,17 @@ public class CustomizeTrayTabHost extends TabHost implements LauncherTransitiona
@Override
protected void onFinishInflate() {
final Resources res = getResources();
setup();
final CustomizePagedView customizePagedView =
mCustomizePagedView =
(CustomizePagedView) findViewById(R.id.customization_drawer_tab_contents);
// Configure tabs
TabContentFactory contentFactory = new TabContentFactory() {
public View createTabContent(String tag) {
return customizePagedView;
return mCustomizePagedView;
}
};
@@ -82,26 +89,30 @@ public class CustomizeTrayTabHost extends TabHost implements LauncherTransitiona
tabView.setText(mContext.getString(R.string.shortcuts_tab_label));
addTab(newTabSpec(SHORTCUTS_TAG)
.setIndicator(tabView).setContent(contentFactory));
mVerticalFillPercentage =
res.getInteger(R.integer.customization_drawer_verticalFillPercentage) / 100f;
setOnTabChangedListener(new OnTabChangeListener() {
public void onTabChanged(String tabId) {
final CustomizePagedView.CustomizationType newType =
getCustomizeFilterForTabTag(tabId);
if (newType != customizePagedView.getCustomizationFilter()) {
if (newType != mCustomizePagedView.getCustomizationFilter()) {
// animate the changing of the tab content by fading pages in and out
final Resources res = getResources();
final int duration = res.getInteger(R.integer.config_tabTransitionTime);
final float alpha = customizePagedView.getAlpha();
ValueAnimator alphaAnim = ObjectAnimator.ofFloat(customizePagedView,
final float alpha = mCustomizePagedView.getAlpha();
ValueAnimator alphaAnim = ObjectAnimator.ofFloat(mCustomizePagedView,
"alpha", alpha, 0.0f);
alphaAnim.setDuration(duration);
alphaAnim.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
customizePagedView.setCustomizationFilter(newType);
mCustomizePagedView.setCustomizationFilter(newType);
final float alpha = customizePagedView.getAlpha();
final float alpha = mCustomizePagedView.getAlpha();
ValueAnimator alphaAnim = ObjectAnimator.ofFloat(
customizePagedView, "alpha", alpha, 1.0f);
mCustomizePagedView, "alpha", alpha, 1.0f);
alphaAnim.setDuration(duration);
alphaAnim.start();
}
@@ -132,6 +143,22 @@ public class CustomizeTrayTabHost extends TabHost implements LauncherTransitiona
}
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
// If there's extra room, try to grow to fill it
if (MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.AT_MOST) {
final int availableHeight = MeasureSpec.getSize(heightMeasureSpec);
final int finalHeight = Math.max(getMeasuredHeight(),
(int) (availableHeight * mVerticalFillPercentage));
// Measure a second time with EXACTLY so that we get sized correctly
heightMeasureSpec = MeasureSpec.makeMeasureSpec(finalHeight, MeasureSpec.EXACTLY);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
if (mFirstLayout) {

View File

@@ -930,6 +930,7 @@ public final class Launcher extends Activity
if (mCustomizePagedView != null) {
mCustomizePagedView.setLauncher(this);
mCustomizePagedView.setDragController(dragController);
mCustomizePagedView.setAllAppsPagedView(mAllAppsPagedView);
} else {
ImageView hotseatLeft = (ImageView) findViewById(R.id.hotseat_left);
hotseatLeft.setContentDescription(mHotseatLabels[0]);

View File

@@ -259,8 +259,18 @@ public class PagedViewCellLayout extends ViewGroup implements Page {
return getWidthBeforeFirstLayout() - (mCellWidth - Utilities.getIconContentSize());
}
int getContentHeight() {
if (mCellCountY > 0) {
return mCellCountY * mCellHeight + (mCellCountY - 1) * Math.max(0, mHeightGap);
}
return 0;
}
int getWidthBeforeFirstLayout() {
return mCellCountX * mCellWidth + (mCellCountX - 1) * mWidthGap;
if (mCellCountX > 0) {
return mCellCountX * mCellWidth + (mCellCountX - 1) * Math.max(0, mWidthGap);
}
return 0;
}
@Override