NekoX/TMessagesProj/src/main/java/org/telegram/ui/Components/BlurredRecyclerView.java

81 lines
2.3 KiB
Java

package org.telegram.ui.Components;
import android.content.Context;
import android.graphics.Canvas;
import android.view.View;
import org.telegram.messenger.AndroidUtilities;
import org.telegram.messenger.SharedConfig;
public class BlurredRecyclerView extends RecyclerListView {
public int blurTopPadding;
int topPadding;
boolean globalIgnoreLayout;
public int additionalClipBottom;
public BlurredRecyclerView(Context context) {
super(context);
}
@Override
protected void onMeasure(int widthSpec, int heightSpec) {
globalIgnoreLayout = true;
updateTopPadding();
super.setPadding(getPaddingLeft(), topPadding + blurTopPadding, getPaddingRight(), getPaddingBottom());
globalIgnoreLayout = false;
super.onMeasure(widthSpec, heightSpec);
}
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
updateTopPadding();
}
private void updateTopPadding() {
if (getLayoutParams() == null) {
return;
}
if (SharedConfig.chatBlurEnabled()) {
blurTopPadding = AndroidUtilities.dp(203);
((MarginLayoutParams) getLayoutParams()).topMargin = -blurTopPadding;
} else {
blurTopPadding = 0;
((MarginLayoutParams) getLayoutParams()).topMargin = 0;
}
}
@Override
public void requestLayout() {
if (globalIgnoreLayout) {
return;
}
super.requestLayout();
}
@Override
protected void dispatchDraw(Canvas canvas) {
if (blurTopPadding != 0) {
canvas.clipRect(0, blurTopPadding, getMeasuredWidth(), getMeasuredHeight() + additionalClipBottom);
super.dispatchDraw(canvas);
} else {
super.dispatchDraw(canvas);
}
}
@Override
public boolean drawChild(Canvas canvas, View child, long drawingTime) {
if (child.getY() + child.getMeasuredHeight() < blurTopPadding) {
return true;
}
return super.drawChild(canvas, child, drawingTime);
}
@Override
public void setPadding(int left, int top, int right, int bottom) {
topPadding = top;
super.setPadding(left, topPadding + blurTopPadding, right, bottom);
}
}