diff --git a/res/layout/widget_cell.xml b/res/layout/widget_cell.xml
index ab23b842ed..196dfca666 100644
--- a/res/layout/widget_cell.xml
+++ b/res/layout/widget_cell.xml
@@ -19,10 +19,11 @@
android:layout_width="@dimen/widget_preview_container_width"
android:layout_height="@dimen/widget_cell_height"
android:layout_weight="1"
- android:layout_marginRight="@dimen/widget_row_divider"
+ android:layout_marginEnd="@dimen/widget_row_divider"
android:orientation="vertical"
android:background="@color/widgets_cell_color"
- android:focusable="true">
+ android:focusable="true"
+ android:gravity="center_horizontal">
-
-
+
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 0d066bb7a2..5447371a4f 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -88,7 +88,7 @@
8dp
- 120dp
+ 130dp
8dp
8dp
8dp
@@ -100,10 +100,10 @@
16dp
- 136dp
+ 146dp
150dp
8dp
- 1dp
+ 2dp
0dp
diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java
index 918517ebd3..c1dd85961f 100644
--- a/src/com/android/launcher3/DeviceProfile.java
+++ b/src/com/android/launcher3/DeviceProfile.java
@@ -80,12 +80,11 @@ public class DeviceProfile {
int defaultLayoutId;
boolean isLandscape;
- boolean isTablet;
- boolean isLargeTablet;
+ public boolean isTablet;
+ public boolean isLargeTablet;
public boolean isLayoutRtl;
boolean transposeLayoutWithOrientation;
-
int desiredWorkspaceLeftRightMarginPx;
public int edgeMarginPx;
Rect defaultWidgetPadding;
diff --git a/src/com/android/launcher3/widget/WidgetCell.java b/src/com/android/launcher3/widget/WidgetCell.java
index 27b7e6df5d..877937151b 100644
--- a/src/com/android/launcher3/widget/WidgetCell.java
+++ b/src/com/android/launcher3/widget/WidgetCell.java
@@ -49,7 +49,16 @@ public class WidgetCell extends LinearLayout implements OnLayoutChangeListener {
private static final boolean DEBUG = false;
private static final int FADE_IN_DURATION_MS = 90;
- private int mPresetPreviewSize;
+
+ /** Widget cell width is calculated by multiplying this factor to grid cell width. */
+ private static final float WIDTH_SCALE = 2.8f;
+
+ /** Widget preview width is calculated by multiplying this factor to the widget cell width. */
+ private static final float PREVIEW_SCALE = 0.9f;
+
+ private static int mPresetPreviewSize;
+ private static int mSize;
+ private static int mDividerWidth;
private ImageView mWidgetImage;
private TextView mWidgetName;
@@ -76,12 +85,22 @@ public class WidgetCell extends LinearLayout implements OnLayoutChangeListener {
final Resources r = context.getResources();
mDimensionsFormatString = r.getString(R.string.widget_dims_format);
- mPresetPreviewSize = r.getDimensionPixelSize(R.dimen.widget_preview_size);
+ setContainerWidth();
setWillNotDraw(false);
setClipToPadding(false);
setAccessibilityDelegate(LauncherAppState.getInstance().getAccessibilityDelegate());
+ }
+ private void setContainerWidth() {
+ // Do nothing if already set
+ if (mSize > 0) {
+ return;
+ }
+ DeviceProfile profile = LauncherAppState.getInstance().getDynamicGrid().getDeviceProfile();
+ mSize = (int) (profile.cellWidthPx * WIDTH_SCALE);
+ mPresetPreviewSize = (int) (profile.cellWidthPx * WIDTH_SCALE * PREVIEW_SCALE);
+ mDividerWidth = getResources().getDimensionPixelSize(R.dimen.widget_row_divider);
}
@Override
@@ -98,6 +117,12 @@ public class WidgetCell extends LinearLayout implements OnLayoutChangeListener {
mWidgetDims = ((TextView) findViewById(R.id.widget_dims));
}
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ super.onMeasure(MeasureSpec.makeMeasureSpec(mSize, MeasureSpec.EXACTLY),
+ MeasureSpec.makeMeasureSpec(mSize, MeasureSpec.EXACTLY));
+ }
+
/**
* Called to clear the view and free attached resources. (e.g., {@link Bitmap}
*/
@@ -108,6 +133,7 @@ public class WidgetCell extends LinearLayout implements OnLayoutChangeListener {
mWidgetImage.setImageDrawable(null);
mWidgetName.setText(null);
mWidgetDims.setText(null);
+ setSeparator(true);
if (mActiveRequest != null) {
mActiveRequest.cleanup();
@@ -228,4 +254,11 @@ public class WidgetCell extends LinearLayout implements OnLayoutChangeListener {
}
return "";
}
+
+ public void setSeparator(boolean enable) {
+ LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) getLayoutParams();
+ lp.setMarginEnd(enable? mDividerWidth : 0);
+ setLayoutParams(lp);
+ requestLayout();
+ }
}
diff --git a/src/com/android/launcher3/widget/WidgetRowView.java b/src/com/android/launcher3/widget/WidgetRowView.java
new file mode 100644
index 0000000000..05760ae48d
--- /dev/null
+++ b/src/com/android/launcher3/widget/WidgetRowView.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.launcher3.widget;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.util.AttributeSet;
+import android.widget.LinearLayout;
+
+
+import com.android.launcher3.DeviceProfile;
+import com.android.launcher3.DynamicGrid;
+import com.android.launcher3.LauncherAppState;
+
+/**
+ * Represents the individual cell of the widget inside the widget tray.
+ */
+public class WidgetRowView extends LinearLayout {
+
+ private static final int PRESET_INDENT_SIZE_TABLET = 56;
+
+ /** Widget row width is calculated by multiplying this factor to grid cell width. */
+ private static final float HEIGHT_SCALE = 2.8f;
+
+ static int sIndent = 0;
+ static int sHeight = 0;
+
+ public WidgetRowView(Context context) {
+ this(context, null);
+ }
+
+ public WidgetRowView(Context context, AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public WidgetRowView(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ setContainerHeight();
+ setWillNotDraw(false);
+ setClipToPadding(false);
+ setAccessibilityDelegate(LauncherAppState.getInstance().getAccessibilityDelegate());
+ }
+
+ /**
+ * Sets the widget cell container size based on the physical dimension of the device.
+ */
+ private void setContainerHeight() {
+ // Do nothing if already set
+ if (sHeight > 0) {
+ return;
+ }
+
+ Resources r = getResources();
+ DeviceProfile profile = LauncherAppState.getInstance().getDynamicGrid().getDeviceProfile();
+ if (profile.isLargeTablet || profile.isTablet) {
+ sIndent = DynamicGrid.pxFromDp(PRESET_INDENT_SIZE_TABLET, r.getDisplayMetrics());
+ }
+ sHeight = (int) (profile.cellWidthPx * HEIGHT_SCALE);
+ }
+}
diff --git a/src/com/android/launcher3/widget/WidgetsListAdapter.java b/src/com/android/launcher3/widget/WidgetsListAdapter.java
index a7728a11b7..8b0a43b2f4 100644
--- a/src/com/android/launcher3/widget/WidgetsListAdapter.java
+++ b/src/com/android/launcher3/widget/WidgetsListAdapter.java
@@ -23,6 +23,7 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
+import android.widget.LinearLayout;
import android.widget.TextView;
import com.android.launcher3.IconCache;
@@ -105,6 +106,10 @@ public class WidgetsListAdapter extends Adapter {
// set up touch.
widget.setOnClickListener(mIconClickListener);
widget.setOnLongClickListener(mIconLongClickListener);
+ // Add a devider if it is not the last item.
+ if (i == diff - 1) {
+ widget.setSeparator(false);
+ }
row.addView(widget);
}
} else if (diff < 0) {
@@ -156,6 +161,11 @@ public class WidgetsListAdapter extends Adapter {
ViewGroup container = (ViewGroup) mLayoutInflater.inflate(
R.layout.widgets_list_row_view, parent, false);
+ WidgetRowView row = (WidgetRowView) container.findViewById(R.id.widget_row);
+ LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) row.getLayoutParams();
+ lp.setMarginStart(WidgetRowView.sIndent);
+ lp.height = WidgetRowView.sHeight;
+ row.setLayoutParams(lp);
return new WidgetsRowViewHolder(container);
}