package com.arialyy.frame.core;
import android.app.Activity;
import android.content.Intent;
import android.databinding.DataBindingUtil;
import android.databinding.ViewDataBinding;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.DialogFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.arialyy.frame.module.AbsModule;
import com.arialyy.frame.module.IOCProxy;
import com.arialyy.frame.util.StringUtil;
import com.lyy.frame.R;
import butterknife.ButterKnife;
/**
* Created by lyy on 2015/11/4.
* DialogFragment
*/
public abstract class AbsDialogFragment<VB extends ViewDataBinding> extends DialogFragment {
protected String TAG = "";
private VB mBind;
protected Object mObj;
protected View mRootView;
protected IOCProxy mProxy;
protected DialogSimpleModule mSimpleModule;
protected AbsActivity mActivity;
private ModuleFactory mModuleF;
public AbsDialogFragment() {
this(null);
}
/**
* @param obj 被观察的对象
*/
public AbsDialogFragment(Object obj) {
this(STYLE_NO_TITLE, R.style.MyDialog, obj);
}
/**
* @param style DialogFragment.STYLE_NO_TITLE , STYLE_NO_FRAME; STYLE_NO_FRAME | STYLE_NO_TITLE
* @param theme Dialog风格
* @param obj 被观察的对象
*/
private AbsDialogFragment(int style, int theme, Object obj) {
setStyle(style, theme);
mObj = obj;
}
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
mBind = DataBindingUtil.inflate(inflater, setLayoutId(), container, false);
mRootView = mBind.getRoot();
initFragment();
return mRootView;
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if (activity instanceof AbsActivity) {
mActivity = (AbsActivity) activity;
}
}
private void initFragment() {
TAG = StringUtil.getClassName(this);
mProxy = IOCProxy.newInstance(this);
mModuleF = ModuleFactory.newInstance();
ButterKnife.inject(this, mBind.getRoot());
if (mObj != null) {
mSimpleModule = new DialogSimpleModule(getContext());
IOCProxy.newInstance(mObj, mSimpleModule);
}
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
init(savedInstanceState);
}
protected abstract void init(Bundle savedInstanceState);
/**
* 获取简单打Moduel回调,这个一般用于回调数据给寄主
*/
protected DialogSimpleModule getSimplerModule() {
if (mObj == null) {
throw new NullPointerException("必须设置寄主对象");
}
return mSimpleModule;
}
/**
* 设置资源布局
*
* @return
*/
protected abstract int setLayoutId();
/**
* 获取binding对象
*/
protected VB getBinding() {
return mBind;
}
/**
* 获取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;
}
/**
* 统一的回调接口
*
* @param result 返回码,用来判断是哪个接口进行回调
* @param data 回调数据
*/
protected abstract void dataCallback(int result, Object data);
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
PermissionHelp.getInstance().handlePermissionCallback(requestCode, permissions, grantResults);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
PermissionHelp.getInstance().handleSpecialPermissionCallback(getContext(), requestCode, resultCode, data);
}
}