summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/widget
diff options
context:
space:
mode:
authorHyunyoung Song <hyunyoungs@google.com>2015-05-11 14:55:07 -0700
committerHyunyoung Song <hyunyoungs@google.com>2015-05-11 14:55:07 -0700
commit4b69f2ca91d63a59dfa921ba965b92de7f604f5a (patch)
tree4a7a4dbf92dd9ea33909b4803a6be97c7d9043d5 /src/com/android/launcher3/widget
parent5b3707352bc2300cafaa350c0b71a04065bafcd2 (diff)
downloadandroid_packages_apps_Trebuchet-4b69f2ca91d63a59dfa921ba965b92de7f604f5a.tar.gz
android_packages_apps_Trebuchet-4b69f2ca91d63a59dfa921ba965b92de7f604f5a.tar.bz2
android_packages_apps_Trebuchet-4b69f2ca91d63a59dfa921ba965b92de7f604f5a.zip
Ensure that clipping widget size is 20~40% of its width on every devices
b/20338324 b/20763871 Change-Id: I69114cb6dfec95c473313a440a6db76a052e5601
Diffstat (limited to 'src/com/android/launcher3/widget')
-rw-r--r--src/com/android/launcher3/widget/WidgetCell.java37
-rw-r--r--src/com/android/launcher3/widget/WidgetRowView.java74
-rw-r--r--src/com/android/launcher3/widget/WidgetsListAdapter.java10
3 files changed, 119 insertions, 2 deletions
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);
}