You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
869 lines
31 KiB
869 lines
31 KiB
/*
|
|
* This file is part of FYReader.
|
|
* FYReader is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* FYReader is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with FYReader. If not, see <https://www.gnu.org/licenses/>.
|
|
*
|
|
* Copyright (C) 2020 - 2022 fengyuecanzhu
|
|
*/
|
|
|
|
package com.kongzue.dialogx.dialogs;
|
|
|
|
import android.animation.Animator;
|
|
import android.app.Activity;
|
|
import android.content.res.Configuration;
|
|
import android.graphics.Rect;
|
|
import android.os.Handler;
|
|
import android.os.Looper;
|
|
import android.view.View;
|
|
import android.view.ViewGroup;
|
|
import android.view.animation.AccelerateInterpolator;
|
|
import android.view.animation.Animation;
|
|
import android.view.animation.AnimationUtils;
|
|
import android.view.animation.DecelerateInterpolator;
|
|
import android.widget.ImageView;
|
|
import android.widget.LinearLayout;
|
|
import android.widget.RelativeLayout;
|
|
import android.widget.TextView;
|
|
|
|
import androidx.annotation.ColorInt;
|
|
import androidx.annotation.ColorRes;
|
|
import androidx.annotation.IdRes;
|
|
|
|
import com.kongzue.dialogx.DialogX;
|
|
import com.kongzue.dialogx.R;
|
|
import com.kongzue.dialogx.impl.AnimatorListenerEndCallBack;
|
|
import com.kongzue.dialogx.interfaces.BaseDialog;
|
|
import com.kongzue.dialogx.interfaces.DialogConvertViewInterface;
|
|
import com.kongzue.dialogx.interfaces.DialogLifecycleCallback;
|
|
import com.kongzue.dialogx.interfaces.DialogXStyle;
|
|
import com.kongzue.dialogx.interfaces.OnBackPressedListener;
|
|
import com.kongzue.dialogx.interfaces.OnBindView;
|
|
import com.kongzue.dialogx.interfaces.OnDialogButtonClickListener;
|
|
import com.kongzue.dialogx.interfaces.OnSafeInsetsChangeListener;
|
|
import com.kongzue.dialogx.style.MaterialStyle;
|
|
import com.kongzue.dialogx.util.TextInfo;
|
|
import com.kongzue.dialogx.util.views.DialogXBaseRelativeLayout;
|
|
|
|
import java.lang.ref.WeakReference;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.Timer;
|
|
import java.util.TimerTask;
|
|
|
|
/**
|
|
* @author: Kongzue
|
|
* @github: https://github.com/kongzue/
|
|
* @homepage: http://kongzue.com/
|
|
* @mail: myzcxhh@live.cn
|
|
* @createTime: 2020/10/20 11:59
|
|
*/
|
|
public class PopTip extends BaseDialog {
|
|
|
|
public static final int TIME_NO_AUTO_DISMISS_DELAY = -1;
|
|
protected static List<PopTip> popTipList;
|
|
|
|
protected OnBindView<PopTip> onBindView;
|
|
protected DialogLifecycleCallback<PopTip> dialogLifecycleCallback;
|
|
protected PopTip me = this;
|
|
protected DialogImpl dialogImpl;
|
|
protected int enterAnimResId = R.anim.anim_dialogx_default_enter;
|
|
protected int exitAnimResId = R.anim.anim_dialogx_default_exit;
|
|
private View dialogView;
|
|
protected DialogXStyle.PopTipSettings.ALIGN align;
|
|
protected OnDialogButtonClickListener<PopTip> onButtonClickListener;
|
|
protected OnDialogButtonClickListener<PopTip> onPopTipClickListener;
|
|
protected boolean autoTintIconInLightOrDarkMode = true;
|
|
|
|
protected int iconResId;
|
|
protected CharSequence message;
|
|
protected CharSequence buttonText;
|
|
|
|
protected TextInfo messageTextInfo;
|
|
protected TextInfo buttonTextInfo = new TextInfo().setBold(true);
|
|
|
|
protected PopTip() {
|
|
super();
|
|
}
|
|
|
|
public static PopTip build() {
|
|
return new PopTip();
|
|
}
|
|
|
|
public PopTip(OnBindView<PopTip> onBindView) {
|
|
this.onBindView = onBindView;
|
|
}
|
|
|
|
public PopTip(CharSequence message) {
|
|
this.message = message;
|
|
}
|
|
|
|
public PopTip(int messageResId) {
|
|
this.message = getString(messageResId);
|
|
}
|
|
|
|
public PopTip(int iconResId, CharSequence message) {
|
|
this.iconResId = iconResId;
|
|
this.message = message;
|
|
}
|
|
|
|
public PopTip(int iconResId, CharSequence message, CharSequence buttonText) {
|
|
this.iconResId = iconResId;
|
|
this.message = message;
|
|
this.buttonText = buttonText;
|
|
}
|
|
|
|
public PopTip(int iconResId, int messageResId, int buttonTextResId) {
|
|
this.iconResId = iconResId;
|
|
this.message = getString(messageResId);
|
|
this.buttonText = getString(buttonTextResId);
|
|
}
|
|
|
|
public PopTip(CharSequence message, CharSequence buttonText) {
|
|
this.message = message;
|
|
this.buttonText = buttonText;
|
|
}
|
|
|
|
public PopTip(int messageResId, int buttonTextResId) {
|
|
this.message = getString(messageResId);
|
|
this.buttonText = getString(buttonTextResId);
|
|
}
|
|
|
|
public PopTip(CharSequence message, OnBindView<PopTip> onBindView) {
|
|
this.message = message;
|
|
this.onBindView = onBindView;
|
|
}
|
|
|
|
public PopTip(int messageResId, OnBindView<PopTip> onBindView) {
|
|
this.message = getString(messageResId);
|
|
this.onBindView = onBindView;
|
|
}
|
|
|
|
public PopTip(int iconResId, CharSequence message, OnBindView<PopTip> onBindView) {
|
|
this.iconResId = iconResId;
|
|
this.message = message;
|
|
this.onBindView = onBindView;
|
|
}
|
|
|
|
public PopTip(int iconResId, CharSequence message, CharSequence buttonText, OnBindView<PopTip> onBindView) {
|
|
this.iconResId = iconResId;
|
|
this.message = message;
|
|
this.buttonText = buttonText;
|
|
this.onBindView = onBindView;
|
|
}
|
|
|
|
public PopTip(int iconResId, int messageResId, int buttonTextResId, OnBindView<PopTip> onBindView) {
|
|
this.iconResId = iconResId;
|
|
this.message = getString(messageResId);
|
|
this.buttonText = getString(buttonTextResId);
|
|
this.onBindView = onBindView;
|
|
}
|
|
|
|
public PopTip(CharSequence message, CharSequence buttonText, OnBindView<PopTip> onBindView) {
|
|
this.message = message;
|
|
this.buttonText = buttonText;
|
|
this.onBindView = onBindView;
|
|
}
|
|
|
|
public PopTip(int messageResId, int buttonTextResId, OnBindView<PopTip> onBindView) {
|
|
this.message = getString(messageResId);
|
|
this.buttonText = getString(buttonTextResId);
|
|
this.onBindView = onBindView;
|
|
}
|
|
|
|
public static PopTip show(OnBindView<PopTip> onBindView) {
|
|
PopTip popTip = new PopTip(onBindView);
|
|
popTip.show();
|
|
return popTip;
|
|
}
|
|
|
|
public static PopTip show(CharSequence message) {
|
|
PopTip popTip = new PopTip(message);
|
|
popTip.show();
|
|
return popTip;
|
|
}
|
|
|
|
public static PopTip show(int messageResId) {
|
|
PopTip popTip = new PopTip(messageResId);
|
|
popTip.show();
|
|
return popTip;
|
|
}
|
|
|
|
public static PopTip show(CharSequence message, OnBindView<PopTip> onBindView) {
|
|
PopTip popTip = new PopTip(message, onBindView);
|
|
popTip.show();
|
|
return popTip;
|
|
}
|
|
|
|
public static PopTip show(int messageResId, OnBindView<PopTip> onBindView) {
|
|
PopTip popTip = new PopTip(messageResId, onBindView);
|
|
popTip.show();
|
|
return popTip;
|
|
}
|
|
|
|
public static PopTip show(CharSequence message, CharSequence buttonText) {
|
|
PopTip popTip = new PopTip(message, buttonText);
|
|
popTip.show();
|
|
return popTip;
|
|
}
|
|
|
|
public static PopTip show(int messageResId, int buttonTextResId) {
|
|
PopTip popTip = new PopTip(messageResId, buttonTextResId);
|
|
popTip.show();
|
|
return popTip;
|
|
}
|
|
|
|
public static PopTip show(int iconResId, CharSequence message, OnBindView<PopTip> onBindView) {
|
|
PopTip popTip = new PopTip(iconResId, message, onBindView);
|
|
popTip.show();
|
|
return popTip;
|
|
}
|
|
|
|
public static PopTip show(int iconResId, CharSequence message) {
|
|
PopTip popTip = new PopTip(iconResId, message);
|
|
popTip.show();
|
|
return popTip;
|
|
}
|
|
|
|
public static PopTip show(int iconResId, CharSequence message, CharSequence buttonText) {
|
|
PopTip popTip = new PopTip(iconResId, message, buttonText);
|
|
popTip.show();
|
|
return popTip;
|
|
}
|
|
|
|
public static PopTip show(int iconResId, CharSequence message, CharSequence buttonText, OnBindView<PopTip> onBindView) {
|
|
PopTip popTip = new PopTip(iconResId, message, buttonText, onBindView);
|
|
popTip.show();
|
|
return popTip;
|
|
}
|
|
|
|
public static PopTip show(int iconResId, int messageResId, int buttonTextResId, OnBindView<PopTip> onBindView) {
|
|
PopTip popTip = new PopTip(iconResId, messageResId, buttonTextResId, onBindView);
|
|
popTip.show();
|
|
return popTip;
|
|
}
|
|
|
|
public static PopTip show(CharSequence message, CharSequence buttonText, OnBindView<PopTip> onBindView) {
|
|
PopTip popTip = new PopTip(message, buttonText, onBindView);
|
|
popTip.show();
|
|
return popTip;
|
|
}
|
|
|
|
public static PopTip show(int messageResId, int buttonTextResId, OnBindView<PopTip> onBindView) {
|
|
PopTip popTip = new PopTip(messageResId, buttonTextResId, onBindView);
|
|
popTip.show();
|
|
return popTip;
|
|
}
|
|
|
|
public void show() {
|
|
super.beforeShow();
|
|
if (DialogX.onlyOnePopTip) {
|
|
PopTip oldInstance = null;
|
|
if (popTipList != null && !popTipList.isEmpty()) {
|
|
oldInstance = popTipList.get(popTipList.size() - 1);
|
|
}
|
|
if (oldInstance != null) {
|
|
oldInstance.dismiss();
|
|
}
|
|
} else {
|
|
if (popTipList != null) {
|
|
for (int i = 0; i < popTipList.size(); i++) {
|
|
PopTip popInstance = popTipList.get(i);
|
|
popInstance.moveUp();
|
|
}
|
|
}
|
|
}
|
|
if (popTipList == null) popTipList = new ArrayList<>();
|
|
popTipList.add(PopTip.this);
|
|
int layoutResId = isLightTheme() ? R.layout.layout_dialogx_poptip_material : R.layout.layout_dialogx_poptip_material_dark;
|
|
if (style.popTipSettings() != null) {
|
|
if (style.popTipSettings().layout(isLightTheme()) != 0) {
|
|
layoutResId = style.popTipSettings().layout(isLightTheme());
|
|
}
|
|
align = style.popTipSettings().align();
|
|
if (align == null) align = DialogXStyle.PopTipSettings.ALIGN.BOTTOM;
|
|
enterAnimResId = style.popTipSettings().enterAnimResId(isLightTheme()) != 0 ? style.popTipSettings().enterAnimResId(isLightTheme()) : R.anim.anim_dialogx_default_enter;
|
|
exitAnimResId = style.popTipSettings().exitAnimResId(isLightTheme()) != 0 ? style.popTipSettings().exitAnimResId(isLightTheme()) : R.anim.anim_dialogx_default_exit;
|
|
}
|
|
dialogView = createView(layoutResId);
|
|
dialogImpl = new DialogImpl(dialogView);
|
|
dialogView.setTag(me);
|
|
show(dialogView);
|
|
}
|
|
|
|
public void show(Activity activity) {
|
|
super.beforeShow();
|
|
if (DialogX.onlyOnePopTip) {
|
|
PopTip oldInstance = null;
|
|
if (popTipList != null && !popTipList.isEmpty()) {
|
|
oldInstance = popTipList.get(popTipList.size() - 1);
|
|
}
|
|
if (oldInstance != null) {
|
|
oldInstance.dismiss();
|
|
}
|
|
} else {
|
|
if (popTipList != null) {
|
|
for (int i = 0; i < popTipList.size(); i++) {
|
|
PopTip popInstance = popTipList.get(i);
|
|
popInstance.moveUp();
|
|
}
|
|
}
|
|
}
|
|
if (popTipList == null) popTipList = new ArrayList<>();
|
|
popTipList.add(PopTip.this);
|
|
int layoutResId = isLightTheme() ? R.layout.layout_dialogx_poptip_material : R.layout.layout_dialogx_poptip_material_dark;
|
|
if (style.popTipSettings() != null) {
|
|
if (style.popTipSettings().layout(isLightTheme()) != 0) {
|
|
layoutResId = style.popTipSettings().layout(isLightTheme());
|
|
}
|
|
align = style.popTipSettings().align();
|
|
if (align == null) align = DialogXStyle.PopTipSettings.ALIGN.BOTTOM;
|
|
enterAnimResId = style.popTipSettings().enterAnimResId(isLightTheme()) != 0 ? style.popTipSettings().enterAnimResId(isLightTheme()) : R.anim.anim_dialogx_default_enter;
|
|
exitAnimResId = style.popTipSettings().exitAnimResId(isLightTheme()) != 0 ? style.popTipSettings().exitAnimResId(isLightTheme()) : R.anim.anim_dialogx_default_exit;
|
|
}
|
|
dialogView = createView(layoutResId);
|
|
dialogImpl = new DialogImpl(dialogView);
|
|
dialogView.setTag(me);
|
|
show(activity, dialogView);
|
|
}
|
|
|
|
@Override
|
|
public String dialogKey() {
|
|
return getClass().getSimpleName() + "(" + Integer.toHexString(hashCode()) + ")";
|
|
}
|
|
|
|
protected Timer autoDismissTimer;
|
|
|
|
public PopTip autoDismiss(long delay) {
|
|
if (autoDismissTimer != null) {
|
|
autoDismissTimer.cancel();
|
|
}
|
|
if (delay < 0) return this;
|
|
autoDismissTimer = new Timer();
|
|
autoDismissTimer.schedule(new TimerTask() {
|
|
@Override
|
|
public void run() {
|
|
dismiss();
|
|
}
|
|
}, delay);
|
|
return this;
|
|
}
|
|
|
|
public PopTip showShort() {
|
|
autoDismiss(2000);
|
|
return this;
|
|
}
|
|
|
|
public PopTip showLong() {
|
|
autoDismiss(3500);
|
|
return this;
|
|
}
|
|
|
|
public PopTip showAlways() {
|
|
return noAutoDismiss();
|
|
}
|
|
|
|
public PopTip noAutoDismiss() {
|
|
autoDismiss(TIME_NO_AUTO_DISMISS_DELAY);
|
|
return this;
|
|
}
|
|
|
|
public class DialogImpl implements DialogConvertViewInterface {
|
|
|
|
public DialogXBaseRelativeLayout boxRoot;
|
|
public LinearLayout boxBody;
|
|
public ImageView imgDialogxPopIcon;
|
|
public TextView txtDialogxPopText;
|
|
public RelativeLayout boxCustom;
|
|
public TextView txtDialogxButton;
|
|
|
|
public DialogImpl(View convertView) {
|
|
boxRoot = convertView.findViewById(R.id.box_root);
|
|
boxBody = convertView.findViewById(R.id.box_body);
|
|
imgDialogxPopIcon = convertView.findViewById(R.id.img_dialogx_pop_icon);
|
|
txtDialogxPopText = convertView.findViewById(R.id.txt_dialogx_pop_text);
|
|
boxCustom = convertView.findViewById(R.id.box_custom);
|
|
txtDialogxButton = convertView.findViewById(R.id.txt_dialogx_button);
|
|
|
|
init();
|
|
dialogImpl = this;
|
|
refreshView();
|
|
}
|
|
|
|
@Override
|
|
public void init() {
|
|
if (messageTextInfo == null) messageTextInfo = DialogX.popTextInfo;
|
|
if (buttonTextInfo == null) buttonTextInfo = DialogX.buttonTextInfo;
|
|
if (backgroundColor == -1) backgroundColor = DialogX.backgroundColor;
|
|
|
|
if (autoDismissTimer == null) {
|
|
showShort();
|
|
}
|
|
|
|
boxRoot.setParentDialog(me);
|
|
boxRoot.setAutoUnsafePlacePadding(false);
|
|
boxRoot.setOnLifecycleCallBack(new DialogXBaseRelativeLayout.OnLifecycleCallBack() {
|
|
@Override
|
|
public void onShow() {
|
|
isShow = true;
|
|
boxRoot.setAlpha(0f);
|
|
|
|
getDialogLifecycleCallback().onShow(me);
|
|
}
|
|
|
|
@Override
|
|
public void onDismiss() {
|
|
if (popTipList != null) popTipList.remove(PopTip.this);
|
|
isShow = false;
|
|
getDialogLifecycleCallback().onDismiss(me);
|
|
}
|
|
});
|
|
|
|
RelativeLayout.LayoutParams rlp;
|
|
rlp = ((RelativeLayout.LayoutParams) boxBody.getLayoutParams());
|
|
if (align == null) align = DialogXStyle.PopTipSettings.ALIGN.BOTTOM;
|
|
switch (align) {
|
|
case TOP:
|
|
rlp.removeRule(RelativeLayout.CENTER_IN_PARENT);
|
|
rlp.addRule(RelativeLayout.ALIGN_PARENT_TOP);
|
|
break;
|
|
case BOTTOM:
|
|
rlp.removeRule(RelativeLayout.CENTER_IN_PARENT);
|
|
rlp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
|
|
boxRoot.setAutoUnsafePlacePadding(true);
|
|
break;
|
|
case CENTER:
|
|
rlp.removeRule(RelativeLayout.ALIGN_PARENT_TOP);
|
|
rlp.removeRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
|
|
rlp.addRule(RelativeLayout.CENTER_IN_PARENT);
|
|
break;
|
|
}
|
|
boxBody.setLayoutParams(rlp);
|
|
|
|
boxRoot.setOnSafeInsetsChangeListener(new OnSafeInsetsChangeListener() {
|
|
@Override
|
|
public void onChange(Rect unsafeRect) {
|
|
if (align == DialogXStyle.PopTipSettings.ALIGN.TOP) {
|
|
boxBody.setY(unsafeRect.top);
|
|
} else if (align == DialogXStyle.PopTipSettings.ALIGN.TOP_INSIDE) {
|
|
boxBody.setPadding(0, unsafeRect.top, 0, 0);
|
|
}
|
|
}
|
|
});
|
|
|
|
boxRoot.setOnBackPressedListener(new OnBackPressedListener() {
|
|
@Override
|
|
public boolean onBackPressed() {
|
|
return false;
|
|
}
|
|
});
|
|
|
|
boxRoot.post(new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
|
|
Animation enterAnim = AnimationUtils.loadAnimation(getContext(), enterAnimResId);
|
|
enterAnim.setInterpolator(new DecelerateInterpolator(2f));
|
|
if (enterAnimDuration != -1) {
|
|
enterAnim.setDuration(enterAnimDuration);
|
|
}
|
|
boxBody.startAnimation(enterAnim);
|
|
|
|
boxRoot.animate()
|
|
.setDuration(enterAnimDuration == -1 ? enterAnim.getDuration() : enterAnimDuration)
|
|
.alpha(1f)
|
|
.setInterpolator(new DecelerateInterpolator())
|
|
.setListener(null);
|
|
}
|
|
});
|
|
|
|
txtDialogxButton.setOnClickListener(new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(View v) {
|
|
if (onButtonClickListener != null) {
|
|
if (!onButtonClickListener.onClick(me, v)) {
|
|
doDismiss(v);
|
|
}
|
|
} else {
|
|
doDismiss(v);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
@Override
|
|
public void refreshView() {
|
|
if (backgroundColor != -1) {
|
|
tintColor(boxBody, backgroundColor);
|
|
}
|
|
|
|
if (onBindView != null && onBindView.getCustomView() != null) {
|
|
onBindView.bindParent(boxCustom, me);
|
|
boxCustom.setVisibility(View.VISIBLE);
|
|
} else {
|
|
boxCustom.setVisibility(View.GONE);
|
|
}
|
|
|
|
|
|
showText(txtDialogxPopText, message);
|
|
showText(txtDialogxButton, buttonText);
|
|
|
|
useTextInfo(txtDialogxPopText, messageTextInfo);
|
|
useTextInfo(txtDialogxButton, buttonTextInfo);
|
|
|
|
if (iconResId != 0) {
|
|
imgDialogxPopIcon.setVisibility(View.VISIBLE);
|
|
imgDialogxPopIcon.setImageResource(iconResId);
|
|
if (autoTintIconInLightOrDarkMode) {
|
|
imgDialogxPopIcon.setImageTintList(txtDialogxPopText.getTextColors());
|
|
} else {
|
|
imgDialogxPopIcon.setImageTintList(null);
|
|
}
|
|
} else {
|
|
imgDialogxPopIcon.setVisibility(View.GONE);
|
|
}
|
|
|
|
if (onPopTipClickListener != null) {
|
|
boxBody.setOnClickListener(new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(View v) {
|
|
if (!onPopTipClickListener.onClick(me, v)) {
|
|
dismiss();
|
|
}
|
|
}
|
|
});
|
|
} else {
|
|
boxBody.setOnClickListener(null);
|
|
boxBody.setClickable(false);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void doDismiss(final View v) {
|
|
boxRoot.post(new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
if (v != null) v.setEnabled(false);
|
|
|
|
Animation exitAnim = AnimationUtils.loadAnimation(getContext(), exitAnimResId);
|
|
if (exitAnimDuration != -1) {
|
|
exitAnim.setDuration(exitAnimResId);
|
|
}
|
|
boxBody.startAnimation(exitAnim);
|
|
|
|
boxRoot.animate()
|
|
.alpha(0f)
|
|
.setInterpolator(new AccelerateInterpolator())
|
|
.setDuration(exitAnimDuration == -1 ? exitAnim.getDuration() : exitAnimDuration);
|
|
|
|
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
dismiss(dialogView);
|
|
}
|
|
},exitAnimDuration == -1 ? exitAnim.getDuration() : exitAnimDuration);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
private void moveUp() {
|
|
if (getDialogImpl() != null && getDialogImpl().boxBody != null) {
|
|
getDialogImpl().boxBody.post(new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
if (style.popTipSettings() != null) align = style.popTipSettings().align();
|
|
if (align == null) align = DialogXStyle.PopTipSettings.ALIGN.BOTTOM;
|
|
switch (align) {
|
|
case TOP:
|
|
getDialogImpl().boxBody.animate()
|
|
.y(getDialogImpl().boxBody.getY() + getDialogImpl().boxBody.getHeight() * 1.3f)
|
|
.setDuration(enterAnimDuration == -1 ? 300 : enterAnimDuration)
|
|
.setInterpolator(new DecelerateInterpolator(2f))
|
|
;
|
|
break;
|
|
case TOP_INSIDE:
|
|
getDialogImpl().boxBody.animate()
|
|
.y(getDialogImpl().boxBody.getY() + getDialogImpl().boxBody.getHeight() - getDialogImpl().boxBody.getPaddingTop())
|
|
.setDuration(enterAnimDuration == -1 ? 300 : enterAnimDuration)
|
|
.setInterpolator(new DecelerateInterpolator(2f))
|
|
;
|
|
break;
|
|
case CENTER:
|
|
case BOTTOM:
|
|
case BOTTOM_INSIDE:
|
|
getDialogImpl().boxBody.animate()
|
|
.y(getDialogImpl().boxBody.getY() - getDialogImpl().boxBody.getHeight() * 1.3f)
|
|
.setDuration(enterAnimDuration == -1 ? 300 : enterAnimDuration)
|
|
.setInterpolator(new DecelerateInterpolator(2f))
|
|
;
|
|
break;
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
public void refreshUI() {
|
|
runOnMain(new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
if (dialogImpl != null) dialogImpl.refreshView();
|
|
}
|
|
});
|
|
}
|
|
|
|
public void dismiss() {
|
|
if (dialogImpl == null) return;
|
|
dialogImpl.doDismiss(null);
|
|
}
|
|
|
|
public DialogLifecycleCallback<PopTip> getDialogLifecycleCallback() {
|
|
return dialogLifecycleCallback == null ? new DialogLifecycleCallback<PopTip>() {
|
|
} : dialogLifecycleCallback;
|
|
}
|
|
|
|
public PopTip setDialogLifecycleCallback(DialogLifecycleCallback<PopTip> dialogLifecycleCallback) {
|
|
this.dialogLifecycleCallback = dialogLifecycleCallback;
|
|
if (isShow) dialogLifecycleCallback.onShow(me);
|
|
return this;
|
|
}
|
|
|
|
public PopTip setStyle(DialogXStyle style) {
|
|
this.style = style;
|
|
return this;
|
|
}
|
|
|
|
public PopTip setTheme(DialogX.THEME theme) {
|
|
this.theme = theme;
|
|
return this;
|
|
}
|
|
|
|
public PopTip.DialogImpl getDialogImpl() {
|
|
return dialogImpl;
|
|
}
|
|
|
|
public PopTip setCustomView(OnBindView<PopTip> onBindView) {
|
|
this.onBindView = onBindView;
|
|
refreshUI();
|
|
return this;
|
|
}
|
|
|
|
public View getCustomView() {
|
|
if (onBindView == null) return null;
|
|
return onBindView.getCustomView();
|
|
}
|
|
|
|
public PopTip removeCustomView() {
|
|
this.onBindView.clean();
|
|
refreshUI();
|
|
return this;
|
|
}
|
|
|
|
public DialogXStyle.PopTipSettings.ALIGN getAlign() {
|
|
return align;
|
|
}
|
|
|
|
public PopTip setAlign(DialogXStyle.PopTipSettings.ALIGN align) {
|
|
this.align = align;
|
|
return this;
|
|
}
|
|
|
|
public int getIconResId() {
|
|
return iconResId;
|
|
}
|
|
|
|
public PopTip setIconResId(int iconResId) {
|
|
this.iconResId = iconResId;
|
|
refreshUI();
|
|
return this;
|
|
}
|
|
|
|
public CharSequence getMessage() {
|
|
return message;
|
|
}
|
|
|
|
public PopTip setMessage(CharSequence message) {
|
|
this.message = message;
|
|
refreshUI();
|
|
return this;
|
|
}
|
|
|
|
public PopTip setMessage(int messageResId) {
|
|
this.message = getString(messageResId);
|
|
refreshUI();
|
|
return this;
|
|
}
|
|
|
|
public CharSequence getButtonText() {
|
|
return buttonText;
|
|
}
|
|
|
|
public PopTip setButton(CharSequence buttonText) {
|
|
this.buttonText = buttonText;
|
|
refreshUI();
|
|
return this;
|
|
}
|
|
|
|
public PopTip setButton(int buttonTextResId) {
|
|
this.buttonText = getString(buttonTextResId);
|
|
refreshUI();
|
|
return this;
|
|
}
|
|
|
|
public PopTip setButton(CharSequence buttonText, OnDialogButtonClickListener<PopTip> onButtonClickListener) {
|
|
this.buttonText = buttonText;
|
|
this.onButtonClickListener = onButtonClickListener;
|
|
refreshUI();
|
|
return this;
|
|
}
|
|
|
|
public PopTip setButton(int buttonTextResId, OnDialogButtonClickListener<PopTip> onButtonClickListener) {
|
|
this.buttonText = getString(buttonTextResId);
|
|
this.onButtonClickListener = onButtonClickListener;
|
|
refreshUI();
|
|
return this;
|
|
}
|
|
|
|
public PopTip setButton(OnDialogButtonClickListener<PopTip> onButtonClickListener) {
|
|
this.onButtonClickListener = onButtonClickListener;
|
|
return this;
|
|
}
|
|
|
|
public TextInfo getMessageTextInfo() {
|
|
return messageTextInfo;
|
|
}
|
|
|
|
public PopTip setMessageTextInfo(TextInfo messageTextInfo) {
|
|
this.messageTextInfo = messageTextInfo;
|
|
refreshUI();
|
|
return this;
|
|
}
|
|
|
|
public TextInfo getButtonTextInfo() {
|
|
return buttonTextInfo;
|
|
}
|
|
|
|
public PopTip setButtonTextInfo(TextInfo buttonTextInfo) {
|
|
this.buttonTextInfo = buttonTextInfo;
|
|
refreshUI();
|
|
return this;
|
|
}
|
|
|
|
public OnDialogButtonClickListener<PopTip> getOnButtonClickListener() {
|
|
return onButtonClickListener;
|
|
}
|
|
|
|
public PopTip setOnButtonClickListener(OnDialogButtonClickListener<PopTip> onButtonClickListener) {
|
|
this.onButtonClickListener = onButtonClickListener;
|
|
return this;
|
|
}
|
|
|
|
public boolean isAutoTintIconInLightOrDarkMode() {
|
|
return autoTintIconInLightOrDarkMode;
|
|
}
|
|
|
|
public PopTip setAutoTintIconInLightOrDarkMode(boolean autoTintIconInLightOrDarkMode) {
|
|
this.autoTintIconInLightOrDarkMode = autoTintIconInLightOrDarkMode;
|
|
refreshUI();
|
|
return this;
|
|
}
|
|
|
|
public OnDialogButtonClickListener<PopTip> getOnPopTipClickListener() {
|
|
return onPopTipClickListener;
|
|
}
|
|
|
|
public PopTip setOnPopTipClickListener(OnDialogButtonClickListener<PopTip> onPopTipClickListener) {
|
|
this.onPopTipClickListener = onPopTipClickListener;
|
|
refreshUI();
|
|
return this;
|
|
}
|
|
|
|
public int getBackgroundColor() {
|
|
return backgroundColor;
|
|
}
|
|
|
|
public PopTip setBackgroundColor(@ColorInt int backgroundColor) {
|
|
this.backgroundColor = backgroundColor;
|
|
refreshUI();
|
|
return this;
|
|
}
|
|
|
|
public PopTip setBackgroundColorRes(@ColorRes int backgroundColorResId) {
|
|
this.backgroundColor = getColor(backgroundColorResId);
|
|
refreshUI();
|
|
return this;
|
|
}
|
|
|
|
public long getEnterAnimDuration() {
|
|
return enterAnimDuration;
|
|
}
|
|
|
|
public PopTip setEnterAnimDuration(long enterAnimDuration) {
|
|
this.enterAnimDuration = enterAnimDuration;
|
|
return this;
|
|
}
|
|
|
|
public long getExitAnimDuration() {
|
|
return exitAnimDuration;
|
|
}
|
|
|
|
public PopTip setExitAnimDuration(long exitAnimDuration) {
|
|
this.exitAnimDuration = exitAnimDuration;
|
|
return this;
|
|
}
|
|
|
|
@Override
|
|
public void onUIModeChange(Configuration newConfig) {
|
|
if (dialogView != null) {
|
|
dismiss(dialogView);
|
|
}
|
|
if (getDialogImpl().boxCustom != null) {
|
|
getDialogImpl().boxCustom.removeAllViews();
|
|
}
|
|
|
|
if (DialogX.onlyOnePopTip) {
|
|
PopTip oldInstance = null;
|
|
if (popTipList != null && !popTipList.isEmpty()) {
|
|
oldInstance = popTipList.get(popTipList.size() - 1);
|
|
}
|
|
if (oldInstance != null) {
|
|
oldInstance.dismiss();
|
|
}
|
|
} else {
|
|
if (popTipList != null) {
|
|
for (int i = 0; i < popTipList.size(); i++) {
|
|
PopTip popInstance = popTipList.get(i);
|
|
popInstance.moveUp();
|
|
}
|
|
}
|
|
}
|
|
if (popTipList == null) popTipList = new ArrayList<>();
|
|
popTipList.add(PopTip.this);
|
|
|
|
int layoutResId = isLightTheme() ? R.layout.layout_dialogx_poptip_material : R.layout.layout_dialogx_poptip_material_dark;
|
|
if (style.popTipSettings() != null) {
|
|
if (style.popTipSettings().layout(isLightTheme()) != 0) {
|
|
layoutResId = style.popTipSettings().layout(isLightTheme());
|
|
}
|
|
align = style.popTipSettings().align();
|
|
if (align == null) align = DialogXStyle.PopTipSettings.ALIGN.BOTTOM;
|
|
enterAnimResId = style.popTipSettings().enterAnimResId(isLightTheme()) != 0 ? style.popTipSettings().enterAnimResId(isLightTheme()) : R.anim.anim_dialogx_default_enter;
|
|
exitAnimResId = style.popTipSettings().exitAnimResId(isLightTheme()) != 0 ? style.popTipSettings().exitAnimResId(isLightTheme()) : R.anim.anim_dialogx_default_exit;
|
|
}
|
|
enterAnimDuration = 0;
|
|
dialogView = createView(layoutResId);
|
|
dialogImpl = new DialogImpl(dialogView);
|
|
dialogView.setTag(me);
|
|
show(dialogView);
|
|
}
|
|
}
|
|
|