diff options
-rw-r--r-- | res/layout/widget_cell.xml | 6 | ||||
-rw-r--r-- | res/layout/widgets_list_row_view.xml | 11 | ||||
-rw-r--r-- | res/values/dimens.xml | 6 | ||||
-rw-r--r-- | src/com/android/launcher3/DeviceProfile.java | 5 | ||||
-rw-r--r-- | src/com/android/launcher3/widget/WidgetCell.java | 37 | ||||
-rw-r--r-- | src/com/android/launcher3/widget/WidgetRowView.java | 74 | ||||
-rw-r--r-- | src/com/android/launcher3/widget/WidgetsListAdapter.java | 10 |
7 files changed, 133 insertions, 16 deletions
diff --git a/res/layout/widget_cell.xml b/res/layout/widget_cell.xml index ab23b842e..196dfca66 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"> <LinearLayout android:layout_width="wrap_content" @@ -43,7 +44,6 @@ android:singleLine="true" android:ellipsize="end" android:fadingEdge="horizontal" - android:textColor="@color/widgets_view_item_text_color" android:textSize="16sp" android:textAlignment="viewStart" diff --git a/res/layout/widgets_list_row_view.xml b/res/layout/widgets_list_row_view.xml index 12f6401e4..ea95d2407 100644 --- a/res/layout/widgets_list_row_view.xml +++ b/res/layout/widgets_list_row_view.xml @@ -55,17 +55,18 @@ </LinearLayout> <!-- Widget list --> - <RelativeLayout + <com.android.launcher3.widget.WidgetRowView + android:id="@+id/widget_row" android:layout_width="match_parent" - android:layout_height="match_parent" + android:layout_height="@dimen/widget_cell_height" android:layout_gravity="end" + android:layout_marginLeft="@dimen/widget_row_padding" android:background="@color/widgets_cell_color" > <HorizontalScrollView android:id="@+id/widgets_scroll_container" android:layout_width="match_parent" - android:layout_height="@dimen/widget_cell_height" - android:layout_marginLeft="@dimen/widget_row_padding" + android:layout_height="match_parent" android:scrollbars="none" > <LinearLayout android:id="@+id/widgets_cell_list" @@ -74,5 +75,5 @@ android:orientation="horizontal" android:background="@color/widget_text_panel"/> </HorizontalScrollView> - </RelativeLayout> + </com.android.launcher3.widget.WidgetRowView> </LinearLayout> diff --git a/res/values/dimens.xml b/res/values/dimens.xml index 46830d6e5..fd5bff30e 100644 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -82,7 +82,7 @@ <!-- Widget tray --> <dimen name="widget_container_inset">8dp</dimen> - <dimen name="widget_preview_size">120dp</dimen> + <dimen name="widget_preview_size">130dp</dimen> <dimen name="widget_preview_padding_top">8dp</dimen> <dimen name="widget_preview_label_vertical_padding">8dp</dimen> <dimen name="widget_preview_label_horizontal_padding">8dp</dimen> @@ -94,10 +94,10 @@ <dimen name="widget_section_icon_horizontal_padding">16dp</dimen> <!-- Equation: widget_preview_size + 2 * widget_preview_padding_horizontal --> - <dimen name="widget_preview_container_width">136dp</dimen> + <dimen name="widget_preview_container_width">146dp</dimen> <dimen name="widget_cell_height">150dp</dimen> <dimen name="widget_row_padding">8dp</dimen> - <dimen name="widget_row_divider">1dp</dimen> + <dimen name="widget_row_divider">2dp</dimen> <!-- Padding applied to shortcut previews --> <dimen name="shortcut_preview_padding_left">0dp</dimen> diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java index 918517ebd..c1dd85961 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 2df170eff..f5c44ab0e 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(); @@ -229,4 +255,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 000000000..05760ae48 --- /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 a7728a11b..8b0a43b2f 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<WidgetsRowViewHolder> { // 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<WidgetsRowViewHolder> { 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); } |