diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java index 61a8b1d..385ec1b 100644 --- a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -98,5 +98,4 @@ public void setOnItemClickListener(OnItemClickListener onItemClickListener) { this.clickListener = onItemClickListener; } - } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java index 61a8b1d..385ec1b 100644 --- a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -98,5 +98,4 @@ public void setOnItemClickListener(OnItemClickListener onItemClickListener) { this.clickListener = onItemClickListener; } - } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java index 1cfda9d..1dd316c 100644 --- a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -17,7 +17,7 @@ @Id(autoincrement = true) private Long id;//主键ID - private String userName;//用户名 + private String userAccount;//登录账户 private String caseId;//案卷id private String title;//案卷标题 private String content;//案卷简介 @@ -25,11 +25,11 @@ private String type;//推送类型 private String isRead;//0-已读;1-未读 - @Generated(hash = 2013153901) - public NoticeBean(Long id, String userName, String caseId, String title, + @Generated(hash = 1022814061) + public NoticeBean(Long id, String userAccount, String caseId, String title, String content, String pushDate, String type, String isRead) { this.id = id; - this.userName = userName; + this.userAccount = userAccount; this.caseId = caseId; this.title = title; this.content = content; @@ -50,12 +50,12 @@ this.id = id; } - public String getUserName() { - return this.userName; + public String getUserAccount() { + return this.userAccount; } - public void setUserName(String userName) { - this.userName = userName; + public void setUserAccount(String userAccount) { + this.userAccount = userAccount; } public String getCaseId() { diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java index 61a8b1d..385ec1b 100644 --- a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -98,5 +98,4 @@ public void setOnItemClickListener(OnItemClickListener onItemClickListener) { this.clickListener = onItemClickListener; } - } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java index 1cfda9d..1dd316c 100644 --- a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -17,7 +17,7 @@ @Id(autoincrement = true) private Long id;//主键ID - private String userName;//用户名 + private String userAccount;//登录账户 private String caseId;//案卷id private String title;//案卷标题 private String content;//案卷简介 @@ -25,11 +25,11 @@ private String type;//推送类型 private String isRead;//0-已读;1-未读 - @Generated(hash = 2013153901) - public NoticeBean(Long id, String userName, String caseId, String title, + @Generated(hash = 1022814061) + public NoticeBean(Long id, String userAccount, String caseId, String title, String content, String pushDate, String type, String isRead) { this.id = id; - this.userName = userName; + this.userAccount = userAccount; this.caseId = caseId; this.title = title; this.content = content; @@ -50,12 +50,12 @@ this.id = id; } - public String getUserName() { - return this.userName; + public String getUserAccount() { + return this.userAccount; } - public void setUserName(String userName) { - this.userName = userName; + public void setUserAccount(String userAccount) { + this.userAccount = userAccount; } public String getCaseId() { diff --git a/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java b/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java index a733f25..10b4c77 100644 --- a/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java +++ b/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java @@ -25,7 +25,7 @@ */ public static class Properties { public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property UserName = new Property(1, String.class, "userName", false, "USER_NAME"); + public final static Property UserAccount = new Property(1, String.class, "userAccount", false, "USER_ACCOUNT"); public final static Property CaseId = new Property(2, String.class, "caseId", false, "CASE_ID"); public final static Property Title = new Property(3, String.class, "title", false, "TITLE"); public final static Property Content = new Property(4, String.class, "content", false, "CONTENT"); @@ -48,7 +48,7 @@ String constraint = ifNotExists? "IF NOT EXISTS ": ""; db.execSQL("CREATE TABLE " + constraint + "\"NOTICE_BEAN\" (" + // "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"USER_NAME\" TEXT," + // 1: userName + "\"USER_ACCOUNT\" TEXT," + // 1: userAccount "\"CASE_ID\" TEXT," + // 2: caseId "\"TITLE\" TEXT," + // 3: title "\"CONTENT\" TEXT," + // 4: content @@ -72,9 +72,9 @@ stmt.bindLong(1, id); } - String userName = entity.getUserName(); - if (userName != null) { - stmt.bindString(2, userName); + String userAccount = entity.getUserAccount(); + if (userAccount != null) { + stmt.bindString(2, userAccount); } String caseId = entity.getCaseId(); @@ -117,9 +117,9 @@ stmt.bindLong(1, id); } - String userName = entity.getUserName(); - if (userName != null) { - stmt.bindString(2, userName); + String userAccount = entity.getUserAccount(); + if (userAccount != null) { + stmt.bindString(2, userAccount); } String caseId = entity.getCaseId(); @@ -162,7 +162,7 @@ public NoticeBean readEntity(Cursor cursor, int offset) { NoticeBean entity = new NoticeBean( // cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // userName + cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // userAccount cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // caseId cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // title cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // content @@ -176,7 +176,7 @@ @Override public void readEntity(Cursor cursor, NoticeBean entity, int offset) { entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setUserName(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); + entity.setUserAccount(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); entity.setCaseId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); entity.setTitle(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); entity.setContent(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java index 61a8b1d..385ec1b 100644 --- a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -98,5 +98,4 @@ public void setOnItemClickListener(OnItemClickListener onItemClickListener) { this.clickListener = onItemClickListener; } - } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java index 1cfda9d..1dd316c 100644 --- a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -17,7 +17,7 @@ @Id(autoincrement = true) private Long id;//主键ID - private String userName;//用户名 + private String userAccount;//登录账户 private String caseId;//案卷id private String title;//案卷标题 private String content;//案卷简介 @@ -25,11 +25,11 @@ private String type;//推送类型 private String isRead;//0-已读;1-未读 - @Generated(hash = 2013153901) - public NoticeBean(Long id, String userName, String caseId, String title, + @Generated(hash = 1022814061) + public NoticeBean(Long id, String userAccount, String caseId, String title, String content, String pushDate, String type, String isRead) { this.id = id; - this.userName = userName; + this.userAccount = userAccount; this.caseId = caseId; this.title = title; this.content = content; @@ -50,12 +50,12 @@ this.id = id; } - public String getUserName() { - return this.userName; + public String getUserAccount() { + return this.userAccount; } - public void setUserName(String userName) { - this.userName = userName; + public void setUserAccount(String userAccount) { + this.userAccount = userAccount; } public String getCaseId() { diff --git a/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java b/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java index a733f25..10b4c77 100644 --- a/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java +++ b/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java @@ -25,7 +25,7 @@ */ public static class Properties { public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property UserName = new Property(1, String.class, "userName", false, "USER_NAME"); + public final static Property UserAccount = new Property(1, String.class, "userAccount", false, "USER_ACCOUNT"); public final static Property CaseId = new Property(2, String.class, "caseId", false, "CASE_ID"); public final static Property Title = new Property(3, String.class, "title", false, "TITLE"); public final static Property Content = new Property(4, String.class, "content", false, "CONTENT"); @@ -48,7 +48,7 @@ String constraint = ifNotExists? "IF NOT EXISTS ": ""; db.execSQL("CREATE TABLE " + constraint + "\"NOTICE_BEAN\" (" + // "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"USER_NAME\" TEXT," + // 1: userName + "\"USER_ACCOUNT\" TEXT," + // 1: userAccount "\"CASE_ID\" TEXT," + // 2: caseId "\"TITLE\" TEXT," + // 3: title "\"CONTENT\" TEXT," + // 4: content @@ -72,9 +72,9 @@ stmt.bindLong(1, id); } - String userName = entity.getUserName(); - if (userName != null) { - stmt.bindString(2, userName); + String userAccount = entity.getUserAccount(); + if (userAccount != null) { + stmt.bindString(2, userAccount); } String caseId = entity.getCaseId(); @@ -117,9 +117,9 @@ stmt.bindLong(1, id); } - String userName = entity.getUserName(); - if (userName != null) { - stmt.bindString(2, userName); + String userAccount = entity.getUserAccount(); + if (userAccount != null) { + stmt.bindString(2, userAccount); } String caseId = entity.getCaseId(); @@ -162,7 +162,7 @@ public NoticeBean readEntity(Cursor cursor, int offset) { NoticeBean entity = new NoticeBean( // cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // userName + cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // userAccount cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // caseId cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // title cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // content @@ -176,7 +176,7 @@ @Override public void readEntity(Cursor cursor, NoticeBean entity, int offset) { entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setUserName(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); + entity.setUserAccount(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); entity.setCaseId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); entity.setTitle(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); entity.setContent(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index fa17e1f..0030f57 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -2,6 +2,7 @@ import android.content.Context; import android.content.Intent; +import android.os.Message; import android.text.TextUtils; import android.util.Log; @@ -9,7 +10,8 @@ import com.casic.dcms.bean.NoticeBean; import com.casic.dcms.bean.PushResultBean; import com.casic.dcms.ui.CaseDetailActivity; -import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.ui.MainActivity; +import com.casic.dcms.ui.fragment.NoticePageFragment; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; @@ -36,7 +38,44 @@ // 处理透传消息 @Override public void onReceiveMessageData(Context context, GTTransmitMessage msg) { - // 透传消息的处理,详看 SDK demo + /** + * appid = DR9oeLL9va6aG3DYXy2w39 + * taskid = TEST_0515_d4689edeff9808959f10365895682f6f + * messageid = bd9c2465afd5464fb99368a579fd3fc8 + * pkg = com.casic.dcms + * cid = 9e85018b1972d664d9e86e9a6d03b4a7 + * playload = {"content":"您有一个工单超时,请快速处理1","data":{"id":"1392655327805825025"},"id":1393472265320001538,"title":"工单超时提醒","type":"NORMAL"} + * */ + Log.d(TAG, "onReceiveMessageData -> " + "\r\nplayload = " + new String(msg.getPayload())); + + Gson gson = new Gson(); + String messageContent = new String(msg.getPayload()); + PushResultBean resultBean = gson.fromJson(messageContent, new TypeToken() { + }.getType()); + + NoticeBean noticeBean = new NoticeBean(); + noticeBean.setUserAccount(StringHelper.getUserAccount()); + noticeBean.setCaseId(resultBean.getData().getId()); + noticeBean.setTitle(resultBean.getTitle()); + noticeBean.setContent(resultBean.getContent()); + noticeBean.setType(resultBean.getType()); + noticeBean.setPushDate(TimeOrDateUtil.timestampToDate(System.currentTimeMillis())); + noticeBean.setIsRead("1"); + + //存本地一份 + BaseApplication.getDaoSession().insert(noticeBean); + + //创建通知栏 + Message msgNotice = Message.obtain(); + msgNotice.what = Constant.PUSH_CREATE_NOTIFICATION; + msgNotice.obj = noticeBean; + MainActivity.sendMessage(msgNotice); + + //发送消息更新界面 + Message msgBean = Message.obtain(); + msgBean.what = Constant.PUSH_MESSAGE_DATA; + msgBean.obj = noticeBean; + NoticePageFragment.sendMessage(msgBean); } // 接收 cid @@ -45,7 +84,10 @@ Log.d(TAG, "onReceiveClientId -> " + "clientid = " + clientid); //通知MainActivity注册个推服务 if (!TextUtils.isEmpty(clientid)) { - BroadcastManager.getInstance(context).sendBroadcast(Constant.REGISTER_PUSH, clientid); + Message msg = Message.obtain(); + msg.what = Constant.PUSH_REGISTER; + msg.obj = clientid; + MainActivity.sendMessage(msg); } else { Log.d(TAG, "onReceiveClientId: ===>clientid = " + clientid); } @@ -66,34 +108,7 @@ // 通知到达,只有个推通道下发的通知会回调此方法 @Override public void onNotificationMessageArrived(Context context, GTNotificationMessage message) { - Log.d(TAG, "onNotificationMessageArrived: " + message.getContent()); - /** - * appid = DR9oeLL9va6aG3DYXy2w39 - * taskid = OSL-0514_xL4fPj7kqQ6tknVoQt3Mf6 - * messageid = b74187603fe34058a223949ead9f8dcf - * pkg = com.casic.dcms - * cid = cd1aec399b5504516102e399ecf7cda4 - * content = {"content":"您有一个工单超时,请快速处理","data":{"id":"1392655327805825025"},"id":1393131068164472834,"title":"工单超时提醒","type":"alarm"} - * title = 工单提醒 - * */ - Gson gson = new Gson(); - String messageContent = message.getContent(); - PushResultBean resultBean = gson.fromJson(messageContent, new TypeToken() { - }.getType()); - - NoticeBean noticeBean = new NoticeBean(); - noticeBean.setUserName(StringHelper.getUserName()); - noticeBean.setCaseId(resultBean.getData().getId()); - noticeBean.setTitle(resultBean.getTitle()); - noticeBean.setContent(resultBean.getContent()); - noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate(System.currentTimeMillis())); - noticeBean.setIsRead("1"); - - //存本地一份 - BaseApplication.getDaoSession().insert(noticeBean); - //发送消息更新界面 - BroadcastManager.getInstance(context).sendBroadcast(Constant.NOTICE_MSG, gson.toJson(noticeBean)); + Log.d(TAG, "onNotificationMessageArrived: 通知到达"); } // 通知点击,只有个推通道下发的通知会回调此方法 diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java index 61a8b1d..385ec1b 100644 --- a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -98,5 +98,4 @@ public void setOnItemClickListener(OnItemClickListener onItemClickListener) { this.clickListener = onItemClickListener; } - } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java index 1cfda9d..1dd316c 100644 --- a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -17,7 +17,7 @@ @Id(autoincrement = true) private Long id;//主键ID - private String userName;//用户名 + private String userAccount;//登录账户 private String caseId;//案卷id private String title;//案卷标题 private String content;//案卷简介 @@ -25,11 +25,11 @@ private String type;//推送类型 private String isRead;//0-已读;1-未读 - @Generated(hash = 2013153901) - public NoticeBean(Long id, String userName, String caseId, String title, + @Generated(hash = 1022814061) + public NoticeBean(Long id, String userAccount, String caseId, String title, String content, String pushDate, String type, String isRead) { this.id = id; - this.userName = userName; + this.userAccount = userAccount; this.caseId = caseId; this.title = title; this.content = content; @@ -50,12 +50,12 @@ this.id = id; } - public String getUserName() { - return this.userName; + public String getUserAccount() { + return this.userAccount; } - public void setUserName(String userName) { - this.userName = userName; + public void setUserAccount(String userAccount) { + this.userAccount = userAccount; } public String getCaseId() { diff --git a/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java b/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java index a733f25..10b4c77 100644 --- a/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java +++ b/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java @@ -25,7 +25,7 @@ */ public static class Properties { public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property UserName = new Property(1, String.class, "userName", false, "USER_NAME"); + public final static Property UserAccount = new Property(1, String.class, "userAccount", false, "USER_ACCOUNT"); public final static Property CaseId = new Property(2, String.class, "caseId", false, "CASE_ID"); public final static Property Title = new Property(3, String.class, "title", false, "TITLE"); public final static Property Content = new Property(4, String.class, "content", false, "CONTENT"); @@ -48,7 +48,7 @@ String constraint = ifNotExists? "IF NOT EXISTS ": ""; db.execSQL("CREATE TABLE " + constraint + "\"NOTICE_BEAN\" (" + // "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"USER_NAME\" TEXT," + // 1: userName + "\"USER_ACCOUNT\" TEXT," + // 1: userAccount "\"CASE_ID\" TEXT," + // 2: caseId "\"TITLE\" TEXT," + // 3: title "\"CONTENT\" TEXT," + // 4: content @@ -72,9 +72,9 @@ stmt.bindLong(1, id); } - String userName = entity.getUserName(); - if (userName != null) { - stmt.bindString(2, userName); + String userAccount = entity.getUserAccount(); + if (userAccount != null) { + stmt.bindString(2, userAccount); } String caseId = entity.getCaseId(); @@ -117,9 +117,9 @@ stmt.bindLong(1, id); } - String userName = entity.getUserName(); - if (userName != null) { - stmt.bindString(2, userName); + String userAccount = entity.getUserAccount(); + if (userAccount != null) { + stmt.bindString(2, userAccount); } String caseId = entity.getCaseId(); @@ -162,7 +162,7 @@ public NoticeBean readEntity(Cursor cursor, int offset) { NoticeBean entity = new NoticeBean( // cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // userName + cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // userAccount cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // caseId cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // title cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // content @@ -176,7 +176,7 @@ @Override public void readEntity(Cursor cursor, NoticeBean entity, int offset) { entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setUserName(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); + entity.setUserAccount(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); entity.setCaseId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); entity.setTitle(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); entity.setContent(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index fa17e1f..0030f57 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -2,6 +2,7 @@ import android.content.Context; import android.content.Intent; +import android.os.Message; import android.text.TextUtils; import android.util.Log; @@ -9,7 +10,8 @@ import com.casic.dcms.bean.NoticeBean; import com.casic.dcms.bean.PushResultBean; import com.casic.dcms.ui.CaseDetailActivity; -import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.ui.MainActivity; +import com.casic.dcms.ui.fragment.NoticePageFragment; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; @@ -36,7 +38,44 @@ // 处理透传消息 @Override public void onReceiveMessageData(Context context, GTTransmitMessage msg) { - // 透传消息的处理,详看 SDK demo + /** + * appid = DR9oeLL9va6aG3DYXy2w39 + * taskid = TEST_0515_d4689edeff9808959f10365895682f6f + * messageid = bd9c2465afd5464fb99368a579fd3fc8 + * pkg = com.casic.dcms + * cid = 9e85018b1972d664d9e86e9a6d03b4a7 + * playload = {"content":"您有一个工单超时,请快速处理1","data":{"id":"1392655327805825025"},"id":1393472265320001538,"title":"工单超时提醒","type":"NORMAL"} + * */ + Log.d(TAG, "onReceiveMessageData -> " + "\r\nplayload = " + new String(msg.getPayload())); + + Gson gson = new Gson(); + String messageContent = new String(msg.getPayload()); + PushResultBean resultBean = gson.fromJson(messageContent, new TypeToken() { + }.getType()); + + NoticeBean noticeBean = new NoticeBean(); + noticeBean.setUserAccount(StringHelper.getUserAccount()); + noticeBean.setCaseId(resultBean.getData().getId()); + noticeBean.setTitle(resultBean.getTitle()); + noticeBean.setContent(resultBean.getContent()); + noticeBean.setType(resultBean.getType()); + noticeBean.setPushDate(TimeOrDateUtil.timestampToDate(System.currentTimeMillis())); + noticeBean.setIsRead("1"); + + //存本地一份 + BaseApplication.getDaoSession().insert(noticeBean); + + //创建通知栏 + Message msgNotice = Message.obtain(); + msgNotice.what = Constant.PUSH_CREATE_NOTIFICATION; + msgNotice.obj = noticeBean; + MainActivity.sendMessage(msgNotice); + + //发送消息更新界面 + Message msgBean = Message.obtain(); + msgBean.what = Constant.PUSH_MESSAGE_DATA; + msgBean.obj = noticeBean; + NoticePageFragment.sendMessage(msgBean); } // 接收 cid @@ -45,7 +84,10 @@ Log.d(TAG, "onReceiveClientId -> " + "clientid = " + clientid); //通知MainActivity注册个推服务 if (!TextUtils.isEmpty(clientid)) { - BroadcastManager.getInstance(context).sendBroadcast(Constant.REGISTER_PUSH, clientid); + Message msg = Message.obtain(); + msg.what = Constant.PUSH_REGISTER; + msg.obj = clientid; + MainActivity.sendMessage(msg); } else { Log.d(TAG, "onReceiveClientId: ===>clientid = " + clientid); } @@ -66,34 +108,7 @@ // 通知到达,只有个推通道下发的通知会回调此方法 @Override public void onNotificationMessageArrived(Context context, GTNotificationMessage message) { - Log.d(TAG, "onNotificationMessageArrived: " + message.getContent()); - /** - * appid = DR9oeLL9va6aG3DYXy2w39 - * taskid = OSL-0514_xL4fPj7kqQ6tknVoQt3Mf6 - * messageid = b74187603fe34058a223949ead9f8dcf - * pkg = com.casic.dcms - * cid = cd1aec399b5504516102e399ecf7cda4 - * content = {"content":"您有一个工单超时,请快速处理","data":{"id":"1392655327805825025"},"id":1393131068164472834,"title":"工单超时提醒","type":"alarm"} - * title = 工单提醒 - * */ - Gson gson = new Gson(); - String messageContent = message.getContent(); - PushResultBean resultBean = gson.fromJson(messageContent, new TypeToken() { - }.getType()); - - NoticeBean noticeBean = new NoticeBean(); - noticeBean.setUserName(StringHelper.getUserName()); - noticeBean.setCaseId(resultBean.getData().getId()); - noticeBean.setTitle(resultBean.getTitle()); - noticeBean.setContent(resultBean.getContent()); - noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate(System.currentTimeMillis())); - noticeBean.setIsRead("1"); - - //存本地一份 - BaseApplication.getDaoSession().insert(noticeBean); - //发送消息更新界面 - BroadcastManager.getInstance(context).sendBroadcast(Constant.NOTICE_MSG, gson.toJson(noticeBean)); + Log.d(TAG, "onNotificationMessageArrived: 通知到达"); } // 通知点击,只有个推通道下发的通知会回调此方法 diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index 1d706ff..224f8d3 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -20,6 +20,7 @@ import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.RSAUtils; import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.InputDialog; import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; @@ -66,11 +67,11 @@ @Override public void initData() { - String userName = (String) SaveKeyValues.getValue("name", ""); - String userPassword = (String) SaveKeyValues.getValue("password", ""); - userNameView.setText(userName); + String userAccount = StringHelper.getUserAccount(); + String userPassword = (String) SaveKeyValues.getValue("userPassword", ""); + userNameView.setText(userAccount); userPasswordView.setText(userPassword); - if (!TextUtils.isEmpty(userName) && !TextUtils.isEmpty(userPassword)) { + if (!TextUtils.isEmpty(userAccount) && !TextUtils.isEmpty(userPassword)) { rememberPasswordView.setChecked(true); } else { rememberPasswordView.setChecked(false); @@ -85,7 +86,7 @@ }); loadingDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("登陆中,请稍后") + .setTipWord("登录中,请稍后") .create(); } @@ -153,14 +154,14 @@ AuthenticationHelper.savePublicKey(keyString); PublicKey publicKey = RSAUtils.keyStrToPublicKey(keyString); - String userName = userNameView.getText().toString(); + String account = userNameView.getText().toString(); String userPassword = userPasswordView.getText().toString(); if (autoLoginView.isChecked()) { SaveKeyValues.putValue("autoLogin", true); } else { SaveKeyValues.putValue("autoLogin", false); } - if (TextUtils.isEmpty(userName)) { + if (TextUtils.isEmpty(account)) { ToastHelper.showToast("用户名不能为空", ToastHelper.WARING); return; } @@ -169,12 +170,12 @@ return; } if (rememberPasswordView.isChecked()) { - SaveKeyValues.putValue("name", userName); - SaveKeyValues.putValue("password", userPassword); + StringHelper.saveUserAccount(account); + SaveKeyValues.putValue("userPassword", userPassword); } String dataByPublicKey = RSAUtils.encryptDataByPublicKey(userPassword.getBytes(), publicKey); //登录并获取Token,POST请求 - loginPresenter.onReadyRetrofitRequest(userName, dataByPublicKey); + loginPresenter.onReadyRetrofitRequest(account, dataByPublicKey); } } diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java index 61a8b1d..385ec1b 100644 --- a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -98,5 +98,4 @@ public void setOnItemClickListener(OnItemClickListener onItemClickListener) { this.clickListener = onItemClickListener; } - } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java index 1cfda9d..1dd316c 100644 --- a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -17,7 +17,7 @@ @Id(autoincrement = true) private Long id;//主键ID - private String userName;//用户名 + private String userAccount;//登录账户 private String caseId;//案卷id private String title;//案卷标题 private String content;//案卷简介 @@ -25,11 +25,11 @@ private String type;//推送类型 private String isRead;//0-已读;1-未读 - @Generated(hash = 2013153901) - public NoticeBean(Long id, String userName, String caseId, String title, + @Generated(hash = 1022814061) + public NoticeBean(Long id, String userAccount, String caseId, String title, String content, String pushDate, String type, String isRead) { this.id = id; - this.userName = userName; + this.userAccount = userAccount; this.caseId = caseId; this.title = title; this.content = content; @@ -50,12 +50,12 @@ this.id = id; } - public String getUserName() { - return this.userName; + public String getUserAccount() { + return this.userAccount; } - public void setUserName(String userName) { - this.userName = userName; + public void setUserAccount(String userAccount) { + this.userAccount = userAccount; } public String getCaseId() { diff --git a/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java b/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java index a733f25..10b4c77 100644 --- a/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java +++ b/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java @@ -25,7 +25,7 @@ */ public static class Properties { public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property UserName = new Property(1, String.class, "userName", false, "USER_NAME"); + public final static Property UserAccount = new Property(1, String.class, "userAccount", false, "USER_ACCOUNT"); public final static Property CaseId = new Property(2, String.class, "caseId", false, "CASE_ID"); public final static Property Title = new Property(3, String.class, "title", false, "TITLE"); public final static Property Content = new Property(4, String.class, "content", false, "CONTENT"); @@ -48,7 +48,7 @@ String constraint = ifNotExists? "IF NOT EXISTS ": ""; db.execSQL("CREATE TABLE " + constraint + "\"NOTICE_BEAN\" (" + // "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"USER_NAME\" TEXT," + // 1: userName + "\"USER_ACCOUNT\" TEXT," + // 1: userAccount "\"CASE_ID\" TEXT," + // 2: caseId "\"TITLE\" TEXT," + // 3: title "\"CONTENT\" TEXT," + // 4: content @@ -72,9 +72,9 @@ stmt.bindLong(1, id); } - String userName = entity.getUserName(); - if (userName != null) { - stmt.bindString(2, userName); + String userAccount = entity.getUserAccount(); + if (userAccount != null) { + stmt.bindString(2, userAccount); } String caseId = entity.getCaseId(); @@ -117,9 +117,9 @@ stmt.bindLong(1, id); } - String userName = entity.getUserName(); - if (userName != null) { - stmt.bindString(2, userName); + String userAccount = entity.getUserAccount(); + if (userAccount != null) { + stmt.bindString(2, userAccount); } String caseId = entity.getCaseId(); @@ -162,7 +162,7 @@ public NoticeBean readEntity(Cursor cursor, int offset) { NoticeBean entity = new NoticeBean( // cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // userName + cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // userAccount cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // caseId cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // title cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // content @@ -176,7 +176,7 @@ @Override public void readEntity(Cursor cursor, NoticeBean entity, int offset) { entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setUserName(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); + entity.setUserAccount(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); entity.setCaseId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); entity.setTitle(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); entity.setContent(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index fa17e1f..0030f57 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -2,6 +2,7 @@ import android.content.Context; import android.content.Intent; +import android.os.Message; import android.text.TextUtils; import android.util.Log; @@ -9,7 +10,8 @@ import com.casic.dcms.bean.NoticeBean; import com.casic.dcms.bean.PushResultBean; import com.casic.dcms.ui.CaseDetailActivity; -import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.ui.MainActivity; +import com.casic.dcms.ui.fragment.NoticePageFragment; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; @@ -36,7 +38,44 @@ // 处理透传消息 @Override public void onReceiveMessageData(Context context, GTTransmitMessage msg) { - // 透传消息的处理,详看 SDK demo + /** + * appid = DR9oeLL9va6aG3DYXy2w39 + * taskid = TEST_0515_d4689edeff9808959f10365895682f6f + * messageid = bd9c2465afd5464fb99368a579fd3fc8 + * pkg = com.casic.dcms + * cid = 9e85018b1972d664d9e86e9a6d03b4a7 + * playload = {"content":"您有一个工单超时,请快速处理1","data":{"id":"1392655327805825025"},"id":1393472265320001538,"title":"工单超时提醒","type":"NORMAL"} + * */ + Log.d(TAG, "onReceiveMessageData -> " + "\r\nplayload = " + new String(msg.getPayload())); + + Gson gson = new Gson(); + String messageContent = new String(msg.getPayload()); + PushResultBean resultBean = gson.fromJson(messageContent, new TypeToken() { + }.getType()); + + NoticeBean noticeBean = new NoticeBean(); + noticeBean.setUserAccount(StringHelper.getUserAccount()); + noticeBean.setCaseId(resultBean.getData().getId()); + noticeBean.setTitle(resultBean.getTitle()); + noticeBean.setContent(resultBean.getContent()); + noticeBean.setType(resultBean.getType()); + noticeBean.setPushDate(TimeOrDateUtil.timestampToDate(System.currentTimeMillis())); + noticeBean.setIsRead("1"); + + //存本地一份 + BaseApplication.getDaoSession().insert(noticeBean); + + //创建通知栏 + Message msgNotice = Message.obtain(); + msgNotice.what = Constant.PUSH_CREATE_NOTIFICATION; + msgNotice.obj = noticeBean; + MainActivity.sendMessage(msgNotice); + + //发送消息更新界面 + Message msgBean = Message.obtain(); + msgBean.what = Constant.PUSH_MESSAGE_DATA; + msgBean.obj = noticeBean; + NoticePageFragment.sendMessage(msgBean); } // 接收 cid @@ -45,7 +84,10 @@ Log.d(TAG, "onReceiveClientId -> " + "clientid = " + clientid); //通知MainActivity注册个推服务 if (!TextUtils.isEmpty(clientid)) { - BroadcastManager.getInstance(context).sendBroadcast(Constant.REGISTER_PUSH, clientid); + Message msg = Message.obtain(); + msg.what = Constant.PUSH_REGISTER; + msg.obj = clientid; + MainActivity.sendMessage(msg); } else { Log.d(TAG, "onReceiveClientId: ===>clientid = " + clientid); } @@ -66,34 +108,7 @@ // 通知到达,只有个推通道下发的通知会回调此方法 @Override public void onNotificationMessageArrived(Context context, GTNotificationMessage message) { - Log.d(TAG, "onNotificationMessageArrived: " + message.getContent()); - /** - * appid = DR9oeLL9va6aG3DYXy2w39 - * taskid = OSL-0514_xL4fPj7kqQ6tknVoQt3Mf6 - * messageid = b74187603fe34058a223949ead9f8dcf - * pkg = com.casic.dcms - * cid = cd1aec399b5504516102e399ecf7cda4 - * content = {"content":"您有一个工单超时,请快速处理","data":{"id":"1392655327805825025"},"id":1393131068164472834,"title":"工单超时提醒","type":"alarm"} - * title = 工单提醒 - * */ - Gson gson = new Gson(); - String messageContent = message.getContent(); - PushResultBean resultBean = gson.fromJson(messageContent, new TypeToken() { - }.getType()); - - NoticeBean noticeBean = new NoticeBean(); - noticeBean.setUserName(StringHelper.getUserName()); - noticeBean.setCaseId(resultBean.getData().getId()); - noticeBean.setTitle(resultBean.getTitle()); - noticeBean.setContent(resultBean.getContent()); - noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate(System.currentTimeMillis())); - noticeBean.setIsRead("1"); - - //存本地一份 - BaseApplication.getDaoSession().insert(noticeBean); - //发送消息更新界面 - BroadcastManager.getInstance(context).sendBroadcast(Constant.NOTICE_MSG, gson.toJson(noticeBean)); + Log.d(TAG, "onNotificationMessageArrived: 通知到达"); } // 通知点击,只有个推通道下发的通知会回调此方法 diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index 1d706ff..224f8d3 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -20,6 +20,7 @@ import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.RSAUtils; import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.InputDialog; import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; @@ -66,11 +67,11 @@ @Override public void initData() { - String userName = (String) SaveKeyValues.getValue("name", ""); - String userPassword = (String) SaveKeyValues.getValue("password", ""); - userNameView.setText(userName); + String userAccount = StringHelper.getUserAccount(); + String userPassword = (String) SaveKeyValues.getValue("userPassword", ""); + userNameView.setText(userAccount); userPasswordView.setText(userPassword); - if (!TextUtils.isEmpty(userName) && !TextUtils.isEmpty(userPassword)) { + if (!TextUtils.isEmpty(userAccount) && !TextUtils.isEmpty(userPassword)) { rememberPasswordView.setChecked(true); } else { rememberPasswordView.setChecked(false); @@ -85,7 +86,7 @@ }); loadingDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("登陆中,请稍后") + .setTipWord("登录中,请稍后") .create(); } @@ -153,14 +154,14 @@ AuthenticationHelper.savePublicKey(keyString); PublicKey publicKey = RSAUtils.keyStrToPublicKey(keyString); - String userName = userNameView.getText().toString(); + String account = userNameView.getText().toString(); String userPassword = userPasswordView.getText().toString(); if (autoLoginView.isChecked()) { SaveKeyValues.putValue("autoLogin", true); } else { SaveKeyValues.putValue("autoLogin", false); } - if (TextUtils.isEmpty(userName)) { + if (TextUtils.isEmpty(account)) { ToastHelper.showToast("用户名不能为空", ToastHelper.WARING); return; } @@ -169,12 +170,12 @@ return; } if (rememberPasswordView.isChecked()) { - SaveKeyValues.putValue("name", userName); - SaveKeyValues.putValue("password", userPassword); + StringHelper.saveUserAccount(account); + SaveKeyValues.putValue("userPassword", userPassword); } String dataByPublicKey = RSAUtils.encryptDataByPublicKey(userPassword.getBytes(), publicKey); //登录并获取Token,POST请求 - loginPresenter.onReadyRetrofitRequest(userName, dataByPublicKey); + loginPresenter.onReadyRetrofitRequest(account, dataByPublicKey); } } diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index cba9a54..4c223cd 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -1,9 +1,11 @@ package com.casic.dcms.ui; -import android.content.BroadcastReceiver; +import android.app.Notification; import android.content.Context; import android.content.Intent; import android.location.Location; +import android.os.Handler; +import android.os.Message; import android.text.TextUtils; import android.util.Log; import android.view.MenuItem; @@ -18,6 +20,7 @@ import com.casic.dcms.adapter.MainPageAdapter; import com.casic.dcms.base.DoubleClickExitActivity; import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.bean.NoticeBean; import com.casic.dcms.mvp.presenter.PushRegisterPresenterImpl; import com.casic.dcms.mvp.presenter.UploadPositionPresenterImpl; import com.casic.dcms.mvp.view.IPushRegisterView; @@ -26,17 +29,19 @@ import com.casic.dcms.ui.fragment.MinePageFragment; import com.casic.dcms.ui.fragment.NoticePageFragment; import com.casic.dcms.ui.fragment.PhonePageFragment; -import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.NotificationHelper; import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.callback.ILocationListener; import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; -import com.google.gson.Gson; import com.gyf.immersionbar.ImmersionBar; +import com.igexin.sdk.message.GTTransmitMessage; +import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; @@ -51,11 +56,12 @@ NoScrollViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; + private MenuItem menuItem; private List pageList; - private BroadcastManager broadcastManager; private UploadPositionPresenterImpl uploadPositionPresenter; private PushRegisterPresenterImpl registerPresenter; + private static WeakReferenceHandler weakReferenceHandler; @Override public int initLayoutView() { @@ -80,29 +86,7 @@ pageList.add(new PhonePageFragment()); pageList.add(new NoticePageFragment()); pageList.add(new MinePageFragment()); - broadcastManager = BroadcastManager.getInstance(this); - broadcastManager.addAction(new String[]{Constant.LOGIN_OUT_ACTION, Constant.REGISTER_PUSH}, - new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - if (action != null) { - switch (action) { - case Constant.LOGIN_OUT_ACTION: - String loginOut = intent.getStringExtra("data"); - assert loginOut != null; - if (loginOut.equals("请求成功")) { - finish(); - } - break; - case Constant.REGISTER_PUSH: - String clientid = intent.getStringExtra("data"); - registerPresenter.onReadyRetrofitRequest(clientid); - break; - } - } - } - }); + weakReferenceHandler = new WeakReferenceHandler(this); String imei = OtherUtils.obtainSimCardSerialNumber(this); if (TextUtils.isEmpty(imei)) { return; @@ -175,15 +159,59 @@ mainViewPager.setAdapter(mainPageAdapter); } - @Override - protected void onDestroy() { - super.onDestroy(); - broadcastManager.destroy(Constant.LOGIN_OUT_ACTION, Constant.REGISTER_PUSH); - if (uploadPositionPresenter != null) { - uploadPositionPresenter.disposeRetrofitRequest(); + /** + * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveClientId(Context, String)}页面调用 + * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveMessageData(Context, GTTransmitMessage)}页面调用 + */ + public static void sendMessage(Message msg) { + weakReferenceHandler.sendMessage(msg); + } + + /** + * 供{@link MinePageFragment#obtainLoginOutResult(ActionResultBean)}页面调用 + */ + public static void sendEmptyMessage(int what) { + weakReferenceHandler.sendEmptyMessage(what); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(MainActivity activity) { + reference = new WeakReference<>(activity); } - if (registerPresenter != null) { - registerPresenter.disposeRetrofitRequest(); + + @Override + public void handleMessage(Message msg) { + MainActivity mainActivity = reference.get(); + switch (msg.what) { + case Constant.PUSH_REGISTER: + String clientId = (String) msg.obj; + Log.d(TAG, "注册个推Client: " + clientId); + reference.get().registerPresenter.onReadyRetrofitRequest(clientId); + break; + case Constant.PUSH_CREATE_NOTIFICATION: + Log.d(TAG, "创建通知栏"); + NoticeBean noticeBean = (NoticeBean) msg.obj; + if (null == noticeBean) { + return; + } + NotificationHelper notificationHelper = NotificationHelper.getInstance(mainActivity); + Notification notification = notificationHelper.createDefault( + noticeBean.getTitle(), + noticeBean.getContent(), + noticeBean.getCaseId(), + CaseDetailActivity.class); + notificationHelper.push(1, notification); + break; + case Constant.LOGIN_OUT: + Log.d(TAG, "退出登录"); + //回到登录页 + SaveKeyValues.putValue("autoLogin", false); + mainActivity.startActivity(new Intent(mainActivity, LoginActivity.class)); + mainActivity.finish(); + break; + } } } @@ -194,6 +222,17 @@ @Override public void obtainRegisterResult(ActionResultBean resultBean) { - Log.d(TAG, "obtainRegisterResult: " + new Gson().toJson(resultBean)); +// Log.d(TAG, "obtainRegisterResult: " + new Gson().toJson(resultBean)); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (uploadPositionPresenter != null) { + uploadPositionPresenter.disposeRetrofitRequest(); + } + if (registerPresenter != null) { + registerPresenter.disposeRetrofitRequest(); + } } } diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java index 61a8b1d..385ec1b 100644 --- a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -98,5 +98,4 @@ public void setOnItemClickListener(OnItemClickListener onItemClickListener) { this.clickListener = onItemClickListener; } - } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java index 1cfda9d..1dd316c 100644 --- a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -17,7 +17,7 @@ @Id(autoincrement = true) private Long id;//主键ID - private String userName;//用户名 + private String userAccount;//登录账户 private String caseId;//案卷id private String title;//案卷标题 private String content;//案卷简介 @@ -25,11 +25,11 @@ private String type;//推送类型 private String isRead;//0-已读;1-未读 - @Generated(hash = 2013153901) - public NoticeBean(Long id, String userName, String caseId, String title, + @Generated(hash = 1022814061) + public NoticeBean(Long id, String userAccount, String caseId, String title, String content, String pushDate, String type, String isRead) { this.id = id; - this.userName = userName; + this.userAccount = userAccount; this.caseId = caseId; this.title = title; this.content = content; @@ -50,12 +50,12 @@ this.id = id; } - public String getUserName() { - return this.userName; + public String getUserAccount() { + return this.userAccount; } - public void setUserName(String userName) { - this.userName = userName; + public void setUserAccount(String userAccount) { + this.userAccount = userAccount; } public String getCaseId() { diff --git a/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java b/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java index a733f25..10b4c77 100644 --- a/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java +++ b/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java @@ -25,7 +25,7 @@ */ public static class Properties { public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property UserName = new Property(1, String.class, "userName", false, "USER_NAME"); + public final static Property UserAccount = new Property(1, String.class, "userAccount", false, "USER_ACCOUNT"); public final static Property CaseId = new Property(2, String.class, "caseId", false, "CASE_ID"); public final static Property Title = new Property(3, String.class, "title", false, "TITLE"); public final static Property Content = new Property(4, String.class, "content", false, "CONTENT"); @@ -48,7 +48,7 @@ String constraint = ifNotExists? "IF NOT EXISTS ": ""; db.execSQL("CREATE TABLE " + constraint + "\"NOTICE_BEAN\" (" + // "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"USER_NAME\" TEXT," + // 1: userName + "\"USER_ACCOUNT\" TEXT," + // 1: userAccount "\"CASE_ID\" TEXT," + // 2: caseId "\"TITLE\" TEXT," + // 3: title "\"CONTENT\" TEXT," + // 4: content @@ -72,9 +72,9 @@ stmt.bindLong(1, id); } - String userName = entity.getUserName(); - if (userName != null) { - stmt.bindString(2, userName); + String userAccount = entity.getUserAccount(); + if (userAccount != null) { + stmt.bindString(2, userAccount); } String caseId = entity.getCaseId(); @@ -117,9 +117,9 @@ stmt.bindLong(1, id); } - String userName = entity.getUserName(); - if (userName != null) { - stmt.bindString(2, userName); + String userAccount = entity.getUserAccount(); + if (userAccount != null) { + stmt.bindString(2, userAccount); } String caseId = entity.getCaseId(); @@ -162,7 +162,7 @@ public NoticeBean readEntity(Cursor cursor, int offset) { NoticeBean entity = new NoticeBean( // cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // userName + cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // userAccount cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // caseId cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // title cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // content @@ -176,7 +176,7 @@ @Override public void readEntity(Cursor cursor, NoticeBean entity, int offset) { entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setUserName(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); + entity.setUserAccount(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); entity.setCaseId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); entity.setTitle(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); entity.setContent(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index fa17e1f..0030f57 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -2,6 +2,7 @@ import android.content.Context; import android.content.Intent; +import android.os.Message; import android.text.TextUtils; import android.util.Log; @@ -9,7 +10,8 @@ import com.casic.dcms.bean.NoticeBean; import com.casic.dcms.bean.PushResultBean; import com.casic.dcms.ui.CaseDetailActivity; -import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.ui.MainActivity; +import com.casic.dcms.ui.fragment.NoticePageFragment; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; @@ -36,7 +38,44 @@ // 处理透传消息 @Override public void onReceiveMessageData(Context context, GTTransmitMessage msg) { - // 透传消息的处理,详看 SDK demo + /** + * appid = DR9oeLL9va6aG3DYXy2w39 + * taskid = TEST_0515_d4689edeff9808959f10365895682f6f + * messageid = bd9c2465afd5464fb99368a579fd3fc8 + * pkg = com.casic.dcms + * cid = 9e85018b1972d664d9e86e9a6d03b4a7 + * playload = {"content":"您有一个工单超时,请快速处理1","data":{"id":"1392655327805825025"},"id":1393472265320001538,"title":"工单超时提醒","type":"NORMAL"} + * */ + Log.d(TAG, "onReceiveMessageData -> " + "\r\nplayload = " + new String(msg.getPayload())); + + Gson gson = new Gson(); + String messageContent = new String(msg.getPayload()); + PushResultBean resultBean = gson.fromJson(messageContent, new TypeToken() { + }.getType()); + + NoticeBean noticeBean = new NoticeBean(); + noticeBean.setUserAccount(StringHelper.getUserAccount()); + noticeBean.setCaseId(resultBean.getData().getId()); + noticeBean.setTitle(resultBean.getTitle()); + noticeBean.setContent(resultBean.getContent()); + noticeBean.setType(resultBean.getType()); + noticeBean.setPushDate(TimeOrDateUtil.timestampToDate(System.currentTimeMillis())); + noticeBean.setIsRead("1"); + + //存本地一份 + BaseApplication.getDaoSession().insert(noticeBean); + + //创建通知栏 + Message msgNotice = Message.obtain(); + msgNotice.what = Constant.PUSH_CREATE_NOTIFICATION; + msgNotice.obj = noticeBean; + MainActivity.sendMessage(msgNotice); + + //发送消息更新界面 + Message msgBean = Message.obtain(); + msgBean.what = Constant.PUSH_MESSAGE_DATA; + msgBean.obj = noticeBean; + NoticePageFragment.sendMessage(msgBean); } // 接收 cid @@ -45,7 +84,10 @@ Log.d(TAG, "onReceiveClientId -> " + "clientid = " + clientid); //通知MainActivity注册个推服务 if (!TextUtils.isEmpty(clientid)) { - BroadcastManager.getInstance(context).sendBroadcast(Constant.REGISTER_PUSH, clientid); + Message msg = Message.obtain(); + msg.what = Constant.PUSH_REGISTER; + msg.obj = clientid; + MainActivity.sendMessage(msg); } else { Log.d(TAG, "onReceiveClientId: ===>clientid = " + clientid); } @@ -66,34 +108,7 @@ // 通知到达,只有个推通道下发的通知会回调此方法 @Override public void onNotificationMessageArrived(Context context, GTNotificationMessage message) { - Log.d(TAG, "onNotificationMessageArrived: " + message.getContent()); - /** - * appid = DR9oeLL9va6aG3DYXy2w39 - * taskid = OSL-0514_xL4fPj7kqQ6tknVoQt3Mf6 - * messageid = b74187603fe34058a223949ead9f8dcf - * pkg = com.casic.dcms - * cid = cd1aec399b5504516102e399ecf7cda4 - * content = {"content":"您有一个工单超时,请快速处理","data":{"id":"1392655327805825025"},"id":1393131068164472834,"title":"工单超时提醒","type":"alarm"} - * title = 工单提醒 - * */ - Gson gson = new Gson(); - String messageContent = message.getContent(); - PushResultBean resultBean = gson.fromJson(messageContent, new TypeToken() { - }.getType()); - - NoticeBean noticeBean = new NoticeBean(); - noticeBean.setUserName(StringHelper.getUserName()); - noticeBean.setCaseId(resultBean.getData().getId()); - noticeBean.setTitle(resultBean.getTitle()); - noticeBean.setContent(resultBean.getContent()); - noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate(System.currentTimeMillis())); - noticeBean.setIsRead("1"); - - //存本地一份 - BaseApplication.getDaoSession().insert(noticeBean); - //发送消息更新界面 - BroadcastManager.getInstance(context).sendBroadcast(Constant.NOTICE_MSG, gson.toJson(noticeBean)); + Log.d(TAG, "onNotificationMessageArrived: 通知到达"); } // 通知点击,只有个推通道下发的通知会回调此方法 diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index 1d706ff..224f8d3 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -20,6 +20,7 @@ import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.RSAUtils; import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.InputDialog; import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; @@ -66,11 +67,11 @@ @Override public void initData() { - String userName = (String) SaveKeyValues.getValue("name", ""); - String userPassword = (String) SaveKeyValues.getValue("password", ""); - userNameView.setText(userName); + String userAccount = StringHelper.getUserAccount(); + String userPassword = (String) SaveKeyValues.getValue("userPassword", ""); + userNameView.setText(userAccount); userPasswordView.setText(userPassword); - if (!TextUtils.isEmpty(userName) && !TextUtils.isEmpty(userPassword)) { + if (!TextUtils.isEmpty(userAccount) && !TextUtils.isEmpty(userPassword)) { rememberPasswordView.setChecked(true); } else { rememberPasswordView.setChecked(false); @@ -85,7 +86,7 @@ }); loadingDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("登陆中,请稍后") + .setTipWord("登录中,请稍后") .create(); } @@ -153,14 +154,14 @@ AuthenticationHelper.savePublicKey(keyString); PublicKey publicKey = RSAUtils.keyStrToPublicKey(keyString); - String userName = userNameView.getText().toString(); + String account = userNameView.getText().toString(); String userPassword = userPasswordView.getText().toString(); if (autoLoginView.isChecked()) { SaveKeyValues.putValue("autoLogin", true); } else { SaveKeyValues.putValue("autoLogin", false); } - if (TextUtils.isEmpty(userName)) { + if (TextUtils.isEmpty(account)) { ToastHelper.showToast("用户名不能为空", ToastHelper.WARING); return; } @@ -169,12 +170,12 @@ return; } if (rememberPasswordView.isChecked()) { - SaveKeyValues.putValue("name", userName); - SaveKeyValues.putValue("password", userPassword); + StringHelper.saveUserAccount(account); + SaveKeyValues.putValue("userPassword", userPassword); } String dataByPublicKey = RSAUtils.encryptDataByPublicKey(userPassword.getBytes(), publicKey); //登录并获取Token,POST请求 - loginPresenter.onReadyRetrofitRequest(userName, dataByPublicKey); + loginPresenter.onReadyRetrofitRequest(account, dataByPublicKey); } } diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index cba9a54..4c223cd 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -1,9 +1,11 @@ package com.casic.dcms.ui; -import android.content.BroadcastReceiver; +import android.app.Notification; import android.content.Context; import android.content.Intent; import android.location.Location; +import android.os.Handler; +import android.os.Message; import android.text.TextUtils; import android.util.Log; import android.view.MenuItem; @@ -18,6 +20,7 @@ import com.casic.dcms.adapter.MainPageAdapter; import com.casic.dcms.base.DoubleClickExitActivity; import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.bean.NoticeBean; import com.casic.dcms.mvp.presenter.PushRegisterPresenterImpl; import com.casic.dcms.mvp.presenter.UploadPositionPresenterImpl; import com.casic.dcms.mvp.view.IPushRegisterView; @@ -26,17 +29,19 @@ import com.casic.dcms.ui.fragment.MinePageFragment; import com.casic.dcms.ui.fragment.NoticePageFragment; import com.casic.dcms.ui.fragment.PhonePageFragment; -import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.NotificationHelper; import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.callback.ILocationListener; import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; -import com.google.gson.Gson; import com.gyf.immersionbar.ImmersionBar; +import com.igexin.sdk.message.GTTransmitMessage; +import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; @@ -51,11 +56,12 @@ NoScrollViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; + private MenuItem menuItem; private List pageList; - private BroadcastManager broadcastManager; private UploadPositionPresenterImpl uploadPositionPresenter; private PushRegisterPresenterImpl registerPresenter; + private static WeakReferenceHandler weakReferenceHandler; @Override public int initLayoutView() { @@ -80,29 +86,7 @@ pageList.add(new PhonePageFragment()); pageList.add(new NoticePageFragment()); pageList.add(new MinePageFragment()); - broadcastManager = BroadcastManager.getInstance(this); - broadcastManager.addAction(new String[]{Constant.LOGIN_OUT_ACTION, Constant.REGISTER_PUSH}, - new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - if (action != null) { - switch (action) { - case Constant.LOGIN_OUT_ACTION: - String loginOut = intent.getStringExtra("data"); - assert loginOut != null; - if (loginOut.equals("请求成功")) { - finish(); - } - break; - case Constant.REGISTER_PUSH: - String clientid = intent.getStringExtra("data"); - registerPresenter.onReadyRetrofitRequest(clientid); - break; - } - } - } - }); + weakReferenceHandler = new WeakReferenceHandler(this); String imei = OtherUtils.obtainSimCardSerialNumber(this); if (TextUtils.isEmpty(imei)) { return; @@ -175,15 +159,59 @@ mainViewPager.setAdapter(mainPageAdapter); } - @Override - protected void onDestroy() { - super.onDestroy(); - broadcastManager.destroy(Constant.LOGIN_OUT_ACTION, Constant.REGISTER_PUSH); - if (uploadPositionPresenter != null) { - uploadPositionPresenter.disposeRetrofitRequest(); + /** + * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveClientId(Context, String)}页面调用 + * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveMessageData(Context, GTTransmitMessage)}页面调用 + */ + public static void sendMessage(Message msg) { + weakReferenceHandler.sendMessage(msg); + } + + /** + * 供{@link MinePageFragment#obtainLoginOutResult(ActionResultBean)}页面调用 + */ + public static void sendEmptyMessage(int what) { + weakReferenceHandler.sendEmptyMessage(what); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(MainActivity activity) { + reference = new WeakReference<>(activity); } - if (registerPresenter != null) { - registerPresenter.disposeRetrofitRequest(); + + @Override + public void handleMessage(Message msg) { + MainActivity mainActivity = reference.get(); + switch (msg.what) { + case Constant.PUSH_REGISTER: + String clientId = (String) msg.obj; + Log.d(TAG, "注册个推Client: " + clientId); + reference.get().registerPresenter.onReadyRetrofitRequest(clientId); + break; + case Constant.PUSH_CREATE_NOTIFICATION: + Log.d(TAG, "创建通知栏"); + NoticeBean noticeBean = (NoticeBean) msg.obj; + if (null == noticeBean) { + return; + } + NotificationHelper notificationHelper = NotificationHelper.getInstance(mainActivity); + Notification notification = notificationHelper.createDefault( + noticeBean.getTitle(), + noticeBean.getContent(), + noticeBean.getCaseId(), + CaseDetailActivity.class); + notificationHelper.push(1, notification); + break; + case Constant.LOGIN_OUT: + Log.d(TAG, "退出登录"); + //回到登录页 + SaveKeyValues.putValue("autoLogin", false); + mainActivity.startActivity(new Intent(mainActivity, LoginActivity.class)); + mainActivity.finish(); + break; + } } } @@ -194,6 +222,17 @@ @Override public void obtainRegisterResult(ActionResultBean resultBean) { - Log.d(TAG, "obtainRegisterResult: " + new Gson().toJson(resultBean)); +// Log.d(TAG, "obtainRegisterResult: " + new Gson().toJson(resultBean)); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (uploadPositionPresenter != null) { + uploadPositionPresenter.disposeRetrofitRequest(); + } + if (registerPresenter != null) { + registerPresenter.disposeRetrofitRequest(); + } } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index c70520f..ddb25aa 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -17,8 +17,8 @@ import com.casic.dcms.mvp.view.IUpdateVersionView; import com.casic.dcms.ui.ChangePasswordActivity; import com.casic.dcms.ui.HelpfulActivity; +import com.casic.dcms.ui.MainActivity; import com.casic.dcms.ui.UserInfoActivity; -import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.ToastHelper; @@ -117,10 +117,7 @@ @Override public void obtainLoginOutResult(ActionResultBean resultBean) { -// Log.d(TAG, "obtainLoginOutResult: " + new Gson().toJson(resultBean)); - if (resultBean.isSuccess()) { - BroadcastManager.getInstance(context).sendBroadcast(Constant.LOGIN_OUT_ACTION, resultBean.getMessage()); - } + MainActivity.sendEmptyMessage(Constant.LOGIN_OUT); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java index 61a8b1d..385ec1b 100644 --- a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -98,5 +98,4 @@ public void setOnItemClickListener(OnItemClickListener onItemClickListener) { this.clickListener = onItemClickListener; } - } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java index 1cfda9d..1dd316c 100644 --- a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -17,7 +17,7 @@ @Id(autoincrement = true) private Long id;//主键ID - private String userName;//用户名 + private String userAccount;//登录账户 private String caseId;//案卷id private String title;//案卷标题 private String content;//案卷简介 @@ -25,11 +25,11 @@ private String type;//推送类型 private String isRead;//0-已读;1-未读 - @Generated(hash = 2013153901) - public NoticeBean(Long id, String userName, String caseId, String title, + @Generated(hash = 1022814061) + public NoticeBean(Long id, String userAccount, String caseId, String title, String content, String pushDate, String type, String isRead) { this.id = id; - this.userName = userName; + this.userAccount = userAccount; this.caseId = caseId; this.title = title; this.content = content; @@ -50,12 +50,12 @@ this.id = id; } - public String getUserName() { - return this.userName; + public String getUserAccount() { + return this.userAccount; } - public void setUserName(String userName) { - this.userName = userName; + public void setUserAccount(String userAccount) { + this.userAccount = userAccount; } public String getCaseId() { diff --git a/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java b/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java index a733f25..10b4c77 100644 --- a/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java +++ b/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java @@ -25,7 +25,7 @@ */ public static class Properties { public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property UserName = new Property(1, String.class, "userName", false, "USER_NAME"); + public final static Property UserAccount = new Property(1, String.class, "userAccount", false, "USER_ACCOUNT"); public final static Property CaseId = new Property(2, String.class, "caseId", false, "CASE_ID"); public final static Property Title = new Property(3, String.class, "title", false, "TITLE"); public final static Property Content = new Property(4, String.class, "content", false, "CONTENT"); @@ -48,7 +48,7 @@ String constraint = ifNotExists? "IF NOT EXISTS ": ""; db.execSQL("CREATE TABLE " + constraint + "\"NOTICE_BEAN\" (" + // "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"USER_NAME\" TEXT," + // 1: userName + "\"USER_ACCOUNT\" TEXT," + // 1: userAccount "\"CASE_ID\" TEXT," + // 2: caseId "\"TITLE\" TEXT," + // 3: title "\"CONTENT\" TEXT," + // 4: content @@ -72,9 +72,9 @@ stmt.bindLong(1, id); } - String userName = entity.getUserName(); - if (userName != null) { - stmt.bindString(2, userName); + String userAccount = entity.getUserAccount(); + if (userAccount != null) { + stmt.bindString(2, userAccount); } String caseId = entity.getCaseId(); @@ -117,9 +117,9 @@ stmt.bindLong(1, id); } - String userName = entity.getUserName(); - if (userName != null) { - stmt.bindString(2, userName); + String userAccount = entity.getUserAccount(); + if (userAccount != null) { + stmt.bindString(2, userAccount); } String caseId = entity.getCaseId(); @@ -162,7 +162,7 @@ public NoticeBean readEntity(Cursor cursor, int offset) { NoticeBean entity = new NoticeBean( // cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // userName + cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // userAccount cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // caseId cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // title cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // content @@ -176,7 +176,7 @@ @Override public void readEntity(Cursor cursor, NoticeBean entity, int offset) { entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setUserName(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); + entity.setUserAccount(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); entity.setCaseId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); entity.setTitle(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); entity.setContent(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index fa17e1f..0030f57 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -2,6 +2,7 @@ import android.content.Context; import android.content.Intent; +import android.os.Message; import android.text.TextUtils; import android.util.Log; @@ -9,7 +10,8 @@ import com.casic.dcms.bean.NoticeBean; import com.casic.dcms.bean.PushResultBean; import com.casic.dcms.ui.CaseDetailActivity; -import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.ui.MainActivity; +import com.casic.dcms.ui.fragment.NoticePageFragment; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; @@ -36,7 +38,44 @@ // 处理透传消息 @Override public void onReceiveMessageData(Context context, GTTransmitMessage msg) { - // 透传消息的处理,详看 SDK demo + /** + * appid = DR9oeLL9va6aG3DYXy2w39 + * taskid = TEST_0515_d4689edeff9808959f10365895682f6f + * messageid = bd9c2465afd5464fb99368a579fd3fc8 + * pkg = com.casic.dcms + * cid = 9e85018b1972d664d9e86e9a6d03b4a7 + * playload = {"content":"您有一个工单超时,请快速处理1","data":{"id":"1392655327805825025"},"id":1393472265320001538,"title":"工单超时提醒","type":"NORMAL"} + * */ + Log.d(TAG, "onReceiveMessageData -> " + "\r\nplayload = " + new String(msg.getPayload())); + + Gson gson = new Gson(); + String messageContent = new String(msg.getPayload()); + PushResultBean resultBean = gson.fromJson(messageContent, new TypeToken() { + }.getType()); + + NoticeBean noticeBean = new NoticeBean(); + noticeBean.setUserAccount(StringHelper.getUserAccount()); + noticeBean.setCaseId(resultBean.getData().getId()); + noticeBean.setTitle(resultBean.getTitle()); + noticeBean.setContent(resultBean.getContent()); + noticeBean.setType(resultBean.getType()); + noticeBean.setPushDate(TimeOrDateUtil.timestampToDate(System.currentTimeMillis())); + noticeBean.setIsRead("1"); + + //存本地一份 + BaseApplication.getDaoSession().insert(noticeBean); + + //创建通知栏 + Message msgNotice = Message.obtain(); + msgNotice.what = Constant.PUSH_CREATE_NOTIFICATION; + msgNotice.obj = noticeBean; + MainActivity.sendMessage(msgNotice); + + //发送消息更新界面 + Message msgBean = Message.obtain(); + msgBean.what = Constant.PUSH_MESSAGE_DATA; + msgBean.obj = noticeBean; + NoticePageFragment.sendMessage(msgBean); } // 接收 cid @@ -45,7 +84,10 @@ Log.d(TAG, "onReceiveClientId -> " + "clientid = " + clientid); //通知MainActivity注册个推服务 if (!TextUtils.isEmpty(clientid)) { - BroadcastManager.getInstance(context).sendBroadcast(Constant.REGISTER_PUSH, clientid); + Message msg = Message.obtain(); + msg.what = Constant.PUSH_REGISTER; + msg.obj = clientid; + MainActivity.sendMessage(msg); } else { Log.d(TAG, "onReceiveClientId: ===>clientid = " + clientid); } @@ -66,34 +108,7 @@ // 通知到达,只有个推通道下发的通知会回调此方法 @Override public void onNotificationMessageArrived(Context context, GTNotificationMessage message) { - Log.d(TAG, "onNotificationMessageArrived: " + message.getContent()); - /** - * appid = DR9oeLL9va6aG3DYXy2w39 - * taskid = OSL-0514_xL4fPj7kqQ6tknVoQt3Mf6 - * messageid = b74187603fe34058a223949ead9f8dcf - * pkg = com.casic.dcms - * cid = cd1aec399b5504516102e399ecf7cda4 - * content = {"content":"您有一个工单超时,请快速处理","data":{"id":"1392655327805825025"},"id":1393131068164472834,"title":"工单超时提醒","type":"alarm"} - * title = 工单提醒 - * */ - Gson gson = new Gson(); - String messageContent = message.getContent(); - PushResultBean resultBean = gson.fromJson(messageContent, new TypeToken() { - }.getType()); - - NoticeBean noticeBean = new NoticeBean(); - noticeBean.setUserName(StringHelper.getUserName()); - noticeBean.setCaseId(resultBean.getData().getId()); - noticeBean.setTitle(resultBean.getTitle()); - noticeBean.setContent(resultBean.getContent()); - noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate(System.currentTimeMillis())); - noticeBean.setIsRead("1"); - - //存本地一份 - BaseApplication.getDaoSession().insert(noticeBean); - //发送消息更新界面 - BroadcastManager.getInstance(context).sendBroadcast(Constant.NOTICE_MSG, gson.toJson(noticeBean)); + Log.d(TAG, "onNotificationMessageArrived: 通知到达"); } // 通知点击,只有个推通道下发的通知会回调此方法 diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index 1d706ff..224f8d3 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -20,6 +20,7 @@ import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.RSAUtils; import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.InputDialog; import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; @@ -66,11 +67,11 @@ @Override public void initData() { - String userName = (String) SaveKeyValues.getValue("name", ""); - String userPassword = (String) SaveKeyValues.getValue("password", ""); - userNameView.setText(userName); + String userAccount = StringHelper.getUserAccount(); + String userPassword = (String) SaveKeyValues.getValue("userPassword", ""); + userNameView.setText(userAccount); userPasswordView.setText(userPassword); - if (!TextUtils.isEmpty(userName) && !TextUtils.isEmpty(userPassword)) { + if (!TextUtils.isEmpty(userAccount) && !TextUtils.isEmpty(userPassword)) { rememberPasswordView.setChecked(true); } else { rememberPasswordView.setChecked(false); @@ -85,7 +86,7 @@ }); loadingDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("登陆中,请稍后") + .setTipWord("登录中,请稍后") .create(); } @@ -153,14 +154,14 @@ AuthenticationHelper.savePublicKey(keyString); PublicKey publicKey = RSAUtils.keyStrToPublicKey(keyString); - String userName = userNameView.getText().toString(); + String account = userNameView.getText().toString(); String userPassword = userPasswordView.getText().toString(); if (autoLoginView.isChecked()) { SaveKeyValues.putValue("autoLogin", true); } else { SaveKeyValues.putValue("autoLogin", false); } - if (TextUtils.isEmpty(userName)) { + if (TextUtils.isEmpty(account)) { ToastHelper.showToast("用户名不能为空", ToastHelper.WARING); return; } @@ -169,12 +170,12 @@ return; } if (rememberPasswordView.isChecked()) { - SaveKeyValues.putValue("name", userName); - SaveKeyValues.putValue("password", userPassword); + StringHelper.saveUserAccount(account); + SaveKeyValues.putValue("userPassword", userPassword); } String dataByPublicKey = RSAUtils.encryptDataByPublicKey(userPassword.getBytes(), publicKey); //登录并获取Token,POST请求 - loginPresenter.onReadyRetrofitRequest(userName, dataByPublicKey); + loginPresenter.onReadyRetrofitRequest(account, dataByPublicKey); } } diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index cba9a54..4c223cd 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -1,9 +1,11 @@ package com.casic.dcms.ui; -import android.content.BroadcastReceiver; +import android.app.Notification; import android.content.Context; import android.content.Intent; import android.location.Location; +import android.os.Handler; +import android.os.Message; import android.text.TextUtils; import android.util.Log; import android.view.MenuItem; @@ -18,6 +20,7 @@ import com.casic.dcms.adapter.MainPageAdapter; import com.casic.dcms.base.DoubleClickExitActivity; import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.bean.NoticeBean; import com.casic.dcms.mvp.presenter.PushRegisterPresenterImpl; import com.casic.dcms.mvp.presenter.UploadPositionPresenterImpl; import com.casic.dcms.mvp.view.IPushRegisterView; @@ -26,17 +29,19 @@ import com.casic.dcms.ui.fragment.MinePageFragment; import com.casic.dcms.ui.fragment.NoticePageFragment; import com.casic.dcms.ui.fragment.PhonePageFragment; -import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.NotificationHelper; import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.callback.ILocationListener; import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; -import com.google.gson.Gson; import com.gyf.immersionbar.ImmersionBar; +import com.igexin.sdk.message.GTTransmitMessage; +import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; @@ -51,11 +56,12 @@ NoScrollViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; + private MenuItem menuItem; private List pageList; - private BroadcastManager broadcastManager; private UploadPositionPresenterImpl uploadPositionPresenter; private PushRegisterPresenterImpl registerPresenter; + private static WeakReferenceHandler weakReferenceHandler; @Override public int initLayoutView() { @@ -80,29 +86,7 @@ pageList.add(new PhonePageFragment()); pageList.add(new NoticePageFragment()); pageList.add(new MinePageFragment()); - broadcastManager = BroadcastManager.getInstance(this); - broadcastManager.addAction(new String[]{Constant.LOGIN_OUT_ACTION, Constant.REGISTER_PUSH}, - new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - if (action != null) { - switch (action) { - case Constant.LOGIN_OUT_ACTION: - String loginOut = intent.getStringExtra("data"); - assert loginOut != null; - if (loginOut.equals("请求成功")) { - finish(); - } - break; - case Constant.REGISTER_PUSH: - String clientid = intent.getStringExtra("data"); - registerPresenter.onReadyRetrofitRequest(clientid); - break; - } - } - } - }); + weakReferenceHandler = new WeakReferenceHandler(this); String imei = OtherUtils.obtainSimCardSerialNumber(this); if (TextUtils.isEmpty(imei)) { return; @@ -175,15 +159,59 @@ mainViewPager.setAdapter(mainPageAdapter); } - @Override - protected void onDestroy() { - super.onDestroy(); - broadcastManager.destroy(Constant.LOGIN_OUT_ACTION, Constant.REGISTER_PUSH); - if (uploadPositionPresenter != null) { - uploadPositionPresenter.disposeRetrofitRequest(); + /** + * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveClientId(Context, String)}页面调用 + * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveMessageData(Context, GTTransmitMessage)}页面调用 + */ + public static void sendMessage(Message msg) { + weakReferenceHandler.sendMessage(msg); + } + + /** + * 供{@link MinePageFragment#obtainLoginOutResult(ActionResultBean)}页面调用 + */ + public static void sendEmptyMessage(int what) { + weakReferenceHandler.sendEmptyMessage(what); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(MainActivity activity) { + reference = new WeakReference<>(activity); } - if (registerPresenter != null) { - registerPresenter.disposeRetrofitRequest(); + + @Override + public void handleMessage(Message msg) { + MainActivity mainActivity = reference.get(); + switch (msg.what) { + case Constant.PUSH_REGISTER: + String clientId = (String) msg.obj; + Log.d(TAG, "注册个推Client: " + clientId); + reference.get().registerPresenter.onReadyRetrofitRequest(clientId); + break; + case Constant.PUSH_CREATE_NOTIFICATION: + Log.d(TAG, "创建通知栏"); + NoticeBean noticeBean = (NoticeBean) msg.obj; + if (null == noticeBean) { + return; + } + NotificationHelper notificationHelper = NotificationHelper.getInstance(mainActivity); + Notification notification = notificationHelper.createDefault( + noticeBean.getTitle(), + noticeBean.getContent(), + noticeBean.getCaseId(), + CaseDetailActivity.class); + notificationHelper.push(1, notification); + break; + case Constant.LOGIN_OUT: + Log.d(TAG, "退出登录"); + //回到登录页 + SaveKeyValues.putValue("autoLogin", false); + mainActivity.startActivity(new Intent(mainActivity, LoginActivity.class)); + mainActivity.finish(); + break; + } } } @@ -194,6 +222,17 @@ @Override public void obtainRegisterResult(ActionResultBean resultBean) { - Log.d(TAG, "obtainRegisterResult: " + new Gson().toJson(resultBean)); +// Log.d(TAG, "obtainRegisterResult: " + new Gson().toJson(resultBean)); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (uploadPositionPresenter != null) { + uploadPositionPresenter.disposeRetrofitRequest(); + } + if (registerPresenter != null) { + registerPresenter.disposeRetrofitRequest(); + } } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index c70520f..ddb25aa 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -17,8 +17,8 @@ import com.casic.dcms.mvp.view.IUpdateVersionView; import com.casic.dcms.ui.ChangePasswordActivity; import com.casic.dcms.ui.HelpfulActivity; +import com.casic.dcms.ui.MainActivity; import com.casic.dcms.ui.UserInfoActivity; -import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.ToastHelper; @@ -117,10 +117,7 @@ @Override public void obtainLoginOutResult(ActionResultBean resultBean) { -// Log.d(TAG, "obtainLoginOutResult: " + new Gson().toJson(resultBean)); - if (resultBean.isSuccess()) { - BroadcastManager.getInstance(context).sendBroadcast(Constant.LOGIN_OUT_ACTION, resultBean.getMessage()); - } + MainActivity.sendEmptyMessage(Constant.LOGIN_OUT); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/NoticePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/NoticePageFragment.java index 708f2a8..18abe0c 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/NoticePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/NoticePageFragment.java @@ -1,9 +1,11 @@ package com.casic.dcms.ui.fragment; -import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; +import android.os.Handler; +import android.os.Message; import android.text.TextUtils; +import android.util.Log; import android.view.ViewGroup; import androidx.annotation.NonNull; @@ -19,13 +21,13 @@ import com.casic.dcms.greendao.DaoSession; import com.casic.dcms.greendao.NoticeBeanDao; import com.casic.dcms.ui.CaseDetailActivity; -import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.StringHelper; -import com.google.gson.Gson; +import com.igexin.sdk.message.GTTransmitMessage; import com.qmuiteam.qmui.recyclerView.QMUIRVItemSwipeAction; import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; @@ -33,15 +35,15 @@ public class NoticePageFragment extends BaseFragment { + private static final String TAG = "NoticePageFragment"; @BindView(R.id.swipeRecyclerView) RecyclerView swipeRecyclerView; private Context context; private List noticeBeans = new ArrayList<>(); private SwipeViewAdapter swipeViewAdapter; - private BroadcastManager broadcastManager; - private Gson gson; private DaoSession daoSession; + private static WeakReferenceHandler weakReferenceHandler; @Override protected int initLayoutView() { @@ -55,34 +57,20 @@ @Override protected void initData() { - gson = new Gson(); daoSession = BaseApplication.getDaoSession(); swipeViewAdapter = new SwipeViewAdapter(context); - //根据userName加载历史数据 - String userName = StringHelper.getUserName(); - if (TextUtils.isEmpty(userName)) { + //根据loginName加载历史数据 + String account = StringHelper.getUserAccount(); + if (TextUtils.isEmpty(account)) { return; } - noticeBeans = daoSession.queryBuilder(NoticeBean.class).where(NoticeBeanDao.Properties.UserName.eq(userName)).list(); + noticeBeans = daoSession.queryBuilder(NoticeBean.class) + .where(NoticeBeanDao.Properties.UserAccount.eq(account)) + .orderDesc(NoticeBeanDao.Properties.PushDate)//按时间顺序最新顺序排序 + .list(); swipeViewAdapter.setData(noticeBeans); - broadcastManager = BroadcastManager.getInstance(context); - broadcastManager.addAction(Constant.NOTICE_MSG, new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - if (action != null) { - if (Constant.NOTICE_MSG.equals(action)) { - String data = intent.getStringExtra("data"); - assert data != null; - NoticeBean noticeBean = gson.fromJson(data, NoticeBean.class); - noticeBeans.add(noticeBean); - //更新数据 - swipeViewAdapter.setData(noticeBeans); - } - } - } - }); + weakReferenceHandler = new WeakReferenceHandler(this); } @Override @@ -134,11 +122,31 @@ }); } - @Override - public void onDestroyView() { - super.onDestroyView(); - if (broadcastManager != null) { - broadcastManager.destroy(Constant.NOTICE_MSG); + /** + * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveMessageData(Context, GTTransmitMessage)}调用 + */ + public static void sendMessage(Message msg) { + weakReferenceHandler.sendMessage(msg); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(NoticePageFragment fragment) { + reference = new WeakReference<>(fragment); + } + + @Override + public void handleMessage(Message msg) { + NoticePageFragment noticePageFragment = reference.get(); + List noticeBeans = noticePageFragment.noticeBeans; + if (msg.what == Constant.PUSH_MESSAGE_DATA) { + NoticeBean noticeBean = (NoticeBean) msg.obj; + Log.d(TAG, "收到推送消息,更新列表: " + noticeBean.getCaseId()); + noticeBeans.add(0, noticeBean);//新消息永远放到第一个 + //更新数据 + noticePageFragment.swipeViewAdapter.setData(noticeBeans); + } } } } diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java index 61a8b1d..385ec1b 100644 --- a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -98,5 +98,4 @@ public void setOnItemClickListener(OnItemClickListener onItemClickListener) { this.clickListener = onItemClickListener; } - } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java index 1cfda9d..1dd316c 100644 --- a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -17,7 +17,7 @@ @Id(autoincrement = true) private Long id;//主键ID - private String userName;//用户名 + private String userAccount;//登录账户 private String caseId;//案卷id private String title;//案卷标题 private String content;//案卷简介 @@ -25,11 +25,11 @@ private String type;//推送类型 private String isRead;//0-已读;1-未读 - @Generated(hash = 2013153901) - public NoticeBean(Long id, String userName, String caseId, String title, + @Generated(hash = 1022814061) + public NoticeBean(Long id, String userAccount, String caseId, String title, String content, String pushDate, String type, String isRead) { this.id = id; - this.userName = userName; + this.userAccount = userAccount; this.caseId = caseId; this.title = title; this.content = content; @@ -50,12 +50,12 @@ this.id = id; } - public String getUserName() { - return this.userName; + public String getUserAccount() { + return this.userAccount; } - public void setUserName(String userName) { - this.userName = userName; + public void setUserAccount(String userAccount) { + this.userAccount = userAccount; } public String getCaseId() { diff --git a/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java b/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java index a733f25..10b4c77 100644 --- a/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java +++ b/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java @@ -25,7 +25,7 @@ */ public static class Properties { public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property UserName = new Property(1, String.class, "userName", false, "USER_NAME"); + public final static Property UserAccount = new Property(1, String.class, "userAccount", false, "USER_ACCOUNT"); public final static Property CaseId = new Property(2, String.class, "caseId", false, "CASE_ID"); public final static Property Title = new Property(3, String.class, "title", false, "TITLE"); public final static Property Content = new Property(4, String.class, "content", false, "CONTENT"); @@ -48,7 +48,7 @@ String constraint = ifNotExists? "IF NOT EXISTS ": ""; db.execSQL("CREATE TABLE " + constraint + "\"NOTICE_BEAN\" (" + // "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"USER_NAME\" TEXT," + // 1: userName + "\"USER_ACCOUNT\" TEXT," + // 1: userAccount "\"CASE_ID\" TEXT," + // 2: caseId "\"TITLE\" TEXT," + // 3: title "\"CONTENT\" TEXT," + // 4: content @@ -72,9 +72,9 @@ stmt.bindLong(1, id); } - String userName = entity.getUserName(); - if (userName != null) { - stmt.bindString(2, userName); + String userAccount = entity.getUserAccount(); + if (userAccount != null) { + stmt.bindString(2, userAccount); } String caseId = entity.getCaseId(); @@ -117,9 +117,9 @@ stmt.bindLong(1, id); } - String userName = entity.getUserName(); - if (userName != null) { - stmt.bindString(2, userName); + String userAccount = entity.getUserAccount(); + if (userAccount != null) { + stmt.bindString(2, userAccount); } String caseId = entity.getCaseId(); @@ -162,7 +162,7 @@ public NoticeBean readEntity(Cursor cursor, int offset) { NoticeBean entity = new NoticeBean( // cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // userName + cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // userAccount cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // caseId cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // title cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // content @@ -176,7 +176,7 @@ @Override public void readEntity(Cursor cursor, NoticeBean entity, int offset) { entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setUserName(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); + entity.setUserAccount(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); entity.setCaseId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); entity.setTitle(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); entity.setContent(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index fa17e1f..0030f57 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -2,6 +2,7 @@ import android.content.Context; import android.content.Intent; +import android.os.Message; import android.text.TextUtils; import android.util.Log; @@ -9,7 +10,8 @@ import com.casic.dcms.bean.NoticeBean; import com.casic.dcms.bean.PushResultBean; import com.casic.dcms.ui.CaseDetailActivity; -import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.ui.MainActivity; +import com.casic.dcms.ui.fragment.NoticePageFragment; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; @@ -36,7 +38,44 @@ // 处理透传消息 @Override public void onReceiveMessageData(Context context, GTTransmitMessage msg) { - // 透传消息的处理,详看 SDK demo + /** + * appid = DR9oeLL9va6aG3DYXy2w39 + * taskid = TEST_0515_d4689edeff9808959f10365895682f6f + * messageid = bd9c2465afd5464fb99368a579fd3fc8 + * pkg = com.casic.dcms + * cid = 9e85018b1972d664d9e86e9a6d03b4a7 + * playload = {"content":"您有一个工单超时,请快速处理1","data":{"id":"1392655327805825025"},"id":1393472265320001538,"title":"工单超时提醒","type":"NORMAL"} + * */ + Log.d(TAG, "onReceiveMessageData -> " + "\r\nplayload = " + new String(msg.getPayload())); + + Gson gson = new Gson(); + String messageContent = new String(msg.getPayload()); + PushResultBean resultBean = gson.fromJson(messageContent, new TypeToken() { + }.getType()); + + NoticeBean noticeBean = new NoticeBean(); + noticeBean.setUserAccount(StringHelper.getUserAccount()); + noticeBean.setCaseId(resultBean.getData().getId()); + noticeBean.setTitle(resultBean.getTitle()); + noticeBean.setContent(resultBean.getContent()); + noticeBean.setType(resultBean.getType()); + noticeBean.setPushDate(TimeOrDateUtil.timestampToDate(System.currentTimeMillis())); + noticeBean.setIsRead("1"); + + //存本地一份 + BaseApplication.getDaoSession().insert(noticeBean); + + //创建通知栏 + Message msgNotice = Message.obtain(); + msgNotice.what = Constant.PUSH_CREATE_NOTIFICATION; + msgNotice.obj = noticeBean; + MainActivity.sendMessage(msgNotice); + + //发送消息更新界面 + Message msgBean = Message.obtain(); + msgBean.what = Constant.PUSH_MESSAGE_DATA; + msgBean.obj = noticeBean; + NoticePageFragment.sendMessage(msgBean); } // 接收 cid @@ -45,7 +84,10 @@ Log.d(TAG, "onReceiveClientId -> " + "clientid = " + clientid); //通知MainActivity注册个推服务 if (!TextUtils.isEmpty(clientid)) { - BroadcastManager.getInstance(context).sendBroadcast(Constant.REGISTER_PUSH, clientid); + Message msg = Message.obtain(); + msg.what = Constant.PUSH_REGISTER; + msg.obj = clientid; + MainActivity.sendMessage(msg); } else { Log.d(TAG, "onReceiveClientId: ===>clientid = " + clientid); } @@ -66,34 +108,7 @@ // 通知到达,只有个推通道下发的通知会回调此方法 @Override public void onNotificationMessageArrived(Context context, GTNotificationMessage message) { - Log.d(TAG, "onNotificationMessageArrived: " + message.getContent()); - /** - * appid = DR9oeLL9va6aG3DYXy2w39 - * taskid = OSL-0514_xL4fPj7kqQ6tknVoQt3Mf6 - * messageid = b74187603fe34058a223949ead9f8dcf - * pkg = com.casic.dcms - * cid = cd1aec399b5504516102e399ecf7cda4 - * content = {"content":"您有一个工单超时,请快速处理","data":{"id":"1392655327805825025"},"id":1393131068164472834,"title":"工单超时提醒","type":"alarm"} - * title = 工单提醒 - * */ - Gson gson = new Gson(); - String messageContent = message.getContent(); - PushResultBean resultBean = gson.fromJson(messageContent, new TypeToken() { - }.getType()); - - NoticeBean noticeBean = new NoticeBean(); - noticeBean.setUserName(StringHelper.getUserName()); - noticeBean.setCaseId(resultBean.getData().getId()); - noticeBean.setTitle(resultBean.getTitle()); - noticeBean.setContent(resultBean.getContent()); - noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate(System.currentTimeMillis())); - noticeBean.setIsRead("1"); - - //存本地一份 - BaseApplication.getDaoSession().insert(noticeBean); - //发送消息更新界面 - BroadcastManager.getInstance(context).sendBroadcast(Constant.NOTICE_MSG, gson.toJson(noticeBean)); + Log.d(TAG, "onNotificationMessageArrived: 通知到达"); } // 通知点击,只有个推通道下发的通知会回调此方法 diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index 1d706ff..224f8d3 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -20,6 +20,7 @@ import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.RSAUtils; import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.InputDialog; import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; @@ -66,11 +67,11 @@ @Override public void initData() { - String userName = (String) SaveKeyValues.getValue("name", ""); - String userPassword = (String) SaveKeyValues.getValue("password", ""); - userNameView.setText(userName); + String userAccount = StringHelper.getUserAccount(); + String userPassword = (String) SaveKeyValues.getValue("userPassword", ""); + userNameView.setText(userAccount); userPasswordView.setText(userPassword); - if (!TextUtils.isEmpty(userName) && !TextUtils.isEmpty(userPassword)) { + if (!TextUtils.isEmpty(userAccount) && !TextUtils.isEmpty(userPassword)) { rememberPasswordView.setChecked(true); } else { rememberPasswordView.setChecked(false); @@ -85,7 +86,7 @@ }); loadingDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("登陆中,请稍后") + .setTipWord("登录中,请稍后") .create(); } @@ -153,14 +154,14 @@ AuthenticationHelper.savePublicKey(keyString); PublicKey publicKey = RSAUtils.keyStrToPublicKey(keyString); - String userName = userNameView.getText().toString(); + String account = userNameView.getText().toString(); String userPassword = userPasswordView.getText().toString(); if (autoLoginView.isChecked()) { SaveKeyValues.putValue("autoLogin", true); } else { SaveKeyValues.putValue("autoLogin", false); } - if (TextUtils.isEmpty(userName)) { + if (TextUtils.isEmpty(account)) { ToastHelper.showToast("用户名不能为空", ToastHelper.WARING); return; } @@ -169,12 +170,12 @@ return; } if (rememberPasswordView.isChecked()) { - SaveKeyValues.putValue("name", userName); - SaveKeyValues.putValue("password", userPassword); + StringHelper.saveUserAccount(account); + SaveKeyValues.putValue("userPassword", userPassword); } String dataByPublicKey = RSAUtils.encryptDataByPublicKey(userPassword.getBytes(), publicKey); //登录并获取Token,POST请求 - loginPresenter.onReadyRetrofitRequest(userName, dataByPublicKey); + loginPresenter.onReadyRetrofitRequest(account, dataByPublicKey); } } diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index cba9a54..4c223cd 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -1,9 +1,11 @@ package com.casic.dcms.ui; -import android.content.BroadcastReceiver; +import android.app.Notification; import android.content.Context; import android.content.Intent; import android.location.Location; +import android.os.Handler; +import android.os.Message; import android.text.TextUtils; import android.util.Log; import android.view.MenuItem; @@ -18,6 +20,7 @@ import com.casic.dcms.adapter.MainPageAdapter; import com.casic.dcms.base.DoubleClickExitActivity; import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.bean.NoticeBean; import com.casic.dcms.mvp.presenter.PushRegisterPresenterImpl; import com.casic.dcms.mvp.presenter.UploadPositionPresenterImpl; import com.casic.dcms.mvp.view.IPushRegisterView; @@ -26,17 +29,19 @@ import com.casic.dcms.ui.fragment.MinePageFragment; import com.casic.dcms.ui.fragment.NoticePageFragment; import com.casic.dcms.ui.fragment.PhonePageFragment; -import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.NotificationHelper; import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.callback.ILocationListener; import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; -import com.google.gson.Gson; import com.gyf.immersionbar.ImmersionBar; +import com.igexin.sdk.message.GTTransmitMessage; +import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; @@ -51,11 +56,12 @@ NoScrollViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; + private MenuItem menuItem; private List pageList; - private BroadcastManager broadcastManager; private UploadPositionPresenterImpl uploadPositionPresenter; private PushRegisterPresenterImpl registerPresenter; + private static WeakReferenceHandler weakReferenceHandler; @Override public int initLayoutView() { @@ -80,29 +86,7 @@ pageList.add(new PhonePageFragment()); pageList.add(new NoticePageFragment()); pageList.add(new MinePageFragment()); - broadcastManager = BroadcastManager.getInstance(this); - broadcastManager.addAction(new String[]{Constant.LOGIN_OUT_ACTION, Constant.REGISTER_PUSH}, - new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - if (action != null) { - switch (action) { - case Constant.LOGIN_OUT_ACTION: - String loginOut = intent.getStringExtra("data"); - assert loginOut != null; - if (loginOut.equals("请求成功")) { - finish(); - } - break; - case Constant.REGISTER_PUSH: - String clientid = intent.getStringExtra("data"); - registerPresenter.onReadyRetrofitRequest(clientid); - break; - } - } - } - }); + weakReferenceHandler = new WeakReferenceHandler(this); String imei = OtherUtils.obtainSimCardSerialNumber(this); if (TextUtils.isEmpty(imei)) { return; @@ -175,15 +159,59 @@ mainViewPager.setAdapter(mainPageAdapter); } - @Override - protected void onDestroy() { - super.onDestroy(); - broadcastManager.destroy(Constant.LOGIN_OUT_ACTION, Constant.REGISTER_PUSH); - if (uploadPositionPresenter != null) { - uploadPositionPresenter.disposeRetrofitRequest(); + /** + * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveClientId(Context, String)}页面调用 + * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveMessageData(Context, GTTransmitMessage)}页面调用 + */ + public static void sendMessage(Message msg) { + weakReferenceHandler.sendMessage(msg); + } + + /** + * 供{@link MinePageFragment#obtainLoginOutResult(ActionResultBean)}页面调用 + */ + public static void sendEmptyMessage(int what) { + weakReferenceHandler.sendEmptyMessage(what); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(MainActivity activity) { + reference = new WeakReference<>(activity); } - if (registerPresenter != null) { - registerPresenter.disposeRetrofitRequest(); + + @Override + public void handleMessage(Message msg) { + MainActivity mainActivity = reference.get(); + switch (msg.what) { + case Constant.PUSH_REGISTER: + String clientId = (String) msg.obj; + Log.d(TAG, "注册个推Client: " + clientId); + reference.get().registerPresenter.onReadyRetrofitRequest(clientId); + break; + case Constant.PUSH_CREATE_NOTIFICATION: + Log.d(TAG, "创建通知栏"); + NoticeBean noticeBean = (NoticeBean) msg.obj; + if (null == noticeBean) { + return; + } + NotificationHelper notificationHelper = NotificationHelper.getInstance(mainActivity); + Notification notification = notificationHelper.createDefault( + noticeBean.getTitle(), + noticeBean.getContent(), + noticeBean.getCaseId(), + CaseDetailActivity.class); + notificationHelper.push(1, notification); + break; + case Constant.LOGIN_OUT: + Log.d(TAG, "退出登录"); + //回到登录页 + SaveKeyValues.putValue("autoLogin", false); + mainActivity.startActivity(new Intent(mainActivity, LoginActivity.class)); + mainActivity.finish(); + break; + } } } @@ -194,6 +222,17 @@ @Override public void obtainRegisterResult(ActionResultBean resultBean) { - Log.d(TAG, "obtainRegisterResult: " + new Gson().toJson(resultBean)); +// Log.d(TAG, "obtainRegisterResult: " + new Gson().toJson(resultBean)); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (uploadPositionPresenter != null) { + uploadPositionPresenter.disposeRetrofitRequest(); + } + if (registerPresenter != null) { + registerPresenter.disposeRetrofitRequest(); + } } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index c70520f..ddb25aa 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -17,8 +17,8 @@ import com.casic.dcms.mvp.view.IUpdateVersionView; import com.casic.dcms.ui.ChangePasswordActivity; import com.casic.dcms.ui.HelpfulActivity; +import com.casic.dcms.ui.MainActivity; import com.casic.dcms.ui.UserInfoActivity; -import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.ToastHelper; @@ -117,10 +117,7 @@ @Override public void obtainLoginOutResult(ActionResultBean resultBean) { -// Log.d(TAG, "obtainLoginOutResult: " + new Gson().toJson(resultBean)); - if (resultBean.isSuccess()) { - BroadcastManager.getInstance(context).sendBroadcast(Constant.LOGIN_OUT_ACTION, resultBean.getMessage()); - } + MainActivity.sendEmptyMessage(Constant.LOGIN_OUT); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/NoticePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/NoticePageFragment.java index 708f2a8..18abe0c 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/NoticePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/NoticePageFragment.java @@ -1,9 +1,11 @@ package com.casic.dcms.ui.fragment; -import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; +import android.os.Handler; +import android.os.Message; import android.text.TextUtils; +import android.util.Log; import android.view.ViewGroup; import androidx.annotation.NonNull; @@ -19,13 +21,13 @@ import com.casic.dcms.greendao.DaoSession; import com.casic.dcms.greendao.NoticeBeanDao; import com.casic.dcms.ui.CaseDetailActivity; -import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.StringHelper; -import com.google.gson.Gson; +import com.igexin.sdk.message.GTTransmitMessage; import com.qmuiteam.qmui.recyclerView.QMUIRVItemSwipeAction; import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; @@ -33,15 +35,15 @@ public class NoticePageFragment extends BaseFragment { + private static final String TAG = "NoticePageFragment"; @BindView(R.id.swipeRecyclerView) RecyclerView swipeRecyclerView; private Context context; private List noticeBeans = new ArrayList<>(); private SwipeViewAdapter swipeViewAdapter; - private BroadcastManager broadcastManager; - private Gson gson; private DaoSession daoSession; + private static WeakReferenceHandler weakReferenceHandler; @Override protected int initLayoutView() { @@ -55,34 +57,20 @@ @Override protected void initData() { - gson = new Gson(); daoSession = BaseApplication.getDaoSession(); swipeViewAdapter = new SwipeViewAdapter(context); - //根据userName加载历史数据 - String userName = StringHelper.getUserName(); - if (TextUtils.isEmpty(userName)) { + //根据loginName加载历史数据 + String account = StringHelper.getUserAccount(); + if (TextUtils.isEmpty(account)) { return; } - noticeBeans = daoSession.queryBuilder(NoticeBean.class).where(NoticeBeanDao.Properties.UserName.eq(userName)).list(); + noticeBeans = daoSession.queryBuilder(NoticeBean.class) + .where(NoticeBeanDao.Properties.UserAccount.eq(account)) + .orderDesc(NoticeBeanDao.Properties.PushDate)//按时间顺序最新顺序排序 + .list(); swipeViewAdapter.setData(noticeBeans); - broadcastManager = BroadcastManager.getInstance(context); - broadcastManager.addAction(Constant.NOTICE_MSG, new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - if (action != null) { - if (Constant.NOTICE_MSG.equals(action)) { - String data = intent.getStringExtra("data"); - assert data != null; - NoticeBean noticeBean = gson.fromJson(data, NoticeBean.class); - noticeBeans.add(noticeBean); - //更新数据 - swipeViewAdapter.setData(noticeBeans); - } - } - } - }); + weakReferenceHandler = new WeakReferenceHandler(this); } @Override @@ -134,11 +122,31 @@ }); } - @Override - public void onDestroyView() { - super.onDestroyView(); - if (broadcastManager != null) { - broadcastManager.destroy(Constant.NOTICE_MSG); + /** + * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveMessageData(Context, GTTransmitMessage)}调用 + */ + public static void sendMessage(Message msg) { + weakReferenceHandler.sendMessage(msg); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(NoticePageFragment fragment) { + reference = new WeakReference<>(fragment); + } + + @Override + public void handleMessage(Message msg) { + NoticePageFragment noticePageFragment = reference.get(); + List noticeBeans = noticePageFragment.noticeBeans; + if (msg.what == Constant.PUSH_MESSAGE_DATA) { + NoticeBean noticeBean = (NoticeBean) msg.obj; + Log.d(TAG, "收到推送消息,更新列表: " + noticeBean.getCaseId()); + noticeBeans.add(0, noticeBean);//新消息永远放到第一个 + //更新数据 + noticePageFragment.swipeViewAdapter.setData(noticeBeans); + } } } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java index c29046a..8a2376a 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java @@ -19,6 +19,8 @@ import com.casic.dcms.mvp.view.IPhoneBookView; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import java.util.ArrayList; import java.util.List; @@ -105,7 +107,8 @@ deptTreeView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() { @Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { - callPhone(deptAndPersons.get(groupPosition).get(childPosition).getPersonPhone()); + PersonBean personBean = deptAndPersons.get(groupPosition).get(childPosition); + callPhone(personBean.getPersonName(), personBean.getPersonPhone()); return true; } }); @@ -115,15 +118,27 @@ /** * 直接呼叫电话 */ - private void callPhone(String personPhone) { + private void callPhone(String personName, String personPhone) { if (TextUtils.isEmpty(personPhone)) { ToastHelper.showToast("手机号为空,无法拨号", ToastHelper.ERROR); return; } - Intent intent = new Intent(); - intent.setAction(Intent.ACTION_CALL); - intent.setData(Uri.parse("tel:" + personPhone)); - startActivity(intent); + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("提示") + .setMessage("是否确定拨打[" + personName + "]的电话?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + Intent intent = new Intent(); + intent.setAction(Intent.ACTION_CALL); + intent.setData(Uri.parse("tel:" + personPhone)); + startActivity(intent); + } + }) + .create().show(); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java index 61a8b1d..385ec1b 100644 --- a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -98,5 +98,4 @@ public void setOnItemClickListener(OnItemClickListener onItemClickListener) { this.clickListener = onItemClickListener; } - } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java index 1cfda9d..1dd316c 100644 --- a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -17,7 +17,7 @@ @Id(autoincrement = true) private Long id;//主键ID - private String userName;//用户名 + private String userAccount;//登录账户 private String caseId;//案卷id private String title;//案卷标题 private String content;//案卷简介 @@ -25,11 +25,11 @@ private String type;//推送类型 private String isRead;//0-已读;1-未读 - @Generated(hash = 2013153901) - public NoticeBean(Long id, String userName, String caseId, String title, + @Generated(hash = 1022814061) + public NoticeBean(Long id, String userAccount, String caseId, String title, String content, String pushDate, String type, String isRead) { this.id = id; - this.userName = userName; + this.userAccount = userAccount; this.caseId = caseId; this.title = title; this.content = content; @@ -50,12 +50,12 @@ this.id = id; } - public String getUserName() { - return this.userName; + public String getUserAccount() { + return this.userAccount; } - public void setUserName(String userName) { - this.userName = userName; + public void setUserAccount(String userAccount) { + this.userAccount = userAccount; } public String getCaseId() { diff --git a/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java b/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java index a733f25..10b4c77 100644 --- a/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java +++ b/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java @@ -25,7 +25,7 @@ */ public static class Properties { public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property UserName = new Property(1, String.class, "userName", false, "USER_NAME"); + public final static Property UserAccount = new Property(1, String.class, "userAccount", false, "USER_ACCOUNT"); public final static Property CaseId = new Property(2, String.class, "caseId", false, "CASE_ID"); public final static Property Title = new Property(3, String.class, "title", false, "TITLE"); public final static Property Content = new Property(4, String.class, "content", false, "CONTENT"); @@ -48,7 +48,7 @@ String constraint = ifNotExists? "IF NOT EXISTS ": ""; db.execSQL("CREATE TABLE " + constraint + "\"NOTICE_BEAN\" (" + // "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"USER_NAME\" TEXT," + // 1: userName + "\"USER_ACCOUNT\" TEXT," + // 1: userAccount "\"CASE_ID\" TEXT," + // 2: caseId "\"TITLE\" TEXT," + // 3: title "\"CONTENT\" TEXT," + // 4: content @@ -72,9 +72,9 @@ stmt.bindLong(1, id); } - String userName = entity.getUserName(); - if (userName != null) { - stmt.bindString(2, userName); + String userAccount = entity.getUserAccount(); + if (userAccount != null) { + stmt.bindString(2, userAccount); } String caseId = entity.getCaseId(); @@ -117,9 +117,9 @@ stmt.bindLong(1, id); } - String userName = entity.getUserName(); - if (userName != null) { - stmt.bindString(2, userName); + String userAccount = entity.getUserAccount(); + if (userAccount != null) { + stmt.bindString(2, userAccount); } String caseId = entity.getCaseId(); @@ -162,7 +162,7 @@ public NoticeBean readEntity(Cursor cursor, int offset) { NoticeBean entity = new NoticeBean( // cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // userName + cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // userAccount cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // caseId cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // title cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // content @@ -176,7 +176,7 @@ @Override public void readEntity(Cursor cursor, NoticeBean entity, int offset) { entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setUserName(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); + entity.setUserAccount(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); entity.setCaseId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); entity.setTitle(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); entity.setContent(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index fa17e1f..0030f57 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -2,6 +2,7 @@ import android.content.Context; import android.content.Intent; +import android.os.Message; import android.text.TextUtils; import android.util.Log; @@ -9,7 +10,8 @@ import com.casic.dcms.bean.NoticeBean; import com.casic.dcms.bean.PushResultBean; import com.casic.dcms.ui.CaseDetailActivity; -import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.ui.MainActivity; +import com.casic.dcms.ui.fragment.NoticePageFragment; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; @@ -36,7 +38,44 @@ // 处理透传消息 @Override public void onReceiveMessageData(Context context, GTTransmitMessage msg) { - // 透传消息的处理,详看 SDK demo + /** + * appid = DR9oeLL9va6aG3DYXy2w39 + * taskid = TEST_0515_d4689edeff9808959f10365895682f6f + * messageid = bd9c2465afd5464fb99368a579fd3fc8 + * pkg = com.casic.dcms + * cid = 9e85018b1972d664d9e86e9a6d03b4a7 + * playload = {"content":"您有一个工单超时,请快速处理1","data":{"id":"1392655327805825025"},"id":1393472265320001538,"title":"工单超时提醒","type":"NORMAL"} + * */ + Log.d(TAG, "onReceiveMessageData -> " + "\r\nplayload = " + new String(msg.getPayload())); + + Gson gson = new Gson(); + String messageContent = new String(msg.getPayload()); + PushResultBean resultBean = gson.fromJson(messageContent, new TypeToken() { + }.getType()); + + NoticeBean noticeBean = new NoticeBean(); + noticeBean.setUserAccount(StringHelper.getUserAccount()); + noticeBean.setCaseId(resultBean.getData().getId()); + noticeBean.setTitle(resultBean.getTitle()); + noticeBean.setContent(resultBean.getContent()); + noticeBean.setType(resultBean.getType()); + noticeBean.setPushDate(TimeOrDateUtil.timestampToDate(System.currentTimeMillis())); + noticeBean.setIsRead("1"); + + //存本地一份 + BaseApplication.getDaoSession().insert(noticeBean); + + //创建通知栏 + Message msgNotice = Message.obtain(); + msgNotice.what = Constant.PUSH_CREATE_NOTIFICATION; + msgNotice.obj = noticeBean; + MainActivity.sendMessage(msgNotice); + + //发送消息更新界面 + Message msgBean = Message.obtain(); + msgBean.what = Constant.PUSH_MESSAGE_DATA; + msgBean.obj = noticeBean; + NoticePageFragment.sendMessage(msgBean); } // 接收 cid @@ -45,7 +84,10 @@ Log.d(TAG, "onReceiveClientId -> " + "clientid = " + clientid); //通知MainActivity注册个推服务 if (!TextUtils.isEmpty(clientid)) { - BroadcastManager.getInstance(context).sendBroadcast(Constant.REGISTER_PUSH, clientid); + Message msg = Message.obtain(); + msg.what = Constant.PUSH_REGISTER; + msg.obj = clientid; + MainActivity.sendMessage(msg); } else { Log.d(TAG, "onReceiveClientId: ===>clientid = " + clientid); } @@ -66,34 +108,7 @@ // 通知到达,只有个推通道下发的通知会回调此方法 @Override public void onNotificationMessageArrived(Context context, GTNotificationMessage message) { - Log.d(TAG, "onNotificationMessageArrived: " + message.getContent()); - /** - * appid = DR9oeLL9va6aG3DYXy2w39 - * taskid = OSL-0514_xL4fPj7kqQ6tknVoQt3Mf6 - * messageid = b74187603fe34058a223949ead9f8dcf - * pkg = com.casic.dcms - * cid = cd1aec399b5504516102e399ecf7cda4 - * content = {"content":"您有一个工单超时,请快速处理","data":{"id":"1392655327805825025"},"id":1393131068164472834,"title":"工单超时提醒","type":"alarm"} - * title = 工单提醒 - * */ - Gson gson = new Gson(); - String messageContent = message.getContent(); - PushResultBean resultBean = gson.fromJson(messageContent, new TypeToken() { - }.getType()); - - NoticeBean noticeBean = new NoticeBean(); - noticeBean.setUserName(StringHelper.getUserName()); - noticeBean.setCaseId(resultBean.getData().getId()); - noticeBean.setTitle(resultBean.getTitle()); - noticeBean.setContent(resultBean.getContent()); - noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate(System.currentTimeMillis())); - noticeBean.setIsRead("1"); - - //存本地一份 - BaseApplication.getDaoSession().insert(noticeBean); - //发送消息更新界面 - BroadcastManager.getInstance(context).sendBroadcast(Constant.NOTICE_MSG, gson.toJson(noticeBean)); + Log.d(TAG, "onNotificationMessageArrived: 通知到达"); } // 通知点击,只有个推通道下发的通知会回调此方法 diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index 1d706ff..224f8d3 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -20,6 +20,7 @@ import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.RSAUtils; import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.InputDialog; import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; @@ -66,11 +67,11 @@ @Override public void initData() { - String userName = (String) SaveKeyValues.getValue("name", ""); - String userPassword = (String) SaveKeyValues.getValue("password", ""); - userNameView.setText(userName); + String userAccount = StringHelper.getUserAccount(); + String userPassword = (String) SaveKeyValues.getValue("userPassword", ""); + userNameView.setText(userAccount); userPasswordView.setText(userPassword); - if (!TextUtils.isEmpty(userName) && !TextUtils.isEmpty(userPassword)) { + if (!TextUtils.isEmpty(userAccount) && !TextUtils.isEmpty(userPassword)) { rememberPasswordView.setChecked(true); } else { rememberPasswordView.setChecked(false); @@ -85,7 +86,7 @@ }); loadingDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("登陆中,请稍后") + .setTipWord("登录中,请稍后") .create(); } @@ -153,14 +154,14 @@ AuthenticationHelper.savePublicKey(keyString); PublicKey publicKey = RSAUtils.keyStrToPublicKey(keyString); - String userName = userNameView.getText().toString(); + String account = userNameView.getText().toString(); String userPassword = userPasswordView.getText().toString(); if (autoLoginView.isChecked()) { SaveKeyValues.putValue("autoLogin", true); } else { SaveKeyValues.putValue("autoLogin", false); } - if (TextUtils.isEmpty(userName)) { + if (TextUtils.isEmpty(account)) { ToastHelper.showToast("用户名不能为空", ToastHelper.WARING); return; } @@ -169,12 +170,12 @@ return; } if (rememberPasswordView.isChecked()) { - SaveKeyValues.putValue("name", userName); - SaveKeyValues.putValue("password", userPassword); + StringHelper.saveUserAccount(account); + SaveKeyValues.putValue("userPassword", userPassword); } String dataByPublicKey = RSAUtils.encryptDataByPublicKey(userPassword.getBytes(), publicKey); //登录并获取Token,POST请求 - loginPresenter.onReadyRetrofitRequest(userName, dataByPublicKey); + loginPresenter.onReadyRetrofitRequest(account, dataByPublicKey); } } diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index cba9a54..4c223cd 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -1,9 +1,11 @@ package com.casic.dcms.ui; -import android.content.BroadcastReceiver; +import android.app.Notification; import android.content.Context; import android.content.Intent; import android.location.Location; +import android.os.Handler; +import android.os.Message; import android.text.TextUtils; import android.util.Log; import android.view.MenuItem; @@ -18,6 +20,7 @@ import com.casic.dcms.adapter.MainPageAdapter; import com.casic.dcms.base.DoubleClickExitActivity; import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.bean.NoticeBean; import com.casic.dcms.mvp.presenter.PushRegisterPresenterImpl; import com.casic.dcms.mvp.presenter.UploadPositionPresenterImpl; import com.casic.dcms.mvp.view.IPushRegisterView; @@ -26,17 +29,19 @@ import com.casic.dcms.ui.fragment.MinePageFragment; import com.casic.dcms.ui.fragment.NoticePageFragment; import com.casic.dcms.ui.fragment.PhonePageFragment; -import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.NotificationHelper; import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.callback.ILocationListener; import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; -import com.google.gson.Gson; import com.gyf.immersionbar.ImmersionBar; +import com.igexin.sdk.message.GTTransmitMessage; +import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; @@ -51,11 +56,12 @@ NoScrollViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; + private MenuItem menuItem; private List pageList; - private BroadcastManager broadcastManager; private UploadPositionPresenterImpl uploadPositionPresenter; private PushRegisterPresenterImpl registerPresenter; + private static WeakReferenceHandler weakReferenceHandler; @Override public int initLayoutView() { @@ -80,29 +86,7 @@ pageList.add(new PhonePageFragment()); pageList.add(new NoticePageFragment()); pageList.add(new MinePageFragment()); - broadcastManager = BroadcastManager.getInstance(this); - broadcastManager.addAction(new String[]{Constant.LOGIN_OUT_ACTION, Constant.REGISTER_PUSH}, - new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - if (action != null) { - switch (action) { - case Constant.LOGIN_OUT_ACTION: - String loginOut = intent.getStringExtra("data"); - assert loginOut != null; - if (loginOut.equals("请求成功")) { - finish(); - } - break; - case Constant.REGISTER_PUSH: - String clientid = intent.getStringExtra("data"); - registerPresenter.onReadyRetrofitRequest(clientid); - break; - } - } - } - }); + weakReferenceHandler = new WeakReferenceHandler(this); String imei = OtherUtils.obtainSimCardSerialNumber(this); if (TextUtils.isEmpty(imei)) { return; @@ -175,15 +159,59 @@ mainViewPager.setAdapter(mainPageAdapter); } - @Override - protected void onDestroy() { - super.onDestroy(); - broadcastManager.destroy(Constant.LOGIN_OUT_ACTION, Constant.REGISTER_PUSH); - if (uploadPositionPresenter != null) { - uploadPositionPresenter.disposeRetrofitRequest(); + /** + * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveClientId(Context, String)}页面调用 + * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveMessageData(Context, GTTransmitMessage)}页面调用 + */ + public static void sendMessage(Message msg) { + weakReferenceHandler.sendMessage(msg); + } + + /** + * 供{@link MinePageFragment#obtainLoginOutResult(ActionResultBean)}页面调用 + */ + public static void sendEmptyMessage(int what) { + weakReferenceHandler.sendEmptyMessage(what); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(MainActivity activity) { + reference = new WeakReference<>(activity); } - if (registerPresenter != null) { - registerPresenter.disposeRetrofitRequest(); + + @Override + public void handleMessage(Message msg) { + MainActivity mainActivity = reference.get(); + switch (msg.what) { + case Constant.PUSH_REGISTER: + String clientId = (String) msg.obj; + Log.d(TAG, "注册个推Client: " + clientId); + reference.get().registerPresenter.onReadyRetrofitRequest(clientId); + break; + case Constant.PUSH_CREATE_NOTIFICATION: + Log.d(TAG, "创建通知栏"); + NoticeBean noticeBean = (NoticeBean) msg.obj; + if (null == noticeBean) { + return; + } + NotificationHelper notificationHelper = NotificationHelper.getInstance(mainActivity); + Notification notification = notificationHelper.createDefault( + noticeBean.getTitle(), + noticeBean.getContent(), + noticeBean.getCaseId(), + CaseDetailActivity.class); + notificationHelper.push(1, notification); + break; + case Constant.LOGIN_OUT: + Log.d(TAG, "退出登录"); + //回到登录页 + SaveKeyValues.putValue("autoLogin", false); + mainActivity.startActivity(new Intent(mainActivity, LoginActivity.class)); + mainActivity.finish(); + break; + } } } @@ -194,6 +222,17 @@ @Override public void obtainRegisterResult(ActionResultBean resultBean) { - Log.d(TAG, "obtainRegisterResult: " + new Gson().toJson(resultBean)); +// Log.d(TAG, "obtainRegisterResult: " + new Gson().toJson(resultBean)); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (uploadPositionPresenter != null) { + uploadPositionPresenter.disposeRetrofitRequest(); + } + if (registerPresenter != null) { + registerPresenter.disposeRetrofitRequest(); + } } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index c70520f..ddb25aa 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -17,8 +17,8 @@ import com.casic.dcms.mvp.view.IUpdateVersionView; import com.casic.dcms.ui.ChangePasswordActivity; import com.casic.dcms.ui.HelpfulActivity; +import com.casic.dcms.ui.MainActivity; import com.casic.dcms.ui.UserInfoActivity; -import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.ToastHelper; @@ -117,10 +117,7 @@ @Override public void obtainLoginOutResult(ActionResultBean resultBean) { -// Log.d(TAG, "obtainLoginOutResult: " + new Gson().toJson(resultBean)); - if (resultBean.isSuccess()) { - BroadcastManager.getInstance(context).sendBroadcast(Constant.LOGIN_OUT_ACTION, resultBean.getMessage()); - } + MainActivity.sendEmptyMessage(Constant.LOGIN_OUT); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/NoticePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/NoticePageFragment.java index 708f2a8..18abe0c 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/NoticePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/NoticePageFragment.java @@ -1,9 +1,11 @@ package com.casic.dcms.ui.fragment; -import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; +import android.os.Handler; +import android.os.Message; import android.text.TextUtils; +import android.util.Log; import android.view.ViewGroup; import androidx.annotation.NonNull; @@ -19,13 +21,13 @@ import com.casic.dcms.greendao.DaoSession; import com.casic.dcms.greendao.NoticeBeanDao; import com.casic.dcms.ui.CaseDetailActivity; -import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.StringHelper; -import com.google.gson.Gson; +import com.igexin.sdk.message.GTTransmitMessage; import com.qmuiteam.qmui.recyclerView.QMUIRVItemSwipeAction; import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; @@ -33,15 +35,15 @@ public class NoticePageFragment extends BaseFragment { + private static final String TAG = "NoticePageFragment"; @BindView(R.id.swipeRecyclerView) RecyclerView swipeRecyclerView; private Context context; private List noticeBeans = new ArrayList<>(); private SwipeViewAdapter swipeViewAdapter; - private BroadcastManager broadcastManager; - private Gson gson; private DaoSession daoSession; + private static WeakReferenceHandler weakReferenceHandler; @Override protected int initLayoutView() { @@ -55,34 +57,20 @@ @Override protected void initData() { - gson = new Gson(); daoSession = BaseApplication.getDaoSession(); swipeViewAdapter = new SwipeViewAdapter(context); - //根据userName加载历史数据 - String userName = StringHelper.getUserName(); - if (TextUtils.isEmpty(userName)) { + //根据loginName加载历史数据 + String account = StringHelper.getUserAccount(); + if (TextUtils.isEmpty(account)) { return; } - noticeBeans = daoSession.queryBuilder(NoticeBean.class).where(NoticeBeanDao.Properties.UserName.eq(userName)).list(); + noticeBeans = daoSession.queryBuilder(NoticeBean.class) + .where(NoticeBeanDao.Properties.UserAccount.eq(account)) + .orderDesc(NoticeBeanDao.Properties.PushDate)//按时间顺序最新顺序排序 + .list(); swipeViewAdapter.setData(noticeBeans); - broadcastManager = BroadcastManager.getInstance(context); - broadcastManager.addAction(Constant.NOTICE_MSG, new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - if (action != null) { - if (Constant.NOTICE_MSG.equals(action)) { - String data = intent.getStringExtra("data"); - assert data != null; - NoticeBean noticeBean = gson.fromJson(data, NoticeBean.class); - noticeBeans.add(noticeBean); - //更新数据 - swipeViewAdapter.setData(noticeBeans); - } - } - } - }); + weakReferenceHandler = new WeakReferenceHandler(this); } @Override @@ -134,11 +122,31 @@ }); } - @Override - public void onDestroyView() { - super.onDestroyView(); - if (broadcastManager != null) { - broadcastManager.destroy(Constant.NOTICE_MSG); + /** + * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveMessageData(Context, GTTransmitMessage)}调用 + */ + public static void sendMessage(Message msg) { + weakReferenceHandler.sendMessage(msg); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(NoticePageFragment fragment) { + reference = new WeakReference<>(fragment); + } + + @Override + public void handleMessage(Message msg) { + NoticePageFragment noticePageFragment = reference.get(); + List noticeBeans = noticePageFragment.noticeBeans; + if (msg.what == Constant.PUSH_MESSAGE_DATA) { + NoticeBean noticeBean = (NoticeBean) msg.obj; + Log.d(TAG, "收到推送消息,更新列表: " + noticeBean.getCaseId()); + noticeBeans.add(0, noticeBean);//新消息永远放到第一个 + //更新数据 + noticePageFragment.swipeViewAdapter.setData(noticeBeans); + } } } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java index c29046a..8a2376a 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java @@ -19,6 +19,8 @@ import com.casic.dcms.mvp.view.IPhoneBookView; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import java.util.ArrayList; import java.util.List; @@ -105,7 +107,8 @@ deptTreeView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() { @Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { - callPhone(deptAndPersons.get(groupPosition).get(childPosition).getPersonPhone()); + PersonBean personBean = deptAndPersons.get(groupPosition).get(childPosition); + callPhone(personBean.getPersonName(), personBean.getPersonPhone()); return true; } }); @@ -115,15 +118,27 @@ /** * 直接呼叫电话 */ - private void callPhone(String personPhone) { + private void callPhone(String personName, String personPhone) { if (TextUtils.isEmpty(personPhone)) { ToastHelper.showToast("手机号为空,无法拨号", ToastHelper.ERROR); return; } - Intent intent = new Intent(); - intent.setAction(Intent.ACTION_CALL); - intent.setData(Uri.parse("tel:" + personPhone)); - startActivity(intent); + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("提示") + .setMessage("是否确定拨打[" + personName + "]的电话?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + Intent intent = new Intent(); + intent.setAction(Intent.ACTION_CALL); + intent.setData(Uri.parse("tel:" + personPhone)); + startActivity(intent); + } + }) + .create().show(); } @Override diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index f67e68b..74442db 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -31,6 +31,7 @@ Color.rgb(120, 104, 230)}; public static final String[] PAGE_TITLES = {"表格", "饼状图"}; + public static final String IP_KEY = "BASE_IP"; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; public static final int PERMISSIONS_CODE = 999; @@ -42,17 +43,16 @@ public static final int CASE_HANDLE = 0; public static final int CASE_VERIFY = 1; public static final int CASE_CHECK = 2; + public static final int PUSH_REGISTER = 11; + public static final int PUSH_MESSAGE_DATA = 12;//透传消息,包含消息的详细数据 + public static final int PUSH_CREATE_NOTIFICATION = 13; + public static final int LOGIN_OUT = 14; public static final double DEFAULT_LNG = 116.06639658728571; public static final double DEFAULT_LAT = 27.759547805536418; public static final double DELTA_LNG_10 = 0.00002536; // 10米范围经度值偏移量(大约) public static final double DELTA_LAT_10 = 0.00002256;// 10米范围纬度值偏移量(大约) - public static final String IP_KEY = "BASE_IP"; - public static final String LOGIN_OUT_ACTION = "login_out"; - public static final String NOTICE_MSG = "receive_ush"; - public static final String REGISTER_PUSH = "register_push"; - public static final String BASE_MAP_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt/MapServer";//崇仁城管地图底图 public static final String COMPONENT_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crbj/FeatureServer";//崇仁部件图层 } diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java index 61a8b1d..385ec1b 100644 --- a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -98,5 +98,4 @@ public void setOnItemClickListener(OnItemClickListener onItemClickListener) { this.clickListener = onItemClickListener; } - } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java index 1cfda9d..1dd316c 100644 --- a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -17,7 +17,7 @@ @Id(autoincrement = true) private Long id;//主键ID - private String userName;//用户名 + private String userAccount;//登录账户 private String caseId;//案卷id private String title;//案卷标题 private String content;//案卷简介 @@ -25,11 +25,11 @@ private String type;//推送类型 private String isRead;//0-已读;1-未读 - @Generated(hash = 2013153901) - public NoticeBean(Long id, String userName, String caseId, String title, + @Generated(hash = 1022814061) + public NoticeBean(Long id, String userAccount, String caseId, String title, String content, String pushDate, String type, String isRead) { this.id = id; - this.userName = userName; + this.userAccount = userAccount; this.caseId = caseId; this.title = title; this.content = content; @@ -50,12 +50,12 @@ this.id = id; } - public String getUserName() { - return this.userName; + public String getUserAccount() { + return this.userAccount; } - public void setUserName(String userName) { - this.userName = userName; + public void setUserAccount(String userAccount) { + this.userAccount = userAccount; } public String getCaseId() { diff --git a/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java b/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java index a733f25..10b4c77 100644 --- a/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java +++ b/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java @@ -25,7 +25,7 @@ */ public static class Properties { public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property UserName = new Property(1, String.class, "userName", false, "USER_NAME"); + public final static Property UserAccount = new Property(1, String.class, "userAccount", false, "USER_ACCOUNT"); public final static Property CaseId = new Property(2, String.class, "caseId", false, "CASE_ID"); public final static Property Title = new Property(3, String.class, "title", false, "TITLE"); public final static Property Content = new Property(4, String.class, "content", false, "CONTENT"); @@ -48,7 +48,7 @@ String constraint = ifNotExists? "IF NOT EXISTS ": ""; db.execSQL("CREATE TABLE " + constraint + "\"NOTICE_BEAN\" (" + // "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"USER_NAME\" TEXT," + // 1: userName + "\"USER_ACCOUNT\" TEXT," + // 1: userAccount "\"CASE_ID\" TEXT," + // 2: caseId "\"TITLE\" TEXT," + // 3: title "\"CONTENT\" TEXT," + // 4: content @@ -72,9 +72,9 @@ stmt.bindLong(1, id); } - String userName = entity.getUserName(); - if (userName != null) { - stmt.bindString(2, userName); + String userAccount = entity.getUserAccount(); + if (userAccount != null) { + stmt.bindString(2, userAccount); } String caseId = entity.getCaseId(); @@ -117,9 +117,9 @@ stmt.bindLong(1, id); } - String userName = entity.getUserName(); - if (userName != null) { - stmt.bindString(2, userName); + String userAccount = entity.getUserAccount(); + if (userAccount != null) { + stmt.bindString(2, userAccount); } String caseId = entity.getCaseId(); @@ -162,7 +162,7 @@ public NoticeBean readEntity(Cursor cursor, int offset) { NoticeBean entity = new NoticeBean( // cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // userName + cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // userAccount cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // caseId cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // title cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // content @@ -176,7 +176,7 @@ @Override public void readEntity(Cursor cursor, NoticeBean entity, int offset) { entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setUserName(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); + entity.setUserAccount(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); entity.setCaseId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); entity.setTitle(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); entity.setContent(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index fa17e1f..0030f57 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -2,6 +2,7 @@ import android.content.Context; import android.content.Intent; +import android.os.Message; import android.text.TextUtils; import android.util.Log; @@ -9,7 +10,8 @@ import com.casic.dcms.bean.NoticeBean; import com.casic.dcms.bean.PushResultBean; import com.casic.dcms.ui.CaseDetailActivity; -import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.ui.MainActivity; +import com.casic.dcms.ui.fragment.NoticePageFragment; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; @@ -36,7 +38,44 @@ // 处理透传消息 @Override public void onReceiveMessageData(Context context, GTTransmitMessage msg) { - // 透传消息的处理,详看 SDK demo + /** + * appid = DR9oeLL9va6aG3DYXy2w39 + * taskid = TEST_0515_d4689edeff9808959f10365895682f6f + * messageid = bd9c2465afd5464fb99368a579fd3fc8 + * pkg = com.casic.dcms + * cid = 9e85018b1972d664d9e86e9a6d03b4a7 + * playload = {"content":"您有一个工单超时,请快速处理1","data":{"id":"1392655327805825025"},"id":1393472265320001538,"title":"工单超时提醒","type":"NORMAL"} + * */ + Log.d(TAG, "onReceiveMessageData -> " + "\r\nplayload = " + new String(msg.getPayload())); + + Gson gson = new Gson(); + String messageContent = new String(msg.getPayload()); + PushResultBean resultBean = gson.fromJson(messageContent, new TypeToken() { + }.getType()); + + NoticeBean noticeBean = new NoticeBean(); + noticeBean.setUserAccount(StringHelper.getUserAccount()); + noticeBean.setCaseId(resultBean.getData().getId()); + noticeBean.setTitle(resultBean.getTitle()); + noticeBean.setContent(resultBean.getContent()); + noticeBean.setType(resultBean.getType()); + noticeBean.setPushDate(TimeOrDateUtil.timestampToDate(System.currentTimeMillis())); + noticeBean.setIsRead("1"); + + //存本地一份 + BaseApplication.getDaoSession().insert(noticeBean); + + //创建通知栏 + Message msgNotice = Message.obtain(); + msgNotice.what = Constant.PUSH_CREATE_NOTIFICATION; + msgNotice.obj = noticeBean; + MainActivity.sendMessage(msgNotice); + + //发送消息更新界面 + Message msgBean = Message.obtain(); + msgBean.what = Constant.PUSH_MESSAGE_DATA; + msgBean.obj = noticeBean; + NoticePageFragment.sendMessage(msgBean); } // 接收 cid @@ -45,7 +84,10 @@ Log.d(TAG, "onReceiveClientId -> " + "clientid = " + clientid); //通知MainActivity注册个推服务 if (!TextUtils.isEmpty(clientid)) { - BroadcastManager.getInstance(context).sendBroadcast(Constant.REGISTER_PUSH, clientid); + Message msg = Message.obtain(); + msg.what = Constant.PUSH_REGISTER; + msg.obj = clientid; + MainActivity.sendMessage(msg); } else { Log.d(TAG, "onReceiveClientId: ===>clientid = " + clientid); } @@ -66,34 +108,7 @@ // 通知到达,只有个推通道下发的通知会回调此方法 @Override public void onNotificationMessageArrived(Context context, GTNotificationMessage message) { - Log.d(TAG, "onNotificationMessageArrived: " + message.getContent()); - /** - * appid = DR9oeLL9va6aG3DYXy2w39 - * taskid = OSL-0514_xL4fPj7kqQ6tknVoQt3Mf6 - * messageid = b74187603fe34058a223949ead9f8dcf - * pkg = com.casic.dcms - * cid = cd1aec399b5504516102e399ecf7cda4 - * content = {"content":"您有一个工单超时,请快速处理","data":{"id":"1392655327805825025"},"id":1393131068164472834,"title":"工单超时提醒","type":"alarm"} - * title = 工单提醒 - * */ - Gson gson = new Gson(); - String messageContent = message.getContent(); - PushResultBean resultBean = gson.fromJson(messageContent, new TypeToken() { - }.getType()); - - NoticeBean noticeBean = new NoticeBean(); - noticeBean.setUserName(StringHelper.getUserName()); - noticeBean.setCaseId(resultBean.getData().getId()); - noticeBean.setTitle(resultBean.getTitle()); - noticeBean.setContent(resultBean.getContent()); - noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate(System.currentTimeMillis())); - noticeBean.setIsRead("1"); - - //存本地一份 - BaseApplication.getDaoSession().insert(noticeBean); - //发送消息更新界面 - BroadcastManager.getInstance(context).sendBroadcast(Constant.NOTICE_MSG, gson.toJson(noticeBean)); + Log.d(TAG, "onNotificationMessageArrived: 通知到达"); } // 通知点击,只有个推通道下发的通知会回调此方法 diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index 1d706ff..224f8d3 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -20,6 +20,7 @@ import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.RSAUtils; import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.InputDialog; import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; @@ -66,11 +67,11 @@ @Override public void initData() { - String userName = (String) SaveKeyValues.getValue("name", ""); - String userPassword = (String) SaveKeyValues.getValue("password", ""); - userNameView.setText(userName); + String userAccount = StringHelper.getUserAccount(); + String userPassword = (String) SaveKeyValues.getValue("userPassword", ""); + userNameView.setText(userAccount); userPasswordView.setText(userPassword); - if (!TextUtils.isEmpty(userName) && !TextUtils.isEmpty(userPassword)) { + if (!TextUtils.isEmpty(userAccount) && !TextUtils.isEmpty(userPassword)) { rememberPasswordView.setChecked(true); } else { rememberPasswordView.setChecked(false); @@ -85,7 +86,7 @@ }); loadingDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("登陆中,请稍后") + .setTipWord("登录中,请稍后") .create(); } @@ -153,14 +154,14 @@ AuthenticationHelper.savePublicKey(keyString); PublicKey publicKey = RSAUtils.keyStrToPublicKey(keyString); - String userName = userNameView.getText().toString(); + String account = userNameView.getText().toString(); String userPassword = userPasswordView.getText().toString(); if (autoLoginView.isChecked()) { SaveKeyValues.putValue("autoLogin", true); } else { SaveKeyValues.putValue("autoLogin", false); } - if (TextUtils.isEmpty(userName)) { + if (TextUtils.isEmpty(account)) { ToastHelper.showToast("用户名不能为空", ToastHelper.WARING); return; } @@ -169,12 +170,12 @@ return; } if (rememberPasswordView.isChecked()) { - SaveKeyValues.putValue("name", userName); - SaveKeyValues.putValue("password", userPassword); + StringHelper.saveUserAccount(account); + SaveKeyValues.putValue("userPassword", userPassword); } String dataByPublicKey = RSAUtils.encryptDataByPublicKey(userPassword.getBytes(), publicKey); //登录并获取Token,POST请求 - loginPresenter.onReadyRetrofitRequest(userName, dataByPublicKey); + loginPresenter.onReadyRetrofitRequest(account, dataByPublicKey); } } diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index cba9a54..4c223cd 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -1,9 +1,11 @@ package com.casic.dcms.ui; -import android.content.BroadcastReceiver; +import android.app.Notification; import android.content.Context; import android.content.Intent; import android.location.Location; +import android.os.Handler; +import android.os.Message; import android.text.TextUtils; import android.util.Log; import android.view.MenuItem; @@ -18,6 +20,7 @@ import com.casic.dcms.adapter.MainPageAdapter; import com.casic.dcms.base.DoubleClickExitActivity; import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.bean.NoticeBean; import com.casic.dcms.mvp.presenter.PushRegisterPresenterImpl; import com.casic.dcms.mvp.presenter.UploadPositionPresenterImpl; import com.casic.dcms.mvp.view.IPushRegisterView; @@ -26,17 +29,19 @@ import com.casic.dcms.ui.fragment.MinePageFragment; import com.casic.dcms.ui.fragment.NoticePageFragment; import com.casic.dcms.ui.fragment.PhonePageFragment; -import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.NotificationHelper; import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.callback.ILocationListener; import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; -import com.google.gson.Gson; import com.gyf.immersionbar.ImmersionBar; +import com.igexin.sdk.message.GTTransmitMessage; +import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; @@ -51,11 +56,12 @@ NoScrollViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; + private MenuItem menuItem; private List pageList; - private BroadcastManager broadcastManager; private UploadPositionPresenterImpl uploadPositionPresenter; private PushRegisterPresenterImpl registerPresenter; + private static WeakReferenceHandler weakReferenceHandler; @Override public int initLayoutView() { @@ -80,29 +86,7 @@ pageList.add(new PhonePageFragment()); pageList.add(new NoticePageFragment()); pageList.add(new MinePageFragment()); - broadcastManager = BroadcastManager.getInstance(this); - broadcastManager.addAction(new String[]{Constant.LOGIN_OUT_ACTION, Constant.REGISTER_PUSH}, - new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - if (action != null) { - switch (action) { - case Constant.LOGIN_OUT_ACTION: - String loginOut = intent.getStringExtra("data"); - assert loginOut != null; - if (loginOut.equals("请求成功")) { - finish(); - } - break; - case Constant.REGISTER_PUSH: - String clientid = intent.getStringExtra("data"); - registerPresenter.onReadyRetrofitRequest(clientid); - break; - } - } - } - }); + weakReferenceHandler = new WeakReferenceHandler(this); String imei = OtherUtils.obtainSimCardSerialNumber(this); if (TextUtils.isEmpty(imei)) { return; @@ -175,15 +159,59 @@ mainViewPager.setAdapter(mainPageAdapter); } - @Override - protected void onDestroy() { - super.onDestroy(); - broadcastManager.destroy(Constant.LOGIN_OUT_ACTION, Constant.REGISTER_PUSH); - if (uploadPositionPresenter != null) { - uploadPositionPresenter.disposeRetrofitRequest(); + /** + * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveClientId(Context, String)}页面调用 + * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveMessageData(Context, GTTransmitMessage)}页面调用 + */ + public static void sendMessage(Message msg) { + weakReferenceHandler.sendMessage(msg); + } + + /** + * 供{@link MinePageFragment#obtainLoginOutResult(ActionResultBean)}页面调用 + */ + public static void sendEmptyMessage(int what) { + weakReferenceHandler.sendEmptyMessage(what); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(MainActivity activity) { + reference = new WeakReference<>(activity); } - if (registerPresenter != null) { - registerPresenter.disposeRetrofitRequest(); + + @Override + public void handleMessage(Message msg) { + MainActivity mainActivity = reference.get(); + switch (msg.what) { + case Constant.PUSH_REGISTER: + String clientId = (String) msg.obj; + Log.d(TAG, "注册个推Client: " + clientId); + reference.get().registerPresenter.onReadyRetrofitRequest(clientId); + break; + case Constant.PUSH_CREATE_NOTIFICATION: + Log.d(TAG, "创建通知栏"); + NoticeBean noticeBean = (NoticeBean) msg.obj; + if (null == noticeBean) { + return; + } + NotificationHelper notificationHelper = NotificationHelper.getInstance(mainActivity); + Notification notification = notificationHelper.createDefault( + noticeBean.getTitle(), + noticeBean.getContent(), + noticeBean.getCaseId(), + CaseDetailActivity.class); + notificationHelper.push(1, notification); + break; + case Constant.LOGIN_OUT: + Log.d(TAG, "退出登录"); + //回到登录页 + SaveKeyValues.putValue("autoLogin", false); + mainActivity.startActivity(new Intent(mainActivity, LoginActivity.class)); + mainActivity.finish(); + break; + } } } @@ -194,6 +222,17 @@ @Override public void obtainRegisterResult(ActionResultBean resultBean) { - Log.d(TAG, "obtainRegisterResult: " + new Gson().toJson(resultBean)); +// Log.d(TAG, "obtainRegisterResult: " + new Gson().toJson(resultBean)); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (uploadPositionPresenter != null) { + uploadPositionPresenter.disposeRetrofitRequest(); + } + if (registerPresenter != null) { + registerPresenter.disposeRetrofitRequest(); + } } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index c70520f..ddb25aa 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -17,8 +17,8 @@ import com.casic.dcms.mvp.view.IUpdateVersionView; import com.casic.dcms.ui.ChangePasswordActivity; import com.casic.dcms.ui.HelpfulActivity; +import com.casic.dcms.ui.MainActivity; import com.casic.dcms.ui.UserInfoActivity; -import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.ToastHelper; @@ -117,10 +117,7 @@ @Override public void obtainLoginOutResult(ActionResultBean resultBean) { -// Log.d(TAG, "obtainLoginOutResult: " + new Gson().toJson(resultBean)); - if (resultBean.isSuccess()) { - BroadcastManager.getInstance(context).sendBroadcast(Constant.LOGIN_OUT_ACTION, resultBean.getMessage()); - } + MainActivity.sendEmptyMessage(Constant.LOGIN_OUT); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/NoticePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/NoticePageFragment.java index 708f2a8..18abe0c 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/NoticePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/NoticePageFragment.java @@ -1,9 +1,11 @@ package com.casic.dcms.ui.fragment; -import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; +import android.os.Handler; +import android.os.Message; import android.text.TextUtils; +import android.util.Log; import android.view.ViewGroup; import androidx.annotation.NonNull; @@ -19,13 +21,13 @@ import com.casic.dcms.greendao.DaoSession; import com.casic.dcms.greendao.NoticeBeanDao; import com.casic.dcms.ui.CaseDetailActivity; -import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.StringHelper; -import com.google.gson.Gson; +import com.igexin.sdk.message.GTTransmitMessage; import com.qmuiteam.qmui.recyclerView.QMUIRVItemSwipeAction; import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; @@ -33,15 +35,15 @@ public class NoticePageFragment extends BaseFragment { + private static final String TAG = "NoticePageFragment"; @BindView(R.id.swipeRecyclerView) RecyclerView swipeRecyclerView; private Context context; private List noticeBeans = new ArrayList<>(); private SwipeViewAdapter swipeViewAdapter; - private BroadcastManager broadcastManager; - private Gson gson; private DaoSession daoSession; + private static WeakReferenceHandler weakReferenceHandler; @Override protected int initLayoutView() { @@ -55,34 +57,20 @@ @Override protected void initData() { - gson = new Gson(); daoSession = BaseApplication.getDaoSession(); swipeViewAdapter = new SwipeViewAdapter(context); - //根据userName加载历史数据 - String userName = StringHelper.getUserName(); - if (TextUtils.isEmpty(userName)) { + //根据loginName加载历史数据 + String account = StringHelper.getUserAccount(); + if (TextUtils.isEmpty(account)) { return; } - noticeBeans = daoSession.queryBuilder(NoticeBean.class).where(NoticeBeanDao.Properties.UserName.eq(userName)).list(); + noticeBeans = daoSession.queryBuilder(NoticeBean.class) + .where(NoticeBeanDao.Properties.UserAccount.eq(account)) + .orderDesc(NoticeBeanDao.Properties.PushDate)//按时间顺序最新顺序排序 + .list(); swipeViewAdapter.setData(noticeBeans); - broadcastManager = BroadcastManager.getInstance(context); - broadcastManager.addAction(Constant.NOTICE_MSG, new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - if (action != null) { - if (Constant.NOTICE_MSG.equals(action)) { - String data = intent.getStringExtra("data"); - assert data != null; - NoticeBean noticeBean = gson.fromJson(data, NoticeBean.class); - noticeBeans.add(noticeBean); - //更新数据 - swipeViewAdapter.setData(noticeBeans); - } - } - } - }); + weakReferenceHandler = new WeakReferenceHandler(this); } @Override @@ -134,11 +122,31 @@ }); } - @Override - public void onDestroyView() { - super.onDestroyView(); - if (broadcastManager != null) { - broadcastManager.destroy(Constant.NOTICE_MSG); + /** + * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveMessageData(Context, GTTransmitMessage)}调用 + */ + public static void sendMessage(Message msg) { + weakReferenceHandler.sendMessage(msg); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(NoticePageFragment fragment) { + reference = new WeakReference<>(fragment); + } + + @Override + public void handleMessage(Message msg) { + NoticePageFragment noticePageFragment = reference.get(); + List noticeBeans = noticePageFragment.noticeBeans; + if (msg.what == Constant.PUSH_MESSAGE_DATA) { + NoticeBean noticeBean = (NoticeBean) msg.obj; + Log.d(TAG, "收到推送消息,更新列表: " + noticeBean.getCaseId()); + noticeBeans.add(0, noticeBean);//新消息永远放到第一个 + //更新数据 + noticePageFragment.swipeViewAdapter.setData(noticeBeans); + } } } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java index c29046a..8a2376a 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java @@ -19,6 +19,8 @@ import com.casic.dcms.mvp.view.IPhoneBookView; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import java.util.ArrayList; import java.util.List; @@ -105,7 +107,8 @@ deptTreeView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() { @Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { - callPhone(deptAndPersons.get(groupPosition).get(childPosition).getPersonPhone()); + PersonBean personBean = deptAndPersons.get(groupPosition).get(childPosition); + callPhone(personBean.getPersonName(), personBean.getPersonPhone()); return true; } }); @@ -115,15 +118,27 @@ /** * 直接呼叫电话 */ - private void callPhone(String personPhone) { + private void callPhone(String personName, String personPhone) { if (TextUtils.isEmpty(personPhone)) { ToastHelper.showToast("手机号为空,无法拨号", ToastHelper.ERROR); return; } - Intent intent = new Intent(); - intent.setAction(Intent.ACTION_CALL); - intent.setData(Uri.parse("tel:" + personPhone)); - startActivity(intent); + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("提示") + .setMessage("是否确定拨打[" + personName + "]的电话?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + Intent intent = new Intent(); + intent.setAction(Intent.ACTION_CALL); + intent.setData(Uri.parse("tel:" + personPhone)); + startActivity(intent); + } + }) + .create().show(); } @Override diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index f67e68b..74442db 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -31,6 +31,7 @@ Color.rgb(120, 104, 230)}; public static final String[] PAGE_TITLES = {"表格", "饼状图"}; + public static final String IP_KEY = "BASE_IP"; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; public static final int PERMISSIONS_CODE = 999; @@ -42,17 +43,16 @@ public static final int CASE_HANDLE = 0; public static final int CASE_VERIFY = 1; public static final int CASE_CHECK = 2; + public static final int PUSH_REGISTER = 11; + public static final int PUSH_MESSAGE_DATA = 12;//透传消息,包含消息的详细数据 + public static final int PUSH_CREATE_NOTIFICATION = 13; + public static final int LOGIN_OUT = 14; public static final double DEFAULT_LNG = 116.06639658728571; public static final double DEFAULT_LAT = 27.759547805536418; public static final double DELTA_LNG_10 = 0.00002536; // 10米范围经度值偏移量(大约) public static final double DELTA_LAT_10 = 0.00002256;// 10米范围纬度值偏移量(大约) - public static final String IP_KEY = "BASE_IP"; - public static final String LOGIN_OUT_ACTION = "login_out"; - public static final String NOTICE_MSG = "receive_ush"; - public static final String REGISTER_PUSH = "register_push"; - public static final String BASE_MAP_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt/MapServer";//崇仁城管地图底图 public static final String COMPONENT_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crbj/FeatureServer";//崇仁部件图层 } diff --git a/app/src/main/java/com/casic/dcms/utils/NotificationHelper.java b/app/src/main/java/com/casic/dcms/utils/NotificationHelper.java new file mode 100644 index 0000000..59fd47a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/NotificationHelper.java @@ -0,0 +1,130 @@ +package com.casic.dcms.utils; + +import android.annotation.SuppressLint; +import android.app.Notification; +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.Build; + +import com.casic.dcms.R; + +public class NotificationHelper { + private Context mContext; + @SuppressLint("StaticFieldLeak") + private static NotificationHelper notificationHelper; + private NotificationManager notificationManager; + + private NotificationHelper(Context context) { + this.mContext = context; + notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); + } + + /** + * 双重锁单例 + */ + public static NotificationHelper getInstance(Context context) { + if (notificationHelper == null) { + synchronized (NotificationHelper.class) { + if (notificationHelper == null) { + notificationHelper = new NotificationHelper(context); + } + } + } + return notificationHelper; + } + + private Notification.Builder createBuilder() { + Notification.Builder builder; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + String name = mContext.getResources().getString(R.string.app_name); + //创建渠道 + String id = name + "_DefaultChannel"; + NotificationChannel mChannel = new NotificationChannel(id, name, NotificationManager.IMPORTANCE_DEFAULT); + notificationManager.createNotificationChannel(mChannel); + builder = new Notification.Builder(mContext, id); + } else { + builder = new Notification.Builder(mContext); + } + return builder; + } + + /** + * 创建常驻状态栏通知 + * + * @param title 通知标题 + * @param message 通知内容 + */ + public Notification createKeepAlive(String title, String message) { + Notification.Builder builder = createBuilder(); + builder.setContentTitle(title) + .setContentText(message) + .setWhen(System.currentTimeMillis()) + .setSmallIcon(R.mipmap.app_logo); + Notification notification = builder.build(); + notification.flags = Notification.FLAG_NO_CLEAR; + return notification; + } + + /** + * 创建无动作的默认通知 + * + * @param title 通知标题 + * @param message 通知内容 + */ + public Notification createDefault(String title, String message) { + Notification.Builder builder = createBuilder(); + Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.normal); + builder.setContentTitle(title) + .setContentText(message) + .setWhen(System.currentTimeMillis()) + .setSmallIcon(R.drawable.normal_small) + .setLargeIcon(bitmap) + .setAutoCancel(true); + Notification notification = builder.build(); + notification.flags = Notification.FLAG_AUTO_CANCEL; + return notification; + } + + /** + * 创建有动作的默认通知 + * + * @param title 通知标题 + * @param message 通知内容 + * @param targetClass 点击通知之后跳转的页面 + */ + public Notification createDefault(String title, String message, String caseId, Class targetClass) { + Notification.Builder builder = createBuilder(); + Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.normal); + Intent intent = new Intent(mContext, targetClass); + intent.putExtra("id", caseId); + builder.setContentTitle(title) + .setContentText(message) + .setWhen(System.currentTimeMillis()) + .setSmallIcon(R.drawable.normal_small) + .setLargeIcon(bitmap) + .setContentIntent(PendingIntent.getActivity(mContext, 0, intent, 0)) + .setAutoCancel(true); + Notification notification = builder.build(); + notification.flags = Notification.FLAG_AUTO_CANCEL; + return notification; + } + + //显示通知 + public void push(int notificationId, Notification notification) { + if (notificationManager != null) { + notificationManager.notify(notificationId, notification); + } + } + + //取消通知 + public void cancel(int notificationId) { + if (notificationManager != null) { + notificationManager.cancel(notificationId); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java index 61a8b1d..385ec1b 100644 --- a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -98,5 +98,4 @@ public void setOnItemClickListener(OnItemClickListener onItemClickListener) { this.clickListener = onItemClickListener; } - } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java index 1cfda9d..1dd316c 100644 --- a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -17,7 +17,7 @@ @Id(autoincrement = true) private Long id;//主键ID - private String userName;//用户名 + private String userAccount;//登录账户 private String caseId;//案卷id private String title;//案卷标题 private String content;//案卷简介 @@ -25,11 +25,11 @@ private String type;//推送类型 private String isRead;//0-已读;1-未读 - @Generated(hash = 2013153901) - public NoticeBean(Long id, String userName, String caseId, String title, + @Generated(hash = 1022814061) + public NoticeBean(Long id, String userAccount, String caseId, String title, String content, String pushDate, String type, String isRead) { this.id = id; - this.userName = userName; + this.userAccount = userAccount; this.caseId = caseId; this.title = title; this.content = content; @@ -50,12 +50,12 @@ this.id = id; } - public String getUserName() { - return this.userName; + public String getUserAccount() { + return this.userAccount; } - public void setUserName(String userName) { - this.userName = userName; + public void setUserAccount(String userAccount) { + this.userAccount = userAccount; } public String getCaseId() { diff --git a/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java b/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java index a733f25..10b4c77 100644 --- a/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java +++ b/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java @@ -25,7 +25,7 @@ */ public static class Properties { public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property UserName = new Property(1, String.class, "userName", false, "USER_NAME"); + public final static Property UserAccount = new Property(1, String.class, "userAccount", false, "USER_ACCOUNT"); public final static Property CaseId = new Property(2, String.class, "caseId", false, "CASE_ID"); public final static Property Title = new Property(3, String.class, "title", false, "TITLE"); public final static Property Content = new Property(4, String.class, "content", false, "CONTENT"); @@ -48,7 +48,7 @@ String constraint = ifNotExists? "IF NOT EXISTS ": ""; db.execSQL("CREATE TABLE " + constraint + "\"NOTICE_BEAN\" (" + // "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"USER_NAME\" TEXT," + // 1: userName + "\"USER_ACCOUNT\" TEXT," + // 1: userAccount "\"CASE_ID\" TEXT," + // 2: caseId "\"TITLE\" TEXT," + // 3: title "\"CONTENT\" TEXT," + // 4: content @@ -72,9 +72,9 @@ stmt.bindLong(1, id); } - String userName = entity.getUserName(); - if (userName != null) { - stmt.bindString(2, userName); + String userAccount = entity.getUserAccount(); + if (userAccount != null) { + stmt.bindString(2, userAccount); } String caseId = entity.getCaseId(); @@ -117,9 +117,9 @@ stmt.bindLong(1, id); } - String userName = entity.getUserName(); - if (userName != null) { - stmt.bindString(2, userName); + String userAccount = entity.getUserAccount(); + if (userAccount != null) { + stmt.bindString(2, userAccount); } String caseId = entity.getCaseId(); @@ -162,7 +162,7 @@ public NoticeBean readEntity(Cursor cursor, int offset) { NoticeBean entity = new NoticeBean( // cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // userName + cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // userAccount cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // caseId cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // title cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // content @@ -176,7 +176,7 @@ @Override public void readEntity(Cursor cursor, NoticeBean entity, int offset) { entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setUserName(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); + entity.setUserAccount(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); entity.setCaseId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); entity.setTitle(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); entity.setContent(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index fa17e1f..0030f57 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -2,6 +2,7 @@ import android.content.Context; import android.content.Intent; +import android.os.Message; import android.text.TextUtils; import android.util.Log; @@ -9,7 +10,8 @@ import com.casic.dcms.bean.NoticeBean; import com.casic.dcms.bean.PushResultBean; import com.casic.dcms.ui.CaseDetailActivity; -import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.ui.MainActivity; +import com.casic.dcms.ui.fragment.NoticePageFragment; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; @@ -36,7 +38,44 @@ // 处理透传消息 @Override public void onReceiveMessageData(Context context, GTTransmitMessage msg) { - // 透传消息的处理,详看 SDK demo + /** + * appid = DR9oeLL9va6aG3DYXy2w39 + * taskid = TEST_0515_d4689edeff9808959f10365895682f6f + * messageid = bd9c2465afd5464fb99368a579fd3fc8 + * pkg = com.casic.dcms + * cid = 9e85018b1972d664d9e86e9a6d03b4a7 + * playload = {"content":"您有一个工单超时,请快速处理1","data":{"id":"1392655327805825025"},"id":1393472265320001538,"title":"工单超时提醒","type":"NORMAL"} + * */ + Log.d(TAG, "onReceiveMessageData -> " + "\r\nplayload = " + new String(msg.getPayload())); + + Gson gson = new Gson(); + String messageContent = new String(msg.getPayload()); + PushResultBean resultBean = gson.fromJson(messageContent, new TypeToken() { + }.getType()); + + NoticeBean noticeBean = new NoticeBean(); + noticeBean.setUserAccount(StringHelper.getUserAccount()); + noticeBean.setCaseId(resultBean.getData().getId()); + noticeBean.setTitle(resultBean.getTitle()); + noticeBean.setContent(resultBean.getContent()); + noticeBean.setType(resultBean.getType()); + noticeBean.setPushDate(TimeOrDateUtil.timestampToDate(System.currentTimeMillis())); + noticeBean.setIsRead("1"); + + //存本地一份 + BaseApplication.getDaoSession().insert(noticeBean); + + //创建通知栏 + Message msgNotice = Message.obtain(); + msgNotice.what = Constant.PUSH_CREATE_NOTIFICATION; + msgNotice.obj = noticeBean; + MainActivity.sendMessage(msgNotice); + + //发送消息更新界面 + Message msgBean = Message.obtain(); + msgBean.what = Constant.PUSH_MESSAGE_DATA; + msgBean.obj = noticeBean; + NoticePageFragment.sendMessage(msgBean); } // 接收 cid @@ -45,7 +84,10 @@ Log.d(TAG, "onReceiveClientId -> " + "clientid = " + clientid); //通知MainActivity注册个推服务 if (!TextUtils.isEmpty(clientid)) { - BroadcastManager.getInstance(context).sendBroadcast(Constant.REGISTER_PUSH, clientid); + Message msg = Message.obtain(); + msg.what = Constant.PUSH_REGISTER; + msg.obj = clientid; + MainActivity.sendMessage(msg); } else { Log.d(TAG, "onReceiveClientId: ===>clientid = " + clientid); } @@ -66,34 +108,7 @@ // 通知到达,只有个推通道下发的通知会回调此方法 @Override public void onNotificationMessageArrived(Context context, GTNotificationMessage message) { - Log.d(TAG, "onNotificationMessageArrived: " + message.getContent()); - /** - * appid = DR9oeLL9va6aG3DYXy2w39 - * taskid = OSL-0514_xL4fPj7kqQ6tknVoQt3Mf6 - * messageid = b74187603fe34058a223949ead9f8dcf - * pkg = com.casic.dcms - * cid = cd1aec399b5504516102e399ecf7cda4 - * content = {"content":"您有一个工单超时,请快速处理","data":{"id":"1392655327805825025"},"id":1393131068164472834,"title":"工单超时提醒","type":"alarm"} - * title = 工单提醒 - * */ - Gson gson = new Gson(); - String messageContent = message.getContent(); - PushResultBean resultBean = gson.fromJson(messageContent, new TypeToken() { - }.getType()); - - NoticeBean noticeBean = new NoticeBean(); - noticeBean.setUserName(StringHelper.getUserName()); - noticeBean.setCaseId(resultBean.getData().getId()); - noticeBean.setTitle(resultBean.getTitle()); - noticeBean.setContent(resultBean.getContent()); - noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate(System.currentTimeMillis())); - noticeBean.setIsRead("1"); - - //存本地一份 - BaseApplication.getDaoSession().insert(noticeBean); - //发送消息更新界面 - BroadcastManager.getInstance(context).sendBroadcast(Constant.NOTICE_MSG, gson.toJson(noticeBean)); + Log.d(TAG, "onNotificationMessageArrived: 通知到达"); } // 通知点击,只有个推通道下发的通知会回调此方法 diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index 1d706ff..224f8d3 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -20,6 +20,7 @@ import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.RSAUtils; import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.InputDialog; import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; @@ -66,11 +67,11 @@ @Override public void initData() { - String userName = (String) SaveKeyValues.getValue("name", ""); - String userPassword = (String) SaveKeyValues.getValue("password", ""); - userNameView.setText(userName); + String userAccount = StringHelper.getUserAccount(); + String userPassword = (String) SaveKeyValues.getValue("userPassword", ""); + userNameView.setText(userAccount); userPasswordView.setText(userPassword); - if (!TextUtils.isEmpty(userName) && !TextUtils.isEmpty(userPassword)) { + if (!TextUtils.isEmpty(userAccount) && !TextUtils.isEmpty(userPassword)) { rememberPasswordView.setChecked(true); } else { rememberPasswordView.setChecked(false); @@ -85,7 +86,7 @@ }); loadingDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("登陆中,请稍后") + .setTipWord("登录中,请稍后") .create(); } @@ -153,14 +154,14 @@ AuthenticationHelper.savePublicKey(keyString); PublicKey publicKey = RSAUtils.keyStrToPublicKey(keyString); - String userName = userNameView.getText().toString(); + String account = userNameView.getText().toString(); String userPassword = userPasswordView.getText().toString(); if (autoLoginView.isChecked()) { SaveKeyValues.putValue("autoLogin", true); } else { SaveKeyValues.putValue("autoLogin", false); } - if (TextUtils.isEmpty(userName)) { + if (TextUtils.isEmpty(account)) { ToastHelper.showToast("用户名不能为空", ToastHelper.WARING); return; } @@ -169,12 +170,12 @@ return; } if (rememberPasswordView.isChecked()) { - SaveKeyValues.putValue("name", userName); - SaveKeyValues.putValue("password", userPassword); + StringHelper.saveUserAccount(account); + SaveKeyValues.putValue("userPassword", userPassword); } String dataByPublicKey = RSAUtils.encryptDataByPublicKey(userPassword.getBytes(), publicKey); //登录并获取Token,POST请求 - loginPresenter.onReadyRetrofitRequest(userName, dataByPublicKey); + loginPresenter.onReadyRetrofitRequest(account, dataByPublicKey); } } diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index cba9a54..4c223cd 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -1,9 +1,11 @@ package com.casic.dcms.ui; -import android.content.BroadcastReceiver; +import android.app.Notification; import android.content.Context; import android.content.Intent; import android.location.Location; +import android.os.Handler; +import android.os.Message; import android.text.TextUtils; import android.util.Log; import android.view.MenuItem; @@ -18,6 +20,7 @@ import com.casic.dcms.adapter.MainPageAdapter; import com.casic.dcms.base.DoubleClickExitActivity; import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.bean.NoticeBean; import com.casic.dcms.mvp.presenter.PushRegisterPresenterImpl; import com.casic.dcms.mvp.presenter.UploadPositionPresenterImpl; import com.casic.dcms.mvp.view.IPushRegisterView; @@ -26,17 +29,19 @@ import com.casic.dcms.ui.fragment.MinePageFragment; import com.casic.dcms.ui.fragment.NoticePageFragment; import com.casic.dcms.ui.fragment.PhonePageFragment; -import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.NotificationHelper; import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.callback.ILocationListener; import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; -import com.google.gson.Gson; import com.gyf.immersionbar.ImmersionBar; +import com.igexin.sdk.message.GTTransmitMessage; +import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; @@ -51,11 +56,12 @@ NoScrollViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; + private MenuItem menuItem; private List pageList; - private BroadcastManager broadcastManager; private UploadPositionPresenterImpl uploadPositionPresenter; private PushRegisterPresenterImpl registerPresenter; + private static WeakReferenceHandler weakReferenceHandler; @Override public int initLayoutView() { @@ -80,29 +86,7 @@ pageList.add(new PhonePageFragment()); pageList.add(new NoticePageFragment()); pageList.add(new MinePageFragment()); - broadcastManager = BroadcastManager.getInstance(this); - broadcastManager.addAction(new String[]{Constant.LOGIN_OUT_ACTION, Constant.REGISTER_PUSH}, - new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - if (action != null) { - switch (action) { - case Constant.LOGIN_OUT_ACTION: - String loginOut = intent.getStringExtra("data"); - assert loginOut != null; - if (loginOut.equals("请求成功")) { - finish(); - } - break; - case Constant.REGISTER_PUSH: - String clientid = intent.getStringExtra("data"); - registerPresenter.onReadyRetrofitRequest(clientid); - break; - } - } - } - }); + weakReferenceHandler = new WeakReferenceHandler(this); String imei = OtherUtils.obtainSimCardSerialNumber(this); if (TextUtils.isEmpty(imei)) { return; @@ -175,15 +159,59 @@ mainViewPager.setAdapter(mainPageAdapter); } - @Override - protected void onDestroy() { - super.onDestroy(); - broadcastManager.destroy(Constant.LOGIN_OUT_ACTION, Constant.REGISTER_PUSH); - if (uploadPositionPresenter != null) { - uploadPositionPresenter.disposeRetrofitRequest(); + /** + * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveClientId(Context, String)}页面调用 + * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveMessageData(Context, GTTransmitMessage)}页面调用 + */ + public static void sendMessage(Message msg) { + weakReferenceHandler.sendMessage(msg); + } + + /** + * 供{@link MinePageFragment#obtainLoginOutResult(ActionResultBean)}页面调用 + */ + public static void sendEmptyMessage(int what) { + weakReferenceHandler.sendEmptyMessage(what); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(MainActivity activity) { + reference = new WeakReference<>(activity); } - if (registerPresenter != null) { - registerPresenter.disposeRetrofitRequest(); + + @Override + public void handleMessage(Message msg) { + MainActivity mainActivity = reference.get(); + switch (msg.what) { + case Constant.PUSH_REGISTER: + String clientId = (String) msg.obj; + Log.d(TAG, "注册个推Client: " + clientId); + reference.get().registerPresenter.onReadyRetrofitRequest(clientId); + break; + case Constant.PUSH_CREATE_NOTIFICATION: + Log.d(TAG, "创建通知栏"); + NoticeBean noticeBean = (NoticeBean) msg.obj; + if (null == noticeBean) { + return; + } + NotificationHelper notificationHelper = NotificationHelper.getInstance(mainActivity); + Notification notification = notificationHelper.createDefault( + noticeBean.getTitle(), + noticeBean.getContent(), + noticeBean.getCaseId(), + CaseDetailActivity.class); + notificationHelper.push(1, notification); + break; + case Constant.LOGIN_OUT: + Log.d(TAG, "退出登录"); + //回到登录页 + SaveKeyValues.putValue("autoLogin", false); + mainActivity.startActivity(new Intent(mainActivity, LoginActivity.class)); + mainActivity.finish(); + break; + } } } @@ -194,6 +222,17 @@ @Override public void obtainRegisterResult(ActionResultBean resultBean) { - Log.d(TAG, "obtainRegisterResult: " + new Gson().toJson(resultBean)); +// Log.d(TAG, "obtainRegisterResult: " + new Gson().toJson(resultBean)); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (uploadPositionPresenter != null) { + uploadPositionPresenter.disposeRetrofitRequest(); + } + if (registerPresenter != null) { + registerPresenter.disposeRetrofitRequest(); + } } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index c70520f..ddb25aa 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -17,8 +17,8 @@ import com.casic.dcms.mvp.view.IUpdateVersionView; import com.casic.dcms.ui.ChangePasswordActivity; import com.casic.dcms.ui.HelpfulActivity; +import com.casic.dcms.ui.MainActivity; import com.casic.dcms.ui.UserInfoActivity; -import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.ToastHelper; @@ -117,10 +117,7 @@ @Override public void obtainLoginOutResult(ActionResultBean resultBean) { -// Log.d(TAG, "obtainLoginOutResult: " + new Gson().toJson(resultBean)); - if (resultBean.isSuccess()) { - BroadcastManager.getInstance(context).sendBroadcast(Constant.LOGIN_OUT_ACTION, resultBean.getMessage()); - } + MainActivity.sendEmptyMessage(Constant.LOGIN_OUT); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/NoticePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/NoticePageFragment.java index 708f2a8..18abe0c 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/NoticePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/NoticePageFragment.java @@ -1,9 +1,11 @@ package com.casic.dcms.ui.fragment; -import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; +import android.os.Handler; +import android.os.Message; import android.text.TextUtils; +import android.util.Log; import android.view.ViewGroup; import androidx.annotation.NonNull; @@ -19,13 +21,13 @@ import com.casic.dcms.greendao.DaoSession; import com.casic.dcms.greendao.NoticeBeanDao; import com.casic.dcms.ui.CaseDetailActivity; -import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.StringHelper; -import com.google.gson.Gson; +import com.igexin.sdk.message.GTTransmitMessage; import com.qmuiteam.qmui.recyclerView.QMUIRVItemSwipeAction; import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; @@ -33,15 +35,15 @@ public class NoticePageFragment extends BaseFragment { + private static final String TAG = "NoticePageFragment"; @BindView(R.id.swipeRecyclerView) RecyclerView swipeRecyclerView; private Context context; private List noticeBeans = new ArrayList<>(); private SwipeViewAdapter swipeViewAdapter; - private BroadcastManager broadcastManager; - private Gson gson; private DaoSession daoSession; + private static WeakReferenceHandler weakReferenceHandler; @Override protected int initLayoutView() { @@ -55,34 +57,20 @@ @Override protected void initData() { - gson = new Gson(); daoSession = BaseApplication.getDaoSession(); swipeViewAdapter = new SwipeViewAdapter(context); - //根据userName加载历史数据 - String userName = StringHelper.getUserName(); - if (TextUtils.isEmpty(userName)) { + //根据loginName加载历史数据 + String account = StringHelper.getUserAccount(); + if (TextUtils.isEmpty(account)) { return; } - noticeBeans = daoSession.queryBuilder(NoticeBean.class).where(NoticeBeanDao.Properties.UserName.eq(userName)).list(); + noticeBeans = daoSession.queryBuilder(NoticeBean.class) + .where(NoticeBeanDao.Properties.UserAccount.eq(account)) + .orderDesc(NoticeBeanDao.Properties.PushDate)//按时间顺序最新顺序排序 + .list(); swipeViewAdapter.setData(noticeBeans); - broadcastManager = BroadcastManager.getInstance(context); - broadcastManager.addAction(Constant.NOTICE_MSG, new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - if (action != null) { - if (Constant.NOTICE_MSG.equals(action)) { - String data = intent.getStringExtra("data"); - assert data != null; - NoticeBean noticeBean = gson.fromJson(data, NoticeBean.class); - noticeBeans.add(noticeBean); - //更新数据 - swipeViewAdapter.setData(noticeBeans); - } - } - } - }); + weakReferenceHandler = new WeakReferenceHandler(this); } @Override @@ -134,11 +122,31 @@ }); } - @Override - public void onDestroyView() { - super.onDestroyView(); - if (broadcastManager != null) { - broadcastManager.destroy(Constant.NOTICE_MSG); + /** + * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveMessageData(Context, GTTransmitMessage)}调用 + */ + public static void sendMessage(Message msg) { + weakReferenceHandler.sendMessage(msg); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(NoticePageFragment fragment) { + reference = new WeakReference<>(fragment); + } + + @Override + public void handleMessage(Message msg) { + NoticePageFragment noticePageFragment = reference.get(); + List noticeBeans = noticePageFragment.noticeBeans; + if (msg.what == Constant.PUSH_MESSAGE_DATA) { + NoticeBean noticeBean = (NoticeBean) msg.obj; + Log.d(TAG, "收到推送消息,更新列表: " + noticeBean.getCaseId()); + noticeBeans.add(0, noticeBean);//新消息永远放到第一个 + //更新数据 + noticePageFragment.swipeViewAdapter.setData(noticeBeans); + } } } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java index c29046a..8a2376a 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java @@ -19,6 +19,8 @@ import com.casic.dcms.mvp.view.IPhoneBookView; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import java.util.ArrayList; import java.util.List; @@ -105,7 +107,8 @@ deptTreeView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() { @Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { - callPhone(deptAndPersons.get(groupPosition).get(childPosition).getPersonPhone()); + PersonBean personBean = deptAndPersons.get(groupPosition).get(childPosition); + callPhone(personBean.getPersonName(), personBean.getPersonPhone()); return true; } }); @@ -115,15 +118,27 @@ /** * 直接呼叫电话 */ - private void callPhone(String personPhone) { + private void callPhone(String personName, String personPhone) { if (TextUtils.isEmpty(personPhone)) { ToastHelper.showToast("手机号为空,无法拨号", ToastHelper.ERROR); return; } - Intent intent = new Intent(); - intent.setAction(Intent.ACTION_CALL); - intent.setData(Uri.parse("tel:" + personPhone)); - startActivity(intent); + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("提示") + .setMessage("是否确定拨打[" + personName + "]的电话?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + Intent intent = new Intent(); + intent.setAction(Intent.ACTION_CALL); + intent.setData(Uri.parse("tel:" + personPhone)); + startActivity(intent); + } + }) + .create().show(); } @Override diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index f67e68b..74442db 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -31,6 +31,7 @@ Color.rgb(120, 104, 230)}; public static final String[] PAGE_TITLES = {"表格", "饼状图"}; + public static final String IP_KEY = "BASE_IP"; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; public static final int PERMISSIONS_CODE = 999; @@ -42,17 +43,16 @@ public static final int CASE_HANDLE = 0; public static final int CASE_VERIFY = 1; public static final int CASE_CHECK = 2; + public static final int PUSH_REGISTER = 11; + public static final int PUSH_MESSAGE_DATA = 12;//透传消息,包含消息的详细数据 + public static final int PUSH_CREATE_NOTIFICATION = 13; + public static final int LOGIN_OUT = 14; public static final double DEFAULT_LNG = 116.06639658728571; public static final double DEFAULT_LAT = 27.759547805536418; public static final double DELTA_LNG_10 = 0.00002536; // 10米范围经度值偏移量(大约) public static final double DELTA_LAT_10 = 0.00002256;// 10米范围纬度值偏移量(大约) - public static final String IP_KEY = "BASE_IP"; - public static final String LOGIN_OUT_ACTION = "login_out"; - public static final String NOTICE_MSG = "receive_ush"; - public static final String REGISTER_PUSH = "register_push"; - public static final String BASE_MAP_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt/MapServer";//崇仁城管地图底图 public static final String COMPONENT_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crbj/FeatureServer";//崇仁部件图层 } diff --git a/app/src/main/java/com/casic/dcms/utils/NotificationHelper.java b/app/src/main/java/com/casic/dcms/utils/NotificationHelper.java new file mode 100644 index 0000000..59fd47a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/NotificationHelper.java @@ -0,0 +1,130 @@ +package com.casic.dcms.utils; + +import android.annotation.SuppressLint; +import android.app.Notification; +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.Build; + +import com.casic.dcms.R; + +public class NotificationHelper { + private Context mContext; + @SuppressLint("StaticFieldLeak") + private static NotificationHelper notificationHelper; + private NotificationManager notificationManager; + + private NotificationHelper(Context context) { + this.mContext = context; + notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); + } + + /** + * 双重锁单例 + */ + public static NotificationHelper getInstance(Context context) { + if (notificationHelper == null) { + synchronized (NotificationHelper.class) { + if (notificationHelper == null) { + notificationHelper = new NotificationHelper(context); + } + } + } + return notificationHelper; + } + + private Notification.Builder createBuilder() { + Notification.Builder builder; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + String name = mContext.getResources().getString(R.string.app_name); + //创建渠道 + String id = name + "_DefaultChannel"; + NotificationChannel mChannel = new NotificationChannel(id, name, NotificationManager.IMPORTANCE_DEFAULT); + notificationManager.createNotificationChannel(mChannel); + builder = new Notification.Builder(mContext, id); + } else { + builder = new Notification.Builder(mContext); + } + return builder; + } + + /** + * 创建常驻状态栏通知 + * + * @param title 通知标题 + * @param message 通知内容 + */ + public Notification createKeepAlive(String title, String message) { + Notification.Builder builder = createBuilder(); + builder.setContentTitle(title) + .setContentText(message) + .setWhen(System.currentTimeMillis()) + .setSmallIcon(R.mipmap.app_logo); + Notification notification = builder.build(); + notification.flags = Notification.FLAG_NO_CLEAR; + return notification; + } + + /** + * 创建无动作的默认通知 + * + * @param title 通知标题 + * @param message 通知内容 + */ + public Notification createDefault(String title, String message) { + Notification.Builder builder = createBuilder(); + Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.normal); + builder.setContentTitle(title) + .setContentText(message) + .setWhen(System.currentTimeMillis()) + .setSmallIcon(R.drawable.normal_small) + .setLargeIcon(bitmap) + .setAutoCancel(true); + Notification notification = builder.build(); + notification.flags = Notification.FLAG_AUTO_CANCEL; + return notification; + } + + /** + * 创建有动作的默认通知 + * + * @param title 通知标题 + * @param message 通知内容 + * @param targetClass 点击通知之后跳转的页面 + */ + public Notification createDefault(String title, String message, String caseId, Class targetClass) { + Notification.Builder builder = createBuilder(); + Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.normal); + Intent intent = new Intent(mContext, targetClass); + intent.putExtra("id", caseId); + builder.setContentTitle(title) + .setContentText(message) + .setWhen(System.currentTimeMillis()) + .setSmallIcon(R.drawable.normal_small) + .setLargeIcon(bitmap) + .setContentIntent(PendingIntent.getActivity(mContext, 0, intent, 0)) + .setAutoCancel(true); + Notification notification = builder.build(); + notification.flags = Notification.FLAG_AUTO_CANCEL; + return notification; + } + + //显示通知 + public void push(int notificationId, Notification notification) { + if (notificationManager != null) { + notificationManager.notify(notificationId, notification); + } + } + + //取消通知 + public void cancel(int notificationId) { + if (notificationManager != null) { + notificationManager.cancel(notificationId); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 3947941..8767b1b 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -13,6 +13,14 @@ private static final String TAG = "StringHelper"; + public static void saveUserAccount(String account) { + SaveKeyValues.putValue("userAccount", account); + } + + public static String getUserAccount() { + return (String) SaveKeyValues.getValue("userAccount", ""); + } + public static void saveUserName(String name) { SaveKeyValues.putValue("userName", name); } diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java index 61a8b1d..385ec1b 100644 --- a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -98,5 +98,4 @@ public void setOnItemClickListener(OnItemClickListener onItemClickListener) { this.clickListener = onItemClickListener; } - } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java index 1cfda9d..1dd316c 100644 --- a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -17,7 +17,7 @@ @Id(autoincrement = true) private Long id;//主键ID - private String userName;//用户名 + private String userAccount;//登录账户 private String caseId;//案卷id private String title;//案卷标题 private String content;//案卷简介 @@ -25,11 +25,11 @@ private String type;//推送类型 private String isRead;//0-已读;1-未读 - @Generated(hash = 2013153901) - public NoticeBean(Long id, String userName, String caseId, String title, + @Generated(hash = 1022814061) + public NoticeBean(Long id, String userAccount, String caseId, String title, String content, String pushDate, String type, String isRead) { this.id = id; - this.userName = userName; + this.userAccount = userAccount; this.caseId = caseId; this.title = title; this.content = content; @@ -50,12 +50,12 @@ this.id = id; } - public String getUserName() { - return this.userName; + public String getUserAccount() { + return this.userAccount; } - public void setUserName(String userName) { - this.userName = userName; + public void setUserAccount(String userAccount) { + this.userAccount = userAccount; } public String getCaseId() { diff --git a/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java b/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java index a733f25..10b4c77 100644 --- a/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java +++ b/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java @@ -25,7 +25,7 @@ */ public static class Properties { public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property UserName = new Property(1, String.class, "userName", false, "USER_NAME"); + public final static Property UserAccount = new Property(1, String.class, "userAccount", false, "USER_ACCOUNT"); public final static Property CaseId = new Property(2, String.class, "caseId", false, "CASE_ID"); public final static Property Title = new Property(3, String.class, "title", false, "TITLE"); public final static Property Content = new Property(4, String.class, "content", false, "CONTENT"); @@ -48,7 +48,7 @@ String constraint = ifNotExists? "IF NOT EXISTS ": ""; db.execSQL("CREATE TABLE " + constraint + "\"NOTICE_BEAN\" (" + // "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"USER_NAME\" TEXT," + // 1: userName + "\"USER_ACCOUNT\" TEXT," + // 1: userAccount "\"CASE_ID\" TEXT," + // 2: caseId "\"TITLE\" TEXT," + // 3: title "\"CONTENT\" TEXT," + // 4: content @@ -72,9 +72,9 @@ stmt.bindLong(1, id); } - String userName = entity.getUserName(); - if (userName != null) { - stmt.bindString(2, userName); + String userAccount = entity.getUserAccount(); + if (userAccount != null) { + stmt.bindString(2, userAccount); } String caseId = entity.getCaseId(); @@ -117,9 +117,9 @@ stmt.bindLong(1, id); } - String userName = entity.getUserName(); - if (userName != null) { - stmt.bindString(2, userName); + String userAccount = entity.getUserAccount(); + if (userAccount != null) { + stmt.bindString(2, userAccount); } String caseId = entity.getCaseId(); @@ -162,7 +162,7 @@ public NoticeBean readEntity(Cursor cursor, int offset) { NoticeBean entity = new NoticeBean( // cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // userName + cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // userAccount cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // caseId cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // title cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // content @@ -176,7 +176,7 @@ @Override public void readEntity(Cursor cursor, NoticeBean entity, int offset) { entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setUserName(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); + entity.setUserAccount(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); entity.setCaseId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); entity.setTitle(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); entity.setContent(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index fa17e1f..0030f57 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -2,6 +2,7 @@ import android.content.Context; import android.content.Intent; +import android.os.Message; import android.text.TextUtils; import android.util.Log; @@ -9,7 +10,8 @@ import com.casic.dcms.bean.NoticeBean; import com.casic.dcms.bean.PushResultBean; import com.casic.dcms.ui.CaseDetailActivity; -import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.ui.MainActivity; +import com.casic.dcms.ui.fragment.NoticePageFragment; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; @@ -36,7 +38,44 @@ // 处理透传消息 @Override public void onReceiveMessageData(Context context, GTTransmitMessage msg) { - // 透传消息的处理,详看 SDK demo + /** + * appid = DR9oeLL9va6aG3DYXy2w39 + * taskid = TEST_0515_d4689edeff9808959f10365895682f6f + * messageid = bd9c2465afd5464fb99368a579fd3fc8 + * pkg = com.casic.dcms + * cid = 9e85018b1972d664d9e86e9a6d03b4a7 + * playload = {"content":"您有一个工单超时,请快速处理1","data":{"id":"1392655327805825025"},"id":1393472265320001538,"title":"工单超时提醒","type":"NORMAL"} + * */ + Log.d(TAG, "onReceiveMessageData -> " + "\r\nplayload = " + new String(msg.getPayload())); + + Gson gson = new Gson(); + String messageContent = new String(msg.getPayload()); + PushResultBean resultBean = gson.fromJson(messageContent, new TypeToken() { + }.getType()); + + NoticeBean noticeBean = new NoticeBean(); + noticeBean.setUserAccount(StringHelper.getUserAccount()); + noticeBean.setCaseId(resultBean.getData().getId()); + noticeBean.setTitle(resultBean.getTitle()); + noticeBean.setContent(resultBean.getContent()); + noticeBean.setType(resultBean.getType()); + noticeBean.setPushDate(TimeOrDateUtil.timestampToDate(System.currentTimeMillis())); + noticeBean.setIsRead("1"); + + //存本地一份 + BaseApplication.getDaoSession().insert(noticeBean); + + //创建通知栏 + Message msgNotice = Message.obtain(); + msgNotice.what = Constant.PUSH_CREATE_NOTIFICATION; + msgNotice.obj = noticeBean; + MainActivity.sendMessage(msgNotice); + + //发送消息更新界面 + Message msgBean = Message.obtain(); + msgBean.what = Constant.PUSH_MESSAGE_DATA; + msgBean.obj = noticeBean; + NoticePageFragment.sendMessage(msgBean); } // 接收 cid @@ -45,7 +84,10 @@ Log.d(TAG, "onReceiveClientId -> " + "clientid = " + clientid); //通知MainActivity注册个推服务 if (!TextUtils.isEmpty(clientid)) { - BroadcastManager.getInstance(context).sendBroadcast(Constant.REGISTER_PUSH, clientid); + Message msg = Message.obtain(); + msg.what = Constant.PUSH_REGISTER; + msg.obj = clientid; + MainActivity.sendMessage(msg); } else { Log.d(TAG, "onReceiveClientId: ===>clientid = " + clientid); } @@ -66,34 +108,7 @@ // 通知到达,只有个推通道下发的通知会回调此方法 @Override public void onNotificationMessageArrived(Context context, GTNotificationMessage message) { - Log.d(TAG, "onNotificationMessageArrived: " + message.getContent()); - /** - * appid = DR9oeLL9va6aG3DYXy2w39 - * taskid = OSL-0514_xL4fPj7kqQ6tknVoQt3Mf6 - * messageid = b74187603fe34058a223949ead9f8dcf - * pkg = com.casic.dcms - * cid = cd1aec399b5504516102e399ecf7cda4 - * content = {"content":"您有一个工单超时,请快速处理","data":{"id":"1392655327805825025"},"id":1393131068164472834,"title":"工单超时提醒","type":"alarm"} - * title = 工单提醒 - * */ - Gson gson = new Gson(); - String messageContent = message.getContent(); - PushResultBean resultBean = gson.fromJson(messageContent, new TypeToken() { - }.getType()); - - NoticeBean noticeBean = new NoticeBean(); - noticeBean.setUserName(StringHelper.getUserName()); - noticeBean.setCaseId(resultBean.getData().getId()); - noticeBean.setTitle(resultBean.getTitle()); - noticeBean.setContent(resultBean.getContent()); - noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate(System.currentTimeMillis())); - noticeBean.setIsRead("1"); - - //存本地一份 - BaseApplication.getDaoSession().insert(noticeBean); - //发送消息更新界面 - BroadcastManager.getInstance(context).sendBroadcast(Constant.NOTICE_MSG, gson.toJson(noticeBean)); + Log.d(TAG, "onNotificationMessageArrived: 通知到达"); } // 通知点击,只有个推通道下发的通知会回调此方法 diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index 1d706ff..224f8d3 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -20,6 +20,7 @@ import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.RSAUtils; import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.InputDialog; import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; @@ -66,11 +67,11 @@ @Override public void initData() { - String userName = (String) SaveKeyValues.getValue("name", ""); - String userPassword = (String) SaveKeyValues.getValue("password", ""); - userNameView.setText(userName); + String userAccount = StringHelper.getUserAccount(); + String userPassword = (String) SaveKeyValues.getValue("userPassword", ""); + userNameView.setText(userAccount); userPasswordView.setText(userPassword); - if (!TextUtils.isEmpty(userName) && !TextUtils.isEmpty(userPassword)) { + if (!TextUtils.isEmpty(userAccount) && !TextUtils.isEmpty(userPassword)) { rememberPasswordView.setChecked(true); } else { rememberPasswordView.setChecked(false); @@ -85,7 +86,7 @@ }); loadingDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("登陆中,请稍后") + .setTipWord("登录中,请稍后") .create(); } @@ -153,14 +154,14 @@ AuthenticationHelper.savePublicKey(keyString); PublicKey publicKey = RSAUtils.keyStrToPublicKey(keyString); - String userName = userNameView.getText().toString(); + String account = userNameView.getText().toString(); String userPassword = userPasswordView.getText().toString(); if (autoLoginView.isChecked()) { SaveKeyValues.putValue("autoLogin", true); } else { SaveKeyValues.putValue("autoLogin", false); } - if (TextUtils.isEmpty(userName)) { + if (TextUtils.isEmpty(account)) { ToastHelper.showToast("用户名不能为空", ToastHelper.WARING); return; } @@ -169,12 +170,12 @@ return; } if (rememberPasswordView.isChecked()) { - SaveKeyValues.putValue("name", userName); - SaveKeyValues.putValue("password", userPassword); + StringHelper.saveUserAccount(account); + SaveKeyValues.putValue("userPassword", userPassword); } String dataByPublicKey = RSAUtils.encryptDataByPublicKey(userPassword.getBytes(), publicKey); //登录并获取Token,POST请求 - loginPresenter.onReadyRetrofitRequest(userName, dataByPublicKey); + loginPresenter.onReadyRetrofitRequest(account, dataByPublicKey); } } diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index cba9a54..4c223cd 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -1,9 +1,11 @@ package com.casic.dcms.ui; -import android.content.BroadcastReceiver; +import android.app.Notification; import android.content.Context; import android.content.Intent; import android.location.Location; +import android.os.Handler; +import android.os.Message; import android.text.TextUtils; import android.util.Log; import android.view.MenuItem; @@ -18,6 +20,7 @@ import com.casic.dcms.adapter.MainPageAdapter; import com.casic.dcms.base.DoubleClickExitActivity; import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.bean.NoticeBean; import com.casic.dcms.mvp.presenter.PushRegisterPresenterImpl; import com.casic.dcms.mvp.presenter.UploadPositionPresenterImpl; import com.casic.dcms.mvp.view.IPushRegisterView; @@ -26,17 +29,19 @@ import com.casic.dcms.ui.fragment.MinePageFragment; import com.casic.dcms.ui.fragment.NoticePageFragment; import com.casic.dcms.ui.fragment.PhonePageFragment; -import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.NotificationHelper; import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.callback.ILocationListener; import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; -import com.google.gson.Gson; import com.gyf.immersionbar.ImmersionBar; +import com.igexin.sdk.message.GTTransmitMessage; +import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; @@ -51,11 +56,12 @@ NoScrollViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; + private MenuItem menuItem; private List pageList; - private BroadcastManager broadcastManager; private UploadPositionPresenterImpl uploadPositionPresenter; private PushRegisterPresenterImpl registerPresenter; + private static WeakReferenceHandler weakReferenceHandler; @Override public int initLayoutView() { @@ -80,29 +86,7 @@ pageList.add(new PhonePageFragment()); pageList.add(new NoticePageFragment()); pageList.add(new MinePageFragment()); - broadcastManager = BroadcastManager.getInstance(this); - broadcastManager.addAction(new String[]{Constant.LOGIN_OUT_ACTION, Constant.REGISTER_PUSH}, - new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - if (action != null) { - switch (action) { - case Constant.LOGIN_OUT_ACTION: - String loginOut = intent.getStringExtra("data"); - assert loginOut != null; - if (loginOut.equals("请求成功")) { - finish(); - } - break; - case Constant.REGISTER_PUSH: - String clientid = intent.getStringExtra("data"); - registerPresenter.onReadyRetrofitRequest(clientid); - break; - } - } - } - }); + weakReferenceHandler = new WeakReferenceHandler(this); String imei = OtherUtils.obtainSimCardSerialNumber(this); if (TextUtils.isEmpty(imei)) { return; @@ -175,15 +159,59 @@ mainViewPager.setAdapter(mainPageAdapter); } - @Override - protected void onDestroy() { - super.onDestroy(); - broadcastManager.destroy(Constant.LOGIN_OUT_ACTION, Constant.REGISTER_PUSH); - if (uploadPositionPresenter != null) { - uploadPositionPresenter.disposeRetrofitRequest(); + /** + * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveClientId(Context, String)}页面调用 + * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveMessageData(Context, GTTransmitMessage)}页面调用 + */ + public static void sendMessage(Message msg) { + weakReferenceHandler.sendMessage(msg); + } + + /** + * 供{@link MinePageFragment#obtainLoginOutResult(ActionResultBean)}页面调用 + */ + public static void sendEmptyMessage(int what) { + weakReferenceHandler.sendEmptyMessage(what); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(MainActivity activity) { + reference = new WeakReference<>(activity); } - if (registerPresenter != null) { - registerPresenter.disposeRetrofitRequest(); + + @Override + public void handleMessage(Message msg) { + MainActivity mainActivity = reference.get(); + switch (msg.what) { + case Constant.PUSH_REGISTER: + String clientId = (String) msg.obj; + Log.d(TAG, "注册个推Client: " + clientId); + reference.get().registerPresenter.onReadyRetrofitRequest(clientId); + break; + case Constant.PUSH_CREATE_NOTIFICATION: + Log.d(TAG, "创建通知栏"); + NoticeBean noticeBean = (NoticeBean) msg.obj; + if (null == noticeBean) { + return; + } + NotificationHelper notificationHelper = NotificationHelper.getInstance(mainActivity); + Notification notification = notificationHelper.createDefault( + noticeBean.getTitle(), + noticeBean.getContent(), + noticeBean.getCaseId(), + CaseDetailActivity.class); + notificationHelper.push(1, notification); + break; + case Constant.LOGIN_OUT: + Log.d(TAG, "退出登录"); + //回到登录页 + SaveKeyValues.putValue("autoLogin", false); + mainActivity.startActivity(new Intent(mainActivity, LoginActivity.class)); + mainActivity.finish(); + break; + } } } @@ -194,6 +222,17 @@ @Override public void obtainRegisterResult(ActionResultBean resultBean) { - Log.d(TAG, "obtainRegisterResult: " + new Gson().toJson(resultBean)); +// Log.d(TAG, "obtainRegisterResult: " + new Gson().toJson(resultBean)); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (uploadPositionPresenter != null) { + uploadPositionPresenter.disposeRetrofitRequest(); + } + if (registerPresenter != null) { + registerPresenter.disposeRetrofitRequest(); + } } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index c70520f..ddb25aa 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -17,8 +17,8 @@ import com.casic.dcms.mvp.view.IUpdateVersionView; import com.casic.dcms.ui.ChangePasswordActivity; import com.casic.dcms.ui.HelpfulActivity; +import com.casic.dcms.ui.MainActivity; import com.casic.dcms.ui.UserInfoActivity; -import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.ToastHelper; @@ -117,10 +117,7 @@ @Override public void obtainLoginOutResult(ActionResultBean resultBean) { -// Log.d(TAG, "obtainLoginOutResult: " + new Gson().toJson(resultBean)); - if (resultBean.isSuccess()) { - BroadcastManager.getInstance(context).sendBroadcast(Constant.LOGIN_OUT_ACTION, resultBean.getMessage()); - } + MainActivity.sendEmptyMessage(Constant.LOGIN_OUT); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/NoticePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/NoticePageFragment.java index 708f2a8..18abe0c 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/NoticePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/NoticePageFragment.java @@ -1,9 +1,11 @@ package com.casic.dcms.ui.fragment; -import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; +import android.os.Handler; +import android.os.Message; import android.text.TextUtils; +import android.util.Log; import android.view.ViewGroup; import androidx.annotation.NonNull; @@ -19,13 +21,13 @@ import com.casic.dcms.greendao.DaoSession; import com.casic.dcms.greendao.NoticeBeanDao; import com.casic.dcms.ui.CaseDetailActivity; -import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.StringHelper; -import com.google.gson.Gson; +import com.igexin.sdk.message.GTTransmitMessage; import com.qmuiteam.qmui.recyclerView.QMUIRVItemSwipeAction; import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; @@ -33,15 +35,15 @@ public class NoticePageFragment extends BaseFragment { + private static final String TAG = "NoticePageFragment"; @BindView(R.id.swipeRecyclerView) RecyclerView swipeRecyclerView; private Context context; private List noticeBeans = new ArrayList<>(); private SwipeViewAdapter swipeViewAdapter; - private BroadcastManager broadcastManager; - private Gson gson; private DaoSession daoSession; + private static WeakReferenceHandler weakReferenceHandler; @Override protected int initLayoutView() { @@ -55,34 +57,20 @@ @Override protected void initData() { - gson = new Gson(); daoSession = BaseApplication.getDaoSession(); swipeViewAdapter = new SwipeViewAdapter(context); - //根据userName加载历史数据 - String userName = StringHelper.getUserName(); - if (TextUtils.isEmpty(userName)) { + //根据loginName加载历史数据 + String account = StringHelper.getUserAccount(); + if (TextUtils.isEmpty(account)) { return; } - noticeBeans = daoSession.queryBuilder(NoticeBean.class).where(NoticeBeanDao.Properties.UserName.eq(userName)).list(); + noticeBeans = daoSession.queryBuilder(NoticeBean.class) + .where(NoticeBeanDao.Properties.UserAccount.eq(account)) + .orderDesc(NoticeBeanDao.Properties.PushDate)//按时间顺序最新顺序排序 + .list(); swipeViewAdapter.setData(noticeBeans); - broadcastManager = BroadcastManager.getInstance(context); - broadcastManager.addAction(Constant.NOTICE_MSG, new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - if (action != null) { - if (Constant.NOTICE_MSG.equals(action)) { - String data = intent.getStringExtra("data"); - assert data != null; - NoticeBean noticeBean = gson.fromJson(data, NoticeBean.class); - noticeBeans.add(noticeBean); - //更新数据 - swipeViewAdapter.setData(noticeBeans); - } - } - } - }); + weakReferenceHandler = new WeakReferenceHandler(this); } @Override @@ -134,11 +122,31 @@ }); } - @Override - public void onDestroyView() { - super.onDestroyView(); - if (broadcastManager != null) { - broadcastManager.destroy(Constant.NOTICE_MSG); + /** + * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveMessageData(Context, GTTransmitMessage)}调用 + */ + public static void sendMessage(Message msg) { + weakReferenceHandler.sendMessage(msg); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(NoticePageFragment fragment) { + reference = new WeakReference<>(fragment); + } + + @Override + public void handleMessage(Message msg) { + NoticePageFragment noticePageFragment = reference.get(); + List noticeBeans = noticePageFragment.noticeBeans; + if (msg.what == Constant.PUSH_MESSAGE_DATA) { + NoticeBean noticeBean = (NoticeBean) msg.obj; + Log.d(TAG, "收到推送消息,更新列表: " + noticeBean.getCaseId()); + noticeBeans.add(0, noticeBean);//新消息永远放到第一个 + //更新数据 + noticePageFragment.swipeViewAdapter.setData(noticeBeans); + } } } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java index c29046a..8a2376a 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java @@ -19,6 +19,8 @@ import com.casic.dcms.mvp.view.IPhoneBookView; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import java.util.ArrayList; import java.util.List; @@ -105,7 +107,8 @@ deptTreeView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() { @Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { - callPhone(deptAndPersons.get(groupPosition).get(childPosition).getPersonPhone()); + PersonBean personBean = deptAndPersons.get(groupPosition).get(childPosition); + callPhone(personBean.getPersonName(), personBean.getPersonPhone()); return true; } }); @@ -115,15 +118,27 @@ /** * 直接呼叫电话 */ - private void callPhone(String personPhone) { + private void callPhone(String personName, String personPhone) { if (TextUtils.isEmpty(personPhone)) { ToastHelper.showToast("手机号为空,无法拨号", ToastHelper.ERROR); return; } - Intent intent = new Intent(); - intent.setAction(Intent.ACTION_CALL); - intent.setData(Uri.parse("tel:" + personPhone)); - startActivity(intent); + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("提示") + .setMessage("是否确定拨打[" + personName + "]的电话?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + Intent intent = new Intent(); + intent.setAction(Intent.ACTION_CALL); + intent.setData(Uri.parse("tel:" + personPhone)); + startActivity(intent); + } + }) + .create().show(); } @Override diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index f67e68b..74442db 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -31,6 +31,7 @@ Color.rgb(120, 104, 230)}; public static final String[] PAGE_TITLES = {"表格", "饼状图"}; + public static final String IP_KEY = "BASE_IP"; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; public static final int PERMISSIONS_CODE = 999; @@ -42,17 +43,16 @@ public static final int CASE_HANDLE = 0; public static final int CASE_VERIFY = 1; public static final int CASE_CHECK = 2; + public static final int PUSH_REGISTER = 11; + public static final int PUSH_MESSAGE_DATA = 12;//透传消息,包含消息的详细数据 + public static final int PUSH_CREATE_NOTIFICATION = 13; + public static final int LOGIN_OUT = 14; public static final double DEFAULT_LNG = 116.06639658728571; public static final double DEFAULT_LAT = 27.759547805536418; public static final double DELTA_LNG_10 = 0.00002536; // 10米范围经度值偏移量(大约) public static final double DELTA_LAT_10 = 0.00002256;// 10米范围纬度值偏移量(大约) - public static final String IP_KEY = "BASE_IP"; - public static final String LOGIN_OUT_ACTION = "login_out"; - public static final String NOTICE_MSG = "receive_ush"; - public static final String REGISTER_PUSH = "register_push"; - public static final String BASE_MAP_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt/MapServer";//崇仁城管地图底图 public static final String COMPONENT_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crbj/FeatureServer";//崇仁部件图层 } diff --git a/app/src/main/java/com/casic/dcms/utils/NotificationHelper.java b/app/src/main/java/com/casic/dcms/utils/NotificationHelper.java new file mode 100644 index 0000000..59fd47a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/NotificationHelper.java @@ -0,0 +1,130 @@ +package com.casic.dcms.utils; + +import android.annotation.SuppressLint; +import android.app.Notification; +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.Build; + +import com.casic.dcms.R; + +public class NotificationHelper { + private Context mContext; + @SuppressLint("StaticFieldLeak") + private static NotificationHelper notificationHelper; + private NotificationManager notificationManager; + + private NotificationHelper(Context context) { + this.mContext = context; + notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); + } + + /** + * 双重锁单例 + */ + public static NotificationHelper getInstance(Context context) { + if (notificationHelper == null) { + synchronized (NotificationHelper.class) { + if (notificationHelper == null) { + notificationHelper = new NotificationHelper(context); + } + } + } + return notificationHelper; + } + + private Notification.Builder createBuilder() { + Notification.Builder builder; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + String name = mContext.getResources().getString(R.string.app_name); + //创建渠道 + String id = name + "_DefaultChannel"; + NotificationChannel mChannel = new NotificationChannel(id, name, NotificationManager.IMPORTANCE_DEFAULT); + notificationManager.createNotificationChannel(mChannel); + builder = new Notification.Builder(mContext, id); + } else { + builder = new Notification.Builder(mContext); + } + return builder; + } + + /** + * 创建常驻状态栏通知 + * + * @param title 通知标题 + * @param message 通知内容 + */ + public Notification createKeepAlive(String title, String message) { + Notification.Builder builder = createBuilder(); + builder.setContentTitle(title) + .setContentText(message) + .setWhen(System.currentTimeMillis()) + .setSmallIcon(R.mipmap.app_logo); + Notification notification = builder.build(); + notification.flags = Notification.FLAG_NO_CLEAR; + return notification; + } + + /** + * 创建无动作的默认通知 + * + * @param title 通知标题 + * @param message 通知内容 + */ + public Notification createDefault(String title, String message) { + Notification.Builder builder = createBuilder(); + Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.normal); + builder.setContentTitle(title) + .setContentText(message) + .setWhen(System.currentTimeMillis()) + .setSmallIcon(R.drawable.normal_small) + .setLargeIcon(bitmap) + .setAutoCancel(true); + Notification notification = builder.build(); + notification.flags = Notification.FLAG_AUTO_CANCEL; + return notification; + } + + /** + * 创建有动作的默认通知 + * + * @param title 通知标题 + * @param message 通知内容 + * @param targetClass 点击通知之后跳转的页面 + */ + public Notification createDefault(String title, String message, String caseId, Class targetClass) { + Notification.Builder builder = createBuilder(); + Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.normal); + Intent intent = new Intent(mContext, targetClass); + intent.putExtra("id", caseId); + builder.setContentTitle(title) + .setContentText(message) + .setWhen(System.currentTimeMillis()) + .setSmallIcon(R.drawable.normal_small) + .setLargeIcon(bitmap) + .setContentIntent(PendingIntent.getActivity(mContext, 0, intent, 0)) + .setAutoCancel(true); + Notification notification = builder.build(); + notification.flags = Notification.FLAG_AUTO_CANCEL; + return notification; + } + + //显示通知 + public void push(int notificationId, Notification notification) { + if (notificationManager != null) { + notificationManager.notify(notificationId, notification); + } + } + + //取消通知 + public void cancel(int notificationId) { + if (notificationManager != null) { + notificationManager.cancel(notificationId); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 3947941..8767b1b 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -13,6 +13,14 @@ private static final String TAG = "StringHelper"; + public static void saveUserAccount(String account) { + SaveKeyValues.putValue("userAccount", account); + } + + public static String getUserAccount() { + return (String) SaveKeyValues.getValue("userAccount", ""); + } + public static void saveUserName(String name) { SaveKeyValues.putValue("userName", name); } diff --git a/app/src/main/java/com/casic/dcms/widgets/BigPictureDialog.java b/app/src/main/java/com/casic/dcms/widgets/BigPictureDialog.java index 3e6ed4e..f81e17e 100644 --- a/app/src/main/java/com/casic/dcms/widgets/BigPictureDialog.java +++ b/app/src/main/java/com/casic/dcms/widgets/BigPictureDialog.java @@ -8,6 +8,8 @@ import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; +import android.widget.ImageView; +import android.widget.LinearLayout; import android.widget.TextView; import androidx.appcompat.app.AlertDialog; @@ -31,6 +33,7 @@ private TextView pageNumberView; private ViewPager imagePagerView; private Window window; + private int maxWidth, maxHeight; private BigPictureDialog(Builder builder) { super(builder.mContext, R.style.CustomDialogStyle); @@ -49,6 +52,9 @@ initData(); window = getWindow(); + maxWidth = (int) (QMUIDisplayHelper.getScreenWidth(context) * 0.9); + maxHeight = (int) (QMUIDisplayHelper.getScreenHeight(context) * 0.8); + setCancelable(true); setCanceledOnTouchOutside(true); } @@ -57,8 +63,8 @@ public void onAttachedToWindow() { super.onAttachedToWindow(); WindowManager.LayoutParams layoutParams = window.getAttributes(); - layoutParams.width = (int) (QMUIDisplayHelper.getScreenWidth(context) * 0.9); - layoutParams.height = (int) (QMUIDisplayHelper.getScreenHeight(context) * 0.65); + layoutParams.width = maxWidth; + layoutParams.height = maxHeight; window.setAttributes(layoutParams); } @@ -105,6 +111,9 @@ View view = LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false); PhotoView photoView = view.findViewById(R.id.photoView); Glide.with(context).load(data.get(position)).into(photoView); + photoView.setScaleType(ImageView.ScaleType.FIT_XY); + LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(maxWidth, maxHeight); + photoView.setLayoutParams(layoutParams); container.addView(view); return view; } diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java index 61a8b1d..385ec1b 100644 --- a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -98,5 +98,4 @@ public void setOnItemClickListener(OnItemClickListener onItemClickListener) { this.clickListener = onItemClickListener; } - } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java index 1cfda9d..1dd316c 100644 --- a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -17,7 +17,7 @@ @Id(autoincrement = true) private Long id;//主键ID - private String userName;//用户名 + private String userAccount;//登录账户 private String caseId;//案卷id private String title;//案卷标题 private String content;//案卷简介 @@ -25,11 +25,11 @@ private String type;//推送类型 private String isRead;//0-已读;1-未读 - @Generated(hash = 2013153901) - public NoticeBean(Long id, String userName, String caseId, String title, + @Generated(hash = 1022814061) + public NoticeBean(Long id, String userAccount, String caseId, String title, String content, String pushDate, String type, String isRead) { this.id = id; - this.userName = userName; + this.userAccount = userAccount; this.caseId = caseId; this.title = title; this.content = content; @@ -50,12 +50,12 @@ this.id = id; } - public String getUserName() { - return this.userName; + public String getUserAccount() { + return this.userAccount; } - public void setUserName(String userName) { - this.userName = userName; + public void setUserAccount(String userAccount) { + this.userAccount = userAccount; } public String getCaseId() { diff --git a/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java b/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java index a733f25..10b4c77 100644 --- a/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java +++ b/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java @@ -25,7 +25,7 @@ */ public static class Properties { public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property UserName = new Property(1, String.class, "userName", false, "USER_NAME"); + public final static Property UserAccount = new Property(1, String.class, "userAccount", false, "USER_ACCOUNT"); public final static Property CaseId = new Property(2, String.class, "caseId", false, "CASE_ID"); public final static Property Title = new Property(3, String.class, "title", false, "TITLE"); public final static Property Content = new Property(4, String.class, "content", false, "CONTENT"); @@ -48,7 +48,7 @@ String constraint = ifNotExists? "IF NOT EXISTS ": ""; db.execSQL("CREATE TABLE " + constraint + "\"NOTICE_BEAN\" (" + // "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"USER_NAME\" TEXT," + // 1: userName + "\"USER_ACCOUNT\" TEXT," + // 1: userAccount "\"CASE_ID\" TEXT," + // 2: caseId "\"TITLE\" TEXT," + // 3: title "\"CONTENT\" TEXT," + // 4: content @@ -72,9 +72,9 @@ stmt.bindLong(1, id); } - String userName = entity.getUserName(); - if (userName != null) { - stmt.bindString(2, userName); + String userAccount = entity.getUserAccount(); + if (userAccount != null) { + stmt.bindString(2, userAccount); } String caseId = entity.getCaseId(); @@ -117,9 +117,9 @@ stmt.bindLong(1, id); } - String userName = entity.getUserName(); - if (userName != null) { - stmt.bindString(2, userName); + String userAccount = entity.getUserAccount(); + if (userAccount != null) { + stmt.bindString(2, userAccount); } String caseId = entity.getCaseId(); @@ -162,7 +162,7 @@ public NoticeBean readEntity(Cursor cursor, int offset) { NoticeBean entity = new NoticeBean( // cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // userName + cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // userAccount cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // caseId cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // title cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // content @@ -176,7 +176,7 @@ @Override public void readEntity(Cursor cursor, NoticeBean entity, int offset) { entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setUserName(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); + entity.setUserAccount(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); entity.setCaseId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); entity.setTitle(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); entity.setContent(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index fa17e1f..0030f57 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -2,6 +2,7 @@ import android.content.Context; import android.content.Intent; +import android.os.Message; import android.text.TextUtils; import android.util.Log; @@ -9,7 +10,8 @@ import com.casic.dcms.bean.NoticeBean; import com.casic.dcms.bean.PushResultBean; import com.casic.dcms.ui.CaseDetailActivity; -import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.ui.MainActivity; +import com.casic.dcms.ui.fragment.NoticePageFragment; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; @@ -36,7 +38,44 @@ // 处理透传消息 @Override public void onReceiveMessageData(Context context, GTTransmitMessage msg) { - // 透传消息的处理,详看 SDK demo + /** + * appid = DR9oeLL9va6aG3DYXy2w39 + * taskid = TEST_0515_d4689edeff9808959f10365895682f6f + * messageid = bd9c2465afd5464fb99368a579fd3fc8 + * pkg = com.casic.dcms + * cid = 9e85018b1972d664d9e86e9a6d03b4a7 + * playload = {"content":"您有一个工单超时,请快速处理1","data":{"id":"1392655327805825025"},"id":1393472265320001538,"title":"工单超时提醒","type":"NORMAL"} + * */ + Log.d(TAG, "onReceiveMessageData -> " + "\r\nplayload = " + new String(msg.getPayload())); + + Gson gson = new Gson(); + String messageContent = new String(msg.getPayload()); + PushResultBean resultBean = gson.fromJson(messageContent, new TypeToken() { + }.getType()); + + NoticeBean noticeBean = new NoticeBean(); + noticeBean.setUserAccount(StringHelper.getUserAccount()); + noticeBean.setCaseId(resultBean.getData().getId()); + noticeBean.setTitle(resultBean.getTitle()); + noticeBean.setContent(resultBean.getContent()); + noticeBean.setType(resultBean.getType()); + noticeBean.setPushDate(TimeOrDateUtil.timestampToDate(System.currentTimeMillis())); + noticeBean.setIsRead("1"); + + //存本地一份 + BaseApplication.getDaoSession().insert(noticeBean); + + //创建通知栏 + Message msgNotice = Message.obtain(); + msgNotice.what = Constant.PUSH_CREATE_NOTIFICATION; + msgNotice.obj = noticeBean; + MainActivity.sendMessage(msgNotice); + + //发送消息更新界面 + Message msgBean = Message.obtain(); + msgBean.what = Constant.PUSH_MESSAGE_DATA; + msgBean.obj = noticeBean; + NoticePageFragment.sendMessage(msgBean); } // 接收 cid @@ -45,7 +84,10 @@ Log.d(TAG, "onReceiveClientId -> " + "clientid = " + clientid); //通知MainActivity注册个推服务 if (!TextUtils.isEmpty(clientid)) { - BroadcastManager.getInstance(context).sendBroadcast(Constant.REGISTER_PUSH, clientid); + Message msg = Message.obtain(); + msg.what = Constant.PUSH_REGISTER; + msg.obj = clientid; + MainActivity.sendMessage(msg); } else { Log.d(TAG, "onReceiveClientId: ===>clientid = " + clientid); } @@ -66,34 +108,7 @@ // 通知到达,只有个推通道下发的通知会回调此方法 @Override public void onNotificationMessageArrived(Context context, GTNotificationMessage message) { - Log.d(TAG, "onNotificationMessageArrived: " + message.getContent()); - /** - * appid = DR9oeLL9va6aG3DYXy2w39 - * taskid = OSL-0514_xL4fPj7kqQ6tknVoQt3Mf6 - * messageid = b74187603fe34058a223949ead9f8dcf - * pkg = com.casic.dcms - * cid = cd1aec399b5504516102e399ecf7cda4 - * content = {"content":"您有一个工单超时,请快速处理","data":{"id":"1392655327805825025"},"id":1393131068164472834,"title":"工单超时提醒","type":"alarm"} - * title = 工单提醒 - * */ - Gson gson = new Gson(); - String messageContent = message.getContent(); - PushResultBean resultBean = gson.fromJson(messageContent, new TypeToken() { - }.getType()); - - NoticeBean noticeBean = new NoticeBean(); - noticeBean.setUserName(StringHelper.getUserName()); - noticeBean.setCaseId(resultBean.getData().getId()); - noticeBean.setTitle(resultBean.getTitle()); - noticeBean.setContent(resultBean.getContent()); - noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate(System.currentTimeMillis())); - noticeBean.setIsRead("1"); - - //存本地一份 - BaseApplication.getDaoSession().insert(noticeBean); - //发送消息更新界面 - BroadcastManager.getInstance(context).sendBroadcast(Constant.NOTICE_MSG, gson.toJson(noticeBean)); + Log.d(TAG, "onNotificationMessageArrived: 通知到达"); } // 通知点击,只有个推通道下发的通知会回调此方法 diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index 1d706ff..224f8d3 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -20,6 +20,7 @@ import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.RSAUtils; import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.InputDialog; import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; @@ -66,11 +67,11 @@ @Override public void initData() { - String userName = (String) SaveKeyValues.getValue("name", ""); - String userPassword = (String) SaveKeyValues.getValue("password", ""); - userNameView.setText(userName); + String userAccount = StringHelper.getUserAccount(); + String userPassword = (String) SaveKeyValues.getValue("userPassword", ""); + userNameView.setText(userAccount); userPasswordView.setText(userPassword); - if (!TextUtils.isEmpty(userName) && !TextUtils.isEmpty(userPassword)) { + if (!TextUtils.isEmpty(userAccount) && !TextUtils.isEmpty(userPassword)) { rememberPasswordView.setChecked(true); } else { rememberPasswordView.setChecked(false); @@ -85,7 +86,7 @@ }); loadingDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("登陆中,请稍后") + .setTipWord("登录中,请稍后") .create(); } @@ -153,14 +154,14 @@ AuthenticationHelper.savePublicKey(keyString); PublicKey publicKey = RSAUtils.keyStrToPublicKey(keyString); - String userName = userNameView.getText().toString(); + String account = userNameView.getText().toString(); String userPassword = userPasswordView.getText().toString(); if (autoLoginView.isChecked()) { SaveKeyValues.putValue("autoLogin", true); } else { SaveKeyValues.putValue("autoLogin", false); } - if (TextUtils.isEmpty(userName)) { + if (TextUtils.isEmpty(account)) { ToastHelper.showToast("用户名不能为空", ToastHelper.WARING); return; } @@ -169,12 +170,12 @@ return; } if (rememberPasswordView.isChecked()) { - SaveKeyValues.putValue("name", userName); - SaveKeyValues.putValue("password", userPassword); + StringHelper.saveUserAccount(account); + SaveKeyValues.putValue("userPassword", userPassword); } String dataByPublicKey = RSAUtils.encryptDataByPublicKey(userPassword.getBytes(), publicKey); //登录并获取Token,POST请求 - loginPresenter.onReadyRetrofitRequest(userName, dataByPublicKey); + loginPresenter.onReadyRetrofitRequest(account, dataByPublicKey); } } diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index cba9a54..4c223cd 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -1,9 +1,11 @@ package com.casic.dcms.ui; -import android.content.BroadcastReceiver; +import android.app.Notification; import android.content.Context; import android.content.Intent; import android.location.Location; +import android.os.Handler; +import android.os.Message; import android.text.TextUtils; import android.util.Log; import android.view.MenuItem; @@ -18,6 +20,7 @@ import com.casic.dcms.adapter.MainPageAdapter; import com.casic.dcms.base.DoubleClickExitActivity; import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.bean.NoticeBean; import com.casic.dcms.mvp.presenter.PushRegisterPresenterImpl; import com.casic.dcms.mvp.presenter.UploadPositionPresenterImpl; import com.casic.dcms.mvp.view.IPushRegisterView; @@ -26,17 +29,19 @@ import com.casic.dcms.ui.fragment.MinePageFragment; import com.casic.dcms.ui.fragment.NoticePageFragment; import com.casic.dcms.ui.fragment.PhonePageFragment; -import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.NotificationHelper; import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.callback.ILocationListener; import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; -import com.google.gson.Gson; import com.gyf.immersionbar.ImmersionBar; +import com.igexin.sdk.message.GTTransmitMessage; +import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; @@ -51,11 +56,12 @@ NoScrollViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; + private MenuItem menuItem; private List pageList; - private BroadcastManager broadcastManager; private UploadPositionPresenterImpl uploadPositionPresenter; private PushRegisterPresenterImpl registerPresenter; + private static WeakReferenceHandler weakReferenceHandler; @Override public int initLayoutView() { @@ -80,29 +86,7 @@ pageList.add(new PhonePageFragment()); pageList.add(new NoticePageFragment()); pageList.add(new MinePageFragment()); - broadcastManager = BroadcastManager.getInstance(this); - broadcastManager.addAction(new String[]{Constant.LOGIN_OUT_ACTION, Constant.REGISTER_PUSH}, - new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - if (action != null) { - switch (action) { - case Constant.LOGIN_OUT_ACTION: - String loginOut = intent.getStringExtra("data"); - assert loginOut != null; - if (loginOut.equals("请求成功")) { - finish(); - } - break; - case Constant.REGISTER_PUSH: - String clientid = intent.getStringExtra("data"); - registerPresenter.onReadyRetrofitRequest(clientid); - break; - } - } - } - }); + weakReferenceHandler = new WeakReferenceHandler(this); String imei = OtherUtils.obtainSimCardSerialNumber(this); if (TextUtils.isEmpty(imei)) { return; @@ -175,15 +159,59 @@ mainViewPager.setAdapter(mainPageAdapter); } - @Override - protected void onDestroy() { - super.onDestroy(); - broadcastManager.destroy(Constant.LOGIN_OUT_ACTION, Constant.REGISTER_PUSH); - if (uploadPositionPresenter != null) { - uploadPositionPresenter.disposeRetrofitRequest(); + /** + * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveClientId(Context, String)}页面调用 + * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveMessageData(Context, GTTransmitMessage)}页面调用 + */ + public static void sendMessage(Message msg) { + weakReferenceHandler.sendMessage(msg); + } + + /** + * 供{@link MinePageFragment#obtainLoginOutResult(ActionResultBean)}页面调用 + */ + public static void sendEmptyMessage(int what) { + weakReferenceHandler.sendEmptyMessage(what); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(MainActivity activity) { + reference = new WeakReference<>(activity); } - if (registerPresenter != null) { - registerPresenter.disposeRetrofitRequest(); + + @Override + public void handleMessage(Message msg) { + MainActivity mainActivity = reference.get(); + switch (msg.what) { + case Constant.PUSH_REGISTER: + String clientId = (String) msg.obj; + Log.d(TAG, "注册个推Client: " + clientId); + reference.get().registerPresenter.onReadyRetrofitRequest(clientId); + break; + case Constant.PUSH_CREATE_NOTIFICATION: + Log.d(TAG, "创建通知栏"); + NoticeBean noticeBean = (NoticeBean) msg.obj; + if (null == noticeBean) { + return; + } + NotificationHelper notificationHelper = NotificationHelper.getInstance(mainActivity); + Notification notification = notificationHelper.createDefault( + noticeBean.getTitle(), + noticeBean.getContent(), + noticeBean.getCaseId(), + CaseDetailActivity.class); + notificationHelper.push(1, notification); + break; + case Constant.LOGIN_OUT: + Log.d(TAG, "退出登录"); + //回到登录页 + SaveKeyValues.putValue("autoLogin", false); + mainActivity.startActivity(new Intent(mainActivity, LoginActivity.class)); + mainActivity.finish(); + break; + } } } @@ -194,6 +222,17 @@ @Override public void obtainRegisterResult(ActionResultBean resultBean) { - Log.d(TAG, "obtainRegisterResult: " + new Gson().toJson(resultBean)); +// Log.d(TAG, "obtainRegisterResult: " + new Gson().toJson(resultBean)); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (uploadPositionPresenter != null) { + uploadPositionPresenter.disposeRetrofitRequest(); + } + if (registerPresenter != null) { + registerPresenter.disposeRetrofitRequest(); + } } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index c70520f..ddb25aa 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -17,8 +17,8 @@ import com.casic.dcms.mvp.view.IUpdateVersionView; import com.casic.dcms.ui.ChangePasswordActivity; import com.casic.dcms.ui.HelpfulActivity; +import com.casic.dcms.ui.MainActivity; import com.casic.dcms.ui.UserInfoActivity; -import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.ToastHelper; @@ -117,10 +117,7 @@ @Override public void obtainLoginOutResult(ActionResultBean resultBean) { -// Log.d(TAG, "obtainLoginOutResult: " + new Gson().toJson(resultBean)); - if (resultBean.isSuccess()) { - BroadcastManager.getInstance(context).sendBroadcast(Constant.LOGIN_OUT_ACTION, resultBean.getMessage()); - } + MainActivity.sendEmptyMessage(Constant.LOGIN_OUT); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/NoticePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/NoticePageFragment.java index 708f2a8..18abe0c 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/NoticePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/NoticePageFragment.java @@ -1,9 +1,11 @@ package com.casic.dcms.ui.fragment; -import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; +import android.os.Handler; +import android.os.Message; import android.text.TextUtils; +import android.util.Log; import android.view.ViewGroup; import androidx.annotation.NonNull; @@ -19,13 +21,13 @@ import com.casic.dcms.greendao.DaoSession; import com.casic.dcms.greendao.NoticeBeanDao; import com.casic.dcms.ui.CaseDetailActivity; -import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.StringHelper; -import com.google.gson.Gson; +import com.igexin.sdk.message.GTTransmitMessage; import com.qmuiteam.qmui.recyclerView.QMUIRVItemSwipeAction; import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; @@ -33,15 +35,15 @@ public class NoticePageFragment extends BaseFragment { + private static final String TAG = "NoticePageFragment"; @BindView(R.id.swipeRecyclerView) RecyclerView swipeRecyclerView; private Context context; private List noticeBeans = new ArrayList<>(); private SwipeViewAdapter swipeViewAdapter; - private BroadcastManager broadcastManager; - private Gson gson; private DaoSession daoSession; + private static WeakReferenceHandler weakReferenceHandler; @Override protected int initLayoutView() { @@ -55,34 +57,20 @@ @Override protected void initData() { - gson = new Gson(); daoSession = BaseApplication.getDaoSession(); swipeViewAdapter = new SwipeViewAdapter(context); - //根据userName加载历史数据 - String userName = StringHelper.getUserName(); - if (TextUtils.isEmpty(userName)) { + //根据loginName加载历史数据 + String account = StringHelper.getUserAccount(); + if (TextUtils.isEmpty(account)) { return; } - noticeBeans = daoSession.queryBuilder(NoticeBean.class).where(NoticeBeanDao.Properties.UserName.eq(userName)).list(); + noticeBeans = daoSession.queryBuilder(NoticeBean.class) + .where(NoticeBeanDao.Properties.UserAccount.eq(account)) + .orderDesc(NoticeBeanDao.Properties.PushDate)//按时间顺序最新顺序排序 + .list(); swipeViewAdapter.setData(noticeBeans); - broadcastManager = BroadcastManager.getInstance(context); - broadcastManager.addAction(Constant.NOTICE_MSG, new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - if (action != null) { - if (Constant.NOTICE_MSG.equals(action)) { - String data = intent.getStringExtra("data"); - assert data != null; - NoticeBean noticeBean = gson.fromJson(data, NoticeBean.class); - noticeBeans.add(noticeBean); - //更新数据 - swipeViewAdapter.setData(noticeBeans); - } - } - } - }); + weakReferenceHandler = new WeakReferenceHandler(this); } @Override @@ -134,11 +122,31 @@ }); } - @Override - public void onDestroyView() { - super.onDestroyView(); - if (broadcastManager != null) { - broadcastManager.destroy(Constant.NOTICE_MSG); + /** + * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveMessageData(Context, GTTransmitMessage)}调用 + */ + public static void sendMessage(Message msg) { + weakReferenceHandler.sendMessage(msg); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(NoticePageFragment fragment) { + reference = new WeakReference<>(fragment); + } + + @Override + public void handleMessage(Message msg) { + NoticePageFragment noticePageFragment = reference.get(); + List noticeBeans = noticePageFragment.noticeBeans; + if (msg.what == Constant.PUSH_MESSAGE_DATA) { + NoticeBean noticeBean = (NoticeBean) msg.obj; + Log.d(TAG, "收到推送消息,更新列表: " + noticeBean.getCaseId()); + noticeBeans.add(0, noticeBean);//新消息永远放到第一个 + //更新数据 + noticePageFragment.swipeViewAdapter.setData(noticeBeans); + } } } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java index c29046a..8a2376a 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java @@ -19,6 +19,8 @@ import com.casic.dcms.mvp.view.IPhoneBookView; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import java.util.ArrayList; import java.util.List; @@ -105,7 +107,8 @@ deptTreeView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() { @Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { - callPhone(deptAndPersons.get(groupPosition).get(childPosition).getPersonPhone()); + PersonBean personBean = deptAndPersons.get(groupPosition).get(childPosition); + callPhone(personBean.getPersonName(), personBean.getPersonPhone()); return true; } }); @@ -115,15 +118,27 @@ /** * 直接呼叫电话 */ - private void callPhone(String personPhone) { + private void callPhone(String personName, String personPhone) { if (TextUtils.isEmpty(personPhone)) { ToastHelper.showToast("手机号为空,无法拨号", ToastHelper.ERROR); return; } - Intent intent = new Intent(); - intent.setAction(Intent.ACTION_CALL); - intent.setData(Uri.parse("tel:" + personPhone)); - startActivity(intent); + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("提示") + .setMessage("是否确定拨打[" + personName + "]的电话?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + Intent intent = new Intent(); + intent.setAction(Intent.ACTION_CALL); + intent.setData(Uri.parse("tel:" + personPhone)); + startActivity(intent); + } + }) + .create().show(); } @Override diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index f67e68b..74442db 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -31,6 +31,7 @@ Color.rgb(120, 104, 230)}; public static final String[] PAGE_TITLES = {"表格", "饼状图"}; + public static final String IP_KEY = "BASE_IP"; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; public static final int PERMISSIONS_CODE = 999; @@ -42,17 +43,16 @@ public static final int CASE_HANDLE = 0; public static final int CASE_VERIFY = 1; public static final int CASE_CHECK = 2; + public static final int PUSH_REGISTER = 11; + public static final int PUSH_MESSAGE_DATA = 12;//透传消息,包含消息的详细数据 + public static final int PUSH_CREATE_NOTIFICATION = 13; + public static final int LOGIN_OUT = 14; public static final double DEFAULT_LNG = 116.06639658728571; public static final double DEFAULT_LAT = 27.759547805536418; public static final double DELTA_LNG_10 = 0.00002536; // 10米范围经度值偏移量(大约) public static final double DELTA_LAT_10 = 0.00002256;// 10米范围纬度值偏移量(大约) - public static final String IP_KEY = "BASE_IP"; - public static final String LOGIN_OUT_ACTION = "login_out"; - public static final String NOTICE_MSG = "receive_ush"; - public static final String REGISTER_PUSH = "register_push"; - public static final String BASE_MAP_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt/MapServer";//崇仁城管地图底图 public static final String COMPONENT_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crbj/FeatureServer";//崇仁部件图层 } diff --git a/app/src/main/java/com/casic/dcms/utils/NotificationHelper.java b/app/src/main/java/com/casic/dcms/utils/NotificationHelper.java new file mode 100644 index 0000000..59fd47a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/NotificationHelper.java @@ -0,0 +1,130 @@ +package com.casic.dcms.utils; + +import android.annotation.SuppressLint; +import android.app.Notification; +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.Build; + +import com.casic.dcms.R; + +public class NotificationHelper { + private Context mContext; + @SuppressLint("StaticFieldLeak") + private static NotificationHelper notificationHelper; + private NotificationManager notificationManager; + + private NotificationHelper(Context context) { + this.mContext = context; + notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); + } + + /** + * 双重锁单例 + */ + public static NotificationHelper getInstance(Context context) { + if (notificationHelper == null) { + synchronized (NotificationHelper.class) { + if (notificationHelper == null) { + notificationHelper = new NotificationHelper(context); + } + } + } + return notificationHelper; + } + + private Notification.Builder createBuilder() { + Notification.Builder builder; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + String name = mContext.getResources().getString(R.string.app_name); + //创建渠道 + String id = name + "_DefaultChannel"; + NotificationChannel mChannel = new NotificationChannel(id, name, NotificationManager.IMPORTANCE_DEFAULT); + notificationManager.createNotificationChannel(mChannel); + builder = new Notification.Builder(mContext, id); + } else { + builder = new Notification.Builder(mContext); + } + return builder; + } + + /** + * 创建常驻状态栏通知 + * + * @param title 通知标题 + * @param message 通知内容 + */ + public Notification createKeepAlive(String title, String message) { + Notification.Builder builder = createBuilder(); + builder.setContentTitle(title) + .setContentText(message) + .setWhen(System.currentTimeMillis()) + .setSmallIcon(R.mipmap.app_logo); + Notification notification = builder.build(); + notification.flags = Notification.FLAG_NO_CLEAR; + return notification; + } + + /** + * 创建无动作的默认通知 + * + * @param title 通知标题 + * @param message 通知内容 + */ + public Notification createDefault(String title, String message) { + Notification.Builder builder = createBuilder(); + Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.normal); + builder.setContentTitle(title) + .setContentText(message) + .setWhen(System.currentTimeMillis()) + .setSmallIcon(R.drawable.normal_small) + .setLargeIcon(bitmap) + .setAutoCancel(true); + Notification notification = builder.build(); + notification.flags = Notification.FLAG_AUTO_CANCEL; + return notification; + } + + /** + * 创建有动作的默认通知 + * + * @param title 通知标题 + * @param message 通知内容 + * @param targetClass 点击通知之后跳转的页面 + */ + public Notification createDefault(String title, String message, String caseId, Class targetClass) { + Notification.Builder builder = createBuilder(); + Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.normal); + Intent intent = new Intent(mContext, targetClass); + intent.putExtra("id", caseId); + builder.setContentTitle(title) + .setContentText(message) + .setWhen(System.currentTimeMillis()) + .setSmallIcon(R.drawable.normal_small) + .setLargeIcon(bitmap) + .setContentIntent(PendingIntent.getActivity(mContext, 0, intent, 0)) + .setAutoCancel(true); + Notification notification = builder.build(); + notification.flags = Notification.FLAG_AUTO_CANCEL; + return notification; + } + + //显示通知 + public void push(int notificationId, Notification notification) { + if (notificationManager != null) { + notificationManager.notify(notificationId, notification); + } + } + + //取消通知 + public void cancel(int notificationId) { + if (notificationManager != null) { + notificationManager.cancel(notificationId); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 3947941..8767b1b 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -13,6 +13,14 @@ private static final String TAG = "StringHelper"; + public static void saveUserAccount(String account) { + SaveKeyValues.putValue("userAccount", account); + } + + public static String getUserAccount() { + return (String) SaveKeyValues.getValue("userAccount", ""); + } + public static void saveUserName(String name) { SaveKeyValues.putValue("userName", name); } diff --git a/app/src/main/java/com/casic/dcms/widgets/BigPictureDialog.java b/app/src/main/java/com/casic/dcms/widgets/BigPictureDialog.java index 3e6ed4e..f81e17e 100644 --- a/app/src/main/java/com/casic/dcms/widgets/BigPictureDialog.java +++ b/app/src/main/java/com/casic/dcms/widgets/BigPictureDialog.java @@ -8,6 +8,8 @@ import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; +import android.widget.ImageView; +import android.widget.LinearLayout; import android.widget.TextView; import androidx.appcompat.app.AlertDialog; @@ -31,6 +33,7 @@ private TextView pageNumberView; private ViewPager imagePagerView; private Window window; + private int maxWidth, maxHeight; private BigPictureDialog(Builder builder) { super(builder.mContext, R.style.CustomDialogStyle); @@ -49,6 +52,9 @@ initData(); window = getWindow(); + maxWidth = (int) (QMUIDisplayHelper.getScreenWidth(context) * 0.9); + maxHeight = (int) (QMUIDisplayHelper.getScreenHeight(context) * 0.8); + setCancelable(true); setCanceledOnTouchOutside(true); } @@ -57,8 +63,8 @@ public void onAttachedToWindow() { super.onAttachedToWindow(); WindowManager.LayoutParams layoutParams = window.getAttributes(); - layoutParams.width = (int) (QMUIDisplayHelper.getScreenWidth(context) * 0.9); - layoutParams.height = (int) (QMUIDisplayHelper.getScreenHeight(context) * 0.65); + layoutParams.width = maxWidth; + layoutParams.height = maxHeight; window.setAttributes(layoutParams); } @@ -105,6 +111,9 @@ View view = LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false); PhotoView photoView = view.findViewById(R.id.photoView); Glide.with(context).load(data.get(position)).into(photoView); + photoView.setScaleType(ImageView.ScaleType.FIT_XY); + LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(maxWidth, maxHeight); + photoView.setLayoutParams(layoutParams); container.addView(view); return view; } diff --git a/app/src/main/res/layout/dialog_big_picture.xml b/app/src/main/res/layout/dialog_big_picture.xml index dce0b9d..bffbb84 100644 --- a/app/src/main/res/layout/dialog_big_picture.xml +++ b/app/src/main/res/layout/dialog_big_picture.xml @@ -3,52 +3,35 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/cardViewLayout" android:layout_width="wrap_content" - android:layout_height="wrap_content" + android:layout_height="match_parent" app:cardCornerRadius="5dp"> - + android:layout_height="match_parent"> - + - - - - - - - - + android:layout_gravity="end|bottom" + android:layout_margin="@dimen/margin_10dp" + android:textColor="@color/white" + android:textSize="@dimen/textFontSize" /> + \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java index 61a8b1d..385ec1b 100644 --- a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -98,5 +98,4 @@ public void setOnItemClickListener(OnItemClickListener onItemClickListener) { this.clickListener = onItemClickListener; } - } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java index 1cfda9d..1dd316c 100644 --- a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -17,7 +17,7 @@ @Id(autoincrement = true) private Long id;//主键ID - private String userName;//用户名 + private String userAccount;//登录账户 private String caseId;//案卷id private String title;//案卷标题 private String content;//案卷简介 @@ -25,11 +25,11 @@ private String type;//推送类型 private String isRead;//0-已读;1-未读 - @Generated(hash = 2013153901) - public NoticeBean(Long id, String userName, String caseId, String title, + @Generated(hash = 1022814061) + public NoticeBean(Long id, String userAccount, String caseId, String title, String content, String pushDate, String type, String isRead) { this.id = id; - this.userName = userName; + this.userAccount = userAccount; this.caseId = caseId; this.title = title; this.content = content; @@ -50,12 +50,12 @@ this.id = id; } - public String getUserName() { - return this.userName; + public String getUserAccount() { + return this.userAccount; } - public void setUserName(String userName) { - this.userName = userName; + public void setUserAccount(String userAccount) { + this.userAccount = userAccount; } public String getCaseId() { diff --git a/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java b/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java index a733f25..10b4c77 100644 --- a/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java +++ b/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java @@ -25,7 +25,7 @@ */ public static class Properties { public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property UserName = new Property(1, String.class, "userName", false, "USER_NAME"); + public final static Property UserAccount = new Property(1, String.class, "userAccount", false, "USER_ACCOUNT"); public final static Property CaseId = new Property(2, String.class, "caseId", false, "CASE_ID"); public final static Property Title = new Property(3, String.class, "title", false, "TITLE"); public final static Property Content = new Property(4, String.class, "content", false, "CONTENT"); @@ -48,7 +48,7 @@ String constraint = ifNotExists? "IF NOT EXISTS ": ""; db.execSQL("CREATE TABLE " + constraint + "\"NOTICE_BEAN\" (" + // "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"USER_NAME\" TEXT," + // 1: userName + "\"USER_ACCOUNT\" TEXT," + // 1: userAccount "\"CASE_ID\" TEXT," + // 2: caseId "\"TITLE\" TEXT," + // 3: title "\"CONTENT\" TEXT," + // 4: content @@ -72,9 +72,9 @@ stmt.bindLong(1, id); } - String userName = entity.getUserName(); - if (userName != null) { - stmt.bindString(2, userName); + String userAccount = entity.getUserAccount(); + if (userAccount != null) { + stmt.bindString(2, userAccount); } String caseId = entity.getCaseId(); @@ -117,9 +117,9 @@ stmt.bindLong(1, id); } - String userName = entity.getUserName(); - if (userName != null) { - stmt.bindString(2, userName); + String userAccount = entity.getUserAccount(); + if (userAccount != null) { + stmt.bindString(2, userAccount); } String caseId = entity.getCaseId(); @@ -162,7 +162,7 @@ public NoticeBean readEntity(Cursor cursor, int offset) { NoticeBean entity = new NoticeBean( // cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // userName + cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // userAccount cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // caseId cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // title cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // content @@ -176,7 +176,7 @@ @Override public void readEntity(Cursor cursor, NoticeBean entity, int offset) { entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setUserName(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); + entity.setUserAccount(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); entity.setCaseId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); entity.setTitle(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); entity.setContent(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index fa17e1f..0030f57 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -2,6 +2,7 @@ import android.content.Context; import android.content.Intent; +import android.os.Message; import android.text.TextUtils; import android.util.Log; @@ -9,7 +10,8 @@ import com.casic.dcms.bean.NoticeBean; import com.casic.dcms.bean.PushResultBean; import com.casic.dcms.ui.CaseDetailActivity; -import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.ui.MainActivity; +import com.casic.dcms.ui.fragment.NoticePageFragment; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; @@ -36,7 +38,44 @@ // 处理透传消息 @Override public void onReceiveMessageData(Context context, GTTransmitMessage msg) { - // 透传消息的处理,详看 SDK demo + /** + * appid = DR9oeLL9va6aG3DYXy2w39 + * taskid = TEST_0515_d4689edeff9808959f10365895682f6f + * messageid = bd9c2465afd5464fb99368a579fd3fc8 + * pkg = com.casic.dcms + * cid = 9e85018b1972d664d9e86e9a6d03b4a7 + * playload = {"content":"您有一个工单超时,请快速处理1","data":{"id":"1392655327805825025"},"id":1393472265320001538,"title":"工单超时提醒","type":"NORMAL"} + * */ + Log.d(TAG, "onReceiveMessageData -> " + "\r\nplayload = " + new String(msg.getPayload())); + + Gson gson = new Gson(); + String messageContent = new String(msg.getPayload()); + PushResultBean resultBean = gson.fromJson(messageContent, new TypeToken() { + }.getType()); + + NoticeBean noticeBean = new NoticeBean(); + noticeBean.setUserAccount(StringHelper.getUserAccount()); + noticeBean.setCaseId(resultBean.getData().getId()); + noticeBean.setTitle(resultBean.getTitle()); + noticeBean.setContent(resultBean.getContent()); + noticeBean.setType(resultBean.getType()); + noticeBean.setPushDate(TimeOrDateUtil.timestampToDate(System.currentTimeMillis())); + noticeBean.setIsRead("1"); + + //存本地一份 + BaseApplication.getDaoSession().insert(noticeBean); + + //创建通知栏 + Message msgNotice = Message.obtain(); + msgNotice.what = Constant.PUSH_CREATE_NOTIFICATION; + msgNotice.obj = noticeBean; + MainActivity.sendMessage(msgNotice); + + //发送消息更新界面 + Message msgBean = Message.obtain(); + msgBean.what = Constant.PUSH_MESSAGE_DATA; + msgBean.obj = noticeBean; + NoticePageFragment.sendMessage(msgBean); } // 接收 cid @@ -45,7 +84,10 @@ Log.d(TAG, "onReceiveClientId -> " + "clientid = " + clientid); //通知MainActivity注册个推服务 if (!TextUtils.isEmpty(clientid)) { - BroadcastManager.getInstance(context).sendBroadcast(Constant.REGISTER_PUSH, clientid); + Message msg = Message.obtain(); + msg.what = Constant.PUSH_REGISTER; + msg.obj = clientid; + MainActivity.sendMessage(msg); } else { Log.d(TAG, "onReceiveClientId: ===>clientid = " + clientid); } @@ -66,34 +108,7 @@ // 通知到达,只有个推通道下发的通知会回调此方法 @Override public void onNotificationMessageArrived(Context context, GTNotificationMessage message) { - Log.d(TAG, "onNotificationMessageArrived: " + message.getContent()); - /** - * appid = DR9oeLL9va6aG3DYXy2w39 - * taskid = OSL-0514_xL4fPj7kqQ6tknVoQt3Mf6 - * messageid = b74187603fe34058a223949ead9f8dcf - * pkg = com.casic.dcms - * cid = cd1aec399b5504516102e399ecf7cda4 - * content = {"content":"您有一个工单超时,请快速处理","data":{"id":"1392655327805825025"},"id":1393131068164472834,"title":"工单超时提醒","type":"alarm"} - * title = 工单提醒 - * */ - Gson gson = new Gson(); - String messageContent = message.getContent(); - PushResultBean resultBean = gson.fromJson(messageContent, new TypeToken() { - }.getType()); - - NoticeBean noticeBean = new NoticeBean(); - noticeBean.setUserName(StringHelper.getUserName()); - noticeBean.setCaseId(resultBean.getData().getId()); - noticeBean.setTitle(resultBean.getTitle()); - noticeBean.setContent(resultBean.getContent()); - noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate(System.currentTimeMillis())); - noticeBean.setIsRead("1"); - - //存本地一份 - BaseApplication.getDaoSession().insert(noticeBean); - //发送消息更新界面 - BroadcastManager.getInstance(context).sendBroadcast(Constant.NOTICE_MSG, gson.toJson(noticeBean)); + Log.d(TAG, "onNotificationMessageArrived: 通知到达"); } // 通知点击,只有个推通道下发的通知会回调此方法 diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index 1d706ff..224f8d3 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -20,6 +20,7 @@ import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.RSAUtils; import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.InputDialog; import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; @@ -66,11 +67,11 @@ @Override public void initData() { - String userName = (String) SaveKeyValues.getValue("name", ""); - String userPassword = (String) SaveKeyValues.getValue("password", ""); - userNameView.setText(userName); + String userAccount = StringHelper.getUserAccount(); + String userPassword = (String) SaveKeyValues.getValue("userPassword", ""); + userNameView.setText(userAccount); userPasswordView.setText(userPassword); - if (!TextUtils.isEmpty(userName) && !TextUtils.isEmpty(userPassword)) { + if (!TextUtils.isEmpty(userAccount) && !TextUtils.isEmpty(userPassword)) { rememberPasswordView.setChecked(true); } else { rememberPasswordView.setChecked(false); @@ -85,7 +86,7 @@ }); loadingDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("登陆中,请稍后") + .setTipWord("登录中,请稍后") .create(); } @@ -153,14 +154,14 @@ AuthenticationHelper.savePublicKey(keyString); PublicKey publicKey = RSAUtils.keyStrToPublicKey(keyString); - String userName = userNameView.getText().toString(); + String account = userNameView.getText().toString(); String userPassword = userPasswordView.getText().toString(); if (autoLoginView.isChecked()) { SaveKeyValues.putValue("autoLogin", true); } else { SaveKeyValues.putValue("autoLogin", false); } - if (TextUtils.isEmpty(userName)) { + if (TextUtils.isEmpty(account)) { ToastHelper.showToast("用户名不能为空", ToastHelper.WARING); return; } @@ -169,12 +170,12 @@ return; } if (rememberPasswordView.isChecked()) { - SaveKeyValues.putValue("name", userName); - SaveKeyValues.putValue("password", userPassword); + StringHelper.saveUserAccount(account); + SaveKeyValues.putValue("userPassword", userPassword); } String dataByPublicKey = RSAUtils.encryptDataByPublicKey(userPassword.getBytes(), publicKey); //登录并获取Token,POST请求 - loginPresenter.onReadyRetrofitRequest(userName, dataByPublicKey); + loginPresenter.onReadyRetrofitRequest(account, dataByPublicKey); } } diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index cba9a54..4c223cd 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -1,9 +1,11 @@ package com.casic.dcms.ui; -import android.content.BroadcastReceiver; +import android.app.Notification; import android.content.Context; import android.content.Intent; import android.location.Location; +import android.os.Handler; +import android.os.Message; import android.text.TextUtils; import android.util.Log; import android.view.MenuItem; @@ -18,6 +20,7 @@ import com.casic.dcms.adapter.MainPageAdapter; import com.casic.dcms.base.DoubleClickExitActivity; import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.bean.NoticeBean; import com.casic.dcms.mvp.presenter.PushRegisterPresenterImpl; import com.casic.dcms.mvp.presenter.UploadPositionPresenterImpl; import com.casic.dcms.mvp.view.IPushRegisterView; @@ -26,17 +29,19 @@ import com.casic.dcms.ui.fragment.MinePageFragment; import com.casic.dcms.ui.fragment.NoticePageFragment; import com.casic.dcms.ui.fragment.PhonePageFragment; -import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.NotificationHelper; import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.callback.ILocationListener; import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; -import com.google.gson.Gson; import com.gyf.immersionbar.ImmersionBar; +import com.igexin.sdk.message.GTTransmitMessage; +import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; @@ -51,11 +56,12 @@ NoScrollViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; + private MenuItem menuItem; private List pageList; - private BroadcastManager broadcastManager; private UploadPositionPresenterImpl uploadPositionPresenter; private PushRegisterPresenterImpl registerPresenter; + private static WeakReferenceHandler weakReferenceHandler; @Override public int initLayoutView() { @@ -80,29 +86,7 @@ pageList.add(new PhonePageFragment()); pageList.add(new NoticePageFragment()); pageList.add(new MinePageFragment()); - broadcastManager = BroadcastManager.getInstance(this); - broadcastManager.addAction(new String[]{Constant.LOGIN_OUT_ACTION, Constant.REGISTER_PUSH}, - new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - if (action != null) { - switch (action) { - case Constant.LOGIN_OUT_ACTION: - String loginOut = intent.getStringExtra("data"); - assert loginOut != null; - if (loginOut.equals("请求成功")) { - finish(); - } - break; - case Constant.REGISTER_PUSH: - String clientid = intent.getStringExtra("data"); - registerPresenter.onReadyRetrofitRequest(clientid); - break; - } - } - } - }); + weakReferenceHandler = new WeakReferenceHandler(this); String imei = OtherUtils.obtainSimCardSerialNumber(this); if (TextUtils.isEmpty(imei)) { return; @@ -175,15 +159,59 @@ mainViewPager.setAdapter(mainPageAdapter); } - @Override - protected void onDestroy() { - super.onDestroy(); - broadcastManager.destroy(Constant.LOGIN_OUT_ACTION, Constant.REGISTER_PUSH); - if (uploadPositionPresenter != null) { - uploadPositionPresenter.disposeRetrofitRequest(); + /** + * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveClientId(Context, String)}页面调用 + * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveMessageData(Context, GTTransmitMessage)}页面调用 + */ + public static void sendMessage(Message msg) { + weakReferenceHandler.sendMessage(msg); + } + + /** + * 供{@link MinePageFragment#obtainLoginOutResult(ActionResultBean)}页面调用 + */ + public static void sendEmptyMessage(int what) { + weakReferenceHandler.sendEmptyMessage(what); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(MainActivity activity) { + reference = new WeakReference<>(activity); } - if (registerPresenter != null) { - registerPresenter.disposeRetrofitRequest(); + + @Override + public void handleMessage(Message msg) { + MainActivity mainActivity = reference.get(); + switch (msg.what) { + case Constant.PUSH_REGISTER: + String clientId = (String) msg.obj; + Log.d(TAG, "注册个推Client: " + clientId); + reference.get().registerPresenter.onReadyRetrofitRequest(clientId); + break; + case Constant.PUSH_CREATE_NOTIFICATION: + Log.d(TAG, "创建通知栏"); + NoticeBean noticeBean = (NoticeBean) msg.obj; + if (null == noticeBean) { + return; + } + NotificationHelper notificationHelper = NotificationHelper.getInstance(mainActivity); + Notification notification = notificationHelper.createDefault( + noticeBean.getTitle(), + noticeBean.getContent(), + noticeBean.getCaseId(), + CaseDetailActivity.class); + notificationHelper.push(1, notification); + break; + case Constant.LOGIN_OUT: + Log.d(TAG, "退出登录"); + //回到登录页 + SaveKeyValues.putValue("autoLogin", false); + mainActivity.startActivity(new Intent(mainActivity, LoginActivity.class)); + mainActivity.finish(); + break; + } } } @@ -194,6 +222,17 @@ @Override public void obtainRegisterResult(ActionResultBean resultBean) { - Log.d(TAG, "obtainRegisterResult: " + new Gson().toJson(resultBean)); +// Log.d(TAG, "obtainRegisterResult: " + new Gson().toJson(resultBean)); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (uploadPositionPresenter != null) { + uploadPositionPresenter.disposeRetrofitRequest(); + } + if (registerPresenter != null) { + registerPresenter.disposeRetrofitRequest(); + } } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index c70520f..ddb25aa 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -17,8 +17,8 @@ import com.casic.dcms.mvp.view.IUpdateVersionView; import com.casic.dcms.ui.ChangePasswordActivity; import com.casic.dcms.ui.HelpfulActivity; +import com.casic.dcms.ui.MainActivity; import com.casic.dcms.ui.UserInfoActivity; -import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.ToastHelper; @@ -117,10 +117,7 @@ @Override public void obtainLoginOutResult(ActionResultBean resultBean) { -// Log.d(TAG, "obtainLoginOutResult: " + new Gson().toJson(resultBean)); - if (resultBean.isSuccess()) { - BroadcastManager.getInstance(context).sendBroadcast(Constant.LOGIN_OUT_ACTION, resultBean.getMessage()); - } + MainActivity.sendEmptyMessage(Constant.LOGIN_OUT); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/NoticePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/NoticePageFragment.java index 708f2a8..18abe0c 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/NoticePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/NoticePageFragment.java @@ -1,9 +1,11 @@ package com.casic.dcms.ui.fragment; -import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; +import android.os.Handler; +import android.os.Message; import android.text.TextUtils; +import android.util.Log; import android.view.ViewGroup; import androidx.annotation.NonNull; @@ -19,13 +21,13 @@ import com.casic.dcms.greendao.DaoSession; import com.casic.dcms.greendao.NoticeBeanDao; import com.casic.dcms.ui.CaseDetailActivity; -import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.StringHelper; -import com.google.gson.Gson; +import com.igexin.sdk.message.GTTransmitMessage; import com.qmuiteam.qmui.recyclerView.QMUIRVItemSwipeAction; import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; @@ -33,15 +35,15 @@ public class NoticePageFragment extends BaseFragment { + private static final String TAG = "NoticePageFragment"; @BindView(R.id.swipeRecyclerView) RecyclerView swipeRecyclerView; private Context context; private List noticeBeans = new ArrayList<>(); private SwipeViewAdapter swipeViewAdapter; - private BroadcastManager broadcastManager; - private Gson gson; private DaoSession daoSession; + private static WeakReferenceHandler weakReferenceHandler; @Override protected int initLayoutView() { @@ -55,34 +57,20 @@ @Override protected void initData() { - gson = new Gson(); daoSession = BaseApplication.getDaoSession(); swipeViewAdapter = new SwipeViewAdapter(context); - //根据userName加载历史数据 - String userName = StringHelper.getUserName(); - if (TextUtils.isEmpty(userName)) { + //根据loginName加载历史数据 + String account = StringHelper.getUserAccount(); + if (TextUtils.isEmpty(account)) { return; } - noticeBeans = daoSession.queryBuilder(NoticeBean.class).where(NoticeBeanDao.Properties.UserName.eq(userName)).list(); + noticeBeans = daoSession.queryBuilder(NoticeBean.class) + .where(NoticeBeanDao.Properties.UserAccount.eq(account)) + .orderDesc(NoticeBeanDao.Properties.PushDate)//按时间顺序最新顺序排序 + .list(); swipeViewAdapter.setData(noticeBeans); - broadcastManager = BroadcastManager.getInstance(context); - broadcastManager.addAction(Constant.NOTICE_MSG, new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - if (action != null) { - if (Constant.NOTICE_MSG.equals(action)) { - String data = intent.getStringExtra("data"); - assert data != null; - NoticeBean noticeBean = gson.fromJson(data, NoticeBean.class); - noticeBeans.add(noticeBean); - //更新数据 - swipeViewAdapter.setData(noticeBeans); - } - } - } - }); + weakReferenceHandler = new WeakReferenceHandler(this); } @Override @@ -134,11 +122,31 @@ }); } - @Override - public void onDestroyView() { - super.onDestroyView(); - if (broadcastManager != null) { - broadcastManager.destroy(Constant.NOTICE_MSG); + /** + * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveMessageData(Context, GTTransmitMessage)}调用 + */ + public static void sendMessage(Message msg) { + weakReferenceHandler.sendMessage(msg); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(NoticePageFragment fragment) { + reference = new WeakReference<>(fragment); + } + + @Override + public void handleMessage(Message msg) { + NoticePageFragment noticePageFragment = reference.get(); + List noticeBeans = noticePageFragment.noticeBeans; + if (msg.what == Constant.PUSH_MESSAGE_DATA) { + NoticeBean noticeBean = (NoticeBean) msg.obj; + Log.d(TAG, "收到推送消息,更新列表: " + noticeBean.getCaseId()); + noticeBeans.add(0, noticeBean);//新消息永远放到第一个 + //更新数据 + noticePageFragment.swipeViewAdapter.setData(noticeBeans); + } } } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java index c29046a..8a2376a 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java @@ -19,6 +19,8 @@ import com.casic.dcms.mvp.view.IPhoneBookView; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import java.util.ArrayList; import java.util.List; @@ -105,7 +107,8 @@ deptTreeView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() { @Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { - callPhone(deptAndPersons.get(groupPosition).get(childPosition).getPersonPhone()); + PersonBean personBean = deptAndPersons.get(groupPosition).get(childPosition); + callPhone(personBean.getPersonName(), personBean.getPersonPhone()); return true; } }); @@ -115,15 +118,27 @@ /** * 直接呼叫电话 */ - private void callPhone(String personPhone) { + private void callPhone(String personName, String personPhone) { if (TextUtils.isEmpty(personPhone)) { ToastHelper.showToast("手机号为空,无法拨号", ToastHelper.ERROR); return; } - Intent intent = new Intent(); - intent.setAction(Intent.ACTION_CALL); - intent.setData(Uri.parse("tel:" + personPhone)); - startActivity(intent); + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("提示") + .setMessage("是否确定拨打[" + personName + "]的电话?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + Intent intent = new Intent(); + intent.setAction(Intent.ACTION_CALL); + intent.setData(Uri.parse("tel:" + personPhone)); + startActivity(intent); + } + }) + .create().show(); } @Override diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index f67e68b..74442db 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -31,6 +31,7 @@ Color.rgb(120, 104, 230)}; public static final String[] PAGE_TITLES = {"表格", "饼状图"}; + public static final String IP_KEY = "BASE_IP"; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; public static final int PERMISSIONS_CODE = 999; @@ -42,17 +43,16 @@ public static final int CASE_HANDLE = 0; public static final int CASE_VERIFY = 1; public static final int CASE_CHECK = 2; + public static final int PUSH_REGISTER = 11; + public static final int PUSH_MESSAGE_DATA = 12;//透传消息,包含消息的详细数据 + public static final int PUSH_CREATE_NOTIFICATION = 13; + public static final int LOGIN_OUT = 14; public static final double DEFAULT_LNG = 116.06639658728571; public static final double DEFAULT_LAT = 27.759547805536418; public static final double DELTA_LNG_10 = 0.00002536; // 10米范围经度值偏移量(大约) public static final double DELTA_LAT_10 = 0.00002256;// 10米范围纬度值偏移量(大约) - public static final String IP_KEY = "BASE_IP"; - public static final String LOGIN_OUT_ACTION = "login_out"; - public static final String NOTICE_MSG = "receive_ush"; - public static final String REGISTER_PUSH = "register_push"; - public static final String BASE_MAP_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt/MapServer";//崇仁城管地图底图 public static final String COMPONENT_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crbj/FeatureServer";//崇仁部件图层 } diff --git a/app/src/main/java/com/casic/dcms/utils/NotificationHelper.java b/app/src/main/java/com/casic/dcms/utils/NotificationHelper.java new file mode 100644 index 0000000..59fd47a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/NotificationHelper.java @@ -0,0 +1,130 @@ +package com.casic.dcms.utils; + +import android.annotation.SuppressLint; +import android.app.Notification; +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.Build; + +import com.casic.dcms.R; + +public class NotificationHelper { + private Context mContext; + @SuppressLint("StaticFieldLeak") + private static NotificationHelper notificationHelper; + private NotificationManager notificationManager; + + private NotificationHelper(Context context) { + this.mContext = context; + notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); + } + + /** + * 双重锁单例 + */ + public static NotificationHelper getInstance(Context context) { + if (notificationHelper == null) { + synchronized (NotificationHelper.class) { + if (notificationHelper == null) { + notificationHelper = new NotificationHelper(context); + } + } + } + return notificationHelper; + } + + private Notification.Builder createBuilder() { + Notification.Builder builder; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + String name = mContext.getResources().getString(R.string.app_name); + //创建渠道 + String id = name + "_DefaultChannel"; + NotificationChannel mChannel = new NotificationChannel(id, name, NotificationManager.IMPORTANCE_DEFAULT); + notificationManager.createNotificationChannel(mChannel); + builder = new Notification.Builder(mContext, id); + } else { + builder = new Notification.Builder(mContext); + } + return builder; + } + + /** + * 创建常驻状态栏通知 + * + * @param title 通知标题 + * @param message 通知内容 + */ + public Notification createKeepAlive(String title, String message) { + Notification.Builder builder = createBuilder(); + builder.setContentTitle(title) + .setContentText(message) + .setWhen(System.currentTimeMillis()) + .setSmallIcon(R.mipmap.app_logo); + Notification notification = builder.build(); + notification.flags = Notification.FLAG_NO_CLEAR; + return notification; + } + + /** + * 创建无动作的默认通知 + * + * @param title 通知标题 + * @param message 通知内容 + */ + public Notification createDefault(String title, String message) { + Notification.Builder builder = createBuilder(); + Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.normal); + builder.setContentTitle(title) + .setContentText(message) + .setWhen(System.currentTimeMillis()) + .setSmallIcon(R.drawable.normal_small) + .setLargeIcon(bitmap) + .setAutoCancel(true); + Notification notification = builder.build(); + notification.flags = Notification.FLAG_AUTO_CANCEL; + return notification; + } + + /** + * 创建有动作的默认通知 + * + * @param title 通知标题 + * @param message 通知内容 + * @param targetClass 点击通知之后跳转的页面 + */ + public Notification createDefault(String title, String message, String caseId, Class targetClass) { + Notification.Builder builder = createBuilder(); + Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.normal); + Intent intent = new Intent(mContext, targetClass); + intent.putExtra("id", caseId); + builder.setContentTitle(title) + .setContentText(message) + .setWhen(System.currentTimeMillis()) + .setSmallIcon(R.drawable.normal_small) + .setLargeIcon(bitmap) + .setContentIntent(PendingIntent.getActivity(mContext, 0, intent, 0)) + .setAutoCancel(true); + Notification notification = builder.build(); + notification.flags = Notification.FLAG_AUTO_CANCEL; + return notification; + } + + //显示通知 + public void push(int notificationId, Notification notification) { + if (notificationManager != null) { + notificationManager.notify(notificationId, notification); + } + } + + //取消通知 + public void cancel(int notificationId) { + if (notificationManager != null) { + notificationManager.cancel(notificationId); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 3947941..8767b1b 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -13,6 +13,14 @@ private static final String TAG = "StringHelper"; + public static void saveUserAccount(String account) { + SaveKeyValues.putValue("userAccount", account); + } + + public static String getUserAccount() { + return (String) SaveKeyValues.getValue("userAccount", ""); + } + public static void saveUserName(String name) { SaveKeyValues.putValue("userName", name); } diff --git a/app/src/main/java/com/casic/dcms/widgets/BigPictureDialog.java b/app/src/main/java/com/casic/dcms/widgets/BigPictureDialog.java index 3e6ed4e..f81e17e 100644 --- a/app/src/main/java/com/casic/dcms/widgets/BigPictureDialog.java +++ b/app/src/main/java/com/casic/dcms/widgets/BigPictureDialog.java @@ -8,6 +8,8 @@ import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; +import android.widget.ImageView; +import android.widget.LinearLayout; import android.widget.TextView; import androidx.appcompat.app.AlertDialog; @@ -31,6 +33,7 @@ private TextView pageNumberView; private ViewPager imagePagerView; private Window window; + private int maxWidth, maxHeight; private BigPictureDialog(Builder builder) { super(builder.mContext, R.style.CustomDialogStyle); @@ -49,6 +52,9 @@ initData(); window = getWindow(); + maxWidth = (int) (QMUIDisplayHelper.getScreenWidth(context) * 0.9); + maxHeight = (int) (QMUIDisplayHelper.getScreenHeight(context) * 0.8); + setCancelable(true); setCanceledOnTouchOutside(true); } @@ -57,8 +63,8 @@ public void onAttachedToWindow() { super.onAttachedToWindow(); WindowManager.LayoutParams layoutParams = window.getAttributes(); - layoutParams.width = (int) (QMUIDisplayHelper.getScreenWidth(context) * 0.9); - layoutParams.height = (int) (QMUIDisplayHelper.getScreenHeight(context) * 0.65); + layoutParams.width = maxWidth; + layoutParams.height = maxHeight; window.setAttributes(layoutParams); } @@ -105,6 +111,9 @@ View view = LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false); PhotoView photoView = view.findViewById(R.id.photoView); Glide.with(context).load(data.get(position)).into(photoView); + photoView.setScaleType(ImageView.ScaleType.FIT_XY); + LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(maxWidth, maxHeight); + photoView.setLayoutParams(layoutParams); container.addView(view); return view; } diff --git a/app/src/main/res/layout/dialog_big_picture.xml b/app/src/main/res/layout/dialog_big_picture.xml index dce0b9d..bffbb84 100644 --- a/app/src/main/res/layout/dialog_big_picture.xml +++ b/app/src/main/res/layout/dialog_big_picture.xml @@ -3,52 +3,35 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/cardViewLayout" android:layout_width="wrap_content" - android:layout_height="wrap_content" + android:layout_height="match_parent" app:cardCornerRadius="5dp"> - + android:layout_height="match_parent"> - + - - - - - - - - + android:layout_gravity="end|bottom" + android:layout_margin="@dimen/margin_10dp" + android:textColor="@color/white" + android:textSize="@dimen/textFontSize" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_read.xml b/app/src/main/res/layout/fragment_read.xml deleted file mode 100644 index c9edfbd..0000000 --- a/app/src/main/res/layout/fragment_read.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java index 61a8b1d..385ec1b 100644 --- a/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/SwipeViewAdapter.java @@ -98,5 +98,4 @@ public void setOnItemClickListener(OnItemClickListener onItemClickListener) { this.clickListener = onItemClickListener; } - } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java index 1cfda9d..1dd316c 100644 --- a/app/src/main/java/com/casic/dcms/bean/NoticeBean.java +++ b/app/src/main/java/com/casic/dcms/bean/NoticeBean.java @@ -17,7 +17,7 @@ @Id(autoincrement = true) private Long id;//主键ID - private String userName;//用户名 + private String userAccount;//登录账户 private String caseId;//案卷id private String title;//案卷标题 private String content;//案卷简介 @@ -25,11 +25,11 @@ private String type;//推送类型 private String isRead;//0-已读;1-未读 - @Generated(hash = 2013153901) - public NoticeBean(Long id, String userName, String caseId, String title, + @Generated(hash = 1022814061) + public NoticeBean(Long id, String userAccount, String caseId, String title, String content, String pushDate, String type, String isRead) { this.id = id; - this.userName = userName; + this.userAccount = userAccount; this.caseId = caseId; this.title = title; this.content = content; @@ -50,12 +50,12 @@ this.id = id; } - public String getUserName() { - return this.userName; + public String getUserAccount() { + return this.userAccount; } - public void setUserName(String userName) { - this.userName = userName; + public void setUserAccount(String userAccount) { + this.userAccount = userAccount; } public String getCaseId() { diff --git a/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java b/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java index a733f25..10b4c77 100644 --- a/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java +++ b/app/src/main/java/com/casic/dcms/greendao/NoticeBeanDao.java @@ -25,7 +25,7 @@ */ public static class Properties { public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property UserName = new Property(1, String.class, "userName", false, "USER_NAME"); + public final static Property UserAccount = new Property(1, String.class, "userAccount", false, "USER_ACCOUNT"); public final static Property CaseId = new Property(2, String.class, "caseId", false, "CASE_ID"); public final static Property Title = new Property(3, String.class, "title", false, "TITLE"); public final static Property Content = new Property(4, String.class, "content", false, "CONTENT"); @@ -48,7 +48,7 @@ String constraint = ifNotExists? "IF NOT EXISTS ": ""; db.execSQL("CREATE TABLE " + constraint + "\"NOTICE_BEAN\" (" + // "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"USER_NAME\" TEXT," + // 1: userName + "\"USER_ACCOUNT\" TEXT," + // 1: userAccount "\"CASE_ID\" TEXT," + // 2: caseId "\"TITLE\" TEXT," + // 3: title "\"CONTENT\" TEXT," + // 4: content @@ -72,9 +72,9 @@ stmt.bindLong(1, id); } - String userName = entity.getUserName(); - if (userName != null) { - stmt.bindString(2, userName); + String userAccount = entity.getUserAccount(); + if (userAccount != null) { + stmt.bindString(2, userAccount); } String caseId = entity.getCaseId(); @@ -117,9 +117,9 @@ stmt.bindLong(1, id); } - String userName = entity.getUserName(); - if (userName != null) { - stmt.bindString(2, userName); + String userAccount = entity.getUserAccount(); + if (userAccount != null) { + stmt.bindString(2, userAccount); } String caseId = entity.getCaseId(); @@ -162,7 +162,7 @@ public NoticeBean readEntity(Cursor cursor, int offset) { NoticeBean entity = new NoticeBean( // cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // userName + cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // userAccount cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // caseId cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // title cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // content @@ -176,7 +176,7 @@ @Override public void readEntity(Cursor cursor, NoticeBean entity, int offset) { entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setUserName(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); + entity.setUserAccount(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); entity.setCaseId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); entity.setTitle(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); entity.setContent(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index fa17e1f..0030f57 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -2,6 +2,7 @@ import android.content.Context; import android.content.Intent; +import android.os.Message; import android.text.TextUtils; import android.util.Log; @@ -9,7 +10,8 @@ import com.casic.dcms.bean.NoticeBean; import com.casic.dcms.bean.PushResultBean; import com.casic.dcms.ui.CaseDetailActivity; -import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.ui.MainActivity; +import com.casic.dcms.ui.fragment.NoticePageFragment; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; @@ -36,7 +38,44 @@ // 处理透传消息 @Override public void onReceiveMessageData(Context context, GTTransmitMessage msg) { - // 透传消息的处理,详看 SDK demo + /** + * appid = DR9oeLL9va6aG3DYXy2w39 + * taskid = TEST_0515_d4689edeff9808959f10365895682f6f + * messageid = bd9c2465afd5464fb99368a579fd3fc8 + * pkg = com.casic.dcms + * cid = 9e85018b1972d664d9e86e9a6d03b4a7 + * playload = {"content":"您有一个工单超时,请快速处理1","data":{"id":"1392655327805825025"},"id":1393472265320001538,"title":"工单超时提醒","type":"NORMAL"} + * */ + Log.d(TAG, "onReceiveMessageData -> " + "\r\nplayload = " + new String(msg.getPayload())); + + Gson gson = new Gson(); + String messageContent = new String(msg.getPayload()); + PushResultBean resultBean = gson.fromJson(messageContent, new TypeToken() { + }.getType()); + + NoticeBean noticeBean = new NoticeBean(); + noticeBean.setUserAccount(StringHelper.getUserAccount()); + noticeBean.setCaseId(resultBean.getData().getId()); + noticeBean.setTitle(resultBean.getTitle()); + noticeBean.setContent(resultBean.getContent()); + noticeBean.setType(resultBean.getType()); + noticeBean.setPushDate(TimeOrDateUtil.timestampToDate(System.currentTimeMillis())); + noticeBean.setIsRead("1"); + + //存本地一份 + BaseApplication.getDaoSession().insert(noticeBean); + + //创建通知栏 + Message msgNotice = Message.obtain(); + msgNotice.what = Constant.PUSH_CREATE_NOTIFICATION; + msgNotice.obj = noticeBean; + MainActivity.sendMessage(msgNotice); + + //发送消息更新界面 + Message msgBean = Message.obtain(); + msgBean.what = Constant.PUSH_MESSAGE_DATA; + msgBean.obj = noticeBean; + NoticePageFragment.sendMessage(msgBean); } // 接收 cid @@ -45,7 +84,10 @@ Log.d(TAG, "onReceiveClientId -> " + "clientid = " + clientid); //通知MainActivity注册个推服务 if (!TextUtils.isEmpty(clientid)) { - BroadcastManager.getInstance(context).sendBroadcast(Constant.REGISTER_PUSH, clientid); + Message msg = Message.obtain(); + msg.what = Constant.PUSH_REGISTER; + msg.obj = clientid; + MainActivity.sendMessage(msg); } else { Log.d(TAG, "onReceiveClientId: ===>clientid = " + clientid); } @@ -66,34 +108,7 @@ // 通知到达,只有个推通道下发的通知会回调此方法 @Override public void onNotificationMessageArrived(Context context, GTNotificationMessage message) { - Log.d(TAG, "onNotificationMessageArrived: " + message.getContent()); - /** - * appid = DR9oeLL9va6aG3DYXy2w39 - * taskid = OSL-0514_xL4fPj7kqQ6tknVoQt3Mf6 - * messageid = b74187603fe34058a223949ead9f8dcf - * pkg = com.casic.dcms - * cid = cd1aec399b5504516102e399ecf7cda4 - * content = {"content":"您有一个工单超时,请快速处理","data":{"id":"1392655327805825025"},"id":1393131068164472834,"title":"工单超时提醒","type":"alarm"} - * title = 工单提醒 - * */ - Gson gson = new Gson(); - String messageContent = message.getContent(); - PushResultBean resultBean = gson.fromJson(messageContent, new TypeToken() { - }.getType()); - - NoticeBean noticeBean = new NoticeBean(); - noticeBean.setUserName(StringHelper.getUserName()); - noticeBean.setCaseId(resultBean.getData().getId()); - noticeBean.setTitle(resultBean.getTitle()); - noticeBean.setContent(resultBean.getContent()); - noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate(System.currentTimeMillis())); - noticeBean.setIsRead("1"); - - //存本地一份 - BaseApplication.getDaoSession().insert(noticeBean); - //发送消息更新界面 - BroadcastManager.getInstance(context).sendBroadcast(Constant.NOTICE_MSG, gson.toJson(noticeBean)); + Log.d(TAG, "onNotificationMessageArrived: 通知到达"); } // 通知点击,只有个推通道下发的通知会回调此方法 diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index 1d706ff..224f8d3 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -20,6 +20,7 @@ import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.RSAUtils; import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.InputDialog; import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; @@ -66,11 +67,11 @@ @Override public void initData() { - String userName = (String) SaveKeyValues.getValue("name", ""); - String userPassword = (String) SaveKeyValues.getValue("password", ""); - userNameView.setText(userName); + String userAccount = StringHelper.getUserAccount(); + String userPassword = (String) SaveKeyValues.getValue("userPassword", ""); + userNameView.setText(userAccount); userPasswordView.setText(userPassword); - if (!TextUtils.isEmpty(userName) && !TextUtils.isEmpty(userPassword)) { + if (!TextUtils.isEmpty(userAccount) && !TextUtils.isEmpty(userPassword)) { rememberPasswordView.setChecked(true); } else { rememberPasswordView.setChecked(false); @@ -85,7 +86,7 @@ }); loadingDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("登陆中,请稍后") + .setTipWord("登录中,请稍后") .create(); } @@ -153,14 +154,14 @@ AuthenticationHelper.savePublicKey(keyString); PublicKey publicKey = RSAUtils.keyStrToPublicKey(keyString); - String userName = userNameView.getText().toString(); + String account = userNameView.getText().toString(); String userPassword = userPasswordView.getText().toString(); if (autoLoginView.isChecked()) { SaveKeyValues.putValue("autoLogin", true); } else { SaveKeyValues.putValue("autoLogin", false); } - if (TextUtils.isEmpty(userName)) { + if (TextUtils.isEmpty(account)) { ToastHelper.showToast("用户名不能为空", ToastHelper.WARING); return; } @@ -169,12 +170,12 @@ return; } if (rememberPasswordView.isChecked()) { - SaveKeyValues.putValue("name", userName); - SaveKeyValues.putValue("password", userPassword); + StringHelper.saveUserAccount(account); + SaveKeyValues.putValue("userPassword", userPassword); } String dataByPublicKey = RSAUtils.encryptDataByPublicKey(userPassword.getBytes(), publicKey); //登录并获取Token,POST请求 - loginPresenter.onReadyRetrofitRequest(userName, dataByPublicKey); + loginPresenter.onReadyRetrofitRequest(account, dataByPublicKey); } } diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index cba9a54..4c223cd 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -1,9 +1,11 @@ package com.casic.dcms.ui; -import android.content.BroadcastReceiver; +import android.app.Notification; import android.content.Context; import android.content.Intent; import android.location.Location; +import android.os.Handler; +import android.os.Message; import android.text.TextUtils; import android.util.Log; import android.view.MenuItem; @@ -18,6 +20,7 @@ import com.casic.dcms.adapter.MainPageAdapter; import com.casic.dcms.base.DoubleClickExitActivity; import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.bean.NoticeBean; import com.casic.dcms.mvp.presenter.PushRegisterPresenterImpl; import com.casic.dcms.mvp.presenter.UploadPositionPresenterImpl; import com.casic.dcms.mvp.view.IPushRegisterView; @@ -26,17 +29,19 @@ import com.casic.dcms.ui.fragment.MinePageFragment; import com.casic.dcms.ui.fragment.NoticePageFragment; import com.casic.dcms.ui.fragment.PhonePageFragment; -import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.NotificationHelper; import com.casic.dcms.utils.OtherUtils; +import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.callback.ILocationListener; import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; -import com.google.gson.Gson; import com.gyf.immersionbar.ImmersionBar; +import com.igexin.sdk.message.GTTransmitMessage; +import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; @@ -51,11 +56,12 @@ NoScrollViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; + private MenuItem menuItem; private List pageList; - private BroadcastManager broadcastManager; private UploadPositionPresenterImpl uploadPositionPresenter; private PushRegisterPresenterImpl registerPresenter; + private static WeakReferenceHandler weakReferenceHandler; @Override public int initLayoutView() { @@ -80,29 +86,7 @@ pageList.add(new PhonePageFragment()); pageList.add(new NoticePageFragment()); pageList.add(new MinePageFragment()); - broadcastManager = BroadcastManager.getInstance(this); - broadcastManager.addAction(new String[]{Constant.LOGIN_OUT_ACTION, Constant.REGISTER_PUSH}, - new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - if (action != null) { - switch (action) { - case Constant.LOGIN_OUT_ACTION: - String loginOut = intent.getStringExtra("data"); - assert loginOut != null; - if (loginOut.equals("请求成功")) { - finish(); - } - break; - case Constant.REGISTER_PUSH: - String clientid = intent.getStringExtra("data"); - registerPresenter.onReadyRetrofitRequest(clientid); - break; - } - } - } - }); + weakReferenceHandler = new WeakReferenceHandler(this); String imei = OtherUtils.obtainSimCardSerialNumber(this); if (TextUtils.isEmpty(imei)) { return; @@ -175,15 +159,59 @@ mainViewPager.setAdapter(mainPageAdapter); } - @Override - protected void onDestroy() { - super.onDestroy(); - broadcastManager.destroy(Constant.LOGIN_OUT_ACTION, Constant.REGISTER_PUSH); - if (uploadPositionPresenter != null) { - uploadPositionPresenter.disposeRetrofitRequest(); + /** + * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveClientId(Context, String)}页面调用 + * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveMessageData(Context, GTTransmitMessage)}页面调用 + */ + public static void sendMessage(Message msg) { + weakReferenceHandler.sendMessage(msg); + } + + /** + * 供{@link MinePageFragment#obtainLoginOutResult(ActionResultBean)}页面调用 + */ + public static void sendEmptyMessage(int what) { + weakReferenceHandler.sendEmptyMessage(what); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(MainActivity activity) { + reference = new WeakReference<>(activity); } - if (registerPresenter != null) { - registerPresenter.disposeRetrofitRequest(); + + @Override + public void handleMessage(Message msg) { + MainActivity mainActivity = reference.get(); + switch (msg.what) { + case Constant.PUSH_REGISTER: + String clientId = (String) msg.obj; + Log.d(TAG, "注册个推Client: " + clientId); + reference.get().registerPresenter.onReadyRetrofitRequest(clientId); + break; + case Constant.PUSH_CREATE_NOTIFICATION: + Log.d(TAG, "创建通知栏"); + NoticeBean noticeBean = (NoticeBean) msg.obj; + if (null == noticeBean) { + return; + } + NotificationHelper notificationHelper = NotificationHelper.getInstance(mainActivity); + Notification notification = notificationHelper.createDefault( + noticeBean.getTitle(), + noticeBean.getContent(), + noticeBean.getCaseId(), + CaseDetailActivity.class); + notificationHelper.push(1, notification); + break; + case Constant.LOGIN_OUT: + Log.d(TAG, "退出登录"); + //回到登录页 + SaveKeyValues.putValue("autoLogin", false); + mainActivity.startActivity(new Intent(mainActivity, LoginActivity.class)); + mainActivity.finish(); + break; + } } } @@ -194,6 +222,17 @@ @Override public void obtainRegisterResult(ActionResultBean resultBean) { - Log.d(TAG, "obtainRegisterResult: " + new Gson().toJson(resultBean)); +// Log.d(TAG, "obtainRegisterResult: " + new Gson().toJson(resultBean)); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (uploadPositionPresenter != null) { + uploadPositionPresenter.disposeRetrofitRequest(); + } + if (registerPresenter != null) { + registerPresenter.disposeRetrofitRequest(); + } } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index c70520f..ddb25aa 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -17,8 +17,8 @@ import com.casic.dcms.mvp.view.IUpdateVersionView; import com.casic.dcms.ui.ChangePasswordActivity; import com.casic.dcms.ui.HelpfulActivity; +import com.casic.dcms.ui.MainActivity; import com.casic.dcms.ui.UserInfoActivity; -import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.ToastHelper; @@ -117,10 +117,7 @@ @Override public void obtainLoginOutResult(ActionResultBean resultBean) { -// Log.d(TAG, "obtainLoginOutResult: " + new Gson().toJson(resultBean)); - if (resultBean.isSuccess()) { - BroadcastManager.getInstance(context).sendBroadcast(Constant.LOGIN_OUT_ACTION, resultBean.getMessage()); - } + MainActivity.sendEmptyMessage(Constant.LOGIN_OUT); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/NoticePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/NoticePageFragment.java index 708f2a8..18abe0c 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/NoticePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/NoticePageFragment.java @@ -1,9 +1,11 @@ package com.casic.dcms.ui.fragment; -import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; +import android.os.Handler; +import android.os.Message; import android.text.TextUtils; +import android.util.Log; import android.view.ViewGroup; import androidx.annotation.NonNull; @@ -19,13 +21,13 @@ import com.casic.dcms.greendao.DaoSession; import com.casic.dcms.greendao.NoticeBeanDao; import com.casic.dcms.ui.CaseDetailActivity; -import com.casic.dcms.utils.BroadcastManager; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.StringHelper; -import com.google.gson.Gson; +import com.igexin.sdk.message.GTTransmitMessage; import com.qmuiteam.qmui.recyclerView.QMUIRVItemSwipeAction; import com.qmuiteam.qmui.recyclerView.QMUISwipeAction; +import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; @@ -33,15 +35,15 @@ public class NoticePageFragment extends BaseFragment { + private static final String TAG = "NoticePageFragment"; @BindView(R.id.swipeRecyclerView) RecyclerView swipeRecyclerView; private Context context; private List noticeBeans = new ArrayList<>(); private SwipeViewAdapter swipeViewAdapter; - private BroadcastManager broadcastManager; - private Gson gson; private DaoSession daoSession; + private static WeakReferenceHandler weakReferenceHandler; @Override protected int initLayoutView() { @@ -55,34 +57,20 @@ @Override protected void initData() { - gson = new Gson(); daoSession = BaseApplication.getDaoSession(); swipeViewAdapter = new SwipeViewAdapter(context); - //根据userName加载历史数据 - String userName = StringHelper.getUserName(); - if (TextUtils.isEmpty(userName)) { + //根据loginName加载历史数据 + String account = StringHelper.getUserAccount(); + if (TextUtils.isEmpty(account)) { return; } - noticeBeans = daoSession.queryBuilder(NoticeBean.class).where(NoticeBeanDao.Properties.UserName.eq(userName)).list(); + noticeBeans = daoSession.queryBuilder(NoticeBean.class) + .where(NoticeBeanDao.Properties.UserAccount.eq(account)) + .orderDesc(NoticeBeanDao.Properties.PushDate)//按时间顺序最新顺序排序 + .list(); swipeViewAdapter.setData(noticeBeans); - broadcastManager = BroadcastManager.getInstance(context); - broadcastManager.addAction(Constant.NOTICE_MSG, new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - if (action != null) { - if (Constant.NOTICE_MSG.equals(action)) { - String data = intent.getStringExtra("data"); - assert data != null; - NoticeBean noticeBean = gson.fromJson(data, NoticeBean.class); - noticeBeans.add(noticeBean); - //更新数据 - swipeViewAdapter.setData(noticeBeans); - } - } - } - }); + weakReferenceHandler = new WeakReferenceHandler(this); } @Override @@ -134,11 +122,31 @@ }); } - @Override - public void onDestroyView() { - super.onDestroyView(); - if (broadcastManager != null) { - broadcastManager.destroy(Constant.NOTICE_MSG); + /** + * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveMessageData(Context, GTTransmitMessage)}调用 + */ + public static void sendMessage(Message msg) { + weakReferenceHandler.sendMessage(msg); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(NoticePageFragment fragment) { + reference = new WeakReference<>(fragment); + } + + @Override + public void handleMessage(Message msg) { + NoticePageFragment noticePageFragment = reference.get(); + List noticeBeans = noticePageFragment.noticeBeans; + if (msg.what == Constant.PUSH_MESSAGE_DATA) { + NoticeBean noticeBean = (NoticeBean) msg.obj; + Log.d(TAG, "收到推送消息,更新列表: " + noticeBean.getCaseId()); + noticeBeans.add(0, noticeBean);//新消息永远放到第一个 + //更新数据 + noticePageFragment.swipeViewAdapter.setData(noticeBeans); + } } } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java index c29046a..8a2376a 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java @@ -19,6 +19,8 @@ import com.casic.dcms.mvp.view.IPhoneBookView; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import java.util.ArrayList; import java.util.List; @@ -105,7 +107,8 @@ deptTreeView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() { @Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { - callPhone(deptAndPersons.get(groupPosition).get(childPosition).getPersonPhone()); + PersonBean personBean = deptAndPersons.get(groupPosition).get(childPosition); + callPhone(personBean.getPersonName(), personBean.getPersonPhone()); return true; } }); @@ -115,15 +118,27 @@ /** * 直接呼叫电话 */ - private void callPhone(String personPhone) { + private void callPhone(String personName, String personPhone) { if (TextUtils.isEmpty(personPhone)) { ToastHelper.showToast("手机号为空,无法拨号", ToastHelper.ERROR); return; } - Intent intent = new Intent(); - intent.setAction(Intent.ACTION_CALL); - intent.setData(Uri.parse("tel:" + personPhone)); - startActivity(intent); + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("提示") + .setMessage("是否确定拨打[" + personName + "]的电话?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + Intent intent = new Intent(); + intent.setAction(Intent.ACTION_CALL); + intent.setData(Uri.parse("tel:" + personPhone)); + startActivity(intent); + } + }) + .create().show(); } @Override diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index f67e68b..74442db 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -31,6 +31,7 @@ Color.rgb(120, 104, 230)}; public static final String[] PAGE_TITLES = {"表格", "饼状图"}; + public static final String IP_KEY = "BASE_IP"; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; public static final int PERMISSIONS_CODE = 999; @@ -42,17 +43,16 @@ public static final int CASE_HANDLE = 0; public static final int CASE_VERIFY = 1; public static final int CASE_CHECK = 2; + public static final int PUSH_REGISTER = 11; + public static final int PUSH_MESSAGE_DATA = 12;//透传消息,包含消息的详细数据 + public static final int PUSH_CREATE_NOTIFICATION = 13; + public static final int LOGIN_OUT = 14; public static final double DEFAULT_LNG = 116.06639658728571; public static final double DEFAULT_LAT = 27.759547805536418; public static final double DELTA_LNG_10 = 0.00002536; // 10米范围经度值偏移量(大约) public static final double DELTA_LAT_10 = 0.00002256;// 10米范围纬度值偏移量(大约) - public static final String IP_KEY = "BASE_IP"; - public static final String LOGIN_OUT_ACTION = "login_out"; - public static final String NOTICE_MSG = "receive_ush"; - public static final String REGISTER_PUSH = "register_push"; - public static final String BASE_MAP_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt/MapServer";//崇仁城管地图底图 public static final String COMPONENT_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crbj/FeatureServer";//崇仁部件图层 } diff --git a/app/src/main/java/com/casic/dcms/utils/NotificationHelper.java b/app/src/main/java/com/casic/dcms/utils/NotificationHelper.java new file mode 100644 index 0000000..59fd47a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/NotificationHelper.java @@ -0,0 +1,130 @@ +package com.casic.dcms.utils; + +import android.annotation.SuppressLint; +import android.app.Notification; +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.Build; + +import com.casic.dcms.R; + +public class NotificationHelper { + private Context mContext; + @SuppressLint("StaticFieldLeak") + private static NotificationHelper notificationHelper; + private NotificationManager notificationManager; + + private NotificationHelper(Context context) { + this.mContext = context; + notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); + } + + /** + * 双重锁单例 + */ + public static NotificationHelper getInstance(Context context) { + if (notificationHelper == null) { + synchronized (NotificationHelper.class) { + if (notificationHelper == null) { + notificationHelper = new NotificationHelper(context); + } + } + } + return notificationHelper; + } + + private Notification.Builder createBuilder() { + Notification.Builder builder; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + String name = mContext.getResources().getString(R.string.app_name); + //创建渠道 + String id = name + "_DefaultChannel"; + NotificationChannel mChannel = new NotificationChannel(id, name, NotificationManager.IMPORTANCE_DEFAULT); + notificationManager.createNotificationChannel(mChannel); + builder = new Notification.Builder(mContext, id); + } else { + builder = new Notification.Builder(mContext); + } + return builder; + } + + /** + * 创建常驻状态栏通知 + * + * @param title 通知标题 + * @param message 通知内容 + */ + public Notification createKeepAlive(String title, String message) { + Notification.Builder builder = createBuilder(); + builder.setContentTitle(title) + .setContentText(message) + .setWhen(System.currentTimeMillis()) + .setSmallIcon(R.mipmap.app_logo); + Notification notification = builder.build(); + notification.flags = Notification.FLAG_NO_CLEAR; + return notification; + } + + /** + * 创建无动作的默认通知 + * + * @param title 通知标题 + * @param message 通知内容 + */ + public Notification createDefault(String title, String message) { + Notification.Builder builder = createBuilder(); + Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.normal); + builder.setContentTitle(title) + .setContentText(message) + .setWhen(System.currentTimeMillis()) + .setSmallIcon(R.drawable.normal_small) + .setLargeIcon(bitmap) + .setAutoCancel(true); + Notification notification = builder.build(); + notification.flags = Notification.FLAG_AUTO_CANCEL; + return notification; + } + + /** + * 创建有动作的默认通知 + * + * @param title 通知标题 + * @param message 通知内容 + * @param targetClass 点击通知之后跳转的页面 + */ + public Notification createDefault(String title, String message, String caseId, Class targetClass) { + Notification.Builder builder = createBuilder(); + Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.normal); + Intent intent = new Intent(mContext, targetClass); + intent.putExtra("id", caseId); + builder.setContentTitle(title) + .setContentText(message) + .setWhen(System.currentTimeMillis()) + .setSmallIcon(R.drawable.normal_small) + .setLargeIcon(bitmap) + .setContentIntent(PendingIntent.getActivity(mContext, 0, intent, 0)) + .setAutoCancel(true); + Notification notification = builder.build(); + notification.flags = Notification.FLAG_AUTO_CANCEL; + return notification; + } + + //显示通知 + public void push(int notificationId, Notification notification) { + if (notificationManager != null) { + notificationManager.notify(notificationId, notification); + } + } + + //取消通知 + public void cancel(int notificationId) { + if (notificationManager != null) { + notificationManager.cancel(notificationId); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 3947941..8767b1b 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -13,6 +13,14 @@ private static final String TAG = "StringHelper"; + public static void saveUserAccount(String account) { + SaveKeyValues.putValue("userAccount", account); + } + + public static String getUserAccount() { + return (String) SaveKeyValues.getValue("userAccount", ""); + } + public static void saveUserName(String name) { SaveKeyValues.putValue("userName", name); } diff --git a/app/src/main/java/com/casic/dcms/widgets/BigPictureDialog.java b/app/src/main/java/com/casic/dcms/widgets/BigPictureDialog.java index 3e6ed4e..f81e17e 100644 --- a/app/src/main/java/com/casic/dcms/widgets/BigPictureDialog.java +++ b/app/src/main/java/com/casic/dcms/widgets/BigPictureDialog.java @@ -8,6 +8,8 @@ import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; +import android.widget.ImageView; +import android.widget.LinearLayout; import android.widget.TextView; import androidx.appcompat.app.AlertDialog; @@ -31,6 +33,7 @@ private TextView pageNumberView; private ViewPager imagePagerView; private Window window; + private int maxWidth, maxHeight; private BigPictureDialog(Builder builder) { super(builder.mContext, R.style.CustomDialogStyle); @@ -49,6 +52,9 @@ initData(); window = getWindow(); + maxWidth = (int) (QMUIDisplayHelper.getScreenWidth(context) * 0.9); + maxHeight = (int) (QMUIDisplayHelper.getScreenHeight(context) * 0.8); + setCancelable(true); setCanceledOnTouchOutside(true); } @@ -57,8 +63,8 @@ public void onAttachedToWindow() { super.onAttachedToWindow(); WindowManager.LayoutParams layoutParams = window.getAttributes(); - layoutParams.width = (int) (QMUIDisplayHelper.getScreenWidth(context) * 0.9); - layoutParams.height = (int) (QMUIDisplayHelper.getScreenHeight(context) * 0.65); + layoutParams.width = maxWidth; + layoutParams.height = maxHeight; window.setAttributes(layoutParams); } @@ -105,6 +111,9 @@ View view = LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false); PhotoView photoView = view.findViewById(R.id.photoView); Glide.with(context).load(data.get(position)).into(photoView); + photoView.setScaleType(ImageView.ScaleType.FIT_XY); + LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(maxWidth, maxHeight); + photoView.setLayoutParams(layoutParams); container.addView(view); return view; } diff --git a/app/src/main/res/layout/dialog_big_picture.xml b/app/src/main/res/layout/dialog_big_picture.xml index dce0b9d..bffbb84 100644 --- a/app/src/main/res/layout/dialog_big_picture.xml +++ b/app/src/main/res/layout/dialog_big_picture.xml @@ -3,52 +3,35 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/cardViewLayout" android:layout_width="wrap_content" - android:layout_height="wrap_content" + android:layout_height="match_parent" app:cardCornerRadius="5dp"> - + android:layout_height="match_parent"> - + - - - - - - - - + android:layout_gravity="end|bottom" + android:layout_margin="@dimen/margin_10dp" + android:textColor="@color/white" + android:textSize="@dimen/textFontSize" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_read.xml b/app/src/main/res/layout/fragment_read.xml deleted file mode 100644 index c9edfbd..0000000 --- a/app/src/main/res/layout/fragment_read.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_unread.xml b/app/src/main/res/layout/fragment_unread.xml deleted file mode 100644 index cf20840..0000000 --- a/app/src/main/res/layout/fragment_unread.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - \ No newline at end of file