package com.arialyy.frame.core;
import android.app.Dialog;
import android.content.Context;
import android.support.annotation.NonNull;
import android.view.Window;
import com.arialyy.frame.module.AbsModule;
import com.arialyy.frame.module.IOCProxy;
import com.arialyy.frame.util.StringUtil;
import butterknife.ButterKnife;
/**
* Created by lyy on 2015/11/4.
* 继承Dialog
*/
public abstract class AbsDialog extends Dialog {
protected String TAG = "";
private Object mObj; //被观察者
private IOCProxy mProxy;
private DialogSimpleModule mSimpleModule;
private ModuleFactory mModuleF;
public AbsDialog(Context context) {
this(context, null);
}
/**
* @param context
* @param obj Dialog的寄主
*/
public AbsDialog(Context context, Object obj) {
super(context);
mObj = obj;
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(setLayoutId());
ButterKnife.inject(this);
initDialog();
}
private void initDialog() {
TAG = StringUtil.getClassName(this);
mProxy = IOCProxy.newInstance(this);
mModuleF = ModuleFactory.newInstance();
if (mObj != null) {
mSimpleModule = new DialogSimpleModule(getContext());
IOCProxy.newInstance(mObj, mSimpleModule);
}
}
/**
* 获取简单打Moduel回调,这个一般用于回调数据给寄主
*/
protected DialogSimpleModule getSimplerModule() {
if (mObj == null) {
throw new NullPointerException("必须设置寄主对象");
}
return mSimpleModule;
}
/**
* 获取Module
*
* @param clazz {@link AbsModule}
*/
protected <M extends AbsModule> M getModule(Class<M> clazz) {
M module = mModuleF.getModule(getContext(), clazz);
mProxy.changeModule(module);
return module;
}
/**
* 获取Module
*
* @param clazz Module class0
* @param callback Module回调函数
* @param <M> {@link AbsModule}
* @return
*/
protected <M extends AbsModule> M getModule(@NonNull Class<M> clazz, @NonNull AbsModule.OnCallback callback) {
M module = mModuleF.getModule(getContext(), clazz);
module.setCallback(callback);
mProxy.changeModule(module);
return module;
}
/**
* 设置资源布局
*
* @return
*/
protected abstract int setLayoutId();
/**
* 数据回调
*/
protected abstract void dataCallback(int result, Object obj);
}