package com.mylhyl.circledialog.internal;
|
|
import android.content.Context;
|
import android.os.Build;
|
import android.util.TypedValue;
|
import android.view.Gravity;
|
import android.view.View;
|
import android.view.animation.Animation;
|
import android.view.animation.AnimationUtils;
|
import android.widget.AdapterView;
|
import android.widget.EditText;
|
|
import com.mylhyl.circledialog.CircleViewHolder;
|
import com.mylhyl.circledialog.params.DialogParams;
|
import com.mylhyl.circledialog.view.BuildViewAdImpl;
|
import com.mylhyl.circledialog.view.BuildViewConfirmImpl;
|
import com.mylhyl.circledialog.view.BuildViewCustomBodyImpl;
|
import com.mylhyl.circledialog.view.BuildViewInputImpl;
|
import com.mylhyl.circledialog.view.BuildViewItemsListViewImpl;
|
import com.mylhyl.circledialog.view.BuildViewItemsRecyclerViewImpl;
|
import com.mylhyl.circledialog.view.BuildViewLottieImpl;
|
import com.mylhyl.circledialog.view.BuildViewPopupImpl;
|
import com.mylhyl.circledialog.view.BuildViewProgressImpl;
|
import com.mylhyl.circledialog.view.listener.AdView;
|
import com.mylhyl.circledialog.view.listener.ButtonView;
|
import com.mylhyl.circledialog.view.listener.CloseView;
|
import com.mylhyl.circledialog.view.listener.InputView;
|
import com.mylhyl.circledialog.view.listener.ItemsView;
|
import com.mylhyl.circledialog.view.listener.OnAdItemClickListener;
|
import com.mylhyl.circledialog.view.listener.OnRvItemClickListener;
|
|
/**
|
* Created by hupei on 2017/3/29.
|
*/
|
public final class Controller {
|
|
public static final boolean SDK_LOLLIPOP = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP;
|
public static final boolean SDK_JELLY_BEAN = Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
|
|
private CircleViewHolder mCircleViewHolder;
|
private Context mContext;
|
private CircleParams mParams;
|
private BuildView mCreateView;
|
private OnDialogInternalListener mOnDialogListener;
|
|
public Controller(Context context, CircleParams params, OnDialogInternalListener dialogListener) {
|
this.mContext = context;
|
this.mParams = params;
|
this.mOnDialogListener = dialogListener;
|
}
|
|
public static int dp2px(Context context, float value) {
|
return (int) (TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value,
|
context.getResources().getDisplayMetrics()) + 0.5f);
|
}
|
|
public CircleViewHolder getViewHolder() {
|
return mCircleViewHolder;
|
}
|
|
public View createView() {
|
|
// lottie动画框
|
if (mParams.lottieParams != null) {
|
mCreateView = new BuildViewLottieImpl(mContext, mParams);
|
mCreateView.buildBodyView();
|
}
|
// 自定义内容视图
|
else if (mParams.bodyViewId != 0 || mParams.bodyView != null) {
|
mCreateView = new BuildViewCustomBodyImpl(mContext, mParams);
|
mCreateView.buildBodyView();
|
}
|
// 广告
|
else if (mParams.adParams != null) {
|
mCreateView = new BuildViewAdImpl(mContext, mParams);
|
mCreateView.buildBodyView();
|
AdView bodyView = mCreateView.getBodyView();
|
bodyView.regOnImageClickListener(new OnAdItemClickListener() {
|
@Override
|
public boolean onItemClick(View view, int position) {
|
if (mParams.circleListeners.adItemClickListener == null) {
|
return false;
|
}
|
boolean b = mParams.circleListeners.adItemClickListener.onItemClick(view, position);
|
if (b && !mParams.dialogParams.manualClose) {
|
mOnDialogListener.dialogDismiss();
|
}
|
return false;
|
}
|
});
|
}
|
// popup
|
else if (mParams.popupParams != null) {
|
int[] screenSize = mOnDialogListener.getScreenSize();
|
int statusBarHeight = mOnDialogListener.getStatusBarHeight();
|
mCreateView = new BuildViewPopupImpl(mContext, mOnDialogListener, mParams
|
, screenSize, statusBarHeight);
|
mCreateView.buildBodyView();
|
ItemsView itemsView = mCreateView.getBodyView();
|
itemsView.regOnItemClickListener(new OnRvItemClickListener() {
|
@Override
|
public boolean onItemClick(View view, int position) {
|
if (mParams.circleListeners.rvItemListener == null) {
|
return false;
|
}
|
boolean b = mParams.circleListeners.rvItemListener.onItemClick(view, position);
|
if (b && !mParams.dialogParams.manualClose) {
|
mOnDialogListener.dialogDismiss();
|
}
|
return false;
|
}
|
});
|
}
|
|
// 列表
|
else if (mParams.itemsParams != null) {
|
//设置列表特殊的参数
|
DialogParams dialogParams = mParams.dialogParams;
|
// hupei 2019/5/30 since 4.0.2修复 设置 dialogParams.gravity 无效的bug
|
if (dialogParams.gravity == Gravity.NO_GRAVITY) {
|
dialogParams.gravity = Gravity.BOTTOM;//默认底部显示
|
}
|
//判断是否已经设置过
|
if (dialogParams.gravity == Gravity.BOTTOM && dialogParams.yOff == -1) {
|
dialogParams.yOff = 20;//底部与屏幕的距离
|
}
|
if (mParams.itemListViewType) {
|
mCreateView = new BuildViewItemsListViewImpl(mContext, mParams);
|
mCreateView.buildBodyView();
|
ItemsView itemsView = mCreateView.getBodyView();
|
itemsView.regOnItemClickListener(new AdapterView.OnItemClickListener() {
|
@Override
|
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
if (mParams.circleListeners.itemListener == null) {
|
return;
|
}
|
boolean b = mParams.circleListeners.itemListener.onItemClick(parent, view, position, id);
|
if (b && !mParams.dialogParams.manualClose) {
|
mOnDialogListener.dialogDismiss();
|
}
|
}
|
});
|
} else {
|
mCreateView = new BuildViewItemsRecyclerViewImpl(mContext, mParams);
|
mCreateView.buildBodyView();
|
ItemsView itemsView = mCreateView.getBodyView();
|
itemsView.regOnItemClickListener(new OnRvItemClickListener() {
|
@Override
|
public boolean onItemClick(View view, int position) {
|
if (mParams.circleListeners.rvItemListener == null) {
|
return false;
|
}
|
boolean b = mParams.circleListeners.rvItemListener.onItemClick(view, position);
|
if (b && !mParams.dialogParams.manualClose) {
|
mOnDialogListener.dialogDismiss();
|
}
|
return false;
|
}
|
});
|
}
|
}
|
// 进度条
|
else if (mParams.progressParams != null) {
|
mCreateView = new BuildViewProgressImpl(mContext, mParams);
|
mCreateView.buildBodyView();
|
}
|
// 输入框
|
else if (mParams.inputParams != null) {
|
mCreateView = new BuildViewInputImpl(mContext, mParams);
|
mCreateView.buildBodyView();
|
}
|
// 文本
|
else {
|
mCreateView = new BuildViewConfirmImpl(mContext, mParams);
|
mCreateView.buildBodyView();
|
}
|
|
// 图标x关闭按钮
|
if (mParams.closeParams != null) {
|
CloseView closeView = mCreateView.buildCloseImgView();
|
closeView.regOnCloseClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
if (!mParams.dialogParams.manualClose) {
|
mOnDialogListener.dialogDismiss();
|
}
|
}
|
});
|
}
|
|
// 底部按钮
|
ButtonView buttonView = mCreateView.buildButton();
|
regNegativeListener(buttonView);
|
regNeutralListener(buttonView);
|
// 输入框确定
|
if (mParams.inputParams != null) {
|
InputView inputView = mCreateView.getBodyView();
|
//输入框确定按钮事件特殊性
|
regPositiveInputListener(buttonView, inputView);
|
}
|
// 自定义body确定
|
else if (mParams.bodyViewId != 0 || mParams.bodyView != null) {
|
regPositiveBodyListener(buttonView);
|
}
|
// 其它
|
else {
|
regPositiveListener(buttonView);
|
}
|
return getView();
|
}
|
|
public void refreshView() {
|
getView().post(new Runnable() {
|
@Override
|
public void run() {
|
mCreateView.refreshTitle();
|
mCreateView.refreshContent();
|
mCreateView.refreshButton();
|
//刷新时带动画
|
if (mParams.dialogParams.refreshAnimation == 0 || getView() == null) {
|
return;
|
}
|
Animation animation = AnimationUtils.loadAnimation(mContext, mParams.dialogParams.refreshAnimation);
|
if (animation != null) {
|
getView().startAnimation(animation);
|
}
|
}
|
});
|
}
|
|
private View getView() {
|
if (mCreateView == null) {
|
return null;
|
}
|
mCircleViewHolder = new CircleViewHolder(mCreateView.getRootView());
|
return mCircleViewHolder.getDialogView();
|
}
|
|
private void regNegativeListener(final ButtonView viewButton) {
|
viewButton.regNegativeListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
if (mParams.circleListeners.clickNegativeListener != null) {
|
mParams.circleListeners.clickNegativeListener.onClick(v);
|
}
|
if (!mParams.dialogParams.manualClose) {
|
mOnDialogListener.dialogDismiss();
|
}
|
}
|
});
|
}
|
|
private void regNeutralListener(final ButtonView viewButton) {
|
viewButton.regNeutralListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
if (mParams.circleListeners.clickNeutralListener != null) {
|
mParams.circleListeners.clickNeutralListener.onClick(v);
|
}
|
if (!mParams.dialogParams.manualClose) {
|
mOnDialogListener.dialogDismiss();
|
}
|
}
|
});
|
}
|
|
private void regPositiveInputListener(final ButtonView viewButton, final InputView inputView) {
|
viewButton.regPositiveListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
EditText editText = inputView.getInput();
|
String text = editText.getText().toString();
|
if (mParams.circleListeners.inputListener == null) {
|
return;
|
}
|
boolean b = mParams.circleListeners.inputListener.onClick(text, editText);
|
if (b && !mParams.dialogParams.manualClose) {
|
mOnDialogListener.dialogDismiss();
|
}
|
}
|
});
|
}
|
|
private void regPositiveBodyListener(final ButtonView viewButton) {
|
viewButton.regPositiveListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
if (mParams.circleListeners.bindBodyViewCallback == null) {
|
return;
|
}
|
boolean b = mParams.circleListeners.bindBodyViewCallback.onBindBodyView(mCircleViewHolder);
|
if (b && !mParams.dialogParams.manualClose) {
|
mOnDialogListener.dialogDismiss();
|
}
|
}
|
});
|
}
|
|
private void regPositiveListener(final ButtonView viewButton) {
|
viewButton.regPositiveListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
if (mParams.circleListeners.clickPositiveListener != null) {
|
mParams.circleListeners.clickPositiveListener.onClick(v);
|
}
|
if (!mParams.dialogParams.manualClose) {
|
mOnDialogListener.dialogDismiss();
|
}
|
}
|
});
|
}
|
|
public interface OnDialogInternalListener {
|
|
void dialogAtLocation(int x, int y);
|
|
void dialogDismiss();
|
|
int[] getScreenSize();
|
|
int getStatusBarHeight();
|
}
|
}
|