mirror of https://github.com/NekoX-Dev/NekoX.git
218 lines
10 KiB
Java
218 lines
10 KiB
Java
package org.telegram.ui.Components;
|
|
|
|
import android.animation.Animator;
|
|
import android.animation.AnimatorListenerAdapter;
|
|
import android.animation.ValueAnimator;
|
|
import android.content.Context;
|
|
import android.view.MotionEvent;
|
|
import android.view.View;
|
|
import android.widget.LinearLayout;
|
|
|
|
import org.telegram.messenger.AndroidUtilities;
|
|
import org.telegram.messenger.ChatObject;
|
|
import org.telegram.messenger.LocaleController;
|
|
import org.telegram.messenger.R;
|
|
import org.telegram.tgnet.TLRPC;
|
|
import org.telegram.ui.ActionBar.AlertDialog;
|
|
import org.telegram.ui.ActionBar.Theme;
|
|
import org.telegram.ui.Cells.HeaderCell;
|
|
import org.telegram.ui.Cells.TextCheckCell;
|
|
import org.telegram.ui.Cells.TextInfoPrivacyCell;
|
|
|
|
public class JoinToSendSettingsView extends LinearLayout {
|
|
|
|
public HeaderCell joinHeaderCell;
|
|
public TextCheckCell joinToSendCell;
|
|
public TextCheckCell joinRequestCell;
|
|
public TextInfoPrivacyCell joinToSendInfoCell;
|
|
public TextInfoPrivacyCell joinRequestInfoCell;
|
|
|
|
public boolean isJoinToSend, isJoinRequest;
|
|
private TLRPC.Chat currentChat;
|
|
|
|
public JoinToSendSettingsView(Context context, TLRPC.Chat currentChat) {
|
|
super(context);
|
|
this.currentChat = currentChat;
|
|
|
|
isJoinToSend = currentChat.join_to_send;
|
|
isJoinRequest = currentChat.join_request;
|
|
|
|
setOrientation(LinearLayout.VERTICAL);
|
|
|
|
joinHeaderCell = new HeaderCell(context, 23);
|
|
joinHeaderCell.setText(LocaleController.getString("ChannelSettingsJoinTitle", R.string.ChannelSettingsJoinTitle));
|
|
joinHeaderCell.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite));
|
|
addView(joinHeaderCell);
|
|
|
|
joinToSendCell = new TextCheckCell(context) {
|
|
// @Override
|
|
// public boolean onTouchEvent(MotionEvent event) {
|
|
// if (event.getAction() == MotionEvent.ACTION_DOWN && !isEnabled()) {
|
|
// return true;
|
|
// }
|
|
// if (event.getAction() == MotionEvent.ACTION_UP && !isEnabled()) {
|
|
// new AlertDialog.Builder(context)
|
|
// .setTitle(LocaleController.getString("UserRestrictionsCantModify", R.string.UserRestrictionsCantModify))
|
|
// .setMessage(AndroidUtilities.replaceTags(LocaleController.formatString("ChannelSettingsJoinToSendRestricted", R.string.ChannelSettingsJoinToSendRestricted, LocaleController.getString("EditAdminBanUsers", R.string.EditAdminBanUsers))))
|
|
// .setPositiveButton(LocaleController.getString("OK", R.string.OK), null)
|
|
// .create()
|
|
// .show();
|
|
// return false;
|
|
// }
|
|
// return super.onTouchEvent(event);
|
|
// }
|
|
};
|
|
joinToSendCell.setBackground(Theme.getSelectorDrawable(true));
|
|
joinToSendCell.setTextAndCheck(LocaleController.getString("ChannelSettingsJoinToSend", R.string.ChannelSettingsJoinToSend), isJoinToSend, isJoinToSend);
|
|
joinToSendCell.setEnabled(currentChat.creator || currentChat.admin_rights != null && currentChat.admin_rights.ban_users);
|
|
joinToSendCell.setOnClickListener(e -> {
|
|
final boolean oldValue = isJoinToSend, newValue = !isJoinToSend;
|
|
final boolean oldJoinToRequest = isJoinRequest;
|
|
if (onJoinToSendToggle(newValue, () -> AndroidUtilities.runOnUIThread(() -> {
|
|
setJoinRequest(oldJoinToRequest);
|
|
setJoinToSend(oldValue);
|
|
}))) {
|
|
setJoinRequest(false);
|
|
setJoinToSend(newValue);
|
|
}
|
|
});
|
|
addView(joinToSendCell);
|
|
|
|
joinRequestCell = new TextCheckCell(context) {
|
|
// @Override
|
|
// public boolean onTouchEvent(MotionEvent event) {
|
|
// if (event.getAction() == MotionEvent.ACTION_DOWN && !isEnabled()) {
|
|
// new AlertDialog.Builder(context)
|
|
// .setTitle(LocaleController.getString("UserRestrictionsCantModify", R.string.UserRestrictionsCantModify))
|
|
// .setMessage(AndroidUtilities.replaceTags(LocaleController.formatString("ChannelSettingsJoinToSendRestricted", R.string.ChannelSettingsJoinToSendRestricted, LocaleController.getString("EditAdminBanUsers", R.string.EditAdminBanUsers))))
|
|
// .setPositiveButton(LocaleController.getString("OK", R.string.OK), null)
|
|
// .create()
|
|
// .show();
|
|
// return false;
|
|
// }
|
|
// return super.onTouchEvent(event);
|
|
// }
|
|
};
|
|
joinRequestCell.setBackground(Theme.getSelectorDrawable(true));
|
|
joinRequestCell.setTextAndCheck(LocaleController.getString("ChannelSettingsJoinRequest", R.string.ChannelSettingsJoinRequest), isJoinRequest, false);
|
|
joinRequestCell.setPivotY(0);
|
|
joinRequestCell.setEnabled(currentChat.creator || currentChat.admin_rights != null && currentChat.admin_rights.ban_users);
|
|
joinRequestCell.setOnClickListener(e -> {
|
|
final boolean oldValue = isJoinRequest, newValue = !isJoinRequest;
|
|
if (onJoinRequestToggle(newValue, () -> AndroidUtilities.runOnUIThread(() -> {
|
|
setJoinRequest(oldValue);
|
|
}))) {
|
|
setJoinRequest(newValue);
|
|
}
|
|
});
|
|
addView(joinRequestCell);
|
|
|
|
joinToSendInfoCell = new TextInfoPrivacyCell(context);
|
|
joinToSendInfoCell.setText(LocaleController.getString("ChannelSettingsJoinToSendInfo", R.string.ChannelSettingsJoinToSendInfo));
|
|
addView(joinToSendInfoCell);
|
|
|
|
joinRequestInfoCell = new TextInfoPrivacyCell(context);
|
|
joinRequestInfoCell.setText(LocaleController.getString("ChannelSettingsJoinRequestInfo", R.string.ChannelSettingsJoinRequestInfo));
|
|
addView(joinRequestInfoCell);
|
|
|
|
toggleValue = isJoinToSend ? 1f : 0f;
|
|
joinRequestCell.setVisibility(isJoinToSend ? View.VISIBLE : View.GONE);
|
|
updateToggleValue(toggleValue);
|
|
}
|
|
|
|
public void setChat(TLRPC.Chat chat) {
|
|
this.currentChat = chat;
|
|
joinToSendCell.setEnabled(currentChat.creator || currentChat.admin_rights != null && currentChat.admin_rights.ban_users);
|
|
joinRequestCell.setEnabled(currentChat.creator || currentChat.admin_rights != null && currentChat.admin_rights.ban_users);
|
|
}
|
|
|
|
public boolean onJoinToSendToggle(boolean newValue, Runnable cancel) {
|
|
return true;
|
|
}
|
|
public boolean onJoinRequestToggle(boolean newValue, Runnable cancel) {
|
|
return true;
|
|
}
|
|
|
|
private ValueAnimator toggleAnimator;
|
|
private float toggleValue;
|
|
|
|
private void updateToggleValue(float value) {
|
|
toggleValue = value;
|
|
joinRequestCell.setAlpha(value);
|
|
joinRequestCell.setTranslationY((1f - value) * -AndroidUtilities.dp(16));
|
|
joinRequestCell.setScaleY(1f - (1f - value) * .1f);
|
|
int joinRequestCellHeight = joinRequestCell.getMeasuredHeight() <= 0 ? AndroidUtilities.dp(50) : joinRequestCell.getMeasuredHeight();
|
|
joinToSendInfoCell.setAlpha(1f - value);
|
|
joinToSendInfoCell.setTranslationY(-joinRequestCellHeight * (1f - value) + -AndroidUtilities.dp(4) * value);
|
|
joinRequestInfoCell.setAlpha(value);
|
|
joinRequestInfoCell.setTranslationY(-joinRequestCellHeight * (1f - value) + AndroidUtilities.dp(4) * (1f - value));
|
|
requestLayout();
|
|
}
|
|
|
|
public void setJoinRequest(boolean newJoinRequest) {
|
|
isJoinRequest = newJoinRequest;
|
|
joinRequestCell.setChecked(newJoinRequest);
|
|
}
|
|
|
|
public void setJoinToSend(boolean newJoinToSend) {
|
|
isJoinToSend = newJoinToSend;
|
|
|
|
joinToSendCell.setChecked(isJoinToSend);
|
|
joinToSendCell.setDivider(isJoinToSend);
|
|
joinRequestCell.setChecked(isJoinRequest);
|
|
|
|
if (toggleAnimator != null) {
|
|
toggleAnimator.cancel();
|
|
}
|
|
toggleAnimator = ValueAnimator.ofFloat(toggleValue, isJoinToSend ? 1 : 0);
|
|
toggleAnimator.setDuration(200);
|
|
toggleAnimator.setInterpolator(CubicBezierInterpolator.DEFAULT);
|
|
toggleAnimator.addUpdateListener(a -> updateToggleValue(toggleValue = (float) a.getAnimatedValue()));
|
|
toggleAnimator.addListener(new AnimatorListenerAdapter() {
|
|
@Override
|
|
public void onAnimationEnd(Animator animation) {
|
|
if (!isJoinToSend) {
|
|
joinRequestCell.setVisibility(View.GONE);
|
|
}
|
|
}
|
|
});
|
|
joinRequestCell.setVisibility(View.VISIBLE);
|
|
toggleAnimator.start();
|
|
}
|
|
|
|
@Override
|
|
protected void onLayout(boolean changed, int l, int t, int r, int b) {
|
|
int y = 0;
|
|
joinHeaderCell.layout(0, y, r - l, y += joinHeaderCell.getMeasuredHeight());
|
|
joinToSendCell.layout(0, y, r - l, y += joinToSendCell.getMeasuredHeight());
|
|
joinRequestCell.layout(0, y, r - l, y += joinRequestCell.getMeasuredHeight());
|
|
joinToSendInfoCell.layout(0, y, r - l, y + joinToSendInfoCell.getMeasuredHeight());
|
|
joinRequestInfoCell.layout(0, y, r - l, y + joinRequestInfoCell.getMeasuredHeight());
|
|
}
|
|
|
|
private final int MAXSPEC = MeasureSpec.makeMeasureSpec(999999, MeasureSpec.AT_MOST);
|
|
|
|
private int calcHeight() {
|
|
return (int) (
|
|
joinHeaderCell.getMeasuredHeight() +
|
|
joinToSendCell.getMeasuredHeight() +
|
|
joinRequestCell.getMeasuredHeight() * toggleValue +
|
|
AndroidUtilities.lerp(joinToSendInfoCell.getMeasuredHeight(), joinRequestInfoCell.getMeasuredHeight(), toggleValue)
|
|
);
|
|
}
|
|
|
|
@Override
|
|
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
|
joinHeaderCell.measure(widthMeasureSpec, MAXSPEC);
|
|
joinToSendCell.measure(widthMeasureSpec, MAXSPEC);
|
|
joinRequestCell.measure(widthMeasureSpec, MAXSPEC);
|
|
joinToSendInfoCell.measure(widthMeasureSpec, MAXSPEC);
|
|
joinRequestInfoCell.measure(widthMeasureSpec, MAXSPEC);
|
|
super.onMeasure(widthMeasureSpec,
|
|
MeasureSpec.makeMeasureSpec(
|
|
calcHeight(),
|
|
MeasureSpec.EXACTLY
|
|
)
|
|
);
|
|
}
|
|
} |