Adapted the measuring of notification content view

We are now measuring all notifications content views
with AT_MOST but with an upperboundary. This allows us
to put custom views inside our normal views and still not
blow up the small size. Also adapted the dimens not to
clamp the templates

Bug: 24866646
Change-Id: If9053d84a9d91e6bc9964f64b170e3c3260a807d
This commit is contained in:
Selim Cinek
2016-02-17 14:53:05 -08:00
parent 593610c248
commit f619ffccd7
4 changed files with 19 additions and 18 deletions

View File

@@ -58,7 +58,7 @@
<item name="status_bar_icon_scale_factor" format="float" type="dimen">1.0</item>
<!-- Height of a small notification in the status bar-->
<dimen name="notification_min_height">84dp</dimen>
<dimen name="notification_min_height">86dp</dimen>
<!-- Height of a small notification in the status bar which was used before android N -->
<dimen name="notification_min_height_legacy">64dp</dimen>

View File

@@ -240,7 +240,6 @@ public class ExpandableNotificationRow extends ActivatableNotificationView {
!= com.android.internal.R.id.status_bar_latest_event_content;
int headsUpheight = headsUpCustom && beforeN ? mMaxHeadsUpHeightLegacy
: mMaxHeadsUpHeight;
mMaxViewHeight = mNotificationMaxHeight;
mPrivateLayout.setHeights(minHeight, headsUpheight, mNotificationMaxHeight);
mPublicLayout.setHeights(minHeight, headsUpheight, mNotificationMaxHeight);
}
@@ -542,16 +541,23 @@ public class ExpandableNotificationRow extends ActivatableNotificationView {
}
private void initDimens() {
mNotificationMinHeightLegacy = getResources().getDimensionPixelSize(
R.dimen.notification_min_height_legacy);
mNotificationMinHeight = getResources().getDimensionPixelSize(
R.dimen.notification_min_height);
mNotificationMaxHeight = getResources().getDimensionPixelSize(
R.dimen.notification_max_height);
mMaxHeadsUpHeightLegacy = getResources().getDimensionPixelSize(
mNotificationMinHeightLegacy = getFontScaledHeight(R.dimen.notification_min_height_legacy);
mNotificationMinHeight = getFontScaledHeight(R.dimen.notification_min_height);
mNotificationMaxHeight = getFontScaledHeight(R.dimen.notification_max_height);
mMaxHeadsUpHeightLegacy = getFontScaledHeight(
R.dimen.notification_max_heads_up_height_legacy);
mMaxHeadsUpHeight = getResources().getDimensionPixelSize(
R.dimen.notification_max_heads_up_height);
mMaxHeadsUpHeight = getFontScaledHeight(R.dimen.notification_max_heads_up_height);
}
/**
* @param dimenId the dimen to look up
* @return the font scaled dimen as if it were in sp but doesn't shrink sizes below dp
*/
private int getFontScaledHeight(int dimenId) {
int dimensionPixelSize = getResources().getDimensionPixelSize(dimenId);
float factor = Math.max(1.0f, getResources().getDisplayMetrics().scaledDensity /
getResources().getDisplayMetrics().density);
return (int) (dimensionPixelSize * factor);
}
/**
@@ -561,7 +567,6 @@ public class ExpandableNotificationRow extends ActivatableNotificationView {
public void reset() {
super.reset();
final boolean wasExpanded = isExpanded();
mMaxViewHeight = 0;
mExpandable = false;
mHasUserChangedExpansion = false;
mUserLocked = false;

View File

@@ -24,7 +24,6 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import com.android.systemui.R;
import com.android.systemui.statusbar.stack.NotificationStackScrollLayout;
import java.util.ArrayList;
@@ -35,7 +34,6 @@ import java.util.ArrayList;
public abstract class ExpandableView extends FrameLayout {
protected OnHeightChangedListener mOnHeightChangedListener;
protected int mMaxViewHeight;
private int mActualHeight;
protected int mClipTopAmount;
private boolean mActualHeightInitialized;
@@ -49,8 +47,6 @@ public abstract class ExpandableView extends FrameLayout {
public ExpandableView(Context context, AttributeSet attrs) {
super(context, attrs);
mMaxViewHeight = getResources().getDimensionPixelSize(
R.dimen.notification_max_height);
}
@Override

View File

@@ -144,11 +144,11 @@ public class NotificationContentView extends FrameLayout {
}
if (mContractedChild != null) {
int heightSpec;
int size = Math.min(maxSize, mSmallHeight);
if (shouldContractedBeFixedSize()) {
int size = Math.min(maxSize, mSmallHeight);
heightSpec = MeasureSpec.makeMeasureSpec(size, MeasureSpec.EXACTLY);
} else {
heightSpec = MeasureSpec.makeMeasureSpec(maxSize, MeasureSpec.AT_MOST);
heightSpec = MeasureSpec.makeMeasureSpec(size, MeasureSpec.AT_MOST);
}
mContractedChild.measure(widthMeasureSpec, heightSpec);
int measuredHeight = mContractedChild.getMeasuredHeight();