diff --git a/core/java/com/android/internal/app/ChooserActivity.java b/core/java/com/android/internal/app/ChooserActivity.java index ece498191a18e..54afc9553b0f7 100644 --- a/core/java/com/android/internal/app/ChooserActivity.java +++ b/core/java/com/android/internal/app/ChooserActivity.java @@ -69,7 +69,10 @@ import android.view.animation.AnimationUtils; import android.view.animation.Interpolator; import android.widget.AbsListView; import android.widget.BaseAdapter; +import android.widget.LinearLayout; import android.widget.ListView; +import android.widget.Space; + import com.android.internal.R; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.app.ResolverActivity.TargetInfo; @@ -1412,6 +1415,10 @@ public class ChooserActivity extends ResolverActivity { } else { lp.height = v.getMeasuredHeight(); } + if (i != (mColumnCount - 1)) { + row.addView(new Space(ChooserActivity.this), + new LinearLayout.LayoutParams(0, 0, 1)); + } } // Pre-measure so we can scale later. @@ -1439,13 +1446,34 @@ public class ChooserActivity extends ResolverActivity { if (startType == ChooserListAdapter.TARGET_SERVICE) { holder.row.setBackgroundColor( getColor(R.color.chooser_service_row_background_color)); + int nextStartType = mChooserListAdapter.getPositionTargetType( + getFirstRowPosition(rowPosition + 1)); + int serviceSpacing = holder.row.getContext().getResources() + .getDimensionPixelSize(R.dimen.chooser_service_spacing); + int top = rowPosition == 0 ? serviceSpacing : 0; + if (nextStartType != ChooserListAdapter.TARGET_SERVICE) { + setVertPadding(holder, top, serviceSpacing); + } else { + setVertPadding(holder, top, 0); + } } else { holder.row.setBackgroundColor(Color.TRANSPARENT); + int lastStartType = mChooserListAdapter.getPositionTargetType( + getFirstRowPosition(rowPosition - 1)); + if (lastStartType == ChooserListAdapter.TARGET_SERVICE || rowPosition == 0) { + int serviceSpacing = holder.row.getContext().getResources() + .getDimensionPixelSize(R.dimen.chooser_service_spacing); + setVertPadding(holder, serviceSpacing, 0); + } else { + setVertPadding(holder, 0, 0); + } } final int oldHeight = holder.row.getLayoutParams().height; + int measuredRowHeight = holder.measuredRowHeight + holder.row.getPaddingTop() + + holder.row.getPaddingBottom(); holder.row.getLayoutParams().height = Math.max(1, - (int) (holder.measuredRowHeight * getRowScale(rowPosition))); + (int) (measuredRowHeight * getRowScale(rowPosition))); if (holder.row.getLayoutParams().height != oldHeight) { holder.row.requestLayout(); } @@ -1457,11 +1485,16 @@ public class ChooserActivity extends ResolverActivity { holder.itemIndices[i] = start + i; mChooserListAdapter.bindView(holder.itemIndices[i], v); } else { - v.setVisibility(View.GONE); + v.setVisibility(View.INVISIBLE); } } } + private void setVertPadding(RowViewHolder holder, int top, int bottom) { + holder.row.setPadding(holder.row.getPaddingLeft(), top, + holder.row.getPaddingRight(), bottom); + } + int getFirstRowPosition(int row) { final int callerCount = mChooserListAdapter.getCallerTargetCount(); final int callerRows = (int) Math.ceil((float) callerCount / mColumnCount); diff --git a/core/res/res/layout/chooser_row.xml b/core/res/res/layout/chooser_row.xml index 9baa32c67f3f6..6c1271d6d72b7 100644 --- a/core/res/res/layout/chooser_row.xml +++ b/core/res/res/layout/chooser_row.xml @@ -18,11 +18,9 @@ --> diff --git a/core/res/res/layout/resolve_grid_item.xml b/core/res/res/layout/resolve_grid_item.xml index 305c8b0a0c0f8..71c153fa6021d 100644 --- a/core/res/res/layout/resolve_grid_item.xml +++ b/core/res/res/layout/resolve_grid_item.xml @@ -18,10 +18,9 @@ --> 20dp 0dp + + 8dp 15dp 8dp diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index d9ce7fb470692..6d6064f93f25f 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -3053,4 +3053,5 @@ +