diff options
author | Hyunyoung Song <hyunyoungs@google.com> | 2015-05-11 22:52:36 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-05-11 22:52:36 +0000 |
commit | f385e3c058f052073af5ac559c8fd5627046870c (patch) | |
tree | 6dc49b84c4899eeabe8f8aa7f2cbf42761d10130 /src/com/android/launcher3/widget | |
parent | 814f1eb8058565f6a1299dd1cd858b163f4cbfdc (diff) | |
parent | 4b69f2ca91d63a59dfa921ba965b92de7f604f5a (diff) | |
download | android_packages_apps_Trebuchet-f385e3c058f052073af5ac559c8fd5627046870c.tar.gz android_packages_apps_Trebuchet-f385e3c058f052073af5ac559c8fd5627046870c.tar.bz2 android_packages_apps_Trebuchet-f385e3c058f052073af5ac559c8fd5627046870c.zip |
Merge "Ensure that clipping widget size is 20~40% of its width on every devices" into ub-launcher3-burnaby
Diffstat (limited to 'src/com/android/launcher3/widget')
-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 |
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 27b7e6df5..877937151 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 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); } |