mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-28 15:56:49 +00:00
* commit '0544935b3d54ed4fd97d6fb0b371cd19861f4325': DO NOT MERGE Dynamically determine size of customize tray.
This commit is contained in:
@@ -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>
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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.
|
||||
*/
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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]);
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user