diff --git a/SzyxImSdk/build.gradle b/SzyxImSdk/build.gradle index d72c003..ed0776c 100644 --- a/SzyxImSdk/build.gradle +++ b/SzyxImSdk/build.gradle @@ -20,13 +20,6 @@ android { } buildTypes { - debug { - // 开启混淆 - minifyEnabled false - // Zipalign压缩优化 - zipAlignEnabled true - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - } release { // 开启混淆 minifyEnabled true @@ -43,7 +36,7 @@ android { dependencies { - implementation 'androidx.appcompat:appcompat:1.4.1' + implementation 'androidx.appcompat:appcompat:1.4.2' implementation 'com.google.android.material:material:1.5.0' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.3' diff --git a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/SZYXImSdk.java b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/SZYXImSdk.java index 0d4b038..6db81f0 100644 --- a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/SZYXImSdk.java +++ b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/SZYXImSdk.java @@ -1,7 +1,9 @@ package cn.org.bjca.trust.android.lib.im; +import cn.org.bjca.trust.android.lib.im.kit.SdkGroupInterface; import cn.org.bjca.trust.android.lib.im.kit.SdkInterface; import cn.org.bjca.trust.android.lib.im.kit.SdkMsgInterface; +import cn.org.bjca.trust.android.lib.im.manager.SZYXGroupManager; import cn.org.bjca.trust.android.lib.im.manager.SZYXImManager; import cn.org.bjca.trust.android.lib.im.manager.SZYXMessageManager; @@ -15,6 +17,10 @@ public class SZYXImSdk { static final SdkMsgInterface instance = new SZYXMessageManager(); } + private static final class SdkGroupInterfaceHolder { + static final SdkGroupInterface instance = new SZYXGroupManager(); + } + public static SdkInterface getInstance() { return SdkInterfaceHolder.instance; @@ -24,4 +30,9 @@ public class SZYXImSdk { return SdkMsgInterfaceHolder.instance; } + + public static SdkGroupInterface getGroupManager() { + return SdkGroupInterfaceHolder.instance; + + } } diff --git a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/common/ToolsHelper.java b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/common/ToolsHelper.java new file mode 100644 index 0000000..1779024 --- /dev/null +++ b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/common/ToolsHelper.java @@ -0,0 +1,270 @@ +package cn.org.bjca.trust.android.lib.im.common; + +import android.content.Context; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.view.View; +import android.widget.EditText; +import android.widget.Toast; + +import com.google.android.material.snackbar.Snackbar; +import com.google.android.material.textfield.TextInputLayout; + +import java.lang.reflect.Field; +import java.util.HashMap; +import java.util.Map; + +public class ToolsHelper { + + public static boolean isNull(Object obj) { + if (null == obj) + return true; + String str = obj.toString(); + if (str.isEmpty()) + return true; + return str.equalsIgnoreCase("null"); + } + + public static Long toLong(Object obj) { + if (isNull(obj)) + return 0L; + try { + return Long.parseLong(obj.toString()); + } catch (Exception e) { + return 0L; + } + } + + public static int toInt(Object obj) { + if (isNull(obj)) + return 0; + try { + return Integer.parseInt(obj.toString()); + } catch (Exception e) { + return 0; + } + } + + public static Double toDouble(Object obj) { + if (isNull(obj)) + return 0.0; + try { + return Double.parseDouble(obj.toString()); + } catch (Exception e) { + return 0D; + } + } + + public static String toString(Object obj) { + if (isNull(obj)) + return ""; + return obj.toString(); + } + + + /** + * 格式化json字符串 + * + * @param jsonStr 需要格式化的json串 + * @return 格式化后的json串 + */ + public static String formatJson(String jsonStr) { + if (null == jsonStr || "".equals(jsonStr)) return ""; + StringBuilder sb = new StringBuilder(); + char last = '\0'; + char current = '\0'; + int indent = 0; + for (int i = 0; i < jsonStr.length(); i++) { + last = current; + current = jsonStr.charAt(i); + //遇到{ [换行,且下一行缩进 + switch (current) { + case '{': + case '[': + sb.append(current); + sb.append('\n'); + indent++; + addIndentBlank(sb, indent); + break; + //遇到} ]换行,当前行缩进 + case '}': + case ']': + sb.append('\n'); + indent--; + addIndentBlank(sb, indent); + sb.append(current); + break; + //遇到,换行 + case ',': + sb.append(current); + if (last != '\\') { + sb.append('\n'); + addIndentBlank(sb, indent); + } + break; + default: + sb.append(current); + } + } + return sb.toString(); + } + + /** + * 添加space + */ + private static void addIndentBlank(StringBuilder sb, int indent) { + for (int i = 0; i < indent; i++) { + sb.append('\t'); + } + } + + /** + * http 请求数据返回 json 中中文字符为 unicode 编码转汉字转码 + * + * @param theString + * @return 转化后的结果. + */ + public static String decodeUnicode(String theString) { + char aChar; + int len = theString.length(); + StringBuilder outBuffer = new StringBuilder(len); + for (int x = 0; x < len; ) { + aChar = theString.charAt(x++); + if (aChar == '\\') { + aChar = theString.charAt(x++); + if (aChar == 'u') { + int value = 0; + for (int i = 0; i < 4; i++) { + aChar = theString.charAt(x++); + switch (aChar) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + value = (value << 4) + aChar - '0'; + break; + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + value = (value << 4) + 10 + aChar - 'a'; + break; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + value = (value << 4) + 10 + aChar - 'A'; + break; + default: + throw new IllegalArgumentException( + "Malformed \\uxxxx encoding."); + } + + } + outBuffer.append((char) value); + } else { + if (aChar == 't') { + aChar = '\t'; + } else if (aChar != 'r') { + if (aChar == 'n') { + aChar = '\n'; + } else if (aChar == 'f') { + aChar = '\f'; + } + } else { + aChar = '\r'; + } + outBuffer.append(aChar); + } + } else { + outBuffer.append(aChar); + } + } + return outBuffer.toString(); + } + + /** + * 弹出提示信息 感觉比Toast好看点 不过Toast不需要依赖view + * + * @param view 绑定一个view才能展示 + * @param content 需要展示的内容 + */ + public static void snack(View view, CharSequence content) { + Snackbar.make(view, content, Snackbar.LENGTH_SHORT).show(); + } + + public static void showMessage(Context context, CharSequence content) { + Toast.makeText(context, content, Toast.LENGTH_SHORT).show(); + } + + /** + * EditText绑定TextInputLayout,处理一下 + * + * @param editText editText + * @param textInputLayout textInputLayout + */ + public static void addTextChangedListener(EditText editText, TextInputLayout textInputLayout) { + editText.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + if (!TextUtils.isEmpty(textInputLayout.getError())) {//输入的时候不提示错误信息 + textInputLayout.setErrorEnabled(true); + textInputLayout.setError(""); + textInputLayout.setErrorEnabled(false); + } + } + }); + } + + /** + * 使用 TextInputLayout 提示错误信息 + * + * @param textInputLayout TextInputLayout + * @param msg 错判的内容 + */ + public static void showError(TextInputLayout textInputLayout, String msg) { + textInputLayout.setErrorEnabled(true); + textInputLayout.setError(msg); + } + + /** + * 将Object对象里面的属性和值转化成Map对象 + * + * @param obj + * @return + * @throws IllegalAccessException + */ + public static Map objectToMap(Object obj) throws IllegalAccessException { + Map map = new HashMap<>(); + Class clazz = obj.getClass(); + for (Field field : clazz.getDeclaredFields()) { + field.setAccessible(true); + String fieldName = field.getName(); + T value = (T) field.get(obj); + if (null != value) + map.put(fieldName, value); + } + return map; + } +} diff --git a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/bean/PacketMessage.java b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/bean/PacketMessage.java index 72b8725..308bb8c 100644 --- a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/bean/PacketMessage.java +++ b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/bean/PacketMessage.java @@ -3,6 +3,7 @@ package cn.org.bjca.trust.android.lib.im.im.bean; import java.util.UUID; import cn.org.bjca.trust.android.lib.im.cfg.Constant; +import cn.org.bjca.trust.android.lib.im.enums.OsType; import cn.org.bjca.trust.android.lib.im.enums.PacketType; public abstract class PacketMessage { @@ -15,6 +16,7 @@ public abstract class PacketMessage { private String appId; private String userName; private String token; + private String osType; public PacketMessage(PacketType packetType) { this.packetType = packetType; @@ -22,6 +24,15 @@ public abstract class PacketMessage { this.appId = Constant.getSdkAppID(); this.userName = Constant.getUserId(); this.token = Constant.getToken(); + this.osType = String.valueOf(OsType.ANDROID.type()); + } + + public String getOsType() { + return osType; + } + + public void setOsType(String osType) { + this.osType = osType; } public String getMsgId() { diff --git a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/kit/RequestImCallback.java b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/kit/RequestImCallback.java new file mode 100644 index 0000000..592ea51 --- /dev/null +++ b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/kit/RequestImCallback.java @@ -0,0 +1,9 @@ +package cn.org.bjca.trust.android.lib.im.im.kit; + +import cn.org.bjca.trust.android.lib.im.im.msg.ResultMessage; + +public interface RequestImCallback { + void success(ResultMessage message); + + void failed(int code, String error); +} diff --git a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/manager/ImManager.java b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/manager/ImManager.java index 5500a97..c2c0ac2 100644 --- a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/manager/ImManager.java +++ b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/manager/ImManager.java @@ -23,17 +23,22 @@ import java.util.Map; import cn.org.bjca.trust.android.lib.im.cfg.Constant; import cn.org.bjca.trust.android.lib.im.common.DeviceHelper; +import cn.org.bjca.trust.android.lib.im.common.ToolsHelper; import cn.org.bjca.trust.android.lib.im.common.json.GsonImplHelp; import cn.org.bjca.trust.android.lib.im.enums.MsgType; import cn.org.bjca.trust.android.lib.im.enums.PacketType; +import cn.org.bjca.trust.android.lib.im.http.HttpResult; import cn.org.bjca.trust.android.lib.im.im.bean.PacketMessage; -import cn.org.bjca.trust.android.lib.im.kit.IMInterface; +import cn.org.bjca.trust.android.lib.im.im.kit.RequestImCallback; import cn.org.bjca.trust.android.lib.im.im.msg.ConnectMessage; import cn.org.bjca.trust.android.lib.im.im.msg.ConnectedMessage; -import cn.org.bjca.trust.android.lib.im.im.msg.message.SZYXMessage; +import cn.org.bjca.trust.android.lib.im.im.msg.RequestMessage; +import cn.org.bjca.trust.android.lib.im.im.msg.ResultMessage; import cn.org.bjca.trust.android.lib.im.im.msg.SendAckMessage; +import cn.org.bjca.trust.android.lib.im.im.msg.message.SZYXMessage; import cn.org.bjca.trust.android.lib.im.im.msg.message.SZYXTextMessage; import cn.org.bjca.trust.android.lib.im.im.opt.ImConnectOptions; +import cn.org.bjca.trust.android.lib.im.kit.IMInterface; import cn.org.bjca.trust.android.lib.im.kit.IMSDKCallback; import cn.org.bjca.trust.android.lib.im.kit.IMSDKListener; import cn.org.bjca.trust.android.lib.im.kit.MsgListener; @@ -70,6 +75,7 @@ public class ImManager implements IMInterface { private final List msgListeners = new ArrayList<>(); private final Map msgListenerMap = new HashMap<>(); + private final Map requestMap = new HashMap<>(); @Override @@ -168,6 +174,16 @@ public class ImManager implements IMInterface { m.what = 10002; handler.sendMessage(m); + } + // 接口请求应答 + else if (topic.equals(topic_result)) { + ResultMessage resultMessage = GsonImplHelp.get().toObject(msg, ResultMessage.class); + + Message m = new Message(); + m.obj = resultMessage; + m.what = 10004; + handler.sendMessage(m); + } // 新消息送达 else if (topic.equals(topic_arrive)) { @@ -262,7 +278,34 @@ public class ImManager implements IMInterface { @Override public void sendSZYXMessage(SZYXMessage message, IMSDKCallback callback) { - sendPacketMessage(PacketType.SEND, message, callback); + if (ToolsHelper.isNull(message.getToClientId())) { + if (null != callback) callback.failed(202, "没有消息接收者[toClientId]"); + for (MsgListener listener : msgListeners) { + listener.statusChange(message.getMsgId(), -1); + } + } else + sendPacketMessage(PacketType.SEND, message, callback); + } + + @Override + public void request(RequestMessage message, RequestImCallback callback) { + this.sendPacketMessage(PacketType.REQUEST, message, new IMSDKCallback() { + @Override + public void success() { + + } + + @Override + public void failed(int code, String error) { + callback.failed(4001, error); + } + }); + + requestMap.put(message.getMsgId(), callback); + Message m = new Message(); + m.obj = message.getMsgId(); + m.what = 10003; + handler.sendMessageDelayed(m, 600); } private void sendConnectMsg() { @@ -347,6 +390,23 @@ public class ImManager implements IMInterface { msgListenerMap.remove(msgId1); } break; + case 10003: + String msgId3 = (String) msg.obj; + RequestImCallback imCallback = requestMap.get(msgId3); + if (null != imCallback) { + imCallback.failed(4001, "发送超时"); + requestMap.remove(msgId3); + } + break; + case 10004: + ResultMessage resultMessage = (ResultMessage) msg.obj; + String msgId4 = resultMessage.getAckId(); + RequestImCallback callback4 = requestMap.get(msgId4); + if (null != callback4) { + callback4.success(resultMessage); + requestMap.remove(msgId4); + } + break; } } }; diff --git a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/msg/RequestMessage.java b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/msg/RequestMessage.java new file mode 100644 index 0000000..7c28cd4 --- /dev/null +++ b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/msg/RequestMessage.java @@ -0,0 +1,40 @@ +package cn.org.bjca.trust.android.lib.im.im.msg; + +import cn.org.bjca.trust.android.lib.im.enums.PacketType; +import cn.org.bjca.trust.android.lib.im.im.bean.PacketMessage; + +public class RequestMessage extends PacketMessage { + public RequestMessage() { + super(PacketType.REQUEST); + } + + private String path; + private String body; + + public RequestMessage(String path) { + super(PacketType.REQUEST); + this.path = path; + } + + public RequestMessage(String path, String body) { + super(PacketType.REQUEST); + this.path = path; + this.body = body; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + public String getBody() { + return body; + } + + public void setBody(String body) { + this.body = body; + } +} diff --git a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/msg/ResultMessage.java b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/msg/ResultMessage.java new file mode 100644 index 0000000..1b01cf8 --- /dev/null +++ b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/msg/ResultMessage.java @@ -0,0 +1,48 @@ +package cn.org.bjca.trust.android.lib.im.im.msg; + + +import cn.org.bjca.trust.android.lib.im.enums.PacketType; +import cn.org.bjca.trust.android.lib.im.im.bean.PacketMessage; + +public class ResultMessage extends PacketMessage { + public ResultMessage() { + super(PacketType.RESULT); + } + + private String path; + private String body; + private String ackId; + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + public String getBody() { + return body; + } + + public void setBody(String body) { + this.body = body; + } + + public String getAckId() { + return ackId; + } + + public void setAckId(String ackId) { + this.ackId = ackId; + } + + @Override + public String toString() { + return "ResultMessage{" + + "path='" + path + '\'' + + ", body='" + body + '\'' + + ", ackId='" + ackId + '\'' + + '}'; + } +} diff --git a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/kit/IMInterface.java b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/kit/IMInterface.java index 7442530..ece245d 100644 --- a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/kit/IMInterface.java +++ b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/kit/IMInterface.java @@ -1,11 +1,10 @@ package cn.org.bjca.trust.android.lib.im.kit; import cn.org.bjca.trust.android.lib.im.enums.MsgType; +import cn.org.bjca.trust.android.lib.im.im.kit.RequestImCallback; +import cn.org.bjca.trust.android.lib.im.im.msg.RequestMessage; import cn.org.bjca.trust.android.lib.im.im.msg.message.SZYXMessage; import cn.org.bjca.trust.android.lib.im.im.opt.ImConnectOptions; -import cn.org.bjca.trust.android.lib.im.kit.IMSDKCallback; -import cn.org.bjca.trust.android.lib.im.kit.IMSDKListener; -import cn.org.bjca.trust.android.lib.im.kit.MsgListener; public interface IMInterface { void addMsgListener(MsgListener listener); @@ -26,6 +25,8 @@ public interface IMInterface { void sendSZYXMessage(SZYXMessage message, IMSDKCallback callback); + void request(RequestMessage message, RequestImCallback callback); + SZYXMessage createMsg(MsgType msgType, String toUserId, boolean isGroup, Object message, String describe); } diff --git a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/kit/SdkGroupInterface.java b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/kit/SdkGroupInterface.java new file mode 100644 index 0000000..f5a0aa8 --- /dev/null +++ b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/kit/SdkGroupInterface.java @@ -0,0 +1,15 @@ +package cn.org.bjca.trust.android.lib.im.kit; + +import java.util.List; + +public interface SdkGroupInterface { + + + void create(List userList, IMSDKCallback callback); + + void create(String groupName, List userList, IMSDKCallback callback); + + void create(String groupName, List userList, String faceUrl, IMSDKCallback callback); + + +} diff --git a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/manager/SZYXGroupManager.java b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/manager/SZYXGroupManager.java new file mode 100644 index 0000000..667d717 --- /dev/null +++ b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/manager/SZYXGroupManager.java @@ -0,0 +1,80 @@ +package cn.org.bjca.trust.android.lib.im.manager; + +import static cn.org.bjca.trust.android.lib.im.request.RequestConstant.Group_create_v1; + +import android.annotation.SuppressLint; +import android.os.Handler; +import android.os.Looper; +import android.os.Message; + +import androidx.annotation.NonNull; + +import java.util.List; + +import cn.org.bjca.trust.android.lib.im.http.HttpManage; +import cn.org.bjca.trust.android.lib.im.http.HttpResult; +import cn.org.bjca.trust.android.lib.im.im.msg.SendAckMessage; +import cn.org.bjca.trust.android.lib.im.kit.IMSDKCallback; +import cn.org.bjca.trust.android.lib.im.kit.MsgListener; +import cn.org.bjca.trust.android.lib.im.kit.SdkGroupInterface; +import cn.org.bjca.trust.android.lib.im.repository.Service; +import cn.org.bjca.trust.android.lib.im.repository.group.GroupCreateData; +import cn.org.bjca.trust.android.lib.im.request.RequestCallback; +import cn.org.bjca.trust.android.lib.im.request.RequestHelper; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.Disposable; +import io.reactivex.schedulers.Schedulers; + +public class SZYXGroupManager implements SdkGroupInterface { + + + @Override + public void create(List userList, IMSDKCallback callback) { + this.create(null, userList, null, callback); + } + + @Override + public void create(String groupName, List userList, IMSDKCallback callback) { + this.create(groupName, userList, null, callback); + } + + @Override + public void create(String groupName, List userList, String faceUrl, IMSDKCallback callback) { + if (null == userList || userList.size() < 2) { + if (null != callback) callback.failed(2001, "群成员需要大于一个"); + return; + } + GroupCreateData data = new GroupCreateData(groupName, faceUrl, userList); + RequestHelper.getInstance().request(Group_create_v1, data, new RequestCallback() { + + @Override + public void success(HttpResult result) { + if (null != callback) callback.success(); + } + + @Override + public void failed(int code, String error) { + if (null != callback) callback.failed(code, error); + } + + @Override + public void standby(RequestCallback imCallback) { + + Disposable d = HttpManage.getApi(Service.class) + .groupCreate(data) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(httpResult -> { + if (httpResult.getCode() == 200) { + imCallback.success(httpResult); + } else + imCallback.failed(httpResult.getCode(), httpResult.getMsg()); + }, throwable -> { + imCallback.failed(4002, throwable.getMessage()); + }); + } + + }); + } + +} diff --git a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/repository/Service.java b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/repository/Service.java index 0cd76b8..f8a8af9 100644 --- a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/repository/Service.java +++ b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/repository/Service.java @@ -4,6 +4,7 @@ import cn.org.bjca.trust.android.lib.im.bean.UserInfo; import cn.org.bjca.trust.android.lib.im.http.HttpResult; import cn.org.bjca.trust.android.lib.im.repository.bean.LoginBean; import cn.org.bjca.trust.android.lib.im.repository.data.LoginData; +import cn.org.bjca.trust.android.lib.im.repository.group.GroupCreateData; import io.reactivex.Observable; import retrofit2.http.Body; import retrofit2.http.GET; @@ -17,4 +18,6 @@ public interface Service { @POST("user/v1/register") Observable> register(@Body LoginData loginData); + @POST("group/v1/create") + Observable> groupCreate(@Body GroupCreateData data); } diff --git a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/repository/group/GroupCreateData.java b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/repository/group/GroupCreateData.java new file mode 100644 index 0000000..5932f3e --- /dev/null +++ b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/repository/group/GroupCreateData.java @@ -0,0 +1,39 @@ +package cn.org.bjca.trust.android.lib.im.repository.group; + +import java.util.List; + +public class GroupCreateData { + private String groupName; + private String faceUrl; + private List userIdList; + + public GroupCreateData(String groupName, String faceUrl, List userIdList) { + this.groupName = groupName; + this.faceUrl = faceUrl; + this.userIdList = userIdList; + } + + public String getGroupName() { + return groupName; + } + + public void setGroupName(String groupName) { + this.groupName = groupName; + } + + public String getFaceUrl() { + return faceUrl; + } + + public void setFaceUrl(String faceUrl) { + this.faceUrl = faceUrl; + } + + public List getUserIdList() { + return userIdList; + } + + public void setUserIdList(List userIdList) { + this.userIdList = userIdList; + } +} diff --git a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/request/RequestCallback.java b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/request/RequestCallback.java new file mode 100644 index 0000000..8fefbc6 --- /dev/null +++ b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/request/RequestCallback.java @@ -0,0 +1,12 @@ +package cn.org.bjca.trust.android.lib.im.request; + +import cn.org.bjca.trust.android.lib.im.http.HttpResult; +import cn.org.bjca.trust.android.lib.im.im.kit.RequestImCallback; + +public interface RequestCallback { + void success(HttpResult result); + + void failed(int code, String error); + + void standby(RequestCallback imCallback); +} diff --git a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/request/RequestConstant.java b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/request/RequestConstant.java new file mode 100644 index 0000000..a358031 --- /dev/null +++ b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/request/RequestConstant.java @@ -0,0 +1,5 @@ +package cn.org.bjca.trust.android.lib.im.request; + +public class RequestConstant { + public static final String Group_create_v1 = "/group/v1/create"; +} diff --git a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/request/RequestHelper.java b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/request/RequestHelper.java new file mode 100644 index 0000000..7ecc334 --- /dev/null +++ b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/request/RequestHelper.java @@ -0,0 +1,12 @@ +package cn.org.bjca.trust.android.lib.im.request; + +public class RequestHelper { + private static final class RequestHelperHolder { + static final RequestInterface instance = new RequestManager(); + } + + public static RequestInterface getInstance() { + return RequestHelperHolder.instance; + + } +} diff --git a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/request/RequestInterface.java b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/request/RequestInterface.java new file mode 100644 index 0000000..12bc372 --- /dev/null +++ b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/request/RequestInterface.java @@ -0,0 +1,5 @@ +package cn.org.bjca.trust.android.lib.im.request; + +public interface RequestInterface { + void request(String path, Object data, RequestCallback callback); +} diff --git a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/request/RequestManager.java b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/request/RequestManager.java new file mode 100644 index 0000000..250b5d4 --- /dev/null +++ b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/request/RequestManager.java @@ -0,0 +1,55 @@ +package cn.org.bjca.trust.android.lib.im.request; + +import cn.org.bjca.trust.android.lib.im.common.json.GsonImplHelp; +import cn.org.bjca.trust.android.lib.im.http.HttpResult; +import cn.org.bjca.trust.android.lib.im.im.IMHelper; +import cn.org.bjca.trust.android.lib.im.im.kit.RequestImCallback; +import cn.org.bjca.trust.android.lib.im.im.msg.RequestMessage; +import cn.org.bjca.trust.android.lib.im.im.msg.ResultMessage; + +public class RequestManager implements RequestInterface { + + + public void request(String path, Object data, RequestCallback callback) { + + RequestMessage rm = new RequestMessage(path, GsonImplHelp.get().toJson(data)); + + IMHelper.getInstance().request(rm, new RequestImCallback() { + + @Override + public void success(ResultMessage message) { + HttpResult h = GsonImplHelp.get().toObject(message.getBody(), HttpResult.class); + if (h.getCode() == 200) { + callback.success(h); + } else { + callback.failed(h.getCode(), h.getMsg()); + } + } + + @Override + public void failed(int code, String error) { + if (null != callback) { + callback.standby(new RequestCallback() { + @Override + public void success(HttpResult result) { + callback.success(result); + } + + @Override + public void failed(int code, String error) { + callback.failed(code, error); + } + + @Override + public void standby(RequestCallback imCallback) { + + } + }); + + } + } + + }); + } + +} diff --git a/app/build.gradle b/app/build.gradle index 0118532..78c88fa 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -21,6 +21,7 @@ android { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + signingConfig signingConfigs.debug } } compileOptions { diff --git a/app/src/main/java/cn/org/bjca/trust/android/imdemo/ui/FriendsActivity.java b/app/src/main/java/cn/org/bjca/trust/android/imdemo/ui/FriendsActivity.java index 6b251e4..7e257a6 100644 --- a/app/src/main/java/cn/org/bjca/trust/android/imdemo/ui/FriendsActivity.java +++ b/app/src/main/java/cn/org/bjca/trust/android/imdemo/ui/FriendsActivity.java @@ -7,11 +7,17 @@ import android.view.View; import com.xuqm.base.adapter.BasePagedAdapter; import com.xuqm.base.adapter.CommonPagedAdapter; import com.xuqm.base.adapter.ViewHolder; +import com.xuqm.base.common.LogHelper; import com.xuqm.base.ui.BaseListActivity; +import java.util.ArrayList; + import cn.org.bjca.trust.android.imdemo.R; import cn.org.bjca.trust.android.imdemo.data.item.UserItem; import cn.org.bjca.trust.android.imdemo.vm.FriendsVM; +import cn.org.bjca.trust.android.lib.im.SZYXImSdk; +import cn.org.bjca.trust.android.lib.im.common.ToolsHelper; +import cn.org.bjca.trust.android.lib.im.kit.IMSDKCallback; public class FriendsActivity extends BaseListActivity { @Override @@ -19,7 +25,22 @@ public class FriendsActivity extends BaseListActivity { super.initView(savedInstanceState); setTitleText("好友列表"); setConfirmText("添加好友", v -> { + SZYXImSdk.getGroupManager().create(new ArrayList() {{ + add("13666666666"); + add("13811111111"); + } + }, new IMSDKCallback() { + @Override + public void success() { + ToolsHelper.showMessage(mContext, "创建成功"); + } + @Override + public void failed(int code, String error) { + ToolsHelper.showMessage(mContext, "创建失败" + code + error); + LogHelper.e("=====>", "创建失败" + code + error); + } + }); }); }