Initial changes to support AllApps on various form factors.
Change-Id: I7bacb36f8a70c8ac920426899193a7bb7b7abbcb
This commit is contained in:
parent
d77057a77b
commit
67ca7e4cc5
|
@ -36,8 +36,7 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="center"
|
||||
launcher:defaultScreen="@integer/config_workspaceDefaultScreen"
|
||||
launcher:pageIndicator="@id/page_indicator" />
|
||||
launcher:defaultScreen="@integer/config_workspaceDefaultScreen" />
|
||||
|
||||
<include layout="@layout/hotseat"
|
||||
android:id="@+id/hotseat"
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
launcher:defaultScreen="@integer/config_workspaceDefaultScreen"
|
||||
launcher:pageIndicator="@id/page_indicator">
|
||||
launcher:pageIndicator="@+id/page_indicator">
|
||||
</com.android.launcher3.Workspace>
|
||||
|
||||
<include layout="@layout/hotseat"
|
||||
|
|
|
@ -56,13 +56,12 @@
|
|||
android:id="@+id/apps_customize_pane_content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginBottom="@dimen/apps_customize_page_indicator_offset"
|
||||
launcher:widgetCountX="@integer/apps_customize_widget_cell_count_x"
|
||||
launcher:widgetCountY="@integer/apps_customize_widget_cell_count_y"
|
||||
launcher:clingFocusedX="@integer/apps_customize_cling_focused_x"
|
||||
launcher:clingFocusedY="@integer/apps_customize_cling_focused_y"
|
||||
launcher:maxGap="@dimen/workspace_max_gap"
|
||||
launcher:pageIndicator="@+id/page_indicator" />
|
||||
launcher:pageIndicator="@+id/apps_customize_page_indicator" />
|
||||
<FrameLayout
|
||||
android:id="@+id/animation_buffer"
|
||||
android:layout_width="match_parent"
|
||||
|
@ -70,12 +69,11 @@
|
|||
android:background="#FF000000"
|
||||
android:visibility="gone" />
|
||||
<include
|
||||
android:id="@+id/page_indicator"
|
||||
android:id="@+id/apps_customize_page_indicator"
|
||||
layout="@layout/page_indicator"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="bottom|center_horizontal"
|
||||
android:layout_marginBottom="@dimen/apps_customize_page_indicator_margin" />
|
||||
android:layout_gravity="center_horizontal|bottom" />
|
||||
</FrameLayout>
|
||||
</LinearLayout>
|
||||
</com.android.launcher3.AppsCustomizeTabHost>
|
||||
|
|
|
@ -15,12 +15,6 @@
|
|||
-->
|
||||
|
||||
<resources>
|
||||
<!-- AppsCustomize -->
|
||||
<dimen name="apps_customize_pageLayoutWidthGap">36dp</dimen>
|
||||
<dimen name="apps_customize_pageLayoutHeightGap">8dp</dimen>
|
||||
<dimen name="apps_customize_pageLayoutPaddingTop">20dp</dimen>
|
||||
<dimen name="apps_customize_pageLayoutPaddingBottom">14dp</dimen>
|
||||
|
||||
<!-- QSB -->
|
||||
<dimen name="toolbar_button_vertical_padding">12dip</dimen>
|
||||
<dimen name="toolbar_button_horizontal_padding">20dip</dimen>
|
||||
|
|
|
@ -1,4 +1,10 @@
|
|||
<resources>
|
||||
<!-- Dynamic Grid -->
|
||||
<integer name="config_dynamic_grid_max_long_edge_cell_count">6</integer>
|
||||
<integer name="config_dynamic_grid_max_short_edge_cell_count">5</integer>
|
||||
<integer name="config_dynamic_grid_min_edge_cell_count">3</integer>
|
||||
|
||||
<!-- Miscellaneous -->
|
||||
<bool name="config_largeHeap">false</bool>
|
||||
<bool name="is_tablet">false</bool>
|
||||
<bool name="is_large_tablet">false</bool>
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
<dimen name="dynamic_grid_search_bar_height">48dp</dimen>
|
||||
<dimen name="dynamic_grid_page_indicator_height">24dp</dimen>
|
||||
<dimen name="dynamic_grid_icon_drawable_padding">4dp</dimen>
|
||||
<dimen name="dynamic_grid_all_apps_cell_padding">18dp</dimen>
|
||||
<dimen name="dynamic_grid_workspace_page_spacing">8dp</dimen>
|
||||
|
||||
<!-- Wallpaper picker -->
|
||||
|
|
|
@ -187,6 +187,7 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen
|
|||
private PagedViewCellLayout mWidgetSpacingLayout;
|
||||
private int mNumAppsPages;
|
||||
private int mNumWidgetPages;
|
||||
private Rect mAllAppsPadding = new Rect();
|
||||
|
||||
// Relating to the scroll and overscroll effects
|
||||
Workspace.ZInterpolator mZInterpolator = new Workspace.ZInterpolator(0.5f);
|
||||
|
@ -293,6 +294,13 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen
|
|||
grid.edgeMarginPx, 2 * grid.edgeMarginPx);
|
||||
}
|
||||
|
||||
void setAllAppsPadding(Rect r) {
|
||||
mAllAppsPadding.set(r);
|
||||
}
|
||||
void setWidgetsPageIndicatorPadding(int pageIndicatorHeight) {
|
||||
mPageLayoutPaddingBottom = pageIndicatorHeight;
|
||||
}
|
||||
|
||||
/** Returns the item index of the center item on this page so that we can restore to this
|
||||
* item index when we rotate. */
|
||||
private int getMiddleComponentIndexOnCurrentPage() {
|
||||
|
@ -995,6 +1003,8 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen
|
|||
int heightSpec = MeasureSpec.makeMeasureSpec(mContentHeight, MeasureSpec.AT_MOST);
|
||||
layout.setMinimumWidth(getPageContentWidth());
|
||||
layout.measure(widthSpec, heightSpec);
|
||||
layout.setPadding(mAllAppsPadding.left, mAllAppsPadding.top, mAllAppsPadding.right,
|
||||
mAllAppsPadding.bottom);
|
||||
setVisibilityOnChildren(layout, View.VISIBLE);
|
||||
}
|
||||
|
||||
|
|
|
@ -91,6 +91,11 @@ class DeviceProfile {
|
|||
int iconDrawablePaddingPx;
|
||||
int cellWidthPx;
|
||||
int cellHeightPx;
|
||||
int allAppsIconSizePx;
|
||||
int allAppsIconTextSizePx;
|
||||
int allAppsCellWidthPx;
|
||||
int allAppsCellHeightPx;
|
||||
int allAppsCellPaddingPx;
|
||||
int folderBackgroundOffset;
|
||||
int folderIconSizePx;
|
||||
int folderCellWidthPx;
|
||||
|
@ -151,6 +156,8 @@ class DeviceProfile {
|
|||
res.getDimensionPixelSize(R.dimen.dynamic_grid_page_indicator_height);
|
||||
defaultPageSpacingPx =
|
||||
res.getDimensionPixelSize(R.dimen.dynamic_grid_workspace_page_spacing);
|
||||
allAppsCellPaddingPx =
|
||||
res.getDimensionPixelSize(R.dimen.dynamic_grid_all_apps_cell_padding);
|
||||
|
||||
// Interpolate the rows
|
||||
for (DeviceProfile p : profiles) {
|
||||
|
@ -177,6 +184,8 @@ class DeviceProfile {
|
|||
points.add(new DeviceProfileQuery(p.minWidthDps, p.minHeightDps, p.iconSize));
|
||||
}
|
||||
iconSize = invDistWeightedInterpolate(minWidth, minHeight, points);
|
||||
// AllApps uses the original non-scaled icon size
|
||||
allAppsIconSizePx = DynamicGrid.pxFromDp(iconSize, dm);
|
||||
|
||||
// Interpolate the icon text size
|
||||
points.clear();
|
||||
|
@ -186,6 +195,8 @@ class DeviceProfile {
|
|||
iconTextSize = invDistWeightedInterpolate(minWidth, minHeight, points);
|
||||
iconDrawablePaddingOriginalPx =
|
||||
res.getDimensionPixelSize(R.dimen.dynamic_grid_icon_drawable_padding);
|
||||
// AllApps uses the original non-scaled icon text size
|
||||
allAppsIconTextSizePx = DynamicGrid.pxFromDp(iconTextSize, dm);
|
||||
|
||||
// Interpolate the hotseat icon size
|
||||
points.clear();
|
||||
|
@ -309,14 +320,23 @@ class DeviceProfile {
|
|||
CellLayout.LANDSCAPE : CellLayout.PORTRAIT);
|
||||
int pageIndicatorOffset =
|
||||
resources.getDimensionPixelSize(R.dimen.apps_customize_page_indicator_offset);
|
||||
if (isLandscape) {
|
||||
allAppsNumRows = (availableHeightPx - pageIndicatorOffset - 4 * edgeMarginPx) /
|
||||
(iconSizePx + iconTextSizePx + 2 * edgeMarginPx);
|
||||
} else {
|
||||
allAppsNumRows = (int) numRows + 1;
|
||||
}
|
||||
allAppsNumCols = (availableWidthPx - padding.left - padding.right - 2 * edgeMarginPx) /
|
||||
(iconSizePx + 2 * edgeMarginPx);
|
||||
allAppsCellWidthPx = allAppsIconSizePx;
|
||||
allAppsCellHeightPx = allAppsIconSizePx + drawablePadding + iconTextSizePx;
|
||||
int maxLongEdgeCellCount =
|
||||
resources.getInteger(R.integer.config_dynamic_grid_max_long_edge_cell_count);
|
||||
int maxShortEdgeCellCount =
|
||||
resources.getInteger(R.integer.config_dynamic_grid_max_short_edge_cell_count);
|
||||
int minEdgeCellCount =
|
||||
resources.getInteger(R.integer.config_dynamic_grid_min_edge_cell_count);
|
||||
int maxRows = (isLandscape ? maxShortEdgeCellCount : maxLongEdgeCellCount);
|
||||
int maxCols = (isLandscape ? maxLongEdgeCellCount : maxShortEdgeCellCount);
|
||||
|
||||
allAppsNumRows = (availableHeightPx - pageIndicatorHeightPx) /
|
||||
(allAppsCellHeightPx + allAppsCellPaddingPx);
|
||||
allAppsNumRows = Math.max(minEdgeCellCount, Math.min(maxRows, allAppsNumRows));
|
||||
allAppsNumCols = (availableWidthPx) /
|
||||
(allAppsCellWidthPx + allAppsCellPaddingPx);
|
||||
allAppsNumCols = Math.max(minEdgeCellCount, Math.min(maxCols, allAppsNumCols));
|
||||
}
|
||||
|
||||
void updateFromConfiguration(Context context, Resources resources, int wPx, int hPx,
|
||||
|
@ -580,6 +600,45 @@ class DeviceProfile {
|
|||
pageIndicator.setLayoutParams(lp);
|
||||
}
|
||||
}
|
||||
|
||||
AppsCustomizeTabHost host = (AppsCustomizeTabHost)
|
||||
launcher.findViewById(R.id.apps_customize_pane);
|
||||
if (host != null) {
|
||||
// Center the all apps page indicator
|
||||
int pageIndicatorHeight = (int) (pageIndicatorHeightPx * Math.min(1f,
|
||||
(allAppsIconSizePx / DynamicGrid.DEFAULT_ICON_SIZE_PX)));
|
||||
pageIndicator = host.findViewById(R.id.apps_customize_page_indicator);
|
||||
if (pageIndicator != null) {
|
||||
lp = (FrameLayout.LayoutParams) pageIndicator.getLayoutParams();
|
||||
lp.gravity = Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM;
|
||||
lp.width = LayoutParams.WRAP_CONTENT;
|
||||
lp.height = pageIndicatorHeight;
|
||||
pageIndicator.setLayoutParams(lp);
|
||||
}
|
||||
|
||||
AppsCustomizePagedView pagedView = (AppsCustomizePagedView)
|
||||
host.findViewById(R.id.apps_customize_pane_content);
|
||||
padding = new Rect();
|
||||
if (pagedView != null) {
|
||||
// Constrain the dimensions of all apps so that it does not span the full width
|
||||
int paddingLR = (availableWidthPx - (allAppsCellWidthPx * allAppsNumCols)) /
|
||||
(2 * (allAppsNumCols + 1));
|
||||
int paddingTB = (availableHeightPx - (allAppsCellHeightPx * allAppsNumRows)) /
|
||||
(2 * (allAppsNumRows + 1));
|
||||
paddingLR = Math.min(paddingLR, (int)((paddingLR + paddingTB) * 0.75f));
|
||||
paddingTB = Math.min(paddingTB, (int)((paddingLR + paddingTB) * 0.75f));
|
||||
int maxAllAppsWidth = (allAppsNumCols * (allAppsCellWidthPx + 2 * paddingLR));
|
||||
int gridPaddingLR = (availableWidthPx - maxAllAppsWidth) / 2;
|
||||
if (gridPaddingLR > (allAppsCellWidthPx / 4)) {
|
||||
padding.left = padding.right = gridPaddingLR;
|
||||
}
|
||||
// The icons are centered, so we can't just offset by the page indicator height
|
||||
// because the empty space will actually be pageIndicatorHeight + paddingTB
|
||||
padding.bottom = Math.max(0, pageIndicatorHeight - paddingTB);
|
||||
pagedView.setAllAppsPadding(padding);
|
||||
pagedView.setWidgetsPageIndicatorPadding(pageIndicatorHeight);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -591,6 +650,10 @@ public class DynamicGrid {
|
|||
private float mMinWidth;
|
||||
private float mMinHeight;
|
||||
|
||||
// This is a static that we use for the default icon size on a 4/5-inch phone
|
||||
static float DEFAULT_ICON_SIZE_DP = 60;
|
||||
static float DEFAULT_ICON_SIZE_PX = 0;
|
||||
|
||||
public static float dpiFromPx(int size, DisplayMetrics metrics){
|
||||
float densityRatio = (float) metrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT;
|
||||
return (size / densityRatio);
|
||||
|
@ -612,6 +675,7 @@ public class DynamicGrid {
|
|||
ArrayList<DeviceProfile> deviceProfiles =
|
||||
new ArrayList<DeviceProfile>();
|
||||
boolean hasAA = !AppsCustomizePagedView.DISABLE_ALL_APPS;
|
||||
DEFAULT_ICON_SIZE_PX = pxFromDp(DEFAULT_ICON_SIZE_DP, dm);
|
||||
// Our phone profiles include the bar sizes in each orientation
|
||||
deviceProfiles.add(new DeviceProfile("Super Short Stubby",
|
||||
255, 300, 2, 3, 48, 13, (hasAA ? 5 : 4), 48));
|
||||
|
@ -624,7 +688,7 @@ public class DynamicGrid {
|
|||
deviceProfiles.add(new DeviceProfile("Nexus S",
|
||||
296, 491.33f, 4, 4, 48, 13, (hasAA ? 5 : 4), 48));
|
||||
deviceProfiles.add(new DeviceProfile("Nexus 4",
|
||||
359, 518, 4, 4, 60, 13, (hasAA ? 5 : 4), 56));
|
||||
359, 518, 4, 4, DEFAULT_ICON_SIZE_DP, 13, (hasAA ? 5 : 4), 56));
|
||||
// The tablet profile is odd in that the landscape orientation
|
||||
// also includes the nav bar on the side
|
||||
deviceProfiles.add(new DeviceProfile("Nexus 7",
|
||||
|
|
|
@ -20,7 +20,7 @@ import android.content.Context;
|
|||
import android.graphics.Bitmap;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Region;
|
||||
import android.graphics.Region.Op;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.TypedValue;
|
||||
import android.widget.TextView;
|
||||
|
@ -62,7 +62,7 @@ public class PagedViewIcon extends TextView {
|
|||
// Ensure we are using the right text size
|
||||
LauncherAppState app = LauncherAppState.getInstance();
|
||||
DeviceProfile grid = app.getDynamicGrid().getDeviceProfile();
|
||||
setTextSize(TypedValue.COMPLEX_UNIT_PX, grid.iconTextSizePx);
|
||||
setTextSize(TypedValue.COMPLEX_UNIT_PX, grid.allAppsIconTextSizePx);
|
||||
}
|
||||
|
||||
public void applyFromApplicationInfo(AppInfo info, boolean scaleUp,
|
||||
|
@ -72,8 +72,9 @@ public class PagedViewIcon extends TextView {
|
|||
|
||||
mIcon = info.iconBitmap;
|
||||
mPressedCallback = cb;
|
||||
setCompoundDrawables(null, Utilities.createIconDrawable(mIcon),
|
||||
null, null);
|
||||
Drawable icon = Utilities.createIconDrawable(mIcon);
|
||||
icon.setBounds(0, 0, grid.allAppsIconSizePx, grid.allAppsIconSizePx);
|
||||
setCompoundDrawables(null, icon, null, null);
|
||||
setCompoundDrawablePadding(grid.iconDrawablePaddingPx);
|
||||
setText(info.title);
|
||||
setTag(info);
|
||||
|
|
Loading…
Reference in New Issue