源代码备份
This commit is contained in:
147
AppFrame/src/main/java/com/arialyy/frame/module/AbsModule.java
Normal file
147
AppFrame/src/main/java/com/arialyy/frame/module/AbsModule.java
Normal file
@ -0,0 +1,147 @@
|
||||
package com.arialyy.frame.module;
|
||||
|
||||
import android.content.Context;
|
||||
import androidx.databinding.ViewDataBinding;
|
||||
|
||||
import com.arialyy.frame.core.AbsActivity;
|
||||
import com.arialyy.frame.core.BindingFactory;
|
||||
import com.arialyy.frame.module.inf.ModuleListener;
|
||||
import com.arialyy.frame.util.StringUtil;
|
||||
import com.arialyy.frame.util.show.L;
|
||||
|
||||
/**
|
||||
* Created by AriaLyy on 2015/2/3.
|
||||
* 抽象的module
|
||||
*/
|
||||
public class AbsModule {
|
||||
public String TAG = "";
|
||||
private Context mContext;
|
||||
private ModuleListener mModuleListener;
|
||||
private OnCallback mCallback;
|
||||
private BindingFactory mBindingFactory;
|
||||
private Object mHost;
|
||||
|
||||
public interface OnCallback {
|
||||
public void onSuccess(int result, Object success);
|
||||
|
||||
public void onError(int result, Object error);
|
||||
}
|
||||
|
||||
public AbsModule(Context context) {
|
||||
mContext = context;
|
||||
init();
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化一些东西
|
||||
*/
|
||||
private void init() {
|
||||
TAG = StringUtil.getClassName(this);
|
||||
mBindingFactory = BindingFactory.newInstance();
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置Module监听
|
||||
*
|
||||
* @param moduleListener Module监听
|
||||
*/
|
||||
public void setModuleListener(ModuleListener moduleListener) {
|
||||
if (moduleListener == null) {
|
||||
throw new NullPointerException("ModuleListener不能为空");
|
||||
}
|
||||
this.mModuleListener = moduleListener;
|
||||
}
|
||||
|
||||
/**
|
||||
* 为Binding设置寄主
|
||||
*/
|
||||
public void setHost(Object host) {
|
||||
mHost = host;
|
||||
}
|
||||
|
||||
/**
|
||||
* 成功的回调
|
||||
*/
|
||||
private void successCallback(int key, Object obj) {
|
||||
if (mCallback == null) {
|
||||
L.e(TAG, "OnCallback 为 null");
|
||||
return;
|
||||
}
|
||||
mCallback.onSuccess(key, obj);
|
||||
}
|
||||
|
||||
/**
|
||||
* 失败的回调
|
||||
*/
|
||||
public void errorCallback(int key, Object obj) {
|
||||
if (mCallback == null) {
|
||||
L.e(TAG, "OnCallback 为 null");
|
||||
return;
|
||||
}
|
||||
mCallback.onError(key, obj);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取Context
|
||||
*
|
||||
* @return Context
|
||||
*/
|
||||
public Context getContext() {
|
||||
return mContext;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置Module回调
|
||||
*
|
||||
* @param callback Module 回调
|
||||
*/
|
||||
public void setCallback(OnCallback callback) {
|
||||
mCallback = callback;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取ViewDataBinding
|
||||
*
|
||||
* @param clazz ViewDataBinding实例
|
||||
*/
|
||||
protected <VB extends ViewDataBinding> VB getBinding(Class<VB> clazz) {
|
||||
return mBindingFactory.getBinding(mHost, clazz);
|
||||
}
|
||||
|
||||
/**
|
||||
* 统一的回调,如果已经设置了OnCallback,则使用OnCallback;
|
||||
* 否则将使用dataCallback,{@link AbsActivity#dataCallback(int, Object)}
|
||||
*
|
||||
* @param result 返回码
|
||||
* @param data 回调数据
|
||||
*/
|
||||
protected void callback(final int result, final Object data) {
|
||||
if (mCallback != null) {
|
||||
successCallback(result, data);
|
||||
return;
|
||||
}
|
||||
mModuleListener.callback(result, data);
|
||||
}
|
||||
|
||||
/**
|
||||
* module回调
|
||||
*
|
||||
* @param method 回调的方法名
|
||||
*/
|
||||
@Deprecated
|
||||
protected void callback(String method) {
|
||||
mModuleListener.callback(method);
|
||||
}
|
||||
|
||||
/**
|
||||
* 带参数的module回调
|
||||
*
|
||||
* @param method 回调的方法名
|
||||
* @param dataClassType 回调数据类型
|
||||
* @param data 回调数据
|
||||
*/
|
||||
@Deprecated
|
||||
protected void callback(String method, Class<?> dataClassType, Object data) {
|
||||
mModuleListener.callback(method, dataClassType, data);
|
||||
}
|
||||
}
|
117
AppFrame/src/main/java/com/arialyy/frame/module/IOCProxy.java
Normal file
117
AppFrame/src/main/java/com/arialyy/frame/module/IOCProxy.java
Normal file
@ -0,0 +1,117 @@
|
||||
package com.arialyy.frame.module;
|
||||
|
||||
import com.arialyy.frame.module.inf.ModuleListener;
|
||||
import com.arialyy.frame.util.ReflectionUtil;
|
||||
import com.arialyy.frame.util.show.FL;
|
||||
import com.arialyy.frame.util.show.L;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
/**
|
||||
* Created by AriaLyy on 2015/2/3.
|
||||
* 代理对象
|
||||
*/
|
||||
public class IOCProxy implements ModuleListener {
|
||||
private static final String TAG = "IOCProxy";
|
||||
private static final String mMethod = "dataCallback";
|
||||
|
||||
private Object mObj;
|
||||
|
||||
/**
|
||||
* 初始化静态代理
|
||||
*/
|
||||
public static IOCProxy newInstance(Object obj, AbsModule module) {
|
||||
return new IOCProxy(obj, module);
|
||||
}
|
||||
|
||||
public static IOCProxy newInstance(Object obj) {
|
||||
return new IOCProxy(obj, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* 被代理对象
|
||||
*/
|
||||
private IOCProxy(Object obj, AbsModule module) {
|
||||
this.mObj = obj;
|
||||
|
||||
if (module != null) {
|
||||
module.setModuleListener(this);
|
||||
}
|
||||
}
|
||||
|
||||
public void changeModule(AbsModule module) {
|
||||
module.setModuleListener(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* 统一的数据回调
|
||||
*
|
||||
* @param result 返回码
|
||||
* @param data 回调数据
|
||||
*/
|
||||
@Override
|
||||
public void callback(int result, Object data) {
|
||||
synchronized (this) {
|
||||
try {
|
||||
Method m = ReflectionUtil.getMethod(mObj.getClass(), mMethod, int.class, Object.class);
|
||||
m.setAccessible(true);
|
||||
m.invoke(mObj, result, data);
|
||||
} catch (InvocationTargetException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 数据回调
|
||||
*
|
||||
* @param method 方法名
|
||||
*/
|
||||
@Override
|
||||
@Deprecated
|
||||
public void callback(String method) {
|
||||
synchronized (this) {
|
||||
try {
|
||||
Method m = mObj.getClass().getDeclaredMethod(method);
|
||||
m.setAccessible(true);
|
||||
m.invoke(mObj);
|
||||
} catch (NoSuchMethodException e) {
|
||||
L.e(TAG, "无法找到" + method + "方法");
|
||||
FL.e(TAG, FL.getExceptionString(e));
|
||||
} catch (InvocationTargetException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 带参数的回调
|
||||
*
|
||||
* @param method 方法名
|
||||
* @param dataClassType 参数类型,如 int.class
|
||||
* @param data 数据
|
||||
*/
|
||||
@Override
|
||||
@Deprecated
|
||||
public void callback(String method, Class<?> dataClassType, Object data) {
|
||||
synchronized (this) {
|
||||
try {
|
||||
Method m = mObj.getClass().getDeclaredMethod(method, dataClassType);
|
||||
m.setAccessible(true);
|
||||
m.invoke(mObj, data);
|
||||
} catch (NoSuchMethodException e) {
|
||||
L.e(TAG, "无法找到" + method + "方法");
|
||||
FL.e(TAG, FL.getExceptionString(e));
|
||||
} catch (InvocationTargetException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,60 @@
|
||||
package com.arialyy.frame.module;
|
||||
|
||||
import android.util.SparseIntArray;
|
||||
|
||||
import com.arialyy.frame.util.ObjUtil;
|
||||
import com.arialyy.frame.util.show.L;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Created by lyy on 2016/7/7.
|
||||
*/
|
||||
public class ModuleFactory {
|
||||
private Map<Set<Integer>, AbsModule.OnCallback> mPool = new HashMap<>();
|
||||
private SparseIntArray mKeyIndex = new SparseIntArray();
|
||||
private static final String TAG = "ModuleFactory";
|
||||
|
||||
public ModuleFactory() {
|
||||
|
||||
}
|
||||
|
||||
public void addCallback(int key, AbsModule.OnCallback callback) {
|
||||
if (checkKey(key, callback)) {
|
||||
L.e(TAG, "key 已经和 callback对应");
|
||||
return;
|
||||
}
|
||||
if (mPool.containsValue(callback)) {
|
||||
Set<Integer> oldKeys = ObjUtil.getKeyByValue(mPool, callback);
|
||||
if (oldKeys != null) {
|
||||
if (!oldKeys.contains(key)) {
|
||||
oldKeys.add(key);
|
||||
mKeyIndex.put(key, callback.hashCode());
|
||||
}
|
||||
} else {
|
||||
oldKeys = new HashSet<>();
|
||||
oldKeys.add(key);
|
||||
mPool.put(oldKeys, callback);
|
||||
mKeyIndex.put(key, callback.hashCode());
|
||||
}
|
||||
} else {
|
||||
Set<Integer> newKeys = new HashSet<>();
|
||||
newKeys.add(key);
|
||||
mPool.put(newKeys, callback);
|
||||
mKeyIndex.put(key, callback.hashCode());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查key和callback的对应关系
|
||||
*
|
||||
* @return true : key已经和value对应,false : key没有和value对应
|
||||
*/
|
||||
private boolean checkKey(int key, AbsModule.OnCallback callback) {
|
||||
return mKeyIndex.indexOfKey(key) != -1 || mKeyIndex.indexOfValue(callback.hashCode()) != -1
|
||||
&& mKeyIndex.valueAt(callback.hashCode()) == key;
|
||||
}
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
package com.arialyy.frame.module.inf;
|
||||
|
||||
/**
|
||||
* Created by AriaLyy on 2015/2/3.
|
||||
* Module监听
|
||||
*/
|
||||
public interface ModuleListener {
|
||||
/**
|
||||
* 无参的回调
|
||||
*
|
||||
* @param method 方法名
|
||||
*/
|
||||
public void callback(String method);
|
||||
|
||||
/**
|
||||
* 带参数的回调
|
||||
*
|
||||
* @param method 方法名
|
||||
* @param dataClassType 参数类型
|
||||
* @param data 数据
|
||||
*/
|
||||
public void callback(String method, Class<?> dataClassType, Object data);
|
||||
|
||||
/**
|
||||
* 统一接口的回调,回调接口为dataCallback
|
||||
*
|
||||
* @param result 返回码
|
||||
* @param data 回调数据
|
||||
*/
|
||||
public void callback(int result, Object data);
|
||||
}
|
Reference in New Issue
Block a user