Fixing several layout issues.

- N7/N9 indented area should not block scroll view
- separator at the end of the widget cell should not show up on the last item.

Not covered in this CL:
- Guarantee that last item is showing only 20~40%. Right now, the
hand picked constant works for N5,6,7,9

b/20338324
b/20763871

Change-Id: I274ab95c6c3e2fc8be8ceafb2e8172c0174a41a5
This commit is contained in:
Hyunyoung Song
2015-05-12 15:36:20 -07:00
parent fc9d3d8bcb
commit 5cd1d92f6c
7 changed files with 74 additions and 139 deletions
+20
View File
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 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.
-->
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<size android:width="@dimen/widget_row_divider" />
<solid android:color="@color/widget_text_panel" />
</shape>
+5 -7
View File
@@ -16,13 +16,12 @@
<com.android.launcher3.widget.WidgetCell
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:launcher="http://schemas.android.com/apk/res-auto"
android:layout_width="@dimen/widget_preview_container_width"
android:layout_height="@dimen/widget_cell_height"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginEnd="@dimen/widget_row_divider"
android:orientation="vertical"
android:background="@color/widgets_cell_color"
android:focusable="true"
android:background="@color/widgets_cell_color"
android:gravity="center_horizontal">
<LinearLayout
@@ -73,9 +72,8 @@
<com.android.launcher3.widget.WidgetImageView
android:id="@+id/widget_preview"
style="@style/WidgetImageView"
android:layout_width="match_parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:scaleType="matrix" />
</com.android.launcher3.widget.WidgetCell>
</com.android.launcher3.widget.WidgetCell>
+15 -22
View File
@@ -48,26 +48,19 @@
launcher:iconSizeOverride="@dimen/widget_section_icon_size"
launcher:layoutHorizontal="true" />
<!-- Widget list -->
<com.android.launcher3.widget.WidgetRowView
android:id="@+id/widget_row"
android:layout_width="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="match_parent"
android:scrollbars="none" >
<LinearLayout
android:id="@+id/widgets_cell_list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:background="@color/widget_text_panel"/>
</HorizontalScrollView>
</com.android.launcher3.widget.WidgetRowView>
<HorizontalScrollView
android:id="@+id/widgets_scroll_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scrollbars="none" >
<LinearLayout
android:id="@+id/widgets_cell_list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/widget_row_padding"
android:orientation="horizontal"
android:divider="@drawable/widgets_row_divider"
android:showDividers="middle"
android:background="@color/widgets_cell_color"/>
</HorizontalScrollView>
</LinearLayout>
-1
View File
@@ -101,7 +101,6 @@
<!-- Equation: widget_preview_size + 2 * widget_preview_padding_horizontal -->
<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">2dp</dimen>
@@ -51,14 +51,13 @@ public class WidgetCell extends LinearLayout implements OnLayoutChangeListener {
private static final int FADE_IN_DURATION_MS = 90;
/** Widget cell width is calculated by multiplying this factor to grid cell width. */
private static final float WIDTH_SCALE = 2.8f;
private static final float WIDTH_SCALE = 2.6f;
/** Widget preview width is calculated by multiplying this factor to the widget cell width. */
private static final float PREVIEW_SCALE = 0.9f;
private static final float PREVIEW_SCALE = 0.8f;
private static int mPresetPreviewSize;
private static int mSize;
private static int mDividerWidth;
private int mPresetPreviewSize;
int cellSize;
private ImageView mWidgetImage;
private TextView mWidgetName;
@@ -93,14 +92,9 @@ public class WidgetCell extends LinearLayout implements OnLayoutChangeListener {
}
private void setContainerWidth() {
// Do nothing if already set
if (mSize > 0) {
return;
}
DeviceProfile profile = LauncherAppState.getInstance().getDynamicGrid().getDeviceProfile();
mSize = (int) (profile.cellWidthPx * WIDTH_SCALE);
cellSize = (int) (profile.cellWidthPx * WIDTH_SCALE);
mPresetPreviewSize = (int) (profile.cellWidthPx * WIDTH_SCALE * PREVIEW_SCALE);
mDividerWidth = getResources().getDimensionPixelSize(R.dimen.widget_row_divider);
}
@Override
@@ -117,12 +111,6 @@ 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}
*/
@@ -133,7 +121,6 @@ public class WidgetCell extends LinearLayout implements OnLayoutChangeListener {
mWidgetImage.setImageDrawable(null);
mWidgetName.setText(null);
mWidgetDims.setText(null);
setSeparator(true);
if (mActiveRequest != null) {
mActiveRequest.cleanup();
@@ -254,11 +241,4 @@ 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();
}
}
@@ -1,74 +0,0 @@
/*
* 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);
}
}
@@ -18,14 +18,19 @@ package com.android.launcher3.widget;
import android.content.Context;
import android.content.pm.ResolveInfo;
import android.support.v7.widget.RecyclerView;
import android.content.res.Resources;
import android.support.v7.widget.RecyclerView.Adapter;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
import com.android.launcher3.BubbleTextView;
import com.android.launcher3.DeviceProfile;
import com.android.launcher3.DynamicGrid;
import com.android.launcher3.IconCache;
import com.android.launcher3.Launcher;
import com.android.launcher3.LauncherAppState;
@@ -46,7 +51,7 @@ import java.util.List;
public class WidgetsListAdapter extends Adapter<WidgetsRowViewHolder> {
private static final String TAG = "WidgetsListAdapter";
private static final boolean DEBUG = false;
private static final boolean DEBUG = true;
private Context mContext;
private Launcher mLauncher;
@@ -59,6 +64,9 @@ public class WidgetsListAdapter extends Adapter<WidgetsRowViewHolder> {
private View.OnClickListener mIconClickListener;
private View.OnLongClickListener mIconLongClickListener;
private static final int PRESET_INDENT_SIZE_TABLET = 56;
private int mIndent = 0;
public WidgetsListAdapter(Context context,
View.OnClickListener iconClickListener,
View.OnLongClickListener iconLongClickListener,
@@ -71,6 +79,8 @@ public class WidgetsListAdapter extends Adapter<WidgetsRowViewHolder> {
mLauncher = launcher;
mIconCache = LauncherAppState.getInstance().getIconCache();
setContainerHeight();
}
public void setWidgetsModel(WidgetsModel w) {
@@ -96,6 +106,7 @@ public class WidgetsListAdapter extends Adapter<WidgetsRowViewHolder> {
// Add more views.
// if there are too many, hide them.
int diff = infoList.size() - row.getChildCount();
if (diff > 0) {
for (int i = 0; i < diff; i++) {
WidgetCell widget = new WidgetCell(mContext);
@@ -105,10 +116,11 @@ 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);
}
LayoutParams lp = widget.getLayoutParams();
lp.height = widget.cellSize;
lp.width = widget.cellSize;
widget.setLayoutParams(lp);
row.addView(widget);
}
} else if (diff < 0) {
@@ -152,11 +164,10 @@ 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);
View cellList = container.findViewById(R.id.widgets_cell_list);
LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) cellList.getLayoutParams();
lp.setMarginStart(mIndent);
return new WidgetsRowViewHolder(container);
}
@@ -181,4 +192,12 @@ public class WidgetsListAdapter extends Adapter<WidgetsRowViewHolder> {
}
return mWidgetPreviewLoader;
}
private void setContainerHeight() {
Resources r = mContext.getResources();
DeviceProfile profile = LauncherAppState.getInstance().getDynamicGrid().getDeviceProfile();
if (profile.isLargeTablet || profile.isTablet) {
mIndent = DynamicGrid.pxFromDp(PRESET_INDENT_SIZE_TABLET, r.getDisplayMetrics());
}
}
}