源代码备份

This commit is contained in:
TC999
2024-08-20 16:54:35 +08:00
parent c4db18da39
commit e2a5f92e23
791 changed files with 90314 additions and 2 deletions

View 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);
}
}

View 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();
}
}
}
}

View File

@ -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;
}
}

View File

@ -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);
}