package android.support.v17.leanback.widget; import android.content.Context; import android.content.res.TypedArray; import android.support.v17.leanback.R; import android.util.AttributeSet; import android.view.KeyEvent; import android.view.View; import android.view.ViewGroup; import android.widget.RelativeLayout; /** * Relative layout implementation that assign subactions list topMargin based on a percentage * given by "guidedStepKeyline" theme attribute when the topMargin is set to a negative value. */ class GuidedActionsRelativeLayout extends RelativeLayout { interface InterceptKeyEventListener { public boolean onInterceptKeyEvent(KeyEvent event); } private float mKeyLinePercent; private boolean mInOverride = false; private InterceptKeyEventListener mInterceptKeyEventListener; public GuidedActionsRelativeLayout(Context context) { this(context, null); } public GuidedActionsRelativeLayout(Context context, AttributeSet attrs) { this(context, attrs, 0); } public GuidedActionsRelativeLayout(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); mKeyLinePercent = GuidanceStylingRelativeLayout.getKeyLinePercent(context); } private void init() { TypedArray ta = getContext().getTheme().obtainStyledAttributes( R.styleable.LeanbackGuidedStepTheme); mKeyLinePercent = ta.getFloat(R.styleable.LeanbackGuidedStepTheme_guidedStepKeyline, 40); ta.recycle(); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { final int heightSize = MeasureSpec.getSize(heightMeasureSpec); if (heightSize > 0) { View view = findViewById(R.id.guidedactions_sub_list); if (view != null) { ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams(); if (lp.topMargin < 0 && !mInOverride) { mInOverride = true; } if (mInOverride) { lp.topMargin = (int) (mKeyLinePercent * heightSize / 100); } } } super.onMeasure(widthMeasureSpec, heightMeasureSpec); } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); mInOverride = false; } public void setInterceptKeyEventListener(InterceptKeyEventListener l) { mInterceptKeyEventListener = l; } @Override public boolean dispatchKeyEvent(KeyEvent event) { if (mInterceptKeyEventListener != null) { if (mInterceptKeyEventListener.onInterceptKeyEvent(event)) { return true; } } return super.dispatchKeyEvent(event); } }